Ich wurde diese Frage gestellt, habe aber keinen Artikel gefunden, der eine gute Methode beschreibt. Stattdessen kam ich mit meiner eigenen Methode heraus (siehe meine Antwort unten). Es ist aber auch möglich, dass ich nur eine Methode gefunden habe, die ich nicht schlau genug bin zu brechen. Ich gebe diese Frage an Sie weiter:
Alice und Bob möchten ein Brettspiel per E-Mail spielen. Sie müssen einen Weg finden, die Würfel so zu würfeln, dass sie nicht schummeln können.
Was ist ein guter Algorithmus dazu?
Dies ist ein klassisches Problem in der Kryptographie.
Ein solches Papier: Coin Flipping per Telefon .
Es gibt auch einige Unmöglichkeitsergebnisse.
Zum Beispiel verweisen [C86] in diesem Papier hier: Ссылка
Ich hoffe, das hilft.
Spiele, die per Post gespielt werden - egal ob per E-Mail oder nicht - verwenden eine öffentlich verfügbare (Pseudo) Zufallszahl - typischerweise die niedrigste Ziffer einer Aktienkurse an einer bestimmten Position in einer Aktienliste (nicht eine bestimmte Aktie). Dies konnte nicht vorhergesagt werden und war nach dem Ereignis verifizierbar. Die Spieler würden Details austauschen - bevor die Würfel rollen - welche Position der Börsennotierung (typischerweise bei Geschäftsschluss) für die nächsten Würfelwürfe verwendet werden sollte.
Verwenden Sie einen vertrauenswürdigen Dritten wie Ссылка , der E-Mails mit Seriennummern und einem online überprüfbaren Hashwert per E-Mail versenden kann.
Alice und Bob müssen in der Lage sein, einander einen Beweis zu schicken, dass sie eine Nummer ausgewählt haben, bevor sie angeben, welche Nummer sie ausgewählt haben. Dann muss die Nummer, die sie gewählt haben, gegen den Beweis verifiziert werden. Schließlich müssen beide Zahlen in einer Weise zusammengefügt werden, die nicht jedem eine totale Kontrolle über das Ergebnis gibt.
Im Folgenden kann crypto_function
etwas wie sha1sum
oder md5sum
:
Schritt 1 :
benötigt, um den Bereich der möglichen Werte für crypto_function
unter ausreichend groß zu machen
Ra1
und Ra2
aus und sendet Ra1
an Bob. Rb1
und Rb2
aus und sendet Rb1
an Alice. Schritt 2 :
erstellt den Beweis Hx
, dass der Wert Vx
jetzt fixiert ist, aber verhindern, dass dieser Wert aus diesem Beweis abgeleitet wird
Va
(0 & lt; = Va
& lt; = 5), erstellt eine Zeichenfolge Sa="Va Ra2 Rb1"
und sendet eine Ha=crypto_hash(Sa)
an Bob. Vb
(0 & lt; = Vb
& lt; = 5), erstellt eine Zeichenfolge Sb="Vb Rb2 Ra1"
und sendet eine Hb=crypto_hash(Sb)
an Alice. Schritt 3 :
erzeugt das gewünschte Ergebnis V
Sa
an Bob. Bob Berechne Ha
von Sa
und vergleiche es mit Ha
von Schritt 2. Nimmt Va
von Sa
und berechne den Wert V=(Va+Vb)%6+1
. Sb
an Alice. Alice Berechne Hb
von Sb
und vergleiche sie mit Hb
von Schritt 2. Dann wird Vb
von Sb
genommen und der Wert V=(Vb+Va)%6+1
berechnet. Aktualisieren :
Basiert auf Münzwurf per Telefon , vorgeschlagen von @ Moron kann der Algorithmus zu:
werden Bob wählt eine Zufallszahl R
und den Wert 0 <= Vb <= 5
,
Berechnet einen Hash H=crypto_hash("Vb R")
und sendet ihn an Alice.
Alice wählt den Wert 0 <= Va <= 5
aus und sendet ihn an Bob.
Bob sendet Vb
und R
an Alice;
Bob berechnet V=(Va+Vb)%6+1
Alice überprüft H=crypto_hash("Vb R")
;
Alice berechnet V=(Va+Vb)%6+1
... Obwohl ich mich besser fühlen würde, wenn:
0. Alice wählt eine Zufallszahl Q
aus und sendet sie an Bob.
Und die zu hashende Zeichenfolge wird dann "Vb Q R"
.
Alice und Bob einigen sich auf zwei Session-Schlüssel mit Diffie-Hellman, Sa
und Sb
. Jeder Sitzungsschlüssel ist der Ausgangspunkt eines Zufallsgenerators, Ra
und Rb
.
Die RNGs werden als einmalige Pads für jeden Würfelwurf verwendet. Wenn Alice rollen möchte, nimmt Ra[i]
, wobei i
die i-te Zufallszahl in der Sequenz ist. Alice sendet sowohl i
als auch Ra[i]
an Bob. Bob kann i
mit seiner eigenen Kopie von Ra
verifizieren.
Dies hält Alice ehrlich, indem sie fordert, dass sie sequentielle Werte von i
verwendet, die von Bob verifiziert werden können.
Ich erhielt eine Antwort auf eine ähnliche Frage, die ich fragte: Wie kann ich Würfel für R machen? Die Antwort war ein Programm für R neben einem Programm für "intime Würfel". Ich bin mir nicht sicher, an welchem Würfel Alice und Bob interessiert sind, aber ich schlage vor, R zusätzlich zu einem Remote-Desktop zu verwenden, damit jeder Spieler sehen kann, dass der andere nicht betrügt.
Ich weiß nicht, wie ich die Codes schreiben soll, also habe ich die Antwort kopiert / eingefügt:
Wenn Sie Würfel im statistischen Programm R machen wollen. Beginnen Sie mit dem Download hier: Ссылка .
Verwenden Sie das folgende Skript, um einen normalen Würfel zu machen: #Dice Roll-Funktion RollDie = Funktion (n) Beispiel (1: 6, n, ersetzen = T) #use Sterben RollDie (n)
%Vor%Richten Sie einen automatisierten Third-Party-Server ein, wo jeder E-Mails zum Würfeln und Weiterleiten an den anderen Player sendet?
Ansonsten ist es einfach zu viel Arbeit, um dieses Spiel zu spielen und ich höre auf!
Tags und Links algorithm dice cryptography