Principe de AddKey

Le but de AddKey est de sommer le bloc de donnée courant avec la clé courante.
Cette clé courante est dérivée de la clé initiale via l'opération RoundKey (ou routine d'expension).
Cette routine sera vue dans la partie suivante
Cette fonction est véritablement la seule qui chiffre réellement les données, il est nécessaire d'avoir la clé pour pouvoir la réaliser et la déchiffrer
En effet, il s'agit (avec la routine d'expension) de la seule qui dépende de la clé.

Détail de l'algorithme

AddKey prend les 128 bits de la clé après son extension, et les somment directement avec le bloc de données.
Ceci est réalisé par une opération XOR bit à bit.
Exemple sur 8 bits (un mot du bloc de donnée) :
RoundKey = 11101100 et Mot = 10011011
Ainsi la somme bit à bit (modulo 2 car les éléments sont issus de GF(2)) donne :
11101100+1001101101110111

Reversibilité de AddKey

Etant donné que l'AES est un algorithme symétrique, il faut que la même clé puisse le chiffrer et le déchiffrer.

Dans le cas de AddKey, ceci est montré très simplement :
Lors du déchiffrement, le processus est pris à l'envers, toutes les modifications sont supprimées les unes après les autres.
L'ordre étant fixe, il est possible (quand on a la clé) de savoir quelle RoundKey a été utilisée pour chaque itération.
Il suffit pour cela de toutes les créer, puis de partir de la derniére et de remonter à la premiére.

L'opération utilisée lors du chiffrement étant XOR, il est nécessaire de refaire un XOR, avec la même clé pour le déchiffrement.
Ainsi, la clé qui avait été ajoutée sera compensée par elle même :

111011001001101111101100++10011011

Ceci est possible car l'opération XOR est associative :
Avec Ki la RoundKey courante, Mi le mot courant et Ci le résultat de l'opération XOR tel que
SoitCi =Mi+KiAlorsCi +Ki=(Mi+Ki)+KiAlorsCi +Ki=Mi+(Ki+Ki)par associativitéAinsiCi +Ki=Mi

On a donc la clé courante Ki qui se compense elle-même. L'opération XOR donnant 0x00, ce qui correspond à l'élement neutre de l'opération + dans GF(28).