Java 我应该定期重新设定SecureRandom还是自动进行?
我们使用的Java 我应该定期重新设定SecureRandom还是自动进行?,java,security,random,secure-random,Java,Security,Random,Secure Random,我们使用的SecureRandom如下(使用Java8): 使用的算法是NativePRNG 我们应该定期播种吗 正如本文所述,NativePRNG不断地从操作系统接收熵(通过读取/dev/(u)random) 你怎么看?Java8文档说:SecureRandom必须生成非确定性输出。建议在生成“大量PRNG输出”时重新设置SecureRandom实例的种子。然而,它并没有具体说明什么是大额。这可能取决于使用的SecureRandom算法 Java文档没有声明将进行重新播种。如果特定的算法支持它
SecureRandom
如下(使用Java8
):
使用的算法是NativePRNG
我们应该定期播种吗
正如本文所述,NativePRNG不断地从操作系统接收熵(通过读取/dev/(u)random)
你怎么看?Java8文档说:SecureRandom必须生成非确定性输出。建议在生成“大量PRNG输出”时重新设置SecureRandom实例的种子。然而,它并没有具体说明什么是大额。这可能取决于使用的SecureRandom算法 Java文档没有声明将进行重新播种。如果特定的算法支持它,则在调用
SecureRandom.getInstance
时需要显式指定该算法
在Java 9中,添加了基于NIST.SP.800-90Ar1的DRBG实现()。这指定当种子寿命结束时,生成器应自行重新设定种子。您还可以看到,这是相应地实现的:(fieldreseedCounter
)
但是,请记住,并不要求所有Java平台都需要支持DRBG(尽管很可能会)。因此,应适当处理无法使用的情况,或包括提供DRBG的安全提供商。SecureRandom是否自行重新设定种子?你知道怎么做吗?同样的文档也说“许多SecureRandom实现是以伪随机数生成器(PRNG)的形式实现的,这意味着它们使用确定性算法从真正的随机种子生成伪随机序列。”这令人困惑。Java9将方法添加到SecureRandom。如果API不被认为是一个重要的特性,他们通常不会向API中添加一些内容。
import java.security.SecureRandom;
private SecureRandom random = new SecureRandom();