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.
imprevisibilidadGeneradores
Generador de números aleatoriosCualquier número en cualquier rango Lanzar una monedaCara o cruz online Lanzador de dadosd4–d20 para juegos de mesa Números de lotería6/45, 5/36, KenoElección
Elección aleatoria de una listaElige un ganador entre nombres Ruleta de la fortunaGira y deja que elija Equipos aleatoriosReparte jugadores en equipos Bola Mágica 8Haz una pregunta y recibe respuestaSorteos
Sorteo de premiosUn sorteo que puedes verificar Verificar un sorteoComprueba la equidadUn sorteo que puedes verificar
Publica el hash antes del inicio y cualquiera podrá recalcular el resultado después.
Cómo funcionaTecnología
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.
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
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.
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.
imprevisibilidadCada 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ísicadrand 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.
verificabilidadSe 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.
Solicitando el beacon público de aleatoriedad…
Verificación
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.
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.
Qué cambia exactamente si no se limita a Math.random().
| Propiedad | Math.random() | Nuestro generador |
|---|---|---|
| Fuente | Pseudoaleatorio, se inicializa una vez | CSPRNG + entropía física + beacon público |
| Previsibilidad | Reconstruyamos a partir de varios valores | No se puede recuperar |
| Verificabilidad | No | Rondas firmadas de drand |
| Fuente sin conexión | Sí | Quedan CSPRNG + movimientos |
| Control de calidad | No | Prueba estadística abierta |