web-dev-qa-db-fra.com

Peut-on dire si une supposition de mot de passe était proche du résultat de hachage?

J'ai lu récemment sur la gestion des mots de passe (des choses très intéressantes!) Et je me demandais à quel point les hachages seraient différents pour des chaînes similaires.

Est-il possible de savoir si une supposition de mot de passe était proche en comparant le hachage résultant au vrai hachage?

Par exemple, si le vrai mot de passe est "password123" et qu'un pirate essaie "Password123", "password1234", "password124", etc., les hachages générés seraient-ils suffisamment similaires au hachage réel que le pirate ou son ordinateur pourrait dire ils étaient sur la bonne voie?

Supposons que le pirate connaisse du sel, du poivre, de la poudre de Cayenne, de l'adobo, peu importe ... S'ils essaient le bon mot de passe, ils généreront un hachage correspondant.

(Je pense que cela peut varier en fonction de la fonction de hachage utilisée, mais je ne le sais pas avec certitude.)

75
elmer007

Non, vous ne pouvez pas déterminer à quelle distance vous avez deviné en regardant le hachage. Une fonction de hachage est conçue dans cet esprit: un seul bit modifié à l'entrée doit changer beaucoup de bits à la sortie. Son appelé Avalanche Effect .

Ci-dessous sont des hachages SHA1 pour certains de vos exemples de mots de passe:

cbfdac6008f9cab4083784cbd1874f76618d2a97 - password123

b2e98ad6f6eb8508dd6a14cfa704bad7f05f6fb1 - Password123

2b4bfcc447c3c8726d26c22927a68f511d5e01cc - password124

115b55dcc1cd9a0dfdd60c120e83eaf658c45fc6 - right horse battery staple

abf7aad6438836dbe526aa231abde2d0eef74d42 - correct horse battery staple

Un changement de bit unique changera complètement le résultat de hachage. En fait, dans un cas idéal pour chaque bit de changement d'entrée, chaque bit de sortie sera changé avec une probabilité de 50%.

159
ThoriumBR

Non, grâce à l'effet d'avalanche, même un seul changement de bit en entrée devrait créer une grande différence importante en sortie.

Parlant également de fonctions de hachage comme md5 ou autres ... Compte tenu de toute taille d'entrée, la taille de sortie ne changera pas. Dans md5 si votre taille d'entrée est de 2 bits ou 2000 bits, votre sortie sera toujours à 32 chiffres en alphanumérique (format hexadécimal). Donc, il est presque impossible pour l'utilisateur normal de deviner la taille d'entrée même s'il a haché la sortie md5, deviner le mot de passe est bien au-delà de la portée de l'utilisateur normal, il existe toujours des moyens avec le calcul parallèle haut de gamme en appliquant des algorithmes et beaucoup de permutations et combinaisons pour trouver l'une des entrées possibles si vous avez le code haché ...!

 Sortie md5: 
 mot de passe123 = 482c811da5d5b4bc6d497ffa98491e38 
 Mot de passe123 = 42f749ade7f9e195bf475f37a44cafcb 
 mot de passe1234 = bdc87b9c894da5168059e

Les résultats ci-dessus montrent l'effet d'avalanche.

15
Surendra Patil

Pour ajouter un élément supplémentaire aux réponses ci-dessus - le point entier d'une fonction de hachage ne signifie pas perdre le type d'informations dans la question - si vous pouviez déterminer n'importe quoi sur le similitude de la forme des entrées comparant les sorties, ce qui représente un échec de la fonction de hachage.

Ce n'est pas seulement que les fonctions de hachage effectuent un travail et, incidemment, vous ne pouvez rien comprendre sur les entrées, le travail de la fonction de hachage est de vous donner zéro information sur les entrées, et si vous pouviez trouver quelque chose sur les entrées en comparant deux sorties, cela violerait ce principe.

13
Jason

Cela dépend de la fonction de hachage que vous utilisez. Puisque vous avez spécifié un mot de passe hachage, puis sans équivoque non , vous ne souhaitez utiliser une fonction de hachage pour les mots de passe qui ont divulgué toute sorte d'informations . Le hachage doit simplement correspondre ou ne pas correspondre et c'est tout.

