C#中的RSA加密技术

4
假设RSA算法在两台机器上创建了私钥,这两个密钥是否可能相同?
5个回答

3

简短回答:不可能。虽然理论上有可能,但即使你每秒钟创建一个密钥,在太阳爆炸之前也不太可能重复得到相同的密钥。


我可以补充一下,既然这个问题被提出来是作为一个“编程”问题,你实际上想说的是“它会发生在我的编程问题中吗?”对此的答案是强烈的否定。或者更确切地说,如果这种情况发生在你身上,那么你做错了。请参阅其他答案以了解理论上的可能性。事实上,在将其用于任何真实应用程序之前,您可能需要先了解一些密码学知识。 - averell

2

这与鸽巢原理有什么关系? - averell
给定足够(大量)生成的密钥,不仅可能,而且保证会发生冲突。 - Matthew Flaschen
理解了。由于密钥长度有限,可能的密钥数量也很有限,这是显而易见的。但实际上,没有实际的方法可以生成足够数量的密钥——这相当于暴力破解密钥。重要的是要理解,在实践中,“创建密钥”实际上意味着“随机选择一个”,并且可能的密钥数量非常大,实际上不可能在两次选择相同的密钥。 - averell

2
通常情况下,创建RSA密钥是通过随机选择极大的数字并检查其是否为质数来完成的。
考虑到所涉及数字的大小(100+位数),唯一可能发生碰撞的合理可能性是随机数生成器存在问题,导致(至少在某些情况下)它选择的数字不是非常随机。
这正是导致Netscape SSL系统(~4.0,如果我没记错)破解的问题。在这种特殊情况下,问题出在生成会话密钥上,但基本思想是一样的——许多用于加密的“随机”位实际上是相当可预测的,因此知道这些位的来源的攻击者可以很快地生成相同的“随机”数字,从而获得相同的会话密钥。

1
是的。但概率非常低。

0
在具有公钥(n,e)的RSA加密系统中,生成私钥(n,d)的方法是使n = p * q,其中p、q是大的N位质数,且ed - 1可以被欧拉函数(p-1)(q-1)整除。
要生成相同的私钥,您基本上需要生成相同的p、q、e,这是一个极小的概率。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接