プロバブリーフェアとは何か、どのような仕組みなのか

以下の証明可能な公平性計算機を使って、すべての結果を検証し、クラウドベットオリジナルがどのようにオッズの公正さを維持しているかを理解しましょう。
Above are two provably fair tools: a Game Verification Tool — paste your Server Seed, Client Seed, and Nonce from any round to reconstruct and confirm the outcome — and a Server Seed Verification Tool — verify that a revealed server seed matches the hash Cloudbet published before you played.

Cloudbet Originalsでベットするとき、すべての結果はご自身で検証できます。推測もごまかしも一切ありません——あるのはご自身で確認できる、純粋で証明可能なランダム性だけです。

「プロバブリーフェア」とは?

プロバブリーフェア(Provably Fair)とは、オンラインカジノで使われる仕組みで、すべてのゲーム結果が公正であり、プレイヤー自身が独立して検証できることを保証するものです。カジノをただ信頼するのではなく、結果がプレイ中に不正操作されていないことを数学的に証明できます。

Cloudbetのプロバブリーフェアの強み:

  1. Cloudbet Originalsは最新のプロバブリーフェアプロトコルで稼働しており、あらゆる結果が改ざん不可能で、独立して検証可能、かつ数学的に公正です。
  2. ラウンドが終了しシードが公開されれば、誰でもその結果が正当に生成されたことを数学的な確実性をもって検証できます。
  3. 各ラウンドの設計図をあらかじめ渡されているようなもので、隠された仕掛けもスピン後の言い訳も一切ありません。

プロバブリーフェアであるための条件

プロバブリーフェアであるためには、次の2点を証明する必要があります。

  1. すべてのゲームが、真にランダムで改ざん不可能な数列にアクセスできること——このページではこの部分を説明します。
  2. そのランダムな数列が、固定された透明な方法でゲームの結果を決定すること——同じ数列からは常に同じ結果が得られます。この部分はゲームごとに異なります——MinesやほかのOriginalsでの具体的な仕組みをご覧ください。

真のランダム性を保証するため、プレイヤーとCloudbetの両者が数値生成に関与します——どちらか一方だけで結果を操作することはできず、Cloudbetは自分たちが後から入力を変更していないことを証明しなければなりません。

主要用語

  1. ビット: デジタル情報の最小単位——「1」または「0」。ビットの並びが2進数で数値を表します。
  2. バイト: 8ビットで、最大256通りの値を表せます。当社のシードは32バイト(256ビット)の数値を使用します。
  3. シード: 乱数生成器への出発点となる入力値。同じシードからは常に同じ結果が得られます。
  4. サーバーシード: Cloudbetの秘密コード——プレイ開始前に生成される32バイトの暗号学的乱数文字列で、固定された後にプレイ終了後公開されます。
  5. クライアントシード: プレイヤー自身のコード——自分で設定するか、ブラウザに生成させることができます(最大255文字)。
  6. ノンス: 同じシードペアでプレイするたびに増加するラウンドカウンター。これにより各ラウンドが一意になります。
  7. ハッシュ/コミットメント: サーバーシードの安全な指紋で、プレイ前に共有されます。不可逆的なため、誰もそこから逆算してシードを推測することはできませんが、シードが公開された後にご自身でハッシュ化すれば、まったく同じコミットメントが再現されるはずです。
  8. ラウンドシグネチャー: サーバーシード、クライアントシード、ノンスを組み合わせてハッシュ化したもの——ラウンドの結果を決定する実際の入力値です。
  9. SHA3-256: コミットメントとラウンドシグネチャーの生成に使われるハッシュアルゴリズム。同じ入力からは常に同じ固定長の出力が得られ、逆算はできません。
  10. SHAKE256: ラウンドシグネチャーを、ゲーム結果の元となる乱数列に変換する柔軟なSHA-3系アルゴリズムです——同じ入力からは常に同じ出力が得られ、これが検証を可能にしています。
  11. 剰余(モジュロ): ある数をもう一つの数で割ったときの余り(例:16 % 5 = 1)——乱数を一定の結果セットのいずれかに変換するために使われます。
  12. シードのローテーション: 新しいランダムなペアを得るために両方のシードを更新すること。

ゲーム開始前の準備

各ラウンドが始まる前に、サーバーシードとクライアントシードという2つの数値が生成されます。

Cloudbetのゲームサーバーは、Node.jsの暗号学的randomBytes関数を使ってサーバーシードを生成します——32バイト(256ビット)の数値で、実質的には安全なデジタルコイントスを256回繰り返すのと同じです。このシードはシードペアがローテーションされるまで秘密にされます。後から変更されていないことを証明するため、サーバーは生成直後にこのシードをハッシュ化(SHA3-256を使用)してコミットメントを作成し、プレイ前にプレイヤーへ共有します——そのため、シードが公開された後にご自身でハッシュ化すれば、一致することを確認できます。

クライアントシードは、デフォルトではブラウザによって生成されますが、ご自身で設定することもできます。

ゲーム中

サーバーシード、クライアントシード、ノンスが結合され、SHA3-256で1つのラウンドシグネチャーへとハッシュ化されます——2人がそれぞれ名前の半分を秘密に持ち寄るようなもので、どちらも事前には結果の全体を知ることができません。

