Glossary
Pepper (pimienta)
Un pepper es un valor secreto añadido a cada contraseña antes del hashing, guardado fuera de la base de datos para que una fuga de la base, por sí sola, no lo exponga como sí haría con una sal.
Un pepper es un valor secreto que se mezcla con cada contraseña antes de hashearla, parecido a una sal pero con una diferencia crucial: es igual para todos los usuarios y nunca se guarda junto al hash. Mientras que una sal vive en la base de datos justo al lado de su hash, a la vista, un pepper vive en otro lugar por completo —una variable de entorno, un archivo de configuración o un módulo de seguridad hardware— de modo que robar la base de contraseñas no entrega también el pepper.
Esa separación es la clave. Si un atacante filtra la base de datos, obtiene los hashes y las sales pero no el pepper, así que ni siquiera puede empezar a probar hipótesis correctamente sin comprometer además el servidor de la aplicación o el gestor de secretos. Una sal por sí sola no puede ofrecer esto, porque solo está diseñada para derrotar las rainbow tables y evitar que contraseñas idénticas compartan hash: da por hecho que el atacante ya la tiene.
Un pepper es una medida de defensa en profundidad, no un sustituto de un algoritmo lento. Normalmente se implementa como una clave HMAC aplicada antes (o junto a) una función de hashing de contraseñas adecuada, como bcrypt o Argon2; consulta Argon2 vs bcrypt vs scrypt para elegir el KDF sobre el que apoyar un pepper.