Dados impredecibles: qué fallaba y qué hemos cambiado
Descubrimos que los dados de las partidas en línea podían, en principio, calcularse antes de tirarlos: su semilla se construía con información que cualquier jugador puede ver. No hallamos indicios de que alguien lo hiciera. Desde el 1 de octubre, cada semilla sale de un secreto que solo tiene el servidor, y la antigua predicción ahora acierta una vez de cada 36: puro azar.

En palabras sencillas
Esto es lo que encontramos. Todo lo aleatorio en una partida en línea — los dos dados, sacar una carta de Suerte, el dado del Bote — sale de un generador de números aleatorios, y un generador tiene que partir de una semilla. La nuestra se construía con dos cosas que cualquier jugador puede ver: el identificador de la partida, que está en tu barra de direcciones, y el número de jugada, que el juego devuelve tras cada acción. El generador en sí es código corriente y publicado. Junta esas piezas y alguien que supiera cómo podría haber calculado una tirada antes de hacerla y, en principio, incluso haber elegido cuál de las siguientes tiradas le tocaría.
Lo comprobamos en partidas reales, no en teoría. De las últimas 2,000 tiradas antes del arreglo, 1,985 — el 99.3% — fueron exactamente lo que esa información pública predecía.
¿Alguien lo aprovechó?
Después buscamos a alguien que lo estuviera aprovechando y no encontramos a nadie. La apuesta en la que conocer la tirada compensa de forma más directa es el Bote. En los siete días previos al arreglo, 2,354 apuestas al Bote ganaron el 31.4% de las veces, frente al 31.1% que predice el azar por sí solo, y el historial de ningún jugador llamaba la atención.
Preguntas que nos hacen
¿Los dados de opolyx son justos?
Sí. En las 247,968 tiradas hechas del 2 al 6 de octubre de 2026, cada cara de cada dado salió entre el 16.54% y el 16.77% de las veces — un dado perfecto da el 16.67% —, y los dobles salieron el 16.67% de las veces.
¿Se pueden predecir los dados de opolyx?
No: desde el 1 de octubre de 2026 ya no. Cada tirada usa como semilla un secreto que solo existe en el servidor, y la antigua predicción ahora acierta el 2.76% de las tiradas, el 2.78% que daría adivinar dos dados a ciegas.
¿Alguien aprovechó el antiguo fallo de los dados?
No encontramos ningún indicio. En los siete días previos al arreglo, 2,354 apuestas al Bote ganaron el 31.4% de las veces, frente al 31.1% que predice el azar por sí solo, y los resultados de ningún jugador llamaban la atención.
¿Dónde se decide una tirada?
En el servidor del juego, en el momento en que tiras, mediante un generador de números aleatorios cuya semilla es un secreto que nadie más tiene. El resultado queda en el registro de la partida, y las repeticiones y las estadísticas leen ese registro en lugar de volver a tirar.
Para los más técnicos
La semilla era una etiqueta, <id de la partida>:<número de jugada>, pasada por el hash FNV-1a y entregada a mulberry32. Ese diseño fue deliberado — permitía reproducir cada partida a partir de su propio registro —, pero la reproducibilidad nunca necesitó que la semilla fuera pública. Cada resultado queda escrito en el evento que lo produjo, y las repeticiones y las estadísticas leen esos eventos en lugar de volver a tirar.
// before: anyone who knew the game id and the move number could do this
rng = mulberry32(fnv1a(`${gameId}:${seq}`))
// after: the same label, signed with a key that never leaves the server
rng = mulberry32(uint32(hmacSha256(serverSecret, `${gameId}:${seq}`)))Ahora la etiqueta pasa primero por HMAC-SHA256, con un secreto de 32 bytes como clave que solo existe dentro del servidor. Por defecto, el secreto se genera de nuevo cada vez que arranca el servidor. Nada necesita que sobreviva a un reinicio, porque nunca se recalcula ninguna tirada pasada — y un secreto que nunca se escribe en ninguna parte es un secreto que no puede filtrarse.
Todo sorteo que decide algo en una partida se firma así: los dados, la carta de Suerte, el dado del Bote y la elección de quién empieza.
Y los dados son tan justos como deben serlo. En todas las tiradas desde el 2 de octubre — 247,968 en total —, cada cara de cada dado salió entre el 16.54% y el 16.77% de las veces, frente al 16.67% de un dado perfecto, y los dobles salieron el 16.67% de las veces:
| Cara | Primer dado | Segundo dado |
|---|---|---|
| Cara 1 | 16.75% | 16.72% |
| Cara 2 | 16.77% | 16.65% |
| Cara 3 | 16.56% | 16.61% |
| Cara 4 | 16.54% | 16.70% |
| Cara 5 | 16.67% | 16.70% |
| Cara 6 | 16.72% | 16.62% |
El arreglo se comprobó en los mismos términos que el problema. La predicción que antes acertaba el 99.3% de las tiradas se volvió a ejecutar después durante un día entero: acertó 1,388 de 50,212, es decir, el 2.76% — el 2.78% que cabría esperar adivinando dos dados a ciegas.
