【问题标题】:Minimum key length of RSARSA的最小密钥长度
【发布时间】:2014-03-26 22:10:52
【问题描述】:

当我使用 RSA 在 C# 中实现许可证密钥机制时,我遇到了 RSACryptoServiceProvider class,它被限制为至少 384 位密钥大小。此密钥长度直接影响我创建的签名(==许可证密钥)。

一般来说 384 位是 RSA 的技术限制,还是可以用更短的密钥大小成功实现 RSA?

阅读解释 RSA 的(德语)*文章,他们在数学计算示例中使用了非常小的素数。这似乎可行,所以我希望密钥大小小于 20 位......注意:我现在绝对不关心安全性。那是另一个讨论。我只想弄清技术限制。

我知道 * 不应该被用来询问工具,但如果你知道 .NET RSA 库有一个下限,也许你只是想把它作为附注提及。

【问题讨论】:

  • RSA 背后的数学原理相当简单——也许可以自己实现它?我不确定是否有任何库支持如此小的密钥大小,因为低于 1024 位的任何内容都是不安全的,此外,消息大小仅限于密钥的大小。
  • 您不能使用带有此类短键的典型填充。例如,带有 SHA1 的 OAEP 本身占用 328 位。
  • 如果您想要更短的签名,请考虑 DSA 和类似算法。破解 320 位 DSA 签名的成本很高,可以在单台 PC 上破解 320 位 RSA 密钥。对于更小的签名(DSA 大小的一半),您可以使用 BLS 方案,但实现起来有点棘手。

标签: c# cryptography rsa


【解决方案1】:

如果您不关心安全性,那么是的,您可以实现密钥大小

slideDan Boneh 中举了一个例子,其中的私钥约为 128 位。 (他的其他课程也值得一看)。

【讨论】:

    【解决方案2】:

    不是真正的技术限制,但缺点是随着私钥大小的减小(因此模数减小),块大小也会减小。

    因此,如果您要签名/加密的数据比块长度大,您将不得不使用与 RSA 结合使用相当少见的块链接模式。

    【讨论】:

      【解决方案3】:

      从安全角度来看,384 位 RSA 可以在几个小时内破解,512 位 RSA 在一两周内即可破解。如果您担心签名大小,使用 160 位密钥的 ECDSA 将生成 40 字节的签名。 BLS 可以做到一半,但没有好的库。

      从“技术限制”的角度来看,您的 RSA 密钥的位数必须是您要签名的值的两倍多一点。通常,您对数据的哈希进行签名,而不是直接对数据进行签名。

      【讨论】:

        最近更新 更多