カジノが破産するのを防ぐための予測不可能性に対する非常に高い要件を考えると、スロットマシン、ビデオポーカーマシンなどのデバイスで通常使用される乱数生成アルゴリズムとシードスキームはどれですか?
編集:関連する質問:
カジノゲームアプリケーションの場合、「起動」されたすべてのゲームが同じシーケンスまたは予測可能なシーケンスの小さなセットを実行しないようにするために、アルゴリズムのシードが最も重要な部分だと思います。つまり、開始位置のシードにつながるエントロピーのソースが重要です。それを超えると、各ビット位置が1/0になる確率が約50/50で、周期が比較的長い高品質の乱数ジェネレーターで十分です。たとえば、 メルセンヌツイスターPRNG のようなものにはそのような特性があります。
暗号的に安全なランダムジェネレーターの使用は、ランダムジェネレーターの実際の出力を直接表示できる場合にのみ重要になります。たとえば、シーケンス内の多くの番号を表示した後、番号ジェネレーターによって実際に生成された各番号を非暗号化ジェネレーターで監視している場合、そのシーケンスに関する情報は、ジェネレーターのすべての内部状態に関する情報を確立することにつながる可能性があります。この時点で、アルゴリズムがどのように見えるかを知っていれば、将来の数値を予測することができ、それは悪いことです。暗号化ジェネレーターは、リバースエンジニアリングが内部状態に戻るのを防ぎ、将来の数値を予測することが「不可能」になるようにします。
ただし、カジノゲームの場合、内部で生成されている実際の数値を確認することはできません(または確認する必要があります)。乱数(たとえば32ビット番号)が生成されるたびに、その番号が使用されます。たとえば、デッキシャッフルアルゴリズムの場合はmod 52 ....そのプロセスのどこで、そのデッキをシャッフルするためのアルゴリズムによってどのような数字が生成されているのかわかりません。つまり、「ランダム性」のほとんどのビットは捨てられているだけであり、使用されているものでさえ、あなたには見えません。したがって、状態をリバースエンジニアリングする方法はありません。
プロセス全体をシードするためにエントロピーの真のソースに戻ることは、難しい部分です。テクニックのいくつかの出発点については、 エントロピー のウィキペディアのエントリを参照してください。
余談ですが、「通常の」アルゴリズムから乱数を暗号的にシーケンスしたい場合、簡単なアプローチは、いくつかの乱数を順番に取得し、それらを連結してから、MD5のようなものを実行することです。またはSHA-1を使用すると、結果は同じようにランダムで、暗号的に安全です。つまり、独自の「安全な」乱数ジェネレーターを作成しただけです。
RNGを選択/実装する際に、ゲームサイトが考慮しなければならないことがたくさんあります。デューデリジェンスがなければ、それは進む可能性があります 見事に間違っています 。
特定の管轄区域でゲームサイトを運営するためのライセンスを取得するには、通常、RNGが独立したサードパーティによって認定されている必要があります。サードパーティのテスターは、ソースコードを分析し、統計的検定( Diehard など)を実行して、RNGがランダムに動作することを確認します。評判の良いポーカーサイトには通常、RNGが受けた認証の詳細が含まれます(例: PokerStarsのRNGページ )。
私はいくつかのゲームプロジェクトに携わってきましたが、そのうちの1つでは、RNGパーツを設計および実装する必要があったため、これらすべての問題を調査する必要がありました。ほとんどのポーカーサイトはエントロピーにハードウェアデバイスを使用しますが、ハードウェアだけに依存するわけではありません。通常、疑似RNG(PRNG)と組み合わせて使用されます。これには2つの主な理由があります。まず、ハードウェアは低速であり、監視している物理プロセスから、特定の期間に特定の数のエントロピーしか抽出できません。第二に、ハードウェアは、ソフトウェアPRNGでは発生しない予測できない方法で障害が発生します。
Fortuna は、暗号的に強力なPRNGに関する最新技術です。 1つ以上の外部ソース(ハードウェアRNGなど)からエントロピーを供給することができ、エクスプロイトの試みやRNGハードウェアの障害に直面しても回復力があります。ゲームサイトにとってはまともな選択ですが、やり過ぎだと主張する人もいるかもしれません。
Pokerroom.com JavaのSecureRandomを使用するために使用されていました(おそらくまだ使用されていますが、サイトで詳細を見つけることができませんでした)。これで十分ですが、自由度の問題があります。
ほとんどのストックRNG実装(メルセンヌツイスターなど)には、特定の初期状態から52枚のカードデッキのすべての可能なシャッフルを生成できる十分な自由度がありません(これは私が 前のブログ投稿 )。
編集:私は主にオンラインポーカールームとカジノに関連して答えましたが、同じ考慮事項が現実世界の物理的なビデオポーカーとビデオスロットマシンにも当てはまりますカジノ。
Protego R210-USB TRNG(およびそれ以前の非USBバージョン)をカジノアプリケーションのランダムシードジェネレーターとして使用しており、Java.security.SecureRandomが最上位になっています。 スウェーデン国立法医学研究所 R210の個別の監査を実施しましたが、問題なく合格しました。
おそらく、暗号的に安全な疑似乱数ジェネレータが必要です。バリエーションはたくさんあります。たとえば、Googleの「Blum-Blum-Shub」。
これらの疑似ランダムジェネレータのセキュリティ特性は、一般に、攻撃者がそのようなジェネレータからの多項式で多くの出力を観察できる場合でも、ランダム推測よりもはるかに良い確率で次の出力を推測することは不可能であるということです。また、そのようなジェネレータの出力を真にランダムなビットと区別することは不可能です。攻撃者がすべてのアルゴリズムとパラメータを知っている場合でも、セキュリティは維持されます(シークレットシードを除く)。
ジェネレータのセキュリティは、多くの場合、セキュリティパラメータに関して測定されます。 BBSの場合は、モジュラスのサイズです。これは他の暗号のものと同じです。たとえば、RSAは、キーが十分に長い場合にのみ安全です。
このようなジェネレーターの出力は均一ではない可能性があることに注意してください(実際、統計的な意味で均一から遠く離れている可能性があります)。しかし、無限の計算能力がなければ2つの分布を区別することはできないため、これらのジェネレーターは、真にランダムなビットを必要とするほとんどのアプリケーションで十分です。
ただし、これらの暗号的に安全な疑似ランダムジェネレータは通常低速であることに注意してください。したがって、速度が実際に懸念される場合は、Jeffが提案したように、ハッシュ関数を使用するなど、それほど厳密ではないアプローチの方が適切な場合があります。
カジノのスロットマシンは、非常に高速で連続的に乱数を生成し、ユーザーがレバーを引いたとき(またはボタンを押したとき)に最新の結果を使用してリールを回転させます。
単純なジェネレーターでも使用できます。使用されているアルゴリズムを知っていても、ほとんどすべての結果が破棄されるため、シーケンスのどこにあるかを観察することはできません。どういうわけかそれがシーケンスのどこにあるかを知っていた場合、それを利用するにはミリ秒以上のタイミングが必要になります。
最新の「メカニカルリール」マシンは、PRNGを使用し、ステッピングモーターでリールを駆動して、古いスタイルのスピンアンドブレーキをシミュレートします。
最近はアプリやオフショアギャンブルに何かが当てはまると思いますが、少なくともネバダゲーミングコントロールボードのライセンスを受けたマシンでは、これらの他のすべての答えは不完全です。
ゲーム目的でネバダ州で認可されたRNGの技術仕様は、 規則14.040(2) に記載されています。
2012年5月24日の時点で、RNGが従う必要のあるルールの概要は次のとおりです。
さらに、マシンの設計はゲーム委員会に提出する必要があり、承認する必要があります。これは費用がかかり、時間がかかります。新しいRNGを監査してランダムであることを確認することに特化した サードパーティ企業 がいくつかあります。 Gaming Laboratoriesは、ネバダ州よりも さらに厳しい一連の基準 を公開しています。 ハードウェアRNGの制限 についてさらに詳しく説明します。特にネバダ州では、以前に承認されたコアRNGを確認するのが好きです。これはすべて非常に高額になる可能性があるため、多くの開発者は、以前に承認された既存のRNGを新しいゲームプロジェクトにライセンス供与することを好みます。
これが 乱数ジェネレーター攻撃 の楽しいリストです。夜遅くまで起きていてください。
スーパーオタクの場合のみ:ほとんどのUSBハードウェアRNGのソースは、通常 アバランシェダイオード です。ただし、このタイプのダイオードによって生成される熱雑音は量子ランダムではなく、温度を大幅に下げることによってアバランシェダイオードのランダム性に影響を与える可能性があります。
最後に、上記の誰かが、乱数の生成にメルセンヌツイスターを使用することを推奨しました。他のソースから追加のエントロピーを取得していない限り、これは悪い考えです。プレーンなVanillaMersenne Twisterは、ゲームや暗号化アプリケーションには非常に不適切です 作成者によると
カジノは疑似乱数ジェネレーターを使用するべきではなく、ハードウェアのものを使用する必要があります: http://en.wikipedia.org/wiki/Hardware_random_number_generator
私は確かに、特定の日付以降に商業的に実行することが許可されていないドイツのギャンブルマシンを見たことがあります。
ほとんどのポーカーサイトは、ハードウェア乱数ジェネレーターを使用しています。また、出力を変更してスケーリングバイアスを取り除き、エントロピーイベント(ユーザーアクティビティ、serer i/oイベントなど)を使用して「攪拌」できる数値の「ポット」を使用することがよくあります。多くの場合、結果の数字は、事前に生成されたデッキのインデックスになります(カードのソートされたリストとして始まります)。
適切に実行したい場合は、物理的に取得する必要があります [〜#〜] ernie [〜#〜] 英国の国民貯蓄投資機構はネオン管でショットノイズを使用します。