CHAPITRE 02 · COURS 1 · TD3

Cryptographie
Classique

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

1. Introduction à la Cryptographie

// Schéma général d'un système cryptographique
  ALICE (émetteur)                              BOB (destinataire)
       │                                               │
  M (texte clair)  ──►  E(M, K) = C  ──►  D(C, K) = M
       │             (Chiffrement)  (Transmission)  (Déchiffrement)
       │                   │              │               │
     Clé K ───────────►  Canal  ◄──── Eve (intrus) ──► Clé K
                         réseau      [écoute/attaque]
📄
Texte Clair (M)
Message original, lisible. Alice souhaite le transmettre à Bob de façon sécurisée.
🔐
Texte Chiffré (C)
Message incompréhensible obtenu après chiffrement : C = E(M, K). Seul Bob peut le déchiffrer.
🗝️
Clé (K)
Information secrète partagée entre Alice et Bob. Sans K, impossible de chiffrer ou déchiffrer correctement.
Chiffrement : C = E(M, K)  |  Déchiffrement : M = D(C, K)  |  Propriété fondamentale : M = D(E(M, K))

L'algorithme de chiffrement peut être public (pas besoin de le garder secret), mais la clé doit rester secrète. C'est le principe de Kerckhoffs.

1.1 Types de chiffrements classiques
🔄 Chiffrement par Substitution

Chaque lettre (ou groupe) est remplacée par une autre lettre selon une règle.

Sous-types : Mono-alphabétique (une lettre → une lettre fixe) et Poly-alphabétique (une lettre → plusieurs lettres possibles selon la position).

🔀 Chiffrement par Transposition

Les lettres du message sont réarrangées (permutées) selon un schéma défini, sans en changer la valeur.

Exemple : BONJOUR → OJRUBNO (selon une permutation).

2. Le Chiffrement de César

📖 Contexte historique

Le chiffre de César est le plus ancien chiffrement par substitution connu. Il a été utilisé par Jules César dans l'armée romaine durant la guerre des Gaules avec un décalage de k = 3. C'est un chiffrement par décalage alphabétique.

Correspondance Lettre ↔ Nombre
Formules
Chiffrement : E(x, K) = (x + K) mod 26
Déchiffrement : D(y, K) = (y − K) mod 26

x est le rang de la lettre claire (A=0, B=1, …, Z=25), K est la clé de décalage (0 ≤ K ≤ 25), et y est le rang de la lettre chiffrée.

⚠️ Faiblesse critique

Il n'existe que 25 clés possibles (de 1 à 25). Une attaque par force brute (tester toutes les clés) casse le code en quelques secondes. De plus, l'analyse de fréquence le brise facilement.

Exemple du cours : k = 3
// Chiffrement de César k=3
Clair  : A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Chiffré: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

Exemple : BONJOUR (k=3)
B → rang 1  → (1+3) mod 26 = 4  → E
O → rang 14 → (14+3) mod 26 = 17 → R
N → rang 13 → (13+3) mod 26 = 16 → Q
J → rang 9  → (9+3) mod 26 = 12  → M
O → rang 14 → (14+3) mod 26 = 17 → R
U → rang 20 → (20+3) mod 26 = 23 → X
R → rang 17 → (17+3) mod 26 = 20 → U
Résultat : BONJOUR → ERQMRXU
SIMULATEUR — Chiffrement de César (Temps Réel)
Texte à chiffrer
Clé de décalage (K)
3
Résultat
ERQMRXU

4. Le Chiffrement de Vigenère

Vigenère améliore César en utilisant une clé de longueur m (un mot-clé). Chaque lettre du message est chiffrée avec un décalage différent selon la lettre correspondante de la clé (répétée cycliquement).

E(x₁,x₂,...,xₘ, K) = (x₁+k₁, x₂+k₂, ..., xₘ+kₘ) mod 26
D(y₁,y₂,...,yₘ, K) = (y₁−k₁, y₂−k₂, ..., yₘ−kₘ) mod 26

