• Aucun résultat trouvé

Attaque contre une famille de fonctions de hachage universelle à sens unique

Partie IV Construction de fonctions de hachage

8.7 Attaque contre une famille de fonctions de hachage universelle à sens unique

bits repasse à 0. On rappelle que le lemme 8.2 nous dit que la complexité de cette suite c est F actc(ℓ) = 8 · ℓ + 32760 pour tout 0 ≤ ℓ < 213. Le coût de l’attaque vaut par conséquent :

2n2+ ℓ

2+2+ (8 · ℓ + 32768) · 2n−k+ 2n−ℓ.

Encore une fois, si n est plus grand qu’environ 3k, la meilleure valeur pour ℓ est k − 3 et la complexité de l’attaque est donc approximativement : (k + 4094) · 2n−k+3 ≃ 2n−k+15. Dans le

cas de SHA-1, une seconde préimage peut être calculée en temps 2120.

8.7

Attaque contre une famille de fonctions de hachage univer-

selle à sens unique

Dans cette section, nous montrons que notre attaque est suffisamment générique pour être appliquée contre des fonctions possédant des propriétés de sécurité différentes, à savoir des fa- milles de fonctions de hachage universelles à sens unique (ou UOWHF pour Universal One-Way Hash Function en anglais). Une UOWHF est une famille de fonctions de hachage H pour laquelle tout adversaire A calculatoirement limité gagne le jeu suivant avec probabilité négligeable. Tout d’abord A choisit un message M et l’envoie au challenger, ensuite ce dernier choisit une clef K parfaitement au hasard et la donne à A. L’adversaire gagne s’il casse la résistance aux collisions ciblées ou propriété TCR (pour Target Collision Resistance), c’est-à-dire s’il génère un message M′ différent de M qui collisionne pour la clef K (i.e. tel que HK(M ) = HK(M′) avec M 6= M′).

Shoup [Sho00a] a proposé une construction simple pour une UOWHF qui hache des messages de taille arbitraire, étant donnée une UOWHF qui hache des messages de taille fixée. C’est un mode opératoire itéré, mais avant chaque itération, on choisit un masque parmi plusieurs possibles et on le xor à la valeur de chaînage. Le nombre de masques est logarithmique en la taille du message haché et l’ordre dans lequel ils sont utilisés est choisi attentivement pour maximiser la sécurité du schéma. Cette construction nous évoque le hachage avec tramage, à la nuance que le processus de tramage utilisé ici ne baisse pas la bande passante destinée aux données.

Tout d’abord nous décrivons rapidement la construction de Shoup et ensuite nous montrons comment notre attaque peut être appliquée. La complexité de l’attaque prouve que pour cette construction particulière la borne de sécurité prouvée par Shoup est presque fine.

8.7.1 Description de la famille

Cette construction a quelques similarités avec le mode cascade avec tramage. Soient h une famille de fonctions de hachage universelle à sens unique dont l’entrée est de taille fixe et K une clef, on a donc hK: {0, 1}n× {0, 1}b → {0, 1}n. Cette fonction de compression est ensuite itérée,

comme décrit ci-dessous, pour obtenir une UOWHF d’entrée de taille variable HK.

Le schéma utilise un ensemble de masques µ0, . . . , µk−1(où 2k−1 est la longueur du plus long

message possible), chacun d’entre eux étant une chaîne de bits choisie parfaitement au hasard dans {0, 1}n. La clef de la grande fonction est constituée de K et des masques. Après chaque

application de la fonction de compression, un masque est xoré à la valeur de chaînage. L’ordre dans lequel les masques sont appliqués est défini par une suite sur l’alphabet A = {0, . . . , k − 1}. Cette suite est z[i] = ν2(i), pour 1 ≤ i ≤ 2k− 1, où ν2(i) désigne le plus grand entier ν tel que

2ν divise i. Soit M un message tel que Mpad peut être divisé en m blocs x1, . . . , xm et soit y0

une chaîne de n bits quelconque. On définit yi= hK yi−1⊕ µν2(i), xi



