让我们说我需要良好的种子来初始化Java程序中的伪随机生成器(PRNG),而且我无法访问任何硬件随机生成器。
如何在没有任何用户交互的情况下从JVM获取熵?
答案 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实现有一些非常糟糕的属性,仅举一例)。