正如标题所说:非安全随机数生成器和安全随机数生成器有什么区别?
7 回答
没有计算上可行的算法应该:
- 恢复种子,或
- 预测“下一位”
用于安全的随机数生成器。
示例:线性反馈移位寄存器会产生大量随机数,但如果有足够的输出,就可以发现种子并预测所有后续数字。
即使给定先前生成的随机数列表,安全随机数也不应该是可预测的。您通常会将它用作加密例程的密钥,因此您不希望它可猜测或可预测。当然,可猜测性取决于上下文,但您应该假设攻击者知道您知道的所有事情,并且可能会使用这些事情来产生您的随机数。
有各种网站可以生成安全随机数,其中一个受信任的网站是hotbits。如果您只是将随机数生成作为一次性活动进行,为什么不使用彩票抽奖结果,因为它可以证明是随机的。当然,不要告诉任何人哪张彩票和哪张开奖,然后将这些数字放入合适的号码中以获得您想要的范围。
只有一个“随机数”通常意味着一个伪随机数。因为它是一个伪随机数,所以攻击者可以(很容易)预测到它。
安全随机数是来自真正随机数据源的随机数,即。涉及某种熵池。
同意 Purfiedeas。还有一篇很好的文章,叫做Cheat Online Poker
A random number would probably mean a pseudo random number returned by an algorithm using a 'seed'.
A secure random number would be a true random number returned from a device such as a caesium based random number generator (which uses the decay rate of the caesium to return numbers). This is naturally occurring and can't be predicted.
这可能取决于上下文,但是当您像这样比较它们时,我会说“随机数”是伪随机数,而“安全随机数”是真正随机的。前者给你一个基于种子和算法的数字,另一个给你一些固有的随机函数。
这就像 AES 和 ROT13 之间的区别。
为了不那么轻率,在生成随机数时通常会在它的难易程度和序列中下一个随机数的可预测性之间进行权衡,一旦你看到了一些。由您的语言的内置 rand() 返回的随机数通常是廉价的、可预测的种类。