Pourquoi les hachages de mots de passe cèdent
Tu le lis régulièrement : « base de données du site X volée, des millions de mots de passe divulgués ». Mais un bon site ne garde pas ton mot de passe — seulement son hash. Et à partir d'un hash, tu ne peux pas recalculer le mot de passe, tu le sais depuis le chapitre précédent. Alors… y a-t-il un problème ? Oui. Et dans ce chapitre, c'est toi qui joues le hacker pour voir pourquoi.
Les mots dont tu as besoin
- Base de données
- La grande table dans laquelle un site web garde tous ses utilisateurs : nom, adresse e-mail, et (si tout va bien) le hash du mot de passe.
- Table de correspondance (ou « table arc-en-ciel »)
- Une liste que quelqu'un a préparée à l'avance : à gauche des milliards de mots de passe courants, à droite leur hash. Qui tombe sur un hash le cherche à droite et lit le mot de passe à gauche. Pas de calcul, juste une recherche.
- Salt (sel)
- Littéralement « sel » : un petit bout de texte aléatoire que le site colle à ton mot de passe avant de le hasher. Différent pour chaque utilisateur. Ce n'est pas secret — il est simplement à côté du hash — mais ça rend toute table de correspondance inutile.
- PBKDF2
- Une fonction de hachage volontairement lente : elle répète le calcul des centaines de milliers de fois. Pour toi, une demi-seconde à la connexion. Pour un hacker qui veut essayer des milliards de mots de passe, un mur.
Comment un hash « incassable » se fait quand même casser
Le hacker ne calcule pas à l'envers. Il calcule en avant. Il
prend une liste du milliard de mots de passe les plus utilisés —
123456, azerty, bienvenue, les noms
de tous les clubs de foot — et calcule le hash de chacun. Ça prend du
temps, mais il ne doit le faire qu'une seule fois. Ensuite, il compare les
hashs volés à sa liste. Chaque hash qui correspond est un mot de passe
cassé. Pas de maths, juste de la patience et un gros disque dur.
Joue le hacker
Tout se passe dans ton navigateur. Rien n'est envoyé au serveur. Ne tape quand même jamais ici un mot de passe que tu utilises vraiment — c'est une bonne habitude.
- Clique sur Hasher et chercher. La démo hashe ton mot de passe et cherche le hash dans un petit tableau de quelques douzaines de mots de passe courants. Trouvé ? Alors tu es « cassé ».
- Essaie
azerty,football,docteur. Essaie ensuite quelque chose que tu inventes toi-même. - Clique sur Même mot de passe, avec salt. Même mot de passe, hashé deux fois — et pourtant deux hashs complètement différents. Cherche-les : rien.
- Clique sur Avec PBKDF2 (lent) et regarde le temps. Calcule ce que ça signifie pour quelqu'un qui doit essayer dix millions de fois.
Le salt : à chacun son propre problème
Sans salt, tous les utilisateurs avec le mot de passe bienvenue
ont exactement le même hash. Le hacker en casse un, et il les a tous. Avec
le salt, chaque utilisateur obtient un hash différent pour le même mot de
passe. Le hacker doit maintenant re-hasher toute sa liste séparément pour
chaque utilisateur. Une fuite de dix millions de comptes devient
dix millions de tâches séparées.
La lenteur : la seule arme qui compte vraiment
SHA-256 est ultra-rapide — une bonne carte graphique calcule des milliards de hashs par seconde. C'est pratique pour les fichiers et catastrophique pour les mots de passe. C'est pourquoi les bons sites utilisent une fonction volontairement lente. Clique sur PBKDF2 dans la démo et observe le temps. Quelques centaines de millisecondes, tu les sens à peine en te connectant. Mais pour le hacker, chaque tentative est multipliée par ce nombre — et il en a des milliards.
Ce que ça signifie pour toi
- La longueur bat l'originalité.
velo-bleu-il-pleut-mardiest bien plus fort queP@ss1!, car il ne figure dans aucune liste. - Jamais le même mot de passe sur deux sites. Si le site le plus faible fuit, les hackers essaient aussitôt ce mot de passe sur ton e-mail et tes jeux.
- Un gestionnaire de mots de passe le retient pour toi. Chaque mot de passe peut alors comporter trente caractères aléatoires — toi, tu n'as besoin d'en connaître qu'un seul.
Pour quand tu construiras toi-même un site plus tard :
n'écris jamais ça toi-même. Chaque langage de programmation a une
fonction intégrée qui gère bien le salt et la lenteur (en PHP, elle
s'appelle password_hash()). Bricoler soi-même un hash et un
salt est l'erreur classique du débutant — et la cause de la moitié des
fuites dans l'actualité.
Voici les maths : à quel point « grand » est grand ?
Un mot de passe de 8 lettres minuscules a 268 ≈ 200 milliards de possibilités. Ça semble beaucoup — une carte graphique en vient à bout en une minute. Quatre mots aléatoires tirés d'un dictionnaire de 5000 mots : 50004 = 625 billions, et ça, c'est encore sans majuscules ni chiffres. C'est la différence entre élever à la puissance avec une grande base et un grand exposant. Qui a le sens des grands nombres conçoit de meilleurs cadenas que qui ne l'a pas.