Java 当种子带有随机性时,随机性会减弱吗?

Java 当种子带有随机性时,随机性会减弱吗?,java,random,cryptography,Java,Random,Cryptography,来自java.util.Random的java.security.SecureRandom的种子会削弱加密强随机数生成器吗 我看到了这段代码,想知道为什么要用这种特定的方式来做 randomGenerator=new SecureRandom(); 最终随机rnd=新随机(); randomGenerator.setSeed(rnd.nextLong()); 从文档中可以看出,setSeed的调用永远不会减少随机性。那么,为什么要调用setSeed public void setSeed(长种

来自
java.util.Random
java.security.SecureRandom
的种子会削弱加密强随机数生成器吗

我看到了这段代码,想知道为什么要用这种特定的方式来做

randomGenerator=new SecureRandom();
最终随机rnd=新随机();
randomGenerator.setSeed(rnd.nextLong());
从文档中可以看出,
setSeed
的调用永远不会减少随机性。那么,为什么要调用
setSeed

public void setSeed(长种子)

使用给定长种子中包含的八个字节重新设定此随机对象的种子。给定的种子是对现有种子的补充,而不是替代因此,重复呼叫保证不会减少随机性。


当使用CSPRNG时,加密强度与用于种子的熵的位强度相同

CSPRNG将产生几乎无限量的伪随机熵,尽管在现实中,该伪随机熵的实际强度仅和CSPRNG潜在种子状态的熵一样强

因此,如果您只使用
java.util.Random
中的一个种子,您将遇到麻烦

谢天谢地,内核和其他源代码用于为
java.security.SecureRandom
使用的系统CSPRNG播种,因此,如上面的示例代码所示,向其中“添加”/“混合”并不能使其“减少”随机性或降低熵

因此:

  • 是的,
    java.util.Random
    种子毫无价值
  • 这是正常的,因为系统已经从硬件中断、引导抖动和其他噪声中植入了CSPRNG
  • 写这篇文章的人:
    randomGenerator.setSeed(rnd.nextLong())不应涉及加密工程
  • 那么,为什么要叫setSeed呢?因为密码很混乱,代码的作者也很混乱。