【问题标题】:What is the correct random algorithm to use here?在这里使用的正确随机算法是什么?
【发布时间】:2012-06-29 06:12:58
【问题描述】:

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

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

这里使用什么正确的随机算法来初始化KeyPairGenerator
当我们使用SHA256WithRSAEncryption 时就像SHA1PRNG

我的意思是:SHA256WithRSAEncryptionkey pair algorithm,而 SHA1PRNGrandom generator 供密钥对算法使用。例如。 keyPairGenerator.initialize(keySize, secureRandom);
(其中keyPairGenerator 属于KeyPairGenerator 类)
它们是否以某种方式依赖于正确的配对?即我可以将 MD5WithRSAEncryption 与 SHA1PRNG 一起使用吗?

【问题讨论】:

  • 是的。 SHA256WithRSAEncryption 是密钥对算法,而SHA1PRNG 是密钥对算法使用的随机生成器。它们是否以某种方式依赖于正确的配对?即我可以将MD5WithRSAEncryptionSHA1PRNG 一起使用吗?

标签: java security random bouncycastle jce


【解决方案1】:

确定性随机位生成器 (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 密钥。

【讨论】:

  • 所以如果我使用MD5WithRSAEncryption 密钥对生成器,没有理由不使用SHA1PRNG
  • 它是 SHA-1 的事实很好。我还没有看到任何分析,但我猜它提供了 80 位的安全性,并且非常适合 1024 位 RSA 密钥。但是,我强烈建议出于任何目的放弃 MD5,因为该算法已损坏。
  • @jim 但是,简而言之,不,没有理由不使用 SHA1PRNG。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多