web-dev-qa-db-fra.com

propriétés d'une fonction de hachage cryptographique

Dans la première semaine du cours bitcoin coursera, il y a une discussion sur les 3 propriétés des fonctions de hachage cryptographique:

Résistance à la collision: Une fonction de hachage H est dite résistante à la collision s'il est impossible de trouver deux valeurs, x et y, telles que x! = Y, et pourtant H (x) = H (y).

Cacher: Une fonction de hachage H se cache si: quand une valeur secrète r est choisie dans une distribution de probabilité d'entropie élevée, alors étant donné H (r ‖ x), il est impossible de trouver x. ‖ Signifie concaténation de deux chaînes.

Puzzle convivialité. Une fonction de hachage H est dite facile à utiliser si pour chaque valeur de sortie n-bit possible y, si k est choisi dans une distribution à entropie élevée, il est alors impossible de trouver x tel que H (k ‖ x) = y dans le temps nettement moins que 2 ^ n.

La convivialité du puzzle semble être une description plus détaillée de la dissimulation. Y a-t-il des différences significatives entre les 2? Existe-t-il des fonctions de hachage avec l'une des propriétés mais pas les deux?

15
user2191332

J'ai eu la même pensée, et la différence est en effet subtile. Je devais penser à ça pendant un moment. 

Supposons que vous ayez un hash, BadHash. Vous choisissez x 'et un nonce aléatoire', calculez y '= BadHash (r' | x ') et donnez-moi y'. Il s'avère que si x 'est un texte anglais codé en UTF8, je peux vous dire ce que x' était, et (bien que cela ne soit pas strictement nécessaire), je peux même vous dire r '. Si x 'se trouvait être juste une chaîne de bits aléatoire, je n'aurais pas de chance. Mais peu importe, ce n'est clairement pas un hachage caché. 

Maintenant, le puzzle: je vous donne une valeur Y 'et une valeur choisie au hasard R' (disons "11110011 ... 100"), et je vous demande de trouver un x tel que BadHash (R '| x) = Y'. Bonne nouvelle: il s’avère que Y '= BadHash (00101 ... 0001 | UTF8 ("Le bitcoin est déflationniste")). Donc, comme BadHash ne cache pas (plus), vous pouvez déterminer un R (à savoir 00101 ... 0001), et et x (à savoir UTF8 ("Bitcoin est déflationniste")), tel que BadHash (R | x) = Y 'Mais cela ne vous aide pas, car le puzzle spécifiait qu'il vous fallait un x compatible avec un autre R, à savoir "11110011 ... 100". Donc, vous n'avez pas résolu le puzzle.

Vous voyez alors que les deux propriétés ne sont pas équivalentes. Quant à savoir s’il existe vraiment des empreintes avec une propriété mais pas l’autre - cela je ne le sais pas.

6
David

La restructuration des définitions m'a apporté un peu plus de clarté.

Résistance à la collision:

Étant donné: x et h (x)

Difficile à trouver: y qui est distinct de x et tel que h (y) = h (x).

Cache:

Étant donné: h (r | x)

Secret: x et un r hautement improbable et choisi au hasard

Difficile à trouver: y tel que h (y) = h (r | x).

Ceci diffère de la résistance aux collisions en ce que peu importe que y = r | x ou pas.

Puzzle-convivialité:

Étant donné: z et un r hautement improbable et choisi au hasard

Difficile à trouver: x tel que h (r | x) = z (mais il devrait exister).

Ceci diffère de la résistance aux collisions en ce que même si nous avons un algorithme pour trouver une collision y, la contrainte que la solution doit commencer par r peut ne pas faire de y une solution.

Ceci est différent de cacher, de même, parce que r est une contrainte pour la solution de convivialité pour les casse-tête, mais pas pour la propriété de masquage, car il n'est pas nécessaire que y soit égal à r | x dans ce cas . - convivialité, x n’est connu d’aucune manière à l’avance (pas même le casse-tête).

7
user2191332

Ce cours est extrêmement déroutant et mal écrit.

Dans le problème de la dissimulation, vous essayez de trouver x, connaissant la valeur H (r | x) (et connaissant H bien sûr). Mais tu ne sais pas r! Par exemple, l'ensemble pour x pourrait être {0,1} mais vous ne pouvez pas choisir entre 0 ou 1 car l'ajout d'un secret r à x mélange tous les hachages possibles.

Dans le problème du puzzle, k (ou r) est donné! Le problème ici est d’essayer tous les x possibles jusqu’à trouver celui qui donne le hachage correct y. Vous finirez donc par en trouver un, mais cela prendra du temps. (La raison d'avoir k (ou r) dans la définition est déroutante, cela signifie simplement que nous ne pouvons pas tricher en ayant déjà inversé H). 

Dans le problème de la dissimulation, même si vous essayez tout le possible r et x pour H avant. Cela ne fonctionnera pas car vous pourriez trouver r ', x', r '', x '' tel que H (r '| x') = H (r '' | x ''). Et puisque vous ne savez pas quelle valeur de r est la valeur correcte, il est impossible de trouver x.

4
borilla

Ayons: y = H(x|r). Ici, le résultat est y et les entrées sont r et x.

Cacher la propriété:

Étant donné la sortie d'une fonction de hachage (y), il est impossible de trouver une entrée (x). Note, r n'est pas donné.

Puzzle-friendly property:

Étant donné la sortie d'une fonction de hachage (y) et une partie de l'entrée (r), il est difficile de trouver une entrée (x).

4
DeveScie

Supposons que x soit le résultat d'un tirage au sort, c'est-à-dire. x vaut 0 ou 1. Étant donné H(x), personne ne devrait pouvoir trouver x, mais ... Un attaquant peut facilement trouver x, étant donné que y = H (x), puisqu'il n'y a que deux hash valeurs. Il calcule H(0) et H(1) et vérifie lequel est égal à y.

Supposons maintenant que vous ajoutiez une grande clé aléatoire à x et calculiez H (k x). Si la clé est secrète, l'attaquant ne peut pas trouver x facilement, car il devrait essayer un grand nombre de clés secrètes possibles.

C'est en fait sur les diapositives du cours :-), mais pas vraiment expliqué avec des mots.

0
J. Schneider

Considérez cet algo: Prenez n'importe quel fichier texte et supposez a = 1, b = 2, c = 3 et ainsi de suite et calculez la somme pour toutes les lettres. Si la somme nette est inférieure à 5, vous remportez un prix. Disons que vous n'avez pas gagné la première fois. Vous devez donc ajouter du texte arbitraire à la fin de ce fichier (nonce) et refaire ce calcul jusqu'à ce que vous gagniez.

Cet algorithme est facile à résoudre, mais ne cache pas bien, car vous pouvez facilement deviner l’effet que le nonce aura sur la sortie.

0
Kang