web-dev-qa-db-fra.com

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

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

111
Jack

Puisqu'une somme MD5 a une longueur de 128 bits, tout point fixe devrait nécessairement aussi avoir une longueur de 128 bits. En supposant que la somme MD5 de toute chaîne est uniformément répartie sur toutes les sommes possibles, la probabilité qu'une chaîne de 128 bits donnée soit un point fixe est 1/2128.

Ainsi, la probabilité qu'aucune chaîne de 128 bits ne soit un point fixe est (1 - 1/2128)2128, donc la probabilité qu'il existe un point fixe est de 1 1 - 1--- (/2128)2128.

Puisque la limite en tant que n va à l'infini de (1 - 1/n)n est 1/eet 2128 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 vraiment de hasard 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 existe un point fixe. (Notez également que ce nombre ne dépend pas de la taille de l'espace de clé - si les sommes MD5 étaient de 32 bits ou 1024 bits, la réponse serait la même, tant qu'elle est supérieure à environ 4 ou 5 bits).

136
Adam Rosenfield

Ma tentative de force brute a trouvé une correspondance de 12 préfixes et 12 suffixes.

préfixe 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762

suffixe 12: df12c1434cec7850a7900ce027af4b78 -> b2f6053087022898fe920ce027af4b78

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

12
Thomas Egense

Étant donné que le hachage est irréversible, cela 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.

11
Kibbee

Bien que je n'ai pas de réponse oui/non, ma supposition est "oui" et en outre qu'il existe peut-être 2 ^ 32 points fixes de ce type (pour l'interprétation de la chaîne de bits, pas pour l'interprétation de la chaîne de caractères). J'y travaille activement 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 de force brute tout de suite).

Mon approche est la suivante: le traiter comme un problème mathématique. 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 de l'algorithme et des bits de remplissage, j'espère que les équations pourront être considérablement 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 certain langage niçois pour une recherche efficace, ou traitées de manière abstraite à nouveau, en affectant 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!

0
rndmcnlly

pour x =e215962017

md5 (x x) == => true en php. Comme c'est un comparateur lâche.

0
Rohith