考虑到对防止赌场破产的不可预测性的极高要求,在老虎机,视频扑克机等设备中通常使用哪种随机数生成算法和播种方案?
对于娱乐场游戏应用程序,我认为算法的播种是确保所有“启动”的游戏都不会通过相同序列或少量可预测序列运行的最重要部分。即,导致种子成为起始位置的熵的来源很关键。除此之外,任何高质量的随机数发生器(每个比特位置的概率约为50/50为1/0,并且周期相对较长)就足够了。例如,像梅森捻线机PRNG之类的东西就具有这种特性。
仅当可以直接查看随机生成器的实际输出时,才使用加密安全的随机生成器才变得重要。例如,如果在查看序列中的许多数字之后,使用非密码生成器来监视由数字生成器实际生成的每个数字,则有关该序列的信息可能会导致建立有关生成器所有内部状态的信息。在这一点上,如果您知道算法的外观,则可以预测未来的数字,这将是不好的。密码生成器可防止逆向工程回到内部状态,因此预测未来的数字变得“不可能”。
但是,对于娱乐场游戏,您(或应该)看不到引擎盖下生成的实际数字。每次生成一个随机数(例如32位数字)时,都会使用该数字,例如,用于甲板改组算法的 mod 52 ....在此过程中,您不知道哪个数字在哪里该算法产生的结果,以洗牌。也就是说,大多数“随机性”只是被扔掉了,即使您正在使用的那些也不可见。因此,没有办法进行逆向工程状态。
回到真正的熵源来播种整个过程,这是最困难的部分。有关技术的一些起点,请参见Wikipedia上有关熵的条目。
顺便说一句,如果您确实想从“常规”算法中对随机数进行加密序列化,则一种简单的方法是按顺序获取一些随机数,将它们连接在一起,然后对它们运行类似MD5或SHA-1的操作,并得到结果既随机又加密安全。 也就是说,您只是制作了自己的“安全”随机数生成器。