CHAPITRE 03 · COURS 1 · TD4

Cryptographie Moderne
Chiffrement Symétrique

Basé sur les cours de Dr. F. Khalifa · USTOMB · L3 SI & ISIL

1. Introduction au Chiffrement Symétrique

// Schéma général du chiffrement symétrique
ALICE (émetteur)                                    BOB (destinataire)
      │                                                    │
  M (texte clair)                                     M (texte clair)
      │                   ┌─────────┐                     │
      │──── Chiffrement ──►│ C = E(M,K) │── Transmission ──►│── Déchiffrement ──►│
      │       (clé K)     └─────────┘      (Canal réseau)        (clé K)
      │                                                    │
      └───────────── CLÉ SECRÈTE K ────────────────────────┘
                    (MÊME clé partagée!)

Propriété fondamentale : M = D( E(M, K), K )
📖 Définition — Chiffrement Symétrique

Dans la cryptographie symétrique, la clé de chiffrement est identique à la clé de déchiffrement. Cette clé est un secret partagé uniquement entre l'émetteur et le destinataire. La sécurité repose entièrement sur la confidentialité de cette clé unique.

M = D(C, K)  si  C = E(M, K)  —  Avec E = fonction de chiffrement, D = fonction de déchiffrement, K = clé secrète partagée
⚠️ Problème majeur — Distribution des clés

Le défi central du chiffrement symétrique est la distribution sécurisée de la clé. Alice et Bob doivent se mettre d'accord sur K via un canal sécurisé avant de communiquer. Si K est intercepté, toute la sécurité s'effondre. Ce problème sera résolu par la cryptographie asymétrique (chapitre 4).

Les algorithmes symétrique les plus connus sont : DES, 3DES, RC4, RC5, Blowfish, IDEA, AES. AES est aujourd'hui le standard mondial.

2. Chiffrement par Flot vs par Bloc

🌊 Chiffrement par Flot (Stream Cipher)

Le message est traité bit par bit (ou octet par octet). On génère un flux de clé (keystream) pseudo-aléatoire et on effectue un XOR avec le message.

Algorithmes : RC4, Bluetooth E0/1, GSM A5/1
Avantage : Très rapide, adapté aux communications temps réel.
Inconvénient : Réutiliser la même clé est catastrophique.

🧱 Chiffrement par Bloc (Block Cipher)

Le message est découpé en blocs de taille fixe (ex: 64 bits, 128 bits) puis chaque bloc est chiffré indépendamment (ou en chaîne).

Algorithmes : DES (64 bits), AES (128 bits)
Avantage : Sécurité prouvable, parallélisable.
Inconvénient : Nécessite un padding si le message n'est pas un multiple de la taille de bloc.

🔑 Les 3 opérations de base d'un chiffrement par bloc

Un algorithme de chiffrement par bloc opère généralement sur chaque bloc par une succession de :
① Permutation — réorganisation des bits
② Substitution — remplacement via une S-Box (boîte de substitution)
③ XOR — Ou Exclusif avec la sous-clé du tour

Si le message M a n bits, on le découpe en s blocs de ℓ = n/s bits. Si n n'est pas un multiple de ℓ, on complète (padding) le dernier bloc avec des bits sans signification.

3. Modes Opératoires — Vue d'ensemble

Un algorithme de chiffrement par bloc seul n'est pas suffisant — il faut définir comment traiter les blocs successifs. Les modes opératoires définissent la façon dont la fonction de chiffrement est appliquée à plusieurs blocs.

ModeNom CompletCaractéristique principaleUsage
ECBElectronic Code BookChaque bloc chiffré indépendamment. Même texte = même chiffré.❌ Déconseillé (insécure)
CBCCipher Block ChainingChaînage : chaque bloc XOR avec le précédent. Nécessite un IV.✅ Le plus utilisé
CFBCipher FeedbackTransforme le chiffrement par bloc en flux. Pas besoin de l'inverse de E pour déchiffrer.✅ Bon choix
OFBOutput FeedbackGénère un keystream indépendant du message. Résistant aux erreurs.✅ Transmissions bruitées

4. Mode ECB — Electronic Code Book

