El problema con el RNG habitual
En una tragamonedas en línea típica, el generador de números aleatorios (RNG) reside en el servidor del operador. El jugador solo ve el resultado. Incluso un operador honesto no puede demostrarle a un jugador específico que esta tirada en particular no estuvo manipulada: hay que confiar en certificados y reputación.
Demostrablemente justo cierra esta brecha: el operador "bloquea" su secreto de antemano, y después del juego lo revela, para que cualquiera pueda recalcular el resultado de forma independiente.
esquema commit-reveal
Antes de una serie de giros, el servidor genera un serverSeed y publica solo su hash: SHA-256(serverSeed). Esto es un "commit": el servidor se ha comprometido, pero la semilla en sí aún no se revela, por lo que no puede cambiarse de forma retroactiva.
El jugador añade su propio clientSeed: puede cambiarlo en cualquier momento. Cada giro se numera con un contador nonce. El resultado se calcula de forma determinista a partir de tres valores: serverSeed + clientSeed + nonce.
Cuando el serverSeed cambia (rotación), el antiguo serverSeed se revela: "reveal". El jugador verifica que SHA-256(seed revelada) coincide con el hash publicado previamente y recalcula todos sus giros pasados.
Por qué exactamente HMAC-SHA256
A partir de tres semillas, se genera un flujo de bytes aleatorios mediante HMAC-SHA256 — una función criptográficamente segura: conociendo el resultado, es imposible recalcular el serverSeed, y cambiar un solo bit de la semilla altera por completo el resultado.
Un detalle importante es la ausencia de "sesgo de módulo". Si simplemente tomas el resto de dividir un número aleatorio entre el tamaño del rodillo, los símbolos frecuentes obtienen un poco más de peso. Una implementación correcta utiliza muestreo por rechazo: los valores de la "cola desigual" del rango se descartan y la distribución permanece estrictamente uniforme.
Cómo verificar tu giro
En nuestro motor, cada tirada tiene un panel de equidad: nonce, clientSeed, hash(serverSeed) antes del juego y el serverSeed revelado después de la ronda. El endpoint /api/fair/verify recalcula de forma independiente el resultado a partir de estos valores: obtienes el mismo resultado que viste en el juego.
Esto es lo que significa "demostrablemente justo": no lo aceptas por fe — lo verificas. El mismo mecanismo funciona en el modo Megaways y en los temas de cascada.