鉴于防止赌场破产的极高不可预测性要求,像老虎机、视频扑克机等设备通常使用哪种随机数生成算法和播种方案?
编辑:相关问题:
鉴于防止赌场破产的极高不可预测性要求,像老虎机、视频扑克机等设备通常使用哪种随机数生成算法和播种方案?
编辑:相关问题:
对于赌场游戏应用程序,我认为算法种子是确保所有游戏“启动”不通过相同序列或某些可预测序列的最重要部分。也就是说,导致种子的熵源是关键的。除此之外,任何拥有每个位位置大约50/50概率为1/0且周期相对较长的良好随机数生成器都足够了。例如,像Mersenne扭曲伪随机数生成器一样具有这些性质的东西。
只有在随机生成器的实际输出能够直接查看时,使用具有加密保障的随机生成器才变得重要。例如,如果您正在监控每个数字生成器实际生成的数字 - 在查看了序列中的许多数字之后 - 使用非加密生成器可能会导致有关该序列的信息,从而导致建立了有关生成器所有内部状态的信息。此时,如果您知道算法的样子,您将能够预测未来的数字,这将是不好的。加密生成器防止了将逆向工程应用到内部状态中,使得预测未来的数字变得“不可能”。
然而,在赌场游戏中,您不会(或者说不应该)看到在内部生成的实际数字。每当生成一个随机数(例如32位数字),该数字将被用于一个洗牌算法,例如mod 52...在整个过程中,您无法知道该算法生成了哪些数字来洗牌。换句话说,大多数“随机性”位被抛弃了,甚至使用了的位您也无法查看。因此,无法反推状态。
回到真正的随机数源来种子整个过程,这很困难。请参阅维基百科有关熵技术的一些起点。
顺便说一句,如果您确实想从“常规”算法中生成加密序列的随机数,一个简单的方法是连续取几个随机数,将它们连接在一起,然后在它们上运行类似于MD5或SHA-1的东西,结果是随机的并且具有密码学安全性。也就是说,您刚刚制作了自己的“安全”随机数生成器。
当选取或实施随机数生成器时,游戏网站需要考虑很多事情。如果不进行适当的尽职调查,可能会出现惨重的错误。
在特定司法管辖区获得运营游戏网站的许可通常需要RNG经过独立第三方认证。第三方测试人员将分析源代码并运行统计测试(例如Diehard),以确保RNG行为随机。声誉良好的扑克网站通常会包括他们的RNG所经历的认证细节(例如:PokerStars的RNG页面)。
我曾参与过几个游戏项目,其中一个项目需要我设计和实现RNG部分,因此我必须调查所有这些问题。大多数扑克网站会使用某种硬件设备进行熵,但他们不会仅仅依赖硬件。通常,它将与伪随机数生成器(PRNG)一起使用。这有两个主要原因。首先,硬件很慢,它只能从它正在监视的任何物理过程中提取一定数量的熵位。其次,硬件以不可预测的方式失败,而软件PRNG则不会。
Fortuna是密码学强PRNGs的最先进技术。它可以从一个或多个外部来源(例如硬件RNG)提供熵,并且在面对尝试利用或RNG硬件故障时具有弹性。虽然有些人可能会认为这有点过度,但它是游戏网站的不错选择。
Pokerroom.com曾经只使用Java的SecureRandom(他们可能仍在使用,但我在他们的网站上找不到详细信息)。这基本上已经足够好了,但它确实存在自由度问题。
大多数库存RNG实现(例如Mersenne Twister)没有足够的自由度以能够从给定的初始状态生成52张纸牌牌组的每个可能的洗牌(这是我试图解释的内容先前的博客文章)。
编辑: 我主要回答的是关于在线扑克房间和赌场的问题,但是同样的考虑也适用于现实世界赌场内的实体视频扑克和视频老虎机。
We ve been using the Protego R210-USB TRNG (and the non-usb version before that) as random seed generators in casino applications, with java.security.SecureRandom on top. We had The Swedish National Laboratory of Forensic Science perform a separate audit of the R210, and it passed without a flaw.
你可能需要一个具有密码学安全性的伪随机数生成器。有很多变体。例如,Google“Blum-Blum-Shub”。
这些伪随机生成器的安全性质通常为,即使攻击者可以观察到这些生成器的多项式输出,猜测下一个输出的概率也不会比随机猜测高得多。此外,无法区分这种生成器的输出与真正随机位之间的区别。即使攻击者知道所有算法和参数(除了秘密种子),安全性也将保持不变。
发电机的安全性通常是基于一个安全参数进行评估的。在BBS的情况下,这个参数是模量的大小。这和其他加密技术没有什么不同。例如,RSA仅在密钥足够长的情况下才安全。
请注意,此类生成器的输出可能不是均匀的(事实上,从统计意义上来看可能会相差很远)。但由于没有人可以在没有无限计算能力的情况下区分这两个分布,所以这些生成器将足够满足需要真正随机位的大多数应用程序。
请记住,这些具有密码学安全的伪随机生成器通常很慢。因此,如果速度确实是一个问题,不太严谨的方法可能更相关,例如使用哈希函数,正如Jeff所建议的那样。
赌场老虎机以非常高的速度持续生成随机数字,并在用户拉动把手(或按下按钮)旋转卷轴时使用最近的结果。
即使是一个简单的生成器也可以使用。即使你知道所使用的算法,你也无法观察到它在序列中的位置,因为几乎所有的结果都被丢弃了。如果你不知道它在序列中的位置,你需要毫秒或更好的时间来利用它。
现代的“机械卷轴”机器使用PRNG并驱动步进电机来模拟旧式的旋转和刹车。
赌场不应该使用伪随机数生成器,而应该使用硬件随机数生成器:http://en.wikipedia.org/wiki/Hardware_random_number_generator
我认为现在的应用和海外博彩市场什么都有可能发生,但所有这些其他答案都是不完整的,至少对于内华达州游戏控制委员会授权的机器来说,我认为这个问题最初是关于这个的。
在内华达州获得博彩许可证的随机数生成器的技术规格在Regulation 14.040(2)中列出。
截至2012年5月24日,以下是RNG必须遵循的规则概述:
另外,您的机器设计必须提交给游戏委员会并获得批准,这将非常昂贵并且需要很长时间。有一些第三方公司专门审核您的新RNG,确保它是随机的。 Gaming Laboratories发表了甚至更严格的标准,比内华达州更严格。它们更详细地了解硬件RNG的限制,内华达州特别喜欢看到以前经过批准的核心RNG。所有这些都可以变得非常昂贵,这就是为什么许多开发人员更喜欢为新游戏项目许可一个现有的先前批准的RNG。
这是一个有趣的列表,列出了许多随机数生成器攻击,让你熬夜。
只针对超级发烧友:大多数USB硬件随机数产生器的源通常是雪崩二极管。然而,这种二极管产生的热噪声不是量子随机的,通过显著降低温度影响雪崩二极管的随机性是可能的。
最后说一句,有人建议仅使用Mersenne Twister生成随机数。除非您从其他来源获取了额外的熵,否则这是一个不好的主意。纯香草Mersenne Twister在游戏和加密应用中非常不适用,正如其创建者所描述的那样。
如果您想做好它,您必须变得实际 - 英国国家储蓄号码选择器ERNIE使用氖管中的射击噪声。
我确实见过一台德国赌博机,根据规定日期后不允许商业运行,因此我认为它应该是使用了非常长的一次性密码种子列表的PNRG。
大多数扑克网站使用硬件随机数生成器。它们还会修改输出,以消除任何缩放偏差,并经常使用可以使用熵事件(用户活动,服务器I/O事件等)搅拌的数字罐。很多时候,结果数字只是索引预生成的纸牌组(起初是排序好的纸牌列表)。