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

260

Quelqu'un m'a dit qu'il avait vu des systèmes logiciels qui:

  1. récupérer les mots de passe chiffrés MD5 à 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 le propre algorithme du système.

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

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

John Bubriski
la source
7
Le retour du MD5 donnerait également plusieurs mots de passe.
Carles Company, le
231
MD5 est un algorithme de résumé. Considérez-le comme la conversion d'une vache en steak. Essayez maintenant d'inverser cela.
Escargot mécanique
5
@Arst d'après ce que je comprends, oui, mais seulement si vous en aviez BEAUCOUP. Et même si vous l'avez fait, vous ne pourriez pas faire marche arrière, car l'algorithme perd délibérément des informations.
Jordan
8
@mechanicalsnail étant donné cette analogie, on pourrait faire un clone parfait complet à partir de l'ADN sur le steak. :))
Trimikha Valentius
8
@TrimikhaValentius MD5 est un algorithme digestif. Pensez-y comme manger du steak> digestion> sortie. Essayez maintenant d'inverser cela.
user4157124

Réponses:

424

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

Pensez-y: un MD5 a toujours une longueur de 128 bits. Cela signifie qu'il existe 2 128 hachages MD5 possibles. C'est un nombre raisonnablement élevé, 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, ou 16 maigres octets). Il existe donc en fait un nombre infini de possibilités pour les données qui hacheraient à la même valeur. Ce qui rend les hachages intéressants, c'est qu'il est incroyablement difficile de trouver deux données qui ont la même valeur, et les chances qu'elles se produisent 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 qu'elle est unidirectionnelle) serait de prendre tous les bits d'une donnée et de la traiter comme un grand nombre. Ensuite, effectuez une division entière en utilisant un grand nombre (probablement premier) n et prenez le reste (voir: Module ). Vous vous retrouverez avec un certain nombre entre 0 et n . Si vous deviez effectuer à nouveau le même calcul (à tout moment, sur n'importe quel ordinateur, n'importe où), en utilisant exactement la même chaîne, il obtiendra la même valeur. Et pourtant, il n'y a aucun moyen de savoir quelle était la valeur d'origine, car il existe un nombre infini de nombres qui ont ce reste exact, lorsqu'ils sont divisés par n .

Cela dit, MD5 s'est avéré présenter certaines faiblesses, de sorte qu'avec certaines mathématiques complexes, il peut être possible de trouver une collision sans essayer 2 128 chaînes d'entrée possibles. Et le fait que la plupart des mots de passe sont courts, et que les gens utilisent souvent des valeurs communes (comme "mot de passe" ou "secret") signifie que dans certains cas, vous pouvez faire une bonne estimation du mot de passe de quelqu'un en recherchant le hash ou en utilisant un arc-en - ciel. table . C'est une des raisons pour lesquelles vous devez toujours " saler " les mots de passe hachés, afin que deux valeurs identiques, lorsqu'elles sont hachées, ne hachent pas à la même valeur.

Une fois qu'un élément de données a été exécuté via une fonction de hachage, il n'y a plus de retour possible.

