Register
Sarah Dic 16, 2018

Guía avanzada para barajar cartas transparentes en CoinPoker

Hasta ahora, las salas de póquer en línea han mantenido en secreto su software de barajado de cartas. Los jugadores han sido incapaces de verificar que estos sistemas cerrados barajan las cartas de una manera realmente justa, y es algo que el Barajador Transparente de CoinPoker fue construido para cambiar. Utilizando funciones hash criptográficas unidireccionales, Guía avanzada para barajar cartas transparentes en CoinPoker

Sin categorizar

Hasta ahora, las salas de póquer en línea han mantenido en secreto su software de barajado de cartas. Los jugadores han sido incapaces de verificar que estos sistemas cerrados barajan las cartas de una manera realmente justa, y es algo que el Barajador Transparente de CoinPoker fue construido para cambiar.

Utilizando funciones hash criptográficas unidireccionales, el nuevo barajador de CoinPoker hace posible revelar de forma segura información sobre el proceso de barajado, y le da la capacidad de:

Antes de sumergirse en la tecnología que hay detrás del barajado transparente de cartas, eche un vistazo a nuestro breve tutorial para ayudarle a probarlo por sí mismo

Cómo utilizar la herramienta de validación para demostrar la participación

Si nuestro barajador de cartas transparente es totalmente nuevo para usted, le sugerimos que empiece por consultar nuestra guía básica con capturas de pantalla aquí.

Paso 1: Para probar la imparcialidad de la mano, necesitará acceder a las funciones hash unidireccionales mencionadas anteriormente. Las encontrará haciendo clic en el enlace Orden de Barajado del RNG en la parte inferior dentro de la pestaña Historial de Manos.

Paso 2: Aquí encontrará una larga lista de secuencias hash. La primera sección será para cada carta en el orden inicial de la baraja, seguida por las semillas encriptadas de cada jugador y CoinPoker, y por último los hashes de cada carta en el orden final de la baraja.

Piensa en los números que aparecen bajo el hash del mazo barajado como su posición en el mazo, y en el hash de cada jugador como su «factor de agitación» encriptado enviado al principio de la mano.

Paso 6: Estos datos son inútiles sin la Herramienta de Validación, a la que puede acceder haciendo clic en el enlace de la parte superior de la ventana.

Paso7: El siguiente paso es la validación de la mano, que puede significar una de dos cosas dependiendo de si desea:

  1. Verificar la imparcialidad demostrando su participación en el «sacudón»
  2. Verificar si la posición real de una carta en la baraja final coincide con la posición cifrada que usted participó en determinar antes de la barajada

Para la Opción 1:

Introduce las semillas encriptadas o «factores de agitación», como los hemos venido llamando, en la Herramienta de Validación. Están marcados con flechas azules. Los resultados serán el «factor de mezcla colectivo» o hash combinado y el orden final del mazo.

Si coinciden, habrá verificado con éxito su participación en la barajada

Para la Opción 2:

