Quelle est la précision de «md5sum»?

27

Lors de l'utilisation md5sumpour vérifier l'intégrité d'un fichier, quelle est la précision du processus?

Un MD5 vérifié signifie-t-il que CHAQUE bit est exactement le même, ou existe-t-il un seuil qui doit être franchi avant que l'altération binaire se reflète dans le MD5?

Toute documentation sur la façon dont un md5 est généré serait également appréciée.

Konner Rasmussen
la source
@choroba si je lis tout cela correctement, la probabilité d'altération non détectée augmente avec la taille du fichier en cours de vérification. Cependant, c'est toujours une probabilité et une certitude de 100% ne peut être obtenue qu'avec un fichier de 16 octets. Ai-je raison?
Konner Rasmussen
@Konner J'ai lu votre question sur le transfert de fichiers. À cet effet, il est sûr. Les chances qu'un bit soit corrompu lors d'un transfert sont faibles et il est plus probable que vous perdiez une partie du fichier copié lors du transfert, en supposant que j'ai compris votre situation précédente . MD5 est dans l'effort équivalent à comparer les deux fichiers, avec un certain avantage dans le fait que vous n'avez pas besoin d'accéder aux deux fichiers en même temps.
Doktoro Reichard
15
"Est-ce qu'un MD5 vérifié signifie que CHAQUE bit est exactement le même." Notez que cela est impossible, grâce au principe du pigeonnier. en.wikipedia.org/wiki/Pigeonhole_principle
Plutor
3
Je ne pense pas non plus que vous ayez une garantie pour les fichiers de 16 octets.
Mooing Duck

Réponses:

65

MD5 est cassé à cet effet contre un adversaire intelligent. Il est possible de construire par malveillance deux blocs de données différents qui produisent le même hachage MD5.

