首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SecureRandom:一次还是每次都需要?

SecureRandom:一次还是每次都需要?
EN

Stack Overflow用户
提问于 2008-11-17 14:03:32
回答 8查看 15.3K关注 0票数 33

我们的团队正在使用SecureRandom来生成密钥对列表( SecureRandom传递给KeyPairGenerator)。我们不能就以下两种选择中的哪一种选择达成协议:

  1. 每次需要生成密钥对时,都创建一个新实例
  2. 初始化静态实例并将其用于所有密钥对

哪种方法更好,为什么?

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

补充说:我关于基于时间戳的决定论的假设是错误的。这就是兰登和SecureRandom之间的区别。所以,看起来答案是:就安全性而言,这并不重要。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-11-17 14:15:07

java.util.Random类不同,java.security.SecureRandom类必须对每个调用产生不确定的输出。

这意味着,在java.util.Random的情况下,如果每次需要新的随机数时都要用相同的种子重新创建一个实例,那么每次都会得到相同的结果。但是,SecureRandom保证不会这样做-因此,每次创建单个实例或创建一个新实例并不会影响它生成的随机字节的随机性。

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

票数 19
EN

Stack Overflow用户

发布于 2010-07-19 04:08:34

对于SecureRandom,您可能需要考虑通过这样的调用来偶尔重新播种(在大多数情况下使用系统熵):

代码语言:javascript
复制
mySecureRandom.setSeed(mySecureRandom.generateSeed(someInt));

以便给潜在的攻击者一些更短的时间来发现你的钥匙。

正义联盟博客上有一些关于这个问题的很好的评论。

票数 17
EN

Stack Overflow用户

发布于 2008-11-17 14:07:33

初始化静态实例并将其用于所有密钥对。这不会是随机的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/295628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档