MASTER 1 - Crypto - TP : Corps finis, AES 1 Construction générique
Transcription
MASTER 1 - Crypto - TP : Corps finis, AES 1 Construction générique
MASTER 1 - Crypto - TP : Corps finis, AES 1 Construction générique de IF2k On donne des polynômes primitifs modulo 2 sous forme décimale (par exemple 285 = [100011101] désigne le polynôme X 8 + X 4 + X 3 + X 2 + 1) pour les degrés de 2 à 32 : 3, 7, 11, 19, 37, 67, 131, 285, 529, 1033, 2053, 4179, 8219, 16427, 32771, 65581, 131081, 262183, 524327, 1048585, 2097157, 4194307, 8388641, 16777243, 33554441, 67108935, 134217767, 268435465, 536870917, 1073741907, 2147483657, 4294967493. (voir http://www.research.att.com/ ~njas/sequences/A132447 et http://www.research.att.com/~njas/sequences/ A132448). 1.1 Addition Expliquer comment effectuer efficacement l’addition de deux éléments de IF2k , puis donner une implémentation de l’addition de deux éléments quelconques de IF2k . 1.2 Multiplication générique par X 1. Que vaut X 8 modulo P8 = X 8 + X 4 + X 3 + X 2 + 1 ? 2. En déduire comment multiplier par X un élément quelconque de IF256 construit comme IF2 [X]/P8 . 3. Proposer une implémentation binaire générique efficace de la multiplication par X dans GF (2k ) (on pourra par exemple utiliser des variables globales, ou encore construire une classe contenant les informations). Combien de calculs sont nécessaires ? 4. Calculer [C0] ∗ [03] dans GF (28 ). 1.3 Tables de correspondance 1. Quel générateur peut-on utiliser avec les polynômes primitifs donnés en préambule ? 2. Pour un générateur G, construire la table de correspondance i ,→ P ≡ Gi ∈ GF (2k ). 3. Construire la table de correspondance inverse. 4. Construire la table des logarithmes de Zech (i ,→ j tel que Gj ≡ 1 + Gi ∈ GF (2k ). 1.4 Opérations arithmétiques En utilisant les tables implémenter la multiplication et l’inverse d’éléments de GF (2k ). 1 2 Implémentation du Mini-AES On considère une version miniature de Rijndael du TD : la taille de bloc et de clef est de 12 bits en matrices 2 × 2 avec des entrées sur 3 bits. Les opérations arithmétiques se déroulent sur le corps IF23 construit avec le polynôme P = P3 (X) = X 3 + X + 1. On restreint les opérations de cryptage de la manière suivante : KeySchedule L’opération est identique sauf pour le décalage circulaire initial, remplacé par T:=W4i−1 <<< 2; ByteSub Pour une entrée a, calculer son inverse y dans IF23 puis calculer la transformation (poids de faible à fort de haut en bas) : z0 1 0 0 y0 1 z1 = Ay + c = 1 1 0 y1 + 0 mod 2. z2 1 1 1 y2 1 ShiftRow Décaler cycliquement la dernière ligne à gauche. MixColumns Multiplier chacune des colonnes vue comme un polynôme (degrés faible à fort de haut en bas) par G = Y + [2] modulo C = Y 2 + [3] où [3] par exemple est l’élément X + 1 de IF8 . AddRoundKey inchangée. 1. Implémenter la multiplication d’un triplet par la matrice A. 2. Implémenter ByteSub sur un triplet, puis la S-box complète. 3. Implémenter le KeySchedule, puis l’appliquer sur la clef K = 001100100001. 4. Expliciter la matrice de transformation de MixColumns. 5. Implémenter MixColumns. 6. Calculer la valeur de sortie du mini A.E.S pour le message M = 011001110111 et la clef précédente. 7. Quelle taille de table est nécessaire pour implémenter ce mini A.E.S comme l’A.E.S classique ? 8. Construire les deux tables nécessaires et re-calculer la valeur de sortie précédente. 9. En tabulant au maximum possible, quelle serait alors la taille des tables nécessaires ? Y-aurait-il des conséquences en terme de performance et pourquoi ? 2