オンラインカジノやギャンブルはビットコイン以前から存在していましたが、ビットコインの誕生以降"Provably Fair Gambling"という概念が誕生しました。要するに、参加者自ら不正が行われていないか検証することができる、公平性が明らかなギャンブルサイトが作られるようになったのです。


本日は日本では若干タブー視されているテーマですが、ビットコインの影響で誕生したギャンブルサイトにおける公平性検証の仕組みについて解説しようと思います。(単にビットコインで入出金できるオンラインカジノではなく、「ユーザーの入力を受け取ってから結果を決める」という不正が行われていないことが証明できるオンラインカジノについての記事です。)

検証のカギは「運命のハッシュ」

以下、「ギャンブル」は0~15の数字当てなどのシンプルなゲームだと思って読むと理解しやすいです。(2進数でいう0000~1111です)悪質なギャンブルサイトは、ユーザーの予想を受け取った後、ユーザーの想定と同じ結果にならないように操作するでしょう。毎回ではなくとも、サイト側が恣意的に結果を決めることができるといずれ不正が発生します。

逆に、「サイト側がユーザーの予想を受け取ってから結果を決めることはできない(ユーザーから入力を受け取った時点で結果が決まる)」ならばフェアなギャンブルになり、ユーザー側もその時点で結果が決まったと検証できれば"Provably Fair"(フェアと証明できる)となります。

これを実現するために、ユーザーが予想をする前の時点で、「運命のハッシュ」とも言えるものを交換するのです。

利用時の流れ

ユーザーがギャンブルを始めるとき、予想をする前の段階でサーバー側で秘密のシード(SERVER_SEED)が生成されます。ユーザーは予想をする際、まずサーバーから秘密のシードのハッシュ(SERVER_SEED_HASH)を受け取って保管します。その後、予想とともにサーバーにユーザー側のシード(CLIENT_SEED)と任意のナンス(NONCE)を送ります。

サーバーは(SERVER_SEED, CLIENT_SEED-NONCE)をハッシュし、その結果(RESULT)を利用して結果発表します。例えば、RESULTの最初の4ビットの値(0000~1111)を結果とする、などです。最後にサーバーは、ユーザーに対して結果とRESULT、SERVER_SEEDを送ります。

検証時の流れ

ユーザーは受け取ったSERVER_SEED_HASHが実際にSERVER_SEEDのハッシュであったことを検証することで、SERVER_SEEDが予想を受け取った後で生成されたものではないことが確認できます。(最初にデタラメなSERVER_SEED_HASHを送り、予想を受け取った後にユーザーが不利な結果となるSERVER_SEEDを見つけるという不正が考えられるため)

その後、SERVER_SEEDと自身が送信したCLIENT_SEED、NONCEを利用して同じハッシュ関数を使って確かにRESULTが得られることを検証できます。(毎回分やるのは面倒なので、まとめて検証するためのツールとかもあります。Provably fairという文言を掲載した時点で検証されることを受け入れているので、そういうサイトはトラストしている人も多いでしょうが。)

つまり、最初に受け取った「運命のハッシュ(SERVER_SEED_HASH)」は、結果の計算に必須な情報が「予想を送る前」に存在していたことを証明するのに使うことで、フェアなギャンブルを実現しているのです。

おわりに

ビットコインが直接関係あるというよりは、ビットコインが流行ることによってハッシュ関数を使ったり、秘密データを交換することによってトラストレス性を実現するという考え方が広まったことで誕生したProvably fair gamblingについての記事でした。

ギャンブルやゲーム、特にサイト運営者が不正を働く可能性が高いものについてこのような手法が活用されるのは、ブロックチェーンがお金の管理に使われるのと同じくらいしっくりきます。ひょっとすると、世の中に他にも活用できる分野があるかもしれません。