Cela dépend de ce contre quoi vous voulez vous défendre
La sécurité n’est jamais un jeu unique. Si c'était le cas, il n'y aurait pas 12941 algorithmes de hachage différents. Au lieu de cela, vous devez comprendre que chaque mesure de sécurité vous protège contre un type d'attaque spécifique. Vous mettez un mot de passe dans votre ordinateur pour vous défendre contre des personnes aléatoires qui y accèdent, pas parce que c'est tellement amusant de taper whereD1DweG0sowron6
chaque fois que vous vous connectez.
En ce qui concerne les algorithmes de hachage, vous pouvez grossièrement les classer comme "hachages cryptographiques" et "hachages non cryptographiques". Les algorithmes de hachage cryptographique sont conçus pour résister à un certain nombre d'attaques, tandis que les hachages non cryptographiques sont conçus pour être aussi rapides que possible. 1 MD5, par exemple, est considéré comme un hachage cryptographique, mais si cassé qu'il est utilisable uniquement comme hachage non cryptographique.
Quand utiliser un hachage non cryptographique
Si votre objectif est de détecter des retournements de bits lors de la copie d'un fichier d'un emplacement à un autre ( disons, une clé USB à un ordinateur portable), alors MD5 est absolument le bon choix. J'irais même jusqu'à dire que tout hachage rapide et non cryptographique est bon. Lorsque vous copiez des fichiers, vous n'avez pas vraiment à craindre les interférences des attaquants. Si vous êtes paranoïaque à propos de la possibilité pour les pirates de modifier votre noyau, alors l'ajout de hachages ne résoudra pas vos problèmes.
Vérifier l'intégrité des fichiers avec les interférences des attaquants
Si vous avez l'intention de les signer et de les publier fichiers, alors un attaquant pourrait avoir la capacité de créer un fichier éventuellement légitime avec le même hachage - ce qui signifie que votre signature est tout aussi valide sur le fichier malveillant.
Un exemple
Allons dites que votre message d'origine m1
ressemble à ceci:
Je déclare par la présente que les règles du lapin!
Vous utilisez votre fonction de hachage h (m1)
et obtenez le condensé d1
. Ensuite, vous signez le condensé d1
et obtenez une signature s1
.
Vous publiez ensuite votre message m1
, votre signature s1
et votre fonction de hachage h()
.
I pourrait être l'attaquant dans le scénario et créer un message m2
qui a exactement le même hachage dans la fonction de hachage choisie:
Il est publiquement connu que les chiens valent mieux que des lapins à tous égards ...
Puisque h (m1) = h (m2) = d1
, la signature s1
est valide pour votre m1
original et mon m2
malveillant.
Afin de vous défendre contre de telles attaques, il est vital de choisir un algorithme de hachage fort avec haute résistance aux collisions. Cela signifie qu'il devient très difficile pour moi de trouver un m2
où h (m2) = h (m1)
.
De bons choix incluraient SHA256 et SHA512, ainsi que des tonnes d'autres. Il semble que tout le monde a des fonctions de hachage non grand public préférées, mais SHA256 et SHA512 ont un support très répandu et il vous sera difficile de trouver un système qui ne prend pas en charge ces hachages. Et comme vos fichiers sont très petits, le calcul du hachage devrait être presque instantané.
Par exemple, sur ma machine à 800 MHz, le calcul du hachage SHA512 d'un fichier aléatoire de 16k a pris 3 ms, donc même sur un grille-pain, cela devrait être relativement rapide.
1 Vous pouvez voir la même chose avec les générateurs de nombres aléatoires. Les PRNG cryptographiques visent à fournir des nombres aléatoires qui sont vraiment difficiles à deviner, tandis que les PRNG non cryptographiques visent à donner simplement des nombres qui semblent aléatoires à première vue et le font rapidement.