273 votes

Est-il possible de déchiffrer des hachages md5 ?

Quelqu'un m’a dit qu’il a vu des systèmes logiciels qui accepteraient les mots de passe MD5 cryptée (au moyen de diverses intégrations avec d’autres systèmes), décrypter et les stocker dans la base de données des systèmes propres à l’aide de son propre algorithme.

Est-ce possible ? J’ai pensé que ce n’était pas possible (c’est possible) pour décrypter MD5 hachages.

Je sais qu’il sont des dictionnaires de MD5, mais existe-t-il un algorithme de décryptage réelle ?

443voto

Adam Batkin Points 20920

Pas de. MD5 n'est pas de chiffrement (bien qu'il puisse être utilisé dans le cadre de certains algorithmes de chiffrement), c'est une fonction de hachage. Une grande partie de l'origine des données est en fait "perdu" dans le cadre de la transformation.

Réfléchissez à ceci: Un MD5 est toujours 128 bits. Cela signifie qu'il y a 2128 possible de hachages MD5. C'est un assez grand nombre, et pourtant ce n'est vraiment fini. Et pourtant, il y a un nombre infini d'entrées possibles pour une fonction de hachage (et la plupart d'entre eux contiennent plus de 128 bits, soit un maigre 16 octets). Il y a donc effectivement un nombre infini de possibilités pour des données qui permettraient de hachage à la même valeur. La chose qui rend les hachages intéressant, c'est qu'il est incroyablement difficile de trouver deux morceaux de données de hachage à la même valeur, et les chances que cela se produise par hasard sont presque à 0.

Un exemple simple pour un (très fragile) fonction de hachage (ce qui illustre bien l'idée générale de one-way) serait de prendre tous les bits d'un morceau de données et la considérer comme un grand nombre. Ensuite, effectuer la division entière à l'aide de quelques grands (probablement le premier) sont au nombre de n et de prendre le reste (voir: Module). Vous serez à gauche avec un nombre entre 0 et n. Si vous étiez à effectuer le même calcul à nouveau (tout moment, sur n'importe quel ordinateur, n'importe où), en utilisant la même chaîne, il viendra avec la même valeur. Et pourtant, il n'y a aucun moyen de savoir ce que la valeur d'origine était, puisqu'il existe une infinité de nombres qui ont l'exacte reste, lorsqu'il est divisé par n.

Cela dit, MD5 a été trouvé pour avoir quelques faiblesses, tels que, avec certains des mathématiques complexes, il peut être possible de trouver une collision sans essayer d'2128 possible des chaînes d'entrée. Et le fait que la plupart des mots de passe sont courtes, et souvent, les gens utilisent des valeurs communes (comme "mot de passe" ou "secret") signifie que, dans certains cas, vous pouvez faire une bonne deviner un mot de passe par Googler le hachage ou à l'aide d'un arc-en-ciel de la table. C'est une des raisons pourquoi vous devriez toujours "sel" des mots de passe hachés, de sorte que deux valeurs identiques, lorsque hachés, ne sera pas de hachage à la même valeur.

Une fois un morceau de données a été exécuté grâce à une fonction de hachage, il n'y a pas de retour en arrière.

154voto

Jon Skeet Points 692016

Vous ne pouvez pas. Le point entier d'une valeur de hachage est qu'il est d'une seule façon. Cela signifie que si quelqu'un parvient à obtenir la liste des hash MD5, ils ne peuvent toujours pas obtenir votre mot de passe. (Non pas que MD5 est aussi sûr que peut-être, mais jamais l'esprit.) En outre, il 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...) les administrateurs du site ne sera pas en mesure d'utiliser le mot de passe utilisateur sur le site B.

Même si vous le pouviez, vous ne devriez pas leur envoyer un mail leur mot de passe - que les informations sensibles qui pourraient rester sensible.

Au lieu de cela, créer un outil de réinitialisation de mot de passe basé sur une horodaté valeur de hachage qui ne peut être utilisée qu'une fois. E-mail une url qui comprend que horodaté valeur de hachage, et, à l'URL laisser modifier leur mot de passe. En outre, si vous le pouvez, de faire que horodaté de hachage expirent après une courte période (par exemple 24 heures), de sorte que même si elles ne peuvent pas changer le mot de passe (parce qu'ils ne vous connectez pas), il y a une réduction de la vulnérabilité de la fenêtre.

De nombreux systèmes de générer un nouveau mot de passe aléatoire et l'envoyer par courriel à eux, les forçant à changer à la première connexion. Ce n'est pas souhaitable parce que quelqu'un pourrait changer à chaque mot de passe dans votre système par brute-forcer le mot de passe réinitialiser le formulaire.

54voto

Daniel May Points 5060

Techniquement, il est "possible", mais sous des conditions très strictes (rainbow tables, de force brute basée sur la très petite possibilité qu'un utilisateur mot de passe est dans la base de données de hachage).

Mais cela ne veut pas dire que c'est

  • Viable
    ou
  • Sécurisé

Vous ne voulez pas de "renverser" un MD5 hash. En utilisant les méthodes décrites ci-dessous, vous n'aurez jamais besoin de. 'Inverser' MD5 est en fait considéré comme malveillant - un peu de sites offrent la possibilité de "crack" et bruteforce hachages MD5 - mais ils sont tous sont de gigantesques bases de données contenant les mots du dictionnaire, ont déjà été présentés les mots de passe et d'autres mots. Il y a une très petite chance qu'il aura le hash MD5, vous avez besoin inversée. Et si vous avez salé le hash MD5 - cela ne marchera pas!!!! :)


La façon dont les connexions avec le hachage MD5 doit travail est la suivante:

Lors De L'Inscription:
L'utilisateur crée par mot de passe> Mot de passe est haché à l'aide de MD5 -> Hash stocké dans la base de données

Lors De La Connexion:
Utilisateur entre un nom d'utilisateur et mot de passe -> (nom d'utilisateur vérifié) Mot de passe est haché à l'aide de MD5 -> Hash est comparé avec le hash 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 à vous connecter, puis est buggé pour le changer à la première connexion.

ou

  • L'utilisateur est envoyé un lien pour changer leur mot de passe (avec supplément de vérifier 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

32voto

bdonlan Points 90068

Non, pas directement. En raison de la classer principe, il n'y a (probablement) plus d'une valeur de hachages pour tout MD5 de sortie. En tant que tel, vous ne pouvez pas inverser avec certitude. En outre, le MD5 est fait pour rendre difficile de trouver toutes ces inversée de hachage (cependant, il ya eu des attaques qui produisent des collisions , de produire deux valeurs de hachage pour le même résultat, mais vous ne pouvez pas contrôler ce que le résultant valeur MD5).

Toutefois, si vous restreindre l'espace de recherche, par exemple, des mots de passe commun avec la longueur sous le N, vous risquez de ne plus avoir l'irréversibilité de la propriété (parce que le nombre de MD5 sorties est beaucoup plus grande que le nombre de chaînes dans le domaine d'intérêt). Ensuite, vous pouvez utiliser un arc-en-ciel de table ou similaire à renverser les tables de hachage.

13voto

mgroves Points 8550

Pas possible, du moins pas dans un laps de temps raisonnable.

La manière dont cela est souvent traitée est un mot de passe « reset ». Autrement dit, vous leur donnez un nouveau mot de passe (au hasard) et envoyez qui dans un e-mail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X