鉴于对防止赌场破产的不可预测性的极高要求,什么随机数生成算法和播种方案通常用于老虎机,视频扑克机等设备?
编辑:相关问题:
是否存在无状态随机数生成器?
真随机数发生器
替代熵源
Dan Dyer.. 14
在选择/实施RNG时,游戏网站必须考虑很多事情.如果没有尽职调查,就会出现严重错误.
要获得在特定辖区内运营游戏网站的许可,通常要求RNG已经过独立第三方的认证.第三方测试人员将分析源代码并运行统计测试(例如Diehard)以确保RNG随机行为.信誉良好的扑克网站通常会包含其RNG所经过的认证的详细信息(例如:PokerStars的RNG页面).
我参与了一些游戏项目,其中一个我必须设计和实现RNG部分,所以我不得不调查所有这些问题.大多数扑克网站都会使用一些硬件设备进行熵,但它们不仅仅依赖于硬件.通常它将与伪RNG(PRNG)一起使用.这有两个主要原因.首先,硬件很慢,它只能在给定的时间段内从它正在监视的任何物理过程中提取一定数量的熵.其次,硬件以不可预测的方式失败,软件PRNG没有.
就加密强大的PRNG而言,Fortuna是最先进的.它可以从一个或多个外部源(例如硬件RNG)提供熵,并且在面临尝试利用或RNG硬件故障时具有弹性.对于游戏网站来说这是一个不错的选择,尽管有些人可能会认为它太过分了.
Pokerroom.com曾经只使用Java的SecureRandom(他们可能仍然这样做,但我在他们的网站上找不到详细信息).这基本上是足够好的,但它确实受到自由度问题的困扰.
大多数库存RNG实现(例如Mersenne Twister)没有足够的自由度能够从给定的初始状态生成52卡牌组的每个可能的洗牌(这是我在之前的博客文章中尝试解释的).
编辑:我回答的主要是关于在线扑克室和赌场,但同样的考虑适用于现实世界赌场中的物理视频扑克和视频老虎机.
在选择/实施RNG时,游戏网站必须考虑很多事情.如果没有尽职调查,就会出现严重错误.
要获得在特定辖区内运营游戏网站的许可,通常要求RNG已经过独立第三方的认证.第三方测试人员将分析源代码并运行统计测试(例如Diehard)以确保RNG随机行为.信誉良好的扑克网站通常会包含其RNG所经过的认证的详细信息(例如:PokerStars的RNG页面).
我参与了一些游戏项目,其中一个我必须设计和实现RNG部分,所以我不得不调查所有这些问题.大多数扑克网站都会使用一些硬件设备进行熵,但它们不仅仅依赖于硬件.通常它将与伪RNG(PRNG)一起使用.这有两个主要原因.首先,硬件很慢,它只能在给定的时间段内从它正在监视的任何物理过程中提取一定数量的熵.其次,硬件以不可预测的方式失败,软件PRNG没有.
就加密强大的PRNG而言,Fortuna是最先进的.它可以从一个或多个外部源(例如硬件RNG)提供熵,并且在面临尝试利用或RNG硬件故障时具有弹性.对于游戏网站来说这是一个不错的选择,尽管有些人可能会认为它太过分了.
Pokerroom.com曾经只使用Java的SecureRandom(他们可能仍然这样做,但我在他们的网站上找不到详细信息).这基本上是足够好的,但它确实受到自由度问题的困扰.
大多数库存RNG实现(例如Mersenne Twister)没有足够的自由度能够从给定的初始状态生成52卡牌组的每个可能的洗牌(这是我在之前的博客文章中尝试解释的).
编辑:我回答的主要是关于在线扑克室和赌场,但同样的考虑适用于现实世界赌场中的物理视频扑克和视频老虎机.
对于赌场游戏应用程序,我认为算法的种子是最重要的部分,以确保所有游戏"启动"不会运行相同的序列或一些小的可预测序列.也就是说,导致起始位置的种子的熵源是关键的.除此之外,任何高质量的随机数发生器,其中每个比特位置具有~50/50概率为1/0并且周期相对较长就足够了.例如,像梅森捻线机PRNG这样的东西具有这样的特性.
使用加密安全随机生成器只有在可以直接查看随机生成器的实际输出时才变得很重要.例如,如果您正在监视数字生成器实际生成的每个数字 - 在查看序列中的许多数字之后 - 使用非加密生成器有关该序列的信息可以导致建立有关生成器的所有内部状态的信息.此时,如果您知道算法的外观,您将能够预测未来的数字,这将是不好的.加密生成器阻止逆向工程回到内部状态,以便预测未来的数字变得"不可能".
但是,在赌场游戏的情况下,您将(或应该)对引擎盖下生成的实际数字没有可见性.每次生成一个随机数 - 比如一个32位数 - 那么这个数字就会被使用,例如,用于甲板改组算法的mod 52 ......没有在那个过程中你知道什么是数字由算法生成以改组该套牌.也就是说,"随机性"的大部分都被抛弃了,即使是正在使用的那些你也没有可见性.因此,没办法逆向工程状态.
回到真正的熵源来培育整个过程,这是困难的部分.有关技术的一些起点,请参阅维基百科关于熵的条目.
顺便说一句,如果你确实想要从"常规"算法加密序列随机数,一个简单的方法是按顺序取一些随机数,将它们连接在一起,然后在它们上运行类似MD5或SHA-1的结果和结果同样是随机的,也是加密安全的.也就是说,你刚刚创建了自己的"安全"随机数生成器.
我们一直在使用Protego R210-USB TRNG(以及之前的非usb版本)作为赌场应用程序中的随机种子生成器,顶部有java.security.SecureRandom.我们瑞典国家法医科学实验室对 R210进行了单独的审核,并且没有任何缺陷.