• Aucun résultat trouvé

Quelques apects techniques d’AES

7.2 Description d’AES

7.2.1 Quelques apects techniques d’AES

Pour toute la partie math´ematique on pourra consulter dans les compl´ements math´ematiques la section sur les extensions de corps et les anneaux de polynˆomes sur un corps fini, section 11.6 page 104.

AES est un syst`eme de chiffrement it´er´e constitu´e d’un algorithme de chiffre- ment, la fonction d’´etage, r´ep´et´e de Nr fois, avec Nr allant de 10 `a 14, et

d’une clef d’une longueur de 128, 192 ou 256 bits pour chaque ´etage, la clef d’´etage.

Un algorithme de diversification de clef , ExpandKey[i], permet de cr´eer une clef pour chacun des ´etages, i, `a partir de la clef secr`ete K.

On notera Ne le nombre d’´etages. La fonction d’´etage, g, est l’ensemble des

op´erations que l’on fait subir au texte qui arrive `a l’´etage i. Elle est la mˆeme pour tous les ´etages sauf le dernier dans un soucis de simplicit´e.

La fonction g consiste en l’application successive de 4 op´erations SubBytes, ShiftRows, MixColumns, AddRoundKey.

`

A partir de la clef secr`ete, K, on g´en´ere des sous clefs d’´etage par l’algorithme de diversification de la clef, ExpandKey[i]. On obtient les clefs d’´etage: K1,...,KNe.

On note x le texte initial (texte en clair), wi le texte utilis´e en entr´ee `a l’´etage i et y sera le texte crypt´e final.

Tous les textes sont suppos´es transform´es en une suite de z´eros et de uns. Si K et L sont deux telles suites on note

K ⊕ L

L’op´eration XOR entre le suite K et la suite L, c’est `a dire l’addition sans retenue modulo 2 entre K et L, cf. page 20.

Avec ces notations la description sch´ematique d’AES est la suivante: 1. On initialise w0 `a x et et on effectue l’op´eration AddRoundKey

W0⊕ K

2. Pour chacun des 1 < i ≤ Ne− 1 ´etages suivants on effectue sur wi les

op´erations suivantes

7.2. DESCRIPTION D’AES 41

(b) sur le r´esultat de SubBytes une permutation not´ee ShiftRows (permutation circulaire sur les ´el´ements des lignes de la matrice des octets si,j)

(c) sur le r´esultat de ShiftRows une op´eration not´ee MixColumns (application lin´eaire sur l’espace des matrices sur F28)

(d) Sur le r´esultat de MixColumns l’op´eration AddRoundKey[i] avec la sous-cl´e de l’´etage i

3. Pour le dernier ´etage Ne on supprime l’op´eration MiXColumns

On va d´ecrire maintenant chacune des op´erations utilis´ees.

L’op´eration ExpandKey

L’op´eration ExpandKey d´epend de la taille de blocs choisie, Nb× 32, qui

peut ˆetre ´egale `a 128, 160, 192 ou 224, 256 bits, et de la taille de cl´e choisie, Nk× 32, qui peut ˆetre ´egale `a 128, 160, 192, 224 ou 256 bits. On supposera

dans la suite que la longueur de la clef est de 192 bits avec donc Nk= 6.

Extension de la clef secr`ete K. On ´ecrit la clef K sous forme d’une matrice de Nk colonne de 4 bytes chacune (donc 4 lignes l’´el´ement d’une ligne ´etant

un mot de 8 bits) d´enot´es k0,...,k5

k0 k1 k2 k3 k4 k5

Ensuite cette matrice est ´etendue en une matrice de taille Nb(Nr+ 1) o`u Nr

est le nombre d’´etages par l’algorithme suivant

• Si i n’est pas un multiple de Nk(la longueur de la clef) alors la colonne

d’indice i, ki, est la XORisation de la colonne d’indice i − Nk, ki−Nk,

et de la colonne d’indice i − 1, ki−1. C’est donc l’addition bit `a bit sans

retenue de la colonne ki−Nk et de la colonne ki−1, ki = ki−Nk⊕ ki−1.

• Si i est un multiple de Nkon applique `a chacun des bytes de la colonne ki−1 la permutation πS d´ecrite au paragraphe suivant suivie d’une

rotation dans les bytes de la nouvelle colonne ki−1 et de l’addition

d’une constante d’´etage d´efinie par Fieldto Binary(xj−1) pour l’´etage j. On XOR le r´esultat obtenu avec la colonne ki−Nk.

42 CHAPITRE 7. CODES `A CLEFS SECR `ETES

On obtient ainsi

k0 k1 k2 k3 k4 k5 . . . ki·Nb . . . k(i+1)Nb−1 . . .

