1. Introduction au 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 )
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.
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
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.
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.
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.
| Mode | Nom Complet | Caractéristique principale | Usage |
|---|---|---|---|
| ECB | Electronic Code Book | Chaque bloc chiffré indépendamment. Même texte = même chiffré. | ❌ Déconseillé (insécure) |
| CBC | Cipher Block Chaining | Chaînage : chaque bloc XOR avec le précédent. Nécessite un IV. | ✅ Le plus utilisé |
| CFB | Cipher Feedback | Transforme le chiffrement par bloc en flux. Pas besoin de l'inverse de E pour déchiffrer. | ✅ Bon choix |
| OFB | Output Feedback | Génère un keystream indépendant du message. Résistant aux erreurs. | ✅ Transmissions bruitées |
4. Mode ECB — Electronic Code Book
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 !)
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é
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.
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)
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
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)
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.
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 !)
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
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 !
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ᵢ₊₁)
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
Le message est découpé en blocs de 64 bits.
(64 bits au total mais 8 bits de parité, non utilisés pour le chiffrement)
Réseau de Feistel avec 16 rounds. Développé par IBM (projet Lucifer), adopté comme standard US en 1977.
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 (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.
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
Stockés dans une matrice 4×4 d'octets (16 octets = 128 bits).
Avec 10, 12 ou 14 tours respectivement.
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.
Matrice d'état AES 4×4 = 16 octets = 128 bits
| # | Opération | Rôle | Type |
|---|---|---|---|
| 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é |
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)
Le dernier tour AES omet MixColumns. Cela facilite l'implémentation du déchiffrement (qui utilise les opérations inverses : InvSubBytes, InvShiftRows, InvMixColumns, AddRoundKey).
| Critère | DES | AES |
|---|---|---|
| Taille de bloc | 64 bits | 128 bits |
| Taille de clé | 56 bits (effectifs) | 128 / 192 / 256 bits |
| Nombre de tours | 16 | 10 / 12 / 14 |
| Structure | Réseau de Feistel | SPN (Rijndael) |
| Sécurité actuelle | ❌ Obsolète (cassable) | ✅ Standard mondial |
| Standardisation | 1977 (FIPS 46-2) | 2001 (FIPS 197) |
| Concepteurs | IBM / NSA | Rijmen & Daemen (Belges) |
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.
- Chiffrer m avec le mode ECB
- Chiffrer m avec le mode CBC (IV = 1010)
- Chiffrer m avec le mode CFB (IV = 1010)
É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.
── Mode ECB ──
Formule : Cᵢ = P(mᵢ)
── Mode CBC (IV = 1010) ──
Formule : C₀ = IV = 1010 | Cᵢ = P(mᵢ XOR Cᵢ₋₁)
── Mode CFB (IV = 1010) ──
Formule : C₀ = IV | Cᵢ = mᵢ XOR P(Cᵢ₋₁)
- TOAV6RFPY5VXC9
- YPFGFPDFDFIO
- Q9AXU8FPC9IOIO
- ACED4TFPVXIOIO
- UTJSDGFPRTAVIO
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é !
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.
Table S-Box (extrait des valeurs utilisées) :
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.
QCM — Chapitre 3 : Chiffrement Symétrique
15 questions techniques — Correction immédiate avec explication détaillée.