¿El póquer (en línea) requiere aleatoriedad criptográficamente segura?

19

Aquí hay una cita de una discusión de reddit :

  

... para el póquer [un RNG criptográficamente seguro] es completamente innecesario.   Si tienes una semilla impredecible apropiada y estás desperdiciando gran parte de la aleatoriedad, MT es perfectamente seguro.

Normalmente lo escribo como ignorancia, pero esto continúa:

  

En realidad, he implementado un backend de póker con dinero real, y la compañía incluso lo tenía certificado

Y como nadie miente en Internet , esto me hace preguntarse. Dicha persona expande esta en otra parte de la discusión :

  

[Para evitar la previsibilidad] no utilizaría 624 valores consecutivos producidos por [el generador de MT]. Si quieres una aplicación de dinero real. certificado, uno de los criterios es deshacerse de una cantidad grande e impredecible de la salida del PRNG.

     

Tampoco conoce los detalles específicos de cómo se usó el PRNG para producir una reproducción aleatoria. Por lo tanto, no tiene forma de asignar las tarjetas que ve en la tabla a una secuencia del PRNG.

     

Tampoco sabe cuándo se reinicializa el PRNG.

     

Una última cosa. Debe almacenar (2 19937 - 1) * 4 bytes de datos para la búsqueda, a fin de encontrar el patrón que necesita predecir.

Excepto por el último párrafo, estos argumentos suenan sospechosamente como seguridad por oscuridad. El último párrafo parece menos, pero alguien más en la discusión ha afirmado que la afirmación no es cierta y que no necesita una tabla de consulta tan grande.

