61 votes

Un hachage cryptographique ou une somme de contrôle identique pour deux fichiers signifie-t-il qu'ils sont identiques ?

J'ai 2 documents excel et je veux vérifier s'ils sont exactement les mêmes, à part le nom du fichier.

Par exemple, les fichiers s'appellent fileone.xls y filetwo.xls . En dehors des noms de fichiers, leurs contenus sont supposés être identiques mais c'est ce que je veux vérifier.

J'ai cherché des moyens de revoir cela et sans installer un tas de plugins. Il ne semble pas y avoir de moyen direct.

J'ai essayé de générer des hachages MD5 pour les deux fichiers. Lorsque les hachages sont identiques, cela signifie-t-il que le contenu des fichiers est identique à l'identique ?

93voto

LawrenceC Points 70381

Lorsque les hachages sont identiques, cela signifie-t-il que le contenu du fichier est 1:1 le même ?

Tous les fichiers sont une collection d'octets (valeurs 0-255). Si les hachages MD5 de deux fichiers correspondent, il est très probable que ces deux collections d'octets soient exactement les mêmes (même ordre, mêmes valeurs).

Il y a très peu de chances que deux fichiers puissent générer le même MD5, qui est un hachage de 128 bits. La probabilité est la suivante :

La probabilité que deux hachages entrent accidentellement en collision est de 1/2. 128 dont est de 1 sur 340 undecillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 quintillion 374 quadrillion 607 trillion 431 milliards 768 millions 211 mille 456. (d'après une réponse sur StackOverflow .)

Les hachages sont censés fonctionner "dans un seul sens", c'est-à-dire que vous prenez une collection d'octets et obtenez un hachage, mais vous ne pouvez pas prendre un hachage et récupérer une collection d'octets.

La cryptographie en dépend (c'est une façon de comparer deux choses sans savoir ce que sont ces choses).

Vers 2005, des méthodes ont été découvertes pour prendre un hachage MD5 et créer des données qui correspondent à ce hachage créer deux documents ayant le même hachage MD5 ( attaque par collision ). Voir le commentaire de @user2357112 ci-dessous. Cela signifie qu'un attaquant peut créer deux exécutables, par exemple, qui ont le même MD5, et si vous dépendez du MD5 pour déterminer à qui faire confiance, vous serez trompé.

Le MD5 ne doit donc pas être utilisé pour la cryptographie ou la sécurité. Il est mauvais de publier un MD5 sur un site de téléchargement pour garantir l'intégrité du téléchargement, par exemple. Il faut éviter de dépendre d'un hachage MD5 que vous n'avez pas généré vous-même pour vérifier le contenu d'un fichier ou de données.

Si vous générez vos propres données, vous savez que vous n'êtes pas malveillant envers vous-même (avec un peu de chance). Donc, pour votre usage, c'est OK, mais si vous voulez que quelqu'un d'autre soit capable de le reproduire, et que vous voulez publier publiquement le hachage MD5, un meilleur hachage devrait être utilisé.


Notez qu'il est possible que deux fichiers Excel contiennent les mêmes valeurs dans les mêmes lignes et colonnes, mais que le bytestream du fichier soit complètement différent en raison d'un formatage, de styles, de paramètres, etc. différents.

Si vous souhaitez comparer les données du fichier, exportez-le d'abord au format CSV avec les mêmes lignes et colonnes, afin de supprimer tout formatage, puis hachurez ou comparez les CSV.

38voto

user Points 28521

En pratique, oui, un hachage cryptographique identique signifie que les fichiers sont les mêmes, tant que les fichiers n'ont pas été créés par un attaquant ou une autre entité malveillante. Les chances de au hasard La probabilité de collisions avec toute fonction de hachage cryptographique bien conçue est si faible qu'elle est négligeable en pratique et en l'absence d'un attaquant actif.

Mais en général, non, on ne peut pas dire que deux fichiers arbitraires ayant le même hachage définitivement signifie qu'ils sont identiques.

Le fonctionnement d'une fonction de hachage cryptographique consiste à prendre une entrée de longueur arbitraire et à produire une valeur de longueur fixe calculée à partir de l'entrée. Certaines fonctions de hachage permettent de choisir parmi plusieurs longueurs de sortie, mais la sortie est toujours, dans une certaine mesure, une valeur de longueur fixe. Cette valeur peut atteindre quelques dizaines d'octets ; les algorithmes de hachage les plus longs utilisés aujourd'hui ont une sortie de 512 bits, et une sortie de 512 bits représente 64 octets.

Si l'entrée d'une fonction de hachage est plus longue que la sortie de la fonction de hachage, une certaine fidélité doit être enlevée pour que l'entrée rentre dans la sortie. En conséquence, il doit exister plusieurs entrées de longueur supérieure à la longueur de la sortie, qui génèrent la même sortie.

Prenons l'exemple du cheval de bataille actuel, SHA-256. Il produit un hachage de 256 bits, soit 32 octets. Si vous avez deux fichiers qui font chacun exactement 32 octets, mais qui sont différents, ils devraient (en supposant qu'il n'y a pas de défaut dans l'algorithme) être hachés à des valeurs différentes, quel que soit le contenu des fichiers ; en termes mathématiques, le hachage est une fonction qui met en correspondance un 2 256 sur un espace d'entrée de 2 256 l'espace de sortie, ce qui devrait pouvoir se faire sans collisions. Cependant, si vous avez deux fichiers qui font chacun 33 octets, il doit exister algunos combinaison d'entrées qui donnent la même valeur de hachage de sortie de 32 octets pour les deux fichiers, car nous mappons maintenant une valeur de 2 264 sur un espace d'entrée de 2 256 espace de sortie ; ici, on peut facilement voir qu'il devrait y avoir, en moyenne, 2 8 entrées pour chaque sortie. Si l'on va plus loin, avec des fichiers de 64 octets, il devrait y avoir 2 entrées pour chaque sortie. 256 entrées pour chaque sortie !

Les fonctions de hachage cryptographiques sont conçues de telle sorte que c'est difficile sur le plan informatique pour composer une entrée qui donne une sortie particulière, ou composer deux entrées qui donnent la même sortie. On parle alors de _attaque par préimage résistance o attaque par collision résistance_ . Ce n'est pas impossible pour trouver ces collisions ; c'est juste prévu pour être vraiment, vraiment, vraiment, vraiment (Un cas un peu particulier d'une attaque par collision est un attaque d'anniversaire .)

Certains algorithmes sont plus efficaces que d'autres pour résister aux attaquants. Le MD5 est généralement considéré comme complètement cassé de nos jours, mais la dernière fois que j'ai regardé, il était encore assez bon pour résister aux attaques. première préimage résistance. De même, SHA-1 est effectivement cassé ; des attaques par préimage ont été démontrées, mais nécessitent des conditions spécifiques, bien qu'il n'y ait aucune raison de croire que ce sera le cas indéfiniment ; comme le dit le dicton, les attaques s'améliorent toujours, elles ne s'aggravent jamais. SHA-256/384/512 sont actuellement encore considérés comme sûrs pour la plupart des objectifs. Cependant si vous êtes juste intéressé à voir si deux non malicieusement conçu, valide sont les mêmes, alors n'importe lequel de ces fichiers devrait suffire, car l'espace d'entrée est déjà suffisamment contraint pour que vous soyez surtout intéressé par les collisions aléatoires. Si vous avez des raisons de croire que les fichiers ont été créés de manière malveillante, vous devez au moins utiliser une fonction de hachage cryptographique qui est actuellement considérée comme sûre, ce qui place la barre inférieure à SHA-256.

Premier Le préimage consiste à trouver une entrée qui donne une valeur de hachage de sortie spécifique ; deuxième Le préimage consiste à trouver une entrée qui donne la même sortie qu'une autre entrée spécifiée ; collision est de trouver deux entrées qui donnent le même résultat, sans tenir compte de ce que c'est et parfois sans tenir compte de ce que sont les entrées.

Tout cela étant dit, il est important de garder à l'esprit que les fichiers peuvent avoir des représentations de données très différentes et pourtant s'afficher exactement de la même manière. Ils peuvent donc sembler être le même même si leurs hachages cryptographiques ne correspondent pas, mais si les hachages correspondent, alors ils sont extrêmement probable pour paraître identiques.

10voto

Attie Points 18031

C'est un jeu de probabilité... les hashs sont capables de représenter un nombre fini de valeurs.

Si l'on considère un hypothétique (et très faible) algorithme de hachage de 8 bits, celui-ci peut représenter 256 valeurs distinctes. Si vous commencez à faire passer des fichiers par l'algorithme, vous commencerez à obtenir des hachages... mais très vite, vous commencerez à voir des " collisions de hachage ". Cela signifie que deux fichiers différents ont été introduits dans l'algorithme, et qu'il a produit la même valeur de hachage comme sa sortie. Il est clair qu'ici, le hachage n'est pas assez fort, et nous ne pouvons pas affirmer que " les fichiers dont les hachages correspondent ont le même contenu ".

L'extension de la taille du hachage et l'utilisation d'algorithmes de hachage cryptographiques plus puissants peuvent contribuer de manière significative à réduire les collisions et à accroître notre confiance dans le fait que deux fichiers ayant le même hachage ont le même contenu.

Ceci dit, nous ne pouvons jamais atteindre une certitude à 100% - nous ne pouvons jamais prétendre avec certitude que deux fichiers avec le même hash ont vraiment le même contenu.

Dans la plupart des situations, c'est très bien, et la comparaison des hachages est " suffisant "mais cela dépend de votre modèle de menace.

En fin de compte, si vous avez besoin d'augmenter les niveaux de certitude, je vous recommande de faire ce qui suit :

  1. Utilisez des algorithmes de hachage puissants ( MD5 n'est plus considéré comme adéquat si vous devez vous protéger contre des utilisateurs potentiellement malveillants)
  2. Utiliser plusieurs algorithmes de hachage
  3. Comparez la taille des fichiers - un point de données supplémentaire peut aider à identifier les collisions potentielles, mais notez que les données démontrées par le système de gestion de l'information de l'entreprise sont plus importantes que celles de l'entreprise. Collision MD5 n'a pas eu besoin de modifier la longueur des données.

Si vous avez besoin d'être sûr à 100 %, commencez par un hachage, mais si les hachages correspondent, poursuivez avec une comparaison octet par octet des deux fichiers.


En outre, comme d'autres l'ont souligné... la complexité des documents produits par des applications telles que Word et Excel signifie que le texte, les chiffres, la mise en page visible peuvent être les mêmes, mais que les données stockées dans le fichier peuvent être différentes.

Excel est particulièrement mauvais dans ce domaine : il suffit d'ouvrir une feuille de calcul pour l'enregistrer (après avoir fait le nécessaire). rien ) peut produire un nouveau fichier, avec un contenu différent.

6voto

Réponse courte : A hachage cryptographique est censé vous aider à être raisonnablement sûr que les fichiers dont les hachages correspondent sont les mêmes. À moins qu'elles ne soient délibérément créées, les chances que deux fichiers légèrement différents aient des valeurs de hachage similaires sont ridiculement faibles. Mais lorsqu'il s'agit de comparer et de vérifier des fichiers qui pourraient être délibérément falsifiés, MD5 est un mauvais choix. (Utilisez une autre fonction de hachage comme SHA3 ou BLAKE2).

Longue réponse : Une fonction de hachage idéale est une fonction qui crée un hachage cryptographique presque unique pour chaque donnée unique. En d'autres termes, nous savons avec certitude qu'il existe deux fichiers dans cet univers dont les valeurs de hachage entrent en collision, la probabilité que ces deux fichiers se rencontrent naturellement est ridiculement faible.

Il y a dix ans, j'ai décidé que je devais rester aussi loin que possible de MD5. (Bien sûr, jusqu'à hier, je me suis souvenu de la mauvaise raison de le faire ; dix ans, c'est long, voyez-vous. J'ai revisité mes anciens mémos pour me rappeler pourquoi et j'ai édité cette réponse). Vous voyez, en 1996, on a découvert que le MD5 était sensible aux attaques par collision. Neuf ans plus tard, des chercheurs ont pu créer des paires de documents PostScript et (aïe !) de certificats X.509 avec le même hachage ! MD5 était clairement cassé. (Megaupload.com utilisait également le MD5, et il y avait beaucoup d'entourloupes autour des collisions de hachage qui me posaient problème à l'époque).

J'en ai donc conclu que si le MD5 était (et est toujours) fiable pour comparer des fichiers bénins, il faut cesser de l'utiliser complètement. Je me suis dit que le fait de s'y fier risquait de se transformer en indulgence et en fausse confiance : Une fois que l'on commence à comparer des fichiers à l'aide de leurs hachages MD5, on oublie un jour l'empreinte de sécurité et on compare deux fichiers qui sont délibérément conçus pour avoir le même hachage. De plus, il était peu probable que les processeurs et cryptoprocesseurs ajoutent un support pour cette fonction.

L'affiche originale, cependant, a encore moins de raisons d'utiliser MD5, car :

  1. Tant que l'on ne compare que deux fichiers, la comparaison octet par octet est en fait plus rapide que la génération de ses propres hachages MD5. Pour la comparaison de trois fichiers ou plus... eh bien, vous avez maintenant une cause légitime.
  2. Le PO a spécifié "des moyens de revoir cela et sans installer un tas de plugins". L'outil Windows PowerShell Get-FileHash peut générer des hachages SHA1, SHA256, SHA384, SHA512 et MD5. Sur les ordinateurs modernes dotés d'un support matériel pour les fonctions de hachage SHA, leur génération est plus rapide.

6voto

Si deux fichiers ont le même hachage MD5 et qu'ils n'ont pas été spécialement conçus, ils sont identiques. La difficulté de créer des fichiers avec le même hachage MD5 dépend du format du fichier. Je ne sais pas si c'est facile avec les fichiers Excel.

Donc, si vous avez des fichiers qui traînent et que vous voulez trouver des doublons, le MD5 est sûr. Si vous avez écrit l'un des fichiers et que l'autre est d'origine douteuse, le MD5 est toujours sûr (la seule façon d'obtenir des fichiers différents avec la même somme de contrôle MD5 est de créer les deux fichiers). Si une personne en qui vous n'avez pas confiance vous envoie une proposition de budget, et qu'elle vous envoie ensuite un autre fichier qu'elle prétend être le même, le MD5 peut ne pas être suffisant.

