web-dev-qa-db-fra.com

Quelle est la différence entre une résistance faible et une résistance forte

J'ai lu quelques textes sur la forte résistance aux collisions et la faible résistance aux collisions, mais je n'ai pas pu comprendre la différence. La seule chose que je peux comprendre, c'est qu'il y a une faible probabilité de collision dans les fonctions de hachage qui ont une faible résistance à la collision, et une probabilité plus élevée de collision dans les fonctions de hachage à forte résistance à la collision. Je ne pouvais pas comprendre quelle est la vraie chose, quelle est la signification de ces paramètres. Quelqu'un peut-il m'aider à ce sujet?

37
phoxis

La faible propriété de résistance aux collisions est parfois également appelée deuxième résistance de pré-image :

Étant donné un x arbitraire, il n'existe pas de x 'avec x'! = X de sorte que h(x) = h (x ')

Par contre, une forte résistance aux collisions est définie comme:

Il n'existe pas de x et x 'avec x! = X' de sorte que h(x) = h (x ')

La différence évidente dans leurs définitions est que pour une faible résistance à la collision, nous supposons être lié à un choix particulier de x, alors que dans la définition d'une forte résistance à la collision, nous sommes libres de choisir arbitrairement nos x et x '. Cela semble toujours très similaire, alors regardons deux exemples.

faible résistance aux collisions

Un bon exemple où nous ne sommes réellement intéressés que par une faible résistance aux collisions serait un simple schéma de stockage de mot de passe. Supposons que nous stockons les mots de passe fournis par l'utilisateur dans une base de données en stockant leur hachage. L'authentification réussit lorsque le hachage d'un mot de passe fourni par un utilisateur est égal à la valeur qui a été stockée précédemment (c'est un schéma intrinsèquement non sûr, mais veuillez me garder pour le moment). Maintenant, dans ce cas, le x donné est le mot de passe d'origine (inconnu) qui a été fourni plus tôt. Si un attaquant était capable de résoudre efficacement le problème de la "deuxième pré-image", il pourrait obtenir un x 'dont la valeur de hachage est la même que celle du x d'origine, et serait ainsi authentifié avec succès. Veuillez noter que la capacité à produire des collisions arbitraires (c'est-à-dire à résoudre le problème des collisions fortes) est inutile en général dans ce scénario car il est peu probable que les x et x 'que nous obtenons ressemblent à des mots de passe réels dont les hachages ont déjà été stockés dans la base de données .

Forte résistance aux collisions

Un autre scénario où notre préoccupation est une forte résistance aux collisions est par exemple une application dans laquelle vous souhaitez pouvoir rechercher des données arbitraires stockées dans une base de données à l'aide d'identifiants uniques. Au lieu d'émettre des requêtes sur les données d'origine (qui seraient souvent très lentes en raison de la taille potentiellement illimitée des données), vous devriez plutôt calculer des hachages des données. Les hachages sont très compacts, limités dans leur taille et peuvent ainsi être interrogés beaucoup plus efficacement. En fait, dans ces cas, vous ne vous souciez pas du tout de la (deuxième) propriété de résistance à la pré-image d'une fonction de hachage, principalement parce que les pré-images elles-mêmes ne sont pas un secret. Ce qui vous importe cependant, c'est que vous souhaitiez absolument éviter que deux ensembles de données distincts ne hachent la même valeur, ce qui est essentiellement une collision. Vous ne vous souciez pas d'une collision en particulier, mais vous souhaitez que cette propriété soit universelle - c'est-à-dire que vous ne voulez pas deux ensembles de données hachés la même valeur (imaginez qu'il existe une "contrainte unique" définie sur cette colonne). Parce que la sécurité n'est souvent pas un problème dans ces applications, nous utilisons souvent des hachages non cryptographiques, principalement parce qu'ils fonctionnent mieux.

La relation entre les deux

Intuitivement et aussi sous-entendu par leurs noms, nous supposerions qu'une forte résistance aux collisions est quelque chose qui est plus difficile à fournir qu'une faible résistance aux collisions. Heureusement pour nous, notre intuition peut se révéler correcte sous le modèle Oracle aléatoire. Nous pouvons le prouver en contraposant en supposant que si nous avions un algorithme polynomial probabiliste efficace pour résoudre la "deuxième préimage", cela nous donnerait également un algorithme efficace pour résoudre la "collision".

Considérons une fonction de hachage h et cet algorithme probabiliste simple suivant [1]:

Soit 2ndPreimage un autre algorithme probabiliste (e, Q) qui résout la "deuxième préimage" pour la fonction de hachage h.

Choose x uniformly at random
value = 2ndPreimage(h, x)
case value == failure -> return failure
case value == x' (!= x) -> return (x, x')

Il est facile de voir qu'il s'agit également d'un algorithme (e, Q) qui résout le problème des collisions fortes. Cela implique qu'étant donné que nous avons un algorithme pour résoudre la "seconde pré-image", nous pouvons également utiliser cet algorithme susceptible de produire une collision. Comme nous n'avons fait aucune hypothèse sur la fonction de hachage sous-jacente h, nous pouvons maintenant dire en toute sécurité que

Une forte résistance à la collision implique une faible résistance à la collision, mais l'inverse ne tient pas nécessairement.


[1] e est la probabilité de réussite de l'algorithme, 0 <= e <1. Q est le nombre maximal de requêtes Oracle (c'est-à-dire les "évaluations" de l'algorithme). En cas de succès, l'algorithme renvoie une solution valide, sinon il renvoie une valeur indiquant l'échec.

65
emboss

J'ai écrit cette réponse en raison du commentaire d'Alexandre; Toutes les définitions sont copiées; Bases de la fonction de hachage cryptographique: définitions, implications et séparations pour la résistance à la pré-image, la résistance à la deuxième pré-image et la résistance à la collision par P. Rogaway et T. Shrimpton.

  • résistance à la pré-image - pour pratiquement toutes les sorties prédéfinies, il est impossible sur le plan informatique de trouver une entrée qui hache cette sortie, c'est-à-dire de trouver une pré-image x' Tel que h(x') = y quand on lui donne un y pour lequel une entrée correspondante n'est pas connue.
  • Résistance de 2e pré-image, faible collision - il est impossible de trouver une deuxième entrée ayant la même sortie que n'importe quelle entrée spécifiée, c'est-à-dire x, pour trouver une 2e pré-image x' != x telle que h(x) = h(x').
  • résistance à la collision, collision forte - il est impossible de calculer deux entrées distinctes x, x' qui hachent à la même sortie, c'est-à-dire telle que h(x) = h(x').

Fait 1 : La résistance à la collision implique une résistance de 2e image avant les fonctions de hachage.

Fait 2: La résistance de 2e pré-image implique une résistance de pré-image.


Comme Alexander l'a noté, selon le principe du pigeonhole, lorsque l'espace d'entrée plus grand que l'espace de sortie de la fonction de hachage, les collisions sont inévitables.

2
kelalaka