Solo para aclarar, soy consciente de que MT19937 no es criptográficamente seguro (y también lo es la persona a la que estoy citando). Sin embargo, mi suposición hasta ahora era que los juegos de azar (y el póquer) requerirían una fuente aleatoria criptográficamente segura (y no solo una semilla segura) ((a) a prueba de manipulación indebida y (b) para la certificación. ¿Está esto mal?

    
pregunta Konrad Rudolph 11.02.2014 - 10:09
fuente

3 respuestas

23

Aquí está el punto de vista del criptógrafo. La persona que cita dice : "no necesita un PRNG criptográficamente seguro", pero lo que en realidad afirma es "cuando uso MT 19937 y hago un poco de jumbo como tirar una gran parte de la salida, de alguna manera se convierte en un PRNG criptográficamente seguro ".

Su comentario sobre el almacenamiento "(2 19337 -1) * 4 bytes para búsqueda" es suficiente para demostrar que no tiene muy claro en su mente qué seguridad, criptografía, aleatoriedad e impredecibilidad realmente son. Esta figura es el "período"; el período se usó en tiempos (muy) más antiguos como medida de seguridad, porque el PRNG conocido de ese tiempo tenía períodos muy pequeños, hasta el punto de que la repetición ocurría en la práctica. Esto engendró a toda una familia de PRNG no criptográficos donde los diseñadores intentaban abatir a sus competidores floreciendo el período más largo posible. Esto no tiene ningún sentido real desde un punto de vista criptográfico. La seguridad de un PRNG se trata de imprevisibilidad , y un período muy corto es un problema solo porque permite que la producción futura sea predecible. El AES utilizado en el modo CTR es un PRNG con un período de 2 135 (bits), una cifra muy inferior a 2 19337 -1 y, sin embargo, no es un problema en absoluto.

El "desperdicio de gran cantidad de impredecible de la producción" también ilustra la confusión. La eliminación de bits de la salida puede ocultar algunas fugas de estado de un PRNG débil; esto puede incluso convertir un PRNG débil en uno fuerte, como se estudió con el generador de contracción . Sin embargo, no hace nada sobre la previsibilidad de la semilla; de hecho, si parte de la salida se "desecha", entonces hay un mecanismo que decide qué guardar y qué tirar, y ese mecanismo también es parte del PRNG. Si todo esto es semilla con la hora actual, entonces la búsqueda exhaustiva sobre los posibles valores de "hora actual" será eficiente (la hora actual no es un secreto) y se desentrañará todo el asunto.

Sin embargo, podemos argumentar que, aunque MT no es criptográficamente seguro, esto no significa que hacer un ataque efectivo sea fácil . Hay tres tipos de PRNG:

  • Los algoritmos muy débiles, ya sea a través de un procesamiento muy deficiente (pérdida del estado interno), semilla predecible, o ambos. Estos se rompen en la práctica.
  • El PRNG "criptográficamente fuerte", que resiste ataques incluso en las condiciones ridículas que asumen los académicos (un académico considerará un algoritmo como "roto" si reclama seguridad de 128 bits pero ofrece solo 2 123.4 resistencia).
  • La zona gris en medio: interrumpida por académicos, pero un ataque práctico no es inmediato.

Con su Mersenne Twister , está en la zona gris, y cree que sus manipulaciones de vudú lo mantendrán así. camino. Es completamente plausible que también pueda convencer a un auditor de que el vudú funciona. Esto de ninguna manera implica que el algoritmo es seguro ; solo que un auditor estaba listo para firmar un documento afirmando que el algoritmo cumple con algunos requisitos legales. En ese momento, es bueno recordar que a otros auditores les pareció adecuado firmar documentos que afirman que Enron fue una empresa limpia y sólida desde el punto de vista financiero: esto ayuda a poner las cosas en la perspectiva correcta.

Por lo que describe, es probable que la semilla inicial esté basada en el tiempo, y la seguridad actual se basa completamente en la no publicación de los detalles del algoritmo. Eso es seguridad a través de la oscuridad en su mejor momento (o peor, dependiendo del punto de vista).

    
respondido por el Thomas Pornin 11.02.2014 - 21:25
fuente
6

En primer lugar, hay algo muy importante: ¿a qué te refieres cuando decimos "requerido"? El juego en sí (póker en línea) no requiere ese nivel de aleatoriedad. Probablemente puedas salirte con el antiguo rand() .

Sin embargo, los juegos de póquer en línea legales y regulados deben seguir ciertas reglas, una de las cuales es que el RNG debe ser auditado por una firma de auditoría independiente. Ese es el caso en el Reino Unido. Empresas de auditoría ( PwC , EY , Cigital , Gaming Laboratories International ) y organismos reguladores ( Kahnawake Gaming Commission ) en muchos lugares del mundo han tenido y generalmente maneja casos como ese.

Dichas firmas de auditoría y organismos reguladores requieren que el RNG sea de muy alta aleatoriedad, imparcial e impredecible. Ahora, ¿qué RNG sabemos que son fáciles de implementar y usar, y son adecuados para tales regulaciones? Bueno, adivinas bien; su buen amigo confió en CSPRNG .

Como lo menciona @Ladadadada, además de las regulaciones y las leyes, lo más conveniente para el operador del juego es que el juego sea lo más justo posible, ya que la injusticia y la "capacidad de craqueo" alejarán a los usuarios. Por lo tanto, para alcanzar ese nivel de imparcialidad, necesita aleatoriedad e imprevisibilidad de alta calidad proporcionados por un CSPRNG.

Con una sesión rápida de Google, encontrará varios CSPRNG bien probados, analizados y bien examinados que pueden tomarse como están y usarse en su proyecto de póquer en línea.

    
respondido por el Adi 11.02.2014 - 11:08
fuente
6

El tipo está equivocado cuando afirma que un CSRNG fue "completamente innecesario". Incluso confirma que cuando dice que necesitas una "semilla impredecible".

¿Qué significa una semilla impredecible?

Cuando te ofrezco una cantidad razonable de números pseudoaleatorios derivados de esa semilla, no podrás calcular el siguiente número. Sencillo. Desde un punto de vista matemático, la seguridad de estos generadores puede comprobarse con un simple juego.

Te envío una secuencia de números y debes decidir si son completamente aleatorios o derivados por una función (F). Si su tasa de éxito promedio es mejor que la mitad (+/- una cantidad no elegible) usted gana.

Encontrará que sus posibilidades de ganar dependen (al menos) de la cantidad de entrada que obtiene la función. Si usé solo unos pocos bits de entrada, seguramente podrá distinguir entre el rendimiento completo y la salida de la función mucho mejor que la mitad.

Hasta este punto no hay forma de evitar una buena semilla. ¿Qué pasa con la magia desechable?

¿El hecho de tirar algo de salida lo hace más seguro?

Encuentro la declaración de "tirar una cantidad grande e impredecible" de alguna manera divertida. Lo que hacen aquí es omitir partes de la salida de la función. Pero, ¿cuántos bytes exactamente? Afirma "una cantidad grande e impredecible". Básicamente, esto significa que modificas la función desde arriba.

Sin embargo, todavía estás en el punto donde comenzaste. Usted juega el juego e intenta distinguir entre la aleatoriedad completa y la salida de una nueva función (F '). Después de todo, hay un algoritmo en ejecución y tiene que decidir exactamente cuántos Bytes omitir. Por lo tanto, este valor se calcula de alguna manera y se puede ver como una parte adicional de la función original.

¿Qué puedes hacer?

Como puede ver, tirar una cantidad impredecible de salida no hace que la función sea más segura. Por el contrario, si elige eliminar una cantidad de bytes completamente al azar , este colud llevará a un algoritmo más seguro.

Si un algoritmo genera los bits 0101010101 ... y así, tus posibilidades de ganar el juego son bastante buenas. Si omito una cantidad aleatoria de salida y te envío un bit, luego omito otra cantidad y te envío un bit, y así sucesivamente, ¿cuál sería? Sus posibilidades de ganar fueron sus posibilidades de predecir la cantidad de bits omitidos. Al final, tendrías que predecir la aleatoriedad, y las posibilidades de ganar ya no serían tan buenas.

Sin embargo, la seguridad de mi generador de números se beneficia al saltear solo bajo ciertas condiciones, cuya evaluación iría más allá de este hilo. Solo para obtener la impresión correcta: ¿qué provocaría la omisión si mi función genera el bit "1" en el 99% del tiempo y "0" solo en el 1%? Encontraría que incluso si me salto una cantidad aleatoria de bits, la distribución estadística sigue siendo constante.

Conclusión

Definitivamente, querrías una aleatoriedad real en un juego de póker, para la semilla, el salto de salida o ambos. Pero es suficiente usar esta aleatoriedad costosa como entrada para funciones bien definidas que funcionan como CSPRNG.

Solo para el registro: puede crear una función que soporte todas las pruebas mencionadas utilizando primitivas criptográficas de manera que la secuencia sea predecible si conoce una clave secreta. Sin el conocimiento de la clave secreta, se ve tan aleatorio, que tus posibilidades de ganar el juego son aproximadamente la mitad.

    
respondido por el fr00tyl00p 11.02.2014 - 21:16
fuente

Lea otras preguntas en las etiquetas