next up previous contents
suivant: La transformation ShiftRows() monter: Chiffrement précédent: Chiffrement   Table des matières

La transformation SubBytes()

La transformation SubBytes() est une substitution non linéaire d'octets, utilisant une table S (S-box). Cette table est construite en composant deux transformations :
  1. prendre l'inverse de l'octet dans $\frac{\mathbb{Z}_2[X]}{m(X)\mathbb{Z}_2[X]}$ (voir section 1.1), l'octet 0x00 étant par convention son propre inverse.
  2. lui appliquer la transformation affine suivante (dans $\frac{\mathbb{Z}_2[X]}{m(X)\mathbb{Z}_2[X]}$) :
    \begin{displaymath}
\begin{array}{c}
pour\quad 0\leq i<8\\
b^{'}_i=b_i\oplus...
...\oplus b_{(i+6)mod8}\oplus b_{(i+7)mod8}\oplus c_i
\end{array}\end{displaymath} (2.1)

    $b_i$ est le i $^{\grave{e}me}$ bit de l'octet et $c_i$ le i $^{\grave{e}me}$ bit d'un octet $c$ qui vaut $01100011_2$ (0x63).
    Cette transformation affine peut prendre la forme matricielle suivante :

    \begin{displaymath}
\begin{array}{cccccc}
\left( \begin{array}{c}
b^{'}_0\ b...
...1\ 1\ 0\ 0\ 0\ 1\ 1\ 0
\end{array} \right)
\end{array}\end{displaymath} (2.2)

La figure 1.3 page [*] illustre la transformation SubBytes() .
\begin{fig1}
% latex2html id marker 671\caption{substitution par table S}
\...
...lor{blue}{$s^{'}_{3,3}$}}}
\end{picture} }
\end{tabular} \end{center}\end{fig1}
La table S issue du précalcul des valeurs de chacun des 256 polynômes de $\frac{\mathbb{Z}_2[X]}{m(X)\mathbb{Z}_2[X]}$ est indexée par les $4$ bits de poids fort et les $4$ bits de poids faible de l'octet. Par exemple pour 0x53, la substitution aura lieu avec la valeur située à l'intersection de la ligne $5$ et de la colonne $3$ de la figure 1.4.
\begin{fig1}
% latex2html id marker 755\caption{la table S}
\begin{center...
...&e6&42&68&41&99&2d&0f&b0&54&bb&16\ \hline
\end{tabular} \end{center}\end{fig1}


next up previous contents
suivant: La transformation ShiftRows() monter: Chiffrement précédent: Chiffrement   Table des matières
vincent@@@juneeflorentine.net