2012-06-29 78 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个字节。这是完全不必要的,因为散列可以在几乎无限的文本上执行。我不清楚为什么这个发生器的密钥大小有限制。好消息是很容易复制源代码并删除该限制。坏消息是它与标准实现不兼容。