Qué es el salt en el hash de contraseñas en Linux y por qué importa

Última actualización: 04/12/2025
Autor: Isaac
  • El salt es una cadena aleatoria que se añade a la contraseña antes del hash para lograr hashes únicos por usuario.
  • Linux almacena hash, sal y algoritmo en /etc/shadow, reforzando la seguridad frente a ataques de diccionario y tablas rainbow.
  • Las buenas prácticas exigen sales largas, aleatorias y únicas, junto a algoritmos de hash robustos y bases de datos bien protegidas.
  • El salting debe integrarse en políticas de seguridad más amplias que incluyan contraseñas fuertes, MFA y gestores de contraseñas.

salt en hash de contraseñas en linux

Si trabajas con sistemas GNU/Linux o simplemente te preocupa la seguridad de tus cuentas, habrás oído hablar del salt en el hash de contraseñas. Es uno de esos conceptos que se mencionan mucho, pero que a menudo se entienden a medias: suena a algo técnico, pero en realidad marca la diferencia entre un sistema fácil de romper y uno bastante más resistente frente a ataques.

En pocas palabras, el salt es una pieza clave para que los hashes de contraseñas no sean predecibles. Se basa en añadir datos aleatorios antes de aplicar el algoritmo de hash para que, aunque dos usuarios tengan la misma contraseña, el resultado almacenado en la base de datos sea distinto. A partir de ahí, la implementación concreta en Linux, su relación con /etc/shadow, herramientas como mkpasswd y las buenas prácticas modernas de seguridad son todo un mundo que vamos a desgranar con calma.

Qué es exactamente el salt en el hash de contraseñas

definicion de salt en hash de contraseñas

En criptografía, un salt (sal) es una cadena de caracteres aleatoria que se concatena a la contraseña de un usuario antes de aplicar una función hash. El objetivo es que el hash resultante sea único incluso aunque la contraseña en texto plano sea la misma para varios usuarios.

Cuando un usuario crea o cambia su contraseña, el sistema genera una sal aleatoria, la une con la contraseña (antes, después o con un formato concreto según el esquema) y sobre esa combinación aplica un algoritmo de hash, como SHA-256 o SHA-512. En la base de datos no se guarda la contraseña, sino el hash de (contraseña + salt), y en la mayoría de esquemas también se guarda el propio salt junto al hash.

Esta técnica hace que sean inútiles muchas de las técnicas de ataque basadas en hashes precomputados, como las tablas rainbow, y complica mucho los ataques de diccionario y fuerza bruta a gran escala. Un atacante ya no puede aprovechar que múltiples usuarios compartan contraseña, porque cada uno tendrá un hash distinto.

Es importante entender que el salt no es un secreto en sí mismo: no es una contraseña ni una clave privada. Su función es introducir aleatoriedad y unicidad en el proceso de hash. La seguridad sigue dependiendo de usar contraseñas robustas y algoritmos de hash adecuados, preferiblemente diseñados específicamente para contraseñas (como bcrypt, scrypt, Argon2), aunque en muchos sistemas Linux clásicos se usan variantes de SHA-256 o SHA-512.

Cómo funciona el salting de contraseñas paso a paso

funcionamiento del salting de contraseñas

El proceso de salting se puede resumir en una serie de pasos bastante sencillos, pero con un impacto enorme en la seguridad:

  Roblox en la mira: Detectan 1.6 millones de ciberataques a jugadores

Primero, cuando un usuario registra o cambia su contraseña, el sistema genera una sal única y aleatoria para esa credencial. Esa sal suele tener una longitud suficiente (por ejemplo, 16 bytes o más) y se obtiene de un generador de números aleatorios criptográficamente seguro.

A continuación, la contraseña elegida por el usuario se combina con esa sal para formar una cadena intermedia. Esa combinación puede ser tan simple como concatenar salt + contraseña, o tener un formato más complejo definido por el esquema de hash. Lo importante es que cada usuario termina con una combinación distinta.

