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.
la fonction MixColumn est une opération d'algèbre linéaire.
Elle suit l'égalité suivante :
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 :
Sous forme d'octet, on a :
La somme finale est une suite de XOR, on obtient ainsi :
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 :
Le déchiffrement de cette étape devient donc :