自分だけのクイズ作成 - Quipha公開中

【天鳳】牌山の検証を試してみた

麻雀
スポンサーリンク

はじめに

皆さん天鳳やってますかー。私は最近、絶不調で・・

直近の成績、323241313333432424424432221..

何やっても上がれない時期が・・

あまりにも連続で負けると、牌操作を疑ってしまうくらい、やさぐれますよね😖

それはさておき、天鳳は牌山の検証を行うことができます
前からやってみようとは思っておりましたが、今回試してみました。

検証することによって、「対局の途中で牌操作されていない」ことが分かります。
例えば、リーチがかかったとして、「一発で当たり牌を掴む」といった操作が行われていない証明ができます。
対局前には、全て牌の順番は決まっています。

牌山の検証ができれば、多少運が悪くても、やさぐれることはなくなるはず、多分。

ハッシュ値と仕組みについて

天鳳サイトを確認します

オンライン対戦麻雀 天鳳 / 牌山乱数

ハッシュとは

ざっくりハッシュの特徴として、

  • あるデータをもとに、ハッシュ値を作れる。
  • 元データが同じであれば、同じハッシュ値が作れる。
  • ハッシュ値から元のデータに戻すことができない。(一方向性)

天鳳の場合、以下の情報をSHA512でハッシュ化しているとのことです。

ソースは4(座席並べ替え情報) + 624*8(乱数種) = 4996bytes

https://tenhou.net/stat/rand/

ハッシュ値とは、以下のような値です。

57f2fc2d1ffe7ad64e5b71321e5ed59469ede8e59699f104d02b22ae19b781d2970a626e4fadcfd828a7b929f1ad05348bc55dacf530bf1236cff4be317d11e2

牌山検証の仕組み

天鳳は、事前に「牌山を生成する情報」をハッシュ化して公開しています。

この値からは、元のデータに戻すことができないので、

事前に公開しても問題ないんですね。

対局が終わった牌譜に牌山を生成する情報が入っており、全く同じハッシュ値を作成することができます。

つまり、牌山を生成する情報は事前に公開されており、対局に使われたことを検証することができます。

何が保証されるか

牌山の並び順は事前に決まっていますので、「他家リーチに対して、一発を振り込みやすい」とか、局の展開によってツモ順を変更されることはありえないということになります。(牌操作は無い)

また、事前にハッシュ値一覧が公開されており、そのうちのどれかが使用されるので、特定のユーザに対して特別な牌山を選択していないことも分かると思います。

牌山の検証

それでは、早速試してみましょう。自分が対局する卓のハッシュ値を開きます

私は上級卓の喰アリ赤を表示しました。

このような画面が表示されます。

ハッシュ値の一覧です。USEDと書かれているものが、すでに使用されているもので、それ以外はこれからの対局に使われるハッシュ値です。

ハッシュ値を確認したら、直ぐに対局を開始しましょう。

親の倍満を食らって終了しました。深呼吸、深呼吸😑
牌譜の対局の結果を右クリックして、「リンクのアドレスをコピー」をクリックします。

コピーしたURLをサイトの「牌譜URL to SHA512」へ貼り付けて、OKボタンをクリックします。

牌譜から、以下のようなハッシュ値を取得することができました

4f0e9b69986272c3a70cb0a533ef27d1986d213e9762bb3cf5ead73ccb0e3ae0c053fcfbff97e2e9402f10c3e9bff7f93b5c4ca07724013a435f5371e9163e3a

このハッシュ値は、最初に開いたハッシュ値の一覧の中にありました

これで、事前に公開されたハッシュ値と、牌譜から作成したハッシュ値が、同じことを確認できました。
以上で、検証は終わりです。

ハッシュ値の再計算

天鳳の「牌譜URL to SHA512」というツールで、牌譜からハッシュ値を求めましたが、本当なのかという疑惑が残ります。

– SHA512のソースは4(座席並べ替え情報) + 624*8(乱数種) = 4996bytes
– SHA512は牌譜と座席から再計算可能です

https://tenhou.net/stat/rand/

有料会員であれば対局の牌譜のダウンロードは可能です。

オンライン対戦麻雀 天鳳 / HTML5+JS版牌譜ビューアβ

自分のIDを入力し、ダウンロードリンクから、mjlogファイルを取得することができます。

ダウンロードしたファイルはgzip圧縮されていますので、拡張子を変更して解凍します。

ファイルをテキストエディタで開くと、XML形式のデータを確認できます。
先頭部分に、この対局で使用した乱数種が記載されています。

<mjloggm ver="2.3"><SHUFFLE seed="mt19937ar-sha512-n288-base64,乱数種" ref=""/>

この乱数種から、牌山の生成は可能です。(この件に関しては以下の記事で検証)

さらにハッシュ値の再計算はできます。
天鳳のページにも「牌譜と座席があれば再計算できる」とのことなので、引き続き調査してみた結果、以下の記事でハッシュ値の生成を検証できました。

まとめ
  • 事前に公開されているハッシュ値と、対局後の牌譜から作成できるハッシュ値が一致する(本記事)
  • ハッシュ値の元となる乱数種から、牌山を生成できる(別記事参照)
  • 乱数種からハッシュ値を生成できる(別記事参照)

ちょっと難しくなりましたが、上記のことから、事前に牌山が決まっていることが確認できます。

さいごに

天鳳ブログでも、牌山生成など情報を公開していますので、不正はないと思っていましたが、自分で確認できましたので、だいぶスッキリしました。
(不正するメリットもないですしね)

ということで、天鳳やろっと✋

コメント

タイトルとURLをコピーしました