Después, a esa combinación se le aplica un algoritmo de hash unidireccional. El resultado es una cadena aparentemente aleatoria, el hash, de longitud fija, que se almacenará en la base de datos junto con la sal. En sistemas modernos se buscan algoritmos que produzcan salidas largas y complejas, lo que incrementa el espacio de búsqueda y encarece el ataque por fuerza bruta.

Por último, cuando el usuario inicia sesión, el sistema vuelve a tomar la contraseña escrita, recupera la sal asociada desde la base de datos, repite exactamente el mismo proceso de combinación y hashing y compara el resultado con el hash almacenado. Si coinciden, sabe que la contraseña es correcta sin necesidad de conocer el texto plano.

Esta mecánica hace que incluso si la base de datos acaba filtrada, el atacante solo vea hashes individuales con sus propias sales, en lugar de un conjunto de hashes comparables entre sí. Parar un ataque no es cuestión de magia, pero sí se vuelve muchísimo más costoso computacionalmente.

Ventajas de usar salt en el hash de contraseñas

ventajas de usar salt en contraseñas

La principal razón para usar salting es que refuerza la seguridad de las contraseñas almacenadas frente a una amplia variedad de ataques. Pero merece la pena detallar los beneficios concretos.

En primer lugar, el salting aporta resistencia frente a ataques de diccionario. Sin sal, un atacante puede preparar una lista enorme de contraseñas comunes y sus hashes, y simplemente comparar con la base de datos robada. Con sal única por usuario, esos hashes precalculados dejan de servir, porque cada combinación de contraseña + sal genera un valor distinto.

En segundo lugar, el uso de sal rompe la eficacia de las tablas rainbow, que no son más que bases de datos precalculadas de hashes de contraseñas populares para acelerar la recuperación. De nuevo, como el resultado depende de la sal específica, esas tablas pensadas para hashes sin sal se vuelven inútiles o, como mínimo, muy poco eficientes.

Otra ventaja clara es que se mejora la privacidad en caso de fuga. Aunque un intruso obtenga acceso a la tabla de usuarios con hash y sal, no podrá identificar rápidamente quién tiene la misma contraseña que otros ni usar ataques masivos tan fácilmente. Cada cuenta requiere atención individual, lo que suele ser inviable a gran escala.

  Guía completa sobre qué es OpenDNS, configuración y seguridad

Además, el salting añade complejidad a los ataques por fuerza bruta. En lugar de poder probar una contraseña candidata contra todos los hashes a la vez, el atacante se ve obligado a considerar la sal de cada usuario, multiplicando el trabajo total. Si a esto se suma un algoritmo de hash lento y parametrizable (tipo bcrypt o Argon2), el coste de ataque crece todavía más.

Por último, el salting es una técnica que se adapta bien a la evolución tecnológica. Aunque los equipos de cómputo mejoren y surjan nuevos ataques, la combinación de hash robusto y sal única mantiene un nivel de dificultad elevado y escalable: se puede aumentar la longitud de la sal, reforzar el algoritmo, subir el coste computacional, etc.

Cómo aplica Linux el salting de contraseñas (/etc/shadow)

En los sistemas Linux y otras variantes *NIX, las contraseñas de los usuarios no se guardan en /etc/passwd, sino en el archivo /etc/shadow. Este archivo, accesible solo para el superusuario, almacena los hashes de las contraseñas junto con información adicional, y es donde se ve claramente el uso de sal y del algoritmo de hash.

Las líneas de /etc/shadow tienen una estructura similar a:

usuario:$id$sal$hash:campos_adicionales…

El símbolo $ separa las diferentes partes. La primera parte tras el nombre de usuario indica el tipo de algoritmo utilizado. Por ejemplo, $1$ suele representar MD5, $5$ SHA-256 y $6$ SHA-512, que es el algoritmo más común en distribuciones modernas por ofrecer mayor seguridad que los esquemas antiguos basados en DES o MD5.

