Le MD5 (ou Message Digest 5) est une fonction cryptographique qui vous permet de créer une "empreinte" de 128 bits (32 caractères en hexadécimal, car vous n'avez besoin que de 4 bits pour coder l'hexadécimal) à partir de n'importe quelle entrée jusqu'à 2^64 bits. Cela produit une empreinte digitale du fichier ou du texte et permet ainsi de le signer pour des vérifications de sécurité.
MD5 a été créé en 1991 en remplacement de l'algorithme MD4, qui, bien qu'étant également un algorithme de 128 bits, présentait des failles de sécurité (des collisions ont été trouvées très tôt). En 1996, des collisions ont également été trouvées sur MD5, qui est considéré comme non sécurisé depuis ces découvertes ; les collisions ont été confirmées en 2004. Vous pouvez en savoir plus sur les collisions ici.
Malgré son insécurité, MD5 est encore largement utilisé comme empreinte de fichier (comme SHA-1) et pour le stockage de mots de passe par des webmasters mal informés sur la sécurité.
L'empreinte produite par MD5 est censée être unique (ce qui n'est pas possible car 128 bits, bien que très grand, n'est pas infini), donc par exemple, si vous tapez le mot "Password" avec une majuscule, cela produira ce hash :
Étant donné que MD5 est une fonction de hachage, elle n'est pas réversible. Cela signifie que vous ne pouvez pas calculer le texte en clair qui a été haché en regardant seulement le hash. C'est une fonction à sens unique et destructrice. C'est aussi pourquoi elle est utilisée pour signer des fichiers et aussi pour stocker des mots de passe. Grâce à cela, les webmasters ne peuvent pas connaître votre mot de passe en clair à partir de leur base de données. Lorsque vous saisissez un mot de passe sur un site web, il est (la plupart du temps) stocké sous forme de hash, puis lorsque vous revenez, ce hash est comparé au hash du mot de passe que vous saisissez, s'ils correspondent, les mots de passe étaient les mêmes.
Maintenant, si le MD5 est une fonction à sens unique, comment la décrypter ? Il n'est en fait pas possible de "décrypter" un hash MD5, nous utilisons ce mot parce qu'il est facile à comprendre, mais la fonction de hachage ne peut pas être décryptée. Par contre on peut retrouver un mot associé à un hash. Pour que cela se produise, la seule façon est de comparer un hash donné avec une base de données de couples mot de passe:hash. C'est ce que nous avons sur ce site. Nous avons des milliards de hash stockés dans notre base de données. Lorsque vous saisissez un hash dans notre barre de0 recherche, nous regardons dans notre base s'il y a une correspondance. Si c'est le cas, nous vous fournissons le mot de passe. Notre base de données contient tous les dictionnaires que nous avons pu trouver sur Internet. Nous avons également créé nos propres dictionnaires à partir d'analyses statistiques de mots de passe réellement utilisés. Nous effectuons également des attaques par force brute sur les mots de passe non trouvés de temps en temps, donc si votre hash n'a pas été trouvé, vous pouvez revenir plus tard, peut-être que nous l'aurons craqué. Si nous ne parvenons pas à le casser, vous pouvez toujours utiliser des services de force brute payants tels que hashes.com ou onlinehashcrack.com. Ou si vous avez un bon GPU, vous pouvez télécharger hashcat et l'utiliser pour casser vous-même les hashs MD5.
Comme mentionné précédemment, le MD5 n'est pas considéré comme sécurisé depuis que des collisions ont été trouvées en 1996. Cependant, il est encore largement utilisé par les webmasters. En fait, le MD5 brut est l'une des pires et des moins sécurisées façons de stocker des mots de passe, juste après le texte brut bien sûr. Un GPU correct est facilement capable de tester plusieurs milliards de mots de passe à la seconde. Si vous stockez réellement des MD5 dans votre base de données et que vous ne voulez pas recoder votre schéma de mot de passe pour utiliser de meilleures techniques de hachage, vous pouvez ajouter un sel. Le sel est une chaîne aléatoire qui sera ajoutée au mot de passe de l'utilisateur. Cela rend les bases de données en ligne (Rainbow Tables et Hash tables) comme la nôtre inutiles car nous devrions recalculer chaque mot de passe avec le sel. L'ajout d'un système de sel est très simple. Par exemple, si le mot de passe MD5 de votre utilisateur est celui que nous avons hashé avant :
Vous voulez ajouter un sel. Par exemple, un sel de 128 bits (qui est un minimum) : 4*;df-A4+#1q:eD7
Nous allons stocker ce sel généré aléatoirement dans notre base de données avec le nom d'utilisateur et le mot de passe hashé. La base de données
ressemblera à cela :
Nom d'utilisateur | hashDigest(mot de passe + sel) | Sel
Lorsque l'utilisateur reviendra se connecter, vous allez concaténer le sel de la base de données avec le mot de passe en texte clair que l'utilisateur saisit,
le comparer
à ce que vous avez stocké et laisser l'utilisateur entrer s'il est correct. De cette façon, un attaquant qui dumpe toute la base de données aura plus de
difficulté à faire une attaque par force brute.
Bien que ce soit en réalité assez simple de faire une attaque par force brute sur les mots de passe salés en utilisant hashcat, notez que cela dépendra de la
manière dont vous avez concaténé le mot de passe et
le sel. Par exemple, si vous faites quelque chose comme sel + mot de passe ou mot de passe + sel, il sera facile pour l'attaquant de le casser. Mais si vous
créez une petite
fonction qui concatène le sel et le mot de passe d'une manière inhabituelle (comme concaténer des sous-chaînes du sel à divers points du mot de passe), il
sera
presque impossible de faire une attaque par force brute.
Vous pouvez également utiliser un poivre, qui est comme un sel mais gardé secret de tout attaquant par n'importe quelle méthode que vous voulez. Il ne devrait pas être conservé dans la base de données contrairement au sel qui est stocké avec le nom d'utilisateur et le mot de passe hashé. Par exemple, cela pourrait être un fichier bien caché contenant une chaîne aléatoire. Idéalement, vous voulez que le poivre soit unique par utilisateur. Ainsi, si par hasard l'attaquant trouve un poivre, cela ne compromettra pas les autres utilisateurs.
La meilleure façon de stocker les mots de passe de nos jours est cependant d'utiliser des algorithmes de hachage lents tels que Bcrypt ou Blowfish qui ont été créés pour ralentir les techniques de force brute car vous pouvez définir le nombre d'itérations. De plus, il y a un sel automatique qui est ajouté au mot de passe.
Nous avons trouvé 43661889 hashs depuis 2015, avec un crack rate global de 58.45%.