SecureRandom:是否需要一次或每次初始化?

我们的团队正在使用SecureRandom生成密钥对列表(将SecureRandom传递给KeyPairGenerator)。对于以下两种选择中的哪一种,我们无法达成共识:

  1. 每次需要生成密钥对时都创建一个新实例

  2. 初始化静态实例并将其用于所有密钥对

通常哪种方法更好, 为什么

添加:我的直觉是第二种选择更安全。但我唯一的论点是基于以下假设的理论攻击:假随机性是从当前时间戳派生的:某人可能会看到密钥对的创建时间,猜测周围时间间隔中的时间戳,计算可能的伪随机序列,并获得关键材料。

添加:我对基于时间戳的确定性的假设是错误的。那就是Random和SecureRandom之间的区别。因此,答案似乎是:就安全性而言,这并不重要。

回答:

java.util.Random类不同,java.security.SecureRandom该类必须在每次调用时产生不确定的输出。

这意味着,对于java.util.Random,如果您每次需要一个新的随机数时都使用相同的种子重新创建一个实例,则基本上每次都将获得 相同的

结果。但是,SecureRandom保证不会这样做-因此,每次创建一个实例或创建一个新实例都 不会 影响它生成的随机字节的随机性。

那么,从正常的良好编码实践角度来看,为什么要创建太多实例呢?

以上是 SecureRandom:是否需要一次或每次初始化? 的全部内容, 来源链接: utcz.com/qa/410768.html

回到顶部