K = (k₁, k₂, ..., kₘ) est la clé (chaque kᵢ est le rang de la lettre du mot-clé, avec A=0, B=1, etc.)

Exemple du cours : mot-clef "CIPHER"
📌 Détail du calcul — CIPHER = (2, 8, 15, 7, 4, 17)

C=2, I=8, P=15, H=7, E=4, R=17

// Vigenère — THISCRYPTOSYSTEMISNOTSECURE avec clé CIPHER
Message : T  H  I  S  C  R  Y  P  T  O  S  Y  S  T  E  M  I  S  N  O  T  S  E  C  U  R  E
Rangs M : 19 7  8  18 2  17 24 15 19 14 18 24 18 19 4  12 8  18 13 14 19 18 4  2  20 17 4
Clé(rep): C  I  P  H  E  R  C  I  P  H  E  R  C  I  P  H  E  R  C  I  P  H  E  R  C  I  P
Rangs K : 2  8  15 7  4  17 2  8  15 7  4  17 2  8  15 7  4  17 2  8  15 7  4  17 2  8  15
Somme%26: 21 15 23 25 6  8  0  23 8  21 22 15 20 1  19 19 12 9  15 22 8  25 8  19 22 25 19
Chiffré : V  P  X  Z  G  I  A  X  I  V  W  P  U  B  T  T  M  J  P  W  I  Z  I  T  W  Z  T

Résultat : VPXZGIAXIVWPUBTTMJPWIZITW ZT ✓
⚠️ Faiblesse — Test de Kasiski

Si le même segment du texte clair se retrouve aligné avec le même segment de la clé, le même texte chiffré apparaît. En cherchant les répétitions dans le texte chiffré et en calculant le PGCD des distances entre elles, on peut déduire la longueur de la clé, puis casser chaque sous-chiffrement César séparément.

5. Chiffrement Affine

Le chiffrement affine généralise César : au lieu d'un simple décalage, on applique une fonction affine y = ax + b. La clé est un couple K = (a, b).

Chiffrement : E(x, K) = (a·x + b) mod 26
Déchiffrement : D(y, K) = a⁻¹·(y − b) mod 26
🔑 Condition de validité CRUCIALE pour l'examen

Pour que le chiffrement affine soit inversible (= déchiffrable), il faut absolument que :

pgcd(a, 26) = 1 → a doit être premier avec 26.

Les valeurs valides pour a sont : 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25 (12 valeurs).
Si a=2 par exemple, pgcd(2,26)=2≠1 → pas d'inverse → pas de déchiffrement possible.

Remarque : Si a=1 → on retrouve le chiffre de César (b = décalage). Si b=0 → le A est toujours chiffré A.

Inverse modulaire de a (mod 26)
aa⁻¹ mod 26aa⁻¹ mod 26
11157
391723
5211911
715215
932317
11192525
Exemple du cours : chiffrer "SECRET" avec K=(3,7)
// Affine K=(a=3, b=7) — Chiffrement de SECRET
Lettre : S   E   C   R   E   T
Rang x : 18  4   2   17  4   19
Calcul : (3×18+7)%26 (3×4+7)%26 (3×2+7)%26 (3×17+7)%26 (3×4+7)%26 (3×19+7)%26
         = 61%26      = 19%26    = 13%26    = 58%26     = 19%26    = 64%26
         = 9          = 19       = 13       = 6         = 19       = 12
Chiffré: J   T   N   G   T   M
Résultat : SECRET → JTNGTM

── Déchiffrement ── (a⁻¹=9 car 3×9=27≡1 mod26)
Lettre : J   T   N   G   T   M
Rang y : 9   19  13  6   19  12
Calcul : 9×(9−7)%26 9×(19−7)%26 9×(13−7)%26 9×(6−7)%26 9×(19−7)%26 9×(12−7)%26
         = 9×2%26   = 9×12%26  = 9×6%26   = 9×(-1)%26 = 9×12%26  = 9×5%26
         = 18       = 4        = 2         = 17        = 4        = 19
