Les défenses modernes
Le sel (salt)
Les tables arc-en-ciel fonctionnent parce que le hachage brut est prévisible. Le sel casse cette prévisibilité de façon simple et radicale.
Ajouter du hasard : le sel
Le principe : pour chaque compte, on génère une valeur aléatoire et unique, appelée le sel (salt). Avant de hacher, on combine le mot de passe et le sel.
empreinte = hachage( sel + motdepasse )
Le sel n'est pas secret : on le stocke en clair, juste à côté de l'empreinte dans la base. Chaque ligne contient donc un couple (sel, empreinte).
+----------+--------------------+------------------------+
| user | sel (aléatoire) | empreinte |
+----------+--------------------+------------------------+
| alice | 8fk3Qz | hachage("8fk3Qz" + mdp)|
| bob | pL9xR2 | hachage("pL9xR2" + mdp)|
+----------+--------------------+------------------------+
Effet n°1 : plus d'empreintes identiques
Comme le sel est unique par utilisateur, deux personnes ayant le même mot de passe obtiennent des empreintes différentes :
Alice : hachage("8fk3Qz" + "soleil2024") -> 71c0aa...
Bob : hachage("pL9xR2" + "soleil2024") -> e934bd... (différent !)
L'attaquant ne peut plus repérer les comptes qui partagent un mot de passe, ni casser plusieurs comptes d'un coup.
Effet n°2 : les tables arc-en-ciel deviennent inutiles
C'est l'apport majeur. Une table arc-en-ciel est pré-calculée pour des mots de passe sans sel. Avec un sel aléatoire, l'attaquant devrait construire une table entière par valeur de sel possible — ce qui représente un travail astronomique, totalement hors de portée.
Le pré-calcul « une fois pour toutes » s'effondre : le sel force l'attaquant à recommencer le calcul pour chaque compte, individuellement. Les tables toutes prêtes ne servent plus à rien.
Ce que le sel ne fait pas
Attention : le sel ne protège pas contre l'attaque d'un seul compte ciblé. Contre une victime précise, l'attaquant lit son sel (public) et lance force brute ou dictionnaire sur ce compte. Le sel empêche les attaques de masse et les tables pré-calculées, mais pas l'acharnement individuel — c'est le rôle des fonctions lentes de la leçon suivante.
En option : le poivre
Certains systèmes ajoutent un poivre (pepper) : un secret global, identique pour tous, mais stocké ailleurs que dans la base (dans le code ou un module sécurisé). Si seule la base fuite, l'attaquant n'a pas le poivre. Contrairement au sel, le poivre est secret et non stocké à côté des empreintes.
En résumé
- Le sel est une valeur aléatoire et unique par compte, ajoutée au mot de passe avant hachage.
- Il est stocké en clair à côté de l'empreinte (il n'est pas secret).
- Effet : deux mots de passe identiques donnent des empreintes différentes.
- Les tables arc-en-ciel deviennent inutiles (il en faudrait une par sel).
- Le poivre est une variante secrète et globale, stockée hors de la base.

