web-dev-qa-db-fra.com

En quoi les fonctions de hachage comme MD5 sont-elles uniques?

Je suis conscient que MD5 a eu quelques collisions, mais il s'agit davantage d'une question de haut niveau sur les fonctions de hachage.

Si MD5 hache une chaîne arbitraire en une valeur hexadécimale à 32 chiffres, alors selon le Pigeonhole Principle , cela ne peut certainement pas être unique, car il y a plus de chaînes arbitraires uniques que de valeurs hexadécimales uniques à 32 chiffres. .

55
Aly

Vous avez raison, cela ne peut garantir l'unicité, mais il existe environ 3,402823669209387e + 38 valeurs différentes dans une valeur hexadécimale à 32 chiffres (16 ^ 32). Cela signifie que, en supposant que les mathématiques derrière l'algorithme donnent une bonne distribution, vos chances sont phénoménalement petites qu'il y aura un doublon. Vous devez garder à l'esprit qu'il IS possible de dupliquer lorsque vous pensez à la façon dont il sera utilisé. MD5 est généralement utilisé pour déterminer si quelque chose a été changé (c'est-à-dire qu'il s'agit d'une somme de contrôle Il serait ridiculement improbable que quelque chose puisse être modifié et entraîner la même somme de contrôle MD5.

Edit: (compte tenu des dernières nouvelles concernant les hachages SHA1) La réponse ci-dessus est toujours valable, mais vous ne devez pas vous attendre à ce qu'un hachage MD5 serve de contrôle de sécurité contre la manipulation. Les hachages SHA-1 sont 2 ^ 32 (plus de 4 milliards) fois moins susceptibles de se heurter, et il a été démontré qu'il est possible de créer une entrée pour produire la même valeur. (Cela a été démontré contre MD5 il y a un certain temps). Si vous cherchez à vous assurer que personne n'a modifié de manière malveillante quelque chose pour produire la même valeur de hachage, ces jours-ci, vous avez besoin chez SHA-2 d'avoir une garantie solide.

En revanche, s'il n'est pas dans un contexte de contrôle de sécurité, MD5 a toujours son utilité.

L'argument pourrait être avancé qu'un hachage SHA-2 est suffisamment bon marché pour être calculé, que vous devriez simplement l'utiliser quand même.

94
Mike Cargal

Vous avez tout à fait raison. Mais les hachages ne sont pas "uniques", ils sont "assez uniques".

37

Comme d'autres l'ont souligné, le but d'une fonction de hachage comme MD5 est de fournir un moyen de vérifier facilement si deux objets sont équivalents, sans savoir ce qu'ils étaient à l'origine (mots de passe) ou les comparer dans leur intégralité (gros fichiers).

