Glosario
¿Qué es una sal? El 'condimento' por usuario que se añade a un hash de contraseña
Una sal (salt) es un valor aleatorio y distinto por usuario que se añade antes de aplicar el hash a una contraseña. Así la misma contraseña se almacena distinta para cada uno, derrotando las tablas arcoíris. Diferencia con una pimienta (pepper).
La «sal» aparece en cuanto hablas del hashing de contraseñas. Como la sal en la cocina, añadir una pizca al hash cambia drásticamente el panorama de seguridad. Aquí tienes cómo funciona y los puntos clave (sin pasos de ataque).
Por qué funciona el «condimento»
Sin una sal, los usuarios con la misma contraseña obtienen el mismo hash almacenado. Eso entrega al atacante dos atajos: una tabla de búsqueda precalculada (una tabla arcoíris) acierta directamente, y «romper una cuenta se reutiliza en todos los que tienen la misma contraseña».
Añade una sal y la misma "password123" se almacena como algo completamente distinto para cada usuario.
Conceptos erróneos comunes frente a la verdad
Concepto erróneo
- Una sal debe mantenerse en secreto
- Una sola sal compartida para todos los usuarios está bien
- Una sal hace seguras incluso las contraseñas débiles
La verdad
- Una sal puede ser pública (guárdala con el hash)
- Un valor aleatorio distinto por usuario (idealmente por contraseña)
- Una sal defiende contra «la precomputación y el cracking por reutilización»; la fuerza bruta la maneja un hash lento
La visión de este sitio: una sal no es una pimienta
A menudo se confunde con una sal la pimienta: un valor secreto añadido de forma general, guardado en un lugar distinto de la base de datos (la configuración de la aplicación o un gestor de claves). Una sal (pública, por usuario) y una pimienta (secreta, global) tienen trabajos distintos; ninguna sustituye a la otra. En la práctica, no obstante, la primera prioridad es simplemente usar sal + un hash lento correctamente mediante bcrypt/Argon2.
Sigue leyendo
- Glosario: qué es el hashing de contraseñas (entiéndelo junto con la sal)
- Aprende: cómo almacenar contraseñas con seguridad (hashing + sal en la práctica)
- Fundamentos: almacenar contraseñas correctamente
FAQ
Q¿Una sal tiene que mantenerse en secreto?
No. Una sal no es una 'clave secreta': está bien guardarla junto al hash. Su propósito no es el secreto; es hacer que la misma contraseña se almacene distinta para cada usuario, lo que derrota la precomputación (tablas arcoíris) y el cracking masivo por reutilización. Lo que sí mantienes en secreto es un concepto distinto, una 'pimienta' (ver más abajo).
Q¿Puedo reutilizar la misma sal para todos los usuarios?
No. La sal debe ser un valor aleatorio que difiera por usuario (idealmente por contraseña). Una sal compartida hace que los usuarios con la misma contraseña almacenen hashes idénticos, así que un atacante puede romper muchas cuentas con una sola ejecución de fuerza bruta. Genera una nueva con un generador de números aleatorios criptográfico cada vez.
Q¿Necesito implementar la sal yo mismo?
Normalmente no. Los hashes diseñados a propósito como bcrypt, Argon2 y scrypt generan y guardan la sal por ti (a menudo incrustada dentro de la cadena del hash). En lugar de añadir una sal a mano, apóyate en estas implementaciones estándar: es más seguro y más fiable.