【发布时间】:2014-06-09 00:47:28
【问题描述】:
在学习初学者的加密课程时,我试图掌握 Java 的 SecureRandom 对象。我想我理解的是:
a) 无论你知道一个随机数序列有多长,都无法预测序列中的下一个随机数。
b) 不管你知道一个随机数序列有多长,除了暴力猜测之外,没有办法知道是哪个种子用来启动它们的。
c) 您可以请求各种大小的安全随机数。
d) 您可以为新创建的 SRNG 播种各种不同大小的值。您创建并使用相同值作为种子的每个新创建的 SRNG 都会产生相同的随机数序列。
我应该补充一点,我假设这段代码是在 Windows 上使用的:
Random sr = SecureRandom.getInstance("SHA1PRNG", "SUN");
我的基本理解正确吗?提前致谢。
我还有一些问题想问那些在加密方面相当专业的人。它们与播种 SRNG 相关,而不是让它在首次使用时自行播种。
e) 如果您使用长整数而不是 8 字节数组作为 SRNG 的种子,那么生成的随机数有什么区别?
f) 如果我使用 256 字节作为 SRNG 的种子,是否还有其他种子可以产生相同的随机数序列?
g) 是否有某种最佳种子大小?在我看来,这可能是一个毫无意义的问题。
h) 如果我通过使用 256 个字节播种 SRNG 来加密明文,然后让它生成随机字节以与明文中的字节进行异或运算,那么窃听者解密得到的密文有多容易?可能需要多长时间?我是否认为窃听者必须知道、猜测或计算 256 字节的种子?
我已经查看了以前有关 SecureRandom 的问题,但似乎没有一个能够回答我的特殊问题。 如果这些问题中的任何一个看起来过于愚蠢,我想重申一下,我是这个领域的初学者。非常感谢任何输入,因为我想了解 Java SecureRandom 对象如何用于密码学。
【问题讨论】:
-
一个问题就有很多问题。不过,我认为您的理解在很大程度上是正确的。
-
对问题数量感到抱歉。这是我在这里的第一篇文章。
-
这些都是很好的问题,但每个问题的回答都需要几段。我建议单独发布它们。顺便说一句,如果您想要特定于 SHA1PRNG 算法的答案,或者更广泛地了解 Pseudo-RNG,请澄清。
标签: java random cryptography