ブログ · 公平性と不正対策

Fisher-Yates シャッフルは検証可能なポーカーでなぜ重要か

公平性と検証 公開日 2026年10月31日 · Fair Poker 研究チーム

オンラインポーカーのシャッフルが公平かどうかは、「なんとなく混ざって見えるか」では判断できません。公平なシャッフルとは、52 枚のデッキのあらゆる順序が同じ確率で選ばれ、プラットフォームが後から都合のよい順序を選べない状態を指します。

Fisher-Yates は、この考え方を説明するうえでとても分かりやすいアルゴリズムです。未確定の範囲からランダムに 1 つ選び、交換し、その位置を固定して次に進みます。ランダム選択が偏っていなければ、有限列の全ての順列を同じ確率で作れます。概要は次の資料でも確認できます:Fisher-Yates shuffle。

解決するのはデッキ順の公平性

Fisher-Yates の価値は、名前が有名なことではありません。デッキを「順列」として扱い、各ステップで残りの位置から等確率に選ぶため、特定のカード位置や組み合わせをソフトウェアが偏って作る危険を減らせる点にあります。

これはシャッフルはどれくらいランダムかで扱う話と同じです。ポーカーの乱数は見た目ではなく、確率の主張です。数ハンドを眺めて不自然さが見えなくても、生成しやすい順序と生成しにくい順序があれば公平とは言えません。

乱数の出どころが弱いと意味がない

ただし Fisher-Yates は、それ単体で信頼できる乱数を生むわけではありません。アルゴリズムは乱数を消費するだけです。種が予測可能だったり、使い回されたり、プレイ中の情報を見てから選ばれたりすれば、シャッフルは不正に近づきます。

NIST SP 800-90A Rev. 1 は、ハッシュ関数、HMAC、ブロック暗号に基づく決定論的乱数ビット生成の仕組みを扱っています:NIST SP 800-90A。ポーカーサイトが標準名を出すだけで十分という意味ではありません。重要なのは、乱数がいつ決まり、いつコミットされ、後でどう検証できるかです。

Fisher-Yates は正しいシャッフル手順です。しかし、その手順を動かす乱数が読めるなら、手順がきれいでもゲームは信用できません。

範囲選択の偏りにも注意する

実装では、各ステップで現在の範囲から整数を等確率に選ぶ必要があります。大きな乱数を単純に剰余で小さな範囲へ変換すると、範囲によってはわずかな偏りが生まれる場合があります。信頼できる実装では、棄却サンプリングなどでこの偏りを避けます。

こうした細部は小さく見えますが、ポーカーは大量のハンドを扱います。だからこそ、ポーカーシャッフルにおける暗号学的エントロピーと同じくらい、乱数からインデックスへの変換が見直せることも大切です。

検証には記録が必要

「Fisher-Yates を使っています」と言うだけでは、プレイヤーは何も確認できません。検証可能なポーカーでは、開始前のコミットメント、後から公開されるシードや共有入力、各ステップのインデックス生成方法、最終デッキを再計算できる材料が必要です。

この記録があれば、プレイヤーや研究者はシャッフルを再生し、実際のハンドと一致するか確認できます。考え方はシャッフルを一歩ずつ検証する方法に近いものです。

解決できない問題もある

Fisher-Yates が扱うのはデッキ順の公平性です。プレイヤー同士の共謀、ボット、アカウント共有、リアルタイム助言、画面共有、端末の侵害は別の問題です。そこには不正対策、通報、アカウント保護、健全な利用設計が必要です。

見るべき点は、アルゴリズム名だけではありません。乱数が事前に固定されるか、範囲選択が無偏か、記録を再生できるか、そしてシャッフル以外のリスクを正直に説明しているか。そこまで揃って初めて、Fisher-Yates はプレイヤーにとって意味のある信頼材料になります。

検証可能な公平性の実装に興味がありますか?

Fair Poker はテキサスホールデムの検証可能な公平性を研究する非営利オープンソースプロジェクトです。デッキは参加者のブラウザが共同で暗号化シャッフルし、ディーリングサーバーは存在せず、全ハンドを独立に検証できます。公衆向けのゲームサービスは提供していません。全ソースを公開していますので、ダウンロードして自分の環境で研究してください。

ソースをダウンロード

本サイトは非営利のオープンソース研究プロジェクトであり、公衆向けのゲームサービスは提供しません。デモは研究テスト専用で無価値のテストチップのみを使用し、現金賭博ではありません。本記事は教育目的のコンテンツです。

← 記事一覧へ戻る