Disons que vous avez un objet O et son hachage hO. Vous obtenez un autre objet P et souhaitez vérifier s'il est égal à O. Il peut s'agir d'un mot de passe ou d'un fichier que vous avez téléchargé (auquel cas vous n'aurez pas O mais plutôt son hachage hO fourni avec P, très probablement). Tout d'abord, vous hachez P pour obtenir hP.

Il y a maintenant 2 possibilités:

  1. hO et hP sont différents. Cela doit signifier que O et P sont différents, car l'utilisation du même hachage sur 2 valeurs/objets doit donner la même valeur. Les hachages sont déterministes. Il n'y a pas de faux négatifs.
  2. hO et hP sont égaux. Comme vous l'avez dit, en raison du principe du pigeonnier, cela pourrait signifier que différents objets sont hachés à la même valeur, et d'autres actions peuvent être nécessaires.

    une. Parce que le nombre de possibilités est si élevé, si vous avez confiance en votre fonction de hachage, il peut suffire de dire "Eh bien, il y avait un 1 sur 2128 risque de collision (cas idéal), nous pouvons donc supposer O = P. Cela peut fonctionner pour les mots de passe si vous limitez la longueur et la complexité des caractères, par exemple. C'est pourquoi vous voyez des hachages de mots de passe stockés dans des bases de données plutôt que les mots de passe eux-mêmes. b. Vous pouvez décider que le fait que le hachage soit égal ne signifie pas que les objets sont égaux et faites une comparaison directe de O et P. Vous pouvez avoir un faux positif.

Ainsi, bien que vous puissiez avoir de fausses correspondances positives, vous n'aurez pas de faux négatifs. Selon votre application et si vous vous attendez à ce que les objets soient toujours égaux ou toujours différents, le hachage peut être une étape superflue.

9
Phil

Les fonctions de hachage unidirectionnelles cryptographiques ne sont pas, par nature, de définition Injective . En termes de fonctions de hachage, "unique" n'a pas de sens. Ces fonctions sont mesurées par d'autres attributs, ce qui affecte leur force en rendant difficile la création d'une pré-image d'un hachage donné. Par exemple, nous pouvons nous soucier du nombre de bits d'image affectés par la modification d'un seul bit dans la pré-image. Nous pouvons nous soucier de la difficulté de mener une attaque par force brute (trouver une image prie pour une image de hachage donnée). Nous pouvons nous soucier de la difficulté de trouver une collision: trouver deux pré-images qui ont la même image de hachage, à utiliser dans un attaque d'anniversaire .

5
M.A. Hanin

Bien qu'il soit probable que vous obteniez des collisions si les valeurs à hacher sont beaucoup plus longues que le hachage résultant, le nombre de collisions est encore suffisamment faible pour la plupart des utilisations (il y a 2128 nombre total de hachages possibles, donc la probabilité que deux chaînes aléatoires produisent le même hachage est théoriquement proche de 1 sur 1038).

MD5 a été principalement créé pour effectuer des vérifications d'intégrité, il est donc très sensible aux modifications minimales. Une modification mineure de l'entrée entraînera une sortie radicalement différente. C'est pourquoi il est difficile de deviner un mot de passe basé uniquement sur la valeur de hachage.

Bien que le hachage lui-même ne soit pas réversible, il est toujours possible de trouver une valeur d'entrée possible par pure force brute. C'est pourquoi vous devez toujours vous assurer d'ajouter un sel si vous utilisez MD5 pour stocker les hachages de mot de passe: si vous incluez un sel dans la chaîne d'entrée, une chaîne d'entrée correspondante doit inclure exactement le même sel afin d'obtenir le même chaîne de sortie car sinon la chaîne d'entrée brute qui correspond à la sortie ne correspondra pas après le salage automatisé (c'est-à-dire que vous ne pouvez pas simplement "inverser" le MD5 et l'utiliser pour vous connecter car le hachage MD5 inversé ne sera probablement pas le salé chaîne qui a abouti à l'origine à la création du hachage).

Les hachages ne sont donc pas uniques, mais le mécanisme d'authentification peut être conçu pour le rendre suffisamment unique (ce qui est un argument quelque peu plausible pour les restrictions de mot de passe au lieu de saler: l'ensemble de chaînes qui aboutit au même hachage contiendra probablement de nombreuses chaînes qui le font). ne pas respecter les restrictions de mot de passe, il est donc plus difficile d'inverser le hachage par la force brute - les sels sont évidemment toujours une bonne idée néanmoins).

Des hachages plus grands signifient un plus grand ensemble de hachages possibles pour le même ensemble d'entrée, donc une probabilité moindre de chevauchement, mais jusqu'à ce que la puissance de traitement avance suffisamment pour rendre le forçage brutal MD5 trivial, c'est toujours un choix décent dans la plupart des cas.

3
Alan Plum

(Il semble que ce soit la fonction de hachage dimanche.)

Les fonctions de hachage cryptographique sont conçues pour avoir des taux de duplication très, très, très faibles. Pour la raison évidente que vous dites, le taux ne peut jamais être nul.

Le page Wikipedia est informatif.

2
bmargulies

Comme Mike (et pratiquement tous les autres) l'a dit, ce n'est pas parfait, mais il fait le travail, et les performances de collision dépendent vraiment de l'algo (qui est en fait assez bon).

Ce qui est vraiment intéressant, c'est la manipulation automatique de fichiers ou de données pour conserver le même hachage avec des données différentes, voir ceci Démo

2
Bolster

Comme d'autres l'ont répondu, les fonctions de hachage ne sont par définition pas garanties de renvoyer des valeurs uniques, car il existe un nombre fixe de hachages pour un nombre infini d'entrées. Leur principale qualité est que leurs collisions sont imprévisibles.

En d'autres termes, ils ne sont pas facilement réversibles - donc bien qu'il puisse y avoir de nombreuses entrées distinctes qui produiront le même résultat de hachage (une "collision"), trouver deux d'entre elles est impossible à calculer.

1
Pinko