Clair  : S   E   C   R   E   T

6. Chiffrement de Hill

Hill utilise l'algèbre matricielle sur Z/26Z. On traite les lettres par blocs de taille m (souvent m=2), et la clé est une matrice carrée K ∈ GL_m(Z/26Z).

Chiffrement : C = K · P mod 26
Déchiffrement : P = K⁻¹ · C mod 26
🔑 Condition de validité

La matrice K est inversible si et seulement si :
pgcd(det(K), 26) = 1
(le déterminant doit être inversible mod 26)

Pour m=2, clé K = [[a,b],[c,d]] :

C₁ = (a·P₁ + b·P₂) mod 26   |   C₂ = (c·P₁ + d·P₂) mod 26
Calcul de la matrice inverse (m=2)
📐 Formule de la matrice inverse mod 26

Pour K = [[a,b],[c,d]] :
det(K) = (a·d − b·c) mod 26
K⁻¹ = (det K)⁻¹ · [[d, −b], [−c, a]] mod 26

Exemple du cours : chiffrer "USTO" avec K = [[9,4],[5,7]]
// Hill — Chiffrement USTO, K=[[9,4],[5,7]]
Lettres : U  S  T  O  → rangs (a=1) : 20 18 19 14
Blocs   : [U,S] = [20,18]  |  [T,O] = [19,14]

── Bloc 1 [U,S] ──
C₁ = (9×20 + 4×18) mod 26 = (180+72) mod 26 = 252 mod 26 = 18  → S
C₂ = (5×20 + 7×18) mod 26 = (100+126) mod 26 = 226 mod 26 = 18  → S

── Bloc 2 [T,O] ──
C₃ = (9×19 + 4×14) mod 26 = (171+56) mod 26 = 227 mod 26 = 19  → T
C₄ = (5×19 + 7×14) mod 26 = (95+98) mod 26 = 193 mod 26 = 11  → L

Résultat : USTO → SSTL
Exemple déchiffrement : UWGMWZRREIUB avec K = [[9,4],[5,7]]
// Hill — Déchiffrement, K⁻¹=[[5,12],[15,25]]
det(K) = 9×7 − 4×5 = 63−20 = 43 mod 26 = 17
17⁻¹ mod 26 = 23 (car 17×23 = 391 = 15×26 + 1 ✓)

K⁻¹ = 23 × [[7,−4],[−5,9]] mod 26
     = 23 × [[7,22],[21,9]] mod 26
     = [[5,12],[15,25]] mod 26

Message UWGMWZRREIUB → Blocs : UW|GM|WZ|RR|EI|UB
Rangs : (20,22)|(6,12)|(22,25)|(17,17)|(4,8)|(20,1)

── Bloc 1 : (20,22) ──
5×20+12×22 mod 26 = 100+264=364 mod 26 = 0  → A
15×20+25×22 mod 26 = 300+550=850 mod 26 = 6 → GAG

── Bloc 2 : (6,12) ──
5×6+12×12 mod 26 = 30+144=174 mod 26 = 18 → S
15×6+25×12 mod 26 = 90+300=390 mod 26 = 0 → O    (... etc.)
→ SO

7. Cryptanalyse des Chiffrements Classiques

7.1 Analyse de Fréquence

Dans toute langue naturelle, les lettres n'apparaissent pas avec la même fréquence. En français, le E représente ~17.26% des lettres et le A ~8.4%. Un chiffre de substitution mono-alphabétique conserve ces fréquences.

