Java中的SecureRandom安全种子

Java中的SecureRandom安全种子,第1张

Java中的SecureRandom安全种子

不,您应该避免使用

SecureRandom(byte[])
构造函数。它既不安全又不可携带。

它是不可移植的,因为它在Windows和其他 *** 作系统上的行为有所不同。

在大多数 *** 作系统上,默认算法是“ NativePRNG”,该算法从 *** 作系统(通常是

"/dev/random"
)获取随机数据,而忽略您提供的种子。

在Windows上,默认算法为“ SHA1PRNG”,该算法将您的种子与计数器结合在一起,并计算结果的哈希值。

在您的示例中,这是个坏消息,因为输入(当前UTC时间(以毫秒为单位))具有相对较小的可能值范围。例如,如果攻击者知道RNG是在过去48小时内播种的,则他们可以将种子缩小到小于2
28个可能的值,即,您只有27位熵。

另一方面,如果您

SecureRandom()
在Windows上使用了默认构造函数,则它将调用本机
CryptoGenRandom
函数来获取128位种子。因此,通过指定您自己的种子,可以削弱安全性。

如果您确实想覆盖默认种子(例如,用于单元测试),则还应指定算法。例如

SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");sr.setSeed("abcdefghijklmnop".getBytes("us-ascii"));

另请参阅如何使用Java SecureRandom解决性能问题?
和此博客文章:http : //www.cigital.com/justice-league-
blog/2009/08/14/proper-use-of-javas-
securerandom/



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5561131.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存