通常情况下,创建RSA密钥是通过随机选择极大的数字并检查其是否为质数来完成的。考虑到所涉及数字的大小(100+位数),唯一可能发生碰撞的合理可能性是随机数生成器存在问题,导致(至少在某些情况下)它选择的数字不是非常随机。这正是导致Netscape SSL系统(~4.0,如果我没记错)破解的问题。在这种特殊情况下,问题出在生成会话密钥上,但基本思想是一样的——许多用于加密的“随机”位实际上是相当可预测的,因此知道这些位的来源的攻击者可以很快地生成相同的“随机”数字,从而获得相同的会话密钥。
在具有公钥(n,e)的RSA加密系统中,生成私钥(n,d)的方法是使n = p * q,其中p、q是大的N位质数,且ed - 1可以被欧拉函数(p-1)(q-1)整除。要生成相同的私钥,您基本上需要生成相同的p、q、e,这是一个极小的概率。