3

我们使用SecureRandom如下(使用Java8):

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

正在使用的算法是NativePRNG.

我们应该定期播种吗?

正如它所写的那样,NativePRNG 不断地从操作系统接收熵(通过从 /dev/(u)random 读取)

你怎么看?

4

2 回答 2

3

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 的安全提供程序。

于 2019-09-22T21:09:22.477 回答
-1

Java8 文档说: SecureRandom 必须产生不确定的输出。

于 2017-07-25T09:59:10.733 回答