UTILS.
100% en el navegador
🧂

Generador y verificador de hash scrypt KDF

Deriva una clave scrypt de una contraseña con coste N, r, p configurable, o verifica una contraseña contra una cadena scrypt almacenada. Se ejecuta enteramente en tu navegador.

Las contraseñas se hashean al 100 % en tu navegador — nada se sube.

— la salida aparece aquí —

Acerca de esta herramienta

El Generador y verificador de hash scrypt KDF deriva y comprueba salidas scrypt localmente en tu navegador. scrypt, diseñado por Colin Percival y estandarizado en RFC 7914, es una función de derivación de clave memory-hard: su coste está deliberadamente dominado por el ancho de banda de memoria de modo que el hardware de descifrado personalizado gane poca ventaja. La tubería es PBKDF2-HMAC-SHA256 para expandir la contraseña, la función ROMix construida sobre BlockMix y el núcleo Salsa20/8 para forzar un gran uso de memoria secuencial, y un PBKDF2-HMAC-SHA256 final para producir la clave derivada de la longitud que elijas.

El modo de generación lee 16 bytes de sal aleatorios de crypto.getRandomValues y ejecuta scrypt con tres parámetros de coste: N es el coste de CPU/memoria y debe ser una potencia de dos (predeterminado 16384 = 2^14), r es el tamaño de bloque (predeterminado 8), y p es el factor de paralelización (predeterminado 1). El uso de memoria es aproximadamente 128 · N · r bytes —unos 16 MiB con los valores predeterminados— y la herramienta avisa cuando tus ajustes superarían 256 MiB. La salida es una cadena autodescriptiva $scrypt$ln=14,r=8,p=1$<sal en base64>$<clave en base64> donde ln = log2(N), así que todos los parámetros necesarios para verificar se llevan con el hash.

El modo de verificación analiza ln, r, p, la sal y la clave almacenada de esa cadena, recalcula la clave derivada con la contraseña candidata, y hace una comparación de tiempo constante para informar de coincidencia o no coincidencia. El núcleo scrypt se ejecuta como una compilación WebAssembly sin eval bajo la estricta política de seguridad del navegador, así que las contraseñas se procesan al 100 % en tu navegador y nada se sube.

Preguntas frecuentes

¿Por qué N debe ser una potencia de dos?
El paso ROMix de scrypt indexa una tabla de exactamente N bloques y depende de que N sea una potencia de dos para su direccionamiento de integerify-and-mask. La herramienta rechaza los valores que no son potencia de dos. Las elecciones típicas son 16384 (2^14) para uso interactivo y 1048576 (2^20) para cifrado de archivos.
¿Cuánta memoria usa scrypt?
Aproximadamente 128 · N · r bytes. Con los predeterminados N=16384, r=8 eso son unos 16 MiB. Como el navegador asigna esto de verdad, valores grandes de N o r pueden ser lentos o fallar en dispositivos con poca RAM: la herramienta avisa por encima de 256 MiB.
¿Qué controlan r y p?
r es el tamaño de bloque, que escala tanto el uso de memoria como la cantidad de trabajo secuencial por bloque; aumentar r eleva el coste de memoria junto con N. p es el factor de paralelización, que ejecuta p cálculos scrypt independientes, lo que eleva el coste de CPU sin elevar la huella de memoria por instancia.
¿Qué formato tiene el hash generado?
Una cadena autodescriptiva $scrypt$ln=<log2 N>,r=<r>,p=<p>$<sal en base64>$<clave en base64>. Incrusta todos los parámetros, así que el modo de verificación solo necesita esa cadena y la contraseña. Todo el cálculo es local: nada se sube.

Más herramientas