RSA 低指数广播攻击
攻击背景
当同一份明文消息 m 使用 相同的低加密指数 e(例如 e = 3 或 e = 5)
但不同的模数 N1, N2, ... , Nk 分别加密并发送给 k 个接收者时,攻击者如果能截获至少 e 个密文,就可以在不分解任何模数的情况下恢复出明文
该攻击属于 Hastad 广播攻击的一个特例(无随机填充时)
数学原理
以 e = 3 为例
加密过程
1 | c1 = m^3 mod N1 |
因为 N1, N2, N3 两两互质,我们可以使用中国剩余定理(CRT) 求解同余方程组
1 | x ≡ c1 (mod N1) |
CRT 给出唯一解 x 在模 N1 * N2 * N3 下的值
由同余式可知
1 | x ≡ m^3 (mod N1) |
由于 m^3 同时满足这三个同余式,且解在 [0, N1*N2*N3) 内唯一,因此一定有
1 | x = m^3 (在整数意义上,而非仅仅是模意义下) |
因为 m < N_i 对 i=1,2,3 成立,所以 m^3 < N1 * N2 * N3
而 CRT 给出的解 x 满足 0 ≤ x < N1*N2*N3,所以 x 必然等于整数 m^3
最后,攻击者只需在整数上对 x 开立方根即可恢复明文
推广到任意 e
假设攻击者获得了 k 个密文,其中 k ≥ e,对应模数 N1, N2, ..., Nk(两两互质)
CRT 给出唯一解 x 满足
1 | x ≡ m^e (mod N_i) 对所有 i = 1..k |
因为 m < N_i,所以 m^e < N1 * N2 * ... * Nk(乘积至少包含 e 个因子,每个大于 m)
因此整数 x 恰好等于 m^e,直接开 e 次方根即得 m
实战案例
Quick Math(低指数广播攻击)

1 | from math import prod, gcd |