Demostrablemente justo, explicado
Cómo demuestra dond.win que ninguna ronda de Deal or No Deal está amañada: un compromiso SHA-256 publicado antes de que elijas, tu propia semilla de cliente mezclada en el barajado, las dos semillas reveladas al final y una página de verificación que recalcula los 25 maletines.
El problema que resuelve el sistema demostrablemente justo
En un juego online normal tienes que fiarte de que el operador barajó con honestidad y no movió el premio gordo después de que eligieras. El sistema demostrablemente justo (provably fair) sustituye esa confianza por aritmética. El operador se compromete con el barajado antes de que actúes, te deja influir en él con un dato tuyo y lo revela todo al final para que puedas comprobarlo.
Qué ocurre en una ronda
- Compromiso. Antes de que elijas un maletín, el servidor genera una semilla del servidor secreta y publica su hash SHA-256. Ese hash aparece en el juego como el compromiso. El servidor ya no puede cambiar la semilla sin que cambie el hash.
- Tu aportación. Tú tienes una semilla del cliente. Por defecto es aleatoria; puedes escribir la tuya en el panel de entrada antes de empezar la ronda. El servidor no puede predecirla.
- El barajado. La escalera de 25 premios se baraja con Fisher-Yates, usando bytes aleatorios generados con HMAC-SHA256, con la semilla del servidor como clave y tu semilla del cliente como mensaje. Ninguna de las dos partes puede elegir la distribución por sí sola.
- La revelación. Cuando termina la ronda, la semilla del servidor se muestra junto al compromiso y a tu semilla del cliente.
- La verificación. Calcula el hash de la semilla del servidor y compáralo con el compromiso. Repite el barajado con las dos semillas y compara cada maletín con lo que viste. La página de verificación hace ambas cosas en tu navegador; no se envía nada a ningún sitio.
El algoritmo exacto
- commitment = SHA-256(utf8(serverSeed)), en hexadecimal.
- block[i] = HMAC-SHA256(key = serverSeed, msg = clientSeed + “:” + i), para i = 0, 1, 2 …
- Cada bloque da ocho enteros de 32 bits en big-endian; r = valor / 2^32. Cuando un bloque se agota, se pasa al siguiente.
- Fisher-Yates sobre la escalera fija: para i de 24 a 1, j = floor(r × (i + 1)), se intercambian ladder[i] y ladder[j]. El maletín k recibe ladder[k].
Cualquiera puede implementarlo en unas pocas líneas, en cualquier lenguaje, y obtener la misma distribución.
Qué demuestra y qué no
Demuestra que la distribución quedó fijada antes de que eligieras y que no la decidió el servidor por su cuenta. Demuestra que cada oferta que viste se calculó a partir del tablero real. No cambia las probabilidades: la escalera de premios y las comisiones son las que son, y también son públicas. Aquí, justo significa que el juego que se te muestra es el juego que realmente se está jugando.
Comprobar una ronda antigua
Las semillas y el compromiso aparecen en la pantalla de fin de ronda y en tu historial. Pégalos en la página de verificación cuando quieras.
Preguntas frecuentes
¿Está amañado Deal or No Deal en dond.win?
La distribución de cada ronda se compromete con un hash SHA-256 antes de que elijas maletín, se mezcla con tu propia semilla del cliente y se revela al terminar la ronda. Puedes recalcular tú mismo los 25 maletines en la página de verificación. Una distribución amañada no superaría esa comprobación.
¿Qué es la semilla del cliente? ¿Debería cambiarla?
Es tu aportación al barajado. La que viene por defecto es aleatoria y ya impide que el servidor elija la distribución. Si pones la tuya, la ronda se puede reproducir con un valor que solo tú elegiste.
¿Puede el servidor elegir una semilla que favorezca a la casa?
No puede conocer la distribución final cuando se compromete, porque tu semilla del cliente se mezcla después. Tampoco puede cambiar la semilla más tarde, porque el hash dejaría de coincidir.
¿Necesito algún programa para verificar una ronda?
No. La página de verificación ejecuta SHA-256 y HMAC-SHA256 en tu navegador. También puedes usar cualquier lenguaje de programación que tenga esas dos funciones.