Hachage (irréversible)
| Algorithme | Résultat |
|---|---|
| MD5 | cf0051f7204be0ec68e12a1b4f822666 |
| SHA-1 | 78d0d3068e3660ac5e8fbd7dd9f7a439a054c4e3 |
| SHA-256 | c79a5fac52c8a63a94f4a7e401f5fb3a8dd6e9abead9634876507c0479dc7b7d |
| bcrypt | $2y$12$M9Y6TWxs0wruvGN90SWcF..17YWmO.HOZhEUFdOlU6N.N8od6d8kK |
| Argon2id | $argon2id$v=19$m=65536,t=4,p=1$VGpaYkRNL1NVRUxwbGE3Nw$skU3FfZlf1NckSmwdNGhM+63RLoG/rkx+sqosBoVZ5M |
Chaque algorithme produit une empreinte de taille fixe à partir de laquelle on ne
peut jamais retrouver l'entrée d'origine : on ne peut que recalculer
l'empreinte d'une valeur candidate et la comparer (password_verify()).
Chiffrement (réversible avec la clé)
| Clé secrète (générée pour cette démo) |
|---|
9cLSLNZm+CxcdDjZrnxJ/EKvVHbK5pULp7crAUPeV0Q= |
| Texte chiffré (XChaCha20-Poly1305) |
FD8IeTABHBA3qPXIPxcxjVA9YJTKjCWkfGt7t3Dk |
| Déchiffré avec la clé |
MotDePasse123! |
Avec la clé, le texte original est intégralement récupéré : le chiffrement est réversible. C'est la bonne méthode pour des données qu'on doit pouvoir relire (carte bancaire, document...), mais jamais pour des mots de passe.
"Craquer" un hash faible : attaque par dictionnaire
On construit une petite "table arc-en-ciel" en hachant en MD5 quelques mots de passe
courants. On compare ensuite cette table à la colonne password_legacy
(MD5, héritée d'un ancien système) et à la colonne password_hash
(Argon2id) de chaque utilisateur :
| Utilisateur | password_legacy (MD5) | Mot de passe retrouvé ? | password_hash (Argon2id) |
|---|---|---|---|
| admin | 57c0dfd7aa8690e2b07efd6ebf2fd6ae |
"Admin#2026!" | $argon2id$v=19$m=65536,t=4,p=1... |
| alice | 482c811da5d5b4bc6d497ffa98491e38 |
"password123" | $argon2id$v=19$m=65536,t=4,p=1... |
| bob | 482c811da5d5b4bc6d497ffa98491e38 |
"password123" | $argon2id$v=19$m=65536,t=4,p=1... |
| charlie | |
non trouvée dans le dictionnaire | $argon2id$v=19$m=65536,t=4,p=1... |
La colonne password_legacy (MD5, sans sel) est cassée en quelques
microsecondes dès que le mot de passe figure dans un dictionnaire connu - c'est
exactement le mécanisme exploité dans le
TP A02 (authentification vulnérable).
La colonne password_hash (Argon2id, salée et coûteuse en calcul) ne peut
pas être attaquée de cette façon : il n'existe pas de table précalculée possible, et
chaque essai de mot de passe nécessite un recalcul coûteux.