No description
Find a file
2026-05-13 06:18:30 +00:00
README.md Update README.md 2026-05-13 06:18:30 +00:00

TD2

Exercices sur papier

Exercice 1 — Conversions

  • Réponses sous-partie A (décimal → hex et hex → décimal) :

    • 65 → 41 | 200 → C8 | 255 → FF | 16 → 10
    • 4A → 74 | FF → 255 | 1F → 31 | B0 → 176
  • Réponses sous-partie B (encodage ASCII de AES, Crypto, Hello!) :

    • AES41 45 53
    • Crypto43 72 79 70 74 6F
    • Hello!48 65 6C 6C 6F 21
  • Réponses sous-partie C (XOR octets) :

    • FF ⊕ 0F = F0
    • A5 ⊕ A5 = 00 (tout octet XOR lui-même vaut 0)
    • 41 ⊕ 20 = 61'A' XOR espace = 'a' : XOR avec 0x20 bascule le bit 5, convertissant une majuscule ASCII en minuscule (et vice-versa)
    • 42 ⊕ 0F = 4D

Exercice 2 — Round AES

  • Matrice d'état initiale (BONJOUR LES AMIS, remplie colonne par colonne) :

    42  4F  4C  41
    4F  55  45  4D
    4E  52  53  49
    4A  20  20  53
    
  • Après AddRoundKey (XOR 0F sur chaque octet) :

    4D  40  43  4E
    40  5A  4A  42
    41  5D  5C  46
    45  2F  2F  5C
    
  • Après SubBytes (substitution via S-Box AES, octet XY → ligne X, colonne Y) :

    E3  09  1A  2F
    09  BE  D6  2C
    83  4C  4A  5A
    6E  15  15  4A
    
  • Après ShiftRows (décalage circulaire gauche de i positions pour la ligne i) :

    E3  09  1A  2F   (décalage 0)
    BE  D6  2C  09   (décalage 1)
    4A  5A  83  4C   (décalage 2)
    4A  6E  15  15   (décalage 3)
    
  • Réflexion sur les 10 rounds : Après 1 seul round, modifier 1 bit d'entrée n'affecte que quelques octets en sortie. Après 2 rounds, MixColumns diffuse chaque octet sur toute une colonne et ShiftRows répartit sur toutes les colonnes — une grande partie du bloc est affectée. Après 10 rounds, l'effet avalanche est complet : ~50 % des bits du chiffré changent pour 1 bit modifié en entrée. Les 10 rounds garantissent que diffusion et confusion sont totales, rendant toute cryptanalyse différentielle ou linéaire négligeable.


