什么类型的随机数发生器用于赌场游戏行业?

时间:2009-01-09 02:09:51

标签: algorithm random

鉴于对防止赌场破产的不可预测性的极高要求,在老虎机,视频扑克机等设备中通常使用随机数生成算法和播种方案?

编辑:相关问题:

10 个答案:

答案 0 :(得分:14)

在选择/实施RNG时,游戏网站必须考虑很多事情。没有尽职调查,可以spectacularly wrong

要获得在特定司法管辖区内运营游戏网站的许可,通常要求RNG已经过独立第三方的认证。第三方测试人员将分析源代码并运行统计测试(例如Diehard)以确保RNG随机行为。信誉良好的扑克网站通常会包含其RNG所经过的认证的详细信息(例如:PokerStars's RNG page)。

我参与了一些游戏项目,其中一个我必须设计和实施RNG部分,所以我不得不调查所有这些问题。大多数扑克网站都会使用一些硬件设备进行熵,但它们不仅仅依赖于硬件。通常它将与伪RNG(PRNG)一起使用。这有两个主要原因。首先,硬件很慢,它只能在给定的时间段内从它正在监视的任何物理过程中提取一定数量的熵。其次,硬件以不可预测的方式失败,软件PRNG没有。

Fortuna在加密强PRNG方面是最先进的。它可以从一个或多个外部源(例如硬件RNG)馈送熵,并且在面对尝试的攻击或RNG硬件故障时具有弹性。对于游戏网站来说,这是一个不错的选择,尽管有些人可能认为它太过分了。

Pokerroom.com过去只使用Java的SecureRandom(他们可能仍然这样做,但我找不到他们网站上的详细信息)。这基本上是足够好的,但它确实受到自由度问题的困扰。

大多数库存RNG实施(例如Mersenne Twister)没有足够的自由度能够从给定的初始状态生成52张牌的每次可能的洗牌(这是我试图在{{ 3}})。

编辑:我的答案主要与在线扑克室和赌场有关,但同样的考虑适用于现实世界赌场中的实体视频扑克和视频老虎机。

答案 1 :(得分:13)

对于赌场游戏应用程序,我认为算法的种子是最重要的部分,以确保所有游戏“启动”不会运行相同的序列或一些小的可预测序列。也就是说,导致起始位置的种子的熵源是关键的。除此之外,任何高质量的随机数发生器,其中每个比特位置具有~50 / 50概率为1/0并且周期相对较长就足够了。例如,Mersenne twister PRNG之类的东西就有这样的属性。

当可以直接查看随机生成器的实际输出时,使用加密安全随机生成器变得非常重要。例如,如果您正在监视数字生成器实际生成的每个数字 - 在查看序列中的许多数字之后 - 使用非加密生成器有关该序列的信息可以导致建立有关生成器的所有内部状态的信息。此时,如果您知道算法的外观,您将能够预测未来的数字,这将是不好的。加密生成器阻止逆向工程回到内部状态,以便预测未来的数字变得“不可能”。

然而,在赌场游戏的情况下,你会(或应该)对引擎盖下生成的实际数字没有可见性。每次生成一个随机数 - 比如一个32位数 - 那么这个数字就会被使用,例如, mod 52 用于一个牌组改组算法....没有在那个过程中你在哪里知道算法生成了什么数字来改组那个套牌。也就是说,“随机性”的大部分都被抛弃了,即使是正在使用的那些你也没有可见性。因此,没有办法对国家进行逆向工程。

回到真正的熵源来培育整个过程,这是困难的部分。请参阅entropy上的维基百科条目,了解技术的起点。

顺便说一句,如果你确实想要从“常规”算法加密序列随机数,一个简单的方法是按顺序取一些随机数,将它们连接在一起,然后像MD5或SHA那样运行1对他们而言,结果是随机的,也是加密安全的。也就是说,你刚刚创建了自己的“安全”随机数生成器。

答案 2 :(得分:5)

我们一直在使用Protego R210-USB TRNG(以及之前的非usb版本)作为赌场应用程序中的随机种子生成器,使用java.security.SecureRandom 在上面。我们The Swedish National Laboratory of Forensic Science对R210进行了单独的审核,并且没有任何缺陷。

答案 3 :(得分:4)

您可能需要一个加密安全的伪随机生成器。有很多变种。谷歌“Blum-Blum-Shub”,例如。

这些伪随机生成器的安全属性通常是这样的,即使攻击者能够多次观察到来自这些生成器的许多输出,以比随机猜测更好的概率猜测下一个输出是不可行的。而且,将这种发生器的输出与真正的随机位区分开是不可行的。即使攻击者知道所有算法和参数(秘密种子除外),安全性仍然存在。

通常根据安全参数来测量发电机的安全性。在BBS的情况下,它是模数的大小。这与其他加密内容没有什么不同。例如,只有当密钥足够长时,RSA才是安全的。

请注意,此类发电机的输出可能不均匀(实际上,统计意义上可能远离均匀)。但是由于没有人能够在没有无限计算能力的情况下区分这两个发行版,因此这些发生器在大多数需要真正随机位的应用中都足够了。

但请记住,这些加密安全的伪随机生成器通常很慢。因此,如果速度确实是一个问题,那么不太严格的方法可能更具相关性,例如使用散列函数,如Jeff所建议的那样。

答案 4 :(得分:2)

赌场老虎机以非常高的速度连续生成随机数,并在用户拉动杠杆(或点击按钮)旋转卷轴时使用最新结果。

即使是简单的发电机也可以使用。即使您知道所使用的算法,也无法观察序列中的位置,因为几乎所有结果都被丢弃了。如果你知道它在序列中的位置,你必须有毫秒或更好的时间来利用它。

现代“机械卷轴”机器使用PRNG并用步进电机驱动卷轴来模拟旧式旋转和制动。

答案 5 :(得分:1)

赌场不应该使用伪随机数生成器,它们应该使用硬件生成器:http://en.wikipedia.org/wiki/Hardware_random_number_generator

答案 6 :(得分:1)

我认为现在应用程序和离岸赌博都有所作为,但所有这些其他答案都不完整,至少对于内华达州游戏控制委员会许可的机器而言,我相信这个问题最初是关于。

内华达州为游戏目的许可的RNG的技术规范在Regulation 14.040(2)中列出。

截至2012年5月24日,以下是RNG必须遵守的规则摘要:

  1. 不能使用静态种子。您必须使用毫秒时间源或其他真实熵源对RNG进行播种,该熵源在机器上的任何位置都没有外部读数。 (这有助于减少"魔法数字"攻击的发生率)
  2. 当游戏没有被播放时,RNG必须继续每秒至少生成100次数字。 (这有助于避免计时攻击)
  3. RNG输出不能重复使用;如果有的话,它们必须使用一次,然后扔掉。
  4. 多系统机柜必须为每场比赛使用单独的RNG和单独的种子。
  5. 使用RNG帮助代表玩家选择号码的游戏(例如乐透快速选择)必须使用单独的RNG进行该过程。
  6. 在游戏中实际需要游戏之前,游戏不得使用RNG。 (即你需要等到玩家在生成RNG之前选择交易或旋转)
  7. RNG必须通过基于10,000次试验的95%置信度卡方检验,作为系统检验的一部分。如果此测试失败,它必须显示警告,并且如果连续两次失败,则必须禁用播放。
  8. 必须记住并能够报告最后10个测试结果,如7所述。
  9. 每个可能的游戏结果必须由RNG生成。作为一个简单的例子,linear congruential generators实际上并没有在他们的范围内产生所有可能的输出,因此它们对游戏并不是非常有用。
  10. 此外,您的机器设计必须提交给游戏委员会,并且必须获得批准,这是昂贵的并且需要大量时间。有一些third-party companies专门审核您的新RNG,以确保它是随机的。游戏实验室发布even stricter set of standards而不是内华达州。他们详细介绍了limitations of hardware RNGs,而内华达特别喜欢看到它之前批准过的核心RNG。这一切都变得非常昂贵,这就是为什么许多开发人员更愿意为现有的新游戏项目许可现有的先前批准的RNG。

    这是一个有趣的random number generator attacks列表,可以帮助您深夜工作。

    仅适用于超级书呆子:大多数USB硬件RNG的来源通常为avalanche diode。然而,这种二极管产生的热噪声不是量子随机的,可以通过显着降低温度来影响雪崩二极管的随机性。

    作为最后一点,上面的人建议只使用Mersenne Twister进行随机数生成。这是一个坏主意,除非你从其他来源获取额外的熵。简单的香草Mersenne Twister非常不适合游戏和加密应用程序,as described by its creator.

答案 7 :(得分:0)

如果你想做得好,你必须得到身体 - ERNIE英国国民储蓄编号选择器在霓虹灯管中使用散粒噪声。

答案 8 :(得分:0)

我肯定已经看到一台德国赌博机器在指定日期之后不允许进行商业运营,所以我认为这是一个带有一次性播放列表种子清单的PNRG。

答案 9 :(得分:0)

大多数扑克网站都使用硬件随机数生成器。他们还将修改输出以消除任何缩放偏差,并且经常使用可以使用熵事件(用户活动,serer i / o事件等)“搅拌”的数字“数字”。通常,结果数字只是索引预先生成的卡片组(从卡片的排序列表开始)。