Register
Sarah 12月 16, 2018

CoinPokerでの透明カードシャッフルの上級ガイド

これまで、オンラインポーカールームはカードシャッフルソフトウェアを秘密にしてきました。コインポーカーのトランスペアレントカードシャッフラーは、そのような状況を変えるために開発されました。 一方向暗号ハッシュ関数を使用し、 CoinPokerでの透明カードシャッフルの上級ガイド

未分類

これまで、オンラインポーカールームはカードシャッフルソフトウェアを秘密にしてきました。コインポーカーのトランスペアレントカードシャッフラーは、そのような状況を変えるために開発されました。

一方向暗号ハッシュ関数を使用し、CoinPokerの新しいカードシャッフラーは、シャッフルのプロセスに関する情報を安全に開示することを可能にしました:

透明なカードシャッフルの背後にある技術に飛び込む前に、私たちの簡単なチュートリアルをご覧ください!

参加証明のための検証ツールの使い方

私たちの透明カードシャッフラーが全く初めての方は、こちらのスクリーンショット付きの基本ガイドをチェックすることから始めることをお勧めします。

ステップ1: ハンドの公平性を証明するために、前述の一方向ハッシュ関数にアクセスする必要があります。ハンド履歴タブの一番下にあるRNGシャッフル順の リンクをクリックすると、これらの関数が見つかります。

ステップ2: ここでハッシュ配列の長いリストを見つけることができます。最初のセクションは最初のデッキ順の各カード、次に各プレイヤーとCoinPokerからの暗号化されたシード、最後に最終デッキ順の各カードのハッシュです。

シャッフルされハッシュ化されたデッキの下に記載されている数字はデッキ内の位置であり、各プレイヤーのハッシュはハンドの開始時に提出された暗号化された「シェイクファクター」であると考えてください。

ステップ6: このデータは検証ツールなしでは役に立ちません。検証ツールはウィンドウ上部のリンクをクリックすることでアクセスできます。

ステップ7: 次のステップはハンドの検証です:

  1. あなたが “シェイク “に参加したことを証明することで、公平性を検証する。
  2. 最終的なデックにおけるカードの実際の位置が、シャッフルの前にあなたが決定 に参加した暗号化された位置と一致するかどうかを検証する。

オプション 1:

検証ツールに暗号化されたシードや “シェイク要因 “を入力します。これらは青い矢印で示されています。出力は「集合的なシェイク・ファクター」、つまり複合ハッシュと 最終的なデックの順番となります。

これらが一致すれば、シャッフルへの参加は成功です!

オプション 2:

配られたカードから一枚を選ぶ(このカードは左側にハッシュ 、右側に暗号化され たハッシュ関数を持つ)。カード検証セクションで、右側の関数の中にハッシュを入力してください。出力はCoinPokerで左側に表示されているハッシュと、正しいカードの値になるはずです。

ステップ8:アンデルトカードの探索を楽しみ、オンラインポーカー初の分散型RNGシステムへの参加を証明しましょう!

高度な説明コインポーカーの透明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を提供します。報奨金の条件や請求方法の詳細については、 こちらの公式バグ報奨金ページをご覧ください。

Sarah