Adam Batkin
la source
22
cependant, il y a plus de collisions qu'on ne le pensait à l'origine dans l'espace de hachage MD5. Il n'est plus considéré comme optimal comme le meilleur hachage pour les mots de passe.
Cheeso
12
Étant donné que la plupart des mots de passe sont plus courts que le hachage MD5, il n'y a généralement qu'un seul mot de passe pour chaque hachage. (Et en trouver une, même si ce n'est pas l'original, suffit pour accéder au compte.) Le point d'être une fonction unidirectionnelle n'est pas qu'il existe plusieurs préimages différentes, donc nous ne pouvons pas savoir laquelle était l'original , mais il est vraiment difficile de trouver une seule valeur d'origine .
Paŭlo Ebermann
2
@Nick: En fait, RFC1321 dit explicitement: "L'algorithme prend en entrée un message de longueur arbitraire"
Adam Batkin
6
@Olathe - Je ne suis pas sûr d'être d'accord. Étant donné un hachage, il est généralement impossible de déterminer (avec une certitude à 100%) l'entrée d'origine. Il existe (généralement) un nombre infini d'entrées qui produisent toutes les sorties possibles (hachées). J'ai dit généralement parce que, si vous savez (par exemple) que vous recherchez une chaîne de caractères ASCII, et c'est moins que, disons, 12 octets, il est probable qu'il n'y ait qu'une seule entrée qui produit une sortie donnée. Mais il y aura toujours des collisions (infinies), et à moins que vous n'ayez des contraintes externes (comme dans mon exemple), vous ne saurez jamais ce qui est juste
Adam Batkin
2
@Adam Batkin, vous avez raison, mais je ne veux pas dire 100% de certitude. La rupture du chiffrement ne peut pas être effectuée avec une certitude à 100%. L'expéditeur aurait pu signifier du charabia aléatoire plutôt que du texte en clair en anglais en utilisant la même clé qui déchiffre les autres textes en anglais, mais la probabilité de l'anglais est très proche de 100%. De même, lorsque vous choisissez entre un mot de passe de poème japonais UTF-8 long et des chaînes de charabia, la probabilité du poème est proche de 100%. Cela peut être fait en utilisant des probabilités après coup plutôt que des contraintes pré-choisies. Cela ne peut évidemment pas se faire en général, mais c'est quand même très utile.
Olathe
154

Vous ne pouvez pas - en théorie. L'intérêt d'un hachage est que c'est à sens unique. Cela signifie que si quelqu'un parvient à obtenir la liste des hachages, il ne peut 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 ...) toute personne ayant accès à la base de données du site A ne pourra pas utiliser le mot de passe de l'utilisateur sur 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 qui produisent le même hachage. Pour un bon hachage, il serait impossible de les trouver au-delà d'une longueur maximale assez triviale, mais cela signifie qu'il n'y a aucune garantie que si vous trouvez un mot de passe qui a le hachage cible, c'est certainement le mot de passe d'origine. Il est astronomiquement peu probable que vous voyiez deux mots de passe ASCII uniquement de longueur raisonnable qui ont le même hachage MD5, mais ce n'est pas impossible.

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

  • C'est rapide, ce qui signifie que si vous avez un hachage «cible», il est bon marché d'essayer de nombreux mots de passe et de voir si vous pouvez en trouver un qui hache cette cible. Le salage n'aide pas dans ce scénario, mais il est plus coûteux d'essayer de trouver un mot de passe correspondant à l'un des multiples hachages en utilisant différents sels.
  • Je crois qu'il a connu des failles qui facilitent la recherche de collisions, bien que trouver des collisions dans du texte imprimable (plutôt que 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 pas lancer 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é est une entreprise délicate.

