Random 非安全随机数生成器和安全随机数生成器之间的区别是什么?

Random 非安全随机数生成器和安全随机数生成器之间的区别是什么?,random,cryptography,Random,Cryptography,正如标题所说:非安全随机数生成器和安全随机数生成器之间的区别是什么?任何计算上可行的算法都不应该: 恢复种子,或 预测“下一位” 用于安全的随机数生成器 示例:线性反馈移位寄存器会产生大量随机数,但如果有足够的输出,则可以发现种子并预测所有后续数。只有一个“随机数”通常意味着一个伪随机数。因为它是一个伪随机数,攻击者可以(很容易)预测它 安全随机数是来自真正随机数据源的随机数,即涉及某种类型的熵池。这可能取决于上下文,但当你这样比较它们时,我会说“随机数”是一个随机数,“安全随机数”是真正随

正如标题所说:非安全随机数生成器和安全随机数生成器之间的区别是什么?

任何计算上可行的算法都不应该:

  • 恢复种子,或
  • 预测“下一位”
用于安全的随机数生成器

示例:线性反馈移位寄存器会产生大量随机数,但如果有足够的输出,则可以发现种子并预测所有后续数。

只有一个“随机数”通常意味着一个伪随机数。因为它是一个伪随机数,攻击者可以(很容易)预测它


安全随机数是来自真正随机数据源的随机数,即涉及某种类型的熵池。

这可能取决于上下文,但当你这样比较它们时,我会说“随机数”是一个随机数,“安全随机数”是真正随机数。前者基于种子和算法给出一个数字,另一个基于某种固有的随机函数。

这就像AES和ROT13之间的区别


为了不那么轻率,在生成随机数时,通常需要权衡它的难易程度和序列中的下一个随机数在您看到几个后的可预测程度。您的语言内置的rand()返回的随机数通常是廉价的、可预测的。

同意Purfiedeas。关于这一点,还有一篇很好的文章,叫做

,一个安全的随机数不应该是可预测的,即使给出了先前生成的随机数列表。您通常会将其用作加密例程的密钥,因此您不希望它是可猜测或可预测的。当然,可猜测性取决于上下文,但您应该假设攻击者知道您知道的所有信息,并可能使用这些信息生成您的随机数


有各种各样的网站可以生成安全的随机数,其中一个是可信的。如果你只是作为一次性活动生成随机数,为什么不使用抽奖结果,因为它是可证明随机的。当然,不要告诉任何人哪个彩票和哪个抽奖,并将这些数字放入适当的槽中,以获得您想要的范围。

随机数可能意味着使用“种子”的算法返回的伪随机数


一个安全的随机数应该是从一个设备返回的真实随机数,比如一个基于铯的随机数发生器(它使用铯的衰减率来返回数字)。这是自然发生的,无法预测。

安全随机数不必来自真正的随机源。例如,通过使用良好的伪随机源并使用MD5校验和结果作为安全随机结果来生成安全随机数通常是非常安全的。这不是一个理想的解决方案,而是一个不错的解决方案。这实际上非常非常不准确:随机生成的数字意味着,随机生成:滚动模具,听声卡发出的白噪声,随机。伪随机数生成器通过算法生成明显的随机数。例如梅森捻线机。密码学上的强随机数生成器同样是“伪”的,它们也通过算法生成数字。然而,如果熵池仍然是秘密的,它们通常很难预测。加密强伪随机数生成器(prng)的一个示例是Yarrow,它用于在Mac OS X上实现/dev/random和/dev/urandom,由Bruce设计。这可能会有所帮助