Understanding Salt y Pepper
Aprender el roles de salt y pepper en contraseña hashing y cómo they complement cada otro.
问题
You querer a understand cuando a usar un salt versus un pepper y cómo cada protects against diferente attack vectors.
Requisitos previos
- Understanding of password hashing
- Knowledge of rainbow tables and brute force
Pasos
-
1. Understand the salt
A salt is a random value generated per password and stored alongside the hash. It ensures that identical passwords produce different hashes, defeating rainbow tables and multi-target attacks. The salt is not secret; its value comes from being unique.
entradauser A: salt=a1 | user B: salt=b2输出same password → different hashes -
2. Understand the pepper
A pepper is a secret value shared across all passwords but not stored with the hash. It is stored in a separate secure location (e.g., environment variable or HSM). If the database is leaked but the pepper is not, the attacker cannot crack any password without also obtaining the pepper.
entradapepper: secret env var输出hash = KDF(password + salt + pepper) -
3. Combine both for defense in depth
Use a per-password salt (stored) plus a global pepper (secret). The salt defends against rainbow tables and identical-password detection. The pepper adds a second layer: even with the full database, passwords cannot be cracked without the pepper. Keep the pepper in a separate secrets manager.
entradasalt + pepper输出layered protection
Resultado esperado
Contraseña hashes protected por both per-contraseña salts y un secret pepper, providing defense en profundidad.
Errores comunes
- Storing the pepper in the database
- The pepper must be stored separately from the hashes, otherwise it provides no additional protection if the database is leaked.
- Using the same salt for all passwords
- Generate a unique random salt per password. A shared salt defeats the purpose of salting.
Solución de problemas指引
- If you lose the pepper, all passwords become unverifiable. Back up the pepper securely.
- If migrating, you can re-hash with a new pepper by verifying with the old one and re-hashing.
Límites de seguridad
- The pepper is only effective if it remains secret. Store it in an HSM or secrets manager, not in source code.
- All hashing is local.