• Aucun résultat trouvé

pa-ramétrables

Dans le chapitre précédent, les algorithmes de chiffrement par blocs ayant Kpour

ensemble de clés etMpour ensemble de messages ont été définis comme une famille

de permutations deM paramétrée par la clé k∈ K. Un algorithme de chiffrement

par blocparamétrable admet un paramètre additionnelt∈ T, éventuellement public,

appelé untweak en anglais. Son rôle est d’apporter une variabilité au chiffrement qui

soit directement intégrée à l’algorithme, à la manière d’un vecteur d’initialisation

ou d’un nonce pour un mode d’opération par exemple. Certains algorithmes de

chiffrement intègrent nativement cette fonctionnalité comme le Hasty Pudding

2.2. Les algorithmes de chiffrement par blocs paramétrables

Cipher [Sch98], Mercy [Cro00], ou Threefish (l’algorithme de chiffrement par blocs

utilisé dans la famille de fonctions de hachage Skein [FLS

+

10]). La syntaxe et les

notions de sécurité des algorithmes de chiffrement par blocs paramétrables ont été

formellement définies dans un article initial de Liskov, Rivest et Wagner [LRW02]. Il

est notamment attendu d’un tel algorithme qu’il soit indistinguable d’une permutation

paramétrable (c’est-à-dire une famille de permutations aléatoires et paramétrées par

l’ensemble des tweaks). Depuis lors, cette primitive a trouvé plusieurs applications

comme les modes de chiffrement (paramétrables) préservant la longueur [HR03,

HR04], le chiffrement en ligne [RZ11, ABL

+

13], le chiffrement authentifié [LRW02,

RBB03, Rog04] ainsi que le chiffrement de disque dur.

2.2.1 Les constructions génériques

Nous allons présenter différentes constructions génériques d’un algorithme de

chiffrement paramétrable à partir d’un algorithme de chiffrement par bloc standard.

SoientEun algorithme de chiffrement par blocs arbitraire, dont la sécurité est établie,

d’ensemble de clés et de messages{0,1}

n

et H une famille de fonctionsε-AXU d’un

ensembleT vers {0,1}

n

, c’est-à-dire que H vérifie la condition suivante :

t∈ T,t

0

∈ T \ {t},y∈ {0,1}

n

, Pr [h

$

H : h(t)⊕h(t

0

) = y]≤ε.

Dans leur article fondateur, Liskov et al. [LRW02] ont proposé deux

construc-tions génériques différentes et obtenu une preuve de sécurité jusqu’à la borne des

anniversaires pour chaque construction, i.e., quand l’adversaire a droit à au plus 2

n/2

requêtes aux oracles de chiffrement ou de déchiffrement. Ces deux constructions sont

les suivantes :

LRW

1k

(t, m) =E

k

(tE

k

(m)),

LRW

2h,k

(t, m) =h(t)⊕E

k

(mh(t)),

pour tout t∈ T,k ∈ {0,1}

n

, m∈ {0,1}

n

et tout h∈ H. Notons que, pour LRW

1

,

on a nécessairement T = {0,1}

n

. La simplicité de ces constructions les rend très

utiles en pratique. Toutefois, leur sécurité est limitée à la borne des anniversaires, ce

qui peut s’avérer trop faible dans certaines applications.

Il existe de nombreuses autres stratégies de conception « en boîte noire ». On

peut notamment citer des constructions comme XEX [Rog04] et ses variantes [Min06,

CS06] qui sont liées à la première proposition de Liskovet al., et souffrent de la même

limitation de sécurité à la borne des anniversaires. Plus récemment, un certain nombre

de constructions bénéficiant d’une sécurité au-delà de la borne des anniversaires ont

été publiées. Par exemple, on peut remarquer que la construction LRW

2

peut être

itérée avec des clés indépendantes, ce qui permet d’en augmenter le niveau de sécurité

au-delà de la borne des anniversaires et en le faisant tendre asymptotiquement vers

