2014-03-26 289 views
0

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

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

阅读解释RSA的(德语)维基百科文章,他们在数学计算示例中使用了非常小的素数。这似乎工作,所以我希望密钥大小比20位短...注:我绝对不在乎目前的安全。这是另一个讨论。我只想得到正确的技术限制。

我知道Stackoverflow不应该用来请求工具,但是如果你知道一个.NET RSA库有一个下限,也许你只是想提一下这个附注​​。

+0

RSA背后的数学算法相当简单 - 也许它是您自己实现的一个选项?我不确定是否有任何库支持如此小的密钥大小,因为低于1024位的任何内容都是不安全的,此外,消息大小仅限于密钥的大小。 – ntoskrnl

+0

您不能使用这种短键的典型衬垫。例如,带有SHA1的OAEP本身占用328位。 – CodesInChaos

+0

如果您想要较短的签名,请考虑DSA和类似的算法。一个320位DSA签名价格昂贵,320位RSA密钥可能在一台PC上被破坏。对于更小的签名(DSA的一半大小),您可以使用BLS方案,但实施起来有点棘手。 – CodesInChaos

回答

1

如果你不关心安全性,然后,你可以用钥匙大小< 384位实现RSA。 它不被建议为不安全,但它的作品。

在这slide Dan Boneh举例说明了一个大约128位的私钥。 (其余的课程也值得一看)。

1

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

因此,如果您的数据被签名/加密的块长度较大,您将不得不使用与RSA结合使用的块链模式。

0

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

从“技术限制”的角度来看,您的RSA密钥必须有比您要签名的值多两倍的位数。通常情况下,您会签署数据散列而不是直接签署数据。