カジノゲーム業界で使用されている乱数ジェネレータの種類は何ですか?

algorithm random

カジノが倒産するのを防ぐための予測不可能性に対する非常に高い要件を考えると、スロットマシン、ビデオポーカーマシンなどのようなデバイスで一般的に使用される乱数生成アルゴリズムとシードスキームは何ですか?

編集:関連質問:

  17  16


ベストアンサー

RNGを選択/実装するときにゲームサイトが考慮しなければならないことがたくさんあります。 正当な注意を払わずに、それは行くことができます 驚くほど間違って

特定の管轄区域でゲームサイトを運営するためのライセンスを取得するには、通常、RNGが独立した第三者によって認証されている必要があります。 サードパーティのテスターがソースコードを分析し、統計的テスト(例: RNGがランダムに振る舞うようにするために Diehard)。 評判の良いポーカーサイトには通常、そのRNGが受けた認定の詳細が含まれています(例: PokerStarsのRNGページ)。

私はいくつかのゲームプロジェクトに携わってきました、そしてそのうちの1つのために私はRNG部分を設計して実行しなければなりませんでした、それで私はこれらの問題の全てを調査しなければなりませんでした。 ほとんどのポーカーサイトではエントロピーにハードウェアデバイスを使用しますが、ハードウェアだけに頼ることはありません。 通常、それは疑似RNG(PRNG)と一緒に使用されます。 これには2つの主な理由があります。 第1に、ハードウェアは低速であり、それが監視しているどの物理的プロセスからでも所与の期間内に一定数のエントロピービットしか抽出することができない。 第二に、ハードウェアはソフトウェアPRNGがしない予測できない方法で失敗します。

http://en.wikipedia.org/wiki/Fortuna_(PRNG)[Fortuna]は、暗号学的に強力なPRNGの観点から見た最新技術です。 それは1つ以上の外部情報源からエントロピーを供給され得る。 ハードウェアRNG)は、悪用の試みやRNGハードウェアの障害に直面しても回復力があります。 ゲームサイトにとってはまともな選択ですが、やり過ぎであると主張する人もいるかもしれません。
http://www.pokerroom.com[Pokerroom.com]はJavaのSecureRandomを使用していました(おそらくまだ使用されていますが、私は彼らのサイトで詳細を見つけることができませんでした)。 これはほとんど十分ですが、自由度の問題があります。

ほとんどの標準RNG実装(例: (Mersenne Twister))与えられた初期状態から52枚のカードを持つ可能性のあるすべてのシャッフルを生成するのに十分な自由度がありません/ 04/10 / a-java-programmers-guide-to-random-number-part-3-seeding / [前のブログ記事]。

*編集:*私は主にオンラインポーカールームとカジノに関して答えました、しかし同じ考えが現実の世界のカジノの物理的なビデオポーカーとビデオスロットマシンにあてはまります。

14


カジノゲームアプリケーションでは、「起動」されたすべてのゲームが同じシーケンスまたは予測可能な一連のシーケンスを実行しないようにするために、アルゴリズムのシードが最も重要な部分だと思います。 つまり、開始位置のシードにつながるエントロピーの発生源が非常に重要です。 それを超えて、各ビット位置が1/50である可能性が約50/50であり周期が比較的長いような任意の良質の乱数発生器で十分であろう。 例えば、 Mersenne twister PRNGのようなものがそのような特性を持っています。

暗号学的に安全な乱数発生器の使用は、乱数発生器の実際の出力を直接見ることができる場合にのみ重要になります。 たとえば、シーケンス内の多数の数字を表示した後に、そのシーケンスに関する数字ジェネレータによって実際に生成された各数字を監視している場合、そのシーケンスに関する情報がジェネレータのすべての内部状態に関する情報の確立につながることがあります。 この時点で、アルゴリズムがどのように見えるのかを知っていれば、将来の数を予測することはできますが、それは悪いことです。 暗号化ジェネレータは、リバースエンジニアリングが内部状態に戻るのを防ぎ、将来の数を予測することが「不可能」になるようにします。