そのラウンドシグネチャーはSHAKE256に入力され、ゲーム結果を決定する乱数列が生成されます。SHAKE256は同じ入力から常に同じ出力を生成するため、公開されたシードとノンスを持つ人なら誰でも、あなたの結果を正確に再現できます——これが検証を可能にする仕組みです。その乱数列を実際のゲーム結果(例えば地雷の位置やダイスの出目)に変換する方法はゲームごとに異なります——MinesやほかのOriginalsでの具体的な仕組みをご覧ください。

公正なゲーム結果には、リジェクションサンプリングという手法も使われています——これは、生成された乱数が、割り算の偏りによって特定の結果に偏ることなく、すべての結果から真に等しい確率で選ばれることを保証する方法です。

リジェクションサンプリングの具体例として、10面のダイスを振る場合を例に短く説明します。ここでは結果が10通りあるため、Pは10になります。

10面のダイスを振る通常の方法は、乱数「X」を生成し、それを10で割った余り(X modulo 10)を計算するというものです。ダイスの目と同様にこの演算にも10通りの結果があるためです。しかし、事前にリジェクションサンプリングを行わずにこの方法を使うと、小さい結果に不当に偏ってしまいます。仮にXが4ビットの乱数だとすると、2⁴=16通り、つまり0から15までの値を取り得ます。このとき、Xを10で割った余り(X % 10)として考えられるすべての結果は次のとおりです。

  1. Xが0から9の場合:0 … 9
  2. Xが10から15の場合:0 … 5

これを図で表すと次のようになります。

ダイスの出目0から5は、それぞれ異なる2つのXの値から発生し得る一方、出目6から9は1つのXの値からしか発生しません。つまり、出目0から5が出る確率は出目6から9が出る確率の2倍になり、これは公正ではありません。

これは16が10で割り切れないために起こります。そこでリジェクションサンプリングでは、10で割り切れる最大の数を見つけます。4ビットの場合、Xが取り得る最大値は15で、この範囲に収まる10の最大の倍数は10であるため、10以上の乱数はすべて棄却します。こうすることで、Xの値として可能なのは0 … 9のみになります。補足:ある数が棄却された場合は、新たな数が再度サンプリングされます。

棄却のステップの後、XをPで割った余りを計算し、0からPまでの数値を得ます。これにより、Pに1つの割合で発生する結果のうちどれが選ばれるかが決まります。

ゲーム結果を検証する方法

  1. プレイ前に、コミットメントとご自身のクライアントシードを控えておきます。
  2. ラウンド終了後、シードをローテーションして使用されたサーバーシードを公開します。
  3. 公開されたサーバーシードをSHA3-256でハッシュ化します——保存しておいたコミットメントと一致するはずです。これにより、ゲーム中にシードが変更されていないことが確認できます。
  4. サーバーシード、クライアントシード、ノンスを下の検証計算機に貼り付けます——結果がゼロから再構築されます。
  5. それをゲーム内で見た結果と比較してください。一致すればそのラウンドは公正だったことが確認でき、不一致であれば不正操作を示すことになりますが(Cloudbetではそれは起こりません)。

よくある質問:プロバブリーフェアに関する疑問への回答

1. シードが長くランダムに見えるのはなぜですか?

ランダム性こそが公正さの核心だからです。長い文字列によって、Cloudbetとプレイヤーの双方が結果を予測したり操作したりすることができなくなります。エントロピーが多いほど、信頼性も高まります。

2. クライアントシードは変更できますか?

はい。ゲーム内のフェアネス設定からいつでもご自身のクライアントシードを入力できます。お好きなだけ何度でもローテーションできます。

3. サーバーシードが元のハッシュと一致しなかった場合は?

その場合は何か問題が発生しています。ハッシュ化の目的は、ゲーム開始前にシードが固定されていたことを証明することです。不一致は不正操作の兆候となりますが、Cloudbetではそのようなことは起こりません。

4. これを使うのに暗号技術を理解する必要はありますか?

いいえ。複雑な処理はすべてツールが行います。コピーして貼り付け、確認するだけです。

5. ハッシュとは具体的に何ですか?

デジタル署名のようなものだと考えてください。暗号アルゴリズムを使ってサーバーシードを撹拌することで生成されます。後から誰かがシードを改ざんしようとすると、ハッシュが変わるため、不正がすぐに見抜けます。

6. 結果の検証にサードパーティ製ツールを使えますか?

はい。Cloudbetのシステムは独立した検証ツールに対応しているため、当プラットフォーム外でも結果を再確認できます。

7. ゲームが楽しいなら、それで十分ではないですか?

公正さは付加的な機能ではなく、必須の条件だからです。仮想通貨でベットする以上、完全なコントロールと推測の余地のなさは当然の権利です。プロバブリーフェアはそれを標準として保証します。

プロバブリーフェアのゲーム別解説:

  1. プロバブリーフェア Mines
  2. プロバブリーフェア Pump
  3. プロバブリーフェア Plinko
  4. プロバブリーフェア Dice
  5. プロバブリーフェア Dice: Golden Ticket
  6. プロバブリーフェア Limbo
  7. プロバブリーフェア Roulette