Glosario

¿Qué es una sal? El valor aleatorio por usuario que se añade al aplicar el hash a las contraseñas

Una sal es un valor aleatorio por usuario que se añade al hash de una contraseña. Por qué anula las tablas arcoíris y en qué se diferencia de una pimienta.

Publicado 2026-06-27 Actualizado 2026-10-06 8 min de lectura
En esta página

La «sal» aparece en cuanto hablas del hashing de contraseñas. Añadir un valor aleatorio antes de aplicar el hash cambia drásticamente el panorama de seguridad. Aquí tienes cómo funciona y los puntos clave (sin pasos de ataque).

Por qué una sal hace más seguras las contraseñas

Sin una sal, los usuarios con la misma contraseña obtienen el mismo hash almacenado. Eso le da al atacante dos opciones: buscar la contraseña directamente en una tabla precalculada (una tabla arcoíris) y reutilizar el resultado de romper una cuenta para 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.

Sin sal: "password123" → mismo hash para todos (una tabla de búsqueda la encuentra al instante)
↓ añade una sal por usuario
Alice: sal_a + password123 → hash X
Bob: sal_b + password123 → hash Y (≠ X)
Misma contraseña, sales distintas → valores almacenados distintos para cada uno. Las tablas precalculadas dejan de funcionar.

Por la misma razón, la sal debe generarse de nuevo para cada usuario (idealmente para cada contraseña). Si todos comparten una sola sal, los usuarios con la misma contraseña vuelven a tener valores almacenados iguales, y se pierde la mayor parte del beneficio. Usa un generador de números aleatorios criptográfico, difícil de predecir, y guarda la sal junto al hash (no necesita ser secreta).

Una sal solo protege frente a las tablas precalculadas y el cracking masivo de contraseñas repetidas. Frenar un ataque de fuerza bruta contra una sola contraseña no es su trabajo; de eso se encarga un hash deliberadamente lento como bcrypt/Argon2. Cubren amenazas distintas, así que usa siempre ambos.

Longitud de la sal y cómo generarla

Dos documentos marcan la referencia:

  • NIST SP 800-63B-4 (la guía de autenticación de EE. UU.): la sal debe tener al menos 32 bits y elegirse de forma que las sales almacenadas rara vez coincidan. Para cada contraseña se guardan tanto la sal como el hash
  • RFC 9106 (la especificación de Argon2): se recomiendan 16 bytes (128 bits) para el hashing de contraseñas, reducibles a 64 bits cuando el espacio es limitado

Tres reglas para generarla:

  • Usa un generador de números aleatorios criptográfico. Usa la función de aleatoriedad segura de tu lenguaje, no funciones predecibles como Math.random() o mt_rand() de PHP
  • No uses valores adivinables: un nombre de usuario, una dirección de correo, un ID de usuario o la hora de registro no sustituyen a una sal
  • Genera una sal nueva cuando cambie la contraseña. Mantener la antigua deja un vínculo entre los hashes antiguo y nuevo

En la práctica, las implementaciones estándar de bcrypt, Argon2 y scrypt cumplen todo esto automáticamente. Si estás escribiendo código que crea sales por tu cuenta, tómalo como señal para revisarlo.

Sal frente a pimienta frente a estiramiento de claves

El almacenamiento de contraseñas implica tres medidas de nombre parecido. Defienden frente a cosas distintas, así que ninguna sustituye a otra.

SalPimientaEstiramiento de claves (hash lento)
Qué esUn valor aleatorio por usuarioUn valor secreto compartido por todos los usuariosHacer deliberadamente costoso el cálculo del hash
¿Es secreto?No (se guarda con el hash)Sí (se guarda fuera de la base de datos)La configuración no necesita ser secreta
Defiende frente aTablas precalculadas, cracking masivo de contraseñas idénticasCracking cuando solo se filtra la base de datosFuerza bruta contra cada hash
Implementaciónbcrypt/Argon2 la añaden automáticamenteLa añades tú si hace faltaCoste de bcrypt, memoria e iteraciones de Argon2

NIST SP 800-63B-4 recomienda que una «clave secreta conocida solo por el verificador» (lo que suele llamarse pimienta) se guarde separada de los hashes de contraseñas, idealmente dentro de hardware dedicado como un HSM.

Caso real: almacenamiento sin sal en LinkedIn (2012)

En junio de 2012 se informó de que unos 6,5 millones de hashes de contraseñas atribuidos a usuarios de LinkedIn se habían publicado en internet. LinkedIn confirmó que algunos correspondían a cuentas de LinkedIn y desactivó las contraseñas de los miembros afectados.

En su blog oficial, la empresa dijo que había estado pasando de un sistema que solo aplicaba hash a las contraseñas a uno que aplicaba hash y sal. En aquel momento, expertos citados en la prensa criticaron a la empresa por proteger las contraseñas solo con hash SHA-1.

Dos lecciones:

  • Los hashes sin sal permiten recuperar en masa las contraseñas comunes a partir de tablas precalculadas
  • Incluso a mitad de una migración, si quedan hashes en el formato antiguo, el impacto de una filtración lo decide ese formato antiguo

Cómo comprobar tu propio entorno

1

