一 点睛
密码破译者不知道D,但是却知道公钥中的E和N。在生成密钥对的过程中,D原本也是由E通过一定的计算求出来的,那么密码破译者是否能够通过E求出D呢?不能。
生成密钥对的方法中,在D和E的关系式中:
E*D mod L=1
出现的数字L,而L是lcm(p-1,q-1),因此由E计算D需要使用p和q,但是密码破译者并不知道p和q,因此不可能通过和生成密钥对时相同的计算方法来求出D。
对于RSA来说,有一点很重要,那就是质数p和q不能被密码破译者知道。把p和q交给密码破译者与把私钥交给密码破译者是等价的。
二 对N进行质因数分解攻击
p和q不能被密码破译者知道,但是N=p*q,而且N是公开的,那么能不能由N求出p和q呢?p和q都是质数,因此由N求p和q只能通过将N进行质因数分解来完成。因此,可以说:
一旦发现了对大整数进行质因数分解的高效算法,RSA就能够被破译。
如果能够快速地对大整数进行质因数分解,就能够将N分解成质数p和q,然后就可以求出D,这是事实。
然而,现在我们还没有发现对大整数进行质因数分解的高效算法,而且也尚未证明质因数分解是否真的是非常困难的问题,甚至也不知道是否存在一种分解质因数的简单方法。
三 通过推测p和q进行攻击
即便不进行质因数分解,密码破译者还是有可能知道p和q。
由于p和q是通过伪随机数生成器产生的,如果伪随机数生成器的算法很差,密码破译者就有可能推出出p和q,因此使用能够被推测出来的随机数是非常危险的。
四 其他攻击
只要对N进行质因数分解并求出p和q,就能够求出D。
但是至于“求D”与“对N进行质因数分解”是否是等价的,这个问题需要通过数学方法证明。2004年已证明了“求D”与“对N进行质因数分解”在确定性多项式时间内是等价的。
这样的方法目前还没有出现,而且我们也不知道是否真的存在这样的方法。