Cependant, il est tout à fait approprié (bien qu'il existe presque certainement de meilleures façons) d'utiliser MD5 pour se protéger contre la corruption accidentelle de données en transit ou en stockage. Bien qu'il soit concevable qu'un tel événement puisse faire en sorte que le hachage MD5 soit le même, la probabilité est si faible qu'il est presque inimaginable que ce serait une probabilité qui mérite d'être inquiétée. Les pannes causées par le rayonnement de fond, les tunnels, l'électricité statique et des dizaines d'autres sources seraient des ordres de grandeur plus probables.

Même si vous disposiez d'un quadrillion d'unités de données, la probabilité qu'un MD5 dépareillé produise un hachage MD5 appartenant à l'une de ces quadrillions est bien inférieure à celle d'un quadrillion.

David Schwartz
la source
Bien qu'il soit théoriquement possible de générer deux fichiers avec le même hachage, cela peut être pratiquement impossible. Surtout si le fichier de remplacement doit également avoir un sens. Si le fichier d'origine était en anglais, par exemple, il ne peut y avoir aucune autre correspondance qui soit également en anglais. Ou s'il s'agit d'une feuille de calcul Excel, aucun des autres fichiers avec le même hachage ne serait une feuille de calcul valide.
Barmar
1
@Barmar: win.tue.nl/hashclash/Nostradamus ces gars-là ont créé un certain nombre de fichiers pdf avec le même hachage MD5 pour prouver que c'était pratiquement faisable.
philfr
26

MD5 est un hachage. Il mappe fondamentalement tout le contenu d'un fichier en une petite chaîne de 16 octets de long IIRC.

Il y aura évidemment plusieurs fichiers qui hachent la même somme MD5. Par conséquent, une somme MD5 correspondante n'est pas une garantie d'une correspondance exacte entre les fichiers.

Il n'y a pas de seuil en tant que tel car la façon dont les hachages fonctionnent. Ainsi, une somme MD5 peut détecter même un seul changement de bit. Cependant, de nombreux changements de bit unique peuvent entraîner la même hachage MD5. Il est donc tout à fait raisonnable d'utiliser MD5 pour valider l'intégrité du fichier contre la corruption aléatoire, mais non si une intention malveillante est possible car quelqu'un pourrait modifier un fichier tout en s'assurant que le hachage MD5 est le même.

Itai
la source
1
si courte histoire est qu'un md5 n'est rien de plus qu'un moyen rapide et sale de vérifier l'intégrité des fichiers, et ne devrait être utilisé que lorsqu'une erreur non détectée ne causerait pas de répercussions cataclysmiques ... correct?
Konner Rasmussen
3
la meilleure utilisation est de détecter la corruption lors du transfert ou de la copie. pas vraiment pour des raisons de sécurité.
Michael Martinez
12
@KonnerRasmussen - ce n'est pas une question de degré de répercussions, c'est la nature de la menace. Si vous craignez que deux documents aient accidentellement le même MD5, cessez de vous inquiéter: les chances sont considérablement plus élevées que vos ordinateurs s'enflamment spontanément; si vous craignez qu'un attaquant intelligent ne produise un document qui corresponde à celui que vous avez déjà, c'est une préoccupation sérieuse et vous devriez obtenir un meilleur hachage; si vous craignez qu'un attaquant intelligent puisse produire deux documents qui correspondent, ne vous inquiétez pas: cela arrivera certainement .
Malvolio
5
Bien sûr, alors que générer une collision de hachage MD5 est théoriquement possible, générer une collision utile (comme dans, le fichier en collision est le même type de fichier et son contenu est au moins vraisemblablement authentique) est beaucoup plus difficile ...
Shadur
6
@Shadur: C'était le cas auparavant, mais des recherches en cours sur la sécurité ont découvert de nouvelles façons de générer des collisions MD5 qui facilitent la tâche. En particulier, si votre format de fichier autorise des morceaux de données de "commentaires" au format libre, il est possible de faire correspondre n'importe quel hachage MD5 en insérant un commentaire approprié.
MSalters
17

Un MD5-Hash se compose de 128 bits. Un seul bit inversé dans la source retourne (en moyenne) 64 bits dans le hachage.

La probabilité de collision accidentelle de deux hachages est de 1/2 ^ 128, soit 1 sur 340 undécillions 282 décillions 366 nonillions 920 octillions 938 septillions 463 sextillions 463 quintillions 374 quadrillions 607 billions 431 milliards 768 millions 211 milliers 456.

Cependant, si vous conservez tous les hachages, grâce au paradoxe d'anniversaire, la probabilité est un peu plus élevée. Pour avoir 50% de chances de collision de hachage, vous avez besoin de 2 ^ 64 hachages. Cela signifie que pour obtenir une collision, vous devrez hacher en moyenne 6 milliards de fichiers par seconde pendant 100 ans.

Source: porneL, /programming/201705/how-many-random-elements-before-md5-produces-collisions

Zsolt Szilagy
la source
8
Vous dites donc qu'il y a encore une chance? : p
Holloway
1
Le problème est que, bien que vous ayez besoin de hacher 6 milliards de fichiers par seconde pendant 100 ans pour être certain de trouver une collision; cela pourrait bien se produire dans la première seconde.
dérobie
Certes, cela pourrait arriver la première seconde. Mais comme toujours, il s'agit d'équilibrer les raisons. Il pourrait y avoir des applications militaires où ce risque n'est pas acceptable, mais je louerais une voiture sans arrière-pensée où les capteurs d'airbag utilisent md5. Rappelez-vous, il y a de fortes chances que vous soyez frappé par la foudre plusieurs fois en attendant une collision md5.
Zsolt Szilagy
Je suis désolé, mais la moitié de 2 ^ 128 est 2 ^ 127, pas 2 ^ 64.
fischi
2
@fischi, lisez le lien sur le paradoxe de l'anniversaire et aussi en.wikipedia.org/wiki/Birthday_attack - il ne s'agit pas simplement de diviser par deux le nombre total de hachages. Étant donné l'espace de recherche H, le nombre de hachages que vous devez générer avant d'obtenir 50% de chances de collision est d'environ sqrt ((pi / 2) * H). Si vous faites ce calcul avec 2 ^ 128, vous obtiendrez un nombre d'environ 2 ^ 64
Paul Dixon