Ah, MD5. Dans les annĂ©es 90, câĂ©tait le chouchou de tout le monde. Rapide, compact, facile Ă implĂ©menter, et surtout prĂ©sentĂ© comme « incassable ». Mais comme tout ado rebelle, il a vite montrĂ© ses failles. Aujourdâhui, lâutiliser pour la sĂ©curitĂ©, câest comme confier ton mot de passe Wi-Fi au premier stagiaire qui passe : une trĂšs mauvaise idĂ©e.
đ Un peu dâhistoire : la gloire passĂ©e de MD5
MD5 (Message Digest 5) a été conçu en 1992 par Ronald Rivest (le « R » de RSA).
LâidĂ©e : produire une empreinte 128 bits dâun message, suffisamment unique pour garantir :
- Intégrité : toute modification du message change le hash.
- UnicitĂ© : deux messages diffĂ©rents ne doivent pas donner la mĂȘme empreinte.
Et Ă lâĂ©poque, 128 bits, ça semblait largement suffisant. AprĂšs tout, ça fait 2^{128} \approx 3,4 \times 10^{38} possibilitĂ©s. Spoiler : ça nâa pas tenu bien longtemps.
đ Le paradoxe des anniversaires : quand 23 personnes suffisent
Le cĆur du problĂšme se cache dans un paradoxe mathĂ©matique aussi cĂ©lĂšbre quâĂ©lĂ©gant.
đ Question : combien de personnes faut-il dans une salle pour quâil y ait 50 % de chances que deux aient le mĂȘme anniversaire ?
Réponse surprenante : 23 personnes.
đŹ DĂ©monstration mathĂ©matique
On note :
- n : le nombre de jours possibles (365 pour un calendrier).
- k : le nombre de personnes.
La probabilité que tous les anniversaires soient distincts est :
P(\text{pas de collision}) = \prod_{i=0}^{k-1} \frac{n - i}{n}Donc la probabilitĂ© quâil y ait au moins une collision est :
P(\text{collision}) = 1 - \prod_{i=0}^{k-1} \frac{n - i}{n}En posant n = 365, on trouve que :
P(\text{collision}) \approx 0,5 quand k \approx 23.
đ Application aux fonctions de hachage
Maintenant, appliquons ça aux empreintes MD5 :
- MD5 â 128 bits
- Nombre total de hashs possibles : 2^{128}
Le paradoxe des anniversaires nous dit que le nombre dâessais nĂ©cessaires pour obtenir une collision probable Ă 50 % est :
k \approx 1,177 \times \sqrt{2^{128}} = 1,177 \times 2^{64}Soit environ 2^{64} essais â totalement impossible dans les annĂ©es 90⊠mais avec les clusters GPU dâaujourdâhui, câest faisable.
đ§© Mais ce nâest pas tout : les attaques diffĂ©rentielles
Le vrai coup de grĂące ne vient pas seulement du paradoxe. En 2004, la chercheuse chinoise Wang Xiaoyun a publiĂ© une mĂ©thode pour casser MD5 en moins dâune heure sur un PC classique. Pas besoin de faire 2^{64} essais, juste quelques millions suffisent.
Les chercheurs ont exploité la structure interne en rondes de MD5 (64 transformations Feistel-like).
En construisant des diffĂ©rentiels soigneusement choisis, ils ont pu gĂ©nĂ©rer deux messages diffĂ©rents avec le mĂȘme hash :
đš Des collisions dans le monde rĂ©el
MD5 est mort thĂ©oriquement, mais il a continuĂ© Ă ĂȘtre utilisĂ© (mauvaise habitude). RĂ©sultat :
- 2008 : une équipe génÚre un faux certificat SSL signé avec MD5. Résultat : un navigateur acceptait un certificat pirate comme légitime.
- 2012 : le malware Flame utilisait une attaque sur MD5 pour se faire passer pour une mise Ă jour Microsoft.
- 2017 : Google publie SHAttered, une collision sur SHA-1⊠mais le principe avait déjà été validé sur MD5 bien avant.
Bref : utiliser MD5, câest comme laisser ta porte ouverte avec un panneau « ne pas entrer ».
đŠ RĂ©sumĂ© pĂ©dagogique
â Ce quâil faut retenir
- MD5 produit des empreintes de 128 bits.
- Le paradoxe des anniversaires réduit la sécurité à 2^{64} opérations pour une collision.
- Les attaques différentielles rendent MD5 encore plus faible.
- Dans la vraie vie, MD5 a déjà été exploité dans des attaques critiques.
â Ce quâil ne faut pas faire
- Ne jamais utiliser MD5 pour la sécurité (mots de passe, certificats, signatures).
- Ne pas se dire « câest rapide, câest pratique » â la sĂ©curitĂ©, ce nâest pas un sprint.
â°ïž Conclusion sarcastique : MD5, le zombie de la crypto
MD5 est officiellement enterrĂ© depuis plus de 20 ans. Pourtant, on le croise encore dans certains logiciels, dans des bases de donnĂ©es poussiĂ©reuses, ou pire, pour « sĂ©curiser » des mots de passe. Autant dire que câest comme utiliser un cadenas en plastique pour protĂ©ger une banque.
La leçon ? La cryptographie vieillit mal. Si tu veux faire du sérieux : SHA-256, SHA-3, BLAKE2, Argon2⊠mais surtout pas MD5.
đ§Ș Exercice â MD5 & paradoxe des anniversaires (dĂ©monstration chiffrĂ©e)
đŻ Objectif
Montrer mathĂ©matiquement que pour une empreinte de n bits (ex. MD5 : n=128), le nombre dâessais pour obtenir une collision avec probabilitĂ© p est de lâordre de \Theta(2^{n/2}) et calculer prĂ©cisĂ©ment la constante.
âïž Partie A â DĂ©monstration gĂ©nĂ©rale (papier-crayon)
A1) ProbabilitĂ© âzĂ©ro collisionâ
On hache k messages indépendants, uniformément sur N=2^n valeurs.
Montrer que la probabilitĂ© quâil nây ait aucune collision est :
Astuce : utiliser \ln(1-x)\approx -x-\frac{x^2}{2}-\dots et le fait que \sum_{i=0}^{k-1} i = \frac{k(k-1)}{2}.
En nĂ©gligeant les termes dâordre supĂ©rieur lorsque k \ll \sqrt{N}, on obtient lâapproximation classique :
A2) Probabilité de collision
La probabilitĂ© dâavoir au moins une collision est :
P_{\text{coll}} ;=; 1 - P_0 ;\approx; 1 - \exp!\left(-\frac{k(k-1)}{2N}\right).A3) Inversion : nombre dâessais pour une cible p
Poser P_{\text{coll}} = p (ex. p=0{,}5) et résoudre pour k :
\exp!\left(-\frac{k(k-1)}{2N}\right) = 1-p \quad\Rightarrow\quad \frac{k(k-1)}{2N} = -\ln(1-p).Pour k grand, k(k-1)\approx k^2, donc :
k ;\approx; \sqrt{,2N,\ln!\frac{1}{1-p},},.A4) Cas â50 % de chancesâ (la formule culte)
Avec p = 1/2 : \ln!\frac{1}{1-p}=\ln 2, dâoĂč :
k_{50} ;\approx; \sqrt{,2N\ln 2,} = \sqrt{,2\ln 2,};\sqrt{N} \approx 1{,}17741;\sqrt{N}.Comme N=2^n, on obtient :
k_{50} ;\approx; 1{,}17741 \times 2^{n/2}.đ Câest LA constante qui justifie la rĂšgle empirique âsĂ©curitĂ© collision â n/2 bitsâ.
đą Partie B â Applications numĂ©riques
B1) MD5 (n=128)
N = 2^{128},\quad k_{50} \approx 1{,}17741 \times 2^{64}\approx 2{,}17 \times 10^{19}.RĂ©sultat : â 2^{64} essais (Ă la constante prĂšs).
Historiquement âastronomiqueâ, mais les attaques diffĂ©rentielles ont fait bien pire que ça (beaucoup moins dâessais en pratique).
B2) SHA-256 collision (repĂšre)
n=256 \Rightarrow k_{50} \approx 1{,}17741 \times 2^{128},inatteignable dans tout horizon raisonnable.
B3) Variantes Ă calculer (exercice rapide)
Calcule k_{50} pour :
- n=64 : k_{50} \approx 1{,}17741 \times 2^{32}
- n=96 : k_{50} \approx 1{,}17741 \times 2^{48}
(Donne les valeurs dĂ©cimales pour tâentraĂźner.)
đŻ Partie C â âDans lâautre sensâ : probabilitĂ© aprĂšs un budget dâessais
On veut P_{\text{coll}} aprĂšs k essais :
P_{\text{coll}}(k) \approx 1 - \exp!\left(-\frac{k(k-1)}{2\cdot 2^n}\right).C1) Exemple (Ă faire)
Pour n=64 et k=10^9 hachages, calcule :
\lambda = \frac{k(k-1)}{2\cdot 2^{64}}\approx \frac{(10^9)^2}{2\cdot 2^{64}}= \frac{10^{18}} {2\cdot1{,}8446744\times 10^{19}}\approx 0{,}0271,puis
P_{\text{coll}} \approx 1 - e^{-\lambda} \approx 1 - e^{-0{,}0271} \approx 2{,}67%.đ§ Partie D â âPourquoi la constante 1,17741 ?â
Elle vient de \sqrt{2\ln 2} lorsque p=1/2.
Plus généralement, pour une cible p, la constante multiplicative est \sqrt{2\ln\frac{1}{1-p}}.
đ§° Partie E â EncadrĂ© âbonnes pratiquesâ
- Collision resistance dâune empreinte n bits â n/2 bits effectifs (Ă cause du paradoxe).
- Pour signer/identifier : SHA-256 (ou plus), SHA-3, BLAKE2/3.
- MD5 : à bannir (attaques différentielles + collisions pratiques).
â CorrigĂ© synthĂ©tique
- P_0 \approx \exp!\left(-\dfrac{k(k-1)}{2\cdot 2^n}\right)
- P_{\text{coll}} \approx 1 - \exp!\left(-\dfrac{k(k-1)}{2\cdot 2^n}\right)
- k_p \approx \sqrt{,2^{n+1},\ln!\dfrac{1}{1-p},}
- Cas 50 % : k_{50} \approx 1{,}17741 \times 2^{n/2}
- MD5 : k_{50} \approx 1{,}17741 \times 2^{64} \approx 2{,}17\times 10^{19}
đ» (Optionnel) Mini-simu Ă coder plus tard
- Tire des entiers uniformes dans [0,2^n), insĂšre-les dans un set, et arrĂȘte quand tu vois la premiĂšre collision.
- RĂ©pĂšte lâexpĂ©rience (ex. 1000 fois), moyenne le k observĂ© â compare Ă 1{,}17741\times 2^{n/2}.
- Fais-le pour n=24 ou n=28 pour obtenir des résultats en quelques secondes.
