Créé en 1991 par Ronald Riverst (RSA security), le MD5 est une fonction de hashage qui à partir d'un fichier numérique calcule une empreinte (ou hash) unique de 128 bits.
Les fonctions de hashage sont à sens unique, c'est à dire, qu'on ne peut pas reconstituer un document à partir de son empreinte. C'est ce qu'on appelle la propriété de "1° préimage".
Une fonction de hashage doit satisfaire deux autres propriétés:
- 2° préimage: si on a un message m1, il est difficile de trouver un autre message m2 tel que h(m1)=h(m2).
- résistance aux collisions: il est difficile de trouver deux messages distincts m1 et m2 tel que h(m1)=h(m2).
Mise à part l'insuffisance de la taille de l'empreinte (128bits) pour garantir une sécurité à long terme, le MD5 a été l'objet de diverses attaques qui ont prouvé sa faiblesse d'un point de vue cryptographique.
Parmi ces attaques citons:
- 1993: découverte d'une "pseudo-collison" dans la fonction de compression du MD5.
- 1996: découverte d'une faille permettant de créer des collisions à la demande sur une version modifiée (affaiblie) du MD5 (faille jugées non critique).
- 2005: une équipe chinoise annonce avoir créé une collison complète en à peine 1 heure (avec un IBM p690 cluster).
- 2007: un groupe de chercher annonce la découverte d'un méthode de création de deux fichiers produisant le même chucksum MD5.
- Décembre 2008: création d'un faux certificat SSL valide.
Dans son «Guide de la gestion des mots de passe à l'usage des entreprise», le NIST qui est l'organisme américain de standardisation, rappelle que l'utilisation des algorithmes de la famille MD5 n'a jamais était approuvée par ses services et recommande aux entreprises américaines d'utiliser des algorithmes de la famille SHA (Secure Hash Algorithm).
Le NIST recommande aussi l'utilisation de HMAC (Hash Message Authentication Code) pour améliorer la robustesse de l'empreinte générée. Le HMAC est une fonction mathématique qui a comme entrée le mot de passe en clair et un grain de sel (une valeur aléatoire) et en sortie l'empreinte du mot de passe. l'utilisation de cette fonction rend difficile les attaque par rainbow tables.