在线彩票的可靠随机数

时间:2011-03-30 09:19:26

标签: random

我需要为彩票游戏生成随机数, 彩票前端将在Flash AS3中运行,其想法是运行一个脚本,生成10个随机数(获胜者)并将其保存在SQL数据库中

创建随机数的可靠方法是什么? js Math.rand()函数是否足够可靠用于抽奖?

在维基百科上,我发现Fortuna是一个“加密安全的伪随机数生成器”,它包含在Javascript加密库中。

另一个选项是网站http://www.random.org,它提供了一个免费的API来提供随机数字,但它能提供哪些保证?

3 个答案:

答案 0 :(得分:2)

似乎random.org的数据基于静态噪声,静态噪声非常随机,比javascript随机库更随机,这可能是基于某种时间算法的随机性。

答案 1 :(得分:2)

javascript Math.rand()不太可能用于抽奖,因为规范并不要求它具有加密安全性。例如,某些版本的Chrome中使用的生成器中有known weaknesses

您需要的是一个加密安全的伪随机数生成器(例如blum-blum-shub),以及一种播种方式。你需要一种很好的播种方式,因为如果有人能够弄清楚你使用的是什么种子,他们就能够生成所有的彩票号码。您可能希望使用真正随机的,而不是伪随机数为伪随机生成器播种。这将需要硬件随机数生成器。 Random.org据称提供了真正随机数字的来源,但是如果有人要窃听你与random.org的连接,他们仍然可以发现你的随机种子。您可能更愿意投资自己的硬件,而不是依靠外部人员。

事实上,除非您需要大量的随机数(远远超过10个),否则根本不需要任何伪随机数生成器。您也可以从真正的,随机数,随机数生成器中获取所有随机数。

答案 2 :(得分:1)

如果彩票涉及金钱(购买“门票”和支付奖品),那么您可能需要能够证明您使用的是“真正的”随机数。在这种情况下,您可能希望投资自己的硬件来生成随机数。快速search会显示一些,例如this

否则,两个伪随机源中的任何一个对我来说都是足够的。