S-Box (substitution box), terme anglais désignant une table de substitution utilisée dans un algorithme de chiffrement symétrique. Une S-Box contribue à la « confusion » (terme employé par Claude Shannon) en rendant l'information originale inintelligible. Les S-Boxes permettent de casser la linéarité de la structure de chiffrement et leur nombre varie selon les algorithmes. DES compte par exemple huit tables de 16x4 éléments.
Une table de substitution prend en général une variable de m bits en entrée et produit une sortie de n bits, les entrées et les sorties n'ont pas forcément la même taille. Les tables sont souvent définies à l'avance mais il arrive parfois qu'elles soient générées par l'algorithme (par exemple dans Blowfish). Les valeurs présentes dans les S-Box doivent être choisies de manière à éviter les attaques, par divers moyens comme l'utilisation de fonctions courbes. Dans le cas de DES, il a été prouvé que les tables avaient été conçues de manière à résister à la cryptanalyse différentielle (technique qui ne sera publiée que bien des années plus tard).
Voici une S-Box (S5) tirée de l'algorithme DES. La sortie de 4 bits est obtenue à partir de l'entrée de 6 bits. On divise ces 6 bits en deux parties : les deux bits aux extrémités et les quatre bits restants (au centre). Les deux bits indiquent la ligne et les bits centraux donnent la colonne correspondante. Par exemple, avec une entrée "011011", on divise en "0 1101 1". Ce qui donne pour la ligne "01" et pour la colonne "1101". La sortie de la table est alors "1001".
S5 | 4 bits au centre de l'entrée | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | ||
Bits externes | 00 | 0010 | 1100 | 0100 | 0001 | 0111 | 1010 | 1011 | 0110 | 1000 | 0101 | 0011 | 1111 | 1101 | 0000 | 1110 | 1001 |
01 | 1110 | 1011 | 0010 | 1100 | 0100 | 0111 | 1101 | 0001 | 0101 | 0000 | 1111 | 1010 | 0011 | 1001 | 1000 | 0110 | |
10 | 0100 | 0010 | 0001 | 1011 | 1010 | 1101 | 0111 | 1000 | 1111 | 1001 | 1100 | 0101 | 0110 | 0011 | 0000 | 1110 | |
11 | 1011 | 1000 | 1100 | 0111 | 0001 | 1110 | 0010 | 1101 | 0110 | 1111 | 0000 | 1001 | 1010 | 0100 | 0101 | 0011 |