la sécurité optimale [LST12, LS14, Pro14]. Cependant, à mesure que la cascade

augmente en longueur, la quantité de calculs nécessaire à l’évaluation du schéma

augmente également, ainsi que la taille de la clé, ce qui rend cette construction

peu pratique. Il existe également d’autres constructions qui n’ont pas besoin d’être

itérées, mais offrent tout de même des garanties de sécurité au-delà de la borne des

anniversaires, comme par exemple la construction de Minematsu [Min09], notée Min,

ou celles Mennink [Men15], notées ˜F[1] et ˜F[2] :

Min

k

(t, m) =E(E(k, t

|{z} θbits

|| 0...0

| {z } nθbits

), m) pour tout (t, k, m)∈ {0,1}

θ

×({0,1}

n

)

2

˜

F[1]

k

(t, m) =E

kt

(mkt)⊕kt pour tout (k, t, m)∈({0,1}

n

)

3

˜

F[2]

k

(t, m) =E

kt

(mE

k

(t))⊕E

k

(t) pour tout (k, t, m)∈({0,1}

n

)

3

où⊗désigne le produit sur le corps fini à 2

n

éléments, pour un polynôme irréductible

arbitraire fixé. Une condition nécessaire pour la sécurité de la construction de

Minematsu est que le nombre de requêtes de l’adversaire soit petit devant 2

nθ

:

ainsi, la construction est d’autant plus sûre que l’espace detweaks est restreint. Les

constructions de Mennink sont sûres tant que le nombre de requêtes de l’adversaire

est petit devant 2

2n/3

, respectivement 2

n

. Toutes ces constructions ont une preuve

de sécurité dans le modèle standard (c’est-à-dire qu’elles supposent uniquement que

l’algorithme de chiffrement par blocs sous-jacent fournit une permutation

pseudo-aléatoire lorsque la clé est choisie uniformément pseudo-aléatoirement), à l’exception des

constructions de Mennink qui sont analysées dans le modèle de l’algorithme de

chiffrement idéal (c’est-à-dire que l’on modéliseEcomme un algorithme de chiffrement

par blocs tiré uniformément aléatoirement auquel l’adversaire a accès en boîte noire).

Il est facile de voir que, puisque l’algorithme de chiffrement E est utilisé avec la

clé kt, le simple fait que E

k

pour une clé aléatoire k soit indistinguable d’une

permutation aléatoire n’est pas suffisant ; ainsi E doit également résister à une

certaine classe d’attaques à clés reliées [BK03], pour laquelle l’attaquant est capable

de XORer des constantes de son choix à la clé utilisée par l’algorithme de chiffrement

avec lequel il interagit. Malheureusement, aucune de ces constructions génériques

ayant une sécurité au-delà de la borne des anniversaires ne peut vraiment être

considérée comme applicable en pratique (bien que certaines d’entre elles puissent

s’en approcher [Men15]). Ainsi, il est naturel d’étudier comment construire un

algorithme de chiffrement par blocs à partir d’une primitive de plus bas niveau qu’un

algorithme de chiffrement par blocs conventionnel, par exemple une permutation ou

une fonction pseudo-aléatoire.

2.2.2 Construction d’algorithmes de chiffrement par blocs

nativement paramétrables

Les premières structures permettant la construction d’algorithmes de chiffrement

nativement paramétrables ont été étudiées par Goldenberg et al.[GHL

+

07] qui ont

cherché à inclure un tweak dans un réseau de Feistel. Ce travail a été étendu aux

réseaux de Feistel généralisés par Mitsuda et Iwata [MI08]. Nous avons mené une

étude similaire pour la deuxième grande classe d’algorithmes de chiffrement par blocs,

les algorithmes de chiffrement à clé alternée, modélisés comme nous l’avons vu par la

construction d’Even-Mansour [CS15b, CLS15, CS15a] et c’est à ces travaux qu’est

consacré le reste de ce manuscrit.