2010-05-24 142 views
1

帶有 的RSA實現僅限Bouncy Castle允許對單個數據塊進行加密 。 RSA算法不適用於 流數據,不應該以這種方式使用 。在這樣的情況下,你 應該使用加密數據的 隨機產生的密鑰和對稱 密碼,之後,你應該使用RSA, 加密 隨機生成的密鑰,然後發送加密數據和 加密的隨機關鍵其他 結束,他們可以扭轉過程 (即解密隨機密鑰使用 他們的RSA私鑰,然後解密 的數據)。用於Java的RSA實現,替代BC

我無法使用使用對稱密鑰的解決方法。那麼,RSA的其他實現是否比Bouncy Castle還要多?

+0

的目的是什麼,你流的加密的數據? – laz 2010-05-24 19:41:47

回答

4

這個限制不僅僅是Bouncy Castle隨機發明的東西,而且使用對稱密鑰並不是一種「解決方法」:這是正確的做法。

RSA算法本質上不適合加密大量數據。如果你確實真的真的想要在大量數據上使用它,那麼你可以將數據分成足夠小的塊,然後對每個塊進行加密。但這不是標準的做法,你可能遇到你沒有想到的安全問題,而像AES這樣的分組密碼有處理你可能遇到的問題的標準方法(查看block modes - 基本上存在安全問題例如使用相同的密鑰多次加密相同的數據,並且塊模式是內置的方式來處理這種情況)。

我真的只是堅持使用對稱加密進行流式傳輸的標準做法,並使用RSA加密對稱密鑰(實際上沒有其他)。

1

是的,JDK自帶了一個,但它不會對你有任何好處。通常,這是使用RSA進行加密的方式。您生成一個隨機對稱密鑰,並用它來加密您的數據。您使用RSA加密對稱密鑰並進行傳輸。

如果你只想用RSA進行加密而省略對稱部分,你可以做到這一點(使用BC或不使用),但要警告的是,它將非常緩慢的加密或解密,佔用很多空間典型的選擇。

1

所有的RSA實現都會有類似的警告。這就是RSA算法的本質。

使用所述的對稱密鑰不是「解決方法」。這是正確的。」如果有可能採用更好的加密技術,這將是值得追求的。

1

您可以爲每個數據「塊」調用一次RSA。不要這樣做。

  • RSA不是分組密碼。它接受[0,p × q]範圍內的輸入,而不是[0,2 n − 1]。在明顯的實現中,每個輸出塊至少比輸入塊大1個比特,這不是理想的。
  • RSA乘法。使用RSA ()來表示RSA加密密鑰和
    • RSA (0)= 0
    • RSA (1)= 1
    • RSA (一* b)= RSA和(a)和 × RSA的(a)

你爲什麼不能生成對稱密鑰?

+0

因爲我實現(是不是錯了)的規範說來。 – 2010-05-26 19:03:40

+2

然後固定規範,因爲它要麼真正的「要求」(所以它的延展性),或如此令人難以置信的錯誤闕需要有人被槍殺。在你所描述的令人難以置信的方式使用RSA是不好的做法,** **就算你知道塊加密模式和填充PKCS#N. – 2010-05-31 15:23:09