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