web-dev-qa-db-fra.com

Est-il possible de décrypter les hachages MD5?

Quelqu'un m'a dit qu'il a vu des logiciels qui:

  1. récupérer des mots de passe MD5 cryptés à partir d'autres systèmes;
  2. décrypter les mots de passe cryptés et
  3. stocker les mots de passe dans la base de données du système en utilisant son propre algorithme.

Est-ce possible? Je pensais qu'il était impossible/impossible de décrypter les hachages MD5.

Je sais qu'il existe des dictionnaires MD5, mais existe-t-il un algorithme de déchiffrement?

244
John Bubriski

Non, MD5 n'est pas un cryptage (bien qu'il puisse être utilisé dans certains algorithmes de cryptage), c'est un sens fonction de hachage . Une grande partie des données d'origine est en réalité "perdue" dans le cadre de la transformation.

Pensez-y: un MD5 a toujours une longueur de 128 bits. Cela signifie qu'il y a 2128 hash MD5 possibles. C'est un nombre assez important, et pourtant, il est très certainement fini. Et pourtant, il existe un nombre infini d'entrées possibles pour une fonction de hachage donnée (et la plupart d'entre elles contiennent plus de 128 bits, soit un maigre 16 octets). Il existe donc en réalité un nombre infini de possibilités pour les données qui seraient hachées à la même valeur. Ce qui rend les hachages intéressants est qu’il est extrêmement difficile de trouver deux données qui ont la même valeur et que les chances que cela se produise par accident sont presque nulles.