しかしながら、カジノゲームの場合、あなたはフードの下で生成されている実際の数を見ることができないでしょう(あるいはそうすべきではありません)。 乱数が生成されるたびに(32ビットの数値など)、その数値が使用されます。たとえば、デッキシャッフリングアルゴリズムには_mod 52_が使用されます。そのプロセスのどこに何の数値があるのか​​わかりません。そのデッキをシャッフルするためのアルゴリズムによって生成されます。 つまり、「ランダム性」のほとんどの部分は破棄されているだけであり、使用されているものでさえ、あなたには見えません。 したがって、状態をリバースエンジニアリングする方法はありません。

プロセス全体をシードするためにエントロピーの本当の情報源に戻ること、それは難しい部分です。 テクニックに関するいくつかの出発点については、 entropyにあるWikipediaのエントリを参照してください。

余談ですが、「通常の」アルゴリズムから暗号的に乱数列を生成したい場合は、いくつかの乱数列を順番に連結してからMD5やSHA-1のようなものを実行するのが簡単な方法です。ランダムであり、暗号的にも安全です。 つまり、あなたはあなた自身の “安全な”乱数ジェネレータを作っただけです。

13


java.security.SecureRandomを一番上にして、カジノアプリケーションではランダムシードジェネレータとしてProtego R210-USB TRNG(およびそれ以前のnon-usbバージョン)を使用してきました。 スウェーデン国立法医学研究所にR210の個別監査を依頼したところ、問題なく合格しました。

5


おそらく暗号学的に安全な擬似乱数生成器が必要です。 たくさんの変種があります。 たとえば、Googleの “Blum-Blum-Shub”です。

これらの擬似乱数生成器のセキュリティ特性は、攻撃者がそのような生成器からの多項式的に多数の出力を観測できる場合でも、ランダム推測よりはるかに良い確率で次の出力を推測することは現実的ではないということです。 また、そのようなジェネレータの出力を真にランダムなビットと区別することは不可能です。 セキュリティは、すべてのアルゴリズムとパラメータが攻撃者に知られていても保持されます(シークレットシードを除く)。

発電機の安全性はしばしば安全性パラメータに関して測定される。 BBSの場合は、モジュラスのサイズです。 これは他の暗号と同じです。 たとえば、RSAは、キーが十分に長い場合にのみ安全です。

そのようなジェネレータの出力は一様ではないかもしれないことに注意してください(実際には、統計的な意味では一様とはかけ離れていることがあります)。 しかし、無限の計算能力なしには2つの分布を区別できないため、これらのジェネレータは、真にランダムなビットを必要とするほとんどのアプリケーションで十分です。

しかしながら、これらの暗号学的に安全な擬似乱数生成器は通常遅いということを心に留めておいてください。 そのため、速度が本当に問題になる場合は、Jeffが提案しているように、ハッシュ関数を使用するなど、厳密性の低いアプローチの方がより適切かもしれません。

4


カジノのスロットマシンは非常に高速で連続的に乱数を生成し、ユーザーがレバーを引く(またはボタンを押す)とリールを回転させるときに最新の結果を使用します。

単純なジェネレータでさえも使用できます。 使用したアルゴリズムを知っていても、結果のほぼすべてが破棄されるため、シーケンスのどこにあるのかを観察することはできません。 どういうわけか、それがシーケンスのどこにあるかを知っていたら、それを利用するにはミリ秒以上のタイミングが必要です。

最新の「メカニカルリール」マシンはPRNGを使用し、ステッパーモーターでリールを駆動して古いスタイルのスピンアンドブレーキをシミュレートします。

2


カジノは疑似乱数発生器を使うべきではなく、ハードウェアを使うべきです:http://en.wikipedia.org/wiki/Hardware_random_number_generator

1


私は今日、アプリや海外でのギャンブルに何か問題があると思いますが、少なくともNevada Gaming Control Boardがライセンスを取得したマシンについては、これらすべての回答は不完全です。

ネバダ州でゲーム目的でライセンスされているRNGの技術仕様は、 規則14.040(2)に記載されています。

