• Aucun résultat trouvé

Attaque en seconde préimage contre le mode cascade avec tramage

Partie IV Construction de fonctions de hachage

8.6 Attaque en seconde préimage contre le mode cascade avec tramage

plus coûteuse, cette nouvelle technique peut être adaptée pour fonctionner quand un tramage est ajouté en entrée, comme nous allons le montrer dans la suite.

8.6

Attaque en seconde préimage contre le mode cascade avec

tramage

Dans cette section, nous présentons la première attaque en seconde préimage connue contre le mode cascade tramé de Rivest. Dans la sous-section 8.6.2, nous adaptons l’attaque de la sec- tion 8.5 à Keränen-DMD et on obtient une préimage en temps (k + 40.5) · 2n−k+3. On applique

ensuite l’attaque étendue à DMD-CP, et on obtient alors une seconde préimage en approximati- vement 2n−k+15 évaluations de la fonction de la compression.

8.6.1 Adaptation de l’attaque contre le mode cascade avec tramage

On se place dans un cadre général en supposant que l’algorithme de hachage utilise une suite de tramage quelconque z. Quand on construit l’arbre de collision, on doit choisir quels symboles de tramage utiliser. Une solution simple est d’utiliser le même symbole de tramage pour toutes les arêtes situées à la même profondeur dans l’arbre. Nous allons également avoir besoin d’une lettre supplémentaire pour connecter l’arbre de collision au message M. Ainsi, afin de construire un arbre de collision de profondeur ℓ, nous devons fixer un mot ω de taille ℓ + 1, utiliser ω[i] comme symbole de tramage à la profondeur i et utiliser la dernière lettre de ω pour réaliser la connexion.

La séquence de tramage rend le haché d’un bloc dépendant de sa position dans le message. Par conséquent, l’arbre de collision ne peut être connecté à sa cible qu’à certaines positions, à savoir aux positions où ω et z coincident. L’ensemble des positions dans le message où cela est possible est donc donné par :

Range(ω) =ni ∈ N ℓ + 1 ≤ i∧ z[i − ℓ] . . . z[i] = ωo.

En d’autre termes, lors de la seconde étape de l’attaque, on trouve un bloc B0 pour connecter

l’arbre de collision au message, c’est-à-dire tel que h(yT, B0, ω[ℓ + 1]) = yi0. Si i0 ∈ Range(ω),

il va être possible de construire la seconde préimage. Sinon, il faut recommencer et trouver un autre bloc B0. On voit que plus ω est présent dans z, c’est-à-dire plus Range(ω) est de grande

taille, plus on a de chance que i0 soit dans Range(ω) et moins on sera obligé de recommencer.

Idéalement, ω devrait donc être le facteur de longueur ℓ + 1 qui apparaît le plus fréquemment dans z. Quelle est la probabilité que ce facteur le plus fréquent ω apparaisse à une position aléatoire dans z ? Bien que cette probabilité soit fortement dépendente de la suite considérée, il est possible de donner une borne générique : dans le pire des cas, tous les facteurs de taille ℓ + 1 apparaissent dans z avec la même fréquence. Dans ce cas, la probabilité qu’un facteur de taille ℓ + 1 choisi au hasard dans z soit le mot ω est égale à 1/F actz(ℓ + 1). En moyenne, on

sera donc amené à recommencer la deuxième étape au plus F actz(ℓ + 1), avant de trouver un

i0 ∈ Range(ω).

La dernière étape de l’attaque est similaire à l’attaque originelle. L’attaque est résumée dans la figure 8.2 ci-après.

La complexité des premières et dernières étapes ne change pas. Par contre celle de la deuxième étape varie. Le coût de la recherche d’une seconde préimage pour une suite donnée z, dans le pire des cas où tous les facteurs apparaissent avec exactement la même fréquence, est donné par :

2n2+ ℓ

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

1. Choisir le facteur ω le plus fréquent de z, avec |ω| = ℓ + 1.

2. Construire un arbre de collision de profondeur ℓ en utilisant ω comme symboles de tramage pour chaque chemin reliant une feuille à la racine. Soit yT l’étiquette

de la racine de l’arbre.

3. trouver un bloc B0 connectant yT à n’importe que yi(disons yi0) en utilisant ω[ℓ+

1] comme lettre de tramage. Répéter cette étape jusqu’à ce que i0 ∈ Range(ω).

4. Mener les dernières étapes de l’attaque comme décrit dans la figure 8.1. Fig. 8.2 – Résumé de l’attaque quand on utilise une suite de tramage z.

On remarque que la propriété principale de z influençant le coût de cette deuxième étape est sa complexité, alors que son absence de répétition influe le coût de l’attaque de Kelsey et Schneier.

8.6.2 Application aux fonctions proposées par Rivest

On va appliquer l’attaque précédente au cas particulier des fonctions proposées par Rivest, contre lesquelles elle se révèle particulièrement efficace.

Cryptanalyse de Keränen-DMD

Le coût de l’attaque étendue contre Keränen-DMD dépend de la complexité de la suite k. Le lemme 8.1 nous dit que F actk(ℓ) ≤ 8 · ℓ + 332 pour ℓ ≤ 85. Malgré la forte absence de répétitions,

la suite k offre un faible niveau de sécurité contre notre attaque puisque en évaluant le coût de notre attaque sur Keranen-DMD on obtient :

2n2+2ℓ+2+ (8 · ℓ + 340) · 2n−k+ 2n−ℓ.

Si n est du même ordre de grandeur que 3k, alors le premier terme de cette somme est du même ordre de grandeur que les deux autres et si n ≫ 3k alors il devient négligeable. Nous utilisons cette approximation plusieurs fois dans la suite. En choisissant ℓ = k − 3, le coût total de l’attaque est approximativement de (k + 40.5) · 2n−k+3 ce qui est beaucoup plus petit que 2n

malgré le tramage. Pour sha–1 par exemple, la complexité est d’environ 2115.

Finissons cette application par une remarque. Avec ℓ = 50, et supposant que tous les facteurs ont la même fréquence d’apparition dans k, la probabilité qu’un bloc, connectant l’arbre de collision au message, tombe dans Range(ω), pour n’importe quel ω, est de 2−9.5. On observe

que dans les premiers 230 symboles de k il y a des facteurs de taille 50 qui n’apparaissent que

910237 fois alors que d’autres apparaissent 2941800 fois. En choisissant un de ces derniers et en supposant que sa fréquence d’apparition est la même tout au long de k, la probabilité d’apparition devient 2−8.5. Approximer la complexité de l’attaque en utilisant F act(ℓ+1) conduit à une bonne

estimation du coût réel de l’attaque, c’est pourquoi on s’est contenté de la borne issue du cas où tous les messages sont équiprobables.

Cryptanalyse de DMD-CP

Nous appliquons maintenant l’attaque contre la proposition concrête de Rivest. Comme ex- pliqué dans la section 8.4.2, on rappelle que la suite utilisée pour cette proposition est basée sur la suite de Keränen, mais que l’on change de symbole seulement quand un compteurs sur 13 134