Exercice 3 — Padding PKCS7

  • Tableau des paddings :

    Taille message (octets) Octets ajoutés Valeur des octets
    13 3 03 03 03
    5 11 0B × 11
    1 15 0F × 15
    16 16 10 × 16
    31 1 01
  • Messages originaux Q2 a) et b) :

    • a) 48 65 6C 6C 6F 0B 0B...0B → dernier octet = 0B = 11 → on retire 11 octets → "Hello"
    • b) 54 65 73 74 21 21...21 04 04 04 04 → dernier octet = 04 = 4 → on retire 4 octets → "Test!!!!!!!! " (Test + 8 points d'exclamation)
  • Pourquoi padder un message multiple de 16 ? : Pour que le déchiffrement puisse toujours retirer le padding de façon non ambiguë. Sans cette règle, un déchiffreur ne saurait pas si les derniers octets appartiennent au message ou sont du padding. En ajoutant systématiquement un bloc complet de 0x10, la règle est universelle : on retire toujours les N derniers octets dont la valeur est N.


Exercice 4 — ECB et salaire de Jane

  • Salaire de Jane = candidat n° 1

  • Justification (propriétés ECB) : En ECB, deux blocs clairs identiques produisent deux blocs chiffrés identiques avec la même clé. On établit la correspondance depuis le salaire de Jack ("105 000 EUR/an" → Q9 2D FP VX C9 IO) : FP="00", VX=" E", C9="UR", IO="/a". Le candidat 1 (TO AV 6R FP Y5 VX C9) contient les blocs FP, VX, C9 — fragments ECB reconnaissables du suffixe " EUR". Il comporte 7 blocs (contre 6 pour Jack), cohérent avec un salaire supérieur à 105 000 EUR/an (un chiffre de plus). Aucun autre candidat ne présente cette combinaison cohérente de blocs connus.

  • Pourquoi ECB est déplorable pour les images : Les images contiennent de nombreuses zones de couleur uniforme (ciel, fond, peau…) qui génèrent des blocs de pixels identiques. En ECB, ces blocs identiques donnent des blocs chiffrés identiques. Les zones uniformes restent uniformes dans le chiffré, les contours et formes restent parfaitement visibles — l'image chiffrée est encore reconnaissable (effet pingouin).


Exercice 5 — CBC à la main

  • Chiffrement (C1 C2 C3 C4) : K = 5A, IV = 3C, E_K(x) = x ⊕ K

    C1 = (A1 ⊕ 3C) ⊕ 5A = 9D ⊕ 5A = C7
    C2 = (B2 ⊕ C7) ⊕ 5A = 75 ⊕ 5A = 2F
    C3 = (C3 ⊕ 2F) ⊕ 5A = EC ⊕ 5A = B6
    C4 = (D4 ⊕ B6) ⊕ 5A = 62 ⊕ 5A = 38
    

    C1 C2 C3 C4 = C7 2F B6 38

  • Déchiffrement de C7 2F B6 38 (D_K(C) = C ⊕ K, puis XOR avec le bloc chiffré précédent) :

    P1 = (C7 ⊕ 5A) ⊕ 3C = 9D ⊕ 3C = A1  ✓
    P2 = (2F ⊕ 5A) ⊕ C7 = 75 ⊕ C7 = B2  ✓
    P3 = (B6 ⊕ 5A) ⊕ 2F = EC ⊕ 2F = C3  ✓
    P4 = (38 ⊕ 5A) ⊕ B6 = 62 ⊕ B6 = D4  ✓
    

    → Message retrouvé : A1 B2 C3 D4

  • Réflexion IV :

    • a) Non : avec un IV différent, C1 = AES_K(P1 ⊕ IV) est différent et par propagation tous les blocs suivants changent. Même message + même clé + IV différent → chiffrés totalement différents.
    • b) Si le même IV est réutilisé avec la même clé pour deux messages dont le premier bloc est identique, alors C1 sera identique dans les deux chiffrés. Un attaquant détecte que les premiers blocs clairs sont identiques — fuite d'information. L'IV doit être aléatoire et unique à chaque chiffrement.
    • c) CBC corrige ECB car même si P_i = P_j, ils sont XOR-és avec des blocs chiffrés précédents différents avant chiffrement, produisant des chiffrés différents. La dépendance sur l'historique « randomise » chaque bloc indépendamment.

