Files

452 lines
20 KiB
Markdown
Raw Permalink Normal View History

2026-08-11 22:31:56 +02:00
# TP : La bande du Penseur
## Contexte
Un informaticien surnommé **le Penseur** est parvenu à extraire des serveurs du
ministère de la Défense une archive de documents classifiés, produits par un comité
interne baptisé **Majestic Twelve** (en abrégé : MJ-12). Il a copié le tout sur une
bande numérique et l'a transmise à un enquêteur.
La bande contient **trois fichiers**. Aucun n'est lisible directement.
Vous êtes chargé·e de les ouvrir, dans l'ordre : chaque fichier contient l'information
nécessaire pour aborder le suivant.
Ce TP est aussi, et peut-être surtout, une enquête sur une question de fond :
**qu'est-ce qui protège réellement un message ?**
> *Ce TP s'inspire de l'épisode « Anasazi » (X-Files, saison 2, épisode 25, diffusé le
> 19 mai 1995). La partie 6 revient sur l'épisode et sur ce qu'il raconte - vous pouvez
> la lire dès maintenant, elle ne dévoile rien des solutions.*
---
## Objectifs
- Attaquer un chiffrement par **analyse de fréquences**
- Attaquer un chiffrement **XOR** à clé courte par **force brute**
- Comprendre la différence entre le **secret de l'algorithme** et le **secret de la clé**
- Découvrir et formuler le **principe de Kerckhoffs**
- Connaître l'histoire des **code talkers navajos** et ce qu'elle apprend en cryptographie
---
## Partie 1 : Le premier fichier
### 1.1. Ce qu'on sait
Le fichier `fichier1.txt` a été chiffré par le comité avec un système **conçu en interne**,
dont les spécifications n'ont jamais été publiées. D'après une note retrouvée, chaque
lettre du message a été systématiquement remplacée par une autre lettre, toujours la même.
Espaces et ponctuation ont été conservés.
Voici son contenu :
```
YKLF QF PFWCNMF NYLFWYF. JF AWFPFYL QKMSIFYL YF QKNL FY HSMSY MHP ZSNLLFW
JF PFWCNMF. JFP FJFIFYLP WHPPFIDJFP QFASNP QNR HYP PSW JF AWKBFL PKYL
QFPKWIHNP WFSYNP QHYP SY PFSJ QKPPNFW. YKSP HCKYP MOKNPN QF YF AHP SLNJNPFW
JFP PVPLFIFP QF MONUUWFIFYL QS INYNPLFWF, QKYL JFP PAFMNUNMHLNKYP PKYL
ASDJNZSFP FL QKYM CSJYFWHDJFP. YKLWF AWKAWF IFLOKQF, MKYMSF FY NYLFWYF FL
MKYYSF QFP PFSJP IFIDWFP QS MKINLF, KUUWF SYF AWKLFMLNKY DNFY PSAFWNFSWF
ASNPZSF AFWPKYYF H J FRLFWNFSW Y FY MKYYHNL JF AWNYMNAF. JH MJF QS PFMKYQ
UNMONFW FPL SY IKL QF LWKNP JFLLWFP ZSN QFPNEYF JF MKINLF JSN IFIF.
```
### 1.2. Travail demandé
**Q1.** Quel type de chiffrement reconnaissez-vous ? Est-ce un chiffre de César ?
Justifiez en observant le texte : le décalage est-il le même pour toutes les lettres ?
**Q2.** Écrivez une fonction qui compte les occurrences de chaque lettre du texte chiffré
et affiche les résultats du plus fréquent au moins fréquent.
```python
def frequences(texte):
"""Renvoie la liste des couples (lettre, nombre d'occurrences),
triee par nombre d'occurrences decroissant.
Les caracteres qui ne sont pas des lettres sont ignores."""
...
```
**Q3.** En français, les lettres les plus fréquentes sont, dans l'ordre :
**E, A, S, I, N, T, R, U, L, O**. Le texte compte 474 lettres, ce qui est suffisant
pour que la statistique soit fiable.
Quelle lettre du texte chiffré correspond très probablement à `E` ? Et à la deuxième
lettre la plus fréquente ?
**Q4.** Le mot d'une seule lettre `H` apparaît dans le texte, ainsi que `J` et `Y`.
En français, quels sont les mots d'une seule lettre ? Que vous apprend cette observation ?
**Q5.** Complétez progressivement votre table de correspondance et déchiffrez le message.
Vous pouvez travailler par essais successifs : remplacez les lettres dont vous êtes sûr·e,
puis devinez les mots partiellement révélés.
```python
def dechiffre(texte, table):
"""Remplace chaque lettre de texte selon le dictionnaire table.
Les lettres absentes de table sont laissees telles quelles."""
...
```
**Q6.** Le message se vante d'une protection « bien supérieure » à celle du ministère,
au motif que personne à l'extérieur n'en connaît le principe.
**Combien de temps vous a-t-il fallu pour le lire ?** Que pensez-vous de l'argument ?
---
## Partie 2 : Le deuxième fichier
### 2.1. Ce qu'on sait
Le premier fichier vous a indiqué la nature de la clé du second. Le fichier `fichier2.hex`
a été chiffré par **XOR** — l'opération que vous avez déjà utilisée dans le TP du
gestionnaire de mots de passe — avec une **clé de trois lettres majuscules**, répétée
tout au long du message.
Le contenu est donné en **hexadécimal** (deux caractères par octet) :
```
0e05191d1e116d1811030e016d0e016d091b000300086474010f7419181b04191d0807116d
0c1d0e021d081874036a111e1e741d0b076d091c040c121f0f7a6d03186d0f07196a06080e
1d0a0f74090b1a1e6a01030f74010b1a0a1f116d1b01086a041f0f071c1f116d1a111f191b
0304116d04116d1a151f06116d0f006d1b01046a1a086a076d0f171f03006d1a151e64740c
1f171804116d07150e021d030f74030f741d05011f18156d0015000b1d1e6a18086a180418
11636a176d0f07196a180c6a19080318010f011f0f741d181b190f1719031b036a05180374
1e051d196474191815031919081e001f0f740c1f741e0300086a10086a07190517060b1308
64
```
### 2.2. Travail demandé
**Q7.** Rappelez la propriété du XOR qui rend le déchiffrement possible :
que vaut `A XOR B XOR B` ?
**Q8.** Convertissez la chaîne hexadécimale en octets, puis écrivez la fonction de
déchiffrement.
```python
donnees = bytes.fromhex(HEXA) # HEXA = la chaine ci-dessus, sans retours a la ligne
def xor(donnees, cle):
"""Renvoie les octets de donnees combines par XOR avec la cle,
repetee autant de fois que necessaire."""
...
```
**Q9.** La clé fait trois lettres majuscules. **Combien de clés faut-il tester au
maximum ?** Ce nombre est-il un obstacle pour un ordinateur ?
**Q10.** Écrivez une attaque par force brute. Le problème n'est pas de produire les
17 576 déchiffrements — c'est de **reconnaître automatiquement le bon**.
Proposition : le message clair ne contient que des majuscules, des espaces, des points
et des virgules. Écrivez une fonction qui teste si un déchiffrement ne contient
**que** des caractères de cet ensemble, et n'affichez que les clés qui passent ce test.
```python
AUTORISES = set("ABCDEFGHIJKLMNOPQRSTUVWXYZ .,")
def est_plausible(octets):
"""Renvoie True si octets se decode en ASCII et si tous ses caracteres
appartiennent a AUTORISES."""
...
```
**Q11.** Combien de clés passent le test ? Déchiffrez le message.
**Q12.** À quoi correspondent les trois lettres de la clé ? Quelqu'un qui connaît le
contexte de l'affaire aurait-il eu besoin de la force brute ?
**Q13.** Cette fois, l'algorithme était **public** : vous saviez dès le départ qu'il
s'agissait d'un XOR. Pourtant le fichier est tombé. **Qu'est-ce qui a échoué ici :
l'algorithme, ou la clé ?**
---
## Partie 3 : Le troisième fichier
### 3.1. Ce qu'on sait
Le deuxième fichier annonce que le troisième **n'est pas chiffré**.
Le voici, dans son intégralité :
```
NA-NIL-IN BEH-EH-HO-ZINZ
TSA-OND
WOL-LA-CHEE TSAH BE-LA-SANA DIBEH TSE-NILL BESH-DO-TLIZ TKIN
```
### 3.2. Première approche
**Q14.** Appliquez votre fonction `frequences` de la question 2 à ce texte.
Le résultat vous aide-t-il ? Pourquoi ?
**Q15.** Pourriez-vous monter une attaque par force brute ? Sur quoi porterait-elle ?
Combien de possibilités devriez-vous tester ?
**Q16.** À ce stade, expliquez en deux phrases **pourquoi vous êtes bloqué·e**.
La difficulté est-elle de nature mathématique ?
### 3.3. Le lexique
Voici un extrait du document qui permet de lire le fichier. Il s'agit d'un extrait
authentique du **dictionnaire des code talkers navajos**, dans sa révision du
15 juin 1945, déclassifié en 1968.
**Vocabulaire**
| Terme navajo | Traduction littérale | Sens codé |
|---|---|---|
| NA-NIL-IN | *kept secret* | CONFIDENTIEL |
| BEH-EH-HO-ZINZ | *document* | DOCUMENT |
| TSA-OND | *rock cave* | GROTTE |
**Alphabet** (chaque mot vaut la **première lettre** de sa traduction anglaise)
| Terme navajo | Traduction littérale | Lettre |
|---|---|---|
| WOL-LA-CHEE | *ant* (fourmi) | **A** |
| BE-LA-SANA | *apple* (pomme) | **A** |
| TSE-NILL | *axe* (hache) | **A** |
| TSAH | *needle* (aiguille) | **N** |
| DIBEH | *sheep* (mouton) | **S** |
| BESH-DO-TLIZ | *zinc* | **Z** |
| TKIN | *ice* (glace) | **I** |
**Q17.** Déchiffrez le fichier. Combien de temps cela vous a-t-il pris, une fois le
lexique en main ?
**Q18.** Observez les trois premières lignes du tableau de l'alphabet. **Trois mots
différents désignent la même lettre.** À votre avis, pourquoi les concepteurs du code
ont-ils fait ce choix ? Reliez votre réponse à la question 14.
---
## Partie 4 : Les code talkers navajos — ce qui s'est réellement passé
*Cette partie est à lire. Elle ne demande pas de programmation, mais deux questions
sont posées à la fin.*
### Le problème
Au début de 1942, dans le Pacifique, les transmissions radio américaines sont
systématiquement interceptées et décryptées par l'armée japonaise. Les chiffrements
mécaniques disponibles sont sûrs mais lents : coder puis décoder un ordre demande de
longues minutes, ce qui est incompatible avec la conduite d'un combat.
### L'idée
**Philip Johnston**, ingénieur civil et vétéran de la Première Guerre mondiale, avait
grandi sur la réserve navajo où son père était missionnaire. Il faisait partie du très
petit nombre de non-Navajos parlant la langue. Il propose au Corps des Marines
d'utiliser le navajo pour les transmissions.
La langue s'y prêtait remarquablement : elle **ne s'écrivait pas**, sa grammaire et sa
tonalité la rendaient très difficile à acquérir, et on estimait alors qu'une trentaine
de personnes extérieures au peuple navajo la parlaient — aucune n'étant japonaise.
### Ce que le code était vraiment
C'est ici que l'idée reçue — « ils parlaient navajo à la radio » — est fausse.
**Vingt-neuf** premières recrues navajos, engagées en mai 1942, ne se sont pas contentées
de traduire : elles ont **construit un code**, avec deux niveaux.
1. **Un alphabet phonétique.** Chaque lettre est représentée par un mot navajo dont la
traduction anglaise commence par cette lettre. Pour transmettre `N`, on dit *tsah*,
qui signifie « aiguille » — *needle* en anglais. Le déchiffrement demande donc de
traduire le mot navajo en anglais, puis d'en garder l'initiale.
2. **Un dictionnaire de code.** Environ quatre cents termes militaires reçoivent un mot
navajo convenu, sans rapport avec leur sens. Un sous-marin devient *besh-lo*,
« poisson de fer ». Un avion de chasse, *da-he-tih-hi*, « colibri ». Un cuirassé,
*lo-tso*, « baleine ». Un destroyer, *ca-lo*, « requin ».
Autrement dit, ce dictionnaire **est une clé**. Il a été appris par cœur, jamais emporté
au combat.
### La parade contre l'analyse de fréquences
Les concepteurs avaient identifié la faiblesse que vous avez exploitée en partie 1.
Si chaque lettre correspondait à un seul mot navajo, il aurait suffi de compter les
occurrences pour retrouver le `E`.
Ils ont donc **attribué plusieurs mots aux lettres les plus fréquentes**, entre lesquels
l'opérateur alternait au hasard. L'alphabet est passé de 26 à 44 termes, enrichi
précisément sur E, T, A, O, I, N, S, H, R, D, L et U.
C'est pourquoi votre lexique de la partie 3 contient trois mots pour la lettre A.
### La preuve par un prisonnier
**Joe Kieyoomia**, sergent navajo du 200<sup>e</sup> régiment d'artillerie côtière du
Nouveau-Mexique, est capturé aux Philippines en 1942 et survit à la marche de la mort de
Bataan. Les Japonais découvrent qu'il est navajo et lui font écouter les transmissions
interceptées.
**Il ne comprend rien.** Il parle pourtant parfaitement le navajo — mais il ignorait
jusqu'à l'existence du code, et les messages, faits de mots de code convenus, ne
formaient pour lui aucun sens. Il est torturé pour ce refus supposé, forcé de rester nu
dans la neige. Il survivra à la guerre, et se trouvera à Nagasaki lors du bombardement
atomique du 9 août 1945, protégé par les murs de sa cellule.
### Le résultat
Le code n'a jamais été cassé. À Iwo Jima, six code talkers ont transmis plus de huit
cents messages en deux jours sans une seule erreur. Le major Howard Connor, officier
transmissions de la 5<sup>e</sup> division de Marines, déclarera : *« Sans les Navajos,
les Marines n'auraient jamais pris Iwo Jima. »*
Le programme est resté **classifié jusqu'en 1968** : pendant vingt-trois ans, les code
talkers n'ont pas eu le droit de dire ce qu'ils avaient fait. La reconnaissance officielle
du Congrès des États-Unis n'est intervenue qu'en 2000 et 2001, alors que la plupart
étaient morts.
Le même peuple avait, une génération plus tôt, vu ses enfants punis dans les pensionnats
fédéraux pour avoir parlé cette langue.
**Q19.** L'histoire de Joe Kieyoomia est l'expérience décisive. Un locuteur natif, aux
mains de l'adversaire, ne peut pas lire les messages. **Qu'est-ce que cela prouve
exactement sur la source de la sécurité du système ?**
**Q20.** Si les code talkers s'étaient contentés de parler navajo en clair, sans
dictionnaire de code, que se serait-il passé lors de la capture de Kieyoomia ?
---
## Partie 5 : Le principe de Kerckhoffs
Vous avez attaqué trois protections :
| Fichier | Protection | Ce qui l'a fait tomber |
|---|---|---|
| 1 | un algorithme tenu secret | l'analyse de fréquences, en quelques minutes |
| 2 | un algorithme public, une clé faible | la force brute, 17 576 essais |
| 3 | une langue rare *et* un dictionnaire de code | rien — jusqu'à ce qu'on vous donne le lexique |
**Q21.** En 1883, le cryptographe néerlandais **Auguste Kerckhoffs** énonce un principe
qui gouverne encore toute la cryptographie moderne. À partir du tableau ci-dessus,
essayez de le formuler vous-même : sur quoi la sécurité d'un système doit-elle reposer,
et sur quoi ne doit-elle **jamais** reposer ?
**Q22.** On appelle **sécurité par l'obscurité** le fait de compter sur le secret du
fonctionnement d'un système plutôt que sur celui d'une clé. Lequel de vos trois fichiers
relevait de l'obscurité pure ?
**Q23.** Relisez la section 3 du cours, consacrée à l'AES. Les spécifications de l'AES
sont **entièrement publiques** : n'importe qui peut lire l'algorithme, le programmer,
le tester. Le cours indique qu'à ce jour la meilleure attaque connue reste la force
brute sur 2<sup>256</sup> clés.
En quoi cette publicité est-elle une **force** et non une faiblesse ? Que se passerait-il
si un algorithme secret contenait un défaut ?
**Q24.** Une entreprise vous propose son logiciel de messagerie en affirmant :
*« nos communications sont inviolables, car nous utilisons un algorithme de chiffrement
propriétaire que nous avons développé nous-mêmes et que nous ne divulguons pas. »*
Rédigez en cinq lignes ce que vous répondez.
**Q25.** Le troisième fichier avait une vraie clé — le dictionnaire de code — et il a
résisté. Pourtant, ce système n'aurait aucune valeur aujourd'hui. **Pourquoi ?**
*(Pensez à ce qui se passe si la clé est perdue, capturée, ou si un seul opérateur
la divulgue. Comparez avec l'AES, où changer de clé prend une seconde.)*
---
## Partie 6 : L'épisode, et la série
*Pour la culture. Rien à rendre.*
**« Anasazi »** est le vingt-cinquième et dernier épisode de la deuxième saison de
*X-Files* (*The X-Files*), diffusé le 19 mai 1995. Il est réalisé par R. W. Goodwin,
sur une histoire de Chris Carter — le créateur de la série — et de David Duchovny,
l'interprète de l'agent Mulder.
*X-Files* raconte l'enquête de deux agents du FBI sur des affaires non résolues :
**Fox Mulder**, convaincu de l'existence d'une dissimulation gouvernementale, et
**Dana Scully**, médecin de formation, chargée à l'origine de contrôler son travail par
la rigueur scientifique. La série a construit son identité sur cette tension entre
l'intuition et la preuve — les deux personnages ayant tour à tour raison.
Dans l'épisode, un hacker surnommé **le Penseur** (Kenneth Soona) extrait des serveurs
du ministère de la Défense un ensemble de fichiers classifiés et les remet à Mulder sur
une bande numérique. Les fichiers sont illisibles. C'est **Scully** qui identifie la
raison : le contenu n'est pas chiffré au sens informatique, il est rédigé en **navajo**.
Un ancien du peuple navajo, **Albert Hosteen** — interprété par Floyd « Red Crow »
Westerman, acteur et musicien dakota — entreprend de les traduire.
Le titre renvoie aux **Anasazis**, peuple du sud-ouest américain dont les cités furent
abandonnées vers le XIII<sup>e</sup> siècle, et dont la disparition reste discutée.
Le nom, d'origine navajo, est aujourd'hui contesté : les descendants pueblos lui
préfèrent l'appellation *Ancestral Puebloans*.
L'épisode est le premier volet d'un triptyque qui se poursuit dans la saison 3 avec
*The Blessing Way* et *Paper Clip*, et se termine sur un des cliffhangers les plus
célèbres de la série.
**Ce que l'épisode arrange.** Vous êtes maintenant mieux informé·e que le scénario :
la série présente le navajo comme un chiffrement à lui seul, alors que le vrai système
combinait la langue **et** un dictionnaire de code appris par cœur. La nuance n'est pas
mineure — c'est précisément elle qui sépare la sécurité par l'obscurité d'une véritable
cryptographie, et c'est tout l'objet de ce TP.
Une remarque, enfin. La série s'est emparée d'une histoire réelle, et le fait que des
lycéens français la découvrent trente ans plus tard par une série de science-fiction en
dit long sur la façon dont elle a été traitée : classifiée vingt-trois ans, reconnue
plus d'un demi-siècle après les faits.
---
## Questions de réflexion
**1.** En partie 1, l'auteur du message écarte explicitement les systèmes du ministère
*parce que* leurs spécifications sont publiques. En quoi ce raisonnement inverse-t-il
exactement le principe de Kerckhoffs ?
**2.** La force brute de la partie 2 a demandé 17 576 essais. Combien en faudrait-il
pour une clé de 8 lettres majuscules ? Et de 12 ? *(Une machine teste environ un milliard
de clés par seconde.)* Concluez sur ce qui détermine la solidité d'une clé.
**3.** Le chiffrement XOR est utilisé dans de vrais systèmes cryptographiques, alors même
que vous venez de le casser. Quelle condition faudrait-il respecter sur la clé pour
qu'un chiffrement XOR devienne **incassable** ? *(Cherchez « masque jetable ».)*
Pourquoi cette condition est-elle presque impossible à tenir en pratique ?
**4.** Le dictionnaire des code talkers a été appris par cœur et jamais écrit ni emporté
au combat. En termes modernes, quel problème de sécurité cette décision résolvait-elle ?
---
## Barème indicatif
| Partie | Points |
|--------|--------|
| Partie 1 : analyse de fréquences | 6 |
| Partie 2 : XOR et force brute | 5 |
| Partie 3 : le fichier qui résiste | 3 |
| Partie 4 : lecture historique (Q19, Q20) | 2 |
| Partie 5 : principe de Kerckhoffs | 4 |
| **Total** | **20** |
---
## Sources
- *Navajo Code Talkers' Dictionary*, révision du 15 juin 1945, déclassifié sous
DoD Directive 5200.9 — [Naval History and Heritage Command](https://www.history.navy.mil/research/library/online-reading-room/title-list-alphabetically/n/code-talkers.html)
- « Semper Fidelis, Code Talkers », *Prologue*, [National Archives](https://www.archives.gov/publications/prologue/2001/winter/navajo-code-talkers.html)
- [Joe Kieyoomia](https://en.wikipedia.org/wiki/Joe_Kieyoomia) — Wikipédia
- [Anasazi (The X-Files)](https://en.wikipedia.org/wiki/Anasazi_(The_X-Files)) — Wikipédia
---
Auteur : Florian Mathieu
2026-08-11 23:29:02 +02:00
Licence CC BY-SA
2026-08-11 22:31:56 +02:00
2026-08-11 23:29:02 +02:00
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International</a>.