Principe de MixColumn

MixColumn fait partie (avec ShiftRow) de l'étape de diffusion.
Son but est de faire intervenir de multiples bits dans le codage d'un seul.
Cela premet de rapidement lier (via des transformations matricielles) tout les éléments d'un bloc entre eux.
Le déchiffrement est alors plus complexe si l'on ne connait pas la clé.
On utilisera par la suite la matrice A représentant le bloc de données initial et la matrice B représentant le bloc de données après modification par MixColumn.
A=A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15A16,C=C1C2C3C4C5C6C7C8C9C10C11C12C13C14C15C16

Explication de la fonction

la fonction MixColumn est une opération d'algèbre linéaire.
Elle suit l'égalité suivante :
Ci=S×Ai
Avec i l'indice de colonne pour les matrices A, C. Ainsi que S, une matrice à coefficient fixe spécifique à MixColumn.
Les coefficient de S sont des éléments de GF(28), ils sont ici représentés sous formes hexadécimale :
CiCi+4Ci+8Ci+12=0x020x030x010x010x010x020x030x010x010x010x020x030x030x010x010x02×AiAi+4Ai+8Ai+12 ; i{1,2,3,4}
Sous forme d'octet, on a :
0x01=0000000120x02=0000001020x03=000000112

  • La multiplication par 0x01 ne change rien, il s'agit de l'élément neutre de la multiplication.

  • La multiplication par 0x02 équivaut à décaler tout les digits de l'octet de 1 cran vers la gauche. (cela équivaut à multiplier le polynôme correspondant par 21).
    Dans ce cas, il est possible que l'on sorte de GF(28) (d'obtenir un polynôme de degré 8).
    Pour cela, il faut réduire par le polynôme caractéristique de l'AES (voir section Maths).

  • La multiplication par 0x03 correspond à une multiplication par 0x02, suivit d'une addition (opération XOR dans GF(28)

La somme finale est une suite de XOR, on obtient ainsi :
Ci=0x02·Ai+0x03·Ai+4+0x01·Ai+8+0x01·Ai+12Ci+4=0x01·Ai+0x02·Ai+4+0x03·Ai+8+0x01·Ai+12Ci+8=0x01·Ai+0x01·Ai+4+0x02·Ai+8+0x03·Ai+12Ci+12=0x03·Ai+0x01·Ai+4+0x01·Ai+8+0x02·Ai+12, i{1,2,3,4}

Reversibilité de MixColumn

Si l'on reprend l'expression initiale de MixColumn, on voit qu'il s'agit d'un système à 4 inconnues et 4 équations.
Dans le cas du chiffrement, les inconnues sont C1, C2, C3 et C4. Dans le cas du déchiffrement, il s'agit de A1, A2, A3 et A4.
Inverser MixColumn revient à résoudre le système. Les coefficients de la transformation étant fixes on peut simplement implémenter le même calcul en utilisant la matrice issue de la résolution du système.
On obtient ainsi :
Ai=S'×Ci
Avec S'=0x0E0x0B0x0D0x090x090x0E0x0B0x0D0x0D0x090x0E0x0B0x0B0x0D0x090x0E

Le déchiffrement de cette étape devient donc :

AiAi+4Ai+8Ai+12=0x0E0x0B0x0D0x090x090x0E0x0B0x0D0x0D0x090x0E0x0B0x0B0x0D0x090x0E×CiCi+4Ci+8Ci+12, i{1,2,3,4}