Pour éviter tout risque, utilisez SHA-256 ou SHA-512 au lieu de MD5. Si deux fichiers ont le même hachage SHA-256, ils sont identiques. Il en va de même pour SHA-512. (Il existe une possibilité théorique qu'ils soient différents, mais la probabilité que cela se produise accidentellement est tellement inférieure à la probabilité que votre ordinateur fasse une erreur pendant la vérification que cela n'est pas pertinent. Quant à quelqu'un qui fabriquerait délibérément deux fichiers avec le même hachage, personne ne sait comment le faire pour SHA-256 ou SHA-512).

Si deux fichiers Excel ont des hachages différents, alors ils sont différents, mais il n'y a aucun moyen de savoir de combien ils diffèrent. Ils peuvent avoir des données identiques mais un formatage différent, ou ils peuvent simplement différer dans les propriétés, ou ils peuvent avoir été enregistrés par des versions différentes. En fait, si Excel ressemble à Word, le simple fait d'enregistrer un fichier met à jour ses métadonnées. Si vous souhaitez uniquement comparer les données numériques et textuelles et ignorer le formatage et les propriétés, vous pouvez exporter les feuilles de calcul au format CSV pour les comparer.

Si vous disposez d'outils Unix/Linux, vous pouvez alors utiliser cmp pour comparer deux fichiers. Pour comparer deux fichiers sur la même machine, les sommes de contrôle ne font que compliquer les choses.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X