Por qué nunca debes almacenar contraseñas en texto plano (Hashing y Salting)
A menudo escuchamos noticias sobre violaciones de bases de datos.
En estos eventos, las empresas a menudo afirman: "Las contraseñas están encriptadas y seguras". Estrictamente hablando, esto es incorrecto. Las contraseñas no deben ser 'Encriptadas', sino 'Hasheadas'.
Exploremos la diferencia entre encriptación y hashing, y por qué debes evitar usar MD5 o SHA-1.
1. Encriptación vs. Hashing
La diferencia clave radica en la "Reversibilidad".
- Encriptación: Transforma datos usando una clave. Se puede revertir (desencriptar) al original si tienes la clave. (Bidireccional)
- Hashing: Transforma datos en una cadena de longitud fija. No se puede revertir al original. (Unidireccional)
Incluso los administradores de servidores no deberían saber las contraseñas de los usuarios. Por lo tanto, debemos usar Hashing, que es irreversible.
2. Ataques de Rainbow Table
"Entonces, ¿es seguro usar una función hash como SHA-256?"
Desafortunadamente, no. Las funciones hash son deterministas; siempre producen la misma salida para la misma entrada.
Los hackers precalculan valores hash para contraseñas comunes como 123456 o password y los almacenan en tablas masivas llamadas Rainbow Tables.
Si roban las contraseñas hasheadas de tu base de datos, simplemente pueden buscarlas en estas tablas para descifrar las contraseñas originales al instante.
3. Salting
Para resolver esto, usamos Salting.
Antes de hashear la contraseña, le agregamos una cadena aleatoria (Salt).
Hash("password") -> Peligroso
Hash("password" + "random_salt_value") -> Seguro
Con salting, incluso si dos usuarios tienen la misma contraseña, tendrán diferentes valores hash (ya que sus salts son diferentes), haciendo inútiles las Rainbow Tables.
Conclusión
No uses funciones hash simples (MD5, SHA-1, SHA-256) para el almacenamiento de contraseñas. Están diseñadas para ser rápidas, lo que las hace vulnerables a ataques de fuerza bruta.
En su lugar, usa algoritmos especializados que incorporen Salting y Key Stretching.
- Algoritmos Recomendados: Argon2, bcrypt, scrypt, PBKDF2
La seguridad no se trata de ser "irrompible", sino de "aumentar el costo de entrar". Usar el algoritmo de hashing correcto aumenta ese costo astronómicamente.
Explora herramientas relacionadas
Prueba estas herramientas gratuitas de Pockit