Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是Ruby';这对赌博游戏来说够好了吗?_Ruby_Random - Fatal编程技术网

是Ruby';这对赌博游戏来说够好了吗?

是Ruby';这对赌博游戏来说够好了吗?,ruby,random,Ruby,Random,我需要生成具有以下属性的随机结果: 均匀分布(即数字1-10的可能性相同) 不可预测(所有结果都是公开的,如果进行数据挖掘,应该仍然无法预测结果) 该应用程序处理的是资金问题,因此结果保持不可预测和均匀分布至关重要 常规伪随机生成器是否适合这项工作,或者您是否需要加密强大的rng?Ruby的默认rand()可以工作吗?有什么需要注意的吗 如果没有,你会建议什么解决方案 编辑: Ruby 2.0.0 RandomRuby的默认rand使用Mersenne Twister算法。PRNG的内部状态

我需要生成具有以下属性的随机结果:

  • 均匀分布(即数字1-10的可能性相同)
  • 不可预测(所有结果都是公开的,如果进行数据挖掘,应该仍然无法预测结果)
该应用程序处理的是资金问题,因此结果保持不可预测和均匀分布至关重要

常规伪随机生成器是否适合这项工作,或者您是否需要加密强大的rng?Ruby的默认rand()可以工作吗?有什么需要注意的吗

如果没有,你会建议什么解决方案

编辑:
Ruby 2.0.0 Random

Ruby的默认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预生成足够的随机数,甚至熵是否可行和实用?