是Ruby';这对赌博游戏来说够好了吗?
我需要生成具有以下属性的随机结果:是Ruby';这对赌博游戏来说够好了吗?,ruby,random,Ruby,Random,我需要生成具有以下属性的随机结果: 均匀分布(即数字1-10的可能性相同) 不可预测(所有结果都是公开的,如果进行数据挖掘,应该仍然无法预测结果) 该应用程序处理的是资金问题,因此结果保持不可预测和均匀分布至关重要 常规伪随机生成器是否适合这项工作,或者您是否需要加密强大的rng?Ruby的默认rand()可以工作吗?有什么需要注意的吗 如果没有,你会建议什么解决方案 编辑: Ruby 2.0.0 RandomRuby的默认rand使用Mersenne Twister算法。PRNG的内部状态
- 均匀分布(即数字1-10的可能性相同)
- 不可预测(所有结果都是公开的,如果进行数据挖掘,应该仍然无法预测结果)
Ruby 2.0.0 RandomRuby的默认rand使用Mersenne Twister算法。PRNG的内部状态虽然中等大,且不容易破解,但理论上足够小,只有从1到10的几十个值就足以确定其状态,因此您的担忧并非毫无根据。(更新:很明显,内部状态也“泄漏”到返回的值中,使得黑客攻击变得更加容易) 我建议您使用,因为它通常使用
/dev/uradom
或开放ssl库作为随机性的原始来源。其中之一可能在目标服务器上可用,不需要额外的硬件或专家库
您可能希望进一步研究从外部源获取熵的模块,然后使用加密哈希算法将其混合(以获得比特值的均匀分布)。RubyGem连接到做这类事情的一些服务。不过,我在Ruby中找不到比这更现代的东西了
如果您担心信任第三方服务,并且有时间编写自己的Ruby包装器,您还可以看看一个可以在电子噪音下工作的USB设备。如果您担心,为什么不使用
Random
类而不是默认的rand
?@sawa:rand下面不使用Random类吗?随机性足够好吗?看起来它使用了Mersenne Twister PRNG,我不确定这是否足够好。对于真正的random,请使用能够拾取噪声的微控制器,参见random。org@randomguy不,它不使用它。我不知道Random
是否足够,但它比rand
好。这篇文章会很有帮助:谢谢你的回答。密码学上的强RNG是否自动意味着不可预测性和均匀分布?@randomguy:这些算法通常在设计时考虑到比特值的均匀分布,否则统计分析可能有助于攻击。然而,熵源的“不可预测性”经常出现在“攻击者对系统的了解”的上下文中-在实践中,这基本上是相同的,但在哲学意义上可能会对您或您的客户产生分歧。@randomguy:进一步研究,我认为SecureRandom将在运行Linux的云托管环境中为您提供足够好的服务,并提供/dev/uradom
(和/或开放ssl)。因此,我调整了我的答案,建议您首先使用SecureRandom。因为它将是你项目的核心部分,如果你有时间深入研究这个主题,它将为你提供很好的服务。谢谢!乌拉多姆为我指明了正确的方向。显然,它使用与/dev/random相同的熵池,但当池耗尽时不会阻塞,因为它通过SHA1重新使用旧的熵。我仍然不清楚这是否会以一种有意义和实用(非理论)的方式损害统一性和不可预测性。上下文是一个普通的基于Linux云的VPS环境和赌博。我想知道使用/dev/random预生成足够的随机数,甚至熵是否可行和实用?