如何从JVM获取熵?

时间:2017-02-25 14:03:47

标签: java random cryptography jvm secure-random

让我们说我需要良好的种子来初始化Java程序中的伪随机生成器(PRNG),而且我无法访问任何硬件随机生成器。

如何在没有任何用户交互的情况下从JVM获取熵?

2 个答案:

答案 0 :(得分:3)

  

SHA-1将被折旧

此漏洞与CSPRNG构建无关。

  

如何从JVM获取熵?

SecureRandom是各种安全提供商的通用外观,including OS-specific entropy sources

答案 1 :(得分:2)

您可以使用generateSeed(int)getSeed(int)静态检索也用于SecureRandom本身的种子输入。然后,您只需使用该种子为您自己的CSPRNG播种。

实际上没有必要这样做,正如8472已经解释过的那样,但如果你想生成自己的CSPRNG(or DRBG as it is known to NIST),那么没有什么能阻止你 - 只需在{{{{ 1}}实施。

你自己产生更好的熵的可能性很小。您可以使用标记为SecureRandom的方法将标准System.nanoTime()添加用于CSPRNG的内部状态。在此之前我会调用其中一个setSeed方法,否则你可以替换状态而不是向其添加熵。

请注意,可以扩展nextXxx;大多数其他加密相关类都不是这种情况。实施CSPRNG并非心虚;你有可能创建一个更好的CSPRNG,因为SHA1PRNG是最小的(Apache实现有一些非常糟糕的属性,仅举一例)。