Chiffrement
- Ecrire la fonction BYTE xtime(BYTE x)
qui multiplie par x un polynôme de degré au plus 7
(multiplication par la racine primitive d'un élément a du
corps F).
- Ecrire la foncyion BYTE bmul(BYTE x,
BYTE y) qui retourne le produit de deux
éléments du corps F.
- Ecrire la fonction BYTE ByteSub(BYTE x)
qui retourne le transformé de x dans F par ByteSub.
ByteSub( x)
y <- inversede(x) dans F
(attention par convention inversede (0)=0)
soit (y_7, y_6,...,y_0) la
notation binaire de y
c <- (01100011)
les indices sont calculés modulo 8
pour i allant de 0
à 7
b_i <-
y_i+y_(i+4)+y_(i+5)+y_(i+6)+y_(i+7)+ c_i mod 2
retourner (b_7,b_6, ....,b_0)
La fonction
int gentables(int
size, int sizekey, BYTE *key) permet de génerer
les tables nécessaires au chiffrement et déchiffrement de
l'AES pour des blocs de
size
octets, une clé de
sizekey octets.
- En utilisant ByteSub(x)
générer le tableau de 256 octets fbsub qui contient
les images de tous les éléments de F par ByteSub (fbsub[i] <- ByteSub(i))
- Construire le tableau ftable
de 256 mots (32 bits) tel que ftable[i]<- T_0[i].
- Compléter la fonction void encrypt (BYTE *buff)
- Tester votre le chiffrement de blocs de 128 bits avec une
clé de 128 bits avec par exemple
clair : 32 43 f6 a8 88 5a
30 8d 31 31 98 a2 e0 37 07 34
clé : 2b 7e 15 16 28 ae d2
a6 ab f7 15 88 09 cf 4f 3c
Vous disposez du tableau de 256 octets
rbsub qui contient les
images par l'application inverse de
ByteSub(x) et du tableau rtable de 256 mots (32
bits) tel que rtable est l'inverse de ftabledans le fichier aeslib.c
- fonction de
déchiffrement
La fonction void decrypt (BYTE *buff) est disponible dans aeslib.c
- Tester votre le déchiffrement de blocs de 128 bits avec
une clé de 128 bits.
Protocole d'échanges de
clés
- Le protocole de
Diffie-Hellman
On
dispose d'un entier premier p et g un générateur de Zp*,
les données p et g sont publiques
Si Alice et Bob désire
partager une clé secrète K.
Alice choisit un entier a (1<= a <= p-2) et transmet (g^a modulo
p) à Bob
Bob choisit un entier b (1<= b <= p-2) et
transmet (g^b modulo p) à Alice
La clé partagée K est g^{ab} modulo p
Pour établir une clé secrète vous disposez d'un
entier p de 1023 bits
p=DCFAC4EFE89F5B082962AB9A67E8D63E84FA491E5D3874978815868595469163DA0661E6208A8C2CD4F83893B53864ADFD2154E8D8EFA146BAD808562E4BF6C90348FD79EEB3387D93FC7943BC450BA55399BA3CF3DFBD0D4E71800007B0E9D5F12E7A2CB7EA4E49812E715F8DC570C478DC2DEB1C49B0AE87A5DF5449C221CB
g=2
- En utilisant la librairie GMP
pour faire les calculs sur les grands entiers, établir une
clé secrète avec un interlocuteur.
Echange de données
chiffrées
- Echanger des messages chiffrés avec l'AES 128 bits avec
l'interlocuteur avec qui vous avez convenu d'une clé
secrète