¿Hay alguna forma de proteger un juego del lado del cliente de un cliente pirateado?

1

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?

    
pregunta user168715 27.12.2017 - 07:28
fuente

2 respuestas

4

No, no puedes proteger tu juego de los trucos si los rollos se hacen desde el cliente.

El punto principal de falla de sus protocolos está aquí

  

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   correcto dado el sello de tiempo.

Y usted demuestra su vulnerabilidad a continuación

  

Pero este protocolo todavía no es seguro; puede que no sea manejable para el   cliente para invertir la asignación de la marca de tiempo al premio mayor, pero puede   intente muchas marcas de tiempo posibles e informe al servidor la N más   resultados favorables.

Nada impide que el cliente informe una marca de tiempo falsa. Además, incluso si hubiera una manera de obligar al cliente a informar cada tirada correctamente, en su caso particular de una máquina tragamonedas, el hecho de que el cliente pueda adivinar sus próximas tiradas sería una vulnerabilidad crítica.

    
respondido por el Xavier59 27.12.2017 - 11:20
fuente
1

Cuando es un juego de azar puro en el que la interacción del jugador es simplemente falsa (como en muchas máquinas de juego), puede usar un generador de números pseudoaleatorios determinista tanto en el cliente como en el servidor. Cuando el jugador compra monedas, el servidor genera una semilla para cada moneda y la recuerda.

Cuando el cliente desea cobrar sus ganancias, se vuelve a conectar al servidor y les dice qué monedas jugaron. El servidor ahora puede verificar que es una moneda "ganadora" simulando el juego usando la misma semilla.

Sin embargo, este sistema se descompone tan pronto como el jugador puede tomar decisiones relevantes durante el juego. En ese caso, podría jugar múltiples variantes de la moneda e informar de aquella en la que obtuvieron la puntuación más alta. No hay forma de que el servidor detecte que el cliente hizo eso.

Otra debilidad crucial es que no puedes permitir que el jugador devuelva las monedas no jugadas, ya que si les permites que soliciten un reembolso de cualquier moneda "perdedora" y efectivo en las monedas "ganadoras".

tl; dr: Simplemente conviértalo en un juego siempre en línea con un servidor autorizado y un cliente tonto. Las restricciones de juego no valen la pena.

    
respondido por el Philipp 27.12.2017 - 14:26
fuente

Lea otras preguntas en las etiquetas