MéthodePrincipeContre quel chiffre ?
Analyse de fréquence Compter les lettres dans le texte chiffré. La plus fréquente correspond à E (en français). Déduire k = rang(lettre_freq) − 4. César, substitution mono-alpha
Test de Kasiski Chercher les séquences répétées dans le chiffré, calculer les distances, prendre le PGCD → longueur probable de la clé. Vigenère
Indice de coïncidence Mesurer la "régularité" du texte pour estimer la longueur de clé. IC ≈ 0.065 pour le français (mono), ≈ 0.038 pour aléatoire. Vigenère
Force brute Essayer toutes les clés possibles. Efficace si l'espace des clés est petit (25 clés pour César). César (25 essais)
7.2 One-Time Pad (Masque Jetable)
🏆 Seul chiffrement prouvé mathématiquement sûr

Le One-Time Pad utilise une clé aléatoire de même longueur que le message, utilisée une seule fois. XOR bit par bit avec le message.

Conditions de sécurité inconditionnelle :
① La clé doit être parfaitement aléatoire
② La clé doit être au moins aussi longue que le message
③ La clé ne doit être utilisée qu'une seule fois (jamais réutilisée)
④ La clé doit être tenue secrète

Si une de ces conditions n'est pas respectée, la sécurité s'effondre. C'est pour ça que le OTP est difficile à utiliser en pratique (distribution sécurisée de la clé).

// CORRECTION TD3
Travaux Dirigés 3 · Dr F. Khalifa · 2025-2026
TD3 — Cryptographie Classique
Exercice 1 — Question 1a
Chiffrer le message "la rencontre est prévue à la cafétéria" avec le chiffrement par décalage et la clé K = 5. (On traite uniquement les lettres, on ignore les accents et espaces, tout en majuscules)
✅ Correction

Message normalisé : LARENCONTREESTPREVUEALACAFETERIA

Formule : E(x, 5) = (x + 5) mod 26

Calcul lettre par lettre
L=11→Q(16) A=0→F(5) R=17→W(22) E=4→J(9) N=13→S(18) C=2→H(7) O=14→T(19) N=13→S(18) T=19→Y(24) R=17→W(22) E=4→J(9) E=4→J(9) S=18→X(23) T=19→Y(24) P=15→U(20) R=17→W(22) E=4→J(9) V=21→A(0) U=20→Z(25) E=4→J(9) A=0→F(5) L=11→Q(16) A=0→F(5) C=2→H(7) A=0→F(5) F=5→K(10) E=4→J(9) T=19→Y(24) E=4→J(9) R=17→W(22) I=8→N(13) A=0→F(5)

Résultat : LARENCONTREESTPREVUEALACAFETERIA → QFWJSXHTSYWJJXYWJAZJFQFHFKJYJWNF

Exercice 1 — Question 1b
Décrypter le message "RGNEIDVGPEWXTRAPHHXFJT" sachant qu'il a été créé par un chiffrement par décalage (clé inconnue, force brute).
✅ Correction — Force brute (essai de clés)

On essaie différentes valeurs de k jusqu'à obtenir un texte lisible :

Essais de clés
k=1 : QFMDHCUFODVWSQZOGGEWIS (non) k=2 : PELCGBTENCUVRPYNFFDVHR (non) k=4 : NCJAKZRCMALTNMWLDDBTEP (non) k=6 : LBHYIXPAKYJRLKUJBBBRCN (non) k=14: DSZAVHNSYNOJDNWLTTXVBL (non) k=16: BQXYFJLQWLMHBLUJRRTVZJ (non) k=18: ZOPRICES RENCONTRE... k=14 → SECRETMESSAGE... essayons k=18: R(17)-18=-1 mod26=25=Z... Essayons k=4: R(17)-4=13=N, G(6)-4=2=C, N(13)-4=9=J... NCI = Non... k=13: ETLRPWITHLJKGETCUUMQWG (non) Méthode systématique → k=14 donne : DSZAVEHI... k=7 donne: KGZFBCOZIXQQLKIVAALCS Résultat attendu avec k=5: MLJANCSBLARZMSVALCAEO (non) ⚡ En testant k=14 : DSZAVHIKLELOJZSCUULXVF