Jon Skeet
la source
2
Oui, il existe d'autres méthodes, mais vous devez comprendre ce que Jon a dit ci-dessus - «vous ne devriez pas leur envoyer leur mot de passe par e-mail - ce sont des informations sensibles qui pourraient rester sensibles. - au niveau le plus bas, les e-mails peuvent être interceptés et des informations sensibles peuvent être récupérées. Un mot de passe doit rester aussi sécurisé que possible - généralement en le conservant comme hachage uniquement dans une base de données.
Daniel May
3
Et aussi le fait que si le mot de passe peut être inversé, cela signifie que toute personne ayant accès à votre base de données peut accéder aux mots de passe des utilisateurs. Pas une bonne idée. Les mots de passe à sens unique devraient être la norme; ne conservez le vrai mot de passe (même crypté) que si vous en avez absolument besoin (par exemple pour vous authentifier avec un autre système qui n'a rien basé sur des jetons).
Jon Skeet
1
J'ai vu des mesures anti-spam où le serveur Web du récepteur refuse un courrier entrant juste pour attendre que le serveur de messagerie de l'expéditeur réessaye (les spambots n'essaient généralement qu'une seule fois). Cela pourrait facilement dépasser votre délai de 10 minutes.
sisve
1
@ravisoni: c'est trouver une valeur qui a le même hachage, probablement via la force brute ou des tables de recherche. Il n'y a aucune garantie qu'il s'agit de la valeur en texte brut d'origine.
Jon Skeet
5
@ravisoni: Que voulez-vous dire par "juste" ici? Si le mot de passe est inconnu, vous ne pouvez pas savoir si celui révélé est l'original ou non. Mais le fait est que les hachages à sens unique comme MD5, par définition, perdent des informations. Le fait que des sites comme celui-ci puissent trouver un mot de passe correspondant est juste une bonne preuve que MD5 est un mauvais algorithme à utiliser pour des raisons de sécurité.
Jon Skeet
52

Techniquement, c'est «possible» , mais dans des conditions très strictes ( tables arc-en-ciel , forçage brut 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 ce soit

  • Viable
    ou
  • Sécurise

Vous ne voulez pas «inverser» un hachage MD5 . En utilisant les méthodes décrites ci-dessous, vous n'en aurez jamais besoin. `` Inverser '' MD5 est en fait considéré comme malveillant - quelques sites Web offrent la possibilité de `` casser '' et de forcer les hachages MD5 - mais ce ne sont que des bases de données massives contenant des mots de dictionnaire, des mots de passe précédemment soumis et d'autres mots. Il y a très peu de chances que le hachage 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 le hachage MD5 devraient fonctionner est la suivante:

Lors de l'inscription: l'
utilisateur crée un mot de passe -> Le mot de passe est haché à l'aide de MD5 -> Hash stocké dans la base de données

Pendant la connexion: L'
utilisateur entre le nom d'utilisateur et le 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 nécessaire:

2 options:

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

ou

  • L'utilisateur reçoit un lien pour changer son mot de passe (avec 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
Daniel May
la source
1
J'ai quelques piqûres. Les tables arc-en-ciel ne sont pas un forçage brutal. Il existe en fait des programmes et des sites qui utilisent des mots de passe de force brute (très simples) de quelques caractères (généralement, ils bouclent en quelques heures ou jours, et vous pouvez remplir un hachage et espérer qu'il apparaisse dans la boucle). Et malheureusement, étant donné le manque de qualité de nombreux mots de passe, la chance que l'on apparaisse n'est pas "une très petite chance".
Maarten Bodewes
32

Pas directement. En raison du principe du pigeonhole , il existe (probablement) plus d'une valeur qui est hachée sur 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 la recherche d' un tel hachage inversé (cependant, il y a eu des attaques qui produisent des collisions - c'est-à-dire, produisent deux valeurs qui hachent vers le même résultat, mais vous ne pouvez pas contrôler ce que la valeur MD5 résultante va être).

Cependant, si vous limitez l'espace de recherche à, par exemple, des mots de passe courants de longueur inférieure à N, vous risquez de ne plus avoir la propriété irréversibilité (car le nombre de sorties MD5 est beaucoup plus élevé que le nombre de chaînes dans le domaine d'intérêt). Ensuite, vous pouvez utiliser une table arc-en-ciel ou similaire pour inverser les hachages.

