2014-03-26 286 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密鑰必須有比您要簽名的值多兩倍的位數。通常情況下,您會簽署數據散列而不是直接簽署數據。