Elige una de las cartas repartidas (éstas tendrán tanto el hash a la izquierda como la función hash encriptada a la derecha. Introduzca el hash dentro de la función de la derecha en la sección Validación de Cartas. El resultado debería ser el hash que aparece a la izquierda en CoinPoker, así como el valor correcto de la carta.

Paso 8: ¡Diviértase explorando la tarjeta undealt y probando su participación en el primer sistema RNG descentralizado del póquer en línea!

La Explicación Avanzada: Cómo funciona el RNG transparente de CoinPoker

Imagine la baraja de cartas sin barajar de la siguiente manera: 2c, Qd, Kh

En realidad, habría una permutación de 52 cartas, pero para hacernos una idea de cómo funciona este proceso, limitaremos el número a tres. Utilizando este orden de baraja, CoinPoker creará la baraja inicial y la compartirá con todos los jugadores de la mesa en los siguientes pasos.

Paso 1

CoinPoker ejecuta su RNG utilizando un valor secreto, al que nos referiremos como semilla. Este valor sólo existe temporalmente y se utiliza simplemente para iniciar el proceso.

Paso 2

CoinPoker utiliza esta semilla aleatoria para generar un valor de sal; datos aleatorios que actúan como contraseña o frase de contraseña para funciones criptográficas unidireccionales. Esto se combina con una carta para crear un hash para cada carta de la baraja. Utilizando las tres cartas mencionadas anteriormente, la fórmula sería algo así

  • Hash(2c sal1) = aa
  • Hash(Qd sal2) = bb
  • Hash(Kh sal3) = cc

Nota: Los hashes aa, bb y cc se han simplificado para facilitar la representación. En realidad, son cadenas de 256 bits y es un poco más complicado trabajar con ellas, al menos para los humanos.

Paso 3

CoinPoker baraja el mazo con hash del Paso 2 utilizando la semilla aleatoria del Paso 1.

  • El mazo sin barajar en hashes era: aa (2c), bb (Qd), cc (Kh)
  • El mazo barajado (mazo inicial) en hashes es ahora: bb (Qd), cc (Kh), aa (2c)

Paso 4

CoinPoker envía este mazo con hashes (como un vector que incluye todos los hashes de las cartas en el orden inicial del mazo) a cada jugador.

El propósito de usar los hashes es hacer posible revelar ciertas cartas de la baraja y permitir a los jugadores verificarlas, sin exponer otras que deberían mantenerse ocultas (es decir, manos mucked). Ahora todos los jugadores tienen en su poder la lista de hashes que revela el orden inicial de la baraja.

Los siguientes pasos cubren cómo la baraja inicial se transforma en la baraja final utilizando las aportaciones de los jugadores, que se combinan con las aportaciones de CoinPoker para formar una aportación colectiva (también conocida como semilla agregada). Una vez más, se denominan semillas.

Paso 5

De nuevo, para simplificar la complejidad de este proceso, imagine que hay dos jugadores en la mesa. Llamémosles Alice y Bob.

Paso 6

Alice y Bob ahora necesitan calcular un hash de su semilla para enviarlo a CoinPoker. La fórmula se parecerá un poco a esto

  • Hash(semilla_de_Alice) = XX
  • Hash(Semilla_de_Bob) = YY

Paso 7

CoinPoker genera una nueva semilla, es decir, no la del Paso 1. Esta semilla aleatoria se utiliza para crear un hash: Hash(Semilla_de_CoinPoker) = ZZ

Paso 8

Las semillas hash de los jugadores, así como la de CoinPoker, se compilan en una lista de semillas de compromiso: [XX, YY, ZZ].

Paso 9

CoinPoker envía un vector de semillas de compromiso a Alice y Bob.

Paso 10

Después de recibir las semillas de compromiso, Alice y Bob envían su semilla real del paso 5. Esta es la semilla que se utilizó para el compromiso. Esta es la semilla que se utilizó para crear los hashes. Así que Hash(semilla_de_Alice) = XX y Hash(semilla_de_Bob) = YY.

Paso 11

Las semillas reales se utilizan para crear una semilla agregada. Esta nueva semilla tiene en cuenta todas las semillas de los jugadores, así como las de CoinPoker, dando como resultado un valor al que ha contribuido toda la mesa.

Hash(semilla_de_Alice semilla_de_Bob semilla_de_CoinPoker) = semilla_agregada

Paso 12

CoinPoker utiliza la semilla agregada para barajar el mazo inicial. El hash del mazo final se distribuye entonces a todos los lugares. Tenga en cuenta que esta es la última baraja que se utiliza hasta que se completa la mano.

Baraja inicial: Qd, Kh, 2c → RNG con aggregated_seed → Mazo final: Kh, 2c, Qd
(Hashes: cc, aa, bb)

Cómo funciona la herramienta de verificación del RNG

Una de las principales ventajas de utilizar funciones hash criptográficas es que podemos revelar de forma segura información sobre la barajada, que más tarde se puede utilizar para demostrar si la barajada fue justa. Llamamos a esto la Herramienta de Validación RNG, y continuaremos los pasos para ayudarte a entender cómo funciona.

Ten en cuenta que ni Bob ni Alice conocen las semillas reales de los demás, y sólo tienen acceso a su propia semilla real. A lo que sí tienen acceso es a todos los hashes de semillas de otros jugadores y de CoinPoker (recuerda los pasos 8 y 9).

Una vez jugada la mano, los jugadores reciben las semillas reales de todos los participantes, que pueden utilizar para verificar su participación en la barajada final, así como la aleatoriedad de las cartas.

Pasos 13-18: Verificación del Impacto del Jugador en el Mazo Barajado

Paso 13

Primero, los jugadores necesitan tomar cada semilla real y usarla para verificar si el valor hash que tienen es correcto. Para ello, introducen la semilla real en la fórmula hash y comprueban si el resultado coincide con el valor real que han recibido.

Si Hash(semilla_de_Alice) es igual a XX, se verifica que es correcto

Paso 14

Una vez que todas las semillas reales de los jugadores y CoinPoker se utilizan para verificar los hashes, los jugadores también pueden comprobar si la semilla_agregada es correcta introduciendo los valores que faltan en una función hash:

Hash(semilla_alice semilla_bob semilla_servidor) = semilla_agregada

Paso 15

Ahora que la semilla agregada ha sido verificada como correcta por cada jugador, Alice o Bob pueden invertir la función RNG. Introduciendo el hash del mazo final y la semilla agregada para calcular el mazo inicial, los jugadores pueden comprobar si resulta en el mismo orden de mazo inicial que recibieron en el Paso 4.

Paso 16

Si el resultado coincide con el orden hash del mazo inicial, entonces el jugador ha demostrado con éxito que participó en el barajado del mazo final.

Demostrar la participación es sólo el principio. Los jugadores también pueden verificar la aleatoriedad de las cartas del mazo final. Esto se puede hacer para todas las cartas comunitarias y manos reveladas por otros jugadores (así que no hay manos Mucked), pero por el bien de la explicación le mostraremos cómo puede verificar la imparcialidad de las dos primeras cartas:

Paso 17

Una vez terminada la mano, los jugadores reciben (además de todas las semillas reales) las sales y valores de las dos primeras cartas repartidas. Tenga en cuenta que los valores de las cartas y las sales se utilizaron en la función Hash del Paso 2:

Hash(Kh sal3) = cc

Paso 18

Ahora que Alice y Bob tienen valores para todas las variables de la función hash, pueden invertirla para confirmar si la Kh era la primera carta de la baraja final recibida en el Paso 12. Si Hash(Kh salt3) es la primera carta de la baraja final recibida en el Paso 12, la función hash se invierte.

Si Hash(Kh salt3) resulta cc, entonces el jugador confirma que el hash cc del mazo final es correcto. Esto se puede hacer para cualquier carta revelada en la mesa.

En el caso de cartas sin repartir o manos con muck, los jugadores no recibirán el valor de la carta o la sal. Tendrán acceso a los hashes, pero no podrán usar este método para revelarlos.

Explicación experta y la recompensa de 1.000.000 CHP por el bug

Aunque la explicación anterior puede ser lo suficientemente avanzada para el jugador de póquer medio, sólo cubriría la punta del iceberg para los entusiastas de la criptografía. A continuación encontrará enlaces al documento original del protocolo, así como al código fuente abierto en GitHub:

En aras de la transparencia, también estamos ofreciendo 1.000.000 CHP a cualquiera que pueda demostrar que el sistema transparente de barajado de cartas es defectuoso. Para más detalles sobre las condiciones de la recompensa y cómo reclamar, consulte nuestra página oficial de Bug Bounty aquí.

Sarah