CoinPokerでの透明カードシャッフルの上級ガイド
これまで、オンラインポーカールームはカードシャッフルソフトウェアを秘密にしてきました。コインポーカーのトランスペアレントカードシャッフラーは、そのような状況を変えるために開発されました。 一方向暗号ハッシュ関数を使用し、 … CoinPokerでの透明カードシャッフルの上級ガイド
ニュース- ハンドハインドサイトを使って未解決のカードを見る
- RNG検証ツールであなた自身の貢献を検証する。
- RNGの内部構造に対する透明性の獲得
透明なカードシャッフルの背後にある技術に飛び込む前に、私たちの簡単なチュートリアルをご覧ください!
参加証明のための検証ツールの使い方
私たちの透明カードシャッフラーが全く初めての方は、こちらのスクリーンショット付きの基本ガイドをチェックすることから始めることをお勧めします。ステップ1 : ハンドの公平性を証明するためには、前述の一方向ハッシュ関数にアクセスする必要があります。ステップ2: ここでハッシュ配列の長いリストを見つけることができます。最初のセクションは最初のデッキ順の各カード、次に各プレイヤーとCoinPokerからの暗号化されたシード、最後に最終デッキ順の各カードのハッシュです。シャッフルされたハッシュされたデッキの下に記載されている数字はデッキ内の位置、各プレイヤーのハッシュはハンド開始時に提出された暗号化された「シェイクファクター」と考えてください。ステップ7: 次のステップはハンドの検証です:
- あなたが “シェイク “に参加したことを証明することで、公平性を検証する。
- 最終的なデックの中のカードの実際の位置が、シャッフルの前にあなたが決定 に参加した暗号化された位置と一致するかどうかを検証する。
オプション1:暗号化されたシードまたは “シェイク係数 “を検証ツールに入力してください。これらは青い矢印で示されています。出力は「集合的なシェイクファクター」または結合されたハッシュと 、 最終的なデックの順番になります。もしこれらが一致すれば、シャッフルへの参加は成功です!オプション2:配られたカードの中から1枚を選びます(これらは左側にハッシュ 、右側に暗号化されたハッシュ関数の両方があります。カード検証セクションで、右側の関数の中にハッシュを入力してください。出力はコインポーカーで左側に表示されているハッシュと、正しいカードの値でなければなりません。ステップ8:アンデルトカードの探索を楽しみ、オンラインポーカー初の分散型RNGシステムへの参加を証明しましょう!
高度な説明CoinPokerの透明RNGの仕組みシャッフルされていないカードのデッキを次の ように想像してください:2c, Qd, Kh実際には52枚のカードの順列がありますが、このプロセスの仕組みを理解するため、3枚に限定 します。このデッキオーダーを使って、CoinPokerは 初期デッキを作成 し、以下のステップでテーブルの全プレイヤーに共有します。
ステップ1
コインポーカーは シードと呼ばれる秘密の値を使ってRNGを実行 します。この値は一時的にしか存在せず、単に処理を開始するために使用されます。
ステップ2
CoinPokerはこのランダムシードを使って ソルト値を 生成 します。ソルト値は 一方向暗号化機能のパスワードやパスフレーズとして機能するランダムデータ です。これをカードと組み合わせ 、 デッキの各カードのハッシュを作成する。 先ほどの3枚のカードを使うと、計算式は次のようになる:
- ハッシュ(2c salt1) = aa
- ハッシュ(Qd salt2) = bb
- ハッシュ(Kh salt3) = cc
注:aa、bb、ccのハッシュは表現の都合上簡略化している。実際には、これらは256ビットの文字列であり、少なくとも人間にとっては少し扱いにくい。
ステップ3
CoinPokerはステップ1のランダムシードを使ってステップ2のハッシュ化されたデッキをシャッフルします。
- シャッフルされていないデッキのハッシュは以下の通り: aa (2c), bb (Qd), cc (Kh)
- ハッシュでシャッフルされたデッキ(初期デッキ )は次のようになります:bb (Qd), cc (Kh), aa (2c)
ステップ4
CoinPokerはこのハッシュ化されたデッキ(初期デッキの順番の全てのカードのハッシュを含むベクトル)を各プレイヤーに送ります。 ハッシュを使用する目的は、デッキから特定のカードを公開し、プレイヤーに確認してもらうことです。これで全プレイヤーはハッシュのリストを持っていることになる。 次のステップでは、プレイヤーからのインプットとCoinPokerからのインプットを組み合わせ、最終的なデッキを作成します。これをシードと呼ぶ。
ステップ5
このプロセスの複雑さを単純化するために、テーブルに2人のプレイヤーがいるとします。アリスとボブと呼ぼう。
ステップ6
アリスとボブはCoinPokerに送るシードのハッシュを計算する必要があります。計算式は以下のようになります:
- ハッシュ(Alice’s_seed) =XX
- ハッシュ(ボブのシード) =YY
ステップ7
CoinPokerはステップ1のシードではなく、新しいシードを生成します。このランダムなシードを使ってハッシュを作成する:Hash(CoinPoker’s_seed) = ZZ
ステップ8
プレイヤーのハッシュシードとCoinPokerの ハッシュシードが、コミットメントシードのリストにまとめられます :[XX、YY、ZZ]。
ステップ9
CoinPokerはコミットシードのベクトルをAliceとBobに送ります。
ステップ10
コミットメントシードを受け取った後、AliceとBobはステップ5で使用したリアルシードを送信する。これはハッシュを作るのに使われたシードである。つまり、Hash(Alice’s_seed) = XXとHash(Bob’s_seed) =YY である。
ステップ11
次に、実際のシードは 、集約シードを作成するために使用 される。この新しいシードは、CoinPokerのシードだけでなく、全てのプレイヤーのシードも考慮され、その結果、テーブル全体が貢献した値となります。
Hash(Alice’s_seed Bob’s_seed CoinPoker’s_seed) = aggregate_seed
ステップ12
CoinPokerは集約されたシードを使って最初のデッキをシャッフルします。そして、最終デッキのハッシュが全ての場所に配布される。これがハンドが完了するまで使用される最終デッキであることに注意してください。
最初のデッキQd, Kh, 2c → RNG with aggregate_seed → 最終デック:Kh, 2c, Qd (ハッシュ: cc, aa, bb)
RNG検証ツールの仕組み
暗号ハッシュ関数を使用する主な利点の1つは、シャッフルに関する情報を安全に開示できることであり、これは後にシャッフルが公正であったかどうかを証明するために使用できます。私たちはこれをRNG検証ツールと呼び、その仕組みを理解するための手順を続けます。 ボブもアリスもお互いの本当の種を知らず 、自分の本当の種にしかアクセスできないことに注意してください 。彼らがアクセスできるのは、他のプレイヤーとCoinPokerの全てのシードハッシュです(ステップ8と9を思い出してください)。 ハンドがプレイされた後、プレイヤーは参加者全員のリアルシードを受け取り、最終的なデッキシャッフルへの参加とカードのランダム性を確認するために使用することができます。
ステップ 13-18:シャッフルされたデックに対するプレイヤーの影響の検証
ステップ 13
まず、プレイヤーは各実の種を取り出し、それを使って自分の持っているハッシュ値が正しいかどうかを検証する必要がある。プレイヤーはこれを、ハッシュ式に実種を差し込み、その結果が実際に受け取った値と一致するかどうかをチェックすることで行う。
もしHash(Alice’s_seed)が実際に XXに等しければ、それは正しいものとして検証されます。
ステップ14
プレーヤーとCoinPokerからの全てのリアルシードがハッシュの検証に使われた後、プレーヤーはハッシュ関数に足りない値を入れることで、集約された_seedが正しいかどうかをチェックすることができます:
Hash(alice_seed bob_seed server_seed) =aggregated_seed
ステップ15
これで、各プレイヤーによって集約されたシードが正しいことが確認されたので、アリスかボブはRNG関数を逆にすることができます。最終的なデッキのハッシュと集計されたシードを最初のデッキを計算するために差し込むことで、プレイヤーはステップ4で受け取ったのと同じ最初のデッキの順番になるかどうかをチェックすることができます。
ステップ16
結果が初期デッキのハッシュ順序と一致すれば、そのプレイヤーは最終デッキのシャッフルに参加したことを証明できたことになります 。プレイヤーは最終デッキのカードのランダム性を検証することもできます。これは全てのコミュニティカードと、他のプレイヤーによって公開された手札(つまりマックされた手札ではない)に対して行うことができますが、説明のために最初の2枚のカードの公平性を検証する方法を紹介します:
ステップ17
ハンドが終わると、プレイヤーは 最初に配られた2枚の カードの価値と塩を受け取る 。 カードの値と塩は、ステップ2のHash関数で使用されていることに注意:
Hash(Kh salt3) = cc
ステップ18
アリスとボブはハッシュ関数のすべての変数の値を得たので、ステップ12で受け取った最後のデックシャッフルの最初のカードがKhであったかどうかを確認するために、ハッシュ関数を逆にすることができる。
Hash(Kh salt3)の結果がcc で あれば 、プレイヤーは最終的なデッキのハッシュ ccが 正しい ことを確認する 。 これはテーブル上のどの公開カードに対しても可能である。
未配布のカードやマックされたハンドの場合、プレイヤーはカードの 値やソルトを受け取らない。プレイヤーはハッシュにアクセスできるが、この方法でハッシュを公開することはできない。
専門家の説明と1,000,000CHPのバグバウンティ
上記の説明は、一般のポーカープレイヤーにとっては十分に高度なものかもしれないが、暗号愛好家にとっては氷山の一角に過ぎない。以下は、オリジナルのプロトコル文書と、GitHubにあるオープンソースコードへのリンクです:
透明性の精神に則り、透明なカード・シャッフル・システムに欠陥があることを証明できた人には、1,000,000CHPを提供します。報奨金の条件や請求方法の詳細については、 こちらの公式バグ報奨金ページをご覧ください。