Un exemple simple pour une fonction de hachage (très peu sûre) (et cela illustre l'idée générale que ce soit unidirectionnel) serait de prendre tous les éléments d'une donnée et de les traiter comme un grand nombre. Ensuite, effectuez une division entière en utilisant un nombre grand (probablement premier) n et prenez le reste (voir: Module ). Vous serez laissé avec un nombre compris entre 0 et n . Si vous deviez effectuer à nouveau le même calcul (à tout moment, sur n'importe quel ordinateur, où que vous soyez), en utilisant exactement la même chaîne, la même valeur serait obtenue. Et pourtant, il n’existe aucun moyen de savoir quelle était la valeur initiale, puisqu’il existe un nombre infini de nombres qui ont exactement le reste, divisé par n .

Cela dit, on a constaté que le MD5 présentait certaines faiblesses, de sorte qu'avec certaines mathématiques complexes, il serait possible de trouver une collision sans avoir à essayer 2128 chaînes d'entrée possibles. Et le fait que la plupart des mots de passe soient courts et que les utilisateurs utilisent souvent des valeurs communes (telles que "mot de passe" ou "secret") signifie que, dans certains cas, vous pouvez deviner raisonnablement le mot de passe de quelqu'un en recherchant le hachage ou en utilisant un - table Rainbow . C'est une des raisons pour lesquelles vous devriez toujours " salt " mots de passe hachés, afin que deux valeurs identiques, lorsqu'elles sont hachées, ne soient pas hachées à la même valeur.

Une fois qu'une donnée a été exécutée via une fonction de hachage, il n'y a pas de retour en arrière.

399
Adam Batkin

Vous ne pouvez pas - en théorie. Le point essentiel d'un hash est que ce n'est que dans un sens. Cela signifie que si quelqu'un parvient à obtenir la liste des hachages, il ne pourra toujours pas obtenir votre mot de passe. De plus, cela signifie que même si quelqu'un utilise le même mot de passe sur plusieurs sites (oui, nous savons tous que nous ne devrions pas, mais ...), quiconque ayant accès à la base de données du site A ne pourra pas utiliser le mot de passe de l'utilisateur le site B.

Le fait que MD5 soit un hachage signifie également qu'il perd des informations. Pour tout hachage MD5 donné, si vous autorisez des mots de passe de longueur arbitraire, il peut y avoir plusieurs mots de passe produisant le même hachage. Pour un bon hash, il serait impossible de les trouver au-delà d'une longueur maximale assez triviale, mais cela signifie qu'il n'y a pas de garantie que si vous trouvez un mot de passe qui a le hash cible, c'est certainement le mot de passe original. Il est astronomiquement peu probable que vous voyiez deux mots de passe de longueur raisonnable uniquement ASCII ayant le même hachage MD5, mais ce n'est pas impossible.

MD5 est un mauvais hash à utiliser pour les mots de passe:

  • C'est rapide, ce qui signifie que si vous avez un hachage "cible", il est avantageux d'essayer de nombreux mots de passe et de voir si vous pouvez en trouver un qui se hache pour cette cible. Le salage n’aide en rien le scénario ça, mais il est plus coûteux d’essayer de trouver un mot de passe correspondant à l’un quelconque des multiples hachages utilisant différents sels.
  • Je pense qu’il présente des failles qui facilitent la recherche de collisions, bien que la recherche de collisions dans un texte imprimable (plutôt que dans des données binaires arbitraires) serait au moins plus difficile.

Je ne suis pas un expert en sécurité, je ne ferai donc pas de recommandation concrète au-delà de "Ne lancez pas votre propre système d'authentification." Trouvez-en un auprès d'un fournisseur réputé et utilisez-le. La conception et la mise en œuvre de systèmes de sécurité sont des activités délicates.

154
Jon Skeet

Techniquement, c'est 'possible' , mais sous des conditions très strictes (- Tables Rainbow , forçage brutal basé sur la très petite possibilité que le mot de passe d'un utilisateur se trouve dans cette base de données de hachage).

Mais cela ne signifie pas que c'est

  • Viable
    ou
  • Sécurise

Vous ne voulez pas "inverser" un hachage MD5 . En utilisant les méthodes décrites ci-dessous, vous n'aurez jamais besoin de . "Inverser" MD5 est en fait considéré comme malveillant - quelques sites Web offrent la possibilité de "déchiffrer" et de hachage brutal MD5 - mais ils ne sont que d'énormes bases de données contenant mots du dictionnaire, mots de passe précédemment soumis et d'autres mots. Il y a un très faible chance que le hash MD5 dont vous avez besoin soit inversé. Et si vous avez salé le hachage MD5 - cela ne fonctionnera pas non plus! :)


La façon dont les connexions avec hachage MD5 devrait fonctionner est la suivante:

Pendant l'enregistrement:
L'utilisateur crée un mot de passe -> Le mot de passe est haché à l'aide de MD5 -> Le hachage stocké dans la base de données

Pendant la connexion:
L'utilisateur entre son nom d'utilisateur et son mot de passe -> (nom d'utilisateur vérifié) Le mot de passe est haché à l'aide de MD5 -> Le hachage est comparé au hachage stocké dans la base de données

Lorsque 'Mot de passe perdu' est requis:

2 options:

  • L'utilisateur a envoyé un mot de passe aléatoire pour se connecter, puis un bug pour le modifier lors de la première connexion.

ou

  • Un lien est envoyé à l'utilisateur pour modifier son mot de passe (avec une vérification supplémentaire si vous avez une question de sécurité/etc.), puis le nouveau mot de passe est haché et remplacé par l'ancien mot de passe dans la base de données.
53
Daniel May

Pas directement. En raison du principe principe du casier , il existe (probablement) plus d'une valeur qui se hache pour une sortie MD5 donnée. En tant que tel, vous ne pouvez pas l'inverser avec certitude. De plus, MD5 est fait pour rendre difficile de trouver un tel hachage inversé (cependant, il y a eu des attaques qui produisent collisions - en d’autres termes, produisez deux valeurs qui aboutissent au même résultat, mais vous ne pouvez pas contrôler la valeur résultante de MD5).

Toutefois, si vous limitez l'espace de recherche aux mots de passe communs dont la longueur est inférieure à N, par exemple, vous risquez de ne plus avoir la propriété d'irréversibilité (car le nombre de sorties MD5 est beaucoup plus grand que le nombre de chaînes dans le domaine d'intérêt). Ensuite, vous pouvez utiliser un Rainbow table ou similaire pour inverser les hachages.

32
bdonlan

Pas possible, du moins pas dans un délai raisonnable.

La façon dont cela est souvent traité est un mot de passe "réinitialisé". C'est-à-dire que vous leur donnez un nouveau mot de passe (aléatoire) et que vous leur envoyez cela par courrier électronique.

13
Matthew Groves

Vous ne pouvez pas rétablir un mot de passe md5 (dans aucune langue)

Mais tu peux:

donner à l'utilisateur un nouveau.

vérifiez dans une table Rainbow pour peut-être récupérer l'ancien.

12
Nettogrof

Non, il doit avoir été confus sur les dictionnaires MD5.

Les hachages cryptographiques (MD5, etc ...) sont une manière et vous ne pouvez pas revenir au message d'origine avec seulement le résumé sauf si vous avez d'autres informations sur le message d'origine, etc. que vous ne devriez pas.

10
Robert Greiner

Décryptage (obtenir directement le texte brut de la valeur hachée, de manière algorithmique), non.

Il existe cependant des méthodes qui utilisent ce qu'on appelle un table Rainbow . C'est assez faisable si vos mots de passe sont hachés sans sel.

8
Sinan Taifour

MD5 est un algorithme de hachage, vous ne pouvez pas rétablir la valeur de hachage.

Vous devez ajouter "fonction de modification du mot de passe", où l'utilisateur donne un autre mot de passe, calcule le hachage et le stocke en tant que nouveau mot de passe.

7
Svetlozar Angelov

Il n'y a pas de moyen facile de le faire. C'est en quelque sorte le point de hacher le mot de passe en premier lieu. :)

Une chose que vous devriez pouvoir faire est de leur attribuer manuellement un mot de passe temporaire et de le leur envoyer.

J'hésite à le mentionner parce que c'est une mauvaise idée (et que son fonctionnement n'est pas garanti de toute façon), mais vous pouvez essayer de rechercher le hachage dans une table Rainbow comme milw0rm pour voir si vous pouvez récupérer l'ancien mot de passe. de cette façon.

7
Bill the Lizard

Voir toutes les autres réponses ici sur comment et pourquoi ce n'est pas réversible et pourquoi vous ne voudriez pas le faire de toute façon.

Pour être complet, il existe tables Rainbow sur lesquelles vous pouvez rechercher des correspondances possibles. Il n'y a aucune garantie que la réponse dans la table Rainbow sera le mot de passe d'origine choisi par votre utilisateur, ce qui les troublerait grandement.

En outre, cela ne fonctionnera pas pour les hashes salés. Salting est recommandé par de nombreux experts en sécurité.

6
Dinah

Il n'y a aucun moyen de "revenir" sur une fonction de hachage en termes de recherche de la fonction inverse pour elle. Comme mentionné précédemment, c'est tout l'intérêt d'avoir une fonction de hachage. Il ne devrait pas être réversible et devrait permettre un calcul rapide de la valeur de hachage. Ainsi, la seule façon de trouver une chaîne d'entrée donnant une valeur de hachage donnée est d'essayer toutes les combinaisons possibles. C'est ce qu'on appelle une attaque par force brute pour cette raison.

Essayer toutes les combinaisons possibles prend beaucoup de temps et c'est aussi la raison pour laquelle les valeurs de hachage sont utilisées pour stocker les mots de passe de manière relativement sécurisée. Si un attaquant est en mesure d'accéder à votre base de données avec tous les mots de passe de l'utilisateur, vous perdez dans tous les cas. Si vous avez des valeurs de hachage et (idéalement parlant) des mots de passe forts, il sera beaucoup plus difficile d'extraire les mots de passe des valeurs de hachage de l'attaquant.

Stocker les valeurs de hachage n'est également pas un problème de performance car le calcul de la valeur de hachage est relativement rapide. La plupart des systèmes calculent donc la valeur de hachage du mot de passe saisi par l'utilisateur (ce qui est rapide), puis le comparent à la valeur de hachage stockée dans leur base de données d'utilisateurs.

4
Kage

MD5 est considéré comme endommagé, non pas parce que vous pouvez récupérer le contenu d'origine du hachage, mais parce qu'avec le travail, vous pouvez créer deux messages qui ont le même hachage.

Vous ne pouvez pas annuler le hachage d'un hachage MD5.

3
Ned Batchelder

Oui, exactement ce que vous demandez est possible. Il n'est pas possible de "décrypter" un mot de passe MD5 sans aide, mais il est possible de rechiffrer un mot de passe MD5 dans un autre algorithme, mais pas en une fois.

Ce que vous faites est de faire en sorte que vos utilisateurs puissent se connecter à votre nouveau système en utilisant l'ancien mot de passe MD5. Au moment où ils se connectent, ils ont donné à votre programme de connexion une version nhashed du mot de passe que vous prouvez correspondre au hachage MD5 que vous avez. Vous pouvez ensuite convertir ce mot de passe unhashed en votre nouvel algorithme de hachage.

De toute évidence, il s’agit d’un processus étendu car vous devez attendre que vos utilisateurs vous disent quels sont les mots de passe, mais cela fonctionne.

(NB: sept ans plus tard, espérons que quelqu'un le trouvera utile)

2
user3710044

Vous pouvez trouver des outils en ligne qui utilisent un dictionnaire pour récupérer le message d'origine.

Dans certains cas, la méthode du dictionnaire peut simplement être inutile:

  • si le message est haché à l'aide d'un message SALT
  • si le message est hash plus d'une fois

Par exemple, voici un outil en ligne décrypteur MD5 .

2
davitz38

La seule chose qui puisse fonctionner est (si nous mentionnons que les mots de passe sont juste hachés, sans ajouter de sel pour empêcher les attaques par rejeu, si c'est le cas, vous devez connaître le sel), à propos, obtenez un outil d'attaque par dictionnaire , les fichiers de nombreux mots, nombres, etc. créent ensuite deux lignes, une ligne est un mot, un nombre (dans le dictionnaire), l’autre est un hachage du mot, et compare les hachages si les correspondances que vous obtenez ...

c'est la seule façon, sans entrer dans la cryptanalyse.

2
berkay

Non, cela ne peut pas être fait. Soit vous pouvez utiliser un dictionnaire, soit essayer de hacher différentes valeurs jusqu'à obtenir le hachage que vous recherchez. Mais cela ne peut pas être "décrypté".

1
Vilx-

MD5 a ses faiblesses (voir Wikipedia ), il existe donc certains projets qui tentent de précalculer les hachages. Wikipedia fait également allusion à certains de ces projets. Celui que je connais (et que je respecte) est ophrack. Vous ne pouvez pas dire à l'utilisateur son propre mot de passe, mais vous pourrez peut-être lui donner un mot de passe qui fonctionne. Mais je pense: envoyez simplement un nouveau mot de passe par courrier au cas où ils l'auraient oublié.

1
dz.

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 de connaître suffisamment d'informations sur le message d'entrée.

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 ​​telles que l'AES en mode CBC; Les fonctions de hachage ne font pas chiffrer ni déchiffrer. 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 inversé possible par conception.


MD5 a été conçu comme une fonction de hachage à sens unique à sécurité cryptographique . Il est maintenant 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 toutefois toujours impossible de trouver un message d’entrée conduisant à une valeur de hachage: recherchez X lorsque seul H(X) est connu (et que X n’a pas de structure pré-calculée avec au moins un 128 bloc d'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 en utilisant des attaques par force brute ou par dictionnaire (augmenté), de comparer des bases de données ou de rechercher des hachages de mots de passe dans des tables dites Rainbow. Si une correspondance est trouvée, il est certain que l'input a été trouvé. Les fonctions de hachage sont également sécurisées contre les attaques par collision: trouver X' de sorte que H(X') = H(X) soit donné H(X). Donc, si un X est trouvé, il est certain, du point de vue du calcul, qu'il s'agissait bien du message d'entrée. Sinon, vous auriez quand même effectué une attaque par collision. Les tables Rainbow peuvent être utilisées pour accélérer les attaques. Il existe des ressources Internet spécialisées qui vous aideront à trouver un mot de passe pour un hachage spécifique.

Il est bien sûr possible de réutiliser la valeur de hachage H(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. Lorsque X est attribué au système, alors H(X) et donc F peuvent être recalculés et les résultats comparés. En d'autres termes, il est non requis de déchiffrer la valeur de hachage simplement vérifier qu'un mot de passe est correct, et vous pouvez toujours stocker le hachage sous une valeur différente.


Au lieu de MD5, il est important d'utiliser 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. Ainsi, des hachages identiques ne seront pas générés pour des mots de passe identiques (provenant d'autres utilisateurs ou au sein d'autres bases de données). Les hachages de mots de passe pour cette raison ne permettent pas non plus l'utilisation de tables Rainbow tant que le sel est suffisamment gros et correctement randomisé.

Les hachages de mots de passe contiennent également un facteur de travail (parfois configuré à l'aide d'un nombre d'itérations) qui peut considérablement ralentir les attaques qui tentent de détecter le mot de passe a donné 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 du mot de passe peut également être dur en mémoire , de sorte qu'une quantité importante de mémoire est nécessaire 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 telles qu'un poivron ou la quantité de parallélisation peuvent également être disponibles pour un hachage de mot de passe.

Cependant, cela permettra toujours à quiconque de vérifier un mot de passe donné H(X) même si H(X) est un hash de mot de passe. Les hachages de mots de passe sont toujours déterministes. Ainsi, si tout le monde connaît toutes les entrées et que l'algorithme de hachage lui-même, alors X peut être utilisé pour calculer H(X) et, encore une fois, les résultats peuvent être comparés.

Les hachages de mots de passe couramment utilisés sont bcrypt , scrypt et PBKDF2 . Il existe également Argon2 sous différentes formes, qui est le gagnant du concours de hachage de mot de passe relativement récent. Here on CrackStation est un bon article de blog sur la sécurité des mots de passe.


Il est possible d'empêcher les adversaires d'effectuer le calcul de hachage et de vérifier qu'un mot de passe est correct. Pour cela, un poivron peut être utilisé comme entrée dans le hachage du mot de passe. En variante, 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 toutefois le stockage d'un secret/clé de manière indépendante et avec des exigences d'accès plus élevées que le hachage du mot de passe.

1
Maarten Bodewes

L'algorithme de hachage MD5 n'est pas réversible; le décodage MD5 n'est donc pas possible, mais certains sites Web ont un ensemble de correspondances de mot de passe en masse. Vous pouvez donc essayer en ligne pour le décodage du hachage MD5.

Essayez en ligne:

Décryptage MD5

md5online

md5decrypter

1
Girish Patidar

En théorie , il n'est pas possible de décrypter une valeur de hachage , mais vous disposez de techniques peu fiables pour récupérer le texte brut d'origine.

  1. Bruteforcing : Tous les algorithmes de sécurité informatique souffrent bruteforcing . Sur la base de cette idée, les GPU actuels utilisent l’idée de la programmation parallèle, qui permet de récupérer le texte brut en l’appliquant de manière massive à tout processeur graphique. Cet outil hashcat fait ce travail. La dernière fois que j’ai vérifié la version cuda , j’étais capable de forcer brutalement un caractère de 7 lettres de long en six minutes.
  2. Recherche sur Internet : il suffit de copier et coller le hachage sur Google pour voir si vous pouvez y trouver le texte en clair correspondant. Ce n'est pas une solution lorsque vous testez quelque chose, mais cela vaut vraiment la peine d'essayer. Certains sites Web conservent le hachage pour presque tous les mots du dictionnaire.
1
vikkyhacks

MD5 est une fonction de hachage cryptographique (unidirectionnelle). Il n’existe donc aucun moyen direct de le décoder. Le but d'une fonction de hachage cryptographique est que vous ne pouvez pas l'annuler.

Une chose que vous pouvez faire est une stratégie de force brute, dans laquelle vous devinez ce qui a été haché, puis le hachez avec la même fonction et voyez si cela correspond. À moins que les données hachées ne soient très faciles à deviner, cela risque toutefois de prendre beaucoup de temps.

0
Ajanyan Pradeep