Wiener’s Attack
适用情况:e过大或过小。
在e过大或过小的情况下,可使用算法从e中快速推断出d的值。
Wiener 表示如果满足:
d<1/3n1/4
那么一种基于连分数的特殊攻击类型就可以危害 RSA 的安全。此时需要满足:
q<p<2q
如果满足上述条件,通过 Wiener Attack 可以在多项式时间中分解 n,思路如下:
N = pq
φ(n)=(p−1)(q−1)=pq−(p+q)+1=N−(p+q)+1
∵p, q 非常大 ,
∴pq≫p+q,
∴φ(n)≈N
∵ed≡1modφ(n),
∴ed−1=kφ(n),
这个式子两边同除 dφ(n)
可得:
eφ(n)−kd=1dφ(n)
∵φ(n)≈N,
∴eN−kd=1dφ(n),同样 dφ(n) 是一个很大的数,所以 eN 略大于 kd, e 和 N 是我们是知道的,公钥中给我们的,所以我们计算出 eN后,比它略小的 kd 用计算 eN 的连分数展开,依次算出这个分数每一个渐进分数,由于 eN 略大于 kd,wiener 证明了,该攻击能精确的覆盖 kd。
例题:
在不分解n的前提下,求d。
给定:
e = 1405869541701533407158801034658674979053991328