敵対的なエージェントはコインを弾くことができますか?


9

単純なコイン投げゲームを考えて、ピアツーピアゲームを考えていました。

P2PCoinFlipping Beta 2.3のバージョンを開くと、プレーヤーネームサーバーのリストが表示されます。最も近いサーバーを選択すると、最も幸運なプレイヤーのスコアボードが表示されます。最高ランクのプレイヤーを選択すると、ゲームが始まります。バトルを開始してから、相手のプレーヤーがコインの面と表を選択し、テイルが割り当てられます。転がっているコインが最終的に頭に着陸するのを示す素敵な小さなグラフィックが表示されます。残念ですが、負けます。

しかし、どのようにして結果が公正であるとわかりますか?

コンピュータで結果が選択された場合は、プログラムを編集して勝つことを選択できます。これは対戦相手にも当てはまります。ゲームは確定的ではないので、結果を検証することができません。

複数の独立した敵対的なエージェントが非決定的なイベントに同意することは可能ですか?


質問には答えませんが、これがサーバーベースのマルチプレーヤーが優れている理由です-サーバーをアービトレーターにします。興味深いアイデアは、コインフリッパーとしていくつかのサードパーティのサービスに依存することです。たとえば、オンラインGUIDジェネレーター(guidgenerator.comなど)をシステムのベースとして使用できますか?
ティム・ホルト

回答:


6

この手順は仕事をします:

  1. 2つのピアのそれぞれが乱数を生成します。
  2. 各ピアはその番号のソルトハッシュを作成し、それを他のピアに送信します。
  3. 送信したのと同じハッシュを取得した場合、どちらのピアも要求を拒否します。
  4. 両方のピアが互いのハッシュの受信を確認すると、お互いが実際の乱数を送信します。
  5. 各ピアは、他のピアが送信したハッシュが実際には乱数のハッシュであることを確認します。交換を拒否します。
  6. コインフリップの結果は、各数値の最下位ビットのXOR、つまり

    (a & 1) ^ (b & 1)

代替ソリューション:

  1. 2つのピアはそれぞれ、どちらを先に実行するかを決定します。オリジナルとするために、それらをAおよびBと呼びましょう。
  2. ピアAは乱数を生成し、そこからソルトハッシュを作成して、そのハッシュをピアBに送信します。
  3. Bは乱数を生成してAに送信します。
  4. Aは乱数をBに送信します。
  5. Bは、ソルトハッシュが受信した数のハッシュであることを確認します。
  6. コインフリップの結果は、上記のように、各数値の最下位ビットのXORです。

私は暗号化サイトでこの質問をして、かなり安全であることを確認しました。どうやらこれはコミットメントスキームのバリエーションです。


1
説明されているこのプロトコルは、1つのピアが他のピアのメッセージをエコーバックして結果を強制的に0にするリプレイアタックに対して脆弱です。ただし、このアタックを防ぐために行うことができる簡単な変更がいくつかあります。
Ilmari Karonen 2012

このバージョンは問題ないはずです。
Michael Slade

これは、ピアがランダムに生成するのではなく、単に数値を選択するのをどのように停止するのですか?
カイロタン

@Kylotan:そうではありませんが、少なくとも1つのピアがランダムに選択する限り、結果はランダムになります。
Ilmari Karonen

2
ピアは常に他のピアに利点を与えるので、0を選択しても常に得るものはありません。最終結果は、両方のピアによって提供された数値に等しく依存します。
Michael Slade

2

敵のエージェントがコインを弾くだけでなく、敵のエージェントがポーカーをプレイできることがわかりました

とは言っても、計算コストが非常に高くなり、正しく処理するのが非常に困難になる傾向があります。それはおそらく実装作業の価値はありません。悪意のあるサーバーに対して陽気に脆弱なマルチプレーヤープロトコル(つまり、私が認識しているすべてのプロトコル)の数と、それらのプロトコルの人気の高さを確認してください。

StarCraft IIは良い例です。これは偵察が重要なゲームであり、敵が何をしているのかを知ることは驚異的なアドバンテージを与えることができ、5桁以上の賞品は定期的に結果に依存します。。。しかも、両方のコンピュータには常にゲーム全体の状態が保存されています。対戦相手を直接監視し、対戦相手を大きくするプログラムを書くのは簡単です。

結局のところ、深刻な競合他社はこれらのプログラムを使用していません。検出するのは簡単であり(「ねえ、ジム、私が構築している瞬間に、私が何を構築しているのかを常に知るにはどうすればいいのですか?」)、問題を起こすだけの価値はありません。

とはいえ、より多くの情報が必要な場合は、暗号化を詳細に検討する必要があります。これは、実際にはゲーム開発の領域ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.