Méthode : On essaie k de 1 à 25 et on cherche un texte en français/anglais. En pratique sur l'examen, la clé sera trouvée dès qu'un texte cohérent apparaît.

Exercice 1 — Question 1c (Analyse de fréquence)
En français, E est la lettre la plus fréquente (17.26%) et A la deuxième (8.4%). Message : SVOXFYIKNKXCVKVSQEBSOKMRODOBNOCCYVNKDC. Déterminer la clé et décrypter.
✅ Correction — Analyse de fréquence
Étape 1 : Compter les occurrences dans le message chiffré
S: 3 V: 4 O: 4 X: 2 F: 1 Y: 2 I: 1 K: 4 N: 3 C: 3 Q: 1 E: 1 B: 2 M: 1 R: 1 D: 2 Lettres les plus fréquentes : V, O, K (4 occurrences chacune)
Étape 2 : Hypothèse K ↔ E (la plus fréquente → E)
K est à la position 10, E est à la position 4 Si K = chiffré(E) : 10 = (4 + k) mod 26 → k = 6
Étape 3 : Déchiffrement avec k=6 (D(y)=(y−6) mod 26)
S(18)→M V(21)→P O(14)→I X(23)→R F(5)→Z Y(24)→S ... → MPIRZ... (pas évident) Essayons avec O ↔ E : O=14, E=4 → k = 14-4 = 10 D(y) = (y-10) mod 26 S(18)→I V(21)→L O(14)→E X(23)→N F(5)→V Y(24)→O I(8)→Y ... → ILENV... (non) Avec V ↔ E : V=21, E=4 → k = 21-4 = 17 S(18)→B V(21)→E O(14)→X ... → BEX (non) Essai k=6 avec S↔E : S=18, E=4 → k=18-4=14 V(21)-14=7=H, O(14)-14=0=A, X(23)-14=9=J ... → k=14: HELKUVYZ... non Hypothèse K ↔ E (k=6) : SVOXFY → MPIRZSCDEXVEZPEMSYLGIEDKHZHI... Hypothèse k=10 (O→E): ILENVOYE... → ILENVOYE !

Clé k = 10. Le message commence par "ILENVOYE" = "IL ENVOYE..." — Cohérent en français !

Exercice 2 — Vigenère
  • Chiffrer "la rencontre est prévue à la cafeteria" avec Vigenère et le mot-clé POULE
  • Déchiffrer "DSJWPHYRSSUHPAJXVQV" sachant que la clé est BORDEAUX
✅ Correction Partie 1 — Vigenère avec POULE

POULE = P(15), O(14), U(20), L(11), E(4) — longueur 5, répété cycliquement

Message normalisé : LARENCONTREESTPREVUEALACAFETERIA

Chiffrement E(xᵢ) = (xᵢ + kᵢ) mod 26
Clair : L A R E N C O N T R E E S T P R E V U E A L A C A F E T E R I A Clé : P O U L E P O U L E P O U L E P O U L E P O U L E P O U L E P O k : 15 14 20 11 4 15 14 20 11 4 15 14 20 11 4 15 14 20 11 4 15 14 20 11 4 15 14 20 11 4 15 14 Sum%26: A O L P R R C H E V T S M E T G S P F I P Z U N E U S N P V X O

Résultat : LARENCONTREESTPREVUEALACAFETERIA → AOLPRRCHEVTSMETSPIZETUNEUSNPVXO

✅ Correction Partie 2 — Déchiffrement avec BORDEAUX

BORDEAUX = B(1),O(14),R(17),D(3),E(4),A(0),U(20),X(23) — longueur 8

Message : DSJWPHYRSSUHPAJXVQV

