Por qué las contraseñas necesitan un hash especial
Los hashes rápidos como SHA-256 son ideales para checksums pero pésimos para contraseñas: una GPU moderna calcula miles de millones por segundo, así que una base de datos filtrada con hashes rápidos se puede atacar por fuerza bruta en poco tiempo. bcrypt y Argon2 son funciones de hash de contraseñas deliberadamente lentas y con sal. Cada hash incluye una sal aleatoria y sus parámetros de coste, de modo que contraseñas idénticas producen hashes distintos y puedes subir el coste con los años a medida que el hardware se vuelve más rápido.
¿bcrypt o Argon2id?
- Argon2id ganó la Password Hashing Competition y es la primera opción en la guía de almacenamiento de contraseñas de OWASP. Su coste en memoria encarece los ataques con GPU y ASIC. Un buen punto de partida es 19–64 MiB de memoria, 2–3 iteraciones y paralelismo 1–4.
- bcrypt está probadísimo y disponible en todas partes. Usa un factor de coste de al menos 10 (12 es lo habitual) y recuerda que solo tiene en cuenta los primeros 72 bytes de la contraseña; esta herramienta te avisa cuando superas ese límite.
Cómo leer un hash
Un hash bcrypt como $2b$12$… guarda la versión (2b) y el coste (12) antes de la sal
y el resumen. Un hash Argon2 como $argon2id$v=19$m=65536,t=3,p=4$… guarda la variante, la versión, la memoria
en KiB, las iteraciones y el paralelismo. El verificador detecta el algoritmo automáticamente y muestra estos parámetros.
Ejemplos prácticos
- Depurar un fallo de login: pega el hash de tu base de datos y la contraseña de tu cuenta de prueba para confirmar si el problema está en el hash guardado o en el código de tu aplicación.
- Poblar una base de datos de pruebas: genera el hash de un usuario de fixtures sin escribir un script.
- Ajustar el coste: observa el tiempo indicado y elige parámetros que tarden unos 250 ms en tu hardware.
Seguridad y privacidad
El hashing se ejecuta en nuestro servidor porque estos algoritmos necesitan implementaciones nativas y de tiempo constante. Las peticiones viajan por HTTPS, se procesan en memoria y nunca se registran ni se guardan, y las respuestas se marcan como no almacenables en caché. Los parámetros tienen límites y las peticiones están limitadas en frecuencia para proteger el servicio. Aun así, considera cualquier herramienta online como no confiable para contraseñas reales de producción: usa credenciales de prueba siempre que puedas.