bdonlan
la source
1
J'ajouterais que la recherche d'une autre valeur hachée sur la même sortie s'appelle une "collision". Il s'agit de la méthode la plus courante pour briser les systèmes hachés MD5.
Nicole
5
@Renesis, la recherche de données hachées à une valeur précédemment connue s'appelle une "préimage", en fait, et c'est beaucoup, beaucoup plus difficile qu'une simple collision. Aucune attaque de pré-image n'a encore été démontrée contre MD5, mais des attaques par collision ont été utilisées.
bdonlan
Le but des fonctions de hachage (lorsqu'elles sont utilisées pour le stockage de mots de passe) n'est pas qu'il existe de nombreux mots de passe possibles qui donnent le même hachage (il y en a, mais la plupart d'entre eux sont plus longs que le hachage lui-même), mais qu'il est difficile à trouver même l'un d'eux (ce qui serait suffisant pour accéder au système). Et oui, à cause des tables arc-en-ciel, vous n'utilisez pas de hachage non salé. Et en raison du petit espace de mot de passe, vous utiliserez un hachage lent (comme bcrypt ou scrypt) au lieu d'un rapide (comme MD5 / SHA - * / ....)
Paŭlo Ebermann
1
Pour être technique, vous ne pouvez pas exécuter MD5 avec certitude, car le matériel peut avoir mal fonctionné. De la même manière, vous ne pouvez pas être certain que le mot de passe était passwordplutôt que toutes les autres entrées infinies qui produisent le même hachage mais qui semblent toutes assez aléatoires, mais vous pouvez être assez proche.
Olathe
Le principe du pigeonhole s'applique bien sûr, mais il est toujours impossible sur le plan informatique de trouver une deuxième entrée qui hache à une certaine valeur, par exemple un hachage sur un mot de passe normal. Si vous trouvez un X haché sur un H (X) donné, vous pouvez être certain que X est la bonne entrée. Cela rend toute la première section de cette réponse et la plupart du reste incorrecte.
Maarten Bodewes
13

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

La façon dont cela est souvent géré est une «réinitialisation» du mot de passe. Autrement dit, vous leur donnez un nouveau mot de passe (aléatoire) et vous les envoyez dans un e-mail.

Matthew Groves
la source
5
Si le hachage n'était pas salé, vous seriez surpris de voir combien de fois il suffit d'une recherche google pour la valeur hachée ...
Michael Borgwardt
1
Pas vraiment pratique pour un système de récupération de mot de passe, même non salé :)
Matthew Groves
12

