Einige Teile, die je nach Anwendungsfall hilfreich sein könnten:
Wenn Sie von Benutzern gleichzeitig Eingaben erhalten möchten, ohne dass die Möglichkeit besteht, Informationen vorzeitig zu ihrem Vorteil zu nutzen, können Sie das Bereitstellungsschema verwenden.Im Wesentlichen ist dies:
- Beide Spieler geben einen Hash der Aktion an, die sie ausführen möchten.
- Nachdem beide ihre Zusage gemacht haben, können beide ihre Klartextaktionen ausführen.
- Der Klartext kann mit den Hashes verglichen werden, um sicherzustellen, dass niemand seine Antwort geändert hat, nachdem er die Aktion des anderen erfahren hat.
Dies kann für eine Vielzahl von Dingen verwendet werden, einschließlich einer gemeinsam genutzten Zufallszahl (beide stellen eine ganze Zahl über Verpflichtungen bereit und xor sie zusammen nach der Freigabe, um den gemeinsam genutzten Wert zu erhalten.)
Für ein Spiel wie Poker ist dies jedoch unzureichend, da die Karten nur einer Person bekannt sein müssen, während sie weiterhin vom gemeinsamen Kartendeck gezogen werden können. Wikipedia hat einen ziemlich guten Algorithmus zum gemeinsamen Mischen mit einem Schema, bei dem beide Spieler jede Karte einzeln mehrmals verschlüsseln. Dies führt zu einer Situation, in der 2 Schlüssel erforderlich sind, um eine bestimmte Karte zu entschlüsseln, und beide Spieler über 1 verfügen. Der Artikel nennt Leistungsprobleme, aber ich denke nicht, dass AES oder ähnliches in dem für 2-Spieler-Poker erforderlichen Umfang unerschwinglich teuer ist.
Wenn ich einen Algorithmus entwerfen würde, müssten die Spieler zu Beginn des Spiels einen zufälligen Wert berechnen, der als Ausgangswert für alle anderen Operationen verwendet wird, und einen Hash dieses Werts gemeinsam nutzen. Auf diese Weise können sie diesen Wert nach dem Spiel teilen und Sie können überprüfen, ob sie das Protokoll korrekt befolgt haben, und zwar ohne Spielereien.