コミットメントスキームとは
コミットメントスキームは、プレイヤーとプラットフォームが選んだ秘密の値を安全にコミットし、他の人には隠しておくための仕組みです。後でその値を公開することで、第三者がコミットメントが公開された値と一致しているかを確認できるようになります。これにより、カジノの透明性が確保されます。
コミットメントスキームは、主に「コミットメントフェーズ」と「リビールフェーズ」の2つの段階から成り立っています。
コミットメントフェーズ
コミットメントフェーズでは、プレイヤーとオペレーターが生成した特定の値をロックして、ゲームの結果を作り出します。
簡単に説明すると、3つの値がコミットされ、ゲームの出力を生成します。一度コミットされた値はリビールフェーズまで変更できません。この段階では、改ざんを防ぐためにハッシュ処理が行われます。
アクティブクライアントシード
アクティブサーバーシード(ハッシュ未処理)
ノンス
Output = Commit(Active_Client_Seed, Active_Server_Seed, Nonce)
アクティブクライアントシードはプレイヤーが決める値で、ハッシュ化されていません。
アクティブサーバーシード(ハッシュ未処理)は秘密にされ、サーバーが生成します。この値はハッシュ化され、ハッシュ結果のみがオペレーターとプレイヤーに表示されます。
ノンスは最初に0に設定されており、ゲームが進むごとに増加します。
この3つの変数の組み合わせによって、コミットメントの出力が常に異なることが保証されます。
リビールフェーズ
リビールフェーズでは、ハッシュされていないサーバーシードを公開します。ハッシュされていないシードとノンスが分かることで、ユーザーは自分の結果を確認できるようになります。
プレイヤーが結果を確認するには、まずサーバーシードとクライアントシードのペアを変更する必要があります。これを行うと、プラットフォームは以前のアクティブなサーバーシードをハッシュ解除して表示します。これにより、プレイヤー、オペレーター、さらには第三者も、クライアントシード、サーバーシード、ノンスの3つの情報を知ることができます。
これらの情報を使って、特定のゲームやラウンドの結果を証明することができます。
サーバーシード
サーバーシードは、システムによってランダムに生成される64文字の16進数の文字列で、SHA-256でハッシュ化されます。ハッシュ化には2つの重要な目的があります。
不正防止:ユーザーがハッシュから元のサーバーシードを逆算することが不可能(第一次前画像抵抗)で、プレイヤーが不正を行えないようにします。
操作防止:SHA-256の衝突抵抗性により、同じハッシュ出力を持つ異なる入力を見つけることができず、オペレーターがプレイヤーを不正に操作するのを防ぎます。
ゲームが終了し、ユーザーがクライアントシードを変更したときに、カジノはサーバーシードをハッシュ解除して検証します。
クライアントシード
クライアントシードは、プレイヤーであるあなたに属しており、ゲームの結果のランダム性に影響を与えます。
最初はブラウザによってランダムに生成されますが、自分の好みに合わせて編集することが推奨されます。これにより、あなたがゲームの結果に影響を与えることができます。
ノンス
ノンスは「一度だけの数」を意味します。同じサーバーシードとクライアントシードのセットで新しいベットが行われるたびに、ノンスは増加します。
これにより、サーバーシード、クライアントシード、ノンスの組み合わせがゲームごとに異なり、コミットメントスキームの出力も変わることが保証されます。
これらの値がどのようにコードで実装されているかについて、さらに詳しく学んでみてください。