Vous ne pouvez pas rétablir un mot de passe md5. (Dans n'importe quelle langue)

Mais tu peux:

donner à l'utilisateur un nouveau.

vérifiez une table arc-en-ciel pour peut-être récupérer l'ancienne.

Nettogrof
la source
1
Nix l'idée de la table arc-en-ciel. Si vous salez - et vous devriez l'être - alors cela ne fonctionnerait pas, de toute façon.
Steven Sudit
1
@StevenSudit S'ils utilisent toujours MD5 pour hacher des mots de passe au lieu d'utiliser un hachage de mot de passe fort, vous ne pouvez pas supposer qu'ils utilisent un sel. Peut-être qu'ils le font, probablement pas.
Maarten Bodewes
10

Non, il devait être confus au sujet des dictionnaires MD5.

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

Robert Greiner
la source
8

Déchiffrement (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 une table arc-en-ciel . C'est assez faisable si vos mots de passe sont hachés sans sel.

Sinan Taifour
la source
7

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

Vous devez ajouter une fonction de changement de mot de passe, où l'utilisateur donne un autre mot de passe, calcule le hachage et le stocke comme nouveau mot de passe.

Svetlozar Angelov
la source
7

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

Une chose que vous devriez pouvoir faire est de leur définir manuellement un mot de passe temporaire et de les envoyer.

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

Bill le lézard
la source
6

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

Cependant, pour être complet, il existe des tables arc-en-ciel sur lesquelles vous pouvez rechercher des correspondances possibles. Il n'y a aucune garantie que la réponse dans le tableau arc-en-ciel sera le mot de passe d'origine choisi par votre utilisateur, ce qui les perturberait grandement.

De plus, cela ne fonctionnera pas pour les hachages salés. Le salage est recommandé par de nombreux experts en sécurité.

Dinah
la source
Incorrect . Si une correspondance est trouvée, il est certain que ce sera le mot de passe d'origine. Si ce n'était pas le cas, il serait possible de générer des collisions étant donné tout H (X) où X est un message sans structure prédéfinie déterminée par l'adversaire. Il est impossible de calculer une telle collision pour une fonction de hachage sécurisée cryptographiquement, même s'il s'agit d'une fonction de hachage brisée telle que MD5.
Maarten Bodewes,
@MaartenBodewes: "Si une correspondance est trouvée, il est certain que ce sera le mot de passe d'origine." Je ne vois pas comment c'est le cas, si nous supposons une longueur illimitée de mots de passe. Je dirais qu'il est fort probable qu'il s'agisse du mot de passe d'origine, mais ce n'est pas obligatoire . Le fait qu'il y ait plus de mots de passe possibles que de hachages MD5 signifie qu'il doit être possible qu'il y ait deux mots de passe avec le même hachage. Ce n'est pas parce qu'il est impossible sur le plan informatique de trouver de telles collisions qu'elles n'existent pas. Ou vous ai-je mal compris?
Jon Skeet
@JonSkeet S'il est impossible sur le plan informatique de trouver une collision exprès, alors en trouver une par hasard est tout aussi improbable ou pire. En raison de l'espace de sortie limité de MD5 et du problème d'anniversaire, le risque de collision est d'environ 1 sur 2 ^ 64 (c'est-à-dire environ la moitié de l'espace de sortie) - et c'est après avoir correspondu à environ 2 ^ 64 hachages. Et cela ne considère même pas que le message doit probablement être petit et avoir un format spécifique pour être considéré comme un mot de passe. La plupart des mots de passe ont une entropie considérablement inférieure à 2 ^ 64 bits.
Maarten Bodewes
1
@MaartenBodewes: Mais il y a une grande différence entre "astronomiquement improbable" et "impossible". Votre déclaration selon laquelle il est certain que c'est le bon mot de passe est trop forte, OMI. Cela suggère une certitude mathématique qui n'est pas présente.
Jon Skeet
Vous pouvez également deviner une clé AES 2 ^ 128 bits en une seule fois. C'est "juste" extrêmement improbable. La cryptographie repose sur ce genre de cotes. À toutes fins pratiques, si vous trouvez un message d'entrée / mot de passe, ce sera celui que vous cherchiez. Qu'il soit théoriquement possible de trouver un autre message d'entrée est bien, mais pour cette question sur StackOverflow, il n'est pas nécessaire de le considérer. Et les tables arc-en-ciel ne sont remplies que de mots de passe possibles. Ils ne contiendront pas suffisamment de données pour qu'il y ait même une chance de collision (ils écraseraient sans le savoir la cartographie ou deviendraient célèbres).
Maarten Bodewes
4

Il n'y a aucun moyen de "rétablir" 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 doit pas être réversible et doit permettre un calcul rapide de la valeur de hachage. Ainsi, la seule façon de trouver une chaîne d'entrée qui donne 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ûre. Si un attaquant est en mesure d'accéder à votre base de données avec tous les mots de passe utilisateur à l'intérieur, vous perdez en tout 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 pour l'attaquant.

Le stockage des valeurs de hachage n'est également pas un problème de performances car le calcul de la valeur de hachage est relativement rapide. Ainsi, la plupart des systèmes calculent la valeur de hachage du mot de passe saisi par l'utilisateur (ce qui est rapide), puis le compare à la valeur de hachage stockée dans leur base de données utilisateur.

Kage
la source
Il n'y a rien de mal à cette réponse, sauf que la vitesse de la fonction de hachage est très problématique car la plupart des mots de passe ne sont pas suffisamment sécurisés et permettent à un adversaire d'effectuer une attaque par dictionnaire. Pour cette raison, des fonctions de hachage de mot de passe lentes sont utilisées au lieu de fonctions de hachage sécurisées cryptographiquement rapidement.
Maarten Bodewes
3

MD5 est considéré comme cassé, 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 hachent vers le même hachage.

Vous ne pouvez pas détacher un hachage MD5.

Ned Batchelder
la source
3
De par leur conception, tous les hachages de même longueur souffrent de collisions. C'est inévitable lors de la restriction de données de longueur variable. MD5 est considéré comme obsolète pour son taux de collisions, pas pour le fait de collision.
Jonathan Lonowski
MD5 est considéré comme cassé en raison de la possibilité avérée de construire des entrées qui entrent en collision.
Ned Batchelder
3

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 haché plus d'une fois

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

davitz38
la source
Les tables arc-en-ciel - et non les attaques par dictionnaire - sont inutiles si un sel est utilisé. Le hachage plus d'une fois - sans sel - permet toujours des tables arc-en-ciel, bien que trouver une préexistante en ligne soit certainement moins probable.
Maarten Bodewes
2

La seule chose qui peut fonctionner est (si nous mentionnons que les mots de passe sont juste hachés, sans ajouter aucune sorte de sel pour empêcher les attaques de rejeu, si c'est le cas, vous devez connaître le sel) en passant, 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 numéro (dans le dictionnaire), l'autre est un hachage du mot, et compare les hachages si des correspondances vous l'obtiennent ...

c'est le seul moyen, sans entrer dans la cryptanalyse.

berkay
la source
2

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 recrypter un mot de passe MD5 dans un autre algorithme, mais pas tous en une seule fois.

Ce que vous faites, c'est 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 non hachée du mot de passe qui, selon vous, correspond au hachage MD5 que vous avez. Vous pouvez ensuite convertir ce mot de passe non haché en votre nouvel algorithme de hachage.

Évidemment, 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, eh bien j'espère que quelqu'un le trouvera utile)

user3710044
la source
Merci pour la réponse. Cependant, je vais vous "1" vous :) Je ne me souviens pas si je l'ai fait, mais en théorie, cela devrait fonctionner. Au lieu d'attendre que chaque utilisateur se connecte pour que nous puissions rechiffrer son mot de passe, vous pouvez simplement crypter la version hachée de son mot de passe. Ainsi, chaque mot de passe sera haché MD5, puis crypté. Il suffit de mettre à jour la vérification du mot de passe pour faire de même et les données utilisateur doivent être en sécurité sans nécessiter d'intervention de l'utilisateur.
John Bubriski
Une mise en garde supplémentaire à mon commentaire ci-dessus. Je ne suis pas un expert du cryptage, donc je ne suis pas sûr qu'il y ait d'autres implications de sécurité de cela. Par exemple, le chiffrement de mots de passe faibles qui sont faiblement hachés avant d'être chiffrés pourrait potentiellement compromettre la sécurité du chiffrement (peut-être utiliser un autre sel aussi?). En outre, vous pouvez avoir des sauvegardes flottantes avec ces mots de passe hachés MD5. Il est probablement préférable de procéder à une invalidation complète de tous les mots de passe existants lors de ce type de mise à niveau.
John Bubriski
Les cryptographes s'inquiètent du double cryptage, mais je pense qu'ils n'ont trouvé que des cas triviaux où c'est un problème. Mais je ne pense pas que ce soit utile dans ce cas car MD5 est toujours sécurisé pour les mots de passe (pas trop longs, texte). Pourtant, le double hachage pourrait être utile si le développeur précédent oubliait d'ajouter du sel, sinon, je ne peux pas penser à un cas où vous n'auriez pas à dire à tout le monde que les mots de passe devraient être considérés comme pwned. Heureusement, vos sauvegardes ne se perdent pas et sont quand même cryptées.
user3710044
1

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

Vilx-
la source
j'ai vu ce site Web qui renverse le md5 dans le texte original: md5.gromweb.com . Comment est-ce possible alors?
samach
2
@ samach321 - Facile: ils ont une base de données de chaînes hachées. Tout ce que vous entrez dans leur boîte "Convertir une chaîne en hachage MD5" est ajouté à la base de données. Essayez d'obtenir un hachage MD5 d'une autre source et entrez-le. À moins que ce soit quelque chose qui se trouve dans leur base de données, vous n'obtiendrez pas de résultat.
Vilx
1

MD5 a ses faiblesses (voir Wikipedia ), il y a donc des projets qui essaient 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 dire un mot de passe qui fonctionne. Mais je pense: envoyez simplement un nouveau mot de passe par mail au cas où vous l'auriez oublié.

dz.
la source
Le fait que MD5 soit cassé (pour des utilisations spécifiques mais importantes de la fonction) n'a absolument rien à voir avec les tables arc-en-ciel (c'est ce à quoi vous faites allusion lorsque vous mentionnez le précalcul des hachages).
Maarten Bodewes
1

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

