bitlvl
ES

Generador de bytes aleatorios y tokens

Elige una longitud y un formato y genera tantos como necesites. Todo sale de la fuente aleatoria criptográfica del navegador, la misma que usa TLS.

Tipo
 

Los resultados y mensajes de esta herramienta se muestran en inglés.

De dónde viene la aleatoriedad

crypto.getRandomValues pide al CSPRNG del sistema operativo (getrandom() en Linux, SecRandomCopyBytes en macOS, BCryptGenRandom en Windows), que se alimenta de eventos de hardware y, en las CPU modernas, de la instrucción RDRAND. Es impredecible en ambos sentidos: conocer un millón de salidas no dice nada sobre la siguiente. Math.random() no lo es; es un PRNG rápido con un estado interno pequeño, bien para juegos y nunca para secretos.

Cuántos bytes

PropósitoBytesPor qué
ID de sesión, token CSRF16–32128 bits están fuera del alcance de la fuerza bruta; 32 bytes es el valor habitual.
Clave de API / secreto32256 bits; se hashea con SHA-256 para guardarlo, como una contraseña pero sin necesidad de hash lento porque es aleatorio.
Clave de firma HMAC / JWT32–64Igual a la salida del hash: 32 para SHA-256, 64 para SHA-512.
Clave AES16 / 32AES-128 o AES-256.
Sal16Lo que importa es la unicidad; 128 bits la garantizan.
Token de restablecimiento de contraseña en una URL16–24Base64URL lo mantiene corto; guarda su hash, caducarlo pronto.

Enteros aleatorios sin sesgo

Tomar byte_aleatorio % 6 para un dado es sutilmente incorrecto: 256 no es divisible por 6, así que 1–4 salen algo más a menudo que 5–6. El método correcto extrae un valor, lo rechaza si cae en el rango sobrante de arriba y vuelve a intentarlo; eso hace este generador y eso hacen secrets.randbelow, crypto.randomInt y rand.Intn.

Claves con prefijo

Prefijos como sk_live_, ghp_ o AKIA no añaden seguridad pero hacen las claves reconocibles en los registros y permiten a los escáneres de secretos (el de GitHub, gitleaks) encontrar las filtradas. Elige un prefijo único para tu servicio y mantén la parte aleatoria en 32 bytes.

Preguntas

¿Es tan bueno como openssl rand o /dev/urandom?

Sí: el navegador llama al mismo generador del sistema operativo que leen esas herramientas. La salida sirve para claves y secretos. Si de todos modos lo necesitas en una shell: openssl rand -hex 32, o head -c 32 /dev/urandom | base64.

¿Debo guardar las claves de API hasheadas?

Sí, con un hash rápido como SHA-256; como la clave es aleatoria, un hash lento de contraseña es innecesario. Muestra la clave una vez al crearla y conserva solo el hash, como hacen GitHub y Stripe.

¿Qué es Base64URL?

Base64 con - y _ en vez de + y /, normalmente sin relleno, para que el valor pueda ir en una URL o una cookie sin escapar. Los JWT y la mayoría de los tokens modernos lo usan.

¿Por qué no usar simplemente un UUID como token?

Un UUIDv4 tiene 122 bits aleatorios, que es suficiente, pero su formato fijo anuncia lo que es y desperdicia caracteres en guiones. Para secretos, los bytes aleatorios en bruto en Base64URL son más cortos y más fuertes. Los UUID son para identificadores, no para secretos.