发布于 2009-01-09 02:57:23
对于赌场游戏应用程序,我认为算法的种子是最重要的部分,以确保所有游戏“引导”起来不会运行在相同的序列或一些小的可预测的序列。也就是说,熵的来源导致种子的起始位置是至关重要的事情。除此之外,任何质量好的随机数发生器,如果每个位位的位置有~50/50的概率为1/0且周期相对较长,就足够了。例如,类似于梅森捻机的东西具有这样的属性。
只有当随机生成器的实际输出可以直接查看时,使用密码安全的随机生成器才会变得重要。例如,如果您正在监视数字生成器实际生成的每个数字--在查看序列中的许多数字之后--使用一个非加密生成器,有关该序列的信息可能会导致建立有关生成器所有内部状态的信息。在这一点上,如果你知道算法是什么样子,你就可以预测未来的数字,这将是不好的。密码生成器防止逆向工程回到内部状态,从而使预测未来的数字变得“不可能”。
然而,在赌场游戏的情况下,您将(或应该)没有能见度的实际数字正在生成的引擎盖。每次产生一个随机数--比如说一个32位数--这个数字就会被使用,例如,mod 52用于甲板洗牌的algorithm....no,在这个过程中,你知道算法产生了哪些数字来洗牌。也就是说,大部分的“随机性”只是被抛出,即使是那些正在使用的,你也无法看到。因此,没有办法逆转工程的状态。
回到一个真正的熵源,为整个过程播下种子,这是困难的部分。有关技术的一些起点,请参阅熵上的维基百科条目。
顺便说一句,如果您想要从“常规”算法中获得密码序列随机数,一个简单的方法是按顺序取几个随机数,将它们连在一起,然后在它们上运行类似于MD5或SHA-1之类的东西,结果同样是随机的,而且在密码上也是安全的。也就是说,您刚刚制作了自己的“安全”随机数生成器。
发布于 2009-01-10 13:51:30
在选择/实现RNG时,游戏站点必须考虑很多事情。没有适当的扩张,它可以成为大错。
要获得在特定管辖范围内经营游戏网站的许可证,通常需要RNG获得独立第三方的认证。第三方测试人员将分析源代码并运行统计测试(例如顽固性),以确保RNG的行为是随机的。信誉良好的扑克网站通常会包括他们的RNG所经历的认证的细节(例如:PokerStars的RNG页面)。
我参与了一些游戏项目,其中一个项目我必须设计和实现RNG部分,所以我必须调查所有这些问题。大多数扑克网站将使用一些硬件设备来实现熵,但它们不会仅仅依赖硬件。通常它将与伪RNG (PRNG)一起使用.这有两个主要原因。首先,硬件速度慢,只能从监控的任何物理过程中提取给定时间段内一定数量的熵。其次,硬件以软件PRNG无法预测的方式失败。
福图纳在密码强PRNG方面是最先进的。它可以从一个或多个外部源(例如,硬件RNG)获得熵,并且在试图利用或RNG硬件故障时具有弹性。对于游戏网站来说,这是一个不错的选择,尽管有些人可能会认为这是过火了。
Pokerroom.com过去只使用Java的SecureRandom (它们可能还在使用,但我在他们的站点上找不到详细信息)。这基本上是好的,但它确实受到自由度问题的影响。
大多数库存RNG实现(例如Mersenne )没有足够的自由度,无法从给定的初始状态生成52张卡的每一个可能的洗牌(这是我试图在以前的博客文章中解释的)。
编辑:我主要回答了关于在线扑克室和赌场的问题,但同样的考虑也适用于现实世界赌场中的物理视频扑克和视频插槽机。
发布于 2009-01-10 14:24:19
我们一直在使用Protego 210- using (以及之前的非usb版本)作为赌场应用程序中的随机种子生成器,上面是java.security.SecureRandom。我们让瑞典法医科学国家实验室对R210执行单独的审计,并且它通过时没有任何缺陷。
https://stackoverflow.com/questions/426821
复制相似问题