suivant: Modes
monter: announcing the ADVANCED ENCRYPTION
précédent: Déchiffrement équivalent
Table des matières
L'implantation de l'AES que nous allons mettre en oeuvre est dédiée à une machine 32 bits, Intel ou autre [Gla03].
Nous allons dans ce qui suit montrer comment les transformations appliquées aux octets du bloc à chaque itération de chiffrement par le Rijndael peuvent être combinées pour ne former qu'une unique transformation itérée, dont les résultats seront facilement stockables dans des tables [RD99].
Remarquons d'abord que la substitution par table S (SubBytes(s)) implique que les octets du bloc peuvent êtres directement identifiés à leur entrée dans la table S:
![\begin{displaymath}
s_{i,j} \leftarrow S[s_{i,j}]
\end{displaymath}](img84.png) |
(4.1) |
ainsi une colonne sera représentée par :
![\begin{displaymath}
\left[ \begin{array}{c}S[s_{0,j}]\ S[s_{1,j}]\ S[s_{2,j}]\ S[s_{3,j}]\end{array} \right]
\end{displaymath}](img85.png) |
(4.2) |
ensuite la permutation circulaire ShiftRows(s) donne pour chaque colonne 4.1:
![\begin{displaymath}
\left[ \begin{array}{c}S[s_{0,j}]\ S[s_{1,j}]-C1\ S[s_{2,j}]-C2\ S[s_{3,j}]-C3\end{array} \right]
\end{displaymath}](img86.png) |
(4.3) |
ce qui est identique à :
![\begin{displaymath}
\left[ \begin{array}{c}S[s_{0,j}]\ S[s_{1,j}-C1]\ S[s_{2,j}-C2]\ S[s_{3,j}-C3]\end{array} \right]
\end{displaymath}](img87.png) |
(4.4) |
chaque colonne est ensuite multipliée par la matrice de MixColumns(s):
![\begin{displaymath}
\left(\begin{array}{cccc}
\texttt{0x02}&\texttt{0x03}&\te...
...s_{1,j}-C1]\ S[s_{2,j}-C2]\ S[s_{3,j}-C3]\end{array} \right]
\end{displaymath}](img88.png) |
(4.5) |
ce que l'on peut décomposer en une combinaison linéaire de vecteurs :
![\begin{displaymath}
S[s_{0,j}]\left[\begin{array}{c}\texttt{2}\ \texttt{1}\ \t...
...tt{1}\ \texttt{1}\ \texttt{3}\ \texttt{2}\end{array}\right]
\end{displaymath}](img89.png) |
(4.6) |
à quoi l'on ajoute la clé de tour par la transformation finale AddRoundKey(s) :
![\begin{displaymath}
S[s_{0,j}]\left[\begin{array}{c}\texttt{2}\ \texttt{1}\ \t...
...ray}{c}k_{0,j}\ k_{1,j}\ k_{2,j}\ k_{3,j}\end{array}\right]
\end{displaymath}](img90.png) |
(4.7) |
définissons les tables
à
telles que :
![\begin{displaymath}
T_0[s]=\left[\begin{array}{c}S[s]\otimes\texttt{2}\ S[s]\ ...
...[s]\otimes\texttt{3}\ S[s]\otimes\texttt{2}\end{array}\right]
\end{displaymath}](img93.png) |
(4.8) |
un tour de chiffrement peut maintenant s'exprimer ainsi :
![\begin{displaymath}
s_j\leftarrow T_0[s_{0,j}]\oplus T_1[s_{1,j-C1}]\oplus T_2[s_{2,j-C2}]\oplus T_3[s_{3,j-C3}]\oplus k_j.
\end{displaymath}](img94.png) |
(4.9) |
Il suffit ainsi de stocker 8 tables de
octets (en prenant en compte les tables Ti_x, inverses des T_x), ce qui représente 4Ko de mémoire pour le chiffrement et autant pour le déchiffrement, soit deux pages mémoire sur une architecture 80x86.
Sous-sections
suivant: Modes
monter: announcing the ADVANCED ENCRYPTION
précédent: Déchiffrement équivalent
Table des matières
vincent@@@juneeflorentine.net