En pratique, oui, un hachage cryptographique identique signifie que les fichiers sont identiques, tant qu'ils n'ont pas été conçus par un attaquant ou une autre entité malveillante. Les probabilités de collision aléatoire avec une fonction de hachage cryptographique bien conçue sont si minimes qu'elles sont négligeables en pratique et en l'absence d'un attaquant actif.
En général, cependant, non, nous ne pouvons pas dire que deux fichiers arbitraires ayant le même hachage signifient de manière définitive qu'ils sont identiques.
Le fonctionnement d'une fonction de hachage cryptographique consiste à prendre une entrée de longueur arbitraire et à générer une valeur de longueur fixe calculée à partir de l'entrée. Certaines fonctions de hachage ont le choix entre plusieurs longueurs de sortie, mais la sortie reste dans une certaine mesure une valeur de longueur fixe. Cette valeur peut aller jusqu'à quelques dizaines d'octets; les algorithmes de hachage avec la plus longue valeur de sortie couramment utilisée ont une sortie de 512 bits et une sortie de 512 bits est de 64 octets.
Si une entrée dans une fonction de hachage est plus longue que la sortie de la fonction de hachage, une certaine fidélité doit être supprimée pour que l'entrée tienne dans la sortie. Par conséquent, il doit exister plusieurs entrées de longueur supérieure à la longueur de la sortie, qui génèrent la même sortie.
Prenons le cheval de bataille actuel, SHA-256, à titre d'exemple. Il génère un hachage de 256 bits ou 32 octets. Si vous avez deux fichiers qui font chacun exactement 32 octets de long, mais qui sont différents, ils devraient (en supposant qu’aucun défaut de l’algorithme ne soit utilisé) hacher en valeurs différentes, quel que soit le contenu des fichiers; mathématiquement, le hachage est une fonction qui mappe un espace de 2 256 entrées sur un espace de 2 256 sorties, ce qui devrait être possible sans collisions. Cependant, si vous avez deux fichiers qui sont chacun 33 octets, il doit exister une combinaison d'entrées qui donnent la même valeur de hachage de sortie 32 octets pour les deux fichiers, parce que nous sommes la cartographie maintenant 2 264 l' espace d'entrée sur un 2 256espace de sortie; ici, nous pouvons facilement voir qu’il devrait exister, en moyenne, 2 à 8 entrées pour chaque sortie. Allez plus loin, et avec les fichiers de 64 octets, il devrait exister 2 256 entrées pour chaque sortie!
Les fonctions de hachage cryptographique sont conçues de telle sorte qu'il est difficile de composer une entrée qui donne une sortie particulière, ou de composer deux entrées qui donnent la même sortie. Ceci est connu sous le nom de résistance d' attaque pré-image ou résistance d' attaque par collision . Il n'est pas impossible de trouver ces collisions; c'est juste destiné à être vraiment, vraiment, vraiment, vraiment difficile. (Un cas particulier d'attaque par collision est une attaque par 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é ces jours-ci, mais à la fin j'ai jeté un œil, il portait encore une bonne première résistance à la pré-image . SHA-1 est également efficacement cassé; les attaques de 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 dit le proverbe, les attaques s'améliorent toujours, elles ne s'aggravent jamais. SHA-256/384/512 sont toujours considérés comme sûrs dans la plupart des cas. Toutefois , si vous souhaitez simplement savoir si deux cartes non malveillantes, validesles fichiers sont identiques, alors aucun de ceux-ci ne devrait suffire, car l’espace d’entrée est déjà suffisamment limité pour vous intéresser surtout aux 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 actuellement considérée comme étant sûre, ce qui place la barre inférieure à SHA-256.
La première image consiste à trouver une entrée qui donne une valeur de hachage de sortie spécifique; la deuxième préimage consiste à trouver une entrée qui donne la même sortie qu’une autre entrée spécifiée; La collision consiste à trouver deux entrées qui produisent la même sortie, sans tenir compte de ce que c'est et parfois sans égard à ce que sont les entrées.
Cela dit, il est important de garder à l'esprit que les fichiers peuvent avoir des représentations de données très différentes et toujours afficher exactement la même chose. Ainsi, ils peuvent sembler être les mêmes même si leurs hachages cryptographiques ne correspondent pas, mais si les hachages sont identiques, ils ont toutes les chances de paraître identiques.
cmp
Unix oufc
(comparaison de fichiers) sous Windows.