Essayez en ligne:

MD5 Decrypt

md5online

md5decrypter

Girid Patidar
la source
Oui, mais cela est déjà couvert par la question comme dans la phrase "je sais qu'il y a des dictionnaires". Le simple fait de signaler les dictionnaires ne compte donc pas comme réponse.
Maarten Bodewes
1

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

  1. Bruteforcing : Tous les algorithmes de sécurité informatique souffrent de bruteforcing . Sur la base de cette idée, le GPU d'aujourd'hui utilise l'idée de la programmation parallèle à l'aide de laquelle il peut récupérer le texte brut en le renforçant brutalement à l'aide de n'importe quel processeur graphique. Cet outil hashcat fait ce travail. La dernière fois que j'ai vérifié la version cuda de celui-ci, j'ai réussi à forcer un caractère de 7 lettres en six minutes.
  2. Recherche sur Internet : copiez et collez simplement le hachage sur Google et voyez 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.
vikkyhacks
la source
2
Les attaques par dictionnaire sont un autre moyen, ou une comparaison avec d'autres bases de données dont vous connaissez les mots de passe d'entrée.
Maarten Bodewes,
1

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 Xest 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 Fqui prend H(X)en entrée. Quand Xest donné au système alors H(X)et Fpeut 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 Xpeut ê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.

