公正なサイコロ、フェアプレー
最後の出目のダブルで負けたバックギャモンのプレイヤーなら誰もが思ったことでしょう。このサイコロは公正なのか? それは、どんなバックギャモンのアプリにも問うべき正しい問いです。ここでは、私たちのサイコロがどのように生成されるのか、なぜ私たちを含め誰もそれを操作できないのか、そしてゲームの残りの部分もどのように誠実に保たれているのかを、正確に説明します。
終了した対局を自分で検証する
口先の言葉は安いものですから、ここではあなた自身の手で実行できる部分をお見せします。対局が終わると、私たちはそのサーバーシードと、最初の出目の前に公開したコミットメント、そして両者が対局中に公開したすべてのリンクを開示します。下に開示バンドルを貼り付けるか、対局をIDで照会してください。このページはその記録からすべての出目を一から再導出します。私たちのサーバーが行ったのとまったく同じ計算で、記録された値と一致するかどうかを一投ずつお見せします。どの段階でも私たちを信用していただく必要はありません。計算は公開されていて、誰でも同じことを繰り返せます。このページがあえて行わないのは、緑色の「証明可能に公正」というバッジを出すことです。正直にはそれを名乗れないからです。対局が始まる前にあなたの端末が書き込んで固定した値を、このページは決して見られません。鎖がまるごと丁寧な偽造に差し替えられた記録でも、ここでは同じように完璧に再導出されてしまいます。それを除外できるのは、端末が固定した値との1バイト単位の照合だけであり、その値を持っているのはあなたのアプリだけです。ですからこのページの誠実な上限は「整合」であり、いちばん強い判定はアプリの「検証」画面が出せる判定です。
サイコロ:証明可能に公正、サーバー上で振られる
終了したオンライン対局のすべての出目は私たちのゲームサーバーで生成され、しかも私たちを信用していただく必要のない形で証明可能に公正です。最初の出目の前に、サイコロの元になる秘密のシードへのコミットメントを公開し、両プレイヤーのアプリもそれぞれ自分の鎖にコミットします。それらはすべて、誰かが振る前にひとつの記録として固定されます。その後は一投ごとに、両者の鎖から新しいリンクが1つずつ消費されます。手番のプレイヤーが自分のリンクを手番の初めに公開し、相手はそれが固定されてから自分のリンクを解放し、出目は最後に導出されます。ですからどの出目でも、最後まで分からない入力は必ず盤の反対側にあります。開始の出目も例外ではなく、両者が寄与するまでどちらの目も存在しません。つまり各出目は、あらかじめコミットされた値から決定論的に決まります。私たちを含め誰も、出目を選ぶことも、別の値に差し替えることも、こっそり振り直すこともできません。これは成立した出目の値についての主張であり、そこで止まります。対局が取り消されるかどうか、メッセージが届くかどうか、誰の時間が切れたかは、その外側にあります。上のツールは、終了した対局のすべての出目を公開された記録から再導出します。誰でも同じ計算を繰り返せます。できないのは、その記録があなたの対局だと確認することです。それには対局前にあなたの端末が固定した値が必要で、その値を持っているのはあなたのアプリだけですから、その最後の一歩はアプリの「検証」画面で行われます。
同じくらい重要なのは、出目がどこで振られるかです。サイコロが生成されるのは決してあなたの端末上ではありません。あなたの携帯電話は、サーバーがすでに振った出目を表示するだけです。この一つの設計上の決定が、サイコロ不正の一族すべてを取り除きます。改造されたアプリは振り直せず、遅延の乱れは出目を複製できず、クライアント側のどんな小細工も次の数字をのぞき見できません。なぜなら、次の数字は読み取れる形であなたの端末に置かれてはいないからです。その数字はサーバーで、しかも両者がその手番のリンクを解放したあとにはじめて導き出されます。
そして出目は決して調整されません。「エンゲージメント曲線」もなければ、逆転の仕掛けもなく、連敗中のプレイヤーへの後押しもありません。生成器は誰が勝っているかを知らず、気にもかけません。
ボード:一手ごとに検証される
ボードそのものがずれたり改ざんされたりできるなら、公正なサイコロにもほとんど意味がありません。そのため、ゲームは厳格なサーバー権威モデルで動作します。あなたの端末は、ボードがどう見えるかをサーバーに決して伝えず、あなたの意図だけを送ります(「この駒を13ポイントから8ポイントへ動かす」)。サーバーはその手を公式のルールと公式のボードに照らして検証します。不正な手は、改造されたクライアントが何を主張しようと、単に拒否されます。
次に二重チェックが来ます。状態が更新されるたびに、サーバーは本当のボード位置のコンパクトな指紋(ハッシュ)を配信します。あなたの端末は自分のローカルなボードから同じ指紋を計算して比較します。駒が一つでも異なれば、クライアントは自分のコピーを破棄し、サーバーから再同期します。こうして、両方のプレイヤーが常に同じ対局を見ていることが証明でき、ずれは一往復で自己修復し、古い、あるいは操作されたボードでプレイされる隙は存在しません。
対戦相手:Glicko-2 のマッチメイキング
公正さは、誰と対戦するかにも関わります。ここでのレーティングはGlicko-2を使います。これはEloの現代的な後継で、あなたのプレイの強さと、その推定に対するシステムの確信度の両方を追跡します。そのため、新しいプレイヤーは50局も他人の踏み台になる代わりに、素早く自分の本当のレベルに収束します。マッチメイキングはあなたを近いレーティングの相手と組み合わせ、レーティング対象の結果は対局ごとにシステムへ反映されます。
結果として、勝ったときは同格の相手を上回ったということです。負けたときは、学ぶべき本当の何かがあります。多くは戦略ガイドの中に。
公正なサイコロが実際にどう感じられるか
ここに居心地の悪い真実があります。本当にランダムなサイコロは、多くの人が思うよりも波が激しく感じられます。真のランダム性は、4回連続のダブル、1ポイントのボードに対する入り損ねの連続、そして最後の出目の奇跡を、確率が予測するとおりの頻度で生み出します。17/36 のショットが2回連続で外れることは、4回に1回以上起こります。記憶は理不尽な出来事を残し、平凡なものを捨てます。だからこそ、経験豊富なオンラインプレイヤーには誰しも「イカサマのサイコロ」の逸話があり、そしてここでは、どんな統計的な検査もそのうちの一つさえ裏付けたことがないのです。
自分の直感を調整したいなら、確率の基礎ガイドが本当の数字を並べています。36通りの組み合わせ、あらゆる距離でのヒット率、バーからの入り目の確率。特定のどの数字も36回のうち11回現れると知ることは、「あり得ない不運」を「ただの火曜日」に変えます。
より深い技術的な内容、つまり生成器の種類、コミット・リビール証明の仕組み、そして「イカサマ」の連続にまつわる心理を知りたいですか? ブログにあります。サーバー側RNGが実際にどう動くのか。
私たちの約束
- サーバーで生成される、証明可能に公正なサイコロ: 端末で振られることは決してなく、どのプレイヤーにも状況にも合わせて調整されず、両者が最初の出目の前にコミットした入力から導かれます。対局が終われば公開された記録からすべての出目を再導出でき、その対局があなたのものだという確認はアプリが行います。
- 大元でのルール適用:すべての手はサーバーが検証します。改造されたクライアントは何も得られません。
- 継続的なボード検証:更新ごとにハッシュで照合し、不一致があれば自己修復します。
- 技量に基づくマッチング:Glicko-2 のレーティングとレーティングに基づくマッチメイキング。
公正なサイコロが意味するのは、テーブルに残る唯一の優位が技量であるということ、そして技量は学べるということです。ルールから始め、戦略で磨き、そしてそれを実戦で試してください。下のテーブルは無料で、ブラウザ上で、インストール不要です。