cybercursus

Le salage : pourquoi deux mots de passe identiques donnent des empreintes différentes

10 min · Intermédiaire · 7 août 2026

Sommaire
  1. Le prix du déterminisme
  2. Le sel : une valeur aléatoire, unique, mais pas secrète
  3. Ce que le salage ne règle pas

Le prix du déterminisme

Le chapitre 2 présentait le déterminisme comme une propriété nécessaire d’une fonction de hachage : la même entrée doit toujours produire la même empreinte. Appliqué tel quel à des mots de passe, ce déterminisme devient un problème : deux utilisateurs qui choisissent le même mot de passe se retrouvent avec exactement la même empreinte en base.

Danger

Un attaquant qui repère deux empreintes identiques dans une base de données sait immédiatement que ces deux comptes partagent le même mot de passe, sans même avoir besoin de le casser. Une seule rainbow table, calculée une fois, compromet alors tous les comptes partageant un mot de passe courant.

Le sel : une valeur aléatoire, unique, mais pas secrète

Un sel est une valeur aléatoire générée pour chaque utilisateur, combinée au mot de passe avant hachage, puis stockée en clair à côté de l’empreinte (elle n’a rien de secret : son seul rôle est de rendre chaque empreinte unique).

python
import hashlib, secrets

mot_de_passe = "soleil123"

# Sans sel : deux comptes avec le meme mot de passe ont la meme empreinte
empreinte1 = hashlib.sha256(mot_de_passe.encode()).hexdigest()
empreinte2 = hashlib.sha256(mot_de_passe.encode()).hexdigest()
print("Sans sel, memes empreintes ?", empreinte1 == empreinte2)

# Avec un sel different, genere aleatoirement pour chaque utilisateur
sel_alice = secrets.token_hex(8)
sel_bob = secrets.token_hex(8)
empreinte_alice = hashlib.sha256((sel_alice + mot_de_passe).encode()).hexdigest()
empreinte_bob = hashlib.sha256((sel_bob + mot_de_passe).encode()).hexdigest()

print("Avec sel, memes empreintes ?", empreinte_alice == empreinte_bob)
print("Sel d'Alice :", sel_alice, "-> empreinte :", empreinte_alice)
print("Sel de Bob  :", sel_bob,   "-> empreinte :", empreinte_bob)

Même mot de passe, sels différents, empreintes totalement différentes. Une rainbow table précalculée pour l’algorithme seul devient inutile : il faudrait en recalculer une par sel, ce qui annule l’intérêt même de la précalculation.

Ce que le salage ne règle pas

Le salage empêche la réutilisation d’une même rainbow table entre comptes, mais ne ralentit en rien une attaque par force brute ciblée sur un compte précis : SHA-256 reste une fonction volontairement rapide, calculable des milliards de fois par seconde sur du matériel dédié. C’est pour cette raison que le stockage de mots de passe en production utilise des fonctions délibérément lentes et coûteuses (bcrypt, scrypt, Argon2), hors du cadre de ce cours mais construites sur les mêmes principes de sel et d’empreinte.

Quel problème pose le déterminisme du hachage pour une base de mots de passe ?
Pourquoi le sel n'a-t-il pas besoin d'être gardé secret ?

Pour aller plus loin

Commentaires

Recherche