No description
Find a file
2026-05-02 22:14:05 +02:00
images TD2 AES et modes operation 2026-05-02 22:14:05 +02:00
aes_cbc.py TD2 AES et modes operation 2026-05-02 22:14:05 +02:00
aes_ecb.py TD2 AES et modes operation 2026-05-02 22:14:05 +02:00
pinguin.py TD2 AES et modes operation 2026-05-02 22:14:05 +02:00
README.md TD2 AES et modes operation 2026-05-02 22:14:05 +02:00

TD2 — AES en pratique

Nom : Mathieu Cortes
Sujet : Chiffrement symétrique — AES, ECB, CBC, padding PKCS7 et XOR

Exercices sur papier

Exercice 1 — Conversions décimal / hexadécimal

Sous-partie A — Conversions

Conversion décimal vers hexadécimal

Décimal Hexadécimal
65 41
200 C8
255 FF
16 10

Conversion hexadécimal vers décimal

Hexadécimal Décimal
4A 74
FF 255
1F 31
B0 176

Sous-partie B — Encodage ASCII

Mot Encodage hexadécimal ASCII
AES 41 45 53
Crypto 43 72 79 70 74 6F
Hello! 48 65 6C 6C 6F 21

Sous-partie C — XOR sur octets

Calcul Résultat Remarque
FF ⊕ 0F F0 11111111 ⊕ 00001111 = 11110000
A5 ⊕ A5 00 Un octet XOR lui-même donne toujours 00.
41 ⊕ 20 61 41 vaut A, 20 vaut espace, et 61 représente a en ASCII.
42 ⊕ 0F 4D 4D représente M en ASCII.

Exercice 2 — Sentir AES : un round complet à la main

Texte utilisé : BONJOUR LES AMIS.

Question 1 — Construire la matrice détat

Encodage ASCII hexadécimal du texte :

text : 42 4F 4E 4A 4F 55 52 20 4C 45 53 20 41 4D 49 53

AES remplit la matrice colonne par colonne :

col 0 col 1 col 2 col 3
42 4F 4C 41
4F 55 45 4D
4E 52 53 49
4A 20 20 53

Question 2 — AddRoundKey

La sous-clé est composée de 0F partout. On effectue donc un XOR position par position.

col 0 col 1 col 2 col 3
4D 40 43 4E
40 5A 4A 42
41 5D 5C 46
45 2F 2F 5C

Question 3 — SubBytes

Chaque octet est remplacé par sa valeur dans la S-Box AES.

| col 0 | col 1 | col 2 | col 3 |

| E3 | 09 | 1A | 2F | | 09 | BE | D6 | 2C | | 83 | 4C | 4A | 5A | | 6E | 15 | 15 | 4A |

Question 4 — ShiftRows

On décale les lignes vers la gauche : ligne 0 pas de décalage, ligne 1 décalage de 1, ligne 2 décalage de 2, ligne 3 décalage de 3.

| col 0 | col 1 | col 2 | col 3 |

| E3 | 09 | 1A | 2F | | BE | D6 | 2C | 09 | | 4A | 5A | 83 | 4C | | 4A | 6E | 15 | 15 |

Question 5 — MixColumns

MixColumns sert à diffuser linformation à lintérieur de chaque colonne. Après cette étape, chaque octet de sortie dépend des 4 octets de la colonne dentrée. Cela permet déviter quune petite modification reste localisée dans un seul octet.

Question 6 — Pourquoi 10 rounds ?

Après un seul round, si on change un bit du message dentrée, seuls quelques octets de sortie sont affectés. Après deux rounds, grâce à ShiftRows et MixColumns, la modification commence à se propager dans toute la matrice. Après 10 rounds, leffet davalanche est beaucoup plus fort : une petite modification du message clair produit un résultat chiffré très différent.

Exercice 3 — Padding PKCS7

Question 1 — Calculer le padding

| Taille message (octets) | Octets ajoutés | Valeur des octets |

| 13 | 3 | 03 | | 5 | 11 | 0B | | 1 | 15 | 0F | | 16 | 16 | 10 | | 31 | 1 | 01 |

Question 2 — Retirer le padding

a)

text : 48 65 6C 6C 6F 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B

Le dernier octet vaut 0B, donc on retire les 11 octets de padding.
Message original : Hello.

b)

54 65 73 74 21 21 21 21 21 21 21 21 04 04 04 04

Le dernier octet vaut 04, donc on retire les 4 octets de padding.
Message original : Test!!!!!!!!.

Question 3 — Pourquoi toujours padder, même un message multiple de 16 ?

