2012-06-29 107 views
1

如果我使用MD5WithRSAEncryption作爲簽名算法,那麼相應的隨機算法是什麼?
我試圖MD5PRNG但我得到:什麼是在這裏使用的正確的隨機算法?

java.security.NoSuchAlgorithmException:找不到

什麼是在這裏用來初始化KeyPairGenerator適當的隨機算法的SecureRandom MD5PRNG 實施?
就像SHA1PRNG當我們使用SHA256WithRSAEncryption

我的意思是:SHA256WithRSAEncryptionkey pair algorithm,而SHA1PRNG是由密鑰對算法中使用的random generator。例如。 keyPairGenerator.initialize(keySize, secureRandom);
(其中keyPairGenerator屬於KeyPairGenerator類)
它們在某種程度上取決於適當的配對嗎?我可以使用SHA1PRNG使用MD5WithRSAEncryption嗎?

+0

是的。 'SHA256WithRSAEncryption'是密鑰對算法,而'SHA1PRNG'是密鑰對算法使用的隨機生成器。它們在某種程度上取決於適當的配對嗎?我可以在'SHA1PRNG'上使用'MD5WithRSAEncryption'嗎? – Jim

+0

@Joey:我更新了OP – Jim

回答

3

基於確定性隨機位發生器(DRBG)的散列算法(如果有的話)無關緊要。

DRBG的輸出在統計上是隨機的;如果你能夠通過檢查輸出來確定有關位的來源的信息,那麼它就不適合加密使用。

順便說一下,當使用RSA-PSS方案時,RSA簽名算法使用RNG。較老的RSA簽名是確定性的(這是一個弱點)。

什麼確實物質是算法的有效強度。例如,您不想使用帶有3072位RSA簽名密鑰的SHA-1;哈希不如使用該密鑰的加密算法那樣強壯。 DRBGs也可以是classified by their strength。 DRBG的安全強度指示需要多少計算才能預測其輸出而不會給出其內部狀態。

一個好的基於散列的DRBG的安全強度與底層散列函數的安全強度相同。要了解這一點,請看NIST SP 800‑57 Part 1, Table 3.爲了保證安全性,112位是最小的,鼓勵128位或更多位。這意味着分別使用基於SHA-224或SHA-256的DRBG和2048或3072位的RSA密鑰。

+0

因此,如果我使用'MD5WithRSAEncryption'密鑰對生成器,沒有理由不使用'SHA1PRNG'? – Jim

+0

它是SHA-1的事實很好。我還沒有看到任何分析,但我猜想它會提供80位安全性,並且可以很好地匹配1024位RSA密鑰。不過,我強烈建議放棄MD5用於任何目的,因爲算法已被破壞。 – erickson

+0

@jim但是,總之,不,沒有理由不使用SHA1PRNG。 – erickson

2

SHA1PRNG的唯一問題是密鑰空間由於某種原因被限制爲20個字節。這是完全不必要的,因爲散列可以在幾乎無限的文本上執行。我不清楚爲什麼這個發生器的密鑰大小有限制。好消息是很容易複製源代碼並刪除該限制。壞消息是它與標準實現不兼容。