Mira la forma de las cadenas almacenadas

En una base de datos de desarrollo que controles, mira algunos valores de contraseña. En bcrypt, los 22 caracteres tras $2b$12$ son la sal. En Argon2, a $argon2id$v=19$m=…,t=…,p=…$ le siguen la sal y el hash separados por $. Si el valor no encaja con ninguna de las dos formas y no hay una columna de sal aparte, puede que las contraseñas se guarden sin sal.

2

Crea dos cuentas de prueba con la misma contraseña

En un entorno de desarrollo, registra dos cuentas de prueba con la misma contraseña y compara los valores almacenados. Si coinciden, la sal no está funcionando. Confirma también que la parte de la sal cambia al cambiar una contraseña.

3

Busca código que construya sales a mano

Busca en el código la palabra salt y los lugares que combinan a mano funciones aleatorias o de hash. Si encuentras una función aleatoria predecible, un nombre de usuario o ID reutilizado o una cadena fija, sustitúyelo por la función de contraseñas estándar de tu lenguaje o framework.

4

Usa la guía práctica para la migración

Cómo migrar desde un almacenamiento sin sal (por ejemplo, volviendo a aplicar el hash al iniciar sesión) y la configuración recomendada para cada algoritmo se explican en cómo almacenar contraseñas con seguridad.

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: primero, sal y hash lento bien hechos

Una pimienta es una medida adicional para el caso en que solo se roba la base de datos. Añade el trabajo de gestionar un secreto en otro lugar, y si pierdes ese secreto ya no puedes verificar la contraseña de nadie.

Por eso, en la práctica, la primera prioridad es usar sal + un hash lento correctamente mediante bcrypt/Argon2. Plantéate una pimienta cuando ya tengas un sistema de gestión de claves en marcha.

Fuentes (primarias)

  • NIST, "SP 800-63B-4 Digital Identity Guidelines: Authentication and Authenticator Management" (agosto de 2025) — pages.nist.gov (sal de al menos 32 bits, guardar sal y hash, una clave secreta guardada aparte)
  • RFC 9106, "Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications" — rfc-editor.org (sal de 16 bytes recomendada para el hashing de contraseñas)
  • OWASP, "Password Storage Cheat Sheet" — cheatsheetseries.owasp.org (sal, pimienta, la mayoría de las bibliotecas gestionan las sales automáticamente)
  • Formato de cadena PHC (el formato de cadena de hash que usan Argon2 y otros) — github.com/P-H-C
  • TechCrunch, "LinkedIn Confirms Hack And Leak Of 'Some' User Passwords" (6 de junio de 2012) — techcrunch.com (unos 6,5 millones, declaración de la empresa sobre el paso a hash y sal)
  • Computerworld, "LinkedIn provides breach update -- sort of" (8 de junio de 2012) — computerworld.com (críticas al hash solo con SHA-1, contraseñas invalidadas)

Sigue leyendo

Clasificación

CWE clasifica los tipos de debilidad que causan las vulnerabilidades; MITRE ATT&CK clasifica las técnicas de los atacantes. Ambos los mantiene MITRE y se usan ampliamente para etiquetar vulnerabilidades y reglas de detección.

ATT&CK (técnica de ataque)

CWE™: Copyright © 2006–2026, The MITRE Corporation. CWE is a trademark of The MITRE Corporation. The MITRE Corporation hereby grants you a non-exclusive, royalty-free license to use CWE for research, development, and commercial purposes. Any copy you make for such purposes is authorized on the condition that you reproduce MITRE’s copyright designation and this license in any such copy. CWE Terms of Use

© 2026 The MITRE Corporation. This work is reproduced and distributed with the permission of The MITRE Corporation. MITRE ATT&CK and ATT&CK are registered trademarks of The MITRE Corporation. The MITRE Corporation (MITRE) hereby grants you a non-exclusive, royalty-free license to use ATT&CK® for research, development, and commercial purposes. Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ATT&CK Terms of Use

FAQ

Q¿Una sal tiene que mantenerse en secreto?
A

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?
A

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?
A

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.

Q¿Qué es una tabla arcoíris?
A

Una tabla, calculada de antemano, que relaciona contraseñas de uso común con sus valores de hash. Un hash guardado sin sal se puede revertir con solo buscarlo en una tabla así. Con una sal, el valor de la sal no se conoce cuando se construye la tabla, así que las tablas precalculadas dejan de funcionar.

Q¿Qué longitud debe tener una sal?
A

NIST SP 800-63B-4 exige al menos 32 bits. La especificación de Argon2 (RFC 9106) recomienda 16 bytes (128 bits) para el hashing de contraseñas. Las implementaciones estándar de bcrypt y Argon2 generan automáticamente una sal de longitud adecuada, así que rara vez eliges tú la longitud.

Q¿Puedo usar el nombre de usuario o el ID de usuario como sal?
A

No es recomendable. Los nombres de usuario y los ID se pueden adivinar, y los mismos valores (como admin) aparecen en otros servicios, lo que deja margen para tablas construidas de antemano para esos valores. Además, la sal no cambiaría al cambiar la contraseña. Genera la sal con un generador de números aleatorios criptográfico cada vez que se establezca una contraseña.