自由研究

オンライン麻雀ゲームの牌山イカサマの検証について

投稿日:

今日、雀魂のアップデートがあり、牌山の検証システムに使われるハッシュ値がMD5からSHA-256にアップデートされました。
で、牌山検証とはなんぞや、というと、オンライン麻雀はシステムがイカサマをしているんじゃないかという懸念を払拭するために提供されている仕組みのことなのです。

さて雀魂に搭載されている検証システムはどういうものか、というとですね。

  1. 対局開始時にシステムが牌山を決定し、牌山を文字化した「牌山コード」とその牌山コードの「ハッシュ値」が生成される。
  2. 対局中、プレイヤーは「ハッシュ値」を確認できる。
  3. 対局終了後、プレイヤーは「牌山コード」を見ることができ、「牌山コード」と「ハッシュ値」の一致を検証できる。

という仕組みです。
これによって、たとえば「誰かがリーチしたら、牌山の中が入れ替わって俺のツモに当たり牌が来るんだよ!」という、コンピューター麻雀あるある(大昔のゲームにはマジでこういうものがあったらしいです)のイカサマが行われていないことが分かる、というわけです。
つまり、「雀魂は牌山の中が入れ替わって変なツモを掴まされることは無い」んです。

やりましたね。これで全てのイカサマは封じられました。
……そうでしょうか?

  • リアル麻雀よりも高い確率で天和がアガれるようになっているのでは?
  • 配牌で国士手が来たら、么九牌をツモりやすいような牌山になっているのでは?
  • 特定のプレイヤーを優遇/冷遇した配牌になるように調整されているのでは?
  • 終盤のラス目には一発逆転手が来やすいようになっているのでは?

など、牌山の時点で積み込みを行うイカサマは防げていないのです。

一応立場を表明しておきますが、私は雀魂がイカサマを行っていると考えているわけではなく、「雀魂はイカサマをしていない(はずな)のに、それがきちんと証明できていない」ということを怒っているのです。

さて、ではどうすれば良いか。
牌山に積み込み的なイカサマが無いことを証明するには、牌山の生成方法を公開するしかないでしょう。
しかも、単にランダムな生成アルゴリズムですよと言い張るだけでは、「都合の悪い牌山を捨てる」というイカサマが有り得てしまいます。
雑に言えば「雀魂が牌山のリセマラをするかもしれない」ってことです。
というわけで、牌山生成にユーザーが介入して、雀魂に牌山リセマラをさせないようユーザーの手で制御しなければいけません。

一方で、「牌山生成をユーザーが操作したら、それは牌山丸見えと同じだろ」と思われるでしょう。
もちろん普通に公開すれば丸見えになります。
なので、「生成アルゴリズムは公開するし、イカサマがないことを保証できるようにするが、牌山丸見えにはならない」ようにする必要があります。
話がちょっと学術の範囲に踏みこんでますが、実際のところそんなに難しくはありません。

  1. 牌山生成アルゴリズムは公開しておく。
  2. 対局前に、プレイヤーがそれぞれランダムな数字(P1~P4)を作成する。
  3. 対局開始時に、システムはプレイヤーから得た数字を組み合わせた数字(たとえばP1⊕P2⊕P3⊕P4)を作り、その乱数を元に牌山を生成する。
  4. 対局中は自分の作成した数字以外は見られない。これで牌山丸見えを防ぐ。
  5. 対局終了後、全プレイヤーの作成した数字(P1~P4)を見ることができ、「P1~P4」と「牌山生成アルゴリズム」から、不正なく牌山が生成されたことを検証できる。

などとすれば良いはずです。
ちなみに牌山の全パターンは2の600乗以上あるらしい(参考:麻雀の数学)ので、各プレイヤーはそれを超える範囲の乱数、たとえば1024bitの乱数を持ち寄るべきですね。
あと、この方法を使うとプレイヤーの手で「牌山の乱数調整」が可能になってしまいますが、この対応は例えば「P1~P4に加えて5分ごとに切り替わる乱数値P5も用いて後で公開する」などで対応できるかと思います。

と、いうわけで、「どうせ検証可能にするならここまでやってくれよ」という話でした。おしまい。

-自由研究

執筆者:

関連記事

no image

不定期連載「認証と周辺技術」その1「認証と識別」

たまには技術っぽい記事もないとな、と思ったので、最近ちょっと気になっている「認証」について、調べながらまとめます。 さらっと書ける範囲でこまめに書きたいです。 もくじ1 はじめに2 「認証」とは3 「 …

no image

暦の面倒臭さと和暦の元号カレンダーを作った話

もくじ1 前書き2 そもそも暦とは3 暦をどう捉えるのか3.1 1000年前の今日はいつ?4 対応カレンダーの必要性4.1 聖徳太子が生まれたのは何日前?5 対応カレンダーの作り方6 おわりに 前書き …

no image

VTuberのネットワークグラフを作ったぞ2024

今回、実に4年ぶりにVTuberのネットワークグラフを作りました。 前回の記事はこれ。 もくじ1 グラフ1.1 [追記分]2 作り方2.1 VTuberの一覧を作れない2.2 チャンネルの表記が増えた …

no image

CDはなぜ音質が劣化するのか、あるいはしないのか

もくじ1 本編1.1 デジタルデータとは1.2 デジタルデータの読み書き1.3 デジタルデータの破損1.4 符号化とは1.5 CDの音質は劣化するか1.6 アナログ信号はノイズを受ける1.7 音楽CD …

no image

DCEXPO2017に行ってきました

10/27~29にかけて、お台場の日本科学未来館で開催されたデジタルコンテンツエキスポ2017を見に行ってきました。 どれも見ごたえのある展示ばかりで、非常に面白かったのでいくつか紹介したいと思います …