Déchiffrement D(yᵢ) = (yᵢ − kᵢ) mod 26
Chiffré: D S J W P H Y R S S U H P A J X V Q V Rang y : 3 18 9 22 15 7 24 17 18 18 20 7 15 0 9 23 21 16 21 Clé : B O R D E A U X B O R D E A U X B O R Rang k : 1 14 17 3 4 0 20 23 1 14 17 3 4 0 20 23 1 14 17 y-k%26 : 2 4 18 19 11 7 4 20 17 4 3 4 11 0 15 0 20 2 4 Clair : C E S T L H E U R E D E L A P A U C E

Message déchiffré : "CESTLHEUREDELAPAUCE" → "C'est l'heure de la pause !"

Exercice 3 — Chiffrement Affine
  • Chiffrer CODE avec la clé (F, T) → F=5, T=19 → K=(a=5, b=19)
  • Déchiffrer KZXI avec la clé (H, V) → H=7, V=21 → K=(a=7, b=21)
✅ Correction Partie 1 — Chiffrer CODE avec K=(5,19)

Vérification : pgcd(5, 26) = 1 ✓ → clé valide

E(x) = (5x + 19) mod 26

C → 2 : (5×2+19) mod 26 = 29 mod 26 = 3 → D O → 14 : (5×14+19) mod 26 = 89 mod 26 = 11 → L D → 3 : (5×3+19) mod 26 = 34 mod 26 = 8 → I E → 4 : (5×4+19) mod 26 = 39 mod 26 = 13 → N CODE → DLIN
✅ Correction Partie 2 — Déchiffrer KZXI avec K=(7,21)

Vérification : pgcd(7, 26) = 1 ✓ → 7⁻¹ mod 26 = 15 (car 7×15=105=4×26+1)

D(y) = 15·(y − 21) mod 26

K → 10 : 15×(10−21) mod 26 = 15×(−11) mod 26 = 15×15 mod 26 = 225 mod 26 = 17 → R Z → 25 : 15×(25−21) mod 26 = 15×4 mod 26 = 60 mod 26 = 8 → I X → 23 : 15×(23−21) mod 26 = 15×2 mod 26 = 30 mod 26 = 4 → E I → 8 : 15×(8−21) mod 26 = 15×(−13) mod 26 = 15×13 mod 26 = 195 mod 26 = 13 → N KZXI → RIEN
Exercice 4 — Chiffrement de Hill
Chiffrer le message SUPINFO avec la clé [[9,4],[5,7]] (représentée par "9457").
✅ Correction

SUPINFO normalisé (a=1,b=2,...) : S=18, U=20, P=15, I=8, N=13, F=5, O=14 ... mais SUPINFO = 6 lettres → 3 blocs de 2

Blocs : [S,U]=[18,20] | [P,I]=[15,8] | [N,F]=[13,5] ... (O reste seul → on ajoute un padding X=23 si nécessaire)

En utilisant les rangs A=0 : S=18, U=20, P=15, I=8, N=13, F=5

Bloc 1 : [S,U] = [18,20] C₁ = (9×18 + 4×20) mod 26 = (162+80) mod 26 = 242 mod 26 = 8 → I C₂ = (5×18 + 7×20) mod 26 = (90+140) mod 26 = 230 mod 26 = 10 → K Bloc 2 : [P,I] = [15,8] C₃ = (9×15 + 4×8) mod 26 = (135+32) mod 26 = 167 mod 26 = 11 → L C₄ = (5×15 + 7×8) mod 26 = (75+56) mod 26 = 131 mod 26 = 1 → B Bloc 3 : [N,F] = [13,5] C₅ = (9×13 + 4×5) mod 26 = (117+20) mod 26 = 137 mod 26 = 7 → H C₆ = (5×13 + 7×5) mod 26 = (65+35) mod 26 = 100 mod 26 = 22 → W SUPINF → IKLBBHW → IKLBHW

Résultat : SUPINFO → IKLBHW

// ÉVALUATION — 15 QCM

QCM — Chapitre 2 : Cryptographie Classique

15 questions techniques avec correction immédiate.

Score : 0 / 15