8INF854: Cryptographie Chapitre 4: AES: Advanced Encryption Standard Historique • (1997) Le NIST a adressé le défi de trouver un algorithme cryptographique qui deviendrait le standard national et le successeur de DES. • Parmi les contraintes devant être respectées, il y avait que l’algorithme devait permettre l’utilisation de clés de 128, 192 et 256 bits, il devait opérer sur des blocs de 128 bits et devait pouvoir être versatile. • (1998) 5 candidats potentiels pour la succession de DES. • MARS (IBM) • RC6 (RSA Laboratories) • Rijndael (Joan Daemen et Vincent Rijmen) • Serpent (Ross Anderson, Eli Biham et Lars Knusen) • Twofish (Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall and Niels Ferguson) • Rijndael a été choisi en 2000 pour devenir le AES (Advanced Encryprtion Standard). Cet algorithme peut être utilisé en plusieurs modes, ECB, CBC, CFB, OFB et CTR. 𝐺𝑎𝑙𝑜𝑖𝑠 𝐹𝑖𝑒𝑙𝑑 − 8 𝐺𝐹(2 ) • Objet mathématique appelé corps fini. • Il est constitué de 256(28) éléments. • Deux opérations sur les éléments: • Addition modulo 2. • Multiplication *. • GF(2) = F2 = unique corps fini à 2éléments: 0,1 • F2[X] = ensemble des polynômes à coefficients dans F2. • Soit P(X) un polynôme irréductible de degré 8 appartenant à F2[X] alors, par définition, on a que: GF (28 ) F2 [ X ] / P( X ) • Exemple: Prenons P( X ) X 8 X 4 X 3 X 1 8 • Les éléments de GF (2 ) sont des polynômes réduits modulo P(X) . Ils sont de degré inférieur à 8. • Exemple au tableau. L’algorithme de base • Nous allons nous restreindre, pour simplifier la tâche, à une clé de chiffrement de 128 bits. • L’algorithme fonctionne en 10 itérations (128 bits). Pour des clés de 192 bits et de 256 bits, l’algorithme fonctionne en 12 et 14 itérations respectivement. • Chaque itération utilise une clé dérivée de la clé originale. • Une itération commence avec une entrée de 128 bits et produit une sortie de 128 bits. • AES n’est pas un chiffre de Feistel • Le déchiffrement utilise une méthode différente du chiffrement. • Il y a 4 étapes par itération. Ces étapes sont appelées couches ou layers. 1. La ByteSub Transformation (BS): Cette couche non-linéaire est pour la résistance aux attaques par la cryptanalyse différentielle ou linéaire. 2. La ShiftRow Transformation (SR): Cette étape de mixage linéaire favorise la diffusion des bits tout au long des itérations. 3. La MixColumn Transformation (MC): Cette couche a le même effet que la SR. 4. La AddRoundKey (ARK): La clé d’itération est additionné modulo 2 avec le résultat de la couche MC. Étapes de chiffrement AES Les couches (layers) • Les 128 bits(16*8) en entrée sont groupés en 16 bites de 8 bits chacun. On les note par 𝑎0,0 , 𝑎1,0 , 𝑎2,0 , 𝑎3,0 , 𝑎0,1 , 𝑎1,1 ,…, 𝑎3,3 . • On les place dans une matrice de 4 × 4: 𝑎0,0 𝑎0,1 𝑎0,2 𝑎0,3 𝑎1,0 𝑎1,1 𝑎1,2 𝑎1,3 𝑎2,0 𝑎2,1 𝑎2,2 𝑎2,3 . 𝑎3,0 𝑎3,1 𝑎3,2 𝑎3,3 1- ByteSub Transformation • La ByteSub Transformation: Dans cette étape chaque byte de la matrice précédente est changé en un autre byte par une S-box. • On écrit le byte comme 8 bits: abcdefgh. On regarde ensuite l’entrée de la ligne abcd et de la colonne efgh. On convertit ensuite cette entrée en binaire. • Par exemple: Si on a le byte 10001011 alors on regarde la ligne 9 (8 + 1) et la colonne 12 (11 + 1). L’entrée est 6110 = 111101 = 00111101. • La sortie de l’étape ByteSub est encore une matrice 4 × 4: 𝑏0,0 𝑏1,0 𝑏2,0 𝑏3,0 𝑏0,1 𝑏1,1 𝑏2,1 𝑏3,1 𝑏0,2 𝑏1,2 𝑏2,2 𝑏3,2 𝑏0,3 𝑏1,3 . 𝑏2,3 𝑏3,3 S-Box Par exemple, la valeur hexadécimale {EA} fait référence à la ligne E, colonne A de la S-box, qui contient la valeur {87}. En conséquence, la valeur {EA} est mappée dans la valeur {87}. Le tableau ci-dessous est S-box et utilisé pendant le processus de cryptage. 2- ShiftRow Transformation • La ShiftRow Transformation: Les 4 lignes de la matrice précédente sont décalées de façon cyclique vers la gauche de 0, 1 , 2 et 3 pour obtenir: 3- MixColumn Transformation • La MixColumn Transformation: Considérons un byte comme un élément de GF 28 . Ainsi, l’étape SR produit en sortie des éléments de GF 28 . Multplions la matrice précédente par une autre matrice dont les composantes sont aussi des éléments de GF 28 afin de produire une autre matrice: • Le dernier cycle de chiffrement n'implique pas l'étape 'MixColumn' 3- MixColumn Transformation • Exemple: Effectivement une multiplication matricielle dans GF(28) en utilisant un polynôme premier m(x) =x8+x4+x3+x+1 4- RoundKey Addition • La RoundKey Addition: La clé de chiffrement pour une itération est dérivée de la clé originale est de 128 bits lesquels sont contenus dans une matrice 4 × 4, dont les éléments (k i,j ) sont des bytes. Dans cette étape, on additionne, les bytes, la matrice de l’étape MC(MixColumn) avec la matrice de clé de l’itération en cours: • La clé d’itération: la clé originale est de 128 bits. Ces bits sont répartis en bytes de 8 bits dans une matrice 4 × 4. Cette matrice est étendue en adjoignant 40 colonnes supplémentaires de la façon suivante: • On étiquette les quatre premières colonne par W(0), W(1), W(2) et W 3 . • Les nouvelles colonnes sont générées récursivement. Supposons que les colonnes ont été définies jusqu’à W(𝐢 − 1). Alors: Si i n’est pas un multiple de 4, W 𝐢 = W(𝐢 − 4)⨁W(𝐢 − 1). Si i est un multiple de 4, W 𝐢 = W(𝐢 − 4)⨁T(W 𝐢 − 1 ) où T(W 𝐢 − 1 ) est une transformation de W 𝐢 − 1 . • La transformation T(W 𝐢 − 1 ) suivante: est obtenue de la façon • Appelons les éléments de la colonne W 𝐢 − 1 , a,b,c,d. On décale cycliquement pour obtenir b,c,d,a. • On remplace chacun de ces bytes par les éléments correspondants dans la S-box pour obtenir 4 nouveaux bites, e,f,g,h. • On calcule ensuite la constante d’itération r 𝐢 = 00000010(i−4)/4 dans GF 28 (i est un multiple de 4) , alors T(W 𝐢 − 1 ) est le vecteur colonne (e⨁r i , f, g, h). • On construit de cette façon tous les autres colonnes W 4 ,…, W 43 à partir des quatre colonnes initiales. • La clé d’itération pour la i-ième itération consiste en les colonnes W 4i , W 4i + 1 , W 4i + 2 , W 4i + 3 . Animation RIJNDAEL • google: aes key schedule animation (animation en flash de Enrique Zabala) • https://www.youtube.com/watch?v=gP4PqVGudtg Déchiffrement • Chaque étape du chiffrement sont inversibles. • L’inverse de ByteSub est une autre table appelée InvByteSub. • L’inverse de l’étape ShiftRow est obtenue en décalant les lignes vers la droite au lieu de vers la gauche. On dénote cette étape InvShiftRow. • L’inverse de MixColumn existe parce que la matrice 4 4 utilisée est inversible. La transformation InvMixColumn est obtenue en multipliant par la matrice : 00001110 00001001 00001101 00001011 0001001 00001110 00001011 00001101 00001001 00001110 00001011 00001101 00001001 00001110 00001011 00001101 • L’étape AddRoundKey est sa propre inverse. • Le déchiffrement s’effectue dans l’ordre inverse: AddRoundKey, InvShiftRow, InvByteSub AddRoundKey, InvMixColumn, InvShiftRow, InvByteSub (9 fois) AddRoundKey. Encryptions – Décryptions AES S-box inverse • On calcule premièrement la transformation affine inverse de la 8 valeur en entrée suivi de son inverse multiplicatif dans GF (2 ) . La transformation affine inverse est: Considérations conceptuelles • L’algorithme de Rijndael n’est pas un système de Feistel. Il assure une diffusion complète en 2 itérations puisqu’il agit sur tous les 128 bits à la fois (Feistel travaille sur une moitié à la fois). • La S-box a été construite algébriquement de façon simple et explicite: Transparence. • La S-box est non-linéaire: résistance à la cryptanalyse linéaire et différentielle. • L’étape ShiftRow a été ajoutée afin de résister à deux nouveaux types d’attaques: cryptanalyse différentielle tronquée et l’attaque Square. • L’étape MixColumn augmente la diffusion. • La clé d’itération implique un mélange non linéaire des bits de la clé: résistance à la cryptanalyse lorsque des morceaux de clé sont connus. • Le nombre d’itération a été établie à 10 pour 128 bits puisqu’il y a des attaques plus performantes que l’attaque de force brute pour un nombre d’itération allant jusqu’à 6.