【问题标题】:RSA Cryptography in c#c#中的RSA密码学
【发布时间】:2010-06-14 06:25:11
【问题描述】:

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

【问题讨论】:

    标签: cryptography rsa


    【解决方案1】:

    简短回答:不。理论上存在可能性,但即使您每秒创建一个密钥,您也不可能在太阳爆炸之前两次获得相同的密钥。

    【讨论】:

    • 我可以补充一点,既然这个问题是作为“编程”问题提出的,那么您实际上是想说“在我的编程问题中它会发生在我身上吗”?答案是坚决不。或者更确切地说,答案是,如果这发生在你身上,你就做错了。请参阅其他答案以了解理论上的可能性。事实上,在将其用于任何实际应用程序之前,您可能需要先阅读一些密码学知识。
    【解决方案2】:

    是的。你听说过pigeon-hole principle吗?

    【讨论】:

    • 这和鸽巢原理有什么关系?
    • 给定足够(大量)生成的密钥,这不仅是可能的,而且保证会发生冲突。
    • 点了。由于密钥长度是有限的,因此可能的密钥数量是有限的,这是显而易见的。尽管如此,在实践中,没有实用的方法来生成足够数量的密钥——这相当于暴力破解密钥。理解答案的关键 重要的是要理解“创建密钥”实际上意味着在实践中“随机选择一个”。而且可能的键的数量是如此之大,以至于在实践中不可能两次选择相同的键。
    【解决方案3】:

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

    鉴于所涉及数字的大小(100 位以上),发生冲突的唯一合理可能性是随机数生成器是否存在问题,因此(至少在某些情况下)它选择的数字不是非常随机。

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

    【讨论】:

      【解决方案4】:

      是的。但是概率很低

      【讨论】:

        【解决方案5】:

        在具有公钥 (n,e) 的 RSA 密码系统中,生成私钥 (n,d) 使得 n = p * q,其中 p, q 是大 N 位素数,ed − 1 可以是均分除以 (p − 1)(q − 1)。

        要生成相同的私钥,您本质上需要生成相同的 p,q,e,所以这是非常小的概率。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-18
          • 1970-01-01
          • 2020-01-24
          • 1970-01-01
          • 2023-01-19
          相关资源
          最近更新 更多