de substitution-permutation et les r´eseaux de Feistel.
1.4.2 R´eseaux de substitution-permutation
Un algorithme de substitution-permutation ou SPN (Substitution Permutation Network en anglais) est constitu´e d’une succession de tours de la formeL◦S◦C, o`uCest une op´eration de m´elange de cl´e (souvent on ajoute simplement la cl´e avec un OU exclusif), S une fonction non-lin´eaire assurant la confusion et Lune fonction lin´eaire assurant la diffusion (figure1.9).
Ajout de clé
Substitution
Permutation
Figure 1.9 – Fonction de tour d’un r´eseau substitution-permutation
Cette construction ne garantit pas en elle-mˆeme l’inversibilit´e du chiffrement. Pour cette raison il est n´ecessaire que chacune des composantes soit inversible.
Le standard actuel de chiffrement par blocs, AES, suit ce principe de conception. Les r´eseaux SPN sont aussi utilis´es `a grande ´echelle pour la construction des fonctions de hachage.
Pour cet usage, l’´etape de m´elange de cl´e est ´evidemment ignor´ee.
Boˆıtes-S La construction d’une fonction non-lin´eaire ayant de bonnes propri´et´es cryp-tographiques est un probl`eme tr`es important. Cependant, la mise en œuvre d’une telle fonction de grande taille est tr`es coˆuteuse tant en termes de temps qu’en termes de m´emoire. Pour cette raison il est courant de d´ecouper l’´etat interne en petits morceaux et d’appliquer une pe-tite fonction non-lin´eaire, appel´ee boˆıte-S, ou Sbox en anglais, sur chacun d’entre eux. Parmi les primitives sym´etriques connues, certaines utilisent des boˆıtes-S de 8 bits (AES) ou des boˆıtes-S de 4 bits, comme c’est le cas du chiffrement `a bas coˆut PRESENT et des fonctions du concours SHA-3 Hamsi et Luffa. Plus rarement, des boˆıtes-S de taille 3 (chiffrement `a bas coˆut PrintCipher) ou 5 (Keccak) sont utilis´ees. Il est aussi possible dans d’autres con-structions d’utiliser des boˆıtes-S non-inversibles, comme c’est le cas de DES. Les propri´et´es de cette primitive seront discut´ees et analys´ees dans les chapitres suivants.
Description de Rijndael
Rijndael est l’exemple le plus connu des chiffrements par blocs de type SPN. Il a ´et´e con¸cu par Joan Daemen et Vincent Rijmen [DR00b,DR00a] pour la comp´etition internationale AES du NIST qui a d´ebut´e en 1997. En octobre 2002, Rijndael a remport´e le concours et a ´et´e renomm´e en AES (acronyme de Advanced Encryption Standard). Il a ´et´e ensuite normalis´e (NIST FIPS 197 [FIP01]) et est devenu le nouveau standard de chiffrement par blocs en rempla¸cant d´efinitivement son pr´ed´ecesseur DES.
Il existe plusieurs instances de l’algorithme Rijndael, Rijndael-Nb, avec Nb ∈ {128,160, 192,224,256}, qui d´ependent de la taille de l’´etat interne et de la taille de la cl´e. De fa¸con g´en´erale, nous pouvons visualiser l’´etat comme une matrice d’octets 4×Nb/32A= (ai,j). Les
´etats respectifs de Rijndael-128 et Rijndael-256 sont repr´esent´es `a la figure 1.10.
a0,0 a0,0
Figure 1.10 – Les ´etats de Rijndael-256 et Rijndael-128 La taille de la cl´e secr`eteNk peut varier entre 128, 192 et 256 bits.
Le standard AES a ´et´e fix´e `a Rijndael-128. La taille de la cl´e secr`eteNk peut varier entre 128, 192 et 256 bits. Le nombre de tours r varie lui aussi en fonction des tailles de l’´etat et de la cl´e. Nous pouvons observer le nombre de tours pour chaque version dans la table1.3.
r Nb = 128 Nb = 160 Nb= 192 Nb = 224 Nb = 256
Nk= 128 10 11 12 13 14
Nk= 192 12 12 12 13 14
Nk= 256 14 14 14 14 14
Table 1.3 – Nombre de tours r pour Rijndael en fonction de la taille de l’´etat Nb et de la taille de la cl´e Nk.
La permutation de tour R, qui s’applique sur l’´etat A = (ai,j) est compos´ee de quatre fonctions :
– SubBytes: La seule transformation non-lin´eaire du chiffrement. Chaque octet de l’´etat est mis `a jour par une boˆıte-S, de degr´e alg´ebrique 7.
– ShiftRows : Transformation lin´eaire qui applique une rotation `a chaque ligne de l’´etat, avec un d´ecalage diff´erent par ligne.
– MixColumns : Transformation lin´eaire qui s’applique en parall`ele sur les colonnes de l’´etat.
– AddRoundKey: Addition de la sous-cl´e `a l’´etat.
La premi`ere it´eration est pr´ec´ed´ee d’une addition de la sous-cl´e d’indice 0. Ensuite, toutes les it´erations sont identiques, sauf la derni`ere, o`u l’op´erationMixColumn est omise.
1.4. LES CHIFFREMENTS PAR BLOCS 25 La transformation SubBytes La transformation SubBytes est la seule transformation non-lin´eaire de la fonction de tour. Elle consiste `a appliquer en parall`ele une boˆıte-S, not´eeS,
`a chaque octet de l’´etat.S est une permutation sur le corpsF28, dont toutes les coordonn´ees sont de degr´e 7. La permutation inverse est ´egalement de degr´e 7. Cette op´eration peut ˆetre visualis´ee `a la figure 1.11.S est construite `a partir de l’op´eration inverse dans le corps fini `a 256 ´el´ements :
S:F28 ← F28
x 7→ x254
c’est `a dire, x7→x−1, o`u 0−1= 0, suivie ensuite d’une transformation affine sur F82.
S
SubBytes
Figure1.11 – La transformationSubBytespour Rijndael-128
La transformation ShiftRows Cette transformation consiste `a effectuer une rotation vers la gauche sur chaque ligne de l’´etat. Le d´ecalage est diff´erent pour chaque ligne de l’´etat et diff`ere selon l’instance de Rijndael.
Pour Rijndael-128 la ligne i (0 ≤ i ≤ 3) est d´ecal´ee de i octets vers la gauche, comme nous pouvons le voir `a la figure 1.12. Le d´ecalage de chaque ligne pour chaque version de l’algorithme est d´efini `a la table1.4.
Rijndael-128 Rijndael-160 Rijndael-192 Rijndael-224 Rijndael-256
ligne 0 0 0 0 0 0
ligne 1 1 1 1 1 1
ligne 2 2 2 2 2 3
ligne 3 3 3 3 4 4
Table1.4 – Longueur de d´ecalage pour chaque ligne en fonction de la taille de l’´etat interne.
La transformationMixColumns Cette fonction est une transformation lin´eaire, appliqu´ee en parall`ele sur les colonnes de l’´etat. Plus pr´ecis´ement, chaque colonne de l’´etat est multipli´ee par une matriceM de la fa¸con suivante :
ShiftRows
Figure 1.12 – La transformationShiftRows pour Rijndael-128
Figure 1.13 – La transformationMixColumnspour Rijndael-128
La matrice M a ´et´e choisie pour ses bonnes propri´et´es de diffusion. Elle fait partie des matrices appel´eesMDS, de l’acronyme anglais “Maximum Distance Separable”, qui assurent une diffusionparfaite. Pour une fonction de diffusionLagissant sur des octets, nous souhaitons de fa¸con g´en´erale que mˆeme si tr`es peu d’octets sont modifi´es en entr´ee, le nombre d’octets affect´es en sortie soit grand. Autrement dit, siwt(v), avecv un vecteur d’octets, symbolise le nombre d’octets non-nuls, nous voulons que la quantit´e suivante :
min
x∈F82
(wt(x) +wt(L(x))),
appel´ee en anglais “branch number”, soit la plus ´elev´ee possible. Les matrices repr´esentant une fonctionLpour laquelle la borne sup´erieure est atteinte sont appel´eesmatrices MDS. En effet, le branch number de L correspond `a la distance minimale du code correcteur lin´eaire compos´e des mots (x||L(x)). Si L est une fonction de Fnq vers Fnq, cette distance atteint son maximum, n+ 1, pour les codes dits MDS. Pour une fonction s’appliquant sur une colonne
1.4. LES CHIFFREMENTS PAR BLOCS 27 de 4 octets `a la fois, comme c’est le cas deMixColumns, ce nombre peut ˆetre au plus 5, car si un seul octet en entr´ee est modifi´e, il peut influencer au plus les 4 octets de sa colonne. La matriceM de MixColumnsest choisie de fa¸con que cette borne maximale soit atteinte.
La transformation AddRoundKey Il s’agit de l’addition de la sous-cl´e de tour, bit `a bit.
1.4.3 R´eseaux de Feistel
Un r´eseau de Feistel (figure1.14), qui port le nom du cryptologue d’IBM Hors Feistel, est une structure d´evelopp´ee dans les ann´ees 1970. Dans la version ´equilibr´ee de cette construc-tion, les donn´ees d’entr´ee sont divis´ees en deux parties de taille identique. Les deux parties sont ensuite trait´ees de fa¸con diff´erente :
FK :Fn2 ×Fn2 → Fn2 ×Fn2
(L, R) 7→ (R, L⊕f(K, R))
La fonction internef, de Fn2 dans Fn2 est une fonction compos´ee de fa¸con g´en´erale d’une fonction lin´eaire et d’une fonction de substitution. La structure g´en´erale d’un r´eseau de Feistel garantit l’inversibilit´e du chiffrement quelle que soit la fonction f employ´ee, puisque π◦FK
est une involution, o`u π d´esigne la permutation des deux entr´ees, π(L, R) = (R, L). Un des avantages principaux de ce syst`eme est que la fonction de d´echiffrement est identique `a celle de chiffrement ; il suffit juste d’inverser l’ordre des sous-cl´es.
f k(i)
Li−1 Ri−1
Li Ri
Figure 1.14 – Un tour d’un chiffrement d’un r´eseau de type Feistel
La fonction de chiffrement DES, standardis´ee en 1977, utilise cette m´ethode de construc-tion. Aujourd’hui, il existe des g´en´eralisations de cette construction, notamment des versions non-´equilibr´ees o`u les donn´ees sont d´ecoup´ees en deux parties de tailles diff´erentes [SK96] ou encore des versions o`u les donn´ees sont d´ecoup´ees en plus de deux parties [ZMI90].