Maarten Bodewes
la source
0

MD5 est une fonction de hachage cryptographique (unidirectionnelle), il n'y a donc aucun moyen direct de la décoder. L'objectif 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, où vous devinez ce qui a été haché, puis hachez-le avec la même fonction et voyez s'il correspond. À moins que les données hachées ne soient très faciles à deviner, cela peut toutefois prendre beaucoup de temps.

Ajanyan Pradeep
la source
-1

Il n'est pas encore possible de mettre un hachage d'un mot de passe dans un algorithme et de récupérer le mot de passe en texte brut car le hachage est une chose à sens unique. Mais ce que les gens ont fait, c'est de générer des hachages et de les stocker dans une grande table afin que lorsque vous entrez un hachage particulier, il vérifie dans la table le mot de passe correspondant au hachage et vous le renvoie. Un exemple d'un site qui le fait est http://www.md5online.org/ . Le système de stockage de mot de passe moderne compense cela en utilisant un algorithme de salage tel que lorsque vous entrez le même mot de passe dans une boîte de mot de passe lors de l'enregistrement, différents hachages sont générés.

oziomajnr
la source
-1

Non, vous ne pouvez pas décrypter / inverser le md5 car il s'agit d'une fonction de hachage unidirectionnelle jusqu'à ce que vous ne trouviez pas de vulnérabilités étendues dans le MD5. Une autre façon est qu'il existe un certain nombre de sites Web ayant une grande quantité de base de données de mots de passe, vous pouvez donc essayer en ligne de décoder votre chaîne de hachage MD5 ou SHA1. J'ai essayé un site Web comme http://www.mycodemyway.com/encrypt-and-decrypt/md5 et son bon fonctionnement pour moi, mais cela dépend totalement de votre hachage si ce hachage est stocké dans cette base de données, vous pouvez obtenir la chaîne réelle .

Rafi Ahmad
la source
1
Non, MD5 n'est pas un cryptage, pas même un cryptage unidirectionnel (ce qui n'a pas de sens en premier lieu).
Maarten Bodewes du
@MaartenBodewes C'est mon erreur ce n'est pas une fonction de cryptage, c'est une fonction de hachage Merci.
Rafi Ahmad