Existe-t-il un point fixe MD5 où md5 (x) == x?

114

Y a-t-il un point fixe dans la transformation MD5, c'est-à-dire existe-t-il x tel que md5(x) == x?

BoltClock
la source
8
Quelle transformation MD5? Le mathématique (de n'importe quelle chaîne binaire à 128 bits) ou celui de n'importe quelle chaîne d'octets à une chaîne hexadécimale de 32 caractères (le plus pratique)? Il n'est pas évident que les réponses pour les deux soient les mêmes ...
Rafał Dowgird
4
Eh bien, ils sont la même réponse, non? Nous savons qu'il n'existe pas de x dont la longueur n'est pas de 128 bits md5(x) == x, car il a une md5(x) longueur de 128 bits. Par conséquent, il existe un point fixe dans md5 pour une entrée de taille arbitraire si et seulement s'il existe un point fixe dans md5 sur le domaine de 128 bits.
le paul le
1
Je ne pense pas que ce soit la même réponse car pour la chaîne hexadécimale de 32 caractères pratique, c'est un choix arbitraire si vous représentez les chiffres hexadécimaux en majuscules [AF] ou en minuscules [af]. Les deux représentations correspondent au même nombre de 128 bits, mais elles produiront des hachages différents lorsqu'elles sont fournies comme entrées à MD5. Donc, la probabilité qu'il y ait un point fixe dans l'une ou l'autre des représentations est en fait1-(1/e)*(1/e) ≈ 86.47%
Dušan

Réponses:

138

Puisqu'une somme MD5 a une longueur de 128 bits, tout point fixe devrait nécessairement avoir une longueur de 128 bits. En supposant que la somme MD5 d'une chaîne de caractères est répartie uniformément sur toutes les sommes possibles, alors la probabilité que toute chaîne de 128 bits donné est un point fixe est 1 / deux 128 .

Ainsi, la probabilité que aucune chaîne de 128 bits est un point fixe est (1 - 1 / 2 128 ) 2 128 , de sorte que la probabilité qu'il y ait un point fixe est de 1 - (1 - 1 / 2 128 ) 2 128 .

Puisque la limite lorsque n va à l'infini de (1 - 1 / n ) n est 1 / e , et 2 128 est très certainement un très grand nombre, cette probabilité est presque exactement 1 - 1 / e ≈ 63,21%.

Bien sûr, il n'y a pas de hasard réellement impliqué - soit il y a un point fixe, soit il n'y en a pas. Mais, nous pouvons être sûrs à 63,21% qu'il y a un point fixe. (Notez également que ce nombre ne dépend pas de la taille de l'espace de clés - si les sommes MD5 étaient 32 bits ou 1024 bits, la réponse serait la même, tant qu'elle est supérieure à environ 4 ou 5 bits).

Adam Rosenfield
la source
11
Pouvez-vous réellement supposer que la somme MD5 de toute chaîne est uniformément répartie sur toutes les sommes possibles?
Ori Pessach
13
Oui. Les grands nombres et les modules forment une distribution à peu près aléatoire. Sinon, vous auriez des collisions constantes. La nature de md5 oblige sa sortie à être distribuée de manière aléatoire.
Stefan Kendall
2
J'ai utilisé votre réponse comme base pour cette réponse: security.stackexchange.com/questions/3851/…
CesarB
1
Tenez, ayez un badge en or.
Dennis
Sauf que md5 est déterministe et non aléatoire.
PyRulez
13

Ma tentative de force brute a trouvé une correspondance entre le préfixe 12 et le suffixe 12.

préfixe 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762

suffixe 12: df12c1434cec7850a7900ce027af4b78 -> b2f6053087022898fe920ce027af4b78

Article de blog: https://plus.google.com/103541237243849171137/posts/SRxXrTMdrFN

Thomas Egense
la source
Le lien ne fonctionne pas. Google plus fermé en avril
Typewar
Désolé ... Je n'ai pas enregistré l'article de blog et la sauvegarde google + ne fonctionne pas pour moi. Mais voici mon projet github: github.com/thomasegense/MD5FixPointSearch
Thomas Egense
Êtes-vous sûr de ceci: prefix 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762 J'ai utilisé la md5sumcommande linux, j'ai obtenu un résultat différent
ThunderPhoenix
Je ne suis pas sûr que vous utilisiez correctement la somme md5. Vous pouvez également le confirmer en ligne ici: onlinemd5.com
Thomas Egense
11

Puisque le hachage est irréversible, ce serait très difficile à comprendre. La seule façon de résoudre ce problème serait de calculer le hachage sur chaque sortie possible du hachage et de voir si vous avez trouvé une correspondance.

Pour élaborer, il y a 16 octets dans un hachage MD5. Cela signifie qu'il y a 2 ^ (16 * 8) = 3,4 * 10 ^ 38 combinaisons. S'il fallait 1 milliseconde pour calculer un hachage sur une valeur de 16 octets, il faudrait 10790283070806014188970529154,99 ans pour calculer tous ces hachages.

Kibbee
la source
2
C'est vrai, si vous deviez essayer chacun d'entre eux . Mais il vous suffirait d'essayer toutes les entrées possibles pour vérifier qu'il n'y avait pas de point fixe. S'il y a un point fixe (et la réponse d'Adam Rosenfield suggère qu'il pourrait y en avoir), alors une seule chance est suffisante.
Naaff
La fonction est irréversible dans le sens où elle n'a pas d'inverse mathématique, mais cela signifie seulement que pour une sortie donnée, il peut y avoir plus d'une entrée. En général, l'espace des entrées pour une sortie donnée serait infini, mais si vous savez qu'il a commencé comme une valeur de 128 bits, vous pouvez restreindre les possibilités. Il y a une chance de "travailler à l'envers" si vous ne traitez pas la fonction comme une boîte noire, mais lisez plutôt la spécification et appliquez une réflexion mathématique.
rndmcnlly
2
@Naaff: "il suffit d'essayer toutes les entrées possibles" - et c'est plus facile que d'essayer chaque hash, comment? Bien au contraire, puisque plusieurs entrées possibles peuvent être hachées dans la même sortie.
Piskvor a quitté le bâtiment le
1
@Piskvor: Vous avez mal compris ce que voulait dire Naaff (cela m'a pris une minute aussi). Une manière plus claire de dire ce serait "Seulement s'il n'y a pas de point fixe vous devrez essayer toutes les entrées possibles (à partir de l'espace 2 ^ 128)". En d'autres termes, vous n'avez qu'à essayer toutes les possibilités si aucune avant cela ne fonctionne. Donc 1,08e28 ans, ou une chance!
P Daddy
"S'il fallait 1 milliseconde pour calculer un hachage". Les GPU modernes peuvent calculer des milliards de hachages par seconde, beaucoup plus rapidement que cela. Mais encore, cela prendrait beaucoup de temps.
markasoftware
0

Bien que je n'ai pas de réponse oui / non, je suppose que c'est "oui" et en plus qu'il y a peut-être 2 ^ 32 points fixes de ce type (pour l'interprétation de chaîne de bits, pas pour l'interprétation de chaîne de caractères). Je travaille activement là-dessus car cela semble être un puzzle génial et concis qui nécessitera beaucoup de créativité (si vous ne vous contentez pas de la recherche par force brute tout de suite).

Mon approche est la suivante: traitez-le comme un problème de mathématiques. Nous avons 128 variables booléennes et 128 équations décrivant les sorties en termes d'entrées (qui sont censées correspondre). En branchant toutes les constantes des tables dans l'algorithme et les bits de remplissage, j'espère que les équations peuvent être grandement simplifiées pour produire un algorithme optimisé pour le cas d'entrée de 128 bits. Ces équations simplifiées peuvent ensuite être programmées dans un langage agréable pour une recherche efficace, ou traitées à nouveau de manière abstraite, en attribuant des bits uniques à la fois, en faisant attention aux contradictions. Il suffit de voir quelques bits de la sortie pour savoir qu'elle ne correspond pas à l'entrée!

rndmcnlly
la source
C'est vraiment intéressant, veuillez partager vos progrès au fur et à mesure que vous avancez sur cette voie?
user230910
-1

Probablement, mais trouver cela prendrait plus de temps que ce que nous avons ou impliquerait de compromettre MD5.

Andru Luvisi
la source
6
Il n'a pas été cassé. Tout ce qu'ils ont pu faire, c'est, dans un laps de temps raisonnable, produire 2 chaînes qui correspondent au même hachage. Il est encore très difficile de produire une chaîne qui équivaudra à un hachage spécifique.
Kibbee
9
Je ne sais pas comment en trouver un compromettrait md5, pas plus que cela compromettrait l'algorithme si je vous disais MD5 ("Le renard brun rapide saute par-dessus le chien paresseux") = 9e107d9d372bb6826bd81d3542a419d6
Kip
5
Un point fixe donnerait probablement un effet de levier sur les mathématiques qui pourraient conduire à une violation plus complète de MD5. Je ne suis pas convaincu que Glomek puisse vraiment justifier «probablement»; J'accepterais «peut-être» sans équivoque.
Jonathan Leffler
-9

Il y a deux interprétations, et si l'on est autorisé à choisir l'une ou l'autre, la probabilité de trouver un point fixe augmente à 81,5%.

  • Interprétation 1: est-ce que le MD5 d'une sortie MD5 en binaire correspond-il à son entrée?
  • Interprétation 2: le MD5 d'une sortie MD5 en hexadécimal correspond-il à son entrée?
Joshua
la source
13
Il n'y a rien dans l'algorithme MD5 qui implique hex - il fonctionne sur des octets et produit des octets - donc je pense que cette dernière interprétation est invalide.
Nick Johnson
Qu'il y ait ou non un point fixe sous l'interprétation 1, il pourrait encore y en avoir (ou non) un sous interprétation 2. Cependant, si vous êtes intéressé à explorer le problème, l'interprétation 1 semble être un bien meilleur endroit pour commencer parce que vous avez gagné Pas besoin de prendre toutes sortes de décisions arbitraires sur la casse et le codage des caractères. En plus de cela, le cas binaire a moins de bits!
rndmcnlly
4
Vous interprétez mal ce qu'est vraiment l'hexagone. Vous pouvez représenter le binaire en hexadécimal, tout comme vous pouvez le représenter en décimal ou en octal ou en base 3. C'est un nombre et a différentes représentations. Donc, les interprétations 1 et 2 sont la même chose. Ce à quoi vous pensez, c'est la représentation sous forme de chaîne de caractères, qui n'est pas du tout le même hex mais est une valeur binaire entièrement différente. En fait, vous pouvez avoir de nombreuses chaînes hexadécimales différentes dans différents jeux de caractères. La valeur de hachage de 128 bits peut être représentée sous la forme d'une chaîne «hexadécimale», mais elle n'est pas égale à la chaîne. La chaîne n'est pas la même donnée binaire.
définit le
Dustin, l'interprétation 2 signifie vraiment le MD5 de la chaîne d'affichage.
Joshua
4
Il y a cependant un énorme problème avec cette idée, en ce sens qu'elle dépend directement de l'encodage de vos caractères. Un schéma de codage différent entraînera des ensembles de résultats entièrement différents. Il y a même un projet entier et un article le démystifiant basé sur ce malentendu sur le fonctionnement de MD5 acodingfool.typepad.com/blog/2009/05/the-kembler-identity.html
définit le
-23

Strictement parlant, puisque l'entrée de MD5 est longue de 512 bits et la sortie est de 128 bits, je dirais que c'est impossible par définition.

Ori Pessach
la source
4
Non, le MD5 de chaînes de 1 octet existe.
Joshua
7
L'entrée peut être de n'importe quelle taille. Si l'entrée est inférieure à 512 octets, elle est complétée, mais les petites entrées sont toujours acceptables. De Wikipedia: "MD5 traite un message de longueur variable en une sortie de longueur fixe de 128 bits. Le message d'entrée est divisé en morceaux de blocs de 512 bits (seize entiers little endian de 32 bits); le message est complété de sorte que sa longueur est divisible par 512. "
Naaff
Donc vous supposez que, disons, 0000000001 = 1? Je dirais alors que la question est au mieux mal spécifiée.
Ori Pessach
11
L' entrée de MD5 peut être de 128 bits. Si MD5 veut compléter cette entrée, alors, franchement, c'est l'affaire de MD5. L'entrée est toujours bien définie. De même, la sortie est un 128 bits bien défini. Si l'entrée (bien définie) et la sortie (bien définie) sont toutes les deux identiques, alors MD5 (x) = x.
Naaff
2
@Joshua le MD5 d'une chaîne vide (c'est-à-dire 0 octet) existe même
Kip