Cela étant dit, il existe des fonctions de hachage qui fournissent des informations de similitude; plus d'informations sont fournies dans cette réponse .

7
TTT

Non. Il ne devrait pas y avoir de relation avec les données entrées dans la fonction de hachage et ce qui en sort.

Par exemple, voici "bonjour" dans MD5:

5d41402abc4b2a76b9719d911017c592

Et voici "Bonjour":

8b1a9953c4611296a827abf8c47804d7
4
Joshua Hunter

C'est un peu tiré par les cheveux, mais en général non - il n'y a aucun moyen de déterminer "à quel point" une estimation de mot de passe est correcte à partir d'une valeur de hachage. Le scénario le plus proche auquel je peux penser serait lorsque des segments de la phrase secrète sont divisés et hachés séparément, comme avec LMhash . Cette situation permettrait à l'attaquant de glaner des informations à partir des sections correctes du mot de passe, mais ne permettrait pas à l'attaquant de déduire "à quel point" chaque segment devait être correct.

D'autres utilisateurs ont donné un excellent aperçu du hachage et de l'effet d'avalanche, donc je ne vais pas y entrer!

1
Flutter

Selon les algorithmes utilisés, il peut être possible de calculer la proximité du mot de passe et cela conduit à des attaques par collision qui permettent de casser le mot de passe plus rapidement que la force brute.

Si je comprends bien, c'est le cas de MD4 qui peut être fissuré en millisecondes à cause de défauts comme celui-ci. Je n'ai pas analysé l'exploit MD4, mais je parie qu'il y a une équation de proximité intégrée.

Prenons un exemple idiot: une fonction de hachage qui est la somme des codes ASCII du mot de passe. Le mot de passe AB et BA auront le même hachage 131. Si le vrai mot de passe est AB, le système acceptera également BA comme mot de passe réel. Un peu de rétro-ingénierie montrera une relation: b) l'ajout d'un nouveau A au mot de passe ajoute 65 au hachage. Et puis la fissure est prête. Le mot de passe renvoyé par le crack peut ne pas être le même que celui utilisé par l'utilisateur, mais le système ne connaîtra pas la différence.

Oui, l'objectif d'un algorithme de hachage cryptographique est d'empêcher cela. Il était censé être imprévisible et nécessiterait donc la force brute. Mais ne fonctionne pas toujours comme prévu. Les mathématiques ne sont pas pardonnées.

EDIT: MD4, MD5 et SHA1 sont désormais obsolètes à cause de ce type d'attaques. De nouveaux algorithmes sont nés pour éviter ces vulnérabilités. Et la vérification des mots de passe fait un peu plus que du hachage. L'adoption de nouveaux algorithmes n'est pas aussi rapide que nous le souhaitons. Pour Linux constamment mis à jour, les mots de passe de base doivent utiliser des algorithmes modernes. Mais je parie qu'il y a beaucoup de systèmes dans le monde qui exécutent des logiciels vieux de plus de 10 ans parce que la nouvelle version du système d'exploitation peut ne pas être compatible avec des applications plus anciennes ou simplement par les coûts de licence si un logiciel payant est utilisé. Je parie que de nombreux logiciels qui ont leur propre base de données de mots de passe séparés du système ont une sécurité faible.

0
Lucas

Oui, vous pouvez, mais vous devez stocker des hachages pour les quasi-accidents ainsi que les associer, donc travail et ressources et problème de sécurité possible ici et là. Il est possible, par exemple, même maintenant, de voir les "tentatives" de mot de passe en texte clair sur un site Wordpress, si l'une d'entre elles correspond à un mot de passe à forte entropie connu ailleurs, nous pouvons dire où il peut Il existe bien sûr des algorithmes pour générer des données mal saisies, et cela est largement connu en raison de l'accrochage d'URL sur des fautes d'orthographe similaires, mais vous devrez attribuer des scores pour déterminer à quel point la correspondance pourrait être proche et à quelle distance elle a besoin avant d'être alerté. Essentiellement, s'il s'agit de mots du dictionnaire, vous pouvez les classer par Soundex ou similaire.

0
mckenzm