¿Qué es una sal en el hashing de contraseñas, por qué se usa y qué es una pimienta?
Respuesta breve
Una sal es un valor aleatorio único generado por usuario y combinado con la contraseña antes del hashing. Garantiza que contraseñas idénticas produzcan hashes diferentes y vuelve inútiles los ataques precalculados como las tablas arcoíris, ya que el atacante necesitaría una tabla distinta por sal. Las sales se almacenan junto al hash. Una pimienta es un valor secreto adicional, el mismo para todos los usuarios, guardado por separado (por ejemplo, en la configuración de la app o un HSM) para que una filtración de la base de datos sola no baste.
Esta pregunta separa a los candidatos que conocen las palabras de los que entienden qué ataque detiene cada defensa. El salado y el añadido de pimienta apuntan a amenazas distintas, y decirlo con precisión es lo que gana el punto.
Contra qué defiende una sal
Sin una sal, la misma contraseña siempre se hashea al mismo valor. De ahí se derivan dos consecuencias. Primero, los atacantes pueden precalcular tablas arcoíris —enormes tablas de búsqueda de hash-a-contraseña— y romper cualquier hash sin sal por búsqueda. Segundo, si dos usuarios comparten una contraseña, sus hashes idénticos revelan ese hecho en una base de datos filtrada.
Una sal es un valor aleatorio único generado por usuario y mezclado con la contraseña antes del hashing. Ahora contraseñas idénticas producen hashes diferentes, así que una tabla precalculada es inútil: un atacante necesitaría una tabla fresca por sal, lo que arruina la economía por completo. La sal no es secreta; se almacena justo al lado del hash y eso está bien, porque su trabajo es hacer cada hash único, no estar oculta.
Qué no hace una sal
El salado no ralentiza de forma significativa un ataque de fuerza bruta contra un solo hash dirigido: el atacante simplemente incluye la sal conocida mientras adivina. Por eso el salado debe combinarse con una función de hashing lenta (bcrypt, scrypt, Argon2). La sal detiene el precálculo masivo; el factor de trabajo detiene la adivinación rápida.
Qué añade una pimienta
Una pimienta es un valor secreto adicional mezclado durante el hashing, pero a diferencia de la sal es el mismo para todos los usuarios y se almacena por separado de la base de datos: en la configuración de la aplicación, una variable de entorno, o idealmente un módulo de seguridad de hardware. El objetivo es la defensa en profundidad: si solo se filtra la base de datos de contraseñas, al atacante le falta la pimienta y no puede verificar sus intentos sin conexión. Solo ayuda si se mantiene genuinamente apartada de los hashes.
Qué buscan los entrevistadores
La unicidad por usuario, la lógica de la tabla arcoíris y el hash idéntico, el hecho de que las sales pueden ser públicas mientras que las pimientas deben ser secretas y estar separadas, y la salvedad de que el salado por sí solo no detiene la fuerza bruta dirigida.
Posibles preguntas de seguimiento
- ¿Por qué es seguro almacenar la sal junto al hash, pero no la pimienta?
- ¿Ralentiza el salado un ataque de fuerza bruta dirigido contra un solo usuario?
- ¿Por qué las sales deben ser únicas por usuario en lugar de una sal global?