Juego justo

Ningún resultado sale de un dado que sólo ve el casino. Todo lo que jugás acá se puede recalcular y verificar con una calculadora: ni nosotros podemos cambiar un resultado después de tirarlo.

Cómo funciona

  1. El servidor elige una semilla secreta y te muestra su hash (SHA-256) antes de que juegues una sola ficha: así no la puede cambiar después de ver cómo te fue.
  2. Vos tenés tu propia semilla de cliente (te generamos una al azar, y la podés cambiar cuando quieras).
  3. Cada jugada usa un nonce (un contador que suma de a uno).
  4. El resultado sale de HMAC-SHA256(semilla_servidor, "cliente:nonce:cursor"): se toman 4 bytes del hash para cada número al azar que necesita la jugada.
  5. Cuando rotás tu semilla, la vieja queda revelada abajo: ahí podés recalcular cualquier jugada que hiciste con ella y comprobar dos cosas — que sha256(semilla_servidor) da el hash que te mostramos antes de jugar, y que el resultado que salió es el que da la fórmula.
Ver el algoritmo exacto, para verificar vos mismo (Python)
import hashlib
import hmac


def flotantes(servidor: str, cliente: str, nonce: int, cantidad: int) -> list[float]:
    """Reproduce AleatorioHmac::float(): devuelve `cantidad` números en [0, 1)."""
    salida: list[float] = []
    cursor, bloque, offset = 0, b"", 0
    for _ in range(cantidad):
        if offset + 4 > 32 or not bloque:
            mensaje = f"{cliente}:{nonce}:{cursor}".encode()
            bloque = hmac.new(servidor.encode(), mensaje, hashlib.sha256).digest()
            cursor += 1
            offset = 0
        b0, b1, b2, b3 = bloque[offset:offset + 4]
        offset += 4
        salida.append(b0 / 256 + b1 / 65536 + b2 / 16777216 + b3 / 4294967296)
    return salida


def entero(flotante: float, minimo: int, maximo: int) -> int:
    """Reproduce AleatorioHmac::entero(): un entero en [minimo, maximo]."""
    return minimo + int(flotante * (maximo - minimo + 1))


# 1) Verificar el hash publicado ANTES de jugar:
#    hashlib.sha256(servidor.encode()).hexdigest() == servidor_hash
#
# 2) Con la semilla revelada, recalcular la jugada con el mismo nonce
#    y comparar contra lo que se vio en pantalla.
Iniciá sesión para ver tu semilla activa y poder rotarla.