Können gegnerische Agenten Münzen werfen?


9

Ich dachte über Peer-to-Peer-Spiele nach, indem ich ein einfaches Münzwurfspiel in Betracht zog.

Sie öffnen Ihre Version von P2PCoinFlipping Beta 2.3 und es wird eine Liste der Spielernamensserver angezeigt. Nach Auswahl des nächstgelegenen Servers erscheint eine Anzeigetafel der glücklichsten Spieler. Sie wählen den Spieler mit dem höchsten Rang und das Spiel beginnt. Seit du den Kampf begonnen hast, wählt der gegnerische Spieler die Münzseite, die Köpfe und dir werden Schwänze zugewiesen. Eine nette kleine Grafik zeigt eine taumelnde Münze, die schließlich auf den Köpfen landet. Schade, du verlierst.

Aber woher weißt du, dass das Ergebnis fair ist?

Wenn das Ergebnis auf Ihrem Computer ausgewählt wird, können Sie das Programm bearbeiten, um zu gewinnen. Dies gilt auch für den Gegner. Das Spiel ist nicht deterministisch, so dass Sie das Ergebnis scheinbar nicht bestätigen können.

Ist es möglich, dass sich mehrere unabhängige Gegner auf ein nicht deterministisches Ereignis einigen?


Obwohl die Frage nicht beantwortet wird, ist der serverbasierte Multiplayer gut - lassen Sie den Server der Schiedsrichter sein. Eine interessante Idee wäre es, sich auf einen Drittanbieter als Münzflipper zu verlassen. Könnte man zum Beispiel einen Online-GUID-Generator (wie guidgenerator.com ) als Basis für ein System verwenden?
Tim Holt

Antworten:


6

Dieses Verfahren erledigt die Aufgabe:

  1. Jeder der beiden Peers generiert eine Zufallszahl.
  2. Jeder Peer erstellt einen gesalzenen Hash seiner Nummer und sendet ihn an den anderen Peer.
  3. Jeder Peer lehnt die Anforderung ab, wenn er denselben Hash erhalten hat, den er gesendet hat.
  4. Sobald beide Peers den Empfang der Hashes des anderen bestätigen, sendet jeder dem anderen seine tatsächliche Zufallszahl.
  5. Jeder Peer überprüft, ob der vom anderen gesendete Hash tatsächlich ein Hash der Zufallszahl ist. den Austausch ablehnen.
  6. das Ergebnis des Münzwurfs ist das XOR des niedrigstwertigen Bits jeder Zahl, dh

    (a & 1) ^ (b & 1)

Eine alternative Lösung:

  1. Jeder der beiden Peers entscheidet zwischen ihnen, wer zuerst gehen soll. Nennen wir sie A und B, nur um originell zu sein.
  2. Peer A generiert seine Zufallszahl, erstellt daraus einen gesalzenen Hash und sendet den Hash an Peer B.
  3. B generiert seine Zufallszahl und sendet sie an A.
  4. A sendet seine Zufallszahl an B.
  5. B überprüft, ob der gesalzene Hash der Hash der Nummer ist, die er erhalten hat.
  6. Das Ergebnis des Münzwurfs ist das XOR des niedrigstwertigen Bits jeder Zahl, wie oben.

Ich habe diese Frage auf der Kryptografieseite gestellt und festgestellt, dass sie ziemlich sicher ist. Anscheinend ist dies eine Variation des Verpflichtungsschemas .


1
Dieses beschriebene Protokoll ist anfällig für einen Wiederholungsangriff, bei dem ein Peer nur die Nachrichten des anderen Peers wiedergibt, um das Ergebnis auf 0 zu setzen. Es können jedoch mehrere einfache Änderungen vorgenommen werden, um diesen Angriff zu verhindern.
Ilmari Karonen

Diese Version sollte in Ordnung sein.
Michael Slade

Wie verhindert dies, dass ein Peer einfach eine Zahl auswählt, anstatt sie zufällig zu generieren?
Kylotan

@Kylotan: Das tut es nicht, aber solange mindestens einer der Peers zufällig auswählt, ist das Ergebnis zufällig.
Ilmari Karonen

2
Ein Peer hat nicht einmal die ganze Zeit über 0 zu gewinnen, denn dies gibt dem anderen Peer den Vorteil. Das Endergebnis hängt gleichermaßen von den Zahlen ab, die beide Peers beigesteuert haben.
Michael Slade

2

Es stellt sich heraus, dass nicht nur gegnerische Agenten Münzen werfen können , sondern auch gegnerische Agenten Poker spielen können .

Das heißt, es ist in der Regel extrem rechenintensiv und ziemlich schwierig, es richtig zu machen. Der Implementierungsaufwand lohnt sich wahrscheinlich nicht. Schauen Sie sich an, wie viele Multiplayer-Protokolle für einen bösartigen Server unglaublich anfällig sind (nämlich: alle, die mir bekannt sind), und wie beliebt sie immer noch sind, und es scheint einfach keine praktische Zeitnutzung zu sein.

StarCraft II ist ein gutes Beispiel. Es ist ein Spiel, bei dem das Scouting von entscheidender Bedeutung ist und das Wissen, was der Feind tut, einen phänomenalen Vorteil bringen kann. Fünfstellige oder höhere Preise hängen regelmäßig von den Ergebnissen ab. . . und doch haben beide Computer jederzeit den gesamten Spielstatus gespeichert! Es ist trivial, ein Programm zu schreiben, mit dem Sie den Gegner direkt beobachten und ein großes Bein hochlegen können.

Es stellt sich heraus, dass keiner der ernsthaften Konkurrenten diese Programme verwendet. Es ist zu leicht zu erkennen ("Hey, Jim, woher weißt du immer, was ich baue, sobald ich es baue?") Und die Mühe einfach nicht wert.

Das heißt, wenn Sie mehr Informationen wünschen, sollten Sie sich eingehend mit Kryptografie befassen - dies ist nicht wirklich im Bereich der Spieleentwicklung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.