Exercice 6 — Attaque XOR

  • Clé Q1 : K = M ⊕ C = 48 45 4C 4C 4F68 65 6C 6C 6F = 20 20 20 20 20K = 0x20 (caractère espace)

  • Déchiffrement Q2 : C' = 77 6F 72 6C 6420 = 57 4F 52 4C 44"WORLD"

  • Clé Q3 et message déchiffré :

    • 7 premiers octets de clé : 03⊕42=41('A'), 2D⊕6F=42('B'), 2D⊕6E=43('C'), 2B⊕6A=41('A'), 2D⊕6F=42('B'), 36⊕75=43('C'), 33⊕72=41('A')
    • Clé = "ABC" (longueur 3, période clairement visible : ABCABCA…)
    • Message déchiffré complet : "Bonjour Alice"
  • Discussion XOR vs OTP :

    • Le XOR avec clé courte répétée est vulnérable car la périodicité crée des patterns statistiques exploitables (analyse de l'indice de coïncidence, attaque par clair connu, analyse fréquentielle par position de clé). Avec un peu de clair connu, la clé entière est retrouvée immédiatement.
    • Le One-Time Pad (OTP) — clé aussi longue que le message, utilisée une seule fois — est théoriquement parfaitement sûr (sécurité inconditionnelle prouvée par Shannon). Mais les contraintes pratiques sont rédhibitoires : la clé doit être aussi longue que chaque message, partagée de façon sécurisée au préalable, et ne peut jamais être réutilisée (réutilisation → XOR des deux clairs, compromis total).

Exercices Python

Partie 7 — ECB et blocs identiques

  • Les deux blocs chiffrés sont-ils identiques ? Oui — le test affiche Identiques ? True

  • Qu'est-ce que cela implique pour la sécurité ? En mode ECB, deux blocs clairs identiques produisent toujours deux blocs chiffrés identiques, quelle que soit la clé. Un attaquant peut détecter des répétitions dans le clair (structure, mots récurrents, patterns) sans jamais connaître la clé. Cela viole la sécurité sémantique : le chiffré révèle de l'information sur le clair. ECB ne doit pas être utilisé pour chiffrer des données réelles.


Partie 8 — Effet pingouin

  • Ce qu'on voit sur tux_ecb.bmp : L'image reste visuellement reconnaissable. La silhouette du pingouin, les zones de couleur (ventre, corps, fond) sont clairement visibles. Les couleurs ont changé mais les formes et contours sont parfaitement préservés.

  • Ce qu'on voit sur tux_cbc.bmp : L'image ressemble à du bruit aléatoire uniforme. Aucune forme, aucun contour, aucune structure n'est visible. Visuellement indistinguable d'une image générée aléatoirement.

  • Expliquer pourquoi ECB révèle des informations : Les zones de couleur uniforme produisent de nombreux blocs de pixels identiques. En ECB, des blocs clairs identiques donnent des blocs chiffrés identiques. Les zones uniformes restent uniformes dans le chiffré et les contours subsistent, révélant la structure de l'image originale.

  • Expliquer pourquoi CBC ne le fait pas : Chaque bloc est XOR-é avec le bloc chiffré précédent avant chiffrement. Même si deux blocs de pixels sont identiques, ils sont combinés avec des contextes différents (blocs précédents distincts), ce qui produit des blocs chiffrés différents. Aucune structure visuelle ne subsiste.


Partie 9 — CBC et blocs identiques

  • Les deux blocs chiffrés sont-ils identiques en CBC ? Non — le test affiche Identiques ? False

  • Comparaison avec ECB :

    Mode Blocs clairs identiques → blocs chiffrés
    ECB Identiques → fuite d'information
    CBC Différents → pas de fuite

    CBC est plus sûr : le XOR avec le bloc précédent brise la relation directe entre blocs clairs identiques. C1 = AES_K(P1 ⊕ IV) et C2 = AES_K(P2 ⊕ C1) ; comme C1 ≠ IV en général, même P1 = P2 implique C1 ≠ C2. CBC satisfait la sécurité sémantique qu'ECB viole.


Difficultés rencontrées

  • Exercice 2 (SubBytes) : bien lire la S-Box ligne puis colonne — un octet XY donne ligne X, colonne Y. Une confusion ligne/colonne produit des valeurs complètement fausses.
  • Exercice 2 (ShiftRows) : le décalage est circulaire vers la gauche, pas vers la droite. La ligne 0 n'est pas décalée.
  • Exercice 5 (CBC déchiffrement) : en déchiffrement, appliquer D_K puis XOR avec le bloc chiffré précédent (et non le bloc clair), à l'inverse du chiffrement.
  • Exercice 6 Q3 : identifier la longueur de la clé en observant la répétition dans les octets retrouvés. "ABCABCA" révèle une période de 3.
  • Partie 8 (effet pingouin) : conserver les 54 premiers octets du header BMP intacts est indispensable, sinon les visionneuses d'images ne reconnaissent pas le format et refusent d'afficher le fichier.