Anatomie d'AES
Les quatre opérations d'un tour
À l'intérieur d'AES, chaque tour applique la même succession de quatre opérations à la matrice d'état. Comprendre ces quatre étapes, c'est comprendre tout le chiffre.
Vue d'ensemble d'un tour
Un tour complet enchaîne, dans l'ordre :
état de départ
|
[ SubBytes ] substitution octet par octet -> confusion
|
[ ShiftRows ] décalage des lignes -> permutation
|
[ MixColumns ] mélange des colonnes -> diffusion
|
[ AddRoundKey ] XOR avec la clé du tour -> ajout de la clé
|
état transformé
SubBytes : la substitution
Chaque octet de l'état est remplacé par un autre, en le lisant dans une table fixe appelée la S-box. Cette table associe à chacune des 256 valeurs possibles une autre valeur, de manière non linéaire : c'est la seule étape d'AES qui ne soit pas une simple combinaison linéaire, et c'est elle qui apporte la confusion, c'est-à-dire une relation opaque entre la clé et le chiffré.
octet 0x53 --[ S-box ]--> 0xED
La même S-box sert pour les 16 octets ; elle est publique et identique pour tout le monde.
ShiftRows : la permutation
Les octets sont déplacés en décalant chaque ligne de l'état vers la gauche, d'un nombre de crans égal à son numéro de ligne : la ligne 0 ne bouge pas, la ligne 1 décale de 1, la ligne 2 de 2, la ligne 3 de 3.
avant ShiftRows après ShiftRows
[ a0 a1 a2 a3 ] [ a0 a1 a2 a3 ] (0 cran)
[ b0 b1 b2 b3 ] --> [ b1 b2 b3 b0 ] (1 cran)
[ c0 c1 c2 c3 ] [ c2 c3 c0 c1 ] (2 crans)
[ d0 d1 d2 d3 ] [ d3 d0 d1 d2 ] (3 crans)
Ce brassage éparpille les octets entre les colonnes, pour que l'étape suivante les mélange avec de nouveaux voisins.
MixColumns : la diffusion
Chaque colonne de l'état est traitée comme un tout : ses 4 octets sont combinés entre eux par une opération algébrique. Un seul octet modifié dans la colonne d'entrée change les quatre octets de la colonne de sortie. C'est cette étape qui assure la diffusion : l'influence d'un octet se répand rapidement sur tout le bloc.
AddRoundKey : l'ajout de la clé
Enfin, l'état est combiné par un XOR bit à bit avec la clé du tour (une clé différente à chaque tour, dérivée de la clé maître). C'est le seul endroit où la clé entre dans le calcul.
Une exception : le dernier tour
Le tout premier AddRoundKey a lieu avant le premier tour, et surtout le dernier tour omet MixColumns. Cette absence est volontaire : elle rend le déchiffrement symétrique du chiffrement, sans affaiblir la sécurité.
En résumé
- Chaque tour applique quatre étapes : SubBytes, ShiftRows, MixColumns, AddRoundKey.
- SubBytes (S-box, non linéaire) apporte la confusion ; MixColumns apporte la diffusion.
- ShiftRows permute les octets ; AddRoundKey injecte la clé du tour par un XOR.
- Le dernier tour omet MixColumns, ce qui simplifie le déchiffrement.

