Non, il n'est pas possible d'inverser une fonction de hachage telle que MD5: étant donné la valeur de hachage de sortie, il est impossible de trouver le message d'entrée à moins que suffisamment d'informations sur le message d'entrée ne soient connues.
Le déchiffrement n'est pas une fonction définie pour une fonction de hachage; le chiffrement et le déchiffrement sont des fonctions d'un chiffrement tel que AES en mode CBC; les fonctions de hachage ne chiffrent ni ne déchiffrent . Les fonctions de hachage sont utilisées pour digérer un message d'entrée. Comme son nom l'indique, il n'y a pas d'algorithme inverse possible par conception .
MD5 a été conçu comme une fonction de hachage unidirectionnelle sécurisée cryptographiquement . Il est désormais facile de générer des collisions pour MD5 - même si une grande partie du message d'entrée est prédéterminée. Donc, MD5 est officiellement cassé et MD5 ne devrait plus être considéré comme un hachage cryptographiquement sécurisé. Il est cependant toujours impossible de trouver un message d'entrée qui mène à une valeur de hachage: trouver X lorsque seul H (X) est connu (et X n'a pas de structure précalculée avec au moins un bloc de 128 octets de données précalculées) . Il n'y a aucune attaque pré-image connue contre MD5.
Il est généralement également possible de deviner les mots de passe à l'aide d'attaques par force brute ou par dictionnaire (augmentées), de comparer des bases de données ou d'essayer de trouver des hachages de mots de passe dans des tables dites arc-en-ciel. Si une correspondance est trouvée, il est certain sur le plan informatique que l'entrée a été trouvée. Les fonctions de hachage sont également sécurisées contre les attaques par collision: trouver X'
ce qui est H(X') = H(X)
donné H(X)
. Donc, si un X
est trouvé, il est certain sur le plan informatique qu'il s'agissait bien du message d'entrée. Sinon, vous auriez effectué une attaque par collision après tout. Les tables arc-en-ciel peuvent être utilisées pour accélérer les attaques et il existe des ressources Internet spécialisées qui vous aideront à trouver un mot de passe en fonction d'un hachage spécifique.
Il est bien sûr possible de réutiliser la valeur de hachageH(X)
pour vérifier les mots de passe générés sur d'autres systèmes. La seule chose que le système récepteur doit faire est de stocker le résultat d'une fonction déterministe F
qui prend H(X)
en entrée. Quand X
est donné au système alors H(X)
et F
peut donc être recalculé et les résultats peuvent être comparés. En d'autres termes, il n'est pas nécessaire de déchiffrer la valeur de hachage pour simplement vérifier qu'un mot de passe est correct, et vous pouvez toujours stocker le hachage sous une autre valeur.
Au lieu de MD5, il est important d'utiliser à la place un hachage de mot de passe ou PBKDF (fonction de dérivation de clé basée sur un mot de passe). Une telle fonction spécifie comment utiliser un sel avec un hachage. De cette façon, des hachages identiques ne seront pas générés pour des mots de passe identiques (provenant d'autres utilisateurs ou d'autres bases de données). Les hachages de mot de passe pour cette raison ne permettent pas non plus d'utiliser des tables arc-en-ciel tant que le sel est suffisamment grand et correctement randomisé.
Les hachages de mot de passe contiennent également un facteur de travail (parfois configuré à l'aide d'un nombre d'itérations ) qui peut ralentir considérablement les attaques qui tentent de trouver le mot de passe en fonction de la valeur de sel et de hachage. Ceci est important car la base de données contenant les sels et les valeurs de hachage pourrait être volée. Enfin, le hachage de mot de passe peut également être dur en mémoire, de sorte qu'une quantité importante de mémoire est requise pour calculer le hachage. Cela rend impossible l'utilisation de matériel spécial (GPU, ASIC, FPGA, etc.) pour permettre à un attaquant d'accélérer la recherche. D'autres entrées ou options de configuration comme un piment ou la quantité de parallélisation peuvent également être disponibles pour un hachage de mot de passe.
Il permettra cependant à quiconque de vérifier un mot de passe donné H(X)
même s'il H(X)
s'agit d'un hachage de mot de passe. Les hachages de mot de passe sont toujours déterministes, donc si quelqu'un a connaissance de toutes les entrées et de l'algorithme de hachage lui-même, il X
peut être utilisé pour calculer H(X)
et - encore une fois - les résultats peuvent être comparés.
Les hachages de mot de passe couramment utilisés sont bcrypt , scrypt et PBKDF2 . Il existe également Argon2 sous diverses formes qui est le gagnant du concours de hachage de mot de passe raisonnablement récent. Ici sur CrackStation est un bon article de blog sur la façon de bien faire la sécurité des mots de passe.
Il est possible de rendre impossible pour les adversaires d'effectuer le calcul de hachage vérifier qu'un mot de passe est correct. Pour cela, un poivre peut être utilisé comme entrée pour le hachage du mot de passe. Alternativement, la valeur de hachage peut bien sûr être chiffrée à l'aide d'un chiffrement tel que AES et d'un mode de fonctionnement tel que CBC ou GCM. Cela nécessite cependant le stockage d'un secret / clé indépendamment et avec des exigences d'accès plus élevées que le hachage de mot de passe.