On ajoute toujours un padding afin que le déchiffrement puisse savoir sans ambiguïté quels octets doivent être retirés. Si un message faisait déjà 16 octets et quon najoutait rien, le dernier octet du message pourrait être confondu avec une valeur de padding. Pour éviter cette ambiguïté, PKCS7 ajoute un bloc complet de 10 lorsque le message est déjà un multiple de 16 octets.

Exercice 4 — Le mode ECB est dangereux

Question 1

Si deux blocs du message clair sont identiques, alors les deux blocs chiffrés correspondants seront aussi identiques en mode ECB, car chaque bloc est chiffré indépendamment avec la même clé.

Question 2 — Le salaire de Jane

Jack gagne 105000 euros par an. Son entrée chiffrée est :

text : Q9 2D FP VX C9 IO

Avec des blocs de 2 caractères, on peut faire la correspondance suivante :

text : Ja | ck | ?? | 10 | 50 | 00 Q9 | 2D | FP | VX | C9 | IO

Le bloc FP correspond au séparateur ou à une partie commune de la structure de lentrée. Jane a aussi un prénom de 4 lettres qui commence par Ja, donc son entrée doit commencer par Q9 ?? FP.

Parmi les candidats, lentrée qui correspond est :

text : Q9 AX FP C9 IO IO

Le salaire de Jane est donc :

text : C9 IO IO = 50 | 00 | 00

Jane gagne donc 500000 euros par an. Le candidat correspondant est le candidat n°3.

Question 3 — Pourquoi ECB est déplorable pour les images ?

Dans une image, il existe beaucoup de zones répétitives : fond uni, contours, couleurs identiques, pixels voisins similaires. En ECB, deux blocs de pixels identiques donnent deux blocs chiffrés identiques. Le chiffrement modifie donc les couleurs, mais il conserve une partie de la structure visuelle de limage. On peut encore reconnaître des formes ou des motifs.

Exercice 5 — Le mode CBC corrige ECB

Question 1 — Schéma CBC

text : Bloc 1 : M1 ⊕ IV ──E_K──> C1 Bloc 2 : M2 ⊕ C1 ──E_K──> C2 Bloc 3 : M3 ⊕ C2 ──E_K──> C3

Chaque bloc clair est XOR avec le bloc chiffré précédent avant dêtre chiffré. Pour le premier bloc, on utilise lIV.

Question 2 — Chiffrement CBC à la main

Données :

text : K = 5A IV = 3C Message clair = A1 B2 C3 D4

Le chiffrement simplifié est :

text : E_K(bloc) = bloc ⊕ K

Calculs :

text : C1 = A1 ⊕ 3C ⊕ 5A = C7 C2 = B2 ⊕ C7 ⊕ 5A = 2F C3 = C3 ⊕ 2F ⊕ 5A = B6 C4 = D4 ⊕ B6 ⊕ 5A = 38

Résultat :

text : C1 C2 C3 C4 = C7 2F B6 38

Question 3 — Déchiffrement CBC

Message chiffré :

text : C7 2F B6 38

On applique dabord le déchiffrement simplifié :

text : D_K(C) = C ⊕ K

Puis on applique linverse de CBC :

text : M1 = D_K(C1) ⊕ IV = A1 M2 = D_K(C2) ⊕ C1 = B2 M3 = D_K(C3) ⊕ C2 = C3 M4 = D_K(C4) ⊕ C3 = D4

Message clair retrouvé :

text : A1 B2 C3 D4

Question 4 — Réflexion

Si on chiffre deux fois le même message avec la même clé mais avec des IV différents, les chiffrés obtenus ne sont pas identiques. LIV rend le premier bloc différent, puis cette différence se propage aux blocs suivants.

Si on réutilise le même IV avec la même clé pour deux messages qui commencent par le même premier bloc, alors le premier bloc chiffré sera identique. Cela révèle une information sur les messages.

CBC corrige le problème dECB car les blocs ne sont plus chiffrés indépendamment : chaque bloc dépend du bloc chiffré précédent et de lIV.

Exercice 6 — Attaque par clair connu sur XOR

Question 1 — Retrouver la clé à partir dun clair connu

Message clair :

text : M = HELLO = 48 45 4C 4C 4F

Message chiffré :

text : C = 68 65 6C 6C 6F

Comme C = M ⊕ K, alors K = M ⊕ C.

text : 48 ⊕ 68 = 20 45 ⊕ 65 = 20 4C ⊕ 6C = 20 4C ⊕ 6C = 20 4F ⊕ 6F = 20

