# Chiffre ADFGVX

Le chiffre ADFGVX est un système de chiffrement allemand inventé par le lieutenant Fritz Nebel (de) (1891–1977) et introduit à la fin de la Première Guerre mondiale afin de sécuriser les communications radiophoniques lors de l'offensive sur Paris. Il fut toutefois cassé par le lieutenant Georges Painvin début juin 1918, conférant un avantage crucial à l'armée française.
Son originalité réside dans l'union d'une substitution inspirée du carré de Polybe et d'une transposition. Le nom du chiffre, initialement appelé GEDEFU 18 (GEheimschrift DEr FUnker 1918, « chiffre des radiotélégraphistes 18 »), provient des coordonnées des lettres dans le carré. Les chiffres du carré de Polybe sont en effet remplacés par les lettres A, D, F, G, V et X, choisies en raison de leur code morse très différents les uns des autres, de façon à éviter les erreurs de transmission radio.

## L'utilisation et le déchiffrement du chiffre ADFGVX

Le chiffre ADFGVX a été utilisé à partir du 5 mars 1918 afin de préparer l'offensive allemande sur Paris.
Dès juin, les Allemands ne se contentent plus de leurs lettres A D F G X, voici qu'apparaît en plus la lettre V. Les Allemands utilisèrent en effet pour leurs chiffrements deux modèles de carrés : l'un de 25 lettres, l'autre de 36 symboles, ce dernier étant obtenu par l'adjonction des 10 chiffres à un alphabet complet. Le carré de substitution était construit grâce à une clef qui changeait quotidiennement. Le chiffre utilisant le carré de 36 symboles est connu sous le nom de chiffre ADFGVX.
Le 2 juin, alors que la situation devenait urgente du côté français, le lieutenant Georges Painvin parvint à déchiffrer un premier message en s'appuyant sur une étude statistique extrêmement poussée, puis une quantité d'autres, ce qui fit perdre aux Allemands tout effet de surprise et contribua à l'échec de leurs offensives.

## Principe du chiffrement

Le chiffrement s'effectue en deux étapes :
* le chiffrement du message par substitution des lettres ;
* la transposition du message obtenu, basée sur l'utilisation d'une clef.

### La substitution

Dans un premier temps, comme pour le chiffrage par le carré de Polybe, chaque lettre du message est remplacée par deux codes correspondant à sa position dans le tableau de chiffrement (6x6) Le premier code est donné par la ligne et le second par la colonne. Les deux correspondants doivent bien sûr disposer du même tableau.
Par exemple, si l'on utilise le tableau de chiffrement suivant :
| | | Second code | Second code | Second code | Second code | Second code | Second code |
| | | A ·– | D –·· | F ··–· | G – –· | V ···– | X –··– |
| Premier code | A ·– | 8 | t | b | w | r | q |
| Premier code | D –·· | p | 4 | c | g | 2 | 9 |
| Premier code | F ··–· | 3 | o | 5 | m | x | e |
| Premier code | G – –· | d | a | z | j | s | y |
| Premier code | V ···– | l | h | 7 | u | v | 0 |
| Premier code | X –··– | n | 1 | k | 6 | i | f |
le message lancer assaut deviendra : VA GD XA DF FX AV GD GV GV GD VG AD
L'utilisation des six lettres A D F G V X est due au faible risque de confusion entre ces lettres lorsque le message est retranscrit en morse (indiqué dans la table ci-dessus sous les codes correspondants).

### La transposition

La deuxième étape, d'où provient toute la difficulté du code, est la transposition, basée sur un mot clé.
* Tout d'abord, le message codé est retranscrit dans un nouveau tableau dont la première ligne contient le mot clé.
* Puis, on échange les colonnes de telle sorte que les lettres constituant le mot clé se retrouvent classées dans l'ordre alphabétique.
Si on reprend l'exemple précédent, avec pour mot clé chat, on obtient le tableau 1 suivant ; après classement alphabétique des lettres de la clé, le tableau 2 contient le message chiffré final :
| Clé originale | c | h | a | t |
| Message codé | V | A | G | D |
| Message codé | X | A | D | F |
| Message codé | F | X | A | V |
| Message codé | G | D | G | V |
| Message codé | G | V | G | D |
| Message codé | V | G | A | D |
| Clé classée | a | c | h | t |
| Message codé et transposé | G | V | A | D |
| Message codé et transposé | D | X | A | F |
| Message codé et transposé | A | F | X | V |
| Message codé et transposé | G | G | D | V |
| Message codé et transposé | G | G | V | D |
| Message codé et transposé | A | V | G | D |
Le message définitif, obtenu par concaténation des colonnes du tableau, est donc : GD AG GA VX FG GV AA XD VG DF VV DD
Le destinataire le déchiffrera en suivant ces mêmes étapes dans l'ordre inverse, à condition de connaître la clé originale de transposition et de disposer de la table 6×6 de codage.
On peut dissimuler la table de codage ainsi que la clé utilisés en les stockant dans un texte inventé (par exemple la seconde lettre ou le second chiffre de certains mots ou nombres d'un petit texte), ou en prenant ce texte dans un livre dont on ne transmet en clair qu'un numéro de page, ou le premier mot d'une page de dictionnaire ou d'un annuaire.

## Cryptanalyse

La difficulté pour casser ce code est liée au fait que les occurrences de lettres du message original ne peuvent pas être repérées simplement par leur fréquence relative sans connaître les positions relatives où les deux moitiés du code sont situées. Toutefois, le nombre de recombinaisons possibles reste assez faible, même lorsque la clé est assez longue, et il est possible de repérer des fréquences caractéristiques si le message original est suffisamment long, en explorant les paires de codes à tous les intervalles possibles ; on en déduit la longueur de la clé, donc la largeur des tables de transposition.
Puis avec les fréquences de chaque paire obtenue, on en déduit les premières lettres (en commençant par les plus fréquentes dans la langue supposée du message, par exemple les lettres e, s, a, n), et on déduit les autres lettres moins fréquentes par des recherches dans un dictionnaire. La table de codage contenant assez peu de cases (26 lettres et 10 chiffres) il est possible de la remplir ainsi entièrement à l'aide de ces statistiques connues propres à la langue utilisée dans le message original.
Une amélioration de cet algorithme de chiffrement consiste à utiliser des tables de codage beaucoup plus larges, par exemple une table tridimensionnelle 6×6×6 contenant des cellules pour des groupes de lettres ou pour une lettre accompagnée d'un chiffre issu d'un générateur de nombres pseudo-aléatoires connu; on obtient alors 3 codes par lettre ou chiffre original, on peut coder aussi les ponctuations et différencier les majuscules, voire les espaces séparatrices. La clé de transposition peut aussi être augmentée en utilisant une table de transposition bien plus large.