Después del identificador del algoritmo aparece la sal, y a continuación el hash resultante. Todo ello va dentro del mismo campo. Cuando se valida una contraseña, el sistema lee ese identificador, la sal, aplica el algoritmo correspondiente a la contraseña introducida y compara el hash calculado con el almacenado.

Si se quiere inspeccionar rápidamente qué usuarios tienen contraseñas cifradas y qué algoritmo se está usando, se puede recurrir a un comando como grep ‘\$’ /etc/shadow. En este contexto, el carácter dólar $ se utiliza para localizar las líneas con hashes en formato moderno. Hay que escapar el símbolo con una barra invertida porque en expresiones regulares significa “final de línea”.

Las cuentas sin contraseña o bloqueadas suelen mostrar en ese campo un valor como ! o * en lugar de un hash con dólares, indicando que no se puede autenticar mediante contraseña estándar. Esta estructura hace evidente una cosa: Linux integra el salting en su formato de almacenamiento de contraseñas de forma nativa.

Diferencia entre hash y salting de contraseñas

Conviene separar bien dos conceptos que a veces se mezclan: hashing y salting. El hash de contraseñas es el proceso por el cual se transforma una contraseña en un valor irreconocible mediante un algoritmo unidireccional. El servidor nunca necesita saber la contraseña original, solo verificar que el usuario conoce el secreto correcto porque produce el mismo hash.

  Integración de WSL2 con Docker en Windows: guía práctica y completa

El problema es que, si dos contraseñas son idénticas, el hash sin sal también será idéntico. Eso permite a un atacante comparar, agrupar usuarios por contraseña o usar tablas precalculadas. Además, si el algoritmo de hash es rápido y pensado para integridad de datos (como SHA-256 simple), resulta más vulnerable a fuerza bruta masiva.

El salting entra justo para solucionar esa debilidad: se trata de añadir datos aleatorios a la contraseña antes de hashearla. El resultado es que incluso si dos usuarios eligen “casa” como contraseña, los hashes en la base de datos serán completamente distintos, porque uno tendrá, por ejemplo, “casa+7Ko#” y otro “casa8p?M” como cadena previa al hash.

Así, hashing y salting no compiten, sino que se complementan. El hash proporciona la propiedad de unidireccionalidad y facilidad de verificación; el salt aporta unicidad y resistencia frente a ataques masivos. Una implementación segura de almacenamiento de contraseñas combina ambas técnicas, idealmente sobre un algoritmo diseñado para este fin, con coste configurable.

Uso del salt en Linux con mkpasswd

En entornos GNU/Linux y otros sistemas tipo Unix, una forma muy práctica de experimentar con el salting es la herramienta mkpasswd. Este comando se utiliza para generar contraseñas cifradas de forma segura, y se integra habitualmente en procesos de creación de usuarios, scripts de administración, etc.

La sintaxis básica de mkpasswd permite indicar la contraseña a cifrar y una serie de opciones como el tipo de algoritmo (por ejemplo, des, md5, sha-256, sha-512) mediante la opción -m. En sistemas modernos, lo sensato es decantarse por SHA-512 como mínimo, o por esquemas aún más robustos si la distribución los soporta.

La opción especialmente interesante en el contexto del salting es -S, que permite añadir una sal a la contraseña antes de cifrarla. Si no se especifica manualmente, mkpasswd puede generar una sal aleatoria en cada ejecución, de forma que incluso usando la misma contraseña de entrada, el hash resultante sea diferente cada vez.

Esto se puede comprobar fácilmente: si se cifra “contraseña123” varias veces con mkpasswd, usando SHA-512 y sal aleatoria, se obtendrán hashes totalmente distintos. En cambio, si se pasa el mismo valor de sal mediante -S, el hash será siempre idéntico, porque la combinación contraseña + sal no cambia.

Gracias a esta herramienta es muy sencillo preparar contraseñas cifradas con sal para añadir a ficheros de configuración, gestionar usuarios manualmente o probar el comportamiento del salting sin tener que programar nada.

Qué es la higiene digital
Artículo relacionado:
Higiene digital: seguridad, bienestar y orden en tu vida online