La clé est donc :

text : K = 20

Question 2 — Déchiffrer un nouveau message

Message intercepté :

text : 77 6F 72 6C 64

Avec la clé 20, on obtient :

text : 77 ⊕ 20 = 57 = W 6F ⊕ 20 = 4F = O 72 ⊕ 20 = 52 = R 6C ⊕ 20 = 4C = L 64 ⊕ 20 = 44 = D

Message déchiffré : WORLD.

Question 3 — Attaque à clair partiellement connu

Message chiffré :

text : 03 2D 2D 2B 2D 36 33 62 02 2D 2B 20 24

On sait que le message clair commence par Bonjour.

text : Bonjour = 42 6F 6E 6A 6F 75 72

On calcule les premiers octets de clé avec K = M ⊕ C :

text : 03 ⊕ 42 = 41 2D ⊕ 6F = 42 2D ⊕ 6E = 43 2B ⊕ 6A = 41 2D ⊕ 6F = 42 36 ⊕ 75 = 43 33 ⊕ 72 = 41

On observe la périodicité :

text : 41 42 43 41 42 43 41

La clé probable est donc :

text : 41 42 43

La longueur probable de la clé est 3 octets.

En déchiffrant tout le message avec cette clé répétée, on obtient :

text : Bonjour Alice

Question 4 — Discussion

Le chiffrement XOR avec une clé courte répétée est vulnérable, car si une partie du message clair est connue, on peut retrouver une partie de la clé. Si la clé est répétée, cette partie suffit souvent à déchiffrer tout le message.

Avec un One-Time Pad, la clé doit être aussi longue que le message, parfaitement aléatoire et utilisée une seule fois. En théorie, cest très sûr. En pratique, cest difficile à utiliser, car il faut générer, transmettre et protéger une clé aussi longue que chaque message.

Exercices Python

Partie 7 — AES-ECB : chiffrement texte

Les deux blocs chiffrés sont-ils identiques ? Oui.

En mode ECB, deux blocs de texte clair identiques chiffrés avec la même clé donnent deux blocs chiffrés identiques. Cela implique que le chiffrement conserve des motifs visibles dans les données : un attaquant ne peut pas lire directement le message, mais il peut repérer des répétitions, des structures ou des formes. ECB nest donc pas adapté pour chiffrer des données structurées ou répétitives.

Partie 8 — Leffet pingouin

Ce quon voit sur tux_ecb.bmp

Limage est chiffrée, donc les couleurs et les pixels sont modifiés, mais on distingue encore la structure générale du pingouin. Les zones répétitives de limage originale produisent des motifs répétitifs dans limage chiffrée.

Ce quon voit sur tux_cbc.bmp

Limage paraît beaucoup plus aléatoire. On ne reconnaît plus la forme du pingouin, car les blocs identiques ne produisent plus les mêmes blocs chiffrés.

Pourquoi ECB révèle des informations

ECB chiffre chaque bloc indépendamment des autres. Ainsi, si deux blocs de pixels sont identiques dans limage de départ, ils donnent exactement le même bloc chiffré. Les répétitions et les contours peuvent donc rester visibles.

Pourquoi CBC ne le fait pas

CBC mélange chaque bloc clair avec le bloc chiffré précédent avant le chiffrement. Même si deux blocs de départ sont identiques, leur contexte est différent, donc les blocs chiffrés obtenus sont différents. LIV sert aussi à rendre le premier bloc non déterministe.

Partie 9 — AES-CBC : chiffrement texte

Les deux blocs chiffrés sont-ils identiques en CBC ? Non.

Avec ECB, deux blocs clairs identiques donnent deux blocs chiffrés identiques, ce qui révèle les répétitions. Avec CBC, chaque bloc dépend du bloc précédent et de lIV : deux blocs clairs identiques peuvent donc donner deux résultats différents. CBC est donc plus sûr que ECB dans ce cas, car il masque beaucoup mieux les motifs du message.

Difficultés rencontrées

La principale difficulté était de bien distinguer le rôle des modes ECB et CBC. ECB chiffre chaque bloc séparément, ce qui explique les blocs identiques et leffet pingouin. CBC ajoute un chaînage avec lIV et le bloc précédent, ce qui rend le résultat moins prévisible.

Une autre difficulté était de bien appliquer le padding PKCS7 avant le chiffrement, puis de le retirer après le déchiffrement. Pour limage BMP, il fallait aussi conserver le header original de 54 octets afin que le fichier reste ouvrable, tout en ne chiffrant que les données des pixels.