web-dev-qa-db-fra.com

Quelle est la différence entre une fonction de hachage et une fonction de hachage cryptographique?

Je veux dire, est-ce juste une question de "à quel point est-il difficile d'inverser la fonction avec la technologie actuelle"?

Ou existe-t-il un concept ou une propriété mathématique qui les rend différents?

S'il s'agit de "dans quelle mesure est-il difficile d'inverser la fonction", est-il exact de dire qu'avec le progrès de la technologie, certaines fonctions de hachage cryptographique cessent d'être cryptographiques pour n'être que des fonctions de hachage? Est-ce ce qui est arrivé à MD5?

56
Mr.Eddart

Chaque fonction de hachage cryptographique est une fonction de hachage. Mais toutes les fonctions de hachage ne sont pas un hachage cryptographique.

Une fonction de hachage cryptographique vise à garantir un certain nombre de propriétés de sécurité. Plus important encore, il est difficile de trouver des collisions ou des pré-images et la sortie semble aléatoire. (Il y a quelques autres propriétés, et "hard" a des limites bien définies dans ce contexte, mais ce n'est pas important ici.)

Les fonctions de hachage non cryptographiques essaient simplement d'éviter les collisions pour des entrées non malveillantes. Certains visent à détecter les modifications accidentelles des données (CRC), d'autres tentent de placer des objets dans différents compartiments dans une table de hachage avec le moins de collisions possible.

En échange de garanties plus faibles, elles sont généralement (beaucoup) plus rapides.

J'appellerais toujours MD5 une fonction de hachage cryptographique, car elle visait à assurer la sécurité. Mais il est cassé et n'est donc plus utilisable comme hachage cryptographique. D'un autre côté, lorsque vous avez une fonction de hachage non cryptographique, vous ne pouvez pas vraiment l'appeler "cassée", car elle n'a jamais essayé d'être sécurisée en premier lieu.

62
CodesInChaos

Il existe certaines propriétés que les fonctions de hachage sécurisées cryptographiquement nécessitent fortement, qui ne sont pas si fortement requises pour les fonctions de hachage sécurisées non cryptographiquement:

  • résistance à la pré-image (étant donné un hachage h il doit être difficile de trouver un message m qui donne h lorsqu'il est haché
  • faible résistance aux collisions (donné un message m1 il doit être difficile de trouver un autre message m2 pour que m1 et m2 donne le même hachage)
  • forte résistance aux collisions (il devrait être difficile de trouver des messages m1 et m2 qui donne le même hachage)

Dans ces points, vous voyez beaucoup de difficile, qui est une mesure qualitative au lieu d'une mesure quantitative. La meilleure réponse ici est la faisabilité: il y a une ligne floue lorsque quelque chose devient faisable et ces lignes se déplacent au fil du temps (à mesure que les capacités de calcul augmentent de façon exponentielle selon la loi de Moore, une fois que des problèmes difficiles peuvent maintenant être résolus par votre téléphone portable).

En général, c'est une bonne pratique de supposer que difficile signifie que le temps pour atteindre un objectif est NP-complet. Cela signifie que le temps nécessaire pour briser le hachage augmente fortement à mesure que vous augmentez la longueur du hachage.

Un autre point est qu'un algorithme de hachage cryptographiquement sécurisé peut être utile dans certaines applications, mais pas dans d'autres. Cela dépend du modèle de votre attaquant, de la nature des informations que vous souhaitez protéger et de choses comme les exigences de performances (en règle générale, meilleures sont les propriétés cryptographiques d'un hachage, pire est son comportement à l'exécution).

21
jupp0r

Je dirais que les deux éléments clés à comprendre ici sont:

  1. Le terme "fonction de hachage" est vague - ou plus précisément, polysémique: il a une "famille" de significations qui sont étroitement liées mais distinctes. Si quelqu'un étiquette une fonction comme une "fonction de hachage", l'étiquette ne vous dit tout simplement pas quelles propriétés cette fonction doit avoir. Vous devez examiner le contexte dans lequel le terme est utilisé et les exigences de ce contexte.
  2. Le terme "fonction de hachage cryptographique" est un mauvais terme - il ressemble à une description, mais il a une définition technique impliquée que le terme lui-même ne décrit pas réellement. Pour le dire simplement, il existe des fonctions comme codes d'authentification de message (MAC) qui sont souvent étiquetées comme fonctions de hachage et offrent une certaine forme de sécurité cryptographique, mais ne sont pas des "fonctions de hachage cryptographique" dans le conventionnel définition.

Le terme "fonction de hachage cryptographique" est classiquement utilisé pour désigner ce qui pourrait être mieux étiqueté comme fonctions de hachage résistantes aux collisions , qui sont public fonctions ("public" = ne nécessitent pas de clé secrète) qui doivent avoir ces trois propriétés:

  • Deuxième résistance à la pré-image: Pour une valeur aléatoire m1 Choisie par une partie honnête, il est très coûteux pour un attaquant de trouver n'importe quelle valeur m2 ≠ m1 Tel que hash(m1) = hash(m2).
  • Résistance à la pré-image: Pour une valeur aléatoire h choisie par une partie honnête, il est très coûteux pour un attaquant de trouver une valeur m tel que hash(m) = h.
  • Résistance aux collisions: Il est très coûteux pour un attaquant de trouver une paire de valeurs m1 ≠ m2 Telles que hash(m1) = hash(m2).

Il y a une quatrième propriété que les anciennes fonctions de hachage cryptographique échouent trivialement mais que les plus récentes comme SHA-3 et Blake2 sont conçues pour atteindre:

  • Indifférenciabilité aléatoire d'Oracle: Celui-ci est presque impossible à expliquer brièvement, mais réduisons-le à ceci: il est très coûteux pour un attaquant de trouver tout non -chances corrélations entre les sorties d'entrées de leur choix.

La propriété Oracle aléatoire (lorsqu'elle est correctement formulée) implique les trois propriétés précédentes, ainsi que des propriétés supplémentaires comme l'absence efficace attaques par extension de longueur . (Les extensions de longueur sont la raison la plus évidente pour laquelle les anciennes fonctions de hachage comme SHA-256 et SHA-512 échouent à la propriété Oracle aléatoire.)

3
Luis Casillas