Chapitre 8. Attaque en seconde preimage contre des fonctions de hachage avec tramage

8.7.2 Adaptation de l’attaque

Dans [Sho00a], Shoup prouve le résultat de sécurité suivant :

Théorème 8.2 (Résultat principal de [Sho00a]). Si un adversaire est capable de casser la pro- priété de résistance aux collisions ciblées de H avec probabilité ε en temps T , alors on peut construire un adversaire qui casse la résistance aux collisions ciblées de h en temps T , avec probabilité ǫ/2k.

Dans cette section, nous montrons que cette borne est presque fine. Tout d’abord, nous donnons une définition alternative de la suite de tramage z. On définit :

ui =

(

0 si i = 1,

ui−1.(i − 1).ui−1 sinon.

Par exemple, on a u4 = 010201030102010. On montre facilement par récurrence que pour tout

i, la taille de ui est égale à |ui| = 2i− 1 et que ui est un préfixe de z. La séquence de tramage

est donc simplement uk.

La définition précédente nous montre également que pour tout i, ui est compris 2 fois dans

ui+1, 4 fois dans ui+2,. . . On peut donc montrer par récurrence que ui est compris 2k−i fois dans

uk = z.

Enfin, soit ℓ un paramètre que l’on fixera plus tard. Un des facteurs de z de taille ℓ + 1 < 2k

les plus fréquents est le préfixe de taille ℓ + 1 de z, que l’on note ω. C’est aussi un préfixe de uj pour j = ⌈log2(ℓ + 2)⌉ (mais pas de uj−1 car uj−1 est trop petit). Or uj lui-même apparaît

2k−j fois dans z = uk d’après la remarque précédente donc ω apparaît 2k−j fois dans z = uk.

La probabilité qu’un facteur de taille ℓ + 1 pris aléatoirement dans z soit ω est égal au nombre d’occurences de ce candidat divisé par le nombre de chaînes de ℓ + 1 bits dans z. Par conséquent, cette probabilité est 2k−j

2k−ℓ−1. Cette quantité peut être minorée par 2−j ≥ 2(ℓ+2)1 .

Notre attaque peut être adaptée contre la propriété TCR de H de la manière suivante. Tout d’abord, on choisit au hasard un long message cible M de taille 2k− 1. Une fois que la clef

est choisie au hasard par le challenger et nous est donnée, on construit un arbre de collision en utilisant les ℓ premières lettres de ω pour son tramage et on continue l’attaque comme indiqué dans la section 8.6. Comme lorsque l’on réussit à raccorder l’arbre de collision à une valeur intermédiaire de chaînage i0, la probabilité que i0 ∈ Range(ω) est supérieure à 1/2(ℓ + 2), il

faudra recommencer approximativement 2(ℓ + 2) fois avant de réussir à bien raccorder l’arbre de collision. Le coût de cette étape est donc 2(ℓ + 2) · 2n−k. Le coût total de l’attaque est donc

environ :

T = 2n2+2ℓ+2+ 2(ℓ + 2) · 2n−k+ 2n−ℓ.

Cette attaque casse la propriété TCR avec probabilité presque 1. Par conséquent, en utilisant le résultat de Shoup, on peut construire un adversaire A contre h en temps T et avec probabilité de succès environ 1/2k. Si h est une boîte noire, la meilleure attaque contre la propriété TCR

est la recherche exhaustive. Par conséquent, le meilleur attaquant en temps T contre h a une probabilité de succès égale à T/2n. Quand n ≥ 3k, on fixe ℓ = k − 1 et on a T ≃ (2k + 4) · 2n−k.

Par conséquent le meilleur adversaire en temps T contre la propriété TCR de h a une probabilité de succès en O(k/2k), alors que la probabilité de succès de A dans le même temps est de 1/2k.

On en déduit qu’il y a uniquement un facteur k entre notre attaque et la preuve de sécurité de Shoup, il n’y a pas donc pas d’attaque vraiment meilleure que la notre et par ailleurs la preuve de Shoup est assez fine.

8.7. Attaque contre une famille de fonctions de hachage universelle à sens unique

8.7.3 Amélioration de l’attaque

Il est possible d’améliorer l’attaque précédente de façon à obtenir seulement un facteur O(log2(k)) entre la preuve de Shoup et notre attaque. Dans ce but, nous utilisons l’astuce sui-

vante. À la place de s’intéresser au mot le plus fréquent de taille ℓ + 1, nous construisons un arbre de collision pour chacun des facteurs de taille ℓ, puis nous agrégeons tous ces arbres grâce à un dernier arbre de collision de taille s, pour lequel nous utilisons comme tramage le mot le plus fréquent de taille s + 1. On verra que s + 1 est plus petit que ℓ et donc qu’il est plus facile de connecter cet arbre de collision au message.

Avant de présenter l’attaque plus en détail, montrons qu’il y a moins de kℓ facteurs de taille ℓ dans uk. Un mot v de taille ℓ est uniquement déterminé par la valeur de la lettre la plus grande

contenue dans v et par son emplacement dans v. Comme l’alphabet contient moins de k lettres, il y a au plus k possibilités pour la lettre la plus grande de v. Il y a au plus ℓ emplacements où on peut placer cette lettre, puisque v à ℓ lettres. Par conséquent, il y a au plus kℓ mots de ℓ lettres.

Soit s tel que 2s ≥ kℓ, c’est-à-dire s = ⌈log

2(kℓ)⌉, soit ω le préfixe de uk de s + 1 lettres de

long et soient ω1, . . . , ωkl tous les mots de taille ℓ. L’attaque est décrite dans la figure 8.3.

1. Choisir M = x1, . . . , x2k−1 au hasard de taille 2k− 1 blocs et l’envoyer au chal-

lenger qui répond par la clef,

2. Calculer le haché de M, soit y1, . . . , y2k−1 les valeurs intermédiaires de chaînage

lors du calcul du haché de M.

3. Pour tous les 1 ≤ i ≤ kℓ générer un arbre de collision de taille ℓ en utilisant ωi

pour le tramage, on note yT,i sa valeur cible,

4. Construire un arbre de collision de taille s, en utilisant les s premières lettres de ω pour le tramage et en choisissant comme feuilles de l’arbres les yT,i, soit yT sa

valeur cible,

5. Relier ce dernier arbre de collision au message : soient i0 et B0 tels que

h(yT, B0, ω[s + 1]) = yi0, si i0 6∈ Range(ω) alors recommencer cette étape,

6. Soit ωj = z[i0− s − ℓ] . . . z[i0− s − 1], sélectionner l’arbre de collision fait avec

ωj comme tramage et relier IV à une feuille, notée y, de cette arbre en utilisant

un message P de taille i0− s − ℓ,

7. Soit T le message induit par le chemin dans l’arbre de collision de y à yT,j

et par le chemin dans l’arbre de collision de yT,j à yT ; renvoyer M′ =

P kT kB0kxi0+1. . . x2k−1.

Fig. 8.3 – Résumé de l’attaque améliorée contre une UOWHF. Le coût de la construction des kℓ arbres de collisions est Okℓ · 2n2+

ℓ 2+2



, le coût du calcul de l’arbre de collision pour ω est O2n2+

s 2+2



, ce qui est négligeable face au coût précédent, le coût du raccord de l’arbre de collision de ω est 2(s + 2) · 2n−k et enfin le coût du raccord de IV

à une feuille de l’arbre est 2n−ℓ. Comme s ≈ log

2(kℓ), le coût total de l’attaque est :

T = Okℓ2n2+ ℓ 2+2+ 2(log 2(kℓ) + 2) · 2n−k+ 2n−ℓ  .

En prenant ℓ = k − 1 et si n ≫ 3k + 4 log2(k), alors T = O(log2(k) · 2n−k) et un raisonnement

identique à celui mené à la sous-section précédente prouve qu’il n’y a qu’un facteur log2(k) entre la preuve de Shoup et notre attaque. La preuve est donc d’autant plus fine.

Chapitre 8. Attaque en seconde preimage contre des fonctions de hachage avec tramage