先描述一下RSA密码体制:
RSA密码体制:
考虑RSA密码体制:n = pq,其中p 和q 是素数。ϕ ( n ) = ( p − 1 ) ( q − 1 ) 。我们知道RSA的加解密主要进行模幂运算,如果利用快速平方乘方法的话,选择一个较小的解密指数会大幅度降低计算时间,提高解密效率。但是这里指出:应该避免解密指数过小。
这里介绍由M.Wiener提出的一种攻击,可以计算出解密指数a。前提条件是:
并且满足:如果n 的二进制表示有L比特,那么当e的二进制表示位数小于L/4-1,p和q 相距不太远时,攻击才算有效。
由连分数的理论可知,此时t/a是b/n的一个收敛子。
因为n和b都是公开的,计算收敛子是容易的。我们只要计算出b/n的所有收敛子,看哪个收敛子可以分解n。(如果t/a是收敛子,我们就有了a和t的值,依据ϕ(n)=(ab−1)/t 就可以计算出ϕ ( n ) ,进而可以解一元二次方程求出p,以此为判断依据确定哪个收敛子才是真正的t和a。)
验证结束之后,我们就可以得到a的值,不仅破解了密码,大整数n 也被分解了。