一个非安全的随机数生成器和一个安全的随机数生成器有什么区别?

27

如标题所述:非安全随机数生成器和安全随机数生成器有何区别?


这可能会有帮助:https://dev59.com/8G855IYBdhLWcg3wQyDh#4441091 - naveen
7个回答

33

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

  • 恢复种子(seed), 或者
  • 预测 "下一个比特" (next bit)

用于安全随机数生成器。

例如: 线性反馈移位寄存器可以产生很多随机数,但是如果给出足够多的输出,那么种子可以被发现并且所有接下来的随机数都能被预测。


5
一个安全的随机数不应该在已知以前生成的随机数列表的情况下可预测。通常用于加密程序的密钥,因此您不希望其可猜测或可预测。当然,可猜测取决于上下文,但您应该假设攻击者知道您知道的所有事情,并可能使用它们来生成您的随机数。
有各种网站可以生成安全的随机数,其中一个受信任的网站是hotbits。如果您只需要进行一次随机数生成活动,为什么不使用彩票抽奖结果,因为它是可以证明的随机数。当然,不要告诉任何人哪个彩票和哪个抽奖,而且将这些数字通过适当的处理以获得所需范围。

1

当我们谈论“随机数”时,通常指的是伪随机数。由于是伪随机数,因此攻击者可以(轻松地)预测它。

一个安全的随机数来自于真正的随机数据源,即涉及某种熵池。


1
这实际上非常不准确:随机生成的数字就是随机生成的意思:掷骰子,听声卡的白噪声,随机。 - Aaron Maenpaa
1
伪随机数生成器通过算法生成表面上看起来是随机的数字。例如,Mersenne Twister。密码学强随机数生成器同样是“伪”的,它们也是通过算法生成数字。 - Aaron Maenpaa
2
然而,如果它们的熵池保持机密,它们通常被证明很难预测。密码学强伪随机数生成器(PRNG)的一个例子是Yarrow,它在Mac OS X的/dev/random和/dev/urandom实现中使用,并由Bruce设计。 - Aaron Maenpaa

1

同意Purfiedeas的观点。关于这个问题还有一篇很好的文章,叫做在线扑克作弊


1

随机数可能指由使用“种子”的算法返回的伪随机数。

安全随机数是从设备(如基于铯的随机数生成器)返回的真正随机数,该设备利用铯的衰变速率返回数字。这是自然发生的,无法预测。


0

这可能取决于上下文,但是当您像这样进行比较时,我会说“随机数”是伪随机数,“安全随机数”是真正的随机数。前者基于种子和算法给出一个数字,而后者则基于某些固有的随机函数。


安全的随机数不一定需要来自真正的随机源。例如,使用良好的伪随机源并将MD5校验和结果用作安全随机结果通常是相当安全的。这不是理想的解决方案,但是是一个不错的选择。 - Tall Jeff

0

这就像AES和ROT13之间的区别。

更严肃地说,在生成随机数时,通常需要在难以预测下一个序列的程度和易于产生的程度之间进行权衡。通过语言内置的rand()函数返回的随机数通常是廉价、可预测的类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接