Este es un ejemplo de juguete de un juego: al jugador se le presentan N máquinas tragamonedas. Pueden hacer clic en cada máquina tragamonedas una vez, y cuando lo hacen, la máquina tragamonedas obtiene un resultado aleatorio (basado en un conjunto predeterminado de resultados y probabilidades).
Si los resultados de las máquinas tragamonedas aparecen en el servidor, obviamente no hay oportunidad para que el cliente haga trampa: el servidor tiene información completa para arbitrar qué máquinas tragamonedas ya se rodaron y cuáles fueron sus resultados.
Supongamos que el cliente y el servidor se comunican solo dos veces: una vez antes de que comience el juego y una vez que termine. ¿Hay algún tipo de protocolo que pueda garantizar que el cliente no pueda hacer trampa?
Obviamente, el cliente no puede simplemente informar al servidor lo que hace el jugador en todas las máquinas; el cliente simplemente informa N jackpots.
Mejor sería que el cliente y el servidor acuerden un método para determinar el resultado de la máquina tragamonedas, basándose en la imagen de una función unidireccional del sello de tiempo cuando el cliente hace clic en la máquina tragamonedas. El cliente informa al servidor los pares (marca de tiempo, resultado) para cada máquina tragamonedas, y el servidor puede verificar que los resultados son correctos dada la marca de tiempo.
Pero este protocolo todavía no es seguro; Puede que no sea manejable para el cliente invertir la asignación de la marca de tiempo al premio mayor, pero puede probar muchas de las marcas de tiempo posibles e informar al servidor los resultados más favorables.
¿Hay algún protocolo que pueda garantizar (quizás dadas suposiciones adicionales acerca de la potencia computacional disponible para el cliente) que un cliente que no es de confianza no puede engañar en este juego? Si no es así, ¿hay algún argumento que pruebe la imposibilidad?