ポーカーのシャッフルにおける暗号学的エントロピーとは
オンラインポーカーの公平性を考えるとき、多くの人は「シャッフルはランダムなのか」と聞きます。けれど本当に大事なのは、もう少し具体的です。そのランダム性はどこから来たのか、誰かが事前に予測できたのか、そして後から検証できるのかという点です。
ここで出てくる言葉がエントロピーです。簡単に言えば、エントロピーとは新しい不確実性のことです。ポーカーのシステムは、数字をカードの順番に変える前に、十分に予測しにくい入力を持っていなければなりません。
エントロピーは出発点を読ませないためのもの
コンピューターは無から本物の偶然を作るわけではありません。端末や OS から予測しにくい信号を集め、それを暗号技術で扱いやすいランダムなバイト列にします。ブラウザーでは Web Crypto API が暗号学的に強い乱数機能を提供し、crypto.getRandomValues() がその代表的な入口です: MDN Web Crypto。
これは気軽に使う Math.random とは違います。Math.random は演出や簡単なゲームには使えますが、セキュリティ上の判断には向きません。ポーカーのシャッフルは、たとえプレイマネーだけであっても、公平性と信頼に関わるセキュリティ上の判断です。
カードの並びがどれほど多いかは、シャッフルのランダム性で説明しています。ただし、可能な並びが多いことと、安全に生成されたことは同じではありません。
弱いエントロピーでも見た目は自然に見える
弱いシャッフルでも、見た目には普通に見えることがあります。強い役も出ますし、不運な負け方も起きます。それだけでは、入力が安全だったとは言えません。
問題は予測可能性です。もし種が時刻、短い数字、固定的なブラウザー値などから作られていれば、攻撃者はすべてのカード順を調べる必要がありません。ありそうな種だけを試せばよくなります。NIST の資料が乱数生成、エントロピー源、決定論的乱数生成器を分けて扱うのも、この考え方に関係します: NIST random bit generation publications。
ポーカーで言えば、「見た目がランダム」では不十分です。ハンドが始まる前に、他人が予測しにくいことが必要です。
エントロピーだけでは証明にならない
良いエントロピーは、入力が予測されにくいかどうかを助けます。しかし、それだけで全ての公平性を説明できるわけではありません。
従来型のサイトは、優れた乱数を使っていても、プレイヤーに「サーバーが正しく使った」と信じてもらう必要があります。検証可能な公平性では、先にコミットし、あとで値を公開し、プレイヤーが結果を再計算できる形にします。クライアントシードとサーバーシードが重要なのは、複数の入力が結果に関わり、一方だけが都合よく後出しできないようにするためです。
エントロピーは鍵のようなものです。検証はその鍵が正しく使われた証拠です。シャッフル前の予測不能性と、シャッフル後の確認可能性は、どちらも必要です。
RNG と検証可能な公平性の違いもここにあります。RNG は数字をどう作るかの話で、検証可能性はその数字が約束通り使われたかを確かめる話です。
プレイヤーが確認したいこと
コードを読めなくても、見るべき点はあります。
- シャッフルの入力元を説明しているか
- 暗号学的乱数を使っているか
- 重要な値を先にコミットしているか
- プレイヤーが再計算や検証をできるか
- 共謀やアカウント乗っ取りは別問題だと説明しているか
Fair Poker は検証可能なプレイマネーポーカーを重視しています。大切なのは「信じてください」ではなく、プレイヤーや研究者が自分で確認できる証拠を残すことです。
まとめ
暗号学的エントロピーは、ポーカーのシャッフルを予測しにくくするための原材料です。ただし、それだけでは十分ではありません。信頼できるオンラインポーカーには、強いエントロピー、コミットメント、再現できる記録、そして暗号では解決できない問題への正直な説明が必要です。