当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《什么类型的随机数发生器用于赌场游戏行业?》经验,为你挑选了3个好方法。

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

编辑:相关问题:

是否存在无状态随机数生成器?

真随机数发生器

替代熵源

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卡牌组的每个可能的洗牌(这是我在之前的博客文章中尝试解释的).

编辑:我回答的主要是关于在线扑克室和赌场,但同样的考虑适用于现实世界赌场中的物理视频扑克和视频老虎机.



1> Dan Dyer..:

在选择/实施RNG时,游戏网站必须考虑很多事情.如果没有尽职调查,就会出现严重错误.

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

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

就加密强大的PRNG而言,Fortuna是最先进的.它可以从一个或多个外部源(例如硬件RNG)提供熵,并且在面临尝试利用或RNG硬件故障时具有弹性.对于游戏网站来说这是一个不错的选择,尽管有些人可能会认为它太过分了.

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

大多数库存RNG实现(例如Mersenne Twister)没有足够的自由度能够从给定的初始状态生成52卡牌组的每个可能的洗牌(这是我在之前的博客文章中尝试解释的).

编辑:我回答的主要是关于在线扑克室和赌场,但同样的考虑适用于现实世界赌场中的物理视频扑克和视频老虎机.



2> Tall Jeff..:

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

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

但是,在赌场游戏的情况下,您将(或应该)对引擎盖下生成的实际数字没有可见性.每次生成一个随机数 - 比如一个32位数 - 那么这个数字就会被使用,例如,用于甲板改组算法的mod 52 ......没有在那个过程中你知道什么是数字由算法生成以改组该套牌.也就是说,"随机性"的大部分都被抛弃了,即使是正在使用的那些你也没有可见性.因此,没办法逆向工程状态.

回到真正的熵源来培育整个过程,这是困难的部分.有关技术的一些起点,请参阅维基百科关于熵的条目.

顺便说一句,如果你确实想要从"常规"算法加密序列随机数,一个简单的方法是按顺序取一些随机数,将它们连接在一起,然后在它们上运行类似MD5或SHA-1的结果和结果同样是随机的,也是加密安全的.也就是说,你刚刚创建了自己的"安全"随机数生成器.


看到一个高调的投票回答,令人失望的是Mersenne Twister.对于这个应用,Mersenne Twister*不适合*.它不具有加密安全性:给定一些输出,您可以预测未来的输出.这对于赌博机来说是一个严重的问题.此外,关于"没有直接可见性"的说法是胡扯:它们是巫术,没有坚实的技术基础.仅仅因为你以某种方式改变了非安全PRNG的输出,并不一定使其安全.我希望没有人会听从这个答案中的建议.
根据我的阅读,即使没有播放,插槽等也会不断产生随机数.选择的数字取决于按下按钮的时间; 因此,RNG的安全性相对不重要.
将随机数生成器结果带入某个范围的mod示例通常是个坏主意,因为它可能会引入偏差.
默默无闻的安全性(即隐藏算法和/或某些系统参数)通常不是一个好主意.内部人员攻击就是打破系统所需的一切.但是,如果速度是一个问题,使用快速哈希函数是有意义的.
几年前在澳大利亚有一个视频赛马游戏,播种不良.在游戏未使用期间,它显示了赛马的"演示"版本.除了演示版本是你玩游戏时使用的版本.因此你已经知道哪匹马赢了.

3> neu242..:

我们一直在使用Protego R210-USB TRNG(以及之前的非usb版本)作为赌场应用程序中的随机种子生成器,顶部有java.security.SecureRandom.我们瑞典国家法医科学实验室对 R210进行了单独的审核,并且没有任何缺陷.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有