Cryptography c语言中的RSA密码#

Cryptography c语言中的RSA密码#,cryptography,rsa,Cryptography,Rsa,假设一个RSA算法在两台机器上创建了私钥。两个键是否可能相同?是。你听说过吗?是的。但是概率非常低。简短回答:不。理论上是有可能的,但即使你每秒创建一个密钥,你也不可能在太阳爆炸之前获得相同的密钥两次。通常,你通过随机选择非常大的数并检查它们是否为素数来创建RSA密钥 考虑到所涉及的数字的大小(100+位数),唯一合理的冲突可能性是随机数生成器出现问题,因此(至少在某些情况下)它选择的数字不是非常随机的 这正是导致Netscape中SSL系统中断的那种问题(~4.0,如果内存可用的话)。在这种情

假设一个RSA算法在两台机器上创建了私钥。两个键是否可能相同?

是。你听说过吗?

是的。但是概率非常低。简短回答:不。理论上是有可能的,但即使你每秒创建一个密钥,你也不可能在太阳爆炸之前获得相同的密钥两次。

通常,你通过随机选择非常大的数并检查它们是否为素数来创建RSA密钥

考虑到所涉及的数字的大小(100+位数),唯一合理的冲突可能性是随机数生成器出现问题,因此(至少在某些情况下)它选择的数字不是非常随机的


这正是导致Netscape中SSL系统中断的那种问题(~4.0,如果内存可用的话)。在这种情况下,问题在于生成会话密钥,但基本思想是一样的——所使用的相当多的“随机”位实际上是可预测的,因此知道这些位的来源的攻击者可以相当快地生成相同的“随机”数,因此,相同的会话密钥。

在具有公钥(n,e)的RSA密码系统中,私钥(n,d)的生成使得n=p×q,其中p,q是大的n位素数,并且− 1可平均除以总和(p− 1) (q)− 1)


要生成相同的私钥,基本上需要生成相同的p、q、e,因此概率非常小。

这与鸽子洞原理有什么关系?如果生成的密钥数量足够(大量),不仅是可能的,而且保证会发生冲突。注意。因为密钥长度是有限的,所以可能的密钥数量是有限的,这是显而易见的。然而,在实践中,并没有实际的方法来生成足够数量的密钥——这将相当于强制使用密钥。理解答案的关键理解“创建密钥”实际上意味着在实践中“随机选择一个”,这一点很重要。而且可能的键的数量如此之多,以至于在实践中永远不会选择同一个键两次。我可以补充一点,既然这个问题是作为一个“编程”问题提出的,你实际上是想说“在我的编程问题中,它会发生在我身上吗”?答案是强烈的否定。或者更确切地说,答案是,如果这种情况发生在你身上,你就做错了。参见其他答案了解理论可能性。事实上,在将其用于任何实际应用程序之前,您可能需要先阅读一些关于加密的知识。