// Mode ECB — Chiffrement indépendant de chaque bloc
Texte clair :  m₁        m₂        m₃        m₄
               │         │         │         │
               ▼         ▼         ▼         ▼
             E(K)      E(K)      E(K)      E(K)     ← MÊME clé K pour tous
               │         │         │         │
               ▼         ▼         ▼         ▼
Texte chiffré: C₁        C₂        C₃        C₄

Chiffrement : Cᵢ = E(mᵢ, K)
Déchiffrement : mᵢ = D(Cᵢ, K)

⚠️  Si m₁ = m₃  →  C₁ = C₃  (VULNÉRABILITÉ CRITIQUE !)
💥 Faiblesse CRITIQUE — Attaque ECB

En mode ECB, deux blocs de texte clair identiques produisent toujours deux blocs chiffrés identiques. Un attaquant peut :

① Identifier des patterns dans les données (ex: image chiffrée encore reconnaissable — "ECB Penguin")
② Effectuer des attaques par substitution de blocs (ex: modifier son salaire en copiant le bloc d'un autre)
Rejouer des blocs sans connaître la clé

Chiffrement ECB : Cᵢ = E(mᵢ, K)
Déchiffrement ECB : mᵢ = D(Cᵢ, K)
✅ Seul avantage

Les blocs peuvent être chiffrés/déchiffrés en parallèle (chaque bloc est indépendant), ce qui peut être utile pour certaines applications de chiffrement de bases de données clé-valeur.

5. Mode CBC — Cipher Block Chaining

CBC résout le problème d'ECB en enchaînant les blocs : chaque bloc de texte clair est d'abord XORé avec le bloc chiffré précédent avant d'être chiffré. Le premier bloc utilise un Vecteur d'Initialisation (IV) aléatoire.

// Mode CBC — Chiffrement en chaîne
IV(aléatoire)  m₁         m₂          m₃
    │          │           │            │
    └──► XOR ◄─┘     ┌─► XOR ◄──┐ ┌─► XOR ◄──┐
           │          │    │     │ │    │      │
           ▼          │    ▼     │ │    ▼      │
         E(K)         │  E(K)    │ │  E(K)     │
           │          │    │     │ │    │      │
           ▼          │    ▼     │ │    ▼      │
           C₁ ────────┘    C₂ ──┘ └─── C₃ ───►...

CHIFFREMENT : C₀ = IV
              Cᵢ = E(mᵢ XOR Cᵢ₋₁, K)

DÉCHIFFREMENT :
    mᵢ = D(Cᵢ, K) XOR Cᵢ₋₁   (avec C₀ = IV)
Chiffrement CBC : C₀ = IV  |  Cᵢ = E(mᵢ ⊕ Cᵢ₋₁, K)
Déchiffrement CBC : mᵢ = D(Cᵢ, K) ⊕ Cᵢ₋₁
🔗
Chaînage
Même texte clair → chiffrés différents si IV ou position différente. Élimine les patterns.
🎲
IV aléatoire
Le vecteur d'initialisation DOIT être aléatoire et unique par message. Il est transmis en clair avec le message.
Propagation d'erreur
Une erreur dans Cᵢ affecte le déchiffrement de mᵢ ET mᵢ₊₁ uniquement (puis auto-synchronisation).
⚠️ Limitation CBC — Déchiffrement séquentiel

Le chiffrement CBC est séquentiel (chaque bloc dépend du précédent) → pas de parallélisation. En revanche, le déchiffrement peut être parallélisé (tous les Cᵢ sont disponibles).

6. Modes CFB & OFB

6.1 Mode CFB — Cipher Feedback
// Mode CFB — Retour du chiffré comme entrée
IV ──────────────────────────────────────┐
     │           C₁                     │
     ▼           │                      │
   E(K) ──► XOR ◄── m₁    C₁ ──► E(K) ──► XOR ◄── m₂
              │                           │
              C₁                          C₂

CHIFFREMENT : C₀ = IV
              Cᵢ = mᵢ XOR E(Cᵢ₋₁, K)

DÉCHIFFREMENT : mᵢ = Cᵢ XOR E(Cᵢ₋₁, K)
CFB Chiffrement : Cᵢ = mᵢ ⊕ E(Cᵢ₋₁, K)
CFB Déchiffrement : mᵢ = Cᵢ ⊕ E(Cᵢ₋₁, K)
✅ Avantage clé du mode CFB pour l'examen !

Le déchiffrement CFB utilise la même fonction E (chiffrement) et non son inverse D. Cela simplifie l'implémentation car on n'a pas besoin de programmer D séparément. CFB transforme le chiffrement par bloc en un chiffrement par flot.

6.2 Mode OFB — Output Feedback
// Mode OFB — Keystream indépendant du message
IV ──► E(K) ──► E(K) ──► E(K) ──► ...   (keystream, indépendant de M)
         │         │         │
        XOR       XOR       XOR
         │         │         │
         m₁        m₂        m₃
         │         │         │
         C₁        C₂        C₃

CHIFFREMENT : O₀ = IV, Oᵢ = E(Oᵢ₋₁, K), Cᵢ = mᵢ XOR Oᵢ
DÉCHIFFREMENT : mᵢ = Cᵢ XOR Oᵢ  (le keystream est le même !)
🔑 Différence OFB vs CFB — Point d'examen !

En OFB, le keystream est généré indépendamment du texte chiffré (rétroaction depuis la sortie de E). En CFB, la rétroaction vient du texte chiffré Cᵢ.

OFB : erreur dans Cᵢ n'affecte que mᵢ (1 bloc). Idéal pour les canaux bruités (transmissions satellite).
CFB : erreur dans Cᵢ affecte mᵢ et mᵢ₊₁ (2 blocs).

7. Réseau de Feistel

📖 Principe du Réseau de Feistel

Le réseau de Feistel est une structure de chiffrement par bloc qui divise le bloc en deux moitiés L (Left) et R (Right) et applique une série de tours (rounds). La propriété remarquable : la fonction f n'a pas besoin d'être inversible pour que le déchiffrement soit possible !

// Réseau de Feistel — Structure d'un tour
       TOUR i                    TOUR i+1
  ┌──────────────┐
  │  Lᵢ  │  Rᵢ  │
  └───┬───┴───┬──┘
      │       │
      │   ┌───▼───┐
      │   │ f(Kᵢ₊₁, Rᵢ) │   ← f peut être quelconque
      │   └───┬───┘
      │       │
      ▼ XOR ◄─┘
  ┌───────────────┐
  │Lᵢ₊₁ = Rᵢ    │
  │Rᵢ₊₁ = Lᵢ ⊕ f(Kᵢ₊₁, Rᵢ)│
  └───────────────┘

Chiffrement : Lᵢ₊₁ = Rᵢ
              Rᵢ₊₁ = Lᵢ ⊕ f(Kᵢ₊₁, Rᵢ)

Déchiffrement (en inversant l'ordre des sous-clés) :
              Rᵢ = Lᵢ₊₁
              Lᵢ = Rᵢ₊₁ ⊕ f(Kᵢ₊₁, Lᵢ₊₁)
f(Kᵢ₊₁, Rᵢ) = P( S( Kᵢ₊₁ ⊕ Rᵢ ) )  —  avec S = S-Box (substitution), P = Permutation
💡 Pourquoi le déchiffrement ne nécessite pas f⁻¹ ?

Parce que pour déchiffrer on a :
On connaît Lᵢ₊₁ = Rᵢ → donc on peut recalculer f(Kᵢ₊₁, Rᵢ) = f(Kᵢ₊₁, Lᵢ₊₁)
Puis Lᵢ = Rᵢ₊₁ ⊕ f(Kᵢ₊₁, Lᵢ₊₁) — le XOR est son propre inverse !

C'est l'élégance mathématique du Feistel : même si f est non-inversible (une S-Box), le déchiffrement fonctionne parfaitement.

8. DES — Data Encryption Standard

📦
Taille de Bloc
64 bits
Le message est découpé en blocs de 64 bits.
🗝️
Taille de Clé
56 bits effectifs
(64 bits au total mais 8 bits de parité, non utilisés pour le chiffrement)
🔄
Structure
16 tours
Réseau de Feistel avec 16 rounds. Développé par IBM (projet Lucifer), adopté comme standard US en 1977.
Historique et limites du DES

DES a été développé par IBM dans les années 1970 sous le nom de projet Lucifer. Il a été adopté comme standard par le NBS (FIPS 46-2) en 1977. Aujourd'hui, DES est considéré comme obsolète car sa clé de 56 bits est trop courte — en 1998, l'ordinateur "Deep Crack" de l'EFF a cassé DES en 22 heures par force brute.

⚠️ DES vs 3DES — Point d'examen

DES (Simple) : Clé 56 bits → cassable par force brute moderne.
3DES (Triple DES) : Applique DES 3 fois avec 2 ou 3 clés différentes → clé effective de 112 ou 168 bits. Beaucoup plus sûr mais 3 fois plus lent.
3DES est encore utilisé dans certains systèmes bancaires mais AES le remplace progressivement.

Structure interne du DES
// DES — Flux de traitement
Texte clair (64 bits)
        │
        ▼
  Permutation initiale IP
        │
   ┌────┴────┐
   L₀(32b) R₀(32b)       ← Division en 2 moitiés
   │         │
   │    f(K₁,R₀) ← Sous-clé K₁ (48 bits)
   │         │
   R₀    L₀ ⊕ f()
   └────┬────┘
   [16 tours de Feistel identiques]
   └────┬────┘
        ▼
  Permutation finale IP⁻¹
        │
        ▼
  Texte chiffré (64 bits)

  f(Kᵢ, Rᵢ) = P( S₁,S₂,...,S₈ ( Expansion(Rᵢ) ⊕ Kᵢ ) )
  avec : 8 S-Boxes de 6→4 bits, Expansion 32→48 bits

9. AES — Advanced Encryption Standard

📦
Taille de Bloc
128 bits
Stockés dans une matrice 4×4 d'octets (16 octets = 128 bits).
🗝️
Tailles de Clé
128 / 192 / 256 bits
Avec 10, 12 ou 14 tours respectivement.
🏛️
Structure
SPN (Substitution-Permutation Network). Pas un réseau de Feistel. Développé par Rijmen & Daemen (Rijndael).
La matrice d'état AES (4×4 octets)

AES stocke les 128 bits dans un tableau 4×4 d'octets appelé "état" (state). Chaque case contient 1 octet (8 bits). Les 16 octets remplissent la matrice colonne par colonne.

X₁
X₂
X₃
X₄
X₅
X₆
X₇
X₈
X₉
X₁₀
X₁₁
X₁₂
X₁₃
X₁₄
X₁₅
X₁₆

Matrice d'état AES 4×4 = 16 octets = 128 bits

Les 4 opérations de chaque tour AES
#OpérationRôleType
1 SubBytes Substitution non-linéaire : chaque octet est remplacé par une valeur dans la S-Box AES (table de 256 entrées). Apporte la confusion. Substitution
2 ShiftRows Décalage circulaire des lignes de la matrice. Ligne 0 : inchangée. Ligne 1 : décalée de 1. Ligne 2 : de 2. Ligne 3 : de 3. Disperse les octets. Permutation
3 MixColumns Chaque colonne est multipliée par une matrice fixe dans GF(2⁸). Mélange les 4 octets d'une colonne. Apporte la diffusion maximale. Diffusion
4 AddRoundKey XOR de la matrice d'état avec la sous-clé du tour (128 bits dérivée de la clé principale par l'expansion de clé). XOR Clé
// Structure d'un tour AES
  Entrée du tour (128 bits = matrice 4×4)
           │
           ▼
    ┌─────────────────┐
    │   SubBytes      │  ← S-Box sur chaque octet (non-linéarité)
    └────────┬────────┘
             ▼
    ┌─────────────────┐
    │   ShiftRows     │  ← Décalage cyclique des lignes
    └────────┬────────┘
             ▼
    ┌─────────────────┐
    │   MixColumns    │  ← Mélange des colonnes (sauf dernier tour)
    └────────┬────────┘
             ▼
    ┌─────────────────┐
    │  AddRoundKey    │  ← XOR avec sous-clé du tour (128 bits)
    └────────┬────────┘
             ▼
  Sortie du tour (128 bits)
⚠️ Détail d'examen — Dernier tour AES

Le dernier tour AES omet MixColumns. Cela facilite l'implémentation du déchiffrement (qui utilise les opérations inverses : InvSubBytes, InvShiftRows, InvMixColumns, AddRoundKey).

Comparaison DES vs AES
CritèreDESAES
Taille de bloc64 bits128 bits
Taille de clé56 bits (effectifs)128 / 192 / 256 bits
Nombre de tours1610 / 12 / 14
StructureRéseau de FeistelSPN (Rijndael)
Sécurité actuelle❌ Obsolète (cassable)✅ Standard mondial
Standardisation1977 (FIPS 46-2)2001 (FIPS 197)
ConcepteursIBM / NSARijmen & Daemen (Belges)
SIMULATEUR — Comparaison Visuelle ECB vs CBC (chiffrement 4 bits)

Ce simulateur utilise la permutation simple b₁b₂b₃b₄ → b₂b₃b₄b₁ (rotation gauche de 1 bit) comme fonction de chiffrement pour illustrer la différence entre ECB et CBC.

Message binaire (multiple de 4 bits recommandé)
Vecteur d'initialisation IV (4 bits, pour CBC/CFB)
Blocs en clair
Résultat chiffré (avec détail)
← Cliquez sur un mode de chiffrement pour visualiser
Blocs chiffrés
// CORRECTION TD4
Travaux Dirigés 4 · Dr F. Khalifa · 2025-2026
TD4 — Chiffrement Symétrique (Blocs & Feistel)
Exercice 1 — Modes ECB, CBC, CFB
Message en clair : m = 101100010100101 (15 bits). Chiffrement par blocs de longueur 4, avec la permutation (clé + fonction) : b₁b₂b₃b₄ → b₂b₃b₄b₁ (rotation gauche d'1 bit). IV = 1010.
  • Chiffrer m avec le mode ECB
  • Chiffrer m avec le mode CBC (IV = 1010)
  • Chiffrer m avec le mode CFB (IV = 1010)
✅ Correction complète

Étape 0 — Découpage en blocs (taille = 4 bits) :
15 bits → 3 blocs complets + 3 bits restants. On ajoute 1 bit de padding (0) pour obtenir le 4ème bloc.

Blocs du message
m = 1011 | 0001 | 0100 | 1010 ← (dernier bloc = 101 + 1 bit de padding: 0) m₁ m₂ m₃ m₄ Permutation P : b₁b₂b₃b₄ → b₂b₃b₄b₁ (rotation gauche de 1) P(1011) → b₂=0, b₃=1, b₄=1, b₁=1 → 0111 P(0001) → b₂=0, b₃=0, b₄=1, b₁=0 → 0010 P(0100) → b₂=1, b₃=0, b₄=0, b₁=0 → 1000 P(1010) → b₂=0, b₃=1, b₄=0, b₁=1 → 0101 P(0011) → b₂=0, b₃=1, b₄=1, b₁=0 → 0110 (pour CBC) P(0010) → b₂=0, b₃=1, b₄=0, b₁=0 → 0100 P(1110) → b₂=1, b₃=1, b₄=0, b₁=1 → 1101 P(1110) → calculé pour CFB P(1100) → b₂=1, b₃=0, b₄=0, b₁=1 → 1001 P(1101) → b₂=1, b₃=0, b₄=1, b₁=1 → 1011

── Mode ECB ──

Formule : Cᵢ = P(mᵢ)

C₁ = P(m₁) = P(1011) = 0111 C₂ = P(m₂) = P(0001) = 0010 C₃ = P(m₃) = P(0100) = 1000 C₄ = P(m₄) = P(1010) = 0101 Résultat ECB : 0111 0010 1000 0101

── Mode CBC (IV = 1010) ──

Formule : C₀ = IV = 1010  |  Cᵢ = P(mᵢ XOR Cᵢ₋₁)

C₁ = P(m₁ ⊕ IV) = P(1011 ⊕ 1010) = P(0001) = 0010 C₂ = P(m₂ ⊕ C₁) = P(0001 ⊕ 0010) = P(0011) = 0110 C₃ = P(m₃ ⊕ C₂) = P(0100 ⊕ 0110) = P(0010) = 0100 C₄ = P(m₄ ⊕ C₃) = P(1010 ⊕ 0100) = P(1110) = 1101 Résultat CBC : 0010 0110 0100 1101 Remarque : C₁≠C₁(ECB) → le chaînage élimine les patterns ✓

── Mode CFB (IV = 1010) ──

Formule : C₀ = IV  |  Cᵢ = mᵢ XOR P(Cᵢ₋₁)

C₁ = m₁ ⊕ P(IV) = 1011 ⊕ P(1010) = 1011 ⊕ 0101 = 1110 C₂ = m₂ ⊕ P(C₁) = 0001 ⊕ P(1110) = 0001 ⊕ 1101 = 1100 C₃ = m₃ ⊕ P(C₂) = 0100 ⊕ P(1100) = 0100 ⊕ 1001 = 1101 C₄ = m₄ ⊕ P(C₃) = 1010 ⊕ P(1101) = 1010 ⊕ 1011 = 0001 Résultat CFB : 1110 1100 1101 0001 Note : le déchiffrement CFB utilise aussi P() (pas P⁻¹) !
Exercice 2 — Faiblesse du mode ECB (attaque par substitution)
Youcef (salaire : 105000 Da/an) a trouvé son entrée chiffrée dans la base de données : Q92DT8FPVXC9IO. Blocs de 2 caractères, format : [nom][2 espaces][salaire]. Mode ECB. Trouver le salaire de Younes (la patronne) parmi :
  • TOAV6RFPY5VXC9
  • YPFGFPDFDFIO
  • Q9AXU8FPC9IOIO
  • ACED4TFPVXIOIO
  • UTJSDGFPRTAVIO
✅ Correction — Exploitation de la faiblesse ECB

Principe : En ECB, un même bloc plaintext donne toujours le même bloc chiffré. On peut donc créer un "dictionnaire" partiel sans connaître la clé !

Étape 1 : Décomposer l'entrée de Youcef
Format DB : [nom 6 cars][2 espaces][salaire 6 chiffres] Youcef = YOUCEF__105000 (__ = 2 espaces) Chiffré : Q9 | 2D | T8 | FP | VX | C9 | IO Clair : YO | UC | EF | __ | 10 | 50 | 00 Dictionnaire des blocs connus : YO → Q9 | UC → 2D | EF → T8 " " → FP | 10 → VX | 50 → C9 | 00 → IO
Étape 2 : Analyser toutes les entrées avec le dictionnaire
TOAV6R | FP | Y5 | VX | C9 → " " = spaces ✓ → salaire = Y5-10-50 = ?1050 YPFG | FP | DF | DF | IO → 4 chars nom → salaire = DF-DF-00 = ????00 Q9AXU8 | FP | C9 | IO | IO → Q9=YO → nom commence par YO (YOUNES!) → salaire = 50-00-00 ACED4T | FP | VX | IO | IO → " " ✓ → salaire = 10-00-00 = 100000 UTJSDG | FP | RT | AV | IO → salaire = RT-AV-00 = ????00
Étape 3 : Identifier l'entrée de Younes (patronne de Youcef)
Q9AXU8FPC9IOIO commence par Q9 = "YO" → nom commence par YOUNES Q9 = YO AX = UN U8 = ES → Nom = YOUNES (6 caractères) ✓ Salaire après FP (espaces) : C9 = 50 IO = 00 IO = 00 Salaire de Younes = 500000 Da/an La patronne gagne 5× plus que Youcef (105000 Da) — cohérent !

Leçon : Sans connaître la clé de chiffrement, un attaquant peut lire et déduire des données sensibles grâce aux patterns ECB. C'est pourquoi ECB est interdit en pratique sécurisée.

Exercice 3 — Crypto-système sur 4 bits avec S-Box
S-Box donnée (entrée x₁x₂x₃x₄ → sortie y₁y₂y₃y₄) — voir table dans le TD. Calculer l'image du mot 1011 par le crypto-système E avec k₁ = 0110 et k₂ = 1110. (Étapes : XOR k₁ → S-Box → XOR k₂ → S-Box)
✅ Correction

Table S-Box (extrait des valeurs utilisées) :

Table S-Box complète
x=0000→1110 x=0001→0100 x=0010→1101 x=0011→0001 x=0100→0010 x=0101→1111 x=0110→1011 x=0111→1000 x=1000→0011 x=1001→1010 x=1010→0110 x=1011→1100 x=1100→0101 x=1101→1001 x=1110→0000 x=1111→0111
Application du crypto-système E(1011) avec k₁=0110, k₂=1110
Étape 1 : x ⊕ k₁ = 1011 ⊕ 0110 = 1101 (= 13 en décimal) Étape 2 : S(1101) = S(13) = 1001 (lu dans la table : x=1101 → y=1001) Étape 3 : 1001 ⊕ k₂ = 1001 ⊕ 1110 = 0111 (= 7 en décimal) Étape 4 : S(0111) = S(7) = 1000 (lu dans la table : x=0111 → y=1000) Résultat : E(1011) = 1000
Exercice 4 — Réseau de Feistel (2 tours, 8 bits)
Réseau de Feistel sur 8 bits (2 tours). f(Kᵢ₊₁, Rᵢ) = P(S(Kᵢ₊₁ ⊕ Rᵢ)).
S-Box : S(0)=8, S(1)=6, S(2)=7, S(3)=9, S(4)=3, S(5)=12, S(6)=10, S(7)=15, S(8)=13, S(9)=1, S(10)=14, S(11)=4, S(12)=0, S(13)=11, S(14)=5, S(15)=2.
Permutation P : bit 0→pos 3, bit 1→pos 2, bit 2→pos 1, bit 3→pos 0 (inversion des bits).
Chiffrer m = 163 avec K₁ = 7 et K₂ = 12.
✅ Correction détaillée
Conversion initiale
m = 163 en binaire : 128+32+2+1 = 10100011 (8 bits) Division : L₀ = 1010 (4 bits gauches = 10 décimal) R₀ = 0011 (4 bits droits = 3 décimal) K₁ = 7 = 0111 K₂ = 12 = 1100 Permutation P (inversion de bits) : b₃b₂b₁b₀ → b₀b₁b₂b₃ P(a₃a₂a₁a₀) = a₀a₁a₂a₃ (renversement)
Tour 1 : f(K₁, R₀) = P(S(K₁ ⊕ R₀))
K₁ ⊕ R₀ = 0111 ⊕ 0011 = 0100 (= 4 décimal) S(4) = 3 = 0011 (lu dans la S-Box) P(0011) → inverser : 0011 → 1100 f(K₁, R₀) = 1100 (= 12 décimal) L₁ = R₀ = 0011 R₁ = L₀ ⊕ f(K₁,R₀) = 1010 ⊕ 1100 = 0110
Tour 2 : f(K₂, R₁) = P(S(K₂ ⊕ R₁))
K₂ ⊕ R₁ = 1100 ⊕ 0110 = 1010 (= 10 décimal) S(10) = 14 = 1110 (lu dans la S-Box) P(1110) → inverser : 1110 → 0111 f(K₂, R₁) = 0111 (= 7 décimal) L₂ = R₁ = 0110 R₂ = L₁ ⊕ f(K₂,R₁) = 0011 ⊕ 0111 = 0100
Résultat final
Texte chiffré = L₂ || R₂ = 0110 | 0100 = 01100100 En décimal : 64 + 32 + 4 = 100 Vérification déchiffrement (ordre inversé des clés K₂, K₁) : Entrée : L₂=0110, R₂=0100 Utiliser K₂ en premier : f(K₂, R₂) = P(S(1100⊕0100)) = P(S(1000)) = P(0011) = 1100 L₁ = R₂ = 0100... → R₁ = L₂ ⊕ 1100 = 0110 ⊕ 1100 = ... → Retrouver L₀=1010, R₀=0011 → m=163 ✓
// ÉVALUATION — 15 QCM

QCM — Chapitre 3 : Chiffrement Symétrique

15 questions techniques — Correction immédiate avec explication détaillée.

Score : 0 / 15