Inicio / Guías / Almacenar contraseñas de forma segura — con sal, bcrypt y Argon2

Si guardas las contraseñas en texto plano, en cuanto se filtra la base de datos quedan expuestas todas las cuentas. Por eso las contraseñas se convierten en un hash antes de almacenarse, y al iniciar sesión se compara el hash de lo que introduce el usuario. Como nunca se guarda el original, aunque haya una filtración no se conoce de inmediato la contraseña.

Sin embargo, un simple hash SHA-256 no basta. Como la misma contraseña produce siempre el mismo hash, un atacante puede precalcular los hashes de las contraseñas más comunes en una tabla arcoíris (rainbow table) y cotejarlos en masa. Para evitarlo hay que hashear añadiendo a cada cuenta un valor aleatorio: la sal (salt).

La velocidad también es un problema. SHA-256 es tan rápido que un atacante puede adivinar miles de millones por segundo. Por eso para las contraseñas se usan hashes especializados y deliberadamente lentos como bcrypt, scrypt o Argon2. Estos ajustan el número de iteraciones y el coste de memoria para ralentizar enormemente la fuerza bruta.

En resumen, los tres principios del almacenamiento de contraseñas son sal + hash lento especializado + parámetros de coste suficientes. SHA-256/512 son adecuados para la integridad de archivos y las firmas, pero para almacenar contraseñas usa un algoritmo especializado como Argon2.

Hashear con este algoritmo