ブラウザポーカーの Web Crypto 乱数:証明できること、できないこと
ブラウザで動くポーカーを見ると、「Web ページの乱数で本当に大丈夫なのか」と感じる人は多いはずです。短く言えば、現代のブラウザには Web Crypto API があり、crypto.getRandomValues() は暗号学的に強い乱数値を得るための標準的な方法です。
ただし、それだけで公平性が完成するわけではありません。安全なポーカーのシャッフルには、手札が配られる前に予測しにくい入力があり、その入力をどうデッキ順に変えたかが明確で、あとから確認できる証拠が必要です。
Web Crypto がポーカーに与えるもの
ブラウザの Crypto インターフェースは、暗号機能と強い乱数生成器へのアクセスを提供します。MDN は crypto.getRandomValues() を、型付き配列に暗号学的に強い乱数値を入れる方法として説明しています:MDN getRandomValues。
ポーカーではここが重要です。演出、色、軽いゲーム向けの普通の乱数は、フェアなシャッフルを守る土台にはなりません。シャッフルの種は、他のプレイヤー、サーバー、悪意あるスクリプトから事前に予測されにくい必要があります。
これは ポーカーシャッフルの暗号学的エントロピー と同じ話です。エントロピーとは、新しい不確実性です。Web Crypto は、ブラウザ上でその不確実性を得る現実的な入口になります。
普通の乱数より安全用途に向く理由
W3C の Web Cryptography 仕様では、getRandomValues は暗号学的に強い乱数値を生成すると説明されています:W3C Web Cryptography。つまり、単に結果を「ばらばらに見せる」ためではなく、セキュリティ用途を意識した仕組みです。
ポーカーは、プレイチップだけでもセキュリティに関わる場面です。種を推測できれば、デッキ順の候補を狭められるかもしれません。サーバーが他の入力を見てから種を選べるなら、シャッフルを寄せる余地があります。計算を誰も再現できないなら、結局はサイトを信じるしかありません。
だから シャッフルはどれくらいランダムか は、単なる数学の話ではありません。デッキ順の数は巨大ですが、公平性はその順番がどう選ばれ、誰かが偏らせられたかで決まります。
乱数だけでは証明できないこと
強い乱数値があっても、サイトがそれを正直に使った証明にはなりません。ベット前にデッキが固定されていた証明にもなりません。隠しカードを誰も見ていない証明にもなりません。共謀、アカウント乗っ取り、リアルタイム支援も別問題です。
NIST の乱数生成資料では、エントロピー源、決定論的生成器、テストが分けて扱われています。安全なランダム出力は複数の層に依存するからです:NIST random bit generation publications。ポーカーでは、さらに公開検証という層が必要になります。
乱数は材料です。検証記録はレシートです。プレイヤーに必要なのは、結果が「ランダムに見える」ことではなく、約束された手順で作られたと確認できることです。
そのため シャッフルを手順ごとに検証する ことが大切です。検証可能な仕組みなら、入力、コミットメント、最終結果を使って、第三者でも手順を再現できます。
ブラウザポーカーを見るときの確認項目
暗号の専門家でなくても、次の質問はできます。
- Web Crypto などの暗号学的な乱数源を使っているか?
- 乱数バイトをどうデッキ順に変えるか説明しているか?
- 秘密の入力を公開する前にコミットしているか?
- ハンド終了後にプレイヤーがシャッフルを再現できるか?
- シャッフルの公平性と共謀・アカウント安全を分けて説明しているか?
Fair Poker が重視するのは、検証可能なプレイマネーポーカーです。大切なのは「ブラウザだから安全」と言うことではありません。ブラウザは強いランダム入力を提供でき、よく設計されたプロトコルはその入力を確認可能なシャッフルに変えられる、ということです。
まとめ
Web Crypto は、ブラウザポーカーの乱数にとって強い土台です。「種を推測できるか」という問いには役立ちます。しかし、それだけで公平性のすべては証明できません。信頼できるオンラインポーカーには、コミットメント、再現できる記録、そして限界を正直に示す姿勢が必要です。