RSA GCD 攻击攻击原理假设:
12n1 = p * q1n2 = p * q2
p 是同一个素数,q1 和 q2 不同
攻击者可以计算:
1p = gcd(n1, n2)
因为 p 同时整除 n1 和 n2,并且 n1 和 n2 除了 p 之外没有其他公共因子(q1 和 q2 不同,且都是素数)
一旦得到 p,立刻得到:
12q1 = n1 / pq2 = n2 / p
进而恢复私钥 d1 和 d2
2026-05-12561 字3 分钟
RSA 共模攻击
RSA 共模攻击前置条件有两把 “公钥”:(n, e1) 和 (n, e2)
注意:n 完全相同,但 e1 与 e2 不同且互质
同一份明文 m,分别用这两把公钥加密,生成了两个密文:
c1 = m^e1 mod n
c2 = m^e2 mod n
如果只知道 c1, c2, e1, e2, n,没有私钥也能算出 m
贝祖等式共模攻击完全建立在贝祖等式上
如果两个整数 e1 和 e2 互质,那么存在整数 s 和 t 使得:
1e1 * s + e2 * t = 1
在 Python 里我们可以直接用 gmpy2.gcdext(e1, e2),它会返回 (g, s, t),其中 g=1
2026-05-11447 字3 分钟
RSA
RSA欧拉函数 φ(n)φ(n) 表示 “小于等于 n 且与 n 互质的正整数的个数”
如果 n 是质数 p,那么 φ(p) = p - 1(因为 1,2,…,p-1 都和 p 互质)
如果 n = p * q,且 p、q 都是质数,那么 φ(n) = (p - 1) * (q - 1)
例如 p = 5, q = 11,则 n = 55,φ(55) = 4 * 10 = 40
密钥生成选两个大质数 p 和 q实际中 p、q 有 1024 位或 2048 位,这里我们用小数字演示
12p = 61q = 53
计
2026-05-11267 字2 分钟
Vigenère 密码
Vigenère 密码基本思想Vigenère 密码是一种多表代换密码,它用一个关键词给明文中的每一个字母施加不同的凯撒移位
加密步骤步骤一:对齐密钥将密钥不断重复,直到长度覆盖整个明文
12345明文:ATTACKATDAWN密钥:LEMON明文: A T T A C K A T D A W N密钥: L E M O N L E M O N L E
步骤二:字母 → 数字将 A–Z 映射为 0–25:
1A=0, B=1, C=2, ..., Z=25
步骤三:逐位加密对于明文的第 i 个字母 P_i,对应密钥的第 i 个字母 K_i
用公式表示的话如下,其实就是位移,例如明文 h