cl´e d’´etage 0 . . . cl´e d’´etage i . . . L’op´eration SubBytes

L’op´eration SubBytes est la seule op´eration non lin´eaire. On suppose que le message wi est un nombre de 128 bits=16 octets, (si,j)0≤i,j≤3, ´ecrit en

base 2. On le r´e´ecrit sous la forme d’une matrice Si, o`u les si,j sont des

octets. Si = s0,0 s0,1 s0,2 s0,3 s1,0 s1,1 s1,2 s1,3 s2,0 s2,1 s2,2 s2,3 s3,0 s3,1 s3,2 s3,3

L’op´eration SubBytes consiste en une permutations πS sur {0, 1}8, agissant

ind´ependamment sur chacun des octets si,j de l’´etage i.

Pour d´ecrire πS on travaille dans un surcorps du corps `a 2 ´el´ements, F2,

le corps fini `a 256 ´el´ements, F28, que l’on identifie avec les polynˆomes de

degr´e ≤ 8, munis de l’addition et de la multiplication modulo le polynˆome irr´eductible de F[x], x8+ x4+ x3+ x + 1, cf. la paragraphe 11.6.1, page 104, de rappel sur les anneaux de polynˆomes,

F28 ' F2[x]/(x8+ x4+ x3+ x + 1)F2[x]

On associe `a l’octet a7a6. . . a1a0 l’´el´ement

BinarytoField(a7a6. . . a1a0) = 7

X

i=0

aixi

du corps F28 dont l’application inverse est FieldtoBinary. On a dans le

corps F28 l’op´eration FieldInv qui `a un ´el´ement z 6= 0 du corps associe z−1

et `a z = 0 associe 0.

Exemples 9. Calcul dans F28. Calculons FieldInv(00000011) on a:

• FieldtoBinary(00000011)=x + 1

7.2. DESCRIPTION D’AES 43

car on a l’identit´e de B´ezout

(x + 1)(x7+ x6+ x5+ x4+ x2+ x) + (x8+ x4+ x3+ x + 1) = 1 obtenue par l’algorithme d’Euclide ou directement,

donc dans F28 ' F[x]/(x8+ x4+ x3+ x + 1)

(x + 1)−1= (x7+ x6+ x5+ x4+ x2+ x) et donc

• BinarytoField(x7+ x6+ x5+ x4+ x2+ x)=(11110110)

Revenons `a la description de l’op´eration SubBytes c’est `a dire `a la de- scription de la permutation πS pour le mot de 8 bits (a7a6. . . a1a0) consiste

en

• application de BinarytoField `a (a7a6. . . a1a0) = (b7b6. . . b1b0) qui

donne a ∈ F28

• application FieldInv `a a qui donne a−1 si a 6= 0 ou 0 si a = 0

• ajout de l’´el´ement c = (c7c6. . . c1c0) = BinarytoField(01100011) `a

a−1 pour obtenir b = (b7b6. . . b1b0)

• application de Fieldto Binary `a b c est une constante d’AES.

L’op´eration ShiftRows

C’est la permutation cyclique dans les lignes de la matrice Si

a b c d e f g h i j k l m n o p −→ a b c d f g h e k l i j p m n o L’op´eration MixColumns

C’est une transformation lin´eaire dans les colonnes; la colonne j est trans- form´ee de la mani`ere suivante (les calculs sont faits dans F28)

    b0 b1 b2 b3     =     02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02     ×     a0 a1 a2 a3    

44 CHAPITRE 7. CODES `A CLEFS SECR `ETES

L’op´eration AddRoundKey

AddRoundKey[i] est l’addition de la clef obtenue `a l’´etage i par l’algori- thme de diversification des cl´es, ExpandKey[i], au texte obtenu `a l’issue de l’´etape MixColumns.

On ´ecrit la clef ExpandKey[i], suppos´ee ici de 128 bits, sous la forme d’une matrice de 4 × 4 bytes et on l’ajoute au r´esultat de l’´etape pr´ec´edente par un XOR a0,0 a0,1 a0,2 a0,3 a1,0 a1,1 a1,2 a1,3 a2,0 a2,1 a2,2 a2,3 a3,0 a3,1 a3,2 a3,3 M k0,0 k0,1 k0,2 k0,3 k1,0 k1,1 k1,2 k1,3 k2,0 k2,1 k2,2 k2,3 k3,0 k3,1 k3,2 k3,3 = b0,0 b0,1 b0,2 b0,3 b1,0 b1,1 b1,2 b1,3 b2,0 b2,1 b2,2 b2,3 b3,0 b3,1 b3,2 b3,3

Si la clef avait une taille 32Nkbites on l’´ecrirait sous la forme d’une matrice

de Nk colonnes de 4 bytes et on proc´ederait de mˆeme.

Documents relatifs