¿Pueden los agentes adversarios lanzar monedas?

9

Estaba pensando en los juegos entre pares al considerar un simple juego de lanzamiento de monedas.

Abre su versión de P2PCoinFlipping Beta 2.3 y muestra una lista de servidores de nombres de jugadores. Después de elegir el servidor más cercano aparece un marcador de los jugadores más afortunados. Eliges al jugador de más alto rango y comienza el juego. Desde que comenzaste la batalla, el jugador contrario elige el lado de la moneda, las caras y se te asignan colas. Aparece un pequeño gráfico que muestra una moneda que cae finalmente en las cabezas. Lástima que pierdas.

Pero, ¿cómo sabes que el resultado es justo?

Si el resultado se elige en su computadora, puede editar el programa para elegir ganar y lo mismo se aplica al oponente. El juego no es determinista, por lo que parece que no puedes validar el resultado.

¿Es posible tener múltiples agentes adversarios independientes de acuerdo en un evento no determinista?

AnnanFay
fuente
Aunque no responde la pregunta, esta es la razón por la cual el multijugador basado en servidor es bueno: deje que el servidor sea el árbitro. Una idea interesante sería confiar en algún servicio de terceros como el lanzador de monedas. ¿Podría uno, por ejemplo, usar un generador de GUID en línea (como guidgenerator.com ) como base para un sistema?
Tim Holt el

Respuestas:

6

Este procedimiento hará el trabajo:

  1. cada uno de los dos pares genera un número aleatorio.
  2. cada par crea un hash salado de su número y lo envía al otro par.
  3. cualquiera de los pares rechaza la solicitud si obtuvo el mismo hash que envió.
  4. una vez que ambos pares confirman la recepción de los hashes del otro, cada uno envía al otro su número aleatorio real.
  5. cada par verifica que el hash enviado por el otro sea en realidad un hash del número aleatorio. rechazar el intercambio
  6. el resultado del lanzamiento de la moneda es el XOR del bit menos significativo de cada número, es decir

    (a & 1) ^ (b & 1)

Una solución alternativa:

  1. Cada uno de los dos compañeros decide entre ellos decidir quién debe ir primero. Llamémoslos A y B, solo para ser originales.
  2. El par A genera su número aleatorio, crea un hash salado y lo envía al par B.
  3. B genera su número aleatorio y lo envía a A.
  4. A envía su número aleatorio a B.
  5. B verifica que el hash salado es el hash del número que ha recibido.
  6. el resultado del lanzamiento de la moneda es el XOR del bit menos significativo de cada número, como se indicó anteriormente.

He hecho esta pregunta en el sitio de criptografía y he establecido que es bastante segura. Aparentemente, esta es una variación del esquema de Compromiso .

Michael Slade
fuente
1
Este protocolo, tal como se describe, es vulnerable a un ataque de repetición, en el que un par solo repite los mensajes del otro par para forzar que el resultado sea 0. Sin embargo, se pueden hacer varias modificaciones simples para prevenir este ataque.
Ilmari Karonen
Esta versión debería estar bien.
Michael Slade
¿Cómo detiene esto a un compañero simplemente eligiendo un número en lugar de generarlo al azar?
Kylotan
@Kylotan: No lo hace, pero siempre que al menos uno de los pares elija al azar, el resultado será aleatorio.
Ilmari Karonen
2
Un par no tiene nada que ganar incluso al elegir 0 todo el tiempo, porque esto le da al otro par la ventaja. El resultado final depende igualmente de los números aportados por ambos pares.
Michael Slade
2

Resulta que no solo los agentes adversarios pueden lanzar monedas, sino que los agentes adversarios pueden jugar al póker .

Dicho esto, tiende a ser extremadamente costoso desde el punto de vista informático y bastante difícil de corregir. Probablemente no valga la pena el esfuerzo de implementación. Mire cuántos protocolos multijugador son hilarantemente vulnerables a un servidor malicioso (a saber: todos los que conozco), y cuán populares siguen siendo, y simplemente no parece un uso práctico del tiempo.

StarCraft II es un buen ejemplo. Es un juego donde la exploración es crítica, y saber lo que está haciendo el enemigo puede brindar una ventaja fenomenal, y los premios de cinco cifras o más se basan regularmente en los resultados. . . ¡Y sin embargo, ambas computadoras tienen todo el estado del juego almacenado en todo momento! Es trivial escribir un programa que te permita ver al oponente directamente y obtener una gran ventaja sobre ellos.

Resulta que ninguno de los competidores serios usa estos programas. Es demasiado fácil de detectar ("hey, Jim, ¿cómo sabes siempre lo que estoy construyendo en el instante en que lo estoy construyendo?") Y simplemente no vale la pena.

Dicho esto, si quieres más información, querrás examinar la criptografía en detalle; esto no está realmente en el ámbito del desarrollo de juegos.

ZorbaTHut
fuente