我应该定期重新检查SecureRandom还是自动发生?

时间:2017-07-25 08:55:59

标签: java security random secure-random

我们正在使用SecureRandom,如下所示(使用Java8):

import java.security.SecureRandom;
private SecureRandom random = new SecureRandom();

使用的算法是NativePRNG

我们应该定期播种吗?

正如它写的那样NativePRNG不断从操作系统接收熵(通过从/ dev /(u)中随机读取)

您怎么看?

2 个答案:

答案 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必须产生非确定性输出。