ГСЧ laboratorio de aleatoriedad

Tecnología

Generador,
que no da vergüenza mostrar

La mayoría de los sitios escriben Math.random() y lo llaman aleatoriedad. Nosotros combinamos tres fuentes independientes de entropía mediante SHA-256 y mostramos cómo comprobarlo.

mezclador SHA-256 3 fuentes prueba en vivo
CSPRNG del navegador crypto.getRandomValues
Tus movimientos coordenadas, tiempos, toques
Beacon público drand #6588550
mezclador SHA-256 seed = H(CSRNG ∥ pool ∥ beacon)
Flujo de números CSPRNG ⊕ SHA-256 keystream
Todas las herramientas números, moneda, dados, elección

Si el beacon externo no está disponible, el sitio no se rompe: quedan dos fuentes independientes, el generador criptográfico y la entropía de tus acciones.

Tres capas

Por qué es mejor que una sola fuente

Cada capa cubre la debilidad de la otra. Juntas aportan lo que ningún generador puede dar por separado: imprevisibilidad, naturaleza física y verificabilidad.

01

CSPRNG criptográfico

crypto.getRandomValues() — la misma fuente que protege las conexiones TLS y la generación de claves. Garantiza la imprevisibilidad: incluso conociendo todas las demás capas, el resultado no se puede calcular.

imprevisibilidad
02

Entropía de tus acciones

Cada movimiento del ratón, toque o pulsación de tecla es una coordenada con precisión de micras y un tiempo con variación de nanosegundos. Los convertimos en hash dentro de un pool de 256 bits que se actualiza con cada evento. Los datos no salen del navegador.

naturaleza física
03

Beacon público de aleatoriedad

drand es una red distribuida de organizaciones independientes (Cloudflare, EPFL, Protocol Labs, etc.) que publica cada pocos segundos un bloque firmado de datos aleatorios. Cualquiera puede verificar la firma y comprobar que el valor no se ha sustituido.

verificabilidad
Estado del beacon drand #6588550
Aleatoriedad de la ronda actual 0f7d976d30c7a36f92e71f4f56bf7c8ce575078557ddcdd20550cad01615fa5e
6588550 ronda drand
10:52:03 hora de publicación
32 bytes de entropía

Se puede comprobar en el servidor del beacon: https://api.drand.sh/public/6588550. La firma BLS la emite un comité distribuido: no se puede falsificar en solitario.

Recogida de entropía en vivo 30 %

Solicitando el beacon público de aleatoriedad…

CSPRNG Tus movimientos Beacon

Verificación

Compruébalo tú mismo: una prueba con 65 536 números

Generaremos una muestra grande con el mismo generador que usan las herramientas y la comprobaremos con criterios estadísticos: uniformidad de los bytes (chi-cuadrado), equilibrio de bits y correlación serial.

Resultado de la verificación la prueba no se ha iniciado
— valores
— chi-cuadrado (255 g. l.)
— p-value
— equilibrio de bits
— correlación serial

La chi-cuadrado comprueba hasta qué punto se distribuyen de forma uniforme los bytes de los números generados. Para 255 grados de libertad se considera normal un valor cercano a 255; un p-valor superior a 0,05 significa que no se han detectado estadísticamente desviaciones de la aleatoriedad.

Comparación con un generador «normal»

Qué cambia exactamente si no se limita a Math.random().

PropiedadMath.random()Nuestro generador
FuentePseudoaleatorio, se inicializa una vezCSPRNG + entropía física + beacon público
PrevisibilidadReconstruyamos a partir de varios valoresNo se puede recuperar
VerificabilidadNoRondas firmadas de drand
Fuente sin conexiónSíQuedan CSPRNG + movimientos
Control de calidadNoPrueba estadística abierta
Lo que conviene saber
Los movimientos del ratón se procesan localmente: en el navegador solo queda el hash del pool de entropía. Al servidor no van ni coordenadas ni historial.
La mezcla está diseñada de tal forma que incluso el conocimiento completo del beacon público no permite predecir el resultado: se mezcla además con el secreto del CSPRNG.
El generador es una herramienta para la elección justa y el entretenimiento. No es un juego de azar ni una lotería: no se aceptan apuestas ni se pagan premios.
Información legal
↑↓ navegación Enter abrir Esc cerrar