Les attaques

MD5, SHA-1 et l'extension de longueur

La théorie des collisions n'est pas restée théorique. Deux fonctions historiques, MD5 et SHA-1, ont été effectivement cassées, et la construction Merkle-Damgård elle-même souffre d'une faiblesse structurelle exploitable.

MD5 : cassé depuis 2004

MD5 produit une empreinte de 128 bits, soit seulement 64 bits de résistance aux collisions. Dès 2004, Wang et ses collègues ont publié une méthode produisant des collisions en quelques heures de calcul, bien plus vite que les 2^64 attendus.

Les conséquences ont été réelles : en 2012, le malware Flame a forgé un faux certificat Microsoft en exploitant une collision MD5. MD5 est aujourd'hui interdit pour tout usage de sécurité.

SHA-1 : l'attaque SHAttered (2017)

SHA-1 produit 160 bits, soit 80 bits de résistance théorique. En 2017, Google et le CWI ont réalisé SHAttered : deux fichiers PDF différents ayant la même empreinte SHA-1, au prix d'environ 2^63 calculs. La collision a coûté cher, mais elle a été effective. SHA-1 est depuis banni des navigateurs et des autorités de certification.

Retenez la règle : MD5 et SHA-1 sont cassés et interdits. On utilise SHA-256 (SHA-2) ou SHA-3.

L'attaque par extension de longueur

Merkle-Damgård a un défaut structurel indépendant des collisions. L'empreinte finale d'un message est l'état interne complet à la fin du chaînage. Un attaquant qui connaît H(message) connaît donc l'état interne, et peut reprendre le chaînage pour ajouter des blocs — sans connaître le message d'origine.

   Le défenseur calcule :
   IV -> f -> f -> ... -> f -> H(message)
              (message secret)

   L'attaquant, sans connaître "message", repart de H(message) :
   H(message) -> f -> f -> H(message || padding || suffixe)
                     (suffixe choisi par l'attaquant)

Il peut ainsi produire l'empreinte valide de message || padding || suffixe. C'est dangereux pour les schémas naïfs du type H(secret || données) utilisés comme authentifiant : l'attaquant rallonge le message et recalcule un authentifiant valide.

La parade côté MAC est le HMAC, qui imbrique deux hachages avec la clé (H(clé ⊕ a || H(clé ⊕ b || message))) et neutralise l'extension.

SHA-3 et la construction éponge

SHA-3 (Keccak, normalisé en 2015) n'utilise pas Merkle-Damgård mais une construction différente, l'éponge (sponge). Le message est « absorbé » dans un état large, puis l'empreinte est « essorée » — et l'empreinte publiée ne révèle qu'une partie de l'état interne. L'attaque par extension de longueur devient donc impossible par construction. SHA-3 n'a pas remplacé SHA-2 (toujours sûr), mais offre une alternative de secours fondée sur une structure indépendante.

En résumé

MD5 (collisions dès 2004) et SHA-1 (SHAttered, 2017) sont cassés et interdits. La construction Merkle-Damgård souffre en plus de l'extension de longueur, qui permet de calculer H(message || suffixe) sans connaître le message ; on s'en protège avec HMAC. SHA-3, fondé sur la construction éponge, échappe nativement à cette faiblesse.