• Aucun résultat trouvé

Attaque contre le mode cascade sans tramage

Partie IV Construction de fonctions de hachage

8.5 Attaque contre le mode cascade sans tramage

On impose que le dernier symbole de la suite de tramage ait une forme différente (on rappelle que b désigne le nombre de bits d’un bloc de message) :

(1, |M| mod b) ∈ {0, 1} × {0, 1}15

Dans la suite, on fera référence à cette proposition, qui est la proposition concrète de Rivest, par l’anagramme DMD-CP (pour Dithered Merkle-Damgård – Concrete Proposal).

La motivation originelle de cette proposition est de réduire le coût de calcul du tramage, mais cela a également comme conséquence involontaire d’augmenter la complexité de la suite de tramage générée, par rapport à la suite de Keränen. Cependant il est possible de prouver que cette augmentation reste assez faible :

Lemme 8.2. Soit c la suite obtenue par dilution de k par un compteur sur 13 bits. Alors pour tout 0 ≤ ℓ < 213, on a :

F actc(ℓ) = 8 · ℓ + 32760.

La dilution ne génère pas une suite de complexité exponentiellement plus grande que celle de Keränen : elle est toujours linéaire en ℓ, même si le terme constant est plus grand à cause du compteur.

8.5

Attaque contre le mode cascade sans tramage

Nous allons maintenant décrire une nouvelle attaque pour trouver une seconde préimage sur un mode itéré. Elle s’appuie fortement sur la structure d’arbre de collision (aussi appelée diamant) introduite par Kelsey et Kohno [KK06]. Avant de présenter l’attaque qui l’utilise contre le mode cascade avec tramage, on décrit une version plus simple de cette attaque contre le mode cascade sans tramage.

8.5.1 La structure d’arbre de collision

Un arbre de collision de taille ℓ est une multicollision qui a la forme d’un arbre binaire complet de hauteur ℓ, avec 2ℓ feuilles. Ses nœuds sont étiquetés par des valeurs de chainage sur n bits

et ses arêtes sont étiquetées par des blocs de message sur b bits, de telle sorte que si (y, y′) est

une arête étiqueté par x ∈ {0, 1}b alors h(y, x) = y. Par conséquent, de n’importe laquelle des

2ℓ feuilles, il part un chemin étiqueté par ℓ blocs de message et qui mène à la même valeur cible

yT, étiquette de la racine de l’arbre.

Un arbre de collision de profondeur ℓ peut être construit avec une complexité en temps et en espace de 2n2+ℓ2+2. Tout d’abord, choisir 2ℓ valeurs distinctes yi pour les feuilles de l’arbre et

2n/2−ℓ/2+1 blocs de message mj. Pour chacun des couples (i, j), calculer h(yi, mj) et trouver tous

les quadruplets (u, u′, v, v) tels que u 6= v et h(yu, mu′) = h(yv, mv′). Des expériences menées

par Kelsey et Konho (voir [KK06] pour plus de détails) montrent qu’avec grande probabilité il existe 2ℓ−1 quadruplets (u

i, u′i, vi, vi′)1≤i≤2ℓ−1 tels que, pour tout i 6= j : ui 6= vi 6= uj 6= vj. À

partir de ces quadruplets, nous pouvons construire le premier étage de notre arbre binaire de collision : pour chacun des quadruplets (ui, u′i, vi, v′i)1≤i≤2ℓ−1 on crée une arête étiquetée par mu

i

entre yui et yi′ = h(yui, mui′) et on crée une arête étiquetée par mv′i entre yvi et y′i. On a 2ℓ−1

valeurs y′

i, avec forte probabilité toutes distinctes, et on reitère l’algorithme précédent jusqu’à

avoir construit les ℓ étages de l’arbre de collisions. La construction du ie étage nécessite 2i

fois O(2n/2−i/2+1) requêtes à h, donc au total

O(2n/2+i/2+1) requêtes. La construction d’un arbre de collision de taille ℓ exige donc O(2n/2+ℓ/2) requêtes à h.

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

8.5.2 Attaque en seconde préimage sur le mode cascade

Soit M un message cible constitué de 2k blocs. L’idée principale de notre attaque est que

connecter un message à un arbre de collision peut être fait en moins de 2n appels à la fonction

de compression. Par ailleurs, connecter la racine de l’arbre à une des 2k valeurs de hachage

intermédiaires calculées durant le calcul de H(M) prend seulement 2n−k appels à la fonction de

compression. L’attaque fonctionne en 4 étapes comme décrit dans la figure 8.1.

1. Génération de l’arbre de collision : créer un arbre de collision de profondeur ℓ avec des feuilles de valeur deux à deux distinctes ; soit yT la valeur de la racine.

On remarque que ceci peut être fait une seule fois, et peut être réutilisé pour calculer des secondes préimages pour de multiples messages.

2. Connecter yT à une valeur de hachage intermédiaire du message M. Ceci peut être

fait en générant des blocs de message aléatoires B, jusqu’à ce que h(yT, B) = yi0

pour un certain i0, ℓ + 1 ≤ i0 < |M|b. Soit B0 un bloc de message satisfaisant

cette condition.

3. Générer un préfixe quelconque P constitué de i0− ℓ − 1 blocs et dont le haché

est une des valeurs étiquetant une des feuilles de l’arbre de collision. Soit y = h∗(IV, P ) cette valeur et soit T la chaîne de ℓ blocs traversant l’arbre de collision

de y jusqu’à yT.

4. Former le message M′ = P kT kB

0kxi0+1. . . x2k.

Fig. 8.1 – Résumé de l’attaque contre le mode cascade classique.

Les messages M′ et M sont de même taille et ont la même valeur de hachage intermédiaire

avant le renforcement, par conséquent ils produisent la même valeur de hachage malgré le ren- forcement de Merkel et Damgård.

Un arbre de collision de profondeur ℓ peut être construit avec une complexité en temps et en espace de 2n2+

2+2. La seconde étape de l’attaque peut être effectuée avec 2n−k appels à la

fonction de compression, et la troisième avec 2n−ℓ appels. La complexité temporelle totale de

l’attaque est donc : 2n2+ℓ2+2+ 2n−k+ 2n−ℓ. Cette expression est minimale pour ℓ = (n − 2)/3, et

dans ce cas, le coût total devient approximativement 5 · 22n/3+ 2n−k.

8.5.3 Comparaison avec Kelsey et Schneier

Contre le mode cascade originel, l’attaque de [KS05] est plus efficace que la nôtre (sur SHA-1, ils peuvent trouver une seconde préimage d’un message de taille 255 en 2105, alors que nous avons

besoin de 2109 appels à la fonction de compression pour obtenir le même résultat).

Cependant, notre technique donne à l’adversaire plus de contrôle sur la seconde préimage, puisqu’elle permet typiquement de choisir librement tous les blocs de P sauf 1 (P a été introduit dans la figure 8.1), soit à peu près la première moitié du message. Par exemple, on peut choisir de répliquer la plupart du message cible, ce qui mène à une seconde préimage qui diffère du message original par seulement ℓ + 2 blocs.

La différence apparente principale entre les deux techniques est que l’attaque de Kelsey et Schneier s’appuie sur les messages extensibles. Leur attaque construit un message extensible en temps k · 2n/2+1. Notre attaque peut aussi être vue comme une nouvelle technique plus flexible

pour construire des messages extensibles, en choisissant un préfixe de la bonne taille et en le connectant à l’arbre de collision. Ceci peut être fait en temps 2n/2+k/2+2+ 2n−k. Bien qu’elle soit