MD5 non sûr pour la signature électronique
Date : 03 Août 2005
L'algorithme de prise d'empreinte MD5 ("Message Digest 5") a à nouveau fait l'objet d'une démonstration de faiblesse qui le rend désormais inadapté (non sûr) pour la signature électronique. En effet, deux universitaires allemands viennent de présenter une technique astucieuse qui permet de fabriquer un document PostScript falsifiable. Avec cette méthode, il est possible de changer le contenu du document, sans altérer sa signature, si c'est l'algorithme MD5 qui a été utilisé pour générer l'empreinte du document (en général, c'est plutôt "SHA-1" qui est utilisé).
En un an, c'est la troisième annonce qui met à mal le monde des algorithmes de prise d'empreinte. En effet :
- Il y a un an (cf. l'article "Faiblesse cryptographique dans les algorithmes MD5 et SHA-1" du bulletin d'août 2004) le premier cas de collision MD5 avait été découvert.
- En février 2005 (cf. l'article "Faiblesse de l'algorithme de chiffrement SHA-1" du bulletin de février 2005), une nouvelle méthode d'attaque de l'algorithme SHA-1 (l'autre algorithme très connu pour la prise d'empreinte) a été annoncé (les détails sur cette méthode ont été en final publié en juin 2005).
La technique exposée par les chercheurs allemands combine deux faiblesses de MD5 :
- Il est possible de générer deux chaînes de caractères "X" et "Y" ayant la même empreinte MD5 (collision découverte en août 2004).
- Si l'on concatène une chaîne constante"S" à "X" et à "Y", les deux nouveaux messages "X||S" et "Y||S" ont à toujours la même empreinte MD5 (propriété mathématique de l'algorithme MD5).
Sur cette base, les chercheurs ont écrit un document Postscript (Postscript est un langage spécialisé dans la mise en forme et l'impression de documents) qui contient schématiquement le code suivant :
SI ( "X" = "X" ) ALORS imprimer("texte1")
SINON imprimer("texte2")
Si l'on visualise (ou si l'on imprime) ce document Postscript, le code qu'il contient est exécuté et l'utilisateur voit simplement le texte "texte1".
L'attaque consiste à faire signer ce document par l'utilisateur (qui visualise le document puis le signe au moyen de MD5 sans se rendre compte qu'il existe un texte "texte2" caché dans le document), puis à modifier son contenu en :
SI ( "Y" = "X" ) ALORS imprimer("texte1")
SINON imprimer("texte2")
Cette fois, si l'on visualise ce document Postscript, l'utilisateur voit simplement le texte "texte2". Par contre comme "X" et "Y" ont été choisis parce qu'ils ont le même MD5, la signature MD5 du document entier n'est pas modifiée. L'utilisateur a donc signé le document "texte1" qui peut ensuite être falsifié en "texte2" sans altérer la signature MD5 !
L'attaque est habile. Elle est préoccupante parce que la communauté se demande maintenant s'il ne serait pas possible sur un principe similaire de falsifier un document "PDF" ou "Word", ou même de transposer cette attaque avec l'algorithme SHA-1. Une telle démonstration aurait une toute autre portée (Postscript n'est plus vraiment un langage courant, et MD5 est peu utilisé en signature électronique).
Vu la vitesse à laquelle ont progressé les attaques contre les algorithmes de prise d'empreinte en un an, le compte à rebours a peut-être déjà commencé….
Pour plus d'information :
- Article didactique "Attaque réussie contre la signature électronique" : http://www.lesnouvelles.net/articles/vulnerabilites/708-attaque-contre-la-signature-electronique.html
- Présentation de l'attaque à la "rump session" Eurocrypt 2005
"Attacking Hash Functions by Poisoned Messages - The Story of Alice and her Boss" : http://www.cits.rub.de/imperia/md/content/magnus/rump_ec05.pdf