我们正在使用SecureRandom
,如下所示(使用Java8
):
import java.security.SecureRandom;
private SecureRandom random = new SecureRandom();
使用的算法是NativePRNG
。
我们应该定期播种吗?
正如它写的那样NativePRNG不断从操作系统接收熵(通过从/ dev /(u)中随机读取)
您怎么看?
答案 0 :(得分:0)
https://www.synopsys.com/blogs/software-security/proper-use-of-javas-securerandom/建议在生成“大量PRNG输出”时重新设置SecureRandom实例的种子。但是,并没有具体说明什么是大笔款项。这可能取决于所使用的SecureRandom算法。
Java文档未声明将进行播种。如果特定的算法支持该算法,则在调用SecureRandom.getInstance
时需要明确指定该算法。
在Java 9中,添加了基于NIST.SP.800-90Ar1的DRBG实现(JEP 273)。这指定了当种子寿命结束时,发生器应重新设置种子。您还可以看到它是相应实现的:sun.security.provider.AbstractDrbg
(字段reseedCounter
)
但是,请记住,并不要求所有Java平台都需要支持DRBG(尽管大多数人可能会支持)。因此,请处理无法适当使用它或包含提供DRBG的安全提供程序的情况。
答案 1 :(得分:-1)
Java8 doc说:SecureRandom必须产生非确定性输出。