2012年5月24日現在、RNGが従うべき規則の概要は次のとおりです。

  1. 静的種は使用できません。 ミリ秒タイムソースまたは他の本当のエントロピーソースを使用してRNGをシードしなければなりません。そして、それはマシンのどこにも外部の読み出しをしません。 (これは「マジックナンバー」攻撃の発生率を減らすのに役立ちます)

  2. ゲームがプレイされていないときは、RNGは少なくとも毎秒100回、順番に数字を生成し続けなければなりません。 (これはタイミング攻撃を回避するのに役立ちます)

  3. RNG出力は再利用できません。仮にあったとしてもそれらは一度だけ使用され、その後捨てられなければならない。

  4. マルチシステムキャビネットは、ゲームごとに別々のRNGと別々のシードを使用する必要があります。

  5. プレイヤーに代わって番号を選択するのに役立つRNGを使用するゲーム(Lotto Quick Pickなど)は、そのプロセスに別のRNGを使用する必要があります。

  6. 実際にゲームで必要になるまで、ゲームはRNGをロールしてはいけません。 (すなわち プレーヤーがRNGを生成する前に、取引またはスピンを選択するまで待つ必要があります。

  7. RNGは、システムテストとは別に、10,000件の試行に基づく95%信頼度のカイ2乗検定に合格する必要があります。 このテストが失敗した場合は警告を表示し、続けて2回失敗した場合は再生を無効にする必要があります。

  8. 7で説明されているように、最後の10件のテスト結果を記憶し、報告できるようにする必要があります。

  9. すべての可能なゲーム結果はRNGによって生成可能でなければなりません。 悲観的な例として、https://en.wikipedia.org/wiki/Linear_congruential_generator [linear congruential generator]は実際にはそれらの範囲内のすべての可能な出力を生成するわけではないので、ゲームにはあまり役に立ちません。

さらに、あなたのマシンデザインはゲームコミッションに提出されなければならず、そしてそれは承認されなければなりません、そしてそれは高価でそして多くの時間がかかります。 それがランダムであることを確認するためにあなたの新しいRNGを監査することを専門とする、いくつかの third-party companyがあります。 Gaming Laboratoriesは、Nevadaよりも より厳格な標準セットを公開しています。 彼らは ハードウェアRNGの制限についての非常に詳細な説明に入ります、そして特にネバダはそれが以前に承認されたコアRNGを見るのが好きです。 これはすべて非常に高価になる可能性があるため、多くの開発者が新しいゲームプロジェクト用に既存の承認済みRNGをライセンス供与することを好むのはこのためです。

これは、夜遅くまであなたを守るための 乱数ジェネレータ攻撃の楽しいリストです。

スーパーオタクのためだけに:ほとんどのUSBハードウェアRNGのソースは通常 avlanche diodeです。 しかし、このタイプのダイオードが発生する熱雑音は量子ランダムではなく、温度を大幅に下げることによってアバランシェダイオードのランダム性に影響を与える可能性があります。

最後のメモとして、上記の誰かが乱数生成にMersenne Twisterを使用することを推奨しました。 他の情報源から追加のエントロピーを取っていない限り、これは悪い考えです。 プレーンバニラMersenne Twisterは、ゲームおよび暗号アプリケーションには非常に不適切です。http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/efaq.html [作成者の説明によると]

1


あなたがそれを正しくしたいのなら、物理的に入手しなければなりません – ERNI英国の国民貯蓄ナンバーピッカーはネオン管のショットノイズを使います。

0


私は確かに与えられた日付の後に商業的に走ることが許されなかったドイツのギャンブルマシンを見たことがあるので、私はそれがルーンワンタイムパッドシードリストを持つPNRGであったと思います。

0


ほとんどのポーカーサイトはハードウェア乱数ジェネレータを使用しています。 それらはまた、スケーリングの偏りを取り除くために出力を修正し、しばしばエントロピーイベント(ユーザーアクティビティ、serer入出力イベントなど)を使って「かき混ぜる」ことができる数字の「ポット」を使います。 多くの場合、結果として得られる数字は、事前に生成されたデッキのインデックスになります(カードのソートされたリストとして始まります)。

0


タイトルとURLをコピーしました