这里使用的正确随机算法是什么?

时间:2012-06-29 06:12:59

标签: java security random bouncycastle jce

如果我使用MD5WithRSAEncryption作为签名算法,那么相应的随机算法是什么? 我试过了MD5PRNG,但我得到了:

  

java.security.NoSuchAlgorithmException:SecureRandom MD5PRNG   实施未找到

这里用于初始化KeyPairGenerator的适当随机算法是什么? 与我们使用SHA1PRNG

时的SHA256WithRSAEncryption相同

我的意思是:SHA256WithRSAEncryptionkey pair algorithm,而SHA1PRNG是密钥对算法使用的random generator。例如。 keyPairGenerator.initialize(keySize, secureRandom);
(其中keyPairGenerator属于KeyPairGenerator级) 它们是否在某种程度上取决于正确的配对?即。我可以将MD5WithRSAEncryption与SHA1PRNG一起使用吗?

2 个答案:

答案 0 :(得分:3)

确定性随机比特生成器(DRBG)下面的散列算法(如果有的话)无关紧要。

DRBG的输出在统计上是随机的;如果您能够通过检查输出来确定有关位源的任何信息,那么它将不适合加密使用。

顺便说一句,RSA签名算法在使用RSA-PSS方案时使用RNG。较旧的RSA签名是确定性的(这是一个弱点)。

重要的是算法的有效强度。例如,您不希望将SHA-1与3072位RSA签名密钥一起使用;哈希不像使用该密钥的加密算法那样强大。 DRBG也可以是classified by their strength。 DRBG的安全强度表示需要多少计算来预测其输出而不给出其内部状态。

基于散列的良好DRBG的安全强度与底层散列函数的安全强度相同。要找到它,请查看NIST SP 800‑57 Part 1, Table 3.为了获得强大的安全性,最低112位,鼓励128位或更多位。这意味着使用基于SHA-224或SHA-256的DRBG,分别使用2048或3072位RSA密钥。

答案 1 :(得分:2)

SHA1PRNG的唯一问题是密钥空间由于某种原因限制为20个字节。这是完全不必要的,因为可以在几乎无限量的文本上执行散列。我不清楚为什么这个发生器的密钥大小有限制。好消息是很容易复制源代码并删除该限制。坏消息是它与标准实现不兼容。