Salt
Un sel est une valeur aléatoire ajoutée lors du hachage de mots de passe afin que des mots de passe identiques produisent des hachés différents, ce qui neutralise les tables arc-en-ciel et la détection de mots de passe identiques.
Objectif
Rendre le haché de chaque mot de passe utilisateur unique même pour des mots de passe identiques, afin d'empêcher le précalcul et la comparaison en masse.
Mécanisme
On génère un sel aléatoire unique (≥ 16 octets) par mot de passe et l'on hache la concaténation : H(password || sel). Le sel est stocké avec le haché (aucune confidentialité requise) ; lors de la vérification, on re-hache avec le sel stocké puis on compare. Le salage oblige à précalculer les tables arc-en-ciel pour chaque utilisateur, ce qui est infaisable.
Cas d’usage
- Stockage des hachés de mots de passe
- Entrée de KDF (PBKDF2/scrypt)
- Analogie avec l'IV de chiffrement
- Génération de jetons
Exemples
- entrée
password + random saltOutputUnique hashDifferent per user
Erreurs courantes
- A global fixed salt (equivalent to no salt)
- Generate a unique random salt per password