Un hachage «sécurisé» est un hachage qui est considéré comme difficile à «usurper» d'une manière formelle et reproductible sans connaissance préalable du message utilisé pour créer le hachage. Comme ces informations sont généralement secrètes, d'où la nécessité d'un hachage, il s'agit d'une bonne propriété d'une fonction de hachage destinée à être utilisée dans l'authentification.
Un hachage est généralement considéré comme "sécurisé" si, étant donné un message M, une fonction de hachage hash () et une valeur de hachage H produite par le hachage (M) avec une longueur en bits L, aucune des opérations suivantes ne peut être effectuée en moins de O (2 L ) temps:
- Étant donné le hachage () et H, produire M. (résistance de pré-image)
- Étant donné hash () et M, produire un M 2 différent tel que hash (M 2 ) == H. (faible résistance à la collision)
- Étant donné hash (), produisez tout M 1 et M 2 tels que hash (M 1 ) == hash (M 2 ). (forte résistance aux collisions)
De plus, un hachage "sécurisé" doit avoir une longueur de hachage L telle que 2 Ln'est pas un nombre d'étapes réalisables pour qu'un ordinateur exécute le matériel actuel donné. Un hachage entier 32 bits ne peut avoir que 2,1 milliards de valeurs; alors qu'une attaque de pré-image (trouver un message qui produit un hachage spécifique H) prendrait un certain temps, ce n'est pas irréalisable pour de nombreux ordinateurs, en particulier ceux entre les mains d'agences gouvernementales chargées de briser le code. En outre, un algorithme qui crée et stocke des messages aléatoires et leurs hachages aurait, selon la probabilité, 50% de chances de trouver un hachage en double avec chaque nouveau message après avoir essayé seulement 77 000 messages, et aurait 75% de chances de frapper un dupliquer après seulement 110 000. Même les hachages 64 bits ont encore 50% de chances de se heurter après avoir essayé seulement environ 5 milliards de valeurs. Telle est la puissance de l'attaque d'anniversaire sur les petits hachages. Par contre,nombres de décillions (1,5 * 10 34 ).
La plupart des attaques démontrées sur les hachages cryptographiques ont été des attaques par collision et ont démontré la capacité de générer des messages entrant en collision en moins de 2 L (la plupart ont toujours été à temps exponentiel, mais réduire l'exposant de moitié est une réduction significative de la complexité car cela rend un hachage 256 bits aussi facile à résoudre qu'un 128 bits, un 128 bits aussi facile à résoudre qu'un 64 bits, etc.).
En plus de la petite taille du hachage, d'autres facteurs qui peuvent rendre un hachage peu sûr sont:
Faible travail - un hachage conçu pour être utilisé par une table de hachage ou à d'autres fins de type "somme de contrôle" est généralement conçu pour être peu coûteux en termes de calcul. Cela rend une attaque par force brute beaucoup plus facile.
"Sticky State" - La fonction de hachage est sujette à des modèles d'entrée où la valeur de hachage actuelle de toutes les entrées ne change pas jusqu'à présent lorsqu'elle reçoit un octet supplémentaire particulier d'entrée. Le fait d'avoir un "état collant" rend les collisions faciles à trouver, car une fois que vous identifiez un message qui produit un hachage "d'état collant", il est trivial de générer d'autres messages qui ont le même hachage en ajoutant des octets d'entrée qui gardent le hachage dans son "état collant". ".
Diffusion - Chaque octet d'entrée du message doit être réparti entre les octets de la valeur de hachage d'une manière également complexe. Certaines fonctions de hachage créent des modifications prévisibles de certains bits du hachage. Cela rend encore une fois la création de collisions triviale; étant donné un message qui produit un hachage, des collisions peuvent être facilement créées en introduisant de nouvelles valeurs dans le message qui n'affectent que les bits qui changent de façon prévisible.