La base clients a fuité
Un site de billets de concert se fait voler sa base clients. Elle contient 200 000 adresses e-mail et mots de passe.
Beaucoup de clients utilisent le même mot de passe pour leur messagerie. Si les mots de passe sont lisibles, l’attaquant peut entrer partout.
Un système bien conçu ne garde jamais le mot de passe lui-même. Voyons ce qu’il garde à la place.
À la fin de cette leçon
Remarque
Je peux expliquer pourquoi on stocke les mots de passe sous forme d’empreinte.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| En clair | lisible tel quel par n’importe qui | |
| Fonction de hachage | un calcul qui transforme un texte en code de longueur fixe | SHA-256 |
| Empreinte | le code obtenu, impossible à inverser | |
| Sel | un texte aléatoire ajouté avant le hachage | |
| Fuite de données | des données prises par quelqu’un qui n’y a pas droit |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une empreinte ne marche que dans un sens
Une fonction de hachage transforme n’importe quel texte en un code de longueur fixe. Ce code est l’empreinte.
Le même texte donne toujours la même empreinte. Changez une seule lettre et l’empreinte change complètement.
On ne peut pas retrouver le texte à partir de l’empreinte. C’est pour cela qu’on peut la garder sans danger.
Essayez : hacher des mots de passe
import hashlib
def empreinte(texte):
# encode() transforme le texte en octets, ce que hashlib attend
return hashlib.sha256(texte.encode()).hexdigest()
print(empreinte("soleil2026"))
print(empreinte("soleil2026"))
print(empreinte("Soleil2026"))
print(len(empreinte("a")), len(empreinte("un mot de passe bien plus long")))
# Changez une lettre de "soleil2026", puis relancez.
Se connecter, c’est comparer deux empreintes
À l’inscription, le système calcule l’empreinte de votre mot de passe. Il ne garde que cette empreinte.
À la connexion, il calcule l’empreinte de ce que vous tapez. Puis il la compare à celle qu’il a gardée. Si les deux sont identiques, vous entrez.
Le système n’a jamais besoin de connaître votre mot de passe. Un voleur de la base n’obtient que des empreintes.
Le sel distingue deux mots de passe identiques
Deux personnes avec le même mot de passe ont la même empreinte. Un attaquant le voit tout de suite. Il peut aussi chercher les empreintes courantes dans de grandes listes préparées à l’avance.
Le sel règle ce problème. Le système ajoute un texte aléatoire à chaque mot de passe avant de le hacher. Le sel est gardé à côté de l’empreinte. Il n’a pas besoin d’être secret.
Essayez : ajouter un sel
import hashlib
def empreinte(texte):
return hashlib.sha256(texte.encode()).hexdigest()
# Deux salariés ont choisi le même mot de passe
print("Léa :", empreinte("soleil2026")[:16])
print("Hugo :", empreinte("soleil2026")[:16])
# Chacun reçoit son propre sel, gardé à côté de l'empreinte
print("Léa :", empreinte("x7Q2" + "soleil2026")[:16])
print("Hugo :", empreinte("k9Lp" + "soleil2026")[:16])
# Donnez à Hugo le sel "x7Q2". Que devient son empreinte ?
Une erreur fréquente
Attention
Beaucoup pensent que hacher et chiffrer, c’est pareil. Une donnée chiffrée se déchiffre avec une clé. Une empreinte ne se défait pas, même avec une clé. Gardez les mots de passe hachés, car personne, pas même vous, ne doit pouvoir les lire.
Dans un vrai poste
Astuce
SHA-256 est rapide, ce qui aide un attaquant qui teste des milliards de mots de passe. Les vrais systèmes utilisent un hachage lent comme bcrypt ou Argon2, qui ajoute le sel tout seul. L’idée reste celle de cette leçon.