自由研究

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

投稿日:

今日、雀魂のアップデートがあり、牌山の検証システムに使われるハッシュ値が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

Instant NeRF(instant-ngp)で遊んだのでフォトグラメトリーと比較する

最近グラフィックボードを買って、CUDA環境を手に入れたのでかねてから興味のあったNeRFを試してみました。 そんな中で、フォトグラメトリーとの似ているところ、違うところが見えてきたので紹介したいと思 …

no image

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

本編 デジタルデータとは CDに記録されているのはデジタルデータです。 デジタルデータとは、ごく簡単に言うと”0″と”1″で表現されたデータのことです。 …

VTuberのコラボ関係のネットワークグラフを作ったので解説します

VTuberのコラボ相手をグラフにして可視化すると割とバズりました。 2020年にコラボしたVTuberのネットワークグラフができた……けど……これはもうグラフとは呼べない謎のカタマリだなぁ。なんとな …

no image

NHKを従量課金にすると1時間いくらになるの?

もくじ はじめに ワンセグチューナー付きのケータイもNHK受信料の支払い義務があるとかなんとかニュースになってます。 そもそもNHK受信料って月額制の契約をやめて、従量課金にできないもんなんでしょうか …

M5StickC PlusとSwitchBot温湿度計で家中の温度と湿度を管理するぞ

はじまり 結構長いあいだ在宅勤務を続けていると、自宅の情報をデータ化したくなるものです。 特に仕事スペースの快適さというのは気になるもので、以前から温湿度の表示がついた置き時計を置いてたんですが、以下 …