# LE CHIFFREMENT MANUEL REVISITÉ

Philippe Allard

► To cite this version:

Philippe Allard. LE CHIFFREMENT MANUEL REVISITÉ. [Rapport de recherche] Mystery Twister C3, University of Duisburg-Essen. 2016. hal-02025635

HAL Id: hal-02025635

https://hal.science/hal-02025635v1

Submitted on 19 Feb 2019

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>
LE CHIFFREMENT MANUEL

REVISITÉ

Ph. ALLARD

AMD-crypto@orange.fr

2015
## Avant-propos

Ce document rassemble plusieurs articles tous consacrés au chiffrement manuel. Ce sujet peut sembler désuet à l'ère des ordinateurs et des puissantes méthodes de chiffrement numérique. La situation est comparable à celle du problème de la localisation à la surface de la terre, le système GPS l'a résolu à l'échelle de la planète et avec une précision inégalée mais aucun explorateur ou randonneur confirmé ne partirait sans boussole et carte. De même toute personne impliquée dans une communication secrète doit prévoir une solution de secours et un procédé de dépannage simple et efficace ne nécessitant qu'un papier et un crayon avec le minimum d'effort intellectuel. C'est dans cet esprit et sous l'impulsion de notre participation au challenge allemand, mais à vocation internationale, MTC3¹ que nous avons abordé le passionnant sujet des méthodes classiques de chiffrement en s'efforçant d'y porter un regard nouveau et fécond. Les articles rassemblés traitent successivement d'un chiffre par substitution, d'une méthode de parcours d'un tableau, de deux chiffres par transposition, de l'algorithme de permutation utilisé dans ces chiffres, du problème général et pratique de fourniture des clés secrètes et enfin de conventions accessoires pour l'usage d'un alphabet limité :

**Spirale** : il s'agit plus précisément d'un chiffre à masque jetable qui est la forme reconnue la plus forte pour un chiffre par substitution. Sa conception est basée sur des notions très classiques comme la table de Vigenère et la suite de Fibonacci mais celles-ci sont renouvelées en profondeur par généralisation et aboutissent à une table de correspondance et une récurrence pseudo-linéaire qui donne à ce crypto-système une richesse combinatoire au moins égale à celle d'un chiffre à 128 bits. De plus il permet de traiter n'importe alphabet, aussi bien un mélange de lettres, chiffres et ponctuations qu'une langue étrangère et son sens d'écriture. Un programme associé a été développé et est disponible librement.

<footnote n="1">¹ https://www.mysterytwisterc3.org/en/</footnote>
**Parcours de relèvement d'un tableau** : le problème du parcours ordonné d'un tableau, pour en relever le contenu, se rencontre dans la transposition de celui-ci. Nous proposons dans cet article une méthode systématique pour construire les éléments d'un vaste sous-ensemble de celui, immense, des permutations du tableau.

**Diagonales** : il s'agit ici de l'application à un chiffre par transposition des idées développées dans l'article précédent. Moins ambitieux et performant que Spirale, il est voulu surtout plus simple et rapide à mettre en œuvre tout en étant plus puissant que le classique chiffre par transposition simple des lignes et colonnes.

**Carrousel** : ce chiffre par transposition, conceptuellement très simple, repose exclusivement sur l'algorithme tournant de permutation au cœur de Spirale et Diagonales. Il fonctionne avec n'importe quel alphabet et des textes de n'importe quelle taille. Un programme associé a été développé et est disponible librement.

**Algorithme de permutation** : nous étudions dans ce bref article les propriétés de l'algorithme de permutation utilisé dans les chiffres précédents.

**Création de clés** : nous exposons ici un ensemble d'idées pour substituer au problème de la distribution des clés aux utilisateurs d'un crypto-système symétrique celui de la création des clés par les utilisateurs eux-mêmes. Les solutions proposées à ce problème s'appuient sur plusieurs procédés et outil informatique que nous suggérons ici.

**Création de mots de passe** : nous proposons ici une méthode grand public pour générer de mémoire un mot de passe efficace.

**Conventions accessoires pour alphabet limité** : l'usage d'un alphabet limité à 26 lettres limite l'intelligibilité des messages et empêche de nombreux chiffres manuels de traiter des messages à caractère scientifique ou technique. Cette brève note propose plusieurs conventions pour palier à ce handicap.
Vers le forum BibM@th et la discussion associée à Spirale :

http://www.bibmath.net/forums/viewtopic.php?pid=52451

ainsi que vers les programmes en Python associés aux différents algorithmes.
<figure><img src="image_2.png" /></figure>

# SPIRALE

## *Un chiffre à masque jetable*

### Plan<fnref n="1" />

<table><tr><td>1. Introduction</td><td>1</td></tr><tr><td>2. Généralisation de la suite de Fibonacci</td><td>3</td></tr><tr><td>3. Génération de la séquence amorce</td><td>4</td></tr><tr><td>4. Généralisation de l'addition congruente</td><td>5</td></tr><tr><td>5. Algorithme de permutation</td><td>8</td></tr><tr><td>6. Le chiffre Spirale</td><td>8</td></tr><tr><td>7. Implémentation et exemple détaillé</td><td>9</td></tr><tr><td>8. Défis</td><td>10</td></tr><tr><td>9. Extensions de l'alphabet</td><td>11</td></tr><tr><td>10. Références</td><td>12</td></tr><tr><td>11. Annexes</td><td>12</td></tr></table>

## 1. Introduction

Malgré notre époque de haute technologie et la puissance des ordinateurs personnels permettant l'implémentation de systèmes de chiffrement numérique sophistiqués, à clé privée ou publique, il y a encore un effort de quelques-uns pour créer un chiffre manuel moderne. Le chiffre bien connu Solitaire de B. Schneier [2] et Handcipher de B. Kallick [1] en sont les cas les plus récents.

Solitaire est du type chiffre à Masque Jetable, la version moderne du chiffre de Vigenère, caractérisé par une clé aléatoire de même longueur que le texte clair. La suprématie démontrée de cette approche repose sur une très longue clé ou masque formé d'une suite totalement aléatoire de caractères ainsi que sur un usage unique de celle-ci. La première condition n'est atteinte qu'en faisant appel à un phénomène physique naturellement aléatoire, comme la désintégration nucléaire, et la seconde par la transmission du lot de masques à travers un canal absolument sûr, en pratique de la main à la main, aux différents correspondants. Avec en corollaire le problème de l'archivage sécurisé de ces masques par les correspondants. Ces conditions ne sont qu'exceptionnellement réalisées et la mise en

<footnote n="1">¹ Ce document est la traduction de l'article originel en anglais pour le challenge MTC3 (https://www.mysterytwisterc3.org/en/).</footnote>
œuvre pratique, et finalement dégradée, de ces concepts consiste à calculer pour chaque
message un masque, et donc une suite seulement pseudo-aléatoire, à partir d'un nombre élevé
de clés conservées et partagées par les correspondants. Solitaire est original par l'usage qu'il
fait d'un jeu de cartes pour réaliser manuellement le processus de calcul de la suite de lettres.
Il a été bien étudié et son efficacité est établie.

Mais il est maintenant si célèbre que, dans un contexte de communications secrètes, posséder
un jeu de cartes est aussi compromettant qu'un ordinateur contenant des programmes de
cryptage. De plus tout le monde n'a pas une pratique ou aisance suffisante avec le jeu de
Bridge base de la méthode. Aussi B. Callick a-t-il proposé Handycipher comme une solution
alternative ne nécessitant que papier et stylo. C'est un chiffre à substitution homophonique
non déterministe dans lequel chaque lettre du texte clair est remplacée de manière pseudo-
aléatoire par un groupe de 1 à 5 caractères. Aussi le texte chiffré est-il beaucoup plus long
que le texte clair et dans un rapport généralement supérieur à 4. Cet inconvénient pratique
ajouté au processus plutôt laborieux de chiffrement ne fait pas de cet algorithme une
alternative satisfaisante.

Nous proposons donc ici une autre solution. C'est aussi un chiffre à masque jetable, conçu
pour une mise en œuvre manuelle simple avec un haut niveau de variabilité combinatoire
équivalent à un système de cryptage à 128 bits. Pour générer le masque pseudo-aléatoire nous
nous appuyons sur des concepts classiques comme la suite de Fibonacci et la congruence
mais en les généralisant pour atteindre la richesse combinatoire souhaitée contre la
cryptanalyse. L'algorithme final ne demande presque pas de calculs mentaux et se limite à
des entrées répétitives dans une table spéciale. Ce processus est résilient aux erreurs
commises par l'utilisateur car elles n'ont qu'un effet local et laissent le texte chiffré
globalement intelligible.

Le chiffre Spirale se déroule en plusieurs étapes selon le schéma suivant (Figure.1):

<figure><img src="image_3.png" /></figure>
avec les données d'entrée en bleu, les algorithmes fixes en noir, les résultats et opérateur intermédiaires en vert et le résultat final en rouge.

## 2. Généralisation de la suite de Fibonacci<fnref n="2" />

Pour un premier exposé des idées nous travaillons avec l'alphabet simple A, B, C ... X, Y, Z et nous associons à chaque lettre son rang comme valeur: 1 pour A, 2 pour B, ... 26 pour Z. Spirale étant un chiffre à masque jetable notre but et idée sont ici de créer un long masque à partir d'une chaîne de lettres de longueur k faisant fonction d'amorce. Travaillons maintenant sur les valeurs entières, cela signifie créer une suite de nombres (plus bas en vert) à partir d'une suite donnée de longueur k (plus bas en bleu). Le problème est de générer par un calcul déterministe une longue suite de lettres aussi pseudo-aléatoire que possible. En travaillant maintenant sur leurs valeurs, le problème devient arithmétique et pour rester toujours dans l'intervalle [1, 26] les calculs doivent être exécutés modulo 26.

La solution classique pour générer une suite est d'utiliser une relation de récurrence. Gardant à l'esprit l'objectif d'un chiffre manuel facile à calculer, la forme la plus simple à exploiter est la récurrence linéaire dont l'exemple emblématique est la suite de Fibonacci :

$$X_n = (X_{n-1} + X_{n-2}) \mod 26$$

Des résultats comme 16, 19, 9, 2, 11, 13, 24, 11, 9, 20, 3, 23, 26, 23, 23, 20, 17, 11, 2... (avec $k = 2$) semblent aléatoires mais avec cette formule chaque élément est fortement corrélé aux deux précédents. Une idée pour éviter cette caractéristique structurelle pourrait être d'augmenter l'ordre de la récurrence en prenant en compte plus de terme mais cela augmenterait aussi la charge de calcul. Un compromis est d'éloigner les deux termes de la récurrence, par exemple le second en le prenant à l'autre bout de la suite initiale de longueur $k$ :

$$X_n = (X_{n-1} + X_{n-k}) \mod 26$$

avec $k = 4$ termes initiaux les résultats sont 16, 19, 9, 2, 18, 11, 20, 22, 14, 25, 19, 15, 3, 2, 21, 10, 13, 15, 10, 20, 7, 22, 6, 26, 6, 2, 8, 8, 14, 16... Il reste que, comme $X_n$ dépend de $X_{n-1}$, deux termes consécutifs sont encore corrélés et une erreur dans le calcul de $X_{n-1}$ se propage à $X_n$ et à tous les termes suivants comme ici les six derniers termes.

Pour éviter ces derniers défauts l'idée est aussi de repousser le premier terme, par exemple à l'autre bout lui aussi :

$$X_n = (X_{n-k+1} + X_{n-k}) \mod 26$$

Ou quelque part à une profondeur d proche du milieu de la suite initiale, pour répartir spatialement avec uniformité l'influence locale des éléments de l'amorce sur ceux du masque :

$$X_n = (X_{n-d} + X_{n-k}) \mod 26$$

<footnote n="2">² Utilisée dans l'étape 3 du chiffre.</footnote>
La figure 2 explique notre idée : le nombre $X_n$ est dépendant seulement de $X_{n-k}$ et $X_{n-d}$, si d'est proche de k (d=k-1) l'influence de proche en proche sur les nombres suivants du masque induira sur celui-ci une structure pseudo-aléatoire proche de celle de la séquence amorce ; en espaçant n-d de n-k nous augmentons le caractère pseudo-aléatoire du masque. Nous préférons aussi cette dernière solution car ainsi, deux éléments consécutifs sont corrélés à deux paires d'éléments précédents complètement différentes et de plus une erreur se propagera uniquement par sauts de d et k éléments. Mais un cas est à éviter :

<figure><img src="image_4.png" /><figcaption>Figure.2</figcaption></figure>

Quand un élément m est créé à partir de deux éléments déjà impliqués dans la récurrence. Une telle situation amène à générer non pas une unique et longue suite récurrente mais plutôt une petite série de suites de Fibonacci classiques imbriquées entre elles. Les conditions pour cette situation sont :

$$n-d = m-k \quad \text{and} \quad n = m-d$$

$$d'\text{où} \qquad k = 2d \qquad (1)$$

### 3. Génération de la séquence amorce<fnref n="3" />

Comme nous venons de le voir, pour diminuer la corrélation entre éléments consécutifs du masque, il est bénéfique que la séquence amorce soit longue. Pour créer une telle longue chaîne qui joue le rôle de clé dans le processus de chiffrement classique de Vigenère, nous utilisons deux clés courtes Key 1 et Key 2 et nous disposons ces données et leur résultat dans une matrice via la formule :

$$Y_{p,q} = (X_p + X_q) \mod 26$$

Par exemple, avec les clés Key 1 = {19, 15, 12, 9} et Key 2 = {20, 1, 9, 18, 5}, nous engendrons une matrice de $4 \times 5 = 20$ cellules:

<table><caption>Figure.3</caption><tr><td rowspan="4">Key 1</td><td>19</td><td>13</td><td>20</td><td>2</td><td>11</td><td>24</td></tr><tr><td>15</td><td>9</td><td>16</td><td>24</td><td>7</td><td>20</td></tr><tr><td>12</td><td>6</td><td>13</td><td>21</td><td>4</td><td>17</td></tr><tr><td>9</td><td>3</td><td>10</td><td>18</td><td>1</td><td>14</td></tr><tr><td colspan="2"></td><td>20</td><td>1</td><td>9</td><td>18</td><td>5</td></tr><tr><td colspan="2"></td><td colspan="5">Key 2</td></tr></table>

<footnote n="3">³ Utilisée dans l'étape 2 du chiffre.</footnote>
Ensuite nous pourrions lire cette matrice horizontalement ou verticalement. Mais s'il y a dans une des clés un nombre répété cela produira la répétition d'une ligne ou d'une colonne. Pour éviter cela une première solution est de convenir de ne pas mettre deux fois le même nombre dans une clé. Une autre solution, non exclusive de la première, est de lire différemment la matrice. Nous optons finalement pour une lecture en diagonale ascendante depuis le coin supérieur gauche. C'est un des procédés classiques utilisés dans le chiffrement par transposition pour bousculer l'ordre des éléments d'un message. Mais tout autre cheminement facile et efficace pourrait convenir. Ainsi la longue clé finale de 20 éléments est donc :

$$ \{13, 9, 20, 6, 16, 2, 3, 13, 24, 11, 10, 21, 7, 24, 18, 4, 20, 1, 17, 14\} $$

Et elle pourrait être utilisée comme séquence amorce de la récurrence linéaire :

$$ X_n = (X_{n-9} + X_{n-20}) \mod 26 $$

Avec n-9 pour éviter la condition (1). Les premiers éléments générés seraient alors :

$$ 13,21 \rightarrow 7 \quad 9,7 \rightarrow 16 \quad 20,24 \rightarrow 18 \quad 6,18 \rightarrow 24 \quad \dots $$

Pour ce déplacer le long de la suite générée et identifier facilement les éléments à utiliser dans la formule, il est commode de se servir d'une bande de papier avec trois marques, espacées respectivement ici de 11 et 9 cases :

<figure><img src="image_5.png" /><figcaption>Figure.4</figcaption></figure>

## 4. Généralisation de l'addition congruente<fnref n="4" />

Pour un exposé simplifié des idées mise en jeu ici nous nous limiterons aux entiers compris entre 0 et 9. La classique congruence modulo 10 composée avec l'addition définit une application de $[0,9] \times [0,9]$ sur $[0,9]$ et une loi de composition interne sur l'intervalle $[0,9]$ exprimée par un opérateur que nous noterons $\oplus$ :

$$ X \oplus Y = (X+Y) \mod 10 $$

Cet opérateur peut aussi être décrit par sa table :

<footnote n="4">⁴ Utilisée dans les étapes 2 à 4 du chiffre.</footnote>
<table><caption>Table.1</caption><thead><tr><th>⊕</th><th>0</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th><th>8</th><th>9</th></tr></thead><tbody><tr><th>0</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr><tr><th>1</th><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td></tr><tr><th>2</th><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td><td>1</td></tr><tr><th>3</th><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td><td>1</td><td>2</td></tr><tr><th>4</th><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td><td>1</td><td>2</td><td>3</td></tr><tr><th>5</th><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><th>6</th><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr><tr><th>7</th><td>7</td><td>8</td><td>9</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr><tr><th>8</th><td>8</td><td>9</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><th>9</th><td>9</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td></tr></tbody></table>

Il jouit de propriétés particulières:

$$ - \text{Symétrie} \qquad X \oplus Y = YX \oplus X $$

$$ - \text{Surjectivité} \qquad 3=1 \oplus 2=5 \oplus 8=6 \oplus 7 \qquad 5=2 \oplus 3=9 \oplus 6=7 \oplus 8 \quad \dots $$

- Surjectivité uniforme : chaque valeur (0,...,9) du résultat X⊕Y apparaît autant de fois dans la table et pour chacune d'elles il y a un nombre égal de couples (X,Y) donnant cette valeur.

Cette dernière propriété est utile en cryptographie car elle permet de construire des fonctions difficiles à inverser ou à découvrir, du fait de la multiplicité des solutions possibles. En effet, si on rencontre un 3 dans un texte chiffré comment savoir de quel couple il provient : (1,2) ou (5,8) ou (6,7) ?

Que se passe-t-il si nous permutons les valeurs résultat dans la table ? La symétrie disparaitra probablement, ce qui est un avantage finalement, mais pas la propriété principale : nombre égale de pré-images pour chaque valeur. Nous aurions alors une autre fonction utile pour le chiffrement. Comme il y a 10x10=100 éléments dans la matrice cela ferait 100! = 9,3.10¹⁵⁷ combinaisons possibles.

Ce nombre monstrueux est bien au-delà de nos besoins et nous pouvons aisément définir un nombre suffisant de fonctions utiles, maintenant notées par l'opérateur □, en permutant simplement les valeurs d'entrées (indexes des lignes et colonnes). L'usage des symboles ⊕ et □ est fondamental pour montrer la différence entre la classique addition congruente et l'opérateur généralisé obtenu par permutation des indexes de la table. Voici un exemple d'une telle table permutée :

<table><caption>Table.2</caption><thead><tr><th>□</th><th>6</th><th>9</th><th>2</th><th>1</th><th>8</th><th>5</th><th>0</th><th>4</th><th>3</th><th>7</th></tr></thead><tbody><tr><th>3</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr><tr><th>2</th><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td></tr><tr><th>9</th><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td><td>1</td></tr><tr><th>6</th><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td><td>1</td><td>2</td></tr><tr><th>1</th><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td><td>1</td><td>2</td><td>3</td></tr><tr><th>8</th><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><th>7</th><td>6</td><td>7</td><td>8</td><td>9</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr><tr><th>5</th><td>7</td><td>8</td><td>9</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr><tr><th>0</th><td>8</td><td>9</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><th>4</th><td>9</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td></tr></tbody></table>
Nous pouvons voir qu'avec cette nouvelle fonction :

$$3 \square 6 = 0 \text{ et } 6 \square 3 = 1 \qquad 1 \square 7 = 3 \text{ et } 7 \square 1 = 6 \qquad \dots$$

$$2 = 3 \square 2 = 2 \square 9 = 9 \square 6 = 1 \square 3 = 8 \square 4 = 7 \square 0 = 5 \square 5$$

Pour entrer facilement dans cette nouvelle table il serait utile de réordonner les entrées en permutant lignes et colonnes comme dans les classiques chiffres par transposition. Nous verrons plus tard que nous pouvons éviter cette étape. Permuter indépendamment les entrées produira $10! \times 10!$ combinaisons, soit plus de $1,3 \times 10^{13}$ combinaisons.

Maintenant, que nous savons comment construire de nombreuses fonctions de chiffrement, nous pouvons revenir aux lettres, alphabet et congruence modulo 26. Avec les lettres, la traditionnelle addition modulo 26 est décrite par la classique table de Vigenère [annexe A]. En permutant chaque alphabet d'entrée nous pouvons créer une *table de chiffrement* complètement différente à chaque fois. Un exemple en est donné dans l'annexe B. Pour faciliter les entrées dans la table il n'est pas nécessaire de réordonner lignes et colonnes mais simplement d'ajouter une ligne et une colonne remplies avec les rangs des lettres dans chaque alphabet permuté.

Avec le même exemple de table de chiffrement, cryptons le mot SPIRALE par le masque SGKKFPW :

<table><tr><td>lettre claire</td><td>S</td><td>P</td><td>I</td><td>R</td><td>A</td><td>L</td><td>E</td></tr><tr><td>ligne correspondante</td><td>15</td><td>16</td><td>11</td><td>21</td><td>13</td><td>19</td><td>17</td></tr><tr><td>masque</td><td>S</td><td>G</td><td>K</td><td>K</td><td>F</td><td>P</td><td>W</td></tr><tr><td>colonne correspondante</td><td>11</td><td>12</td><td>2</td><td>2</td><td>3</td><td>19</td><td>5</td></tr><tr><td>lettre chiffrée à l'intersection</td><td>Y</td><td>A</td><td>L</td><td>V</td><td>O</td><td>K</td><td>U</td></tr></table>

Nous observons que le processus de chiffrement ne demande aucun calcul mental mais seulement une succession d'entrées dans la table de chiffrement, il est donc facile et permet une grande vitesse de chiffrement. La construction de la table de chiffrement est la deuxième étape du processus complet de chiffrement, après la permutation des alphabets. Cette table ne sert qu'une seule fois et doit être détruite après usage, dans un véritable contexte de communications secrètes.

Le processus de déchiffrement est inverse : entrée par une colonne, lecture dans celle-ci de la lettre chiffrée et sortie par la même ligne donnant la lettre claire :

<table><tr><td>masque</td><td>S</td><td>G</td><td>K</td><td>K</td><td>F</td><td>P</td><td>W</td></tr><tr><td>colonne correspondante</td><td>11</td><td>12</td><td>2</td><td>2</td><td>3</td><td>19</td><td>5</td></tr><tr><td>lettre chiffrée</td><td>Y</td><td>A</td><td>L</td><td>V</td><td>O</td><td>K</td><td>U</td></tr><tr><td>ligne correspondante</td><td>15</td><td>16</td><td>11</td><td>21</td><td>13</td><td>19</td><td>17</td></tr><tr><td>lettre claire</td><td>S</td><td>P</td><td>I</td><td>R</td><td>A</td><td>L</td><td>E</td></tr></table>
A partir de maintenant, c'est une table de chiffrement analogue jouant le rôle de *table de correspondance* à usage unique, et l'opérateur associé □, qui sera utilisée pour générer la séquence amorce (la matrice de la *Figure 3* fonctionne alors comme une « matrice produit » des clés générant la séquence amorce), le masque ainsi que le texte chiffré et non plus la simple addition congruente ⊕ introduite dans l'exposé préliminaire du paragraphe 4. Cette table de correspondance provisoire est ainsi au cœur du système de chiffrement. Ce que nous avons exprimé, entre autre, dans la *figure 1*.

## 5. Algorithme de permutation<fnref n="5" />

Nous avons donc besoin de permuter l'alphabet deux fois par message à envoyer. Pour cela nous appliquons l'algorithme suivant :

* À partir d'une courte chaîne de lettres jouant le rôle de clé ;

* Nous formons une *liste de permutation*, formée d'entiers, avec les rangs dans l'alphabet de chacune des lettres ;

* Puis la permutation est menée en tournant autour de l'alphabet, en commençant par l'extrémité droite et en sélectionnant les lettres espacées conformément à la liste de permutation. Quand une lettre a déjà été sélectionnée elle est sautée aux tours suivants. La liste de permutation est lue cycliquement jusqu'à épuisement de l'alphabet original. Au fur et à mesure de leur sélection, les lettres sont portées dans l'alphabet permuté qui se constitue ainsi progressivement;

L'annexe C décrit en détails un exemple avec la clé BHMAY et donc la liste de permutation [2, 8, 13, 1, 25]. Examinons le processus de permutation des premières lettres de l'alphabet original : 2 → Y, 8 → Q, 13 → D, 1 → C, 25 → Z en tournant autour de l'alphabet pour revenir à l'origine, puis nouvelle lecture de la liste de permutation, 2 → W en sautant Y déjà sélectionnée et barrée, 8 → N en sautant Q, 13 → V en sautant D et C, 1 → U, 25 → K en sautant Q-N-D-C-Z-Y-W-V-U, ... l'alphabet permuté commence donc par YQDCZWNVUK. Parallèlement, la quatrième ligne du tableau est remplie avec le nouveau rang des lettres qui sera utilisé dans la table de chiffrement.

Dans cette étape, encore, il n'y a pas vraiment de calculs mais seulement une opération simple et répétitive.

## 6. Le chiffre Spirale

Nous avons maintenant tous les concepts et outils nécessaires pour construire notre chiffre. Il utilise finalement 4 clés :

* Clé 1 pour permuter les lignes de la table de chiffrement;

* Clé 2 pour permuter les colonnes de la table de chiffrement;

* Clé 3 pour créer les lignes de la matrice de la séquence amorce;

* Clé 4 pour créer les colonnes de la matrice de la séquence amorce;

<footnote n="5">⁵ Utilisé dans l'étape 1 du chiffre.</footnote>
Une clé formée de p lettres offre $C=26^p$ combinaisons possibles. Les effets de ces clés sont indépendants, combinés et entrelacés dans le processus complet de chiffrement. Le nombre total de combinaisons est donc $C_1xC_2xC_3xC_4 = 26^{p_1+p_2+p_3+p_4}$. Ainsi le nombre total de combinaisons dépend-il finalement de la taille cumulée $n$ de ces clés formées de suite de lettres choisies parmi 26. Le but est de donner à Spirale un niveau de sécurité combinatoire, contre les attaques par force brute, équivalent à un chiffre à 128 bits, or

$$2^{128} = 26^n \quad \text{implique} \quad n \approx 27.2$$

Cela signifie qu'avec une clé globale de 28 lettres l'objectif est largement atteint, en supposant que nous ayons des clés vraiment aléatoires. Nous choisissons de répartir uniformément cette variabilité combinatoire sur toutes les clés, et donc celles-ci doivent avoir chacune 7 lettres. Et toutes les étapes précédemment décrites seront exécutées avec de telles clés.

La séquence amorce sera générée selon la formule $(X$ est maintenant le symbole des lettres) :

$$Y_{p,q} = X_p \square X_q \quad (2)$$

Et donc la séquence amorce aura $7 \times 7 = 49$ lettres de long. Pour un message de moins de 50 lettres, cette séquence sera le masque jetable. Pour un message plus long, le masque sera généré selon la formule :

$$X_n = X_{n-49} \square X_{n-24} \quad (3)$$

Où l'ordre des termes est important car l'opérateur $\square$ défini par la table de chiffrement n'est plus symétrique.

Maintenant, on peut aussi comprendre le nom donné à ce chiffre : partant de 4 clés jouant le rôle de graines, induisant un processus tournant pour produire les alphabets permutés dérivés en une table de chiffrement qui est le cœur de sa sécurité et se déployant en un masque potentiellement infini. Soit globalement une structure assez similaire à celle d'une spirale à 4 centres.

## 7. Implémentation et exemple détaillé

Plusieurs feuilles modèles ont été créées pour un usage facile de Spirale. Elles sont rassemblées dans l'annexe D et illustrent en détails un exemple<fnref n="6" /> complet bâti avec les clés suivantes : NVIKKIH, CTSQEOU, DNGDKSZ et EAIWDSH.

* annexe D1: Permutations de l'Alphabet.

Pour faciliter le repérage des lettres encore disponibles dans l'alphabet originel, nous suggérons de rayer les lettres déjà permutées d'un trait épais et pour suivre l'avancement du parcours cyclique de la liste de permutation nous suggérons de faire une marque, par exemple un point, sous une de ses lettres chaque fois qu'elle est utilisée.

* annexe D2: Table de chiffrement.

Y reporter simplement les résultats de l'annexe D1.

<footnote n="6">⁶ Il s'agit du même exemple, en anglais, que celui du document originel.</footnote>
* annexe D3: Séquence amorce et Masque jetable.

Ce modèle est conçu pour générer jusqu'à 400 caractères de masque, pour un texte plus long enchaîner sur une feuille identique. Comme la séquence amorce est trop longue pour appliquer l'idée d'une bande de papier glissant le long du masque, nous disposons les lettres de telle façon que les termes impliqués dans la récurrence (de rangs n-49 et n-24) soient sur une même colonne et ainsi lues aisément. La relation de récurrence (3) peut aussi s'écrire :

$$X_{p \square} X_{p+25} = X_{p+49} \qquad (3bis)$$

Cela implique que les lignes du modèle doivent avoir 25 cases et que le résultat n'est pas dans la même colonne mais à sa gauche :

<table><tr><td>...</td><td>X<sub>p</sub></td><td>...</td></tr><tr><td>...</td><td>X<sub>p+25</sub></td><td>...</td></tr><tr><td>X<sub>p+49</sub></td><td>X<sub>p+50</sub></td><td>...</td></tr></table>

Nous écrivons donc les résultats, dans cette feuille modèle, à partir de l'extrême gauche. Ces cases grisées contiennent alors la valeur manquante dans la dernière case de la ligne respectivement au dessus et nous y reportons donc ces valeurs.

* annexe D4: Chiffrement et Déchiffrement.

Elle est conçue pour traiter 200 caractères, pour un texte plus long il suffit d'enchaîner sur une feuille identique. Comme nous utilisons un alphabet minimal, le texte clair ne peut contenir de chiffres et nous devons aussi supprimer tous les espaces et signes de ponctuation. Le processus se déroule ligne par ligne, de haut en bas pour le chiffrement en entrant dans la table de chiffrement avec la lettre claire et sa lettre masque et de bas en haut pour le déchiffrement en entrant dans cette table avec la lettre masque et la lettre chiffrée (dans la même colonne).

Les versions vierges de ces feuilles modèles sont rassemblées dans l'annexe E. A l'aide de ces modèles un utilisateur débutant peut travailler rapidement et mettre seulement 1 heure pour suivre toutes les étapes et chiffrer les 75 lettres de l'exemple.

## 8. Défis

Pour inciter les cryptanalystes à briser ce chiffre nous proposons ici différents textes chiffrés<fnref n="7" /> correspondant à des situations affaiblissantes d'utilisation :

* Ciphertext 1, issu d'un texte de 314 lettres commençant par le texte de l'exemple détaillé;

* Ciphertext 2, issu d'un texte de 659 lettres chiffré avec les mêmes clés que ciphertext 1;

* Ciphertext 3, issu d'un texte de 949 lettres chiffré avec les clés 1 et 2 communes à celles des ciphertext 1 et 2;

<footnote n="7">⁷ Il s'agit encore des textes en anglais du document originel. Pour être dans l'esprit d'un usage opérationnel de Spirale, les textes 2 à 4 proviennent du renseignement militaire ouvert.</footnote>
* Et pour finir, Ciphertext 4 un texte de 485 lettres chiffré de façon sécurisé avec 4 clés originales. Tous ces textes chiffrés sont dans l'annexe F.

## 9. Extensions de l'alphabet

Avec un alphabet limité à des lettres, l'expression des nombres ou dates doit être faite littéralement (2015 = deux zéro un cinq ou deux mille quinze) ce qui prend beaucoup de place dans un message. Une solution simple à ce défaut est d'étendre l'alphabet, ainsi :

A ... Z 0 1 2 3 4 5 6 7 8 9

Cela n'implique aucune complication dans l'algorithme : la seule différence est l'extension jusqu'à 36 cases du tableau alphabet de l'annexe E1 et autant pour la table de chiffrement. La séquence amorce et le masque seront alors une suite de lettres et de chiffres. Et les 4 clés de 7 caractères pourront inclure lettres et chiffres. Avec cette extension il y a aussi une augmentation des combinaisons à 36⁷ pour les clés et à 36⁷x36⁷ pour la paire d'al alphabets permutés, donc avec l'ensemble des clés c'est un accroissement considérable à 36²⁸ des caractéristiques combinatoires de ce chiffre ainsi équivalent à un système à 144 bits.

La généralisation peut aller encore plus loin et inclure aussi les caractères typographiques pour rendre plus lisible le message ou permettre le traitement de segments particuliers comme une formule mathématique ou chimique et des données économiques. Un tel alphabet pourrait être (le caractère *espace* est ici représenté par _ ) :

A ... Z 0 ... 9 _ , . ( ) + - * / ^ < = > % € £ $

Dans ce cas, les permutations devraient se faire sur 53 caractères et étendre d'autant la table de chiffrement et donc la résistance du chiffre aux attaques par force brute. Les versions correspondantes des annexes E1 et E2 sont dans les annexes G1 et G2. Un exemple de texte clair utilisant un alphabet encore plus riche (59 caractères) et sa version chiffrée, obtenue avec un programme écrit en python, sont présentés dans l'annexe G3.

Comme Spirale est conçu pour un usage manuel il peut fonctionner avec n'importe quel alphabet, y compris les plus exotiques :

Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο ΠΡΣΤΥΦΧΨΩ

اب ج ده وز ح طيكل منس عف صق رش ت خ حضو غ

अ आ इ ई उ ऊ ऋ ऋ ए ऐ ओ औ अं अँ अँ: लू लूप पा पि पी पु पू पू पू पू पे पै पो पौ पं पाँ पः पू पू

Il est alors juste nécessaire de créer la table de Vigenère correspondante et de lui associer deux permutations de l'alphabet pour construire une table de chiffrement. Dans le cas d'une langue s'écrivant de droite à gauche, les feuilles modèles sont toujours utiles et seule l'annexe E3 doit être inversée pour donner l'annexe E3bis.
## 10. Références

1. B. Kallick, Handycipher: a Low-tech, Randomized, Symmetric-key Cryptosystem (2014), version 4.9, available at http://eprint.iacr.org/2014/257.pdf

2. B. Schneier, The Solitaire encryption algorithm, version 1.2, (1999), available at https://www.schneier.com/solitaire.html.

## 11. Annexes

<table><tr><td>A</td><td>Table de Vigenère</td></tr><tr><td>B</td><td>Table de chiffrement : Exemple</td></tr><tr><td>C</td><td>Algorithme de Permutation : Exemple</td></tr><tr><td>D1</td><td>Exemple détaillé - Permutations de l'alphabet</td></tr><tr><td>D2</td><td>Exemple détaillé – Table de chiffrement</td></tr><tr><td>D3</td><td>Exemple détaillé – Séquence amorce & Masque jetable</td></tr><tr><td>D4</td><td>Exemple détaillé – Chiffrement ou Déchiffrement</td></tr><tr><td>E1</td><td>Permutations de l'alphabet</td></tr><tr><td>E2</td><td>Table de chiffrement</td></tr><tr><td>E3</td><td>Séquence amorce & Masque jetable</td></tr><tr><td>E3a</td><td>Séquence amorce & Masque jetable (pour les écritures de droite à gauche)</td></tr><tr><td>E4</td><td>Chiffrement ou Déchiffrement</td></tr><tr><td>F</td><td>Défis</td></tr><tr><td>G1</td><td>Permutations de l'alphabet étendu</td></tr><tr><td>G2</td><td>Table de chiffrement (alphabet étendu)</td></tr><tr><td>G3</td><td>Exemple d'application avec un alphabet étendu</td></tr><tr><td>G3a</td><td>Fenêtre interactive avec la sortie du programme en python</td></tr></table>
<table><thead><tr><th>⊕</th><th>A</th><th>B</th><th>C</th><th>D</th><th>E</th><th>F</th><th>G</th><th>H</th><th>I</th><th>J</th><th>K</th><th>L</th><th>M</th><th>N</th><th>O</th><th>P</th><th>Q</th><th>R</th><th>S</th><th>T</th><th>U</th><th>V</th><th>W</th><th>X</th><th>Y</th><th>Z</th></tr></thead><tbody><tr><th>A</th><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr><tr><th>B</th><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td></tr><tr><th>C</th><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td></tr><tr><th>D</th><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td></tr><tr><th>E</th><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td></tr><tr><th>F</th><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td></tr><tr><th>G</th><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td></tr><tr><th>H</th><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td></tr><tr><th>I</th><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td></tr><tr><th>J</th><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td></tr><tr><th>K</th><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td></tr><tr><th>L</th><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td></tr><tr><th>M</th><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td></tr><tr><th>N</th><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td></tr><tr><th>O</th><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td></tr><tr><th>P</th><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td></tr><tr><th>Q</th><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td></tr><tr><th>R</th><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td></tr><tr><th>S</th><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td></tr><tr><th>T</th><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td></tr><tr><th>U</th><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td></tr><tr><th>V</th><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td></tr><tr><th>W</th><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td></tr><tr><th>X</th><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td></tr><tr><th>Y</th><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td></tr><tr><th>Z</th><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td></tr></tbody></table>
<table><thead><tr><th></th><th></th><th></th><th>A</th><th>B</th><th>C</th><th>D</th><th>E</th><th>F</th><th>G</th><th>H</th><th>I</th><th>J</th><th>K</th><th>L</th><th>M</th><th>N</th><th>O</th><th>P</th><th>Q</th><th>R</th><th>S</th><th>T</th><th>U</th><th>V</th><th>W</th><th>X</th><th>Y</th><th>Z</th></tr></thead><tbody><tr><td rowspan="2">nouveaux rangs →<br/>↓ lettres<br/>↓→</td><td>17</td><td>26</td><td>21</td><td>7</td><td>10</td><td>3</td><td>12</td><td>20</td><td>14</td><td>23</td><td>2</td><td>15</td><td>9</td><td>18</td><td>6</td><td>19</td><td>22</td><td>25</td><td>11</td><td>1</td><td>16</td><td>13</td><td>5</td><td>4</td><td>8</td><td>24</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td></tr><tr><td></td><td>T</td><td>K</td><td>F</td><td>X</td><td>W</td><td>O</td><td>D</td><td>Y</td><td>M</td><td>E</td><td>S</td><td>G</td><td>V</td><td>I</td><td>L</td><td>U</td><td>A</td><td>N</td><td>P</td><td>H</td><td>C</td><td>Q</td><td>J</td><td>Z</td><td>R</td><td>B</td></tr><tr><td>A</td><td>13</td><td>1</td><td>Y</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr><tr><td>B</td><td>24</td><td>2</td><td>Q</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td></tr><tr><td>C</td><td>4</td><td>3</td><td>D</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td></tr><tr><td>D</td><td>3</td><td>4</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td></tr><tr><td>E</td><td>17</td><td>5</td><td>Z</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td></tr><tr><td>F</td><td>20</td><td>6</td><td>W</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td></tr><tr><td>G</td><td>23</td><td>7</td><td>N</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td></tr><tr><td>H</td><td>22</td><td>8</td><td>V</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td></tr><tr><td>I</td><td>11</td><td>9</td><td>U</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td></tr><tr><td>J</td><td>26</td><td>10</td><td>K</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td></tr><tr><td>K</td><td>10</td><td>11</td><td>I</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td></tr><tr><td>L</td><td>19</td><td>12</td><td>T</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td></tr><tr><td>M</td><td>18</td><td>13</td><td>A</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td></tr><tr><td>N</td><td>7</td><td>14</td><td>X</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td></tr><tr><td>O</td><td>25</td><td>15</td><td>S</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td></tr><tr><td>P</td><td>16</td><td>16</td><td>P</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td></tr><tr><td>Q</td><td>2</td><td>17</td><td>E</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td></tr><tr><td>R</td><td>21</td><td>18</td><td>M</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td></tr><tr><td>S</td><td>15</td><td>19</td><td>L</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td></tr><tr><td>T</td><td>12</td><td>20</td><td>F</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td></tr><tr><td>U</td><td>9</td><td>21</td><td>R</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td></tr><tr><td>V</td><td>8</td><td>22</td><td>H</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td></tr><tr><td>W</td><td>6</td><td>23</td><td>G</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td></tr><tr><td>X</td><td>14</td><td>24</td><td>B</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td></tr><tr><td>Y</td><td>1</td><td>25</td><td>O</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td></tr><tr><td>Z</td><td>5</td><td>26</td><td>J</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td></tr></tbody></table>
<figure><img src="image_6.png" /></figure>

<figure><img src="image_7.png" /></figure>

rayez la lettre dans l'alphabet original quand elle est permutée, pour la sauter ultérieurement

<figure><img src="image_8.png" /></figure>
Alphabet original

<table><tr><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr></table>

compter dans ce sens pour la permutation ←

après permutation d'une lettre, rayez la
dans l'alphabet avec un crayon foncé

Clé 1 de permutation de l'alphabet →

<table><tr><td>N</td><td>V</td><td>I</td><td>K</td><td>K</td><td>I</td><td>H</td></tr><tr><td>14</td><td>22</td><td>9</td><td>11</td><td>11</td><td>9</td><td>8</td></tr></table>

..

..

..

.

.

.

.

← rang dans l'alphabet original

← marques pour tracer l'avancement dans le processus de permutation

Alphabet permuté pour les **Lignes** de la Table de Chiffrement

<table><tr><td>M</td><td>Q</td><td>G</td><td>V</td><td>I</td><td>Y</td><td>O</td><td>W</td><td>R</td><td>D</td><td>L</td><td>U</td><td>E</td><td>P</td><td>K</td><td>N</td><td>T</td><td>J</td><td>C</td><td>A</td><td>X</td><td>B</td><td>S</td><td>Z</td><td>H</td><td>F</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td></tr><tr><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr><tr><td>20</td><td>22</td><td>19</td><td>10</td><td>13</td><td>26</td><td>3</td><td>25</td><td>5</td><td>18</td><td>15</td><td>11</td><td>1</td><td>16</td><td>7</td><td>14</td><td>2</td><td>9</td><td>23</td><td>17</td><td>12</td><td>4</td><td>8</td><td>21</td><td>6</td><td>24</td></tr></table>

rang dans l'alphabet permuté →

recherche d'une lettre →

son rang dans l'alphabet permuté →

Alphabet original

<table><tr><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr></table>

compter dans ce sens pour la permutation ←

après permutation d'une lettre, rayez la
dans l'alphabet avec un crayon foncé

Clé 2 de permutation de l'alphabet →

<table><tr><td>C</td><td>T</td><td>S</td><td>Q</td><td>E</td><td>O</td><td>U</td></tr><tr><td>3</td><td>20</td><td>19</td><td>17</td><td>5</td><td>15</td><td>21</td></tr></table>

← rang dans l'alphabet original

← marques pour tracer l'avancement dans le processus de permutation

Alphabet permuté pour les **Colonnes** de la Table de Chiffrement

<table><tr><td>X</td><td>D</td><td>J</td><td>Q</td><td>L</td><td>T</td><td>S</td><td>O</td><td>M</td><td>I</td><td>H</td><td>B</td><td>A</td><td>N</td><td>F</td><td>P</td><td>U</td><td>W</td><td>E</td><td>C</td><td>V</td><td>G</td><td>K</td><td>Z</td><td>Y</td><td>R</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td></tr><tr><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr><tr><td>13</td><td>12</td><td>20</td><td>2</td><td>19</td><td>15</td><td>22</td><td>11</td><td>10</td><td>3</td><td>23</td><td>5</td><td>9</td><td>14</td><td>8</td><td>16</td><td>4</td><td>26</td><td>7</td><td>6</td><td>17</td><td>21</td><td>18</td><td>1</td><td>25</td><td>24</td></tr></table>

rang dans l'alphabet permuté →

recherche d'une lettre →

son rang dans l'alphabet permuté →
<table><thead><tr><th colspan="16">lettre de la CLÉ 4 ou du MASQUE</th></tr><tr><th></th><th></th><th></th><th></th><th>A</th><th>B</th><th>C</th><th>D</th><th>E</th><th>F</th><th>G</th><th>H</th><th>I</th><th>J</th><th>K</th><th>L</th><th>M</th><th>N</th><th>O</th><th>P</th><th>Q</th><th>R</th><th>S</th><th>T</th><th>U</th><th>V</th><th>W</th><th>X</th><th>Y</th><th>Z</th></tr></thead><tbody><tr><td rowspan="2">□<br>du nouveau rang<br>vers la lettre</td><td></td><td></td><td></td><td>13</td><td>12</td><td>20</td><td>2</td><td>19</td><td>15</td><td>22</td><td>11</td><td>10</td><td>3</td><td>23</td><td>5</td><td>9</td><td>14</td><td>8</td><td>16</td><td>4</td><td>26</td><td>7</td><td>6</td><td>17</td><td>21</td><td>18</td><td>1</td><td>25</td><td>24</td></tr><tr><td></td><td></td><td></td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td></tr><tr><td></td><td></td><td></td><td></td><td>X</td><td>D</td><td>J</td><td>Q</td><td>L</td><td>T</td><td>S</td><td>O</td><td>M</td><td>I</td><td>H</td><td>B</td><td>A</td><td>N</td><td>F</td><td>P</td><td>U</td><td>W</td><td>E</td><td>C</td><td>V</td><td>G</td><td>K</td><td>Z</td><td>Y</td><td>R</td></tr><tr><td rowspan="21">lettre de la CLÉ 3 ou du TEXTE CLAIR</td><td>A</td><td>20</td><td>1</td><td>M</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr><tr><td>B</td><td>22</td><td>2</td><td>Q</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td></tr><tr><td>C</td><td>19</td><td>3</td><td>G</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td></tr><tr><td>D</td><td>10</td><td>4</td><td>V</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td></tr><tr><td>E</td><td>13</td><td>5</td><td>I</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td></tr><tr><td>F</td><td>26</td><td>6</td><td>Y</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td></tr><tr><td>G</td><td>3</td><td>7</td><td>O</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td></tr><tr><td>H</td><td>25</td><td>8</td><td>W</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td></tr><tr><td>I</td><td>5</td><td>9</td><td>R</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td></tr><tr><td>J</td><td>18</td><td>10</td><td>D</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td></tr><tr><td>K</td><td>15</td><td>11</td><td>L</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td></tr><tr><td>L</td><td>11</td><td>12</td><td>U</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td></tr><tr><td>M</td><td>1</td><td>13</td><td>E</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td></tr><tr><td>N</td><td>16</td><td>14</td><td>P</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td></tr><tr><td>O</td><td>7</td><td>15</td><td>K</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td></tr><tr><td>P</td><td>14</td><td>16</td><td>N</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td></tr><tr><td>Q</td><td>2</td><td>17</td><td>T</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td></tr><tr><td>R</td><td>9</td><td>18</td><td>J</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td></tr><tr><td>S</td><td>23</td><td>19</td><td>C</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td></tr><tr><td>T</td><td>17</td><td>20</td><td>A</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td></tr><tr><td>U</td><td>12</td><td>21</td><td>X</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td></tr><tr><td>V</td><td>4</td><td>22</td><td>B</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td></tr><tr><td>W</td><td>8</td><td>23</td><td>S</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td></tr><tr><td>X</td><td>21</td><td>24</td><td>Z</td><td>X</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td></tr><tr><td>Y</td><td>6</td><td>25</td><td>H</td><td>Y</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td></tr><tr><td>Z</td><td>24</td><td>26</td><td>F</td><td>Z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td></tr></tbody></table>

<figure><img src="image_9.png" /></figure>

du nouveau rang vers la lettre
<table><thead><tr><th colspan="11">Clé 4</th></tr><tr><th></th><th>E</th><th>A</th><th>I</th><th>W</th><th>D</th><th>S</th><th>H</th></tr></thead><tbody><tr><th>D</th><td>B</td><td>V</td><td>S</td><td>A</td><td>K</td><td>P</td><td>T</td></tr><tr><th>N</th><td>H</td><td>B</td><td>Y</td><td>G</td><td>Q</td><td>V</td><td>Z</td></tr><tr><th>G</th><td>U</td><td>O</td><td>L</td><td>T</td><td>D</td><td>I</td><td>M</td></tr><tr><th>D</th><td>B</td><td>V</td><td>S</td><td>A</td><td>K</td><td>P</td><td>T</td></tr><tr><th>K</th><td>G</td><td>A</td><td>X</td><td>F</td><td>P</td><td>U</td><td>Y</td></tr><tr><th>S</th><td>O</td><td>I</td><td>F</td><td>N</td><td>X</td><td>C</td><td>G</td></tr><tr><th>Z</th><td>P</td><td>J</td><td>G</td><td>O</td><td>Y</td><td>D</td><td>H</td></tr></tbody></table>

Clé 3

remplissez la matrice selon :

$$Y_{p,q} = X_{p \square} X_q$$

avec la Table de Chiffrement

puis remplissez les 49 premières cases ci-dessous en lisant la matrice diagonalement depuis le coin supérieur gauche

et générez le reste du masque selon

$$X_{p \square} X_{p+25} = X_{p+49}$$

à partir de p = 1

(copiez les cases grisées dans celles de même rang)

<figure><img src="image_10.png" /></figure>

Puis copiez dans l'Annexe D4 les tronçons de 25 lettres (sans les cases grisées)
↓ Texte Clair

<table><tr><td>S</td><td>P</td><td>I</td><td>R</td><td>A</td><td>L</td><td>E</td><td>I</td><td>S</td><td>A</td><td>O</td><td>N</td><td>E</td><td>T</td><td>I</td><td>M</td><td>E</td><td>P</td><td>A</td><td>D</td><td>C</td><td>R</td><td>Y</td><td>P</td><td>T</td></tr><tr><td colspan="21">Chiffrement →</td></tr><tr><td colspan="21">↓ Masque</td></tr><tr><td>B</td><td>H</td><td>V</td><td>U</td><td>B</td><td>S</td><td>B</td><td>O</td><td>Y</td><td>A</td><td>G</td><td>V</td><td>L</td><td>G</td><td>K</td><td>O</td><td>A</td><td>S</td><td>T</td><td>Q</td><td>P</td><td>P</td><td>I</td><td>X</td><td>A</td></tr><tr><td colspan="21">↓ Texte Chiffré</td></tr><tr><td>H</td><td>X</td><td>Y</td><td>Y</td><td>E</td><td>Q</td><td>X</td><td>L</td><td>U</td><td>F</td><td>B</td><td>J</td><td>Q</td><td>L</td><td>A</td><td>H</td><td>Y</td><td>T</td><td>Y</td><td>M</td><td>H</td><td>X</td><td>O</td><td>N</td><td>C</td></tr></table>

Déchiffrement →

↓ Texte Clair

<table><tr><td>O</td><td>S</td><td>Y</td><td>S</td><td>T</td><td>E</td><td>M</td><td>D</td><td>E</td><td>S</td><td>I</td><td>G</td><td>N</td><td>E</td><td>D</td><td>T</td><td>O</td><td>R</td><td>E</td><td>P</td><td>L</td><td>A</td><td>C</td><td>E</td><td>S</td></tr><tr><td colspan="21">Chiffrement →</td></tr><tr><td colspan="21">↓ Masque</td></tr><tr><td>D</td><td>V</td><td>T</td><td>J</td><td>F</td><td>F</td><td>K</td><td>I</td><td>Z</td><td>G</td><td>N</td><td>P</td><td>P</td><td>M</td><td>O</td><td>X</td><td>U</td><td>T</td><td>Y</td><td>C</td><td>Y</td><td>D</td><td>G</td><td>H</td><td>W</td></tr><tr><td colspan="21">↓ Texte Chiffré</td></tr><tr><td>H</td><td>Q</td><td>K</td><td>Y</td><td>E</td><td>A</td><td>W</td><td>S</td><td>J</td><td>R</td><td>R</td><td>R</td><td>R</td><td>E</td><td>U</td><td>Q</td><td>Q</td><td>W</td><td>N</td><td>K</td><td>G</td><td>I</td><td>U</td><td>N</td><td>W</td><td>N</td></tr></table>

Déchiffrement →

↓ Texte Clair

<table><tr><td>O</td><td>L</td><td>I</td><td>T</td><td>A</td><td>I</td><td>R</td><td>E</td><td>W</td><td>H</td><td>E</td><td>N</td><td>O</td><td>N</td><td>E</td><td>H</td><td>A</td><td>S</td><td>N</td><td>O</td><td>C</td><td>A</td><td>R</td><td>D</td><td>S</td></tr><tr><td colspan="21">Chiffrement →</td></tr><tr><td colspan="21">↓ Masque</td></tr><tr><td>S</td><td>I</td><td>N</td><td>J</td><td>K</td><td>R</td><td>P</td><td>C</td><td>O</td><td>P</td><td>S</td><td>Z</td><td>K</td><td>V</td><td>G</td><td>J</td><td>B</td><td>O</td><td>U</td><td>L</td><td>O</td><td>Z</td><td>E</td><td>K</td><td>P</td></tr><tr><td colspan="21">↓ Texte Chiffré</td></tr><tr><td>M</td><td>T</td><td>R</td><td>S</td><td>P</td><td>D</td><td>X</td><td>F</td><td>O</td><td>N</td><td>S</td><td>M</td><td>C</td><td>J</td><td>H</td><td>A</td><td>E</td><td>D</td><td>F</td><td>K</td><td>Z</td><td>Q</td><td>A</td><td>F</td><td>L</td></tr></table>

Déchiffrement →

↓ Texte Clair

<table><tr><td colspan="21">Chiffrement →</td></tr><tr><td colspan="21">↓ Masque</td></tr><tr><td colspan="21">↓ Texte Chiffré</td></tr><tr><td colspan="21"></td></tr></table>

Déchiffrement →

↓ Texte Clair

<table><tr><td colspan="21">Chiffrement →</td></tr><tr><td colspan="21">↓ Masque</td></tr><tr><td colspan="21">↓ Texte Chiffré</td></tr><tr><td colspan="21"></td></tr></table>

Déchiffrement →

↓ Texte Clair

<table><tr><td colspan="21">Chiffrement →</td></tr><tr><td colspan="21">↓ Masque</td></tr><tr><td colspan="21">↓ Texte Chiffré</td></tr><tr><td colspan="21"></td></tr></table>

Déchiffrement →

↓ Texte Clair

<table><tr><td colspan="21">Chiffrement →</td></tr><tr><td colspan="21">↓ Masque</td></tr><tr><td colspan="21">↓ Texte Chiffré</td></tr><tr><td colspan="21"></td></tr></table>

Déchiffrement →

↓ Texte Clair

<table><tr><td colspan="21">Chiffrement →</td></tr><tr><td colspan="21">↓ Masque</td></tr><tr><td colspan="21">↓ Texte Chiffré</td></tr><tr><td colspan="21"></td></tr></table>

Déchiffrement →
<table><thead><tr><th colspan="16">lettre de la CLÉ 4 ou du MASQUE</th></tr><tr><th></th><th>A</th><th>B</th><th>C</th><th>D</th><th>E</th><th>F</th><th>G</th><th>H</th><th>I</th><th>J</th><th>K</th><th>L</th><th>M</th><th>N</th><th>O</th><th>P</th><th>Q</th><th>R</th><th>S</th><th>T</th><th>U</th><th>V</th><th>W</th><th>X</th><th>Y</th><th>Z</th></tr></thead><tbody><tr><th>□<br>nouveaux<br>ranos →<br>↓ lettres<br>↑ ↓→</th><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td></tr><tr><th rowspan="16">lettre de la CLÉ 3 ou du TEXTE CLAIR</th><th>A</th><td>1</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>B</th><td>2</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>C</th><td>3</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>D</th><td>4</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>E</th><td>5</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>F</th><td>6</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>G</th><td>7</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>H</th><td>8</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>I</th><td>9</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>J</th><td>10</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>K</th><td>11</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>L</th><td>12</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>M</th><td>13</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>N</th><td>14</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>O</th><td>15</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>P</th><td>16</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>Q</th><td>17</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>R</th><td>18</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>S</th><td>19</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>T</th><td>20</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>U</th><td>21</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>V</th><td>22</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>W</th><td>23</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>X</th><td>24</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>Y</th><td>25</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><th>Z</th><td>26</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>
<figure><img src="image_11.png" /></figure>

remplissez la matrice selon :

$Y_{p,q} = X_{p\square} X_{q}$
avec la Table de Chiffrement

puis remplissez les 49 premières cases ci-
dessous en lisant la matrice diagonalement
depuis le coin supérieur gauche

et générez le reste du masque selon $X_{p\square} X_{p+2\square} = X_{p+4\square}$ à partir de $p=1$

(copiez les cases grisées dans celles de même rang)

<figure><img src="image_12.png" /></figure>

Puis copiez dans l'Annexe E4 les tronçons de 25 lettres (sans les cases grisées)
<figure><img src="image_13.png" /></figure>

remplissez la matrice selon :

$Y_{p,q} = X_{p\square} X_{q}$
avec la Table de Chiffrement

puis remplissez les 49 premières cases ci-
dessous en lisant la matrice diagonalement
depuis le coin supérieur gauche

et générez le reste du masque selon
(copiez les cases grisées dans celles de même rang)

$X_{p\square} X_{p+2S} = X_{p+49}$ à partir de p = 1

<figure><img src="image_14.png" /></figure>

Puis copiez dans l'Annexe E4 les tronçons de 25 lettres (sans les cases grisées)
↓ Texte Clair

<figure><img src="image_15.png" /></figure>

↓ Texte Clair

<figure><img src="image_16.png" /></figure>

↓ Texte Clair

<figure><img src="image_17.png" /></figure>

↓ Texte Clair

<figure><img src="image_18.png" /></figure>

↓ Texte Clair

<figure><img src="image_19.png" /></figure>

↓ Texte Clair

<figure><img src="image_20.png" /></figure>

↓ Texte Clair

<figure><img src="image_21.png" /></figure>

↓ Texte Clair

<figure><img src="image_22.png" /></figure>
### Ciphertext 1

XEXEQPVDKYMVCCRZTMRLCCKQBKPOEVZXYQDDCIOEINTLVQJKATRBDWEEMVMYOOEIOOVMOCRSBJGSNZUQJZTX ODHAOTRIEJRPENVKDJYVLNPOERZSFZTIHTZJMMOTBGRJCCZMVOUNWMKTPCPPCASJFAVUEJPTJRTWFCHIGZTGTCJ EYRZDISQEKTKPNIBNAPQSUKCUPWKSZBSNOATKXKGHRAMONICEEGJBZGBLRFRHBYTHITNLXRFCZPLZOEUTBMJOE GLLEHSNBAYNWONHAQVSDDFVOTDMEGQEAEZHMQZVYYREHBDBFYRVYJTBO

### Ciphertext 2

BDXVLCJKYIFKACDRUUDLVCOEVKYUCOQBHIVDETOYIWCUERVAJXUTXZNDLSXHOBXAONQLPMQZGIBJLLIMCKCXSB ZRYJUSOJDBTHYPRNVKEKMXSLGMFRSQRQKZTSLBDWYJYJMLBPEAGOVCLZUMMRYPMDIWDRVZSAVYIHIOMVTXHX SJOQEWVATGCKGKKRKVRPXUNWGMFKZBEQZZLDKCNRZWQKFCYDUICEKZUEANTNOPYUXKSDIDRGAVQDBMGSJP JJHNPEEGOGWDNMPXXCVLFLKLEQEYDKAUSVDCXJBMIGKCXDJBSWLJNLGGHPSJJRXORUNPSEILGSVXAQRSWVRSKR RGEUJSQKGPRFNGJBQPTXNRFQZSXKPVZWMZKGIVMKVUTJQNJMEMDIPKZOMWTLNWGWSQRUEPEXMHPEBBNTB PKSEQSELOCJOYPJCCMIPVTXWYITOZWJWVWKOSDJYBFXIAWDVWMVKRKZKXFNRFOQVOIWEVHZFFZDPOVEEYJZPTR EISBXYYBYPHTYTAIAVWPJYMAIIGSJEMYURFMGXVLFNXWBQGZPTMXWRJFTZFWGNUJGEDYZBKAXECSHMAPTNXD IRNHOIPVPUNXNIPOHLPPUSLLSWDRFCDZRIIWIGNDAROFQWVCXLUPHJKGDCTHETNDZGQW

### Ciphertext 3

IALVBQTIJDXJUDGFJTYZGNADIJIUHCUHNQDGTKGSIYBQNRAADFQJDVBAGPJBHHARTXRLUSHMLPGJCCLLLIRGBMDX BVIEELBYLAMRJFYSKOEGSCUMTSYVBKYOUGXJCNWUJAWJHYTAPQMIZFRBISVJHRWOXUYCIDUOPTKPDIBLPNLBSB GOHLPIZOKNSJTQMUEGBMQFGCIYVJBWTADUXZBSBPAKGAYEURCJRMVKEBGDUPNQGEAQISTCOAHOOGNGVLNJX KQZYGWHFPAEOXAQBKZOKERXNBBONYWOMPBZXONEKBIXFGNSTLMUYCNPZQVWXSWWSKUAZZWDSGYOSVPRN UPSHZCPTZDNPMOTTFKCXJBNLYRBMEBJMWBNYXKRKHJLAJOGQDHAHNVDIMQRXPZGLMHHTPRZSZEXYMURXOYC LLBGXUTEKRJARZMDUPIZZWTNDHSRAIZWKSΚΡΙΡCVIIIPAWEHNTAKIWOMGUGYYQZWRPTMULGWTOLRIJOREOMF UKAXQVEBACYXRMFQLGSRQEZESRTMJMADBATJTUMCFOXAPJOKRXUGZTQNMWNPNSAXATXZFXCWHMOFCPAC CDBLRVKFYDEKPYQTIKQQDPGQZENWUNBSUBQLHKPWXYMWNAESEDLSIKFMJSPAMXBPPQNSCHRYVNAHPBYNPF DRDVNOIOAFUOKHZSYUTTHALPDVXAQTAGFXUETTSPBNMEUCFVJWDTCYZHMNNEVBYESVWRZZUXFQQMPXZVOK SLYFOLUKZAEYKIQHKAHETGDDCMGXWHLRPJKFJMHUKEXGFAXKIXLKJQPSMFNYTIDNDNOVBFXTLZFANGFDXMBMN FSRZSZPWMBBTZSWZLDMMWLUMHCLIHKROLULWCHCNFPUJWRDBRAVPDHLNBWFXUELNXHXSLAZPJJCZKRXYTLX LWWLRIAMKLZHZRGWIZLXGZKDFPVTRGTC

### Ciphertext 4

FULDQYOBJEQPSDHNLYLYBOXOIIFJCLHJLCIBBZKJBDIPLGMDTRIQR LZIXJVCQJXFJZVVHBVLNNKDKWFRKVDMVQEIG MTAQVZQYCGVEMNWTQGBBCASKZHMHFDUUYVPAXNJMVVVFCGRRPDNHLVMQJLKLRAIWWYBQWYBXNNQYDAXQ PCHEDDTEKBOEPUDOBMYDYGNPXJIXEBYLTUIMGNTJNISDAGOQEPBZUNAPFPRXFSUWTOQYZLZUHTHZNOCRWWP CJQBMACNXFINPNDHOTQQFCEQDZBRREZSJIXNVGFJMHGKEVGVKTQQAZGOENOTJZUPWGHKDSGDHAHFHHTURJD PDDHIHWEMOBGHWHQGCJXSOGGUPQNCTWUDIFJRXCNHABXOTJFORNMIFBPZRNRPSLBTDNMFONQDFQSYNLW WLEUTCUTSHTRKAKMVNWTGQLAUADQHZGDHKCNTFVBXWLMQIQMCOPVHIXOGUJIFIOFTRKRWO
<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

compter dans ce sens pour la permutation ←

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>37</td><td>38</td><td>39</td><td>40</td><td>41</td><td>42</td><td>43</td><td>44</td><td>45</td><td>46</td><td>47</td><td>48</td><td>49</td><td>50</td><td>51</td><td>52</td><td>53</td></tr><tr><td>,</td><td>.</td><td>(</td><td>)</td><td>+</td><td>-</td><td>*</td><td>/</td><td>^</td><td>&lt;</td><td>=</td><td>&gt;</td><td>%</td><td>€</td><td>£</td><td>$</td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

compter dans ce sens pour la permutation ←

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>37</td><td>38</td><td>39</td><td>40</td><td>41</td><td>42</td><td>43</td><td>44</td><td>45</td><td>46</td><td>47</td><td>48</td><td>49</td><td>50</td><td>51</td><td>52</td><td>53</td></tr><tr><td>,</td><td>.</td><td>(</td><td>)</td><td>+</td><td>-</td><td>*</td><td>/</td><td>^</td><td>&lt;</td><td>=</td><td>&gt;</td><td>%</td><td>€</td><td>£</td><td>$</td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>
Alphabet : ABCDEFGHIJKLMNOPORSTUVWXY0123456789 ,..:'"()+-*/^<=>&@%££$

Texte clair* : SPIRALE is a one-time pad cryptosystem designed in 2015/05 to replace SOLITAIRE when one has no cards. It is based in parts on the generalized Fibonacci sequence xn = xn-49 * xn-24. As it is free it costs nothing (0 €). It also allows to express chemical formulas: FeS2 + O2 -> Fe2O3 + SO2.

* comme il n'y a pas de symbole de fin de ligne dans cet alphabet, le texte clair doit être sur une seule ligne continue.

Clés : NVIKKIH CTSQEOU DNGDKSZ EAIWDSH

Alphabet
permuté 1 : +XOD='7S&"3QG€,J£'0NC:H<6RA-V9U%5M@Y1E8B KW$2)^L4I*(PZ/>T.F

Alphabet
permuté 2 : € RA&.PM/1HC"SN+W%^3£=X*YO)JF2(LD5,7'>G<1$'6VQ-8:0UE9BK@TZ4

Texte
chiffré* : DY2R"S7->EQFS@MT&1T@X%*"AHE:9QR@F@@TDT££0DECK$N""NO8>P:E£*H0 X'C 4FI7YC693&=&-
£.K^.A72J*.O'RG)(S820XX<YX/U(€PQWCN/,GL(5XE75"PNEP,7ILC£U:-, -D5R9,€U5+V£CE"RQ"PW2/ ",V"NJ+-'>H5"7OUK:=@6V:€3')(O£%£C9"
>^&,46C'N70$3"X'78LY+FU@=W(O8^*$-VF1L6TOV<0Y3KO^I<OAOD/&(>*@(<P5S:8 3^€8"/7.B",9VM0BA*9',O=

* le texte chiffré se retrouve lui aussi sur une seule ligne.
Plan

<table><tr><td>1. introduction</td><td>1</td></tr><tr><td>2. Orientation des diagonales</td><td>2</td></tr><tr><td>3. Repérage des lignes</td><td>2</td></tr><tr><td>4. Description des parcours</td><td>2</td></tr><tr><td>5. Exemples de parcours</td><td>3</td></tr><tr><td>6. Dénombrement des parcours</td><td>4</td></tr><tr><td>7. Applications</td><td>4</td></tr></table>

1. introduction

Dans la notice décrivant le chiffre Spirale<fnref n="1" />, nous avons eu à aborder le problème du relèvement d'un tableau. Il s'agissait alors de lire dans un certain ordre les valeurs d'un tableau de 7x7 cases. Nous avions alors opté pour un parcours en diagonales, pour éviter les éventuelles répétitions horizontales ou verticales dues au procédé de remplissage, ascendantes et commençant à l'angle supérieur gauche :

<figure><img src="image_23.png" /></figure>

Nous avions signalé le caractère arbitraire et simple de ce choix et mentionné la possibilité d'autres solutions. Nous approfondissons ici tout le champ du possible en conservant toute fois l'option de la diagonale et la taille du tableau.

<footnote n="1">¹ Spirale – Un chiffre à masque jetable, 2015.</footnote>
## 2. Orientation des diagonales

Deux possibilités seulement existent :

<figure><img src="image_24.png" /></figure>

<figure><img src="image_25.png" /></figure>

## 3. Repérage des lignes

À partir des deux orientations possibles, nous définissons deux réseaux que nous notons A et N en fonction des lettres attribuées à la première ligne de chaque réseau :

<figure><img src="image_26.png" /><figcaption>Réseau A</figcaption></figure>

<figure><img src="image_27.png" /><figcaption>Réseau N</figcaption></figure>

Une ligne peut être parcourue dans deux sens possibles : ascendant ou descendant. Elle est alors désignée différemment pour indiquer ce sens : en majuscule pour le sens ascendant et en minuscule pour le sens descendant. Par exemples : C pour la ligne allant de C à c, q pour la ligne allant de q à Q.

## 4. Description des parcours

Un parcours doit passer par toutes les cases du tableau, une fois et une seule. Il ne peut donc s'appuyer que sur un seul des réseaux A ou N. Comme il est constitué d'une séquence de lignes parcourues dans un des 2 sens possibles, nous le décrirons par la suite des lettres désignant chaque ligne avec son sens de parcours. Ainsi le parcours standard de Spirale est noté ABCDEFGHIJKLМ.
## 5. Exemples de parcours

Notre convention de notation permet de désigner simplement et sans ambigüité n'importe quel parcours (les numéros dans les figures indiquent au préalable l'ordre séquentiel du parcours) :

<figure><img src="image_28.png" /><figcaption>- Ascendant, espacé d'une ligne</figcaption></figure>

ACEGIKBDFHJL

<figure><img src="image_29.png" /><figcaption>- Ascendant, espacé de 2 lignes</figcaption></figure>

ADGJMBEHKCFIL

<figure><img src="image_30.png" /><figcaption>- Ascendant, espacé de 3 lignes</figcaption></figure>

AEIMBFJCKDLGH

<figure><img src="image_31.png" /><figcaption>- Descendant, sinueux adjacent</figcaption></figure>

nOpQrStUvWxYz

<figure><img src="image_32.png" /><figcaption>- Spirale convergente</figcaption></figure>

AmBICkDjEiFhG
## 6. Dénombrement des parcours

Il y a 2 réseaux exploitables. Dans chaque réseau il y a 13 lignes, cela fait donc $13! = 6\,227\,020\,800$ séquences possibles. Pour une séquence, chaque ligne peut être parcourue dans 2 sens possibles que nous avons exprimés par majuscule et minuscule mais que nous pourrions aussi exprimer par un masque de 13 digits binaires : 0 pour une minuscule et 1 pour une majuscule. Ainsi la séquence orientée AmBlCkDjEiFhG est la conjonction de la permutation AMBLCKDJEIFHG et du masque de sens 1010101010101. Présenté ainsi le problème devient très clair : pour chaque choix de lignes il y a $2^{13} = 8\,192$ combinaisons des sens de parcours. En résumé, en se limitant à des segments orientés diagonaux, il y a $2 \times 13! \times 2^{13} \approx 10^{14}$ parcours possibles pour relever le contenu des cases du tableau 7x7.

## 7. Applications

* **Chiffre Spirale**: Spirale a déjà 4 degrés de liberté avec les 4 clés de 7 caractères produisant une richesse combinatoire équivalente à celle d'un chiffre à 128 bits. Si nous introduisons un 5ème degré avec un changement systématique du parcours de lecture de la matrice donnant la séquence amorce alors cela entraîne un accroissement considérable de la variabilité combinatoire de Spirale allant jusqu'à 46 bits supplémentaires. Au minimum nous pouvons faire usage, contre la cryptanalyse, de ce degré supplémentaire de liberté en affectant à chaque utilisateur un ou plusieurs parcours exclusifs qui joueraient le rôle de *sel* ou signature. Cela dans un contexte de correspondance secrète entre des agents et une autorité qui les supervise et qui a connaissance de ces sels personnels.

* **Chiffrement par transposition**: la classique méthode de transposition par permutation des lignes et colonnes autorise, toujours dans le cas de notre tableau 7x7, un nombre de combinaisons égal à $7! \times 7! = 25\,401\,600$. Il est très inférieur à celui (10¹⁴) obtenu en cheminant en diagonal. Nous voyons donc tout l'intérêt qui l'y aurait à utiliser ce mode de parcours. Le problème pratique étant alors de générer, simplement et le plus pseudo-aléatoirement possible, les séquences de majuscules et minuscules décrivant le parcours et jouant le rôle de clés.
<figure><img src="image_33.png" /></figure>

## *Un chiffre par transposition*

### Plan

<table><tr><td>1. Introduction</td><td>1</td></tr><tr><td>2. Transposition par relèvement en diagonales</td><td>2</td></tr><tr><td>3. Choix du réseau</td><td>4</td></tr><tr><td>4. Permutation des lignes</td><td>5</td></tr><tr><td>5. Orientations des lignes</td><td>5</td></tr><tr><td>6. Mise en œuvre du chiffre</td><td>6</td></tr><tr><td>7. Défis</td><td>6</td></tr><tr><td>8. Extensions du chiffre</td><td>7</td></tr><tr><td>9. Références</td><td>8</td></tr><tr><td>10. Annexes</td><td>8</td></tr></table>

## 1. Introduction

Dans un document précédent [1], nous avons esquissé tout le bénéfice combinatoire que l'on peut tirer du parcours généralisé en diagonales dans un tableau pour en lire ou permuter les éléments. Nous développons ici en détails ces idées pour bâtir progressivement un nouveau système de chiffrement manuel, par transposition, que nous appelons *Diagonales*. Il n'est pas conçu pour être aussi sophistiqué et résistant que Spirale [2] mais d'une mise en œuvre bien plus rapide. Si Spirale a plutôt vocation à être le système manuel de chiffrement de secours d'une correspondance secrète durable (diplomatique ou militaire) à protéger fortement, *Diagonales* est prévu pour des messages courts (de moins de 50 caractères) à durée de validité assez courte typique des ordres du champ de bataille ou des consignes internes à un réseau clandestin.
## 2. Transposition par relèvement en diagonales

Nous travaillons sur un tableau 7x7, d'où le maximum de 49 caractères. Nous illustrerons chaque étape sur l'exemple suivant :

*Une attaque simulée aura lieu demain matin à quatre heures*

Le texte à chiffrer est d'abord rangé ligne par ligne dans un tableau 7x7, les éventuelles dernières cases vides étant remplies par des lettres quelconques dans le plus grand hasard possible. Les espaces et signes de ponctuation doivent être supprimées, et les lettres accentuées remplacées par les même sans accent.

D'où le tableau suivant :

<figure><img src="image_34.png" /><figcaption>Table du texte clair</figcaption></figure>

Nous savons déjà par [1] qu'un parcours en diagonal quelconque, parmi les 2 x 13! x 2¹³ ≈ 10¹⁴ possibles, permet de lire les lettres de ce tableau. À la différence du procédé classique par permutation des lignes et colonnes, les lettres voisines sur une même ligne se trouveront alors dispersées de manière irrégulière qui mettra en défaut la méthode classique de cryptanalyse par recherche des bigrammes et trigrammes les plus fréquents dans la langue.

Par [1] nous savons qu'un parcours diagonal repose sur :

<figure><img src="image_35.png" /><figcaption>Réseau A</figcaption></figure>

<figure><img src="image_36.png" /><figcaption>réseau N</figcaption></figure>
* Le choix d'un des 2 réseaux A ou N de diagonales ;

* Une permutation des 13 lignes A...M ou N...Z de ce réseau ;

* L'orientation de chacune de ces lignes, indiquée par la majuscule ou la minuscule.

Toutes ces informations étant exprimées et condensées, selon la convention décrite dans [1], en une chaîne de lettres de la forme XpTyruVoqWNZs, par exemple pour le réseau N. La majuscule signifiant le sens ascendant et la minuscule le sens descendant. C'est cette suite de lettres qui est la véritable clé du chiffre par transposition. Elle est représentée sur la figure suivante où le chiffre en bleu indique l'ordre séquentiel de parcours des segments :

<figure><img src="image_37.png" /><figcaption>Schéma ordonné des segments orientés</figcaption></figure>

Ce parcours se lit ainsi : 1er segment X (ascendant), 2ème segment p (descendant), 3ème segment T (ascendant), etc. Cela donne les lectures suivantes :

eaa tma staueuu nh esuei qeemae runil tu airm uqil a e neadr

et finalement la transposition suivante du message initial :

EAATMASTAUEUUNHESUEIQEEMAERUNILTUAIRMUQILAENEADTR

Une suite descriptive telle que XpTyruVoqWNZs, malgré sa complexité, si elle était utilisée de manière très répétitive pourrait être percée. Alors que l'usage systématique d'une clé différente pour chaque message permet de tirer profit du grand nombre de combinaisons possibles $2 \times 13! \times 2^{13} \approx 2^{46,5}$. Cette quasi-égalité arithmétique signifie que le chiffre par transposition Diagonales est équivalent, d'un point de vue combinatoire, à un chiffre de 46 bits.

Le problème pratique, pour exploiter cette richesse combinatoire, est de concevoir une méthode de construction de l'ensemble des suites descriptives des parcours diagonaux. C'est cette méthode qui fait l'objet de la suite de cet article. Elle s'appuie sur l'usage de 2 clés K1 et K2, qu'il conviendrait plutôt d'appeler proto-clés car leur seul rôle est d'engendrer la clé
véritable : la séquence des segments orientés. Fonctionnellement le crypto-système Diagonales peut être décrit par le schéma suivant :

<figure><img src="image_38.png" /><figcaption>Figure 1</figcaption></figure>

### 3. Choix du réseau

Ce choix est binaire, pour l'effectuer nous allons utiliser la parité d'un nombre que nous allons construire et qui servira ultérieurement et principalement pour définir le *masque binaire* d'orientation des lignes.

Par [1] nous savons déjà qu'il y a $2^{13} = 8192$ combinaisons possibles de valeur du masque. Pour les atteindre il suffirait de tirer aléatoirement un entier compris entre 0 et 8191. C'est ce que nous allons faire mais en travaillant non pas en système décimal mais en système hexadécimal [4]. En effet nous pouvons écrire $13 = 1 + 3 \times 4$, ce qui signifie que 3 groupes de 4 bits apportent l'essentiel du nombre. Le 13<sup>ème</sup> bit sera déterminé plus loin. D'autre part un groupe de 4 bits prend les valeurs comprises entre 0 et 15 qui sont représentées en base 16 par les caractères 0, ..., 9, A, B, C, D, E, F.

L'idée est donc de disposer au départ d'une suite pseudo-aléatoire K1, de 3 chiffres hexadécimaux, jouant le rôle de clé. Cette clé pouvant, par exemple, être créée personnellement par une procédure comme celle décrite dans [3].

Pour le choix du réseau nous ferons, simplement et arbitrairement, le compte des bits 1 dans les 3 groupes. Si le nombre est impair nous choisissons le réseau A. En fait il s'agit d'une fonction de hachage simplissime sur l'ensemble des 12 bits, d'autres fonctions pourraient aussi convenir.

Finalement, la sélection d'un réseau suit les étapes suivantes :

* à partir d'une clé $K1 = H_1H_2H_3$

* conversion des chiffres $H_i$ en binaire

* décompte du nombre total n de bits 1
* si n est impair alors choix du réseau A sinon choix du réseau N

L'annexe A illustre ces étapes sur un exemple :

* clé K1 = 44C

* séquence binaire [0100 0100 1100]

* n = 4

* réseau N : NOPQRSTUVWXYZ

## 4. Permutation des lignes

Ayant 13 lignes à permuter cela offre $13! = 6\,227\,020\,800$ séquences de 13 lettres distinctes, pour les permuter nous appliquerons le même algorithme tournant que celui utilisé dans Spirale pour permuter les alphabets. Cet algorithme est conditionné par la donnée d'une suite K2 de lettres choisies de manière quelconque parmi les 26 lettres de l'alphabet et jouant le rôle de clé. Dans notre cas actuel, quelle doit-être la longueur $n$ de la clé pour offrir autant de combinaisons qu'il y a de permutations ou séquences ? il suffit de poser :

$$13! = 6\,227\,020\,800 = 26^n$$

Cela implique $n \approx 6,92$ et donc avec une clé de 7 lettres nous engendrerons un nombre de combinaisons équivalent à celui des permutations des 13 lignes.

Poursuivons notre exemple en adoptant la clé K2 = CTSQEOU. Après permutation (annexe B) cela donne la séquence XPTYRUVOQWNZS. Cette permutation a été effectuée en fonction des décalages [3,20,19,17,5,15,21] tirés du rang des lettres de la clé. C'est à partir de ces valeurs que nous déterminons le 13ème bit : le reste modulo 2 de leur somme. Ici cela donne 100 et donc 0 (annexe A). Là encore il s'agit d'une fonction de hachage, de K2, simple à calculer et d'autres fonctions pourraient être adoptées.

## 5. Orientations des lignes

Nous disposons maintenant de l'ensemble des bits du masque des orientations. Nous avons placé le dernier défini tout à gauche (annexe A) par simplicité, mais nous pourrions lui attribuer n'importe quel autre emplacement et définir ainsi autant de variantes du chiffre. Pour choisir l'orientation des lignes nous adoptons une convention : si dans ce masque le bit de rang i est égal à 1 (respectivement 0) alors dans le réseau permuté la ligne de rang i sera désignée par une majuscule (respectivement une minuscule) qui signifie qu'elle est parcourue dans le sens ascendant (respectivement descendant).

Ainsi le masque 0010001001100 appliqué au réseau permuté XPTYRUVOQWNZS donne le descriptif xpTyruVoqWNzs de la séquence de segments diagonaux orientés à emprunter pour parcourir le tableau.
Finalement l'action des clés est croisée : K1 définit essentiellement le masque d'orientation et parallèlement le réseau de lignes diagonales, K2 définit intégralement la permutation de ce réseau et très partiellement l'orientation de celui-ci. Ce choix d'interaction croisée est voulu pour compliquer la tache des cryptanalystes et contrer les recherches indépendantes des deux clés.

## 6. Mise en œuvre du chiffre

Nous avons détaillé dans l'annexe C les différentes étapes, courtes et rapides, du chiffre. La ligne *permuté* est destinée à recevoir les marques d'avancement du processus de permutation à partir des lettres de K2. La ligne *relevé* sert à marquer l'avancement du processus de relèvement du tableau à partir des lettres du descriptif. Les traits pleins et déliés tracés sur le tableau matérialisent les sens de parcours. Pour guider l'utilisateur dans le repérage des diagonales et de leurs sens, nous avons porté en bordure du tableau les lettres indexes des deux réseaux. Aidé de ce modèle l'utilisateur peu entraîné ne nécessite qu'une quinzaine minutes pour chiffrer un texte de 49 lettres.

Le processus de déchiffrement se fait naturellement en deux étapes :

* Construction du descriptif de la séquence de segments diagonaux orientés, de manière identique à la phase de chiffrement ;

* Remplissage du tableau, lettre par lettre, en lisant le texte chiffré de gauche à droite et en parcourant le tableau suivant la séquence des segments diagonaux orientés.

## 7. Défis

Pour inciter les cryptanalystes à briser ce chiffre nous proposons ici différents textes chiffrés correspondant à des situations affaiblissantes d'utilisation :

* Texte chiffré 1 : le texte clair contient une partie du texte de l'exemple
  ONURRUTNMEDEIEPLESATSIZAVIQUDVENEARUMAEOLARTDNREH

* Texte chiffré 2 : le texte clair est crypté avec les mêmes clés que le texte 1
  DEZREENLEAGTREVHAMSEAOGREIDURUNIXOALULDSCQLSUAREEC

* Texte chiffré 3 : texte clair nouveau crypté avec deux nouvelles clés
  GTSLRAORSEELUTETISIEECSREVAETEHRMUCCRAIAAEEHETDRO
## 8. Extensions du chiffre

Pour chiffrer un texte long nous pouvons convenir de fractionner le texte en blocs de 49 caractères. Pour assurer une sécurité maximale il convient alors d'utiliser des clés K1, K2 différentes pour chaque bloc. Une solution rapide ne demandant pas de refaire les calculs pour chaque bloc consiste à effectuer une simple permutation circulaire de 3 ou 4 digits, dans un sens pour le masque et en sens inverse pour le réseau permuté, renouvelée à chaque bloc. L'annexe D en donne un exemple, pour limiter la taille du texte nous y avons appliqué certaines des conventions énoncées dans [5].

La solution alternative au fractionnement du texte est l'augmentation de taille du tableau. Pour un tableau carré de taille p, il y a $2 \cdot p \cdot 1$ diagonales parallèles et donc $(2p-1)!$ permutations de ces lignes. Augmenter la taille du tableau augmentera donc la richesse combinatoire de ce chiffre et sa résistance aux attaques par force brute. Mais dans la foulée il faut augmenter la taille des clés pour engendrer autant de combinaisons des lettres qu'il y a de permutations des $2p-1$ lignes.

Il y a intérêt à ne travailler qu'avec des tableaux de taille impaire $p = 2 \cdot k + 1$, en effet :

$$2 \cdot p - 1 = 4 \cdot k + 1$$

Signifie que nous pouvons étendre notre démarche des paragraphes précédents en prenant une clé K1 de k caractères hexadécimaux pour définir le réseau et son masque d'orientation. Le cas $p = 13$ est un bon compromis entre simplicité et puissance :

* Tableau $13 \times 13$  
  2.p-1 = 25 = 4x6 + 1 => clé K1 de 6 chiffres hexadécimaux  
  25! = 1,55.10²⁵ = 26ⁿ => n = 17,8 clé K2 de 18 lettres

La désignation des 25 lignes diagonales utilise la quasi-totalité de l'alphabet : A, ..., Y. La distinction entre les 2 réseaux associés doit se faire maintenant par mention du coté Gauche ou Droit du tableau d'où partent ces lignes. La désignation A...M ou N...Z du tableau $7 \times 7$ n'était due qu'à un heureux hasard : $2 \times 7 - 1 = 13$. Pour une taille supérieure à 13 il faut plus de 25 symboles pour désigner les lignes et nous pourrions adopter le principe de la numération de position en cumulant des digits littéraux : A, ..., Z, AA, AB, ..., AZ, BA, BB, etc. Cela permettrait de conserver la convention Majuscule-Minuscule pour indiquer le sens de parcours : ligne az descendante, ligne BA ascendante par exemples.

Dans tous les cas le principe du choix du réseau reste le même et seule sa formulation change légèrement :

* à partir d'une clé $K1 = H_1...H_k$

* conversion des chiffres $H_i$ en binaire

* décompte du nombre total n de bits 1

* si n est impair alors choix du réseau à Gauche sinon choix du réseau à Droite

Les annexes E1 et E2 illustrent en détails l'application du chiffre au même texte long que celui de l'annexe D.
## 9. Références

1. Ph. Allard, Parcours de relèvement d'un tableau, 2015.

2. Ph. Allard, Spirale – un chiffre à masque jetable, 2015.

3. Ph. Allard, La création de clés, 2015.

4. fr.wikipedia.org/wiki/Système_hexadécimal

5. Ph. Allard, Conventions accessoires pour alphabet limité, 2015.

## 10. Annexes

<table><tr><td>A</td><td>Exemple</td></tr><tr><td>B</td><td>Algorithme de permutation : Exemple</td></tr><tr><td>C</td><td>Modèle d'utilisation</td></tr><tr><td>D</td><td>Exemple de plusieurs blocs</td></tr><tr><td>E1</td><td>Modèle d'utilisation 13x13 : Exemple</td></tr><tr><td>E2</td><td>Modèle d'utilisation 13x13 : Exemple</td></tr></table>
<figure><img src="image_39.png" /></figure>

Réseau de base :

<figure><img src="image_40.png" /></figure>

rayez la lettre dans le réseau de base quand elle est permutée, pour la sauter ultérieurement

Réseau permuté :

<table><tr><td>X</td><td>P</td><td>T</td><td>Y</td><td>R</td><td>U</td><td>V</td><td>O</td><td>Q</td><td>W</td><td>N</td><td>Z</td><td>S</td></tr></table>
<table><thead><tr><th>Lettre</th><th>A</th><th>B</th><th>C</th><th>D</th><th>E</th><th>F</th><th>G</th><th>H</th><th>I</th><th>J</th><th>K</th><th>L</th><th>M</th><th>N</th><th>O</th><th>P</th><th>Q</th><th>R</th><th>S</th><th>T</th><th>U</th><th>V</th><th>W</th><th>X</th><th>Y</th><th>Z</th></tr></thead><tbody><tr><th>Rang</th><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td></tr></tbody></table>

<table><tr><td>clé K1</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Valeur<sub>2</sub></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Masque</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

<table><tr><td>clé K2</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Rang</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

permuté:

<table><tr><td>Réseau</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Permuté</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Masque</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Orienté</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

relevé:

<table><tr><td>Texte clair:</td><td></td></tr></table>

<figure><img src="image_41.png" /></figure>

vérifier le nombre de lettres après le chiffrement

<table><tr><td>Texte Chiffré</td><td></td></tr></table>
Texte
Clair

une attaque simulée aura lieu demain matin à 4 heures, elle portera sur la batterie de la côte 904 et sera menée par le 27ème régiment d'artillerie de montagne

0010001001100

← 4 bits

0010011000010

0110000100010

xpTyruVoqWNzs

→ 3 lettres

nzSxpTYruvoQw

oQWnzsxPtyrUv

<figure><img src="image_42.png" /></figure>

<figure><img src="image_43.png" /></figure>

<figure><img src="image_44.png" /></figure>

vérifier le nombre de lettres après le chiffrement

Texte
Chiffré 1

AAETMASTAUEUUNHESUEIQEEMAERUNILTUAIRMUQILAENEADTR

Texte
Chiffré 2

RARIEARLCKEPUEPEKDBEEMDLATLJTAEESELITTEORATSEROEN

Texte
Chiffré 3

QIIAEEUNDTBERKTENAEGNRGKARNLODFARLRDRTDTMLEGMIEEQ
<table><tr><td>Lettre</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr><tr><td>Rang</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td></tr></table>

<table><tr><td>clé K1</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Valeur<sub>2</sub></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>Masque</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>1</td><td>1</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>9</td></tr></table>

<table><tr><td>clé K2</td><td>Y</td><td>Q</td><td>G</td><td>K</td><td>V</td><td>R</td><td>R</td><td>F</td><td>P</td><td>L</td><td>W</td><td>Z</td><td>F</td><td>E</td><td>O</td><td>E</td><td>Z</td><td>N</td><td></td></tr><tr><td>Rang</td><td>25</td><td>17</td><td>7</td><td>11</td><td>22</td><td>18</td><td>18</td><td>6</td><td>16</td><td>12</td><td>23</td><td>26</td><td>6</td><td>5</td><td>15</td><td>5</td><td>26</td><td>14</td><td>258</td><td></td></tr></table>

permuté:

..

..

..

..

..

..

..

..

..

..

..

..

..

..

..

..

..

..

<figure><img src="image_45.png" /></figure>

<figure><img src="image_46.png" /></figure>

<figure><img src="image_47.png" /></figure>

<table><tr><td>Réseau</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>à gauche</td></tr><tr><td>Permuté</td><td>A</td><td>I</td><td>B</td><td>O</td><td>N</td><td>R</td><td>T</td><td>K</td><td>M</td><td>V</td><td>G</td><td>L</td><td>C</td><td>S</td><td>H</td><td>X</td><td>D</td><td>J</td><td>W</td><td>E</td><td>U</td><td>F</td><td>Y</td><td>P</td><td>Q</td></tr><tr><td>Masque</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>1</td><td>1</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td></tr><tr><td>Orienté</td><td>a</td><td>I</td><td>b</td><td>O</td><td>n</td><td>r</td><td>T</td><td>k</td><td>m</td><td>v</td><td>g</td><td>l</td><td>C</td><td>s</td><td>h</td><td>X</td><td>D</td><td>J</td><td>W</td><td>e</td><td>u</td><td>f</td><td>y</td><td>p</td><td>Q</td></tr></table>
<table><tr><td>Texte<br/>Clair</td><td>une attaque simulée aura lieu demain matin à 4 heures, elle portera sur la batterie de la côte 904 et sera menée par le 27ème régiment d'artillerie de montagne</td></tr></table>

<figure><img src="image_48.png" /></figure>

<table><thead><tr><th>Orienté</th><th>a</th><th>I</th><th>b</th><th>O</th><th>n</th><th>r</th><th>T</th><th>k</th><th>m</th><th>v</th><th>g</th><th>l</th><th>C</th><th>s</th><th>h</th><th>X</th><th>D</th><th>J</th><th>W</th><th>e</th><th>u</th><th>f</th><th>y</th><th>p</th><th>Q</th></tr></thead><tbody><tr><td>relevé:</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td></tr></tbody></table>

<table><tr><td>Texte<br/>Chiffré</td><td>UBMETTEAAUNUIRGLGAEERLUDQEUDKPELACMCEEEIQTLUBZDTQSIIRRRINRROMUASSEDERITDJMSHBAUNEOAOIENEAIJEKTNEELERKNEAG PORMHRTTAGUAMEAAGEKEEUTLEYNXTEATEDEWYHTAIRPBVLLLTRIENFKOVERMLSAA</td></tr></table>
Un chiffre par transposition

Plan

<table><tr><td>1. Introduction</td><td>1</td></tr><tr><td>2. Le chiffrement</td><td>1</td></tr><tr><td>3. Le déchiffrement</td><td>2</td></tr><tr><td>4. Mise en œuvre du chiffre</td><td>3</td></tr><tr><td>5. Défis</td><td>3</td></tr><tr><td>6. Extensions du chiffre</td><td>3</td></tr><tr><td>7. Références</td><td>4</td></tr><tr><td>7. Annexes</td><td>4</td></tr></table>

1. Introduction

Nous avons développé un algorithme tournant de permutation déjà utilisé, comme module interne, dans deux chiffres Diagonales [1] et Spirales [2]. Dans le premier cas il s'agit de permuter une courte chaîne de 13 lettres. Dans le second cas la chaîne peut être nettement plus longue car jouant le rôle d'alphabet elle peut atteindre, avec seulement des caractères latins, 26 caractères ou 36 avec les chiffres ou une soixantaine avec les caractères typographiques. Finalement, utilisé en soi, cet algorithme peut constituer le mécanisme unique d'un algorithme de chiffrement par transposition pouvant travailler sur un texte de longueur quelconque et rédigé dans un alphabet quelconque. Nous développons dans ce qui suit tous les aspects de ce système de chiffrement que nous appelons Carrousel.

2. Le chiffrement

Rappelons le processus de permutation : le texte est vu comme une liste circulaire de caractères sur laquelle nous nous déplaçons par sauts irréguliers<fnref n="1" />, en commençant à l'extrémité finale. L'amplitude des sauts est définie par une suite d'entiers tirée d'une chaîne de caractères, jouant le rôle de clé, en substituant à chaque caractère son rang dans l'alphabet utilisé. Lorsqu'un saut aboutit sur un caractère du texte original, ce caractère est barré et est

<footnote n="1">¹ Comme le pompon présenté aux enfants sur un carrousel.</footnote>
reporté à la fin d'une deuxième liste qui constitue ainsi progressivement le texte transposé. Si, dans le parcours, le caractère d'arrivée est déjà barré il faut le sauter et passer au suivant<fnref n="2" />. Un texte étant naturellement beaucoup plus long que la clé il faut parcourir celle-ci plusieurs fois jusqu'à épuisement de tous les caractères non barrés du texte : si le texte a n caractères et la clé p caractères alors la division euclidienne $n = q.p + r$ signifie qu'il faut q cycles de parcours de la clé et utiliser encore une fois r caractères de celle-ci.

L'annexe A illustre un exemple complet emprunté au chiffre Diagonales. La dernière lettre de la clé (7 caractères) et du texte (13 caractères) n'ont pas été marquées pour manifester cette dernière étape. L'annexe B montre un état du processus inachevé de transposition d'un texte de 26 lettres par une clé de 5 lettres. Comme nous l'avons déjà signalé, l'algorithme Carrousel peut s'appliquer à n'importe quel alphabet. C'est ce que nous illustrons dans l'annexe C où un texte en Anglais de 82 caractères, écrit avec un alphabet de 36 caractères incluant les chiffres à sa fin, est partiellement transposé par une clé de 12 caractères, incluant de manière cohérente avec l'alphabet utilisé, des lettres et des chiffres.

Nous proposons cette feuille modèle pour l'exécution à la main du chiffre. Les textes clair et chiffré sont alternativement écrits ligne par ligne. Pour faciliter au lecteur le suivi du déroulement du processus de transposition, nous avons inscrit 3 informations au dessus de chaque caractère déjà transposé du texte clair :

* Le numéro de l'étape dans laquelle ce caractère a été sélectionné, reporté puis barré

* Le caractère de la clé, déterminatif du saut qui a abouti à ce caractère du texte clair

* L'amplitude du saut, déduit du caractère de la clé

## 3. Le déchiffrement

Nous illustrons son processus sur une autre feuille modèle, remplie cette fois-ci avec tout le texte chiffré (annexe D) : le texte clair est toujours vu comme une liste circulaire parcourue par sauts, mais le texte chiffré est lu de gauche à droite en commençant par l'extrémité initiale car c'est là que se trouve le premier caractère transposé. Ce premier caractère est reporté dans la liste, encore vide, du texte clair à l'emplacement défini, comme dans le chiffrement, par le premier caractère de la clé et le saut d'amplitude correspondante à partir de l'extrémité finale. Ce caractère est ensuite barré dans le texte chiffré et le caractère suivant à droite est traité de la même façon pour être reporté dans la liste du texte clair par un saut partant du caractère précédemment transposé, d'une amplitude définie par le 2ème caractère de la clé et dans le même sens de parcours. Le texte clair se remplit ainsi progressivement, par des caractères d'abord dispersés et isolés. Là encore, pour guider le lecteur, nous avons reporté au dessus de chaque caractère du texte clair les 3 informations caractéristiques de sa transposition. Toujours pour aider le lecteur, nous avons poussé dans l'exemple le processus de déchiffrement un peu plus loin que dans la phase de chiffrement.

<footnote n="2">² Ce n'est que justice, il ne faut pas présenter le pompon aux mêmes enfants !</footnote>
## 4. Mise en œuvre du chiffre

Pour un usage personnel du chiffre nous donnons, en annexe E, la version vierge de la feuille modèle convenant indifféremment au chiffrement ou au déchiffrement. Un programme, écrit en Python, a également été développé et il est distribué librement. L'annexe F montre les résultats qu'il affiche dans le cas de notre exemple, d'abord au chiffrement puis au déchiffrement.

## 5. Défis

Pour inciter les cryptanalystes à briser ce chiffre nous proposons ici différents textes chiffrés correspondant à des situations affaiblissantes d'utilisation :

* Texte chiffré 1 : le texte clair, en Anglais, de 148 lettres de l'alphabet de base contient des partie du texte de l'exemple traité ;

* Texte chiffré 2 : le texte clair, en Anglais, de 124 lettres est crypté avec la même clé de 17 lettres que le texte 1 ;

* Texte chiffré 3 : texte clair, en Anglais, de 577 caractères pris dans un alphabet de 62 caractères et crypté avec une clé de 16 caractères.

Ces différents textes et l'alphabet enrichi sont donnés dans l'annexe G.

## 6. Extensions du chiffre

Elles ne s'exercent pas sur la longueur du texte ou la nature et la longueur de l'alphabet dont nous avons déjà dit et vu qu'elles sont quelconques. C'est avec la clé que nous allons jouer.

### Changements de sens de parcours

La forme littérale de la clé est commode pour sa mémorisation ou sa transmission à un utilisateur, mais c'est sa conversion en nombres entiers qui est significative. Ils expriment l'amplitude des sauts, toujours effectués dans le même sens. Nous pourrions accepter aussi des sauts dans le sens rétrograde que nous exprimerions par une valeur négative. Ainsi la clé numérique [7, 22, -13, 5, -8] signifierait que, lors de son parcours cyclique, les 3ème et 5ème sauts seraient respectivement de 13 et 8 caractères dans le sens rétrograde de parcours de la liste circulaire du texte. Si nous voulons conserver la forme littérale de la clé, nous pouvons convenir d'utiliser les minuscules pour les sauts rétrogrades. La clé précédente s'écrirait alors GVmEh. Ces changements de sens de parcours du texte enrichissent considérablement la force du chiffre en lui donnant un caractère encore plus chaotique aux yeux des cryptanalystes.

### Masque jetable

Jusque là nous avons utilisé des clés nettement plus courtes que le texte et qui devaient être parcourues plusieurs fois jusqu'à transposition complète de celui-ci. Mais nous pouvons aussi
envisager la même évolution conceptuelle qui a fait passer historiquement du chiffre de Vigenère (substitution poly-alphabétique) au chiffre à masque jetable : utiliser une clé de même longueur que le texte, de structure aussi aléatoire que possible et utilisée une seule fois. Nous créons ainsi un chiffre par transposition à masque jetable jouissant vraisemblablement de la même force que le chiffre par substitution à masque jetable.

## Génération de clés

Dans le fonctionnement normal du chiffre et aussi du programme associé, les données fondamentales sont la clé et le texte. Si nous fixons la clé ainsi que le texte, par exemple 3 copies de l'alphabet utilisé, l'application du programme en mode chiffrement donne une permutation de ces caractères dans laquelle nous pouvons puiser un segment jouant ultérieurement un rôle de clé. Dans la pratique, pour augmenter le caractère pseudo-aléatoire de la chaîne permutée il faut exécuter plusieurs fois l'algorithme. Le programme associé à Carrousel a été facilement modifié pour accepter en donnée fondamentale le nombre de permutations à appliquer [3].

## 7. Références

1. Diagonales – un chiffre par transposition, 2015.

2. Spirale – un chiffre à masque jetable, 2015.

3. Création de clés, 2015.

## 7. Annexes

<table><tr><td>A</td><td>Exemple de transposition d'une chaîne courte</td></tr><tr><td>B</td><td>Exemple de transposition d'une chaîne longue</td></tr><tr><td>C</td><td>Chiffrement : Exemple détaillé</td></tr><tr><td>D</td><td>Déchiffrement : Exemple détaillé</td></tr><tr><td>E</td><td>Feuille modèle vierge</td></tr><tr><td>F</td><td>Résultat du programme : Exemple détaillé</td></tr><tr><td>G</td><td>Textes chiffrés des défis</td></tr></table>
<figure><img src="image_49.png" /></figure>

Réseau de base :

<figure><img src="image_50.png" /></figure>

rayez la lettre dans le réseau de base quand elle est permutée, pour la sauter ultérieurement

Réseau permuté :

X P T Y R U V O Q W N Z S
## Algorithme de Permutation : Exemple

<figure><img src="image_51.png" /></figure>

<figure><img src="image_52.png" /></figure>

rayez la lettre dans l'alphabet original quand elle est permutée, pour la sauter ultérieurement

<figure><img src="image_53.png" /><figcaption>Alphabet permuté</figcaption></figure>
<table><tr><td>J</td><td>A</td><td>M</td><td>E</td><td>S</td><td>B</td><td>O</td><td>N</td><td>D</td><td>0</td><td>0</td><td>7</td><td></td></tr><tr><td>10</td><td>1</td><td>13</td><td>5</td><td>19</td><td>2</td><td>15</td><td>14</td><td>4</td><td>27</td><td>27</td><td>34</td><td></td></tr></table>

<figure><img src="image_54.png" /></figure>

<figure><img src="image_55.png" /></figure>

<figure><img src="image_56.png" /></figure>

<figure><img src="image_57.png" /></figure>

<figure><img src="image_58.png" /></figure>

<figure><img src="image_59.png" /></figure>

<figure><img src="image_60.png" /></figure>

<figure><img src="image_61.png" /></figure>

<figure><img src="image_62.png" /></figure>

<figure><img src="image_63.png" /></figure>

<figure><img src="image_64.png" /></figure>

<figure><img src="image_65.png" /></figure>

← clé de transposition

← rang dans l'alphabet

← marques pour tracer l'avancement dans le processus de transposition

↓ Texte Clair

8 N 14

7 O 15

11 O 27

<table><tr><td>C</td><td>A</td><td>R</td><td>R</td><td>O</td><td>U</td><td>S</td><td>E</td><td>L</td><td>I</td><td>S</td><td>A</td><td>C</td><td>R</td><td>Y</td><td>P</td><td>T</td><td>Ø</td><td>S</td><td>Y</td><td>S</td><td>T</td><td>E</td><td>M</td><td>D</td></tr></table>

↓ Texte Chiffré

F O Y T 2 I O R H T T H X E 5 E

↓ Texte Clair

16 E 5

6 B 2

5 S 19

15 M 13

<table><tr><td>E</td><td>S</td><td>I</td><td>G</td><td>N</td><td>E</td><td>D</td><td>I</td><td>N</td><td>2</td><td>0</td><td>1</td><td>5</td><td>T</td><td>O</td><td>T</td><td>R</td><td>A</td><td>N</td><td>S</td><td>P</td><td>O</td><td>S</td><td>E</td><td>A</td></tr></table>

↓ Texte Chiffré

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

10 0 27

14 A 1

13 J 10

4 E 5

3 M 13

12 7 37

2 A 1

1 J 10

<table><tr><td>Y</td><td>E</td><td>X</td><td>T</td><td>O</td><td>F</td><td>A</td><td>N</td><td>Y</td><td>L</td><td>E</td><td>N</td><td>G</td><td>T</td><td>H</td><td>B</td><td>Y</td><td>A</td><td>K</td><td>E</td><td>Y</td><td>Ø</td><td>F</td><td>A</td><td>N</td></tr></table>

↓ Texte Chiffré

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

↓ Texte Clair

9 D 4

<table><tr><td>Y</td><td>L</td><td>E</td><td>N</td><td>G</td><td>T</td><td>H</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

↓ Texte Chiffré

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

↓ Texte Clair

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

↓ Texte Chiffré

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

↓ Texte Clair

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

↓ Texte Chiffré

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

↓ Texte Clair

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

↓ Texte Chiffré

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

↓ Texte Clair

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

↓ Texte Chiffré

<table><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>
<figure><img src="image_66.png" /></figure>

←clé de transposition

←rang dans l'alphabet

←marques pour tracer
l'avancement dans le
processus de transposition

↓ Texte Clair

<figure><img src="image_67.png" /></figure>

↓ Texte Chiffré

<figure><img src="image_68.png" /></figure>

↓ Texte Clair

<figure><img src="image_69.png" /></figure>

↓ Texte Chiffré

<figure><img src="image_70.png" /></figure>

↓ Texte Clair

<figure><img src="image_71.png" /></figure>

↓ Texte Chiffré

<figure><img src="image_72.png" /></figure>

↓ Texte Clair

<figure><img src="image_73.png" /></figure>

↓ Texte Chiffré

<figure><img src="image_74.png" /></figure>

↓ Texte Clair

<figure><img src="image_75.png" /></figure>

↓ Texte Chiffré

<figure><img src="image_76.png" /></figure>

↓ Texte Clair

<figure><img src="image_77.png" /></figure>

↓ Texte Chiffré

<figure><img src="image_78.png" /></figure>

↓ Texte Clair

<figure><img src="image_79.png" /></figure>

↓ Texte Chiffré

<figure><img src="image_80.png" /></figure>

↓ Texte Clair

<figure><img src="image_81.png" /></figure>

↓ Texte Chiffré

<figure><img src="image_82.png" /></figure>

↓ Texte Clair

<figure><img src="image_83.png" /></figure>

↓ Texte Chiffré

<figure><img src="image_84.png" /></figure>

↓ Texte Clair

<figure><img src="image_85.png" /></figure>

↓ Texte Chiffré

<figure><img src="image_86.png" /></figure>
Texte 1 :

WRNSHISSSFSIYHEGHEADTSSNLIROPRAEYEENRHDLESSEDFETNAXTRISHSIRYNYPOTTSOIUSENTOLEGEAHANRTLGRE
TGTPTTEWNECETAIETEOEOTDIUCNTUCABIMSTSHRMEKISEAAONVTTTTHEAPS

Texte 2 :

LRQKQIQFEXOATAHEXAUIIHPOAEREEHSQEOQYQLUQSNXXTTTTXEGOOTQSTLWNTESNLEMXLRAVRTIMCANNINALX
QIEAVETXQXNEXAXHDMAQDHQREIVOHUSOIAXTQDHT

Texte 3 :

,YTH FTESTK MHEE CNLRRGTOFHLT -N CI ORTBFOHSEEDN,IGSVOMIESEIB,HNAYB GR OSOTEA NFDGHO DFIEURIY
DSSOSG;VLWAGSDS O EEOHHB AW O EBWSIUOISN,TNI- OBCMENTA SEAD A AN DSFIAAD H,II.ATTF N E EIDRR
HVNWHABHNMY ET ATNDOTIT K ACDLWERASYEA IWNOGHLBA A ER U HE ,SEA EOSGE UH,D R;A GEIR-AAN E
CBCLI T IEPR !-DR ITKDNELLOASAHEE SI SNMHANGS PNOL MFSNDTEA DAELMAIHD -TDI OL B NRIENRUAL.EK;EIR
IOTN LR AHAO FCT" D N TH R.EAIHTNN EM SII RDLRUOLH RE HILEMN OTLH O WAUR,OEASLYIDMNT C G DHOR
TS"ALNSE MNHK;:RH OMNANTIBATO, OEEWE CEDGT,-: TO T R 'SOEEOSIIOSIE ANDHFSRT,VA HLHAMR OTH N HDC

Alphabet pour le texte 3 :

abcdefghijklmnopqrstuvwxyz0123456789 ,,:''''!?(?)+-*/^<=>&@%££$
Nous avons développé plusieurs systèmes de chiffrement manuel dont tout ou partie repose
sur un algorithme de permutation des caractères d'une chaîne ou texte plus ou moins long
[1,2,3]. Dans ce document nous approfondissons les propriétés de cet algorithme.

# 1. Exécution manuelle

Rappelons le processus de permutation : le texte est vu comme une liste circulaire de
caractères sur laquelle nous nous déplaçons par sauts irréguliers, en commençant à
l'extrémité finale. L'amplitude des sauts est définie par une suite d'entiers tirée d'une chaîne
de caractères, jouant le rôle de clé, en substituant à chaque caractère son rang dans l'alphabet
utilisé. Lorsqu'un saut aboutit sur un caractère du texte original, ce caractère est barré et est
reporté à la fin d'une deuxième liste qui constitue ainsi progressivement le texte transposé. Si,
dans le parcours, le caractère d'arrivée est déjà barré il faut le sauter et passer au suivant. Un
texte étant naturellement beaucoup plus long que la clé il faut parcourir celle-ci plusieurs fois
jusqu'à épuisement de tous les caractères non barrés du texte : si le texte a N caractères et la
clé p caractères alors la division euclidienne $n = q.p + r$ signifie qu'il faut q cycles de
parcours de la clé et utiliser encore une fois r caractères de celle-ci.

L'annexe A illustre un exemple complet emprunté au chiffre Diagonales. La dernière lettre de
la clé (7 caractères) et du texte (13 caractères) n'ont pas été marquées pour manifester cette
dernière étape. En fait cette dernière lettre de la clé n'a pas d'influence réelle car il ne reste
qu'un seul caractère à tirer à ce moment là.

Comme le nombre n de caractères éligibles diminue à chaque saut il arrive que le compte de
lettres à sauter s dépasse celui-ci, ce qui se traduit par un ou plusieurs tours de décompte
autour du texte. En pratique cela revient à ne décompter que le reste de la division
euclidienne de s par n : $s = k.n + d$.

# 2. Implémentation programmée

Le choix du déplacement par sauts sur un texte qui est fixé est dû au fait qu'il s'agit d'un
chiffre manuel où seul le crayon peut se déplacer. Dans l'écriture du programme associé à cet
algorithme nous avons mis à profit le caractère dynamique des données et remplacé un saut s
vers la gauche et l'extraction du caractère par un décalage circulaire à droite d'amenant le caractère sélectionné à la gauche du texte encore libre. La structure de plus en plus lacunaire du texte initial dans la version manuelle est remplacée par une sous-chaîne compacte de plus en plus courte et support du décalage circulaire. L'annexe B illustre en détails ce processus sur le même exemple que dans l'annexe A. Le parcours cyclique de la clé a été remplacé de manière équivalente par sa duplication jusqu'à la longueur *N* du texte à permuter. La longueur de clé *n* encore à exploiter diminue en même temps que le texte restant à permuter.

L'annexe C détaille la procédure, écrite en Python, pour cette implémentation programmée.
Par simplicité elle est paramétrée par les données de l'annexe A.

## 3. Propriétés mathématiques

### Décomposition de la permutation

Nous savons déjà qu'une permutation est décomposable en produit de transpositions et aussi en produit de cycles à supports disjoints [4]. La reformulation informatique de notre algorithme de permutation établit un autre schéma de décomposition à l'aide de permutations circulaires [5] : *une permutation est décomposable en produit de permutations circulaires de pas variables et à supports strictement inclus les uns dans les autres*.

Illustrons cette décomposition sur un autre exemple en représentant en lignes superposées les différents décalages circulaires et en traçant en bleu les éléments du support propre à chacun d'eux :

$$ \begin{pmatrix} 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \\ 4 & 2 & 7 & 6 & 5 & 8 & 1 & 3 \end{pmatrix} = \begin{pmatrix} 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \\ 4 & 5 & 6 & 7 & 8 & 1 & 2 & 3 \\ 4 & 2 & 3 & 5 & 6 & 7 & 8 & 1 \\ 4 & 2 & 7 & 8 & 1 & 3 & 5 & 6 \\ 4 & 2 & 7 & 6 & 8 & 1 & 3 & 5 \\ 4 & 2 & 7 & 6 & 5 & 8 & 1 & 3 \\ 4 & 2 & 7 & 6 & 5 & 8 & 1 & 3 \\ 4 & 2 & 7 & 6 & 5 & 8 & 1 & 3 \end{pmatrix} $$

Les permutations circulaires successives, ici effectuées vers la gauche pour montrer la généralité du résultat, ont respectivement pour pas : 3, 5, 3, 4, 3, 0 et 0. Il suffit de 7 permutations circulaires pour permuter les 8 éléments, le dernier étant implicitement positionné par la permutation circulaire ayant fourni l'avant-dernier élément. Ce résultat est évidement valable quelque soit la taille *N* de l'ensemble à permuter.

### Spectre circulaire de la permutation

Revenons à l'exemple littéral de l'annexe A, nous voyons que la décomposition n'est pas unique si les décalages circulaires incluent des tours complets des supports. C'est ainsi que
plusieurs clés dont les lettres ont des valeurs $v_i$ congrues à $d_i$ modulo $n_i$ produisent la même séquence et donc la même permutation (annexes D1 et D2).

Et finalement la seule information réellement pertinente est la séquence des décalages $d_i$, où $(1 \le i \le N-1)$, qui vérifient $d_i = s_i \mod n_i$ et donc $0 \le d_i < n_i = N-i+1$. Elle exprime la décomposition de la permutation en un produit de N-1 permutations circulaires de pas $d_i$ sur une liste de taille décroissante $n_i$. C'est pourquoi nous considérons cette séquence $[d_1, ..., d_{N-1}]$ comme le spectre circulaire de la permutation. Il est de taille N-1 comme nous l'avons déjà énoncé. Nous notons cette séquence entre crochets pour mieux faire la différence avec la notation en deux lignes entre parenthèses de Cauchy. C'est cette séquence numérique qu'il faudrait introduire comme donnée, fondamentale et exhaustive, à l'entrée de l'algorithme. Pour l'exemple numérique précédent et en convenant de toujours décomposer en permutations circulaire à droite, elle est $[5, 2, 3, 1, 1, 0, 0]$. Comme elle résume toute l'information relative à une permutation nous exprimons cette équivalence en notant :

$$ \begin{pmatrix} 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \\ 4 & 2 & 7 & 6 & 5 & 8 & 1 & 3 \end{pmatrix} \equiv [5 \ 2 \ 3 \ 1 \ 1 \ 0 \ 0] $$

Dans la pratique le cerveau humain, de part ses fonctions cognitives du langage, est plus apte à manipuler et mémoriser une séquence de lettres. C'est pourquoi nous avons fait le choix de clés littérales.

## Signature de la permutation

Le choix possible des valeurs $0 \le d_i < n_i$ et la décroissance des $n_i = N-i+1$ avec $1 \le i \le N-1$ nous ramène naturellement au dénombrement des permutations d'un ensemble de taille N :

$$ \prod_{i=1}^{N-1} n_i = n \cdot (n-1) \cdots 2 = N! $$

La permutation circulaire de pas $p$ est la composition itérée $p$ fois de la permutation circulaire élémentaire. La signature de la permutation circulaire élémentaire d'une liste de taille $k$ est $\sigma = (-1)^{k-1}$ [5]. Nous savons que l'application faisant correspondre sa signature à une permutation est un morphisme du groupe des permutations sur le groupe [-1,+1] muni du produit usuel. La signature de la permutation circulaire de pas $p$ d'une liste de taille $k$ est donc $\sigma = (-1)^{p \cdot (k-1)}$.

En revenant aux notations de l'annexe B, la signature de la permutation de taille $N$ et dont le spectre circulaire est $[d_1, ..., d_i, ..., d_{N-1}]$ avec $0 \le d_i < n_i = N-i+1$ est donc donnée par

$$ \sigma = \prod_{i=1}^{N-1} (-1)^{d_i \cdot (n_i - 1)} = (-1)^{\sum_{i=1}^{N-1} d_i \cdot (n_i - 1)} $$
## 4. Itérations et cycles

Nous pouvons appliquer plusieurs fois de suite la permutation selon une même clé et au texte issu de la permutation précédente. Une telle itération engendre une suite de permutations du texte initial. Un texte de *n* caractères a *n!* permutations possibles mais une expérimentation menée avec plusieurs textes et clés montre que les suites de permutations ainsi engendrées sont de longueurs variables avant qu'une ré-occurrence du texte initial apparaisse. Une telle situation définit alors un cycle qui se reproduira si l'itération est poursuivie. L'annexe E rassemble les résultats de cette expérience. La colonne de gauche indique la clé utilisée et la colonne du milieu donne pour plusieurs textes la longueur du cycle correspondant. Ainsi avec la clé JAMESBOND007, le texte ABC...KLM se répète après 12 itérations tandis que le texte ABC...XYZ en demande 45 alors que le texte deux fois plus long ABC...XYZABC...XYZ nécessite seulement 35 itérations avant de réapparaitre.

Nous voyons ainsi qu'il n'y a pas de relation évidente entre la longueur du texte et celle du cycle induit même si l'intuition laissait penser que la seconde croit avec la première. Résultat que l'on observe souvent mais pas toujours. De même il n'y a pas de relation évidente entre longueur de la clé et longueur du cycle, ainsi la clé RUZKSDH engendre de bien plus longs cycles que JAMESBOND007.

Pour augmenter la variabilité des permutations et la longueur des cycles nous avons testé une variante de l'algorithme de permutation consistant à modifier légèrement la clé à chaque itération par une simple permutation circulaire à gauche de un caractère. Cela signifie par exemple que si la clé initiale est JAMESBOND007, à la 2ème itération elle est AMESBOND007J et ainsi de suite. Les résultats sont rassemblés dans la colonne de droite de l'annexe E. Nous observons en général une augmentation considérable de la longueur des cycles induits. Avec l'exemple initial ils passent respectivement de 12, 45 et 35 itérations à 156, 792 et 1863 itérations.

## 5. Références

1. Spirale, un chiffre à masque jetable, 2015.

2. Diagonales, un chiffre par transposition, 2015.

3. Carrousel, un chiffre par transposition, 2015.

4. fr.wikipedia.org/wiki/Permutation

5. fr.wikipedia.org/wiki/Permutation_circulaire
## 6. Annexes

<table><tr><td>A</td><td>Algorithme de Permutation : par sauts à gauche</td></tr><tr><td>B</td><td>Algorithme de Permutation : par décalage à droite</td></tr><tr><td>C</td><td>Implémentation programmée en Python</td></tr><tr><td>D1</td><td>Algorithme de Permutation : clé équivalente 1</td></tr><tr><td>D2</td><td>Algorithme de Permutation : clé équivalente 2</td></tr><tr><td>E</td><td>Itérations et cycles</td></tr></table>
Algorithme de Permutation : par sauts à gauche

(Ph.Allard)

<figure><img src="image_87.png" /></figure>

Chaîne à permuter :

<figure><img src="image_88.png" /></figure>

rayez la lettre dans la chaîne quand elle est permutée, pour la sauter ultérieurement

Chaîne permutée :

X P T Y R U V O Q W N Z S
Algorithme de Permutation : par décalage à droite

(Ph.Allard)

Clé de permutation
saut s vers la gauche
taille n de la chaîne à décaler
décalage d vers la droite

<table><thead><tr><th>C</th><th>T</th><th>S</th><th>Q</th><th>E</th><th>O</th><th>U</th><th>C</th><th>T</th><th>S</th><th>Q</th><th>E</th><th>O</th></tr></thead><tbody><tr><td>3</td><td>20</td><td>19</td><td>17</td><td>5</td><td>15</td><td>21</td><td>3</td><td>20</td><td>19</td><td>17</td><td>5</td><td>15</td></tr><tr><td>13</td><td>12</td><td>11</td><td>10</td><td>9</td><td>8</td><td>7</td><td>6</td><td>5</td><td>4</td><td>3</td><td>2</td><td>1</td></tr><tr><td>3</td><td>8</td><td>8</td><td>7</td><td>5</td><td>7</td><td>0</td><td>3</td><td>0</td><td>3</td><td>2</td><td>1</td><td>0</td></tr></tbody></table>

← rang dans l'alphabet

← s = k.n + d

<table><tbody><tr><td>→ d = 3</td><td>X</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr><tr><td>→ d = 8</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>Y</td><td>Z</td><td>N</td><td>O</td></tr><tr><td>→ d = 8</td><td>T</td><td>U</td><td>V</td><td>W</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>R</td><td>S</td></tr><tr><td>→ d = 7</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>R</td><td>S</td><td>U</td><td>V</td><td>W</td></tr><tr><td>→ d = 5</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>R</td><td>S</td><td>U</td><td>V</td><td>W</td></tr><tr><td>→ d = 7</td><td>R</td><td>S</td><td>U</td><td>V</td><td>W</td><td>Z</td><td>N</td><td>O</td><td>Q</td></tr><tr><td>→ d = 0</td><td>U</td><td>V</td><td>W</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>S</td></tr><tr><td>→ d = 3</td><td>V</td><td>W</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>S</td></tr><tr><td>→ d = 0</td><td>O</td><td>Q</td><td>S</td><td>W</td><td>Z</td><td>N</td></tr><tr><td>→ d = 3</td><td>Q</td><td>S</td><td>W</td><td>Z</td><td>N</td></tr><tr><td>→ d = 2</td><td>W</td><td>Z</td><td>N</td><td>S</td></tr><tr><td>→ d = 1</td><td>N</td><td>S</td><td>Z</td></tr><tr><td>→ d = 0</td><td>Z</td><td>S</td></tr><tr><td>← chaîne à permuter</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>3</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>8</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>8</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>7</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>5</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>7</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>3</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>3</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>2</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td></tr></tbody></table>

<table><tr><td>X</td><td>P</td><td>T</td><td>Y</td><td>R</td><td>U</td><td>V</td><td>O</td><td>Q</td><td>W</td><td>N</td><td>Z</td><td>S</td></tr></table>

← chaîne permutée
## Algorithm to Generate Permutations (Ph. Allard)

# demo version

# list of ranks of characters in key

extraction_list = [3,20,19,17,5,15,21]

lk = len(extraction_list) # length of extraction list and key

# Right Circular Permutation function

def RightCircPerm(L,k,p):

fixed = L[:-k] # fixed points in list L

orbit = L[-k:] # part to shift in list L

orbit = orbit[-p:] + orbit[:-p] # right shift of step p

fixed.append(orbit[0]) # extension of fixed points in list

del orbit[0] # reduction of orbit

L = fixed + orbit # permuted list

print(L) # to show advancement

return L

# right circular permutation of orbits equivalent to extraction of characters from the right according to key

text_list = ['N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

N = len(text_list)

print(text_list)

for i in range(1,N):

ji=extraction_list[0] # jump to position of element to extract from top right of list

ni = N -i +1 # length of list to shift

si = ji % ni # right shift step

print('permutation step = ',i,' orbit length = ',ni,' circular shift = ',si)

text_list = RightCircPerm(text_list,ni,si)

extraction_list.append(extraction_list[0]) # circular running along the key

del extraction_list[0]

#--------------------------------------------
PythonWin 3.4.1 (default, Aug 7 2014, 13:13:27) [MSC v.1600 32 bit (Intel)] on win32.

Portions Copyright 1994-2008 Mark Hammond - see 'Help/About PythonWin' for further copyright information.

>>> ['N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
permutation step = 1 orbit length = 13 circular shift = 3
['X', 'Y', 'Z', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W']
permutation step = 2 orbit length = 12 circular shift = 8
['X', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'Y', 'Z', 'N', 'O']
permutation step = 3 orbit length = 11 circular shift = 8
['X', 'P', 'T', 'U', 'V', 'W', 'Y', 'Z', 'N', 'O', 'Q', 'R', 'S']
permutation step = 4 orbit length = 10 circular shift = 7
['X', 'P', 'T', 'Y', 'Z', 'N', 'O', 'Q', 'R', 'S', 'U', 'V', 'W']
permutation step = 5 orbit length = 9 circular shift = 5
['X', 'P', 'T', 'Y', 'R', 'S', 'U', 'V', 'W', 'Z', 'N', 'O', 'Q']
permutation step = 6 orbit length = 8 circular shift = 7
['X', 'P', 'T', 'Y', 'R', 'U', 'V', 'W', 'Z', 'N', 'O', 'Q', 'S']
permutation step = 7 orbit length = 7 circular shift = 0
['X', 'P', 'T', 'Y', 'R', 'U', 'V', 'W', 'Z', 'N', 'O', 'Q', 'S']
permutation step = 8 orbit length = 6 circular shift = 3
['X', 'P', 'T', 'Y', 'R', 'U', 'V', 'O', 'Q', 'S', 'W', 'Z', 'N']
permutation step = 9 orbit length = 5 circular shift = 0
['X', 'P', 'T', 'Y', 'R', 'U', 'V', 'O', 'Q', 'S', 'W', 'Z', 'N']
permutation step = 10 orbit length = 4 circular shift = 3
['X', 'P', 'T', 'Y', 'R', 'U', 'V', 'O', 'Q', 'W', 'Z', 'N', 'S']
permutation step = 11 orbit length = 3 circular shift = 2
['X', 'P', 'T', 'Y', 'R', 'U', 'V', 'O', 'Q', 'W', 'N', 'S', 'Z']
permutation step = 12 orbit length = 2 circular shift = 1
['X', 'P', 'T', 'Y', 'R', 'U', 'V', 'O', 'Q', 'W', 'N', 'Z', 'S']
>>>
Algorithme de Permutation : clé équivalente

(Ph.Allard)

Clé de permutation
saut s vers la gauche
taille n de la chaîne à décaler
décalage d vers la droite

<table><thead><tr><th>C</th><th>T</th><th>S</th><th>Q</th><th>E</th><th>O</th><th>U</th><th>I</th><th>J</th><th>O</th><th>T</th><th>G</th><th>A</th></tr></thead><tbody><tr><td>3</td><td>20</td><td>19</td><td>17</td><td>5</td><td>15</td><td>21</td><td>9</td><td>10</td><td>15</td><td>20</td><td>7</td><td>1</td></tr><tr><td>13</td><td>12</td><td>11</td><td>10</td><td>9</td><td>8</td><td>7</td><td>6</td><td>5</td><td>4</td><td>3</td><td>2</td><td>1</td></tr><tr><td>3</td><td>8</td><td>8</td><td>7</td><td>5</td><td>7</td><td>0</td><td>3</td><td>0</td><td>3</td><td>2</td><td>1</td><td>0</td></tr></tbody></table>

← rang dans l'alphabet

← s = k.n + d

<table><tbody><tr><td>→ d = 3</td><td>X</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr><tr><td>→ d = 8</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td>S</td></tr><tr><td>→ d = 7</td><td>T</td><td>U</td><td>V</td><td>W</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>R</td><td>S</td></tr><tr><td>→ d = 5</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>R</td><td>S</td><td>U</td><td>V</td><td>W</td></tr><tr><td>→ d = 7</td><td>R</td><td>S</td><td>U</td><td>V</td><td>W</td><td>Z</td><td>N</td><td>O</td><td>Q</td></tr><tr><td>→ d = 0</td><td>U</td><td>V</td><td>W</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>S</td></tr><tr><td>→ d = 3</td><td>V</td><td>W</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>S</td></tr><tr><td>→ d = 0</td><td>O</td><td>Q</td><td>S</td><td>W</td><td>Z</td><td>N</td></tr><tr><td>→ d = 3</td><td>Q</td><td>S</td><td>W</td><td>Z</td><td>N</td></tr><tr><td>→ d = 2</td><td>W</td><td>Z</td><td>N</td><td>S</td></tr><tr><td>→ d = 1</td><td>N</td><td>S</td><td>Z</td></tr><tr><td>→ d = 0</td><td>Z</td><td>S</td></tr><tr><td>← chaîne à permuter</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>3</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>8</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>8</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>7</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>5</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>7</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>3</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>3</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>2</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td></tr><tr><td>← après décalage à droite de d =</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td></tr></tbody></table>

Permutation : ↓

<table><thead><tr><th>N</th><th>O</th><th>P</th><th>Q</th><th>R</th><th>S</th><th>T</th><th>U</th><th>V</th><th>W</th><th>X</th><th>Y</th><th>Z</th></tr></thead><tbody><tr><td>X</td><td>P</td><td>T</td><td>Y</td><td>R</td><td>U</td><td>V</td><td>O</td><td>Q</td><td>W</td><td>N</td><td>Z</td><td>S</td></tr><tr><td>3</td><td>8</td><td>8</td><td>7</td><td>5</td><td>7</td><td>0</td><td>3</td><td>0</td><td>3</td><td>2</td><td>1</td></tr></tbody></table>

spectre circulaire :
Algorithme de Permutation : clé équivalente

(Ph.Allard)

<table><thead><tr><th>Clé de permutation</th><th>C</th><th>T</th><th>S</th><th>Q</th><th>E</th><th>O</th><th>U</th><th>U</th><th>Y</th><th>K</th><th>N</th><th>I</th><th>B</th></tr></thead><tbody><tr><td>saut s vers la gauche</td><td>3</td><td>20</td><td>19</td><td>17</td><td>5</td><td>15</td><td>21</td><td>21</td><td>25</td><td>11</td><td>14</td><td>9</td><td>2</td></tr><tr><td>taille n de la chaîne à décaler</td><td>13</td><td>12</td><td>11</td><td>10</td><td>9</td><td>8</td><td>7</td><td>6</td><td>5</td><td>4</td><td>3</td><td>2</td><td>1</td></tr><tr><td>décalage d vers la droite</td><td>3</td><td>8</td><td>8</td><td>7</td><td>5</td><td>7</td><td>0</td><td>3</td><td>0</td><td>3</td><td>2</td><td>1</td><td>0</td></tr></tbody></table>

← rang dans l'alphabet

← s = k.n + d

<table><tbody><tr><td>→ d = 3</td><td>X</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr><tr><td>→ d = 8</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td></td><td></td><td></td><td></td></tr><tr><td>→ d = 8</td><td>T</td><td>U</td><td>V</td><td>W</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>R</td><td>S</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>→ d = 7</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>R</td><td>S</td><td>U</td><td>V</td><td>W</td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>→ d = 5</td><td>Y</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>R</td><td>S</td><td>U</td><td>V</td><td>W</td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>→ d = 7</td><td>R</td><td>S</td><td>U</td><td>V</td><td>W</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>→ d = 0</td><td>U</td><td>V</td><td>W</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>S</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>→ d = 3</td><td>V</td><td>W</td><td>Z</td><td>N</td><td>O</td><td>Q</td><td>S</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>→ d = 0</td><td>O</td><td>Q</td><td>S</td><td>W</td><td>Z</td><td>N</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>→ d = 3</td><td>Q</td><td>S</td><td>W</td><td>Z</td><td>N</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>→ d = 2</td><td>W</td><td>Z</td><td>N</td><td>S</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>→ d = 1</td><td>N</td><td>S</td><td>Z</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>→ d = 0</td><td>Z</td><td>S</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td>S</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>

Permutation : ↓

<table><tbody><tr><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr><tr><td>X</td><td>P</td><td>T</td><td>Y</td><td>R</td><td>U</td><td>V</td><td>O</td><td>Q</td><td>W</td><td>N</td><td>Z</td><td>S</td></tr><tr><td>3</td><td>8</td><td>8</td><td>7</td><td>5</td><td>7</td><td>0</td><td>3</td><td>0</td><td>3</td><td>2</td><td>1</td></tr></tbody></table>

spectre circulaire :
<table><thead><tr><th rowspan="2">Clé de permutation</th><th colspan="5">Itération à clé constante</th><th colspan="5">Itération à clé variable</th></tr><tr><th>Suite de<br>caractères</th><th>Longueur<br>du cycle</th><th>Suite de<br>caractères</th><th>Longueur<br>du cycle</th><th>Suite de<br>caractères</th><th>Longueur<br>du cycle</th><th>Suite de<br>caractères</th><th>Longueur<br>du cycle</th><th>Suite de<br>caractères</th><th>Longueur<br>du cycle</th></tr></thead><tbody><tr><td>JAME</td><td>A...M</td><td>15</td><td>A...Z</td><td>84</td><td></td><td></td><td>A...M</td><td>44</td><td>A...Z</td><td>336</td></tr><tr><td>JAMES</td><td>A...M</td><td>8</td><td>A...Z</td><td>112</td><td>2xA...Z</td><td>51</td><td>A...M</td><td>65</td><td>A...Z</td><td>112</td><td>2xA...Z</td><td>1800</td></tr><tr><td>JAMESB</td><td>A...M</td><td>8</td><td>A...Z</td><td>25</td><td></td><td></td><td>A...M</td><td>78</td><td>A...Z</td><td>798</td><td></td><td></td></tr><tr><td>JAMESBO</td><td>A...M</td><td>11</td><td>A...Z</td><td>78</td><td></td><td></td><td>A...M</td><td>70</td><td>A...Z</td><td>588</td><td></td><td></td></tr><tr><td>JAMESBON</td><td>A...M</td><td>20</td><td>A...Z</td><td>48</td><td></td><td></td><td>A...M</td><td>104</td><td>A...Z</td><td>208</td><td></td><td></td></tr><tr><td>JAMESBOND</td><td>A...M</td><td>18</td><td>A...Z</td><td>495</td><td>2xA...Z</td><td>90</td><td>A...M</td><td>117</td><td>A...Z</td><td>756</td><td>2xA...Z</td><td>459</td></tr><tr><td>JAMESBONDO</td><td>A...M</td><td>10</td><td>A...Z</td><td>255</td><td></td><td></td><td>A...M</td><td>80</td><td>A...Z</td><td>132</td><td></td><td></td></tr><tr><td>JAMESBOND00</td><td>A...M</td><td>12</td><td>A...Z</td><td>16</td><td></td><td></td><td>A...M</td><td>330</td><td>A...Z</td><td>1716</td><td></td><td></td></tr><tr><td>JAMESBOND007</td><td>A...M</td><td>12</td><td>A...Z</td><td>45</td><td>2xA...Z</td><td>34</td><td>A...M</td><td>156</td><td>A...Z</td><td>792</td><td>2xA...Z</td><td>1863</td></tr><tr><td>JAMESBOND006</td><td>A...M</td><td>9</td><td>A...Z</td><td>36</td><td></td><td></td><td>A...M</td><td>360</td><td>A...Z</td><td>912</td><td></td><td></td></tr><tr><td>JAMESBOND008</td><td>A...M</td><td>9</td><td>A...Z</td><td>117</td><td></td><td></td><td>A...M</td><td>96</td><td>A...Z</td><td>1260</td><td></td><td></td></tr><tr><td>JAMESBOND005</td><td>A...M</td><td>12</td><td>A...Z</td><td>280</td><td></td><td></td><td>A...M</td><td>156</td><td>A...Z</td><td>312</td><td></td><td></td></tr><tr><td>JAMESBOND009</td><td>A...M</td><td>12</td><td>A...Z</td><td>117</td><td></td><td></td><td>A...M</td><td>336</td><td>A...Z</td><td>7560</td><td></td><td></td></tr><tr><td>QECMKZH</td><td>A...M</td><td>22</td><td>A...Z</td><td>18</td><td>2xA...Z</td><td>1512</td><td>A...M</td><td>98</td><td>A...Z</td><td>5390</td><td>2xA...Z</td><td>8736</td></tr><tr><td>RUZKSDH</td><td>A...M</td><td>12</td><td>A...Z</td><td>60</td><td>2xA...Z</td><td>570</td><td>A...M</td><td>105</td><td>A...Z</td><td>112</td><td>2xA...Z</td><td>2107</td></tr><tr><td>TXZBJYG</td><td>A...M</td><td>42</td><td>A...Z</td><td>120</td><td>2xA...Z</td><td>>10 000</td><td>A...M</td><td>84</td><td>A...Z</td><td>560</td><td>2xA...Z</td><td>350</td></tr><tr><td>AFODEVGHPJKIMNQLCSXTWBZRYU</td><td>A...M</td><td>30</td><td>A...Z</td><td>60</td><td></td><td></td><td>A...M</td><td>48</td><td>A...Z</td><td>60</td><td></td><td></td></tr><tr><td>AFODEVGHPJKIMNQLCSXTWBZRY</td><td>A...M</td><td>30</td><td>A...Z</td><td>60</td><td></td><td></td><td>A...M</td><td>375</td><td>A...Z</td><td>750</td><td></td><td></td></tr><tr><td>AFODEVGHPJKIMNQLCSXTWBZR</td><td>A...M</td><td>30</td><td>A...Z</td><td>60</td><td></td><td></td><td>A...M</td><td>480</td><td>A...Z</td><td>10080</td><td></td><td></td></tr><tr><td>AFODEVGHPJKIMNQLCSXTWBZ</td><td>A...M</td><td>30</td><td>A...Z</td><td>46</td><td></td><td></td><td>A...M</td><td>345</td><td>A...Z</td><td>1518</td><td></td><td></td></tr><tr><td>AFODEVGHPJKIMNQLCSXTWB</td><td>A...M</td><td>30</td><td>A...Z</td><td>46</td><td></td><td></td><td>A...M</td><td>132</td><td>A...Z</td><td>2310</td><td></td><td></td></tr><tr><td>AFODEVGHPJKIMNQLCSXTW</td><td>A...M</td><td>30</td><td>A...Z</td><td>36</td><td></td><td></td><td>A...M</td><td>252</td><td>A...Z</td><td>2310</td><td></td><td></td></tr><tr><td>AFODEVGHPJKIMNQLCSXT</td><td>A...M</td><td>30</td><td>A...Z</td><td>80</td><td></td><td></td><td>A...M</td><td>200</td><td>A...Z</td><td>2400</td><td></td><td></td></tr><tr><td>AFODEVGHPJKIMNQLCSX</td><td>A...M</td><td>30</td><td>A...Z</td><td>126</td><td>2xA...Z</td><td>266</td><td>A...M</td><td>190</td><td>A...Z</td><td>475</td><td>2xA...Z</td><td>>10 000</td></tr><tr><td>AFODEVGHPJKIMNQLCS</td><td>A...M</td><td>30</td><td>A...Z</td><td>126</td><td></td><td></td><td>A...M</td><td>234</td><td>A...Z</td><td>1170</td><td></td><td></td></tr><tr><td>AFODEVGHPJKIMNQLC</td><td>A...M</td><td>30</td><td>A...Z</td><td>30</td><td></td><td></td><td>A...M</td><td>187</td><td>A...Z</td><td>1122</td><td></td><td></td></tr><tr><td>AFODEVGHPJKIMNQL</td><td>A...M</td><td></td><td>A...Z</td><td>90</td><td></td><td></td><td>A...M</td><td>144</td><td>A...Z</td><td>528</td><td></td><td></td></tr><tr><td>AFODEVGHPJKIMNQ</td><td>A...M</td><td></td><td>A...Z</td><td>20</td><td></td><td></td><td>A...M</td><td>180</td><td>A...Z</td><td>360</td><td></td><td></td></tr><tr><td>AFODEVGHPJKIMN</td><td>A...M</td><td></td><td>A...Z</td><td>20</td><td></td><td></td><td>A...M</td><td>490</td><td>A...Z</td><td>175</td><td></td><td></td></tr><tr><td>AFODEVGHPJKIM</td><td>A...M</td><td></td><td>A...Z</td><td>30</td><td></td><td></td><td>A...M</td><td>30</td><td>A...Z</td><td>30</td><td></td><td></td></tr></tbody></table>
<table><tr><td>AFODEVGHPJKI</td><td>A...M</td><td>30</td><td>A...Z</td><td>210</td><td></td><td>A...M</td><td>144</td><td>A...Z</td><td>132</td><td></td><td></td><td></td></tr><tr><td>AFODEVGHPJK</td><td>A...M</td><td>30</td><td>A...Z</td><td>24</td><td></td><td>A...M</td><td>99</td><td>A...Z</td><td>990</td><td></td><td></td><td></td></tr><tr><td>AFODEVGHPJ</td><td>A...M</td><td>11</td><td>A...Z</td><td>26</td><td></td><td>A...M</td><td>110</td><td>A...Z</td><td>1800</td><td></td><td></td><td></td></tr><tr><td>AFODEVGHP</td><td>A...M</td><td>15</td><td>A...Z</td><td>204</td><td></td><td>A...M</td><td>108</td><td>A...Z</td><td>216</td><td></td><td></td><td></td></tr><tr><td>AFODEVGH</td><td>A...M</td><td>11</td><td>A...Z</td><td>60</td><td></td><td>A...M</td><td>104</td><td>A...Z</td><td>240</td><td></td><td></td><td></td></tr><tr><td>AFODEVG</td><td>A...M</td><td>30</td><td>A...Z</td><td>60</td><td>2xA...Z</td><td>A...M</td><td>77</td><td>A...Z</td><td>504</td><td>2xA...Z</td><td>784</td><td></td></tr><tr><td>IBCXEFG</td><td>A...M</td><td>12</td><td>A...Z</td><td>153</td><td>2xA...Z</td><td>A...M</td><td>196</td><td>A...Z</td><td>735</td><td>2xA...Z</td><td>&gt;10 000</td><td></td></tr><tr><td>LPAGYDV</td><td>A...M</td><td>12</td><td>A...Z</td><td>18</td><td>2xA...Z</td><td>A...M</td><td>70</td><td>A...Z</td><td>504</td><td>2xA...Z</td><td>1260</td><td></td></tr><tr><td>ABCWJSG</td><td>A...M</td><td>12</td><td>A...Z</td><td>60</td><td></td><td>A...M</td><td>63</td><td>A...Z</td><td>784</td><td></td><td></td><td></td></tr><tr><td>RZUDXFG</td><td>A...M</td><td>12</td><td>A...Z</td><td>18</td><td></td><td>A...M</td><td>70</td><td>A...Z</td><td>735</td><td></td><td></td><td></td></tr><tr><td>XKAGECR</td><td>A...M</td><td>42</td><td>A...Z</td><td>120</td><td></td><td>A...M</td><td>140</td><td>A...Z</td><td>182</td><td></td><td></td><td></td></tr><tr><td>ARCDEFG</td><td>A...M</td><td>22</td><td>A...Z</td><td>16</td><td></td><td>A...M</td><td>77</td><td>A...Z</td><td>175</td><td></td><td></td><td></td></tr><tr><td>ROMKRDN</td><td>A...M</td><td>8</td><td>A...Z</td><td>36</td><td></td><td>A...M</td><td>245</td><td>A...Z</td><td>504</td><td></td><td></td><td></td></tr><tr><td>SJVGNPB</td><td>A...M</td><td>9</td><td>A...Z</td><td>72</td><td></td><td>A...M</td><td>77</td><td>A...Z</td><td>154</td><td></td><td></td><td></td></tr><tr><td>BEMONAQ</td><td>A...M</td><td>13</td><td>A...Z</td><td>238</td><td></td><td>A...M</td><td>77</td><td>A...Z</td><td>952</td><td></td><td></td><td></td></tr><tr><td>XTGCJBG</td><td>A...M</td><td>15</td><td>A...Z</td><td>102</td><td></td><td>A...M</td><td>70</td><td>A...Z</td><td>126</td><td></td><td></td><td></td></tr><tr><td>BXSGSNH</td><td>A...M</td><td>30</td><td>A...Z</td><td>120</td><td></td><td>A...M</td><td>56</td><td>A...Z</td><td>2184</td><td></td><td></td><td></td></tr><tr><td>SNBOMEM</td><td>A...M</td><td>30</td><td>A...Z</td><td>340</td><td></td><td>A...M</td><td>98</td><td>A...Z</td><td>798</td><td></td><td></td><td></td></tr><tr><td>FDKIDOI</td><td>A...M</td><td>12</td><td>A...Z</td><td>22</td><td></td><td>A...M</td><td>126</td><td>A...Z</td><td>420</td><td></td><td></td><td></td></tr><tr><td>DCUVILF</td><td>A...M</td><td>20</td><td>A...Z</td><td>85</td><td>2xA...Z</td><td>A...M</td><td>42</td><td>A...Z</td><td>1190</td><td>2xA...Z</td><td>1470</td><td></td></tr><tr><td>FAFWUUG</td><td>A...M</td><td>6</td><td>A...Z</td><td>26</td><td>2xA...Z</td><td>A...M</td><td></td><td>A...Z</td><td>84</td><td>2xA...Z</td><td>&gt;10 000</td><td></td></tr><tr><td>ZFURAAA</td><td>A...M</td><td>12</td><td>A...Z</td><td>36</td><td>2xA...Z</td><td>A...M</td><td></td><td>A...Z</td><td>483</td><td>2xA...Z</td><td>2870</td><td></td></tr><tr><td>SNJTTJR</td><td>A...M</td><td>28</td><td>A...Z</td><td>25</td><td>2xA...Z</td><td>A...M</td><td></td><td>A...Z</td><td>140</td><td>2xA...Z</td><td>7644</td><td></td></tr><tr><td>NYFGIJJ</td><td>A...M</td><td>13</td><td>A...Z</td><td>210</td><td></td><td>A...M</td><td></td><td>A...Z</td><td>5880</td><td></td><td></td><td></td></tr><tr><td>YYGTMJS</td><td>A...M</td><td>30</td><td>A...Z</td><td>69</td><td></td><td>A...M</td><td></td><td>A...Z</td><td>532</td><td></td><td></td><td></td></tr><tr><td>KPNMIKR</td><td>A...M</td><td>24</td><td>A...Z</td><td>228</td><td>2xA...Z</td><td>A...M</td><td></td><td>A...Z</td><td>728</td><td>2xA...Z</td><td>3150</td><td></td></tr><tr><td>RAODPKO</td><td>A...M</td><td>22</td><td>A...Z</td><td>198</td><td></td><td>A...M</td><td></td><td>A...Z</td><td>175</td><td></td><td></td><td></td></tr><tr><td>OOXLEOO</td><td>A...M</td><td>9</td><td>A...Z</td><td>14</td><td>2xA...Z</td><td>A...M</td><td></td><td>A...Z</td><td>168</td><td>2xA...Z</td><td>3024</td><td></td></tr><tr><td>IBRNBCCCAN</td><td>A...M</td><td>20</td><td>A...Z</td><td>26</td><td></td><td>A...M</td><td></td><td>A...Z</td><td>420</td><td></td><td></td><td></td></tr><tr><td>IBRNBCCCANJLFEJ</td><td>A...M</td><td>14</td><td>A...Z</td><td>30</td><td></td><td>A...M</td><td></td><td>A...Z</td><td>180</td><td></td><td></td><td></td></tr><tr><td>IBRNBCCCANJLFEJCICFCFBBA</td><td>A...M</td><td>14</td><td>A...Z</td><td>340</td><td>2xA...Z</td><td>A...M</td><td></td><td>A...Z</td><td>3150</td><td>2xA...Z</td><td>5250</td><td></td></tr><tr><td>LQLBCHGCDFJFIBGKCEBEEBAA</td><td>A...M</td><td>4</td><td>A...Z</td><td>40</td><td></td><td>A...M</td><td></td><td>A...Z</td><td>1500</td><td></td><td></td><td></td></tr><tr><td>QXXBEGAORNIEBAHACHDEABCBA</td><td>A...M</td><td>40</td><td>A...Z</td><td>42</td><td></td><td>A...M</td><td></td><td>A...Z</td><td>3575</td><td></td><td></td><td></td></tr></table>
<table><tr><td>LOKARLBGLMNLNGAFAHFAEDDBA</td><td>A...M</td><td>18</td><td>A...Z</td><td>20</td><td></td><td>A...M</td><td>A...Z</td><td>1200</td><td></td></tr><tr><td>QVKOIRNEONCLNJKCIBFCDBACA</td><td>A...M</td><td>13</td><td>A...Z</td><td>240</td><td>2xA...Z</td><td>930</td><td>A...M</td><td>A...Z</td><td>1725</td><td>2xA...Z</td></tr><tr><td>HRUKQREGNOJGDEK CJHEECACAA</td><td>A...M</td><td></td><td>A...Z</td><td>69</td><td></td><td>A...M</td><td>A...Z</td><td>2550</td><td></td></tr><tr><td>FKRLQTMEDDODHLIKFGCGFCBAA</td><td>A...M</td><td></td><td>A...Z</td><td>119</td><td></td><td>A...M</td><td>A...Z</td><td>500</td><td></td></tr><tr><td>HHPKHUHSHOAFMCDBHAADCBDAB</td><td>A...M</td><td></td><td>A...Z</td><td>156</td><td></td><td>A...M</td><td>A...Z</td><td>500</td><td></td></tr><tr><td>QFMLRRJSQOCFDEHEAGCGBDCAA</td><td>A...M</td><td></td><td>A...Z</td><td>462</td><td></td><td>A...M</td><td>A...Z</td><td>9750</td><td></td></tr><tr><td>EKCEODBGFDAJJICGFEGFCABA</td><td>A...M</td><td></td><td>A...Z</td><td>126</td><td></td><td>A...M</td><td>A...Z</td><td>11550</td><td></td></tr><tr><td>BEJKVSDMAJILNGIGDHBGCBABA</td><td>A...M</td><td></td><td>A...Z</td><td>44</td><td></td><td>A...M</td><td>A...Z</td><td>650</td><td></td></tr><tr><td>KSJPFKRKL BHLMIKKHIFGEDACA</td><td>A...M</td><td></td><td>A...Z</td><td>60</td><td></td><td>A...M</td><td>A...Z</td><td>11375</td><td></td></tr><tr><td>GFVPNPOSLBMCCEKJIDCCEDBBB</td><td>A...M</td><td></td><td>A...Z</td><td>78</td><td></td><td>A...M</td><td>A...Z</td><td>2375</td><td></td></tr><tr><td>LLHCBGAGLCIELJ KDEHAEFABAA</td><td>A...M</td><td></td><td>A...Z</td><td>60</td><td></td><td>A...M</td><td>A...Z</td><td>450</td><td></td></tr><tr><td>WICGGUJGJLDOIGEJJHFEFBDAA</td><td>A...M</td><td></td><td>A...Z</td><td>44</td><td></td><td>A...M</td><td>A...Z</td><td>1800</td><td></td></tr><tr><td>PBQIRPNJGMBHHMFC AFHEFBABB</td><td>A...M</td><td></td><td>A...Z</td><td>153</td><td></td><td>A...M</td><td>A...Z</td><td>3850</td><td></td></tr><tr><td>PVXHUQLMDBLNFBIGDI HAAEDCA</td><td>A...M</td><td></td><td>A...Z</td><td>25</td><td></td><td>A...M</td><td>A...Z</td><td>600</td><td></td></tr><tr><td>EEAEJUCMOHCDKBII EGEECBACB</td><td>A...M</td><td></td><td>A...Z</td><td>26</td><td></td><td>A...M</td><td>A...Z</td><td>2100</td><td></td></tr><tr><td>VNODDLQNIHHIBADG HGBGEBDAB</td><td>A...M</td><td></td><td>A...Z</td><td>84</td><td></td><td>A...M</td><td>A...Z</td><td>600</td><td></td></tr><tr><td>EDWPQTHFPIEADMEAF ADBFCCBB</td><td>A...M</td><td></td><td>A...Z</td><td>90</td><td></td><td>A...M</td><td>A...Z</td><td>1725</td><td></td></tr></table>
<figure><img src="image_89.png" /></figure>

## *Un problème méta-cryptologique*

### Plan

<table><tr><td>1. Introduction</td><td>1</td></tr><tr><td>2. Distribution d'un livre de clés</td><td>1</td></tr><tr><td>3. Création à partir d'un livre</td><td>2</td></tr><tr><td>4. Création à partir d'un journal</td><td>5</td></tr><tr><td>5. Création avec un programme</td><td>6</td></tr><tr><td>6. Références</td><td>7</td></tr><tr><td>7. Annexes</td><td>7</td></tr></table>

## 1. Introduction

Quelque soit le crypto-système symétrique auquel on est confronté, classique et manuel ou moderne et numérique, à un moment il faut introduire une donnée alphanumérique, la ou les clés, qui personnalise le système pour un utilisateur particulier. La distribution des clés parmi plusieurs utilisateurs est un problème fondamental que nous nous proposons d'aborder ici. Le schéma d'organisation des correspondants que nous envisageons est hiérarchisé : entre une Autorité et ses Agents. Selon le contexte il pourra s'agir du Ministère des Affaires Étrangères et d'ambassades, d'une ambassade et d'agents locaux, d'un État-major et de commandants d'unités ou encore d'un Officier Traitant et d'agents secrets infiltrés. Comme on le voit le nombre d'agents à fournir peut varier de moins d'une dizaine à plusieurs centaines. La durée de validité de ces clés peut être très variable aussi, de quelques semaines pour une mission à des années pour une guerre qui s'éternise. Nous prendrons ainsi en compte la possibilité d'approvisionner des agents pour plusieurs années d'activité. Fondamentalement, l'alternative est entre distribution aux utilisateurs de clés toutes prêtes ou création par les utilisateurs eux-mêmes de clés au coup par coup.

## 2. Distribution d'un livre de clés

C'est la solution traditionnellement adoptée par un service diplomatique ou une armée. Elle est simple pour les utilisateurs mais dangereuse en terme de sécurité car ces documents doivent être acheminés puis conservés en lieux fixes ou mobiles. Et pendant chacune de ces phases ils courent le risque d'être perdus, photocopiés, volés ou capturés.
La parade à ces aléas inhérents à la distribution est la création directe par les utilisateurs des clés dont ils ont besoin. Nous proposons dans cet article plusieurs solutions pour y parvenir. Le principe général est de puiser dans une source une chaîne de caractères qui sera utilisée, directement ou après transformation, comme clé.

### 3. Création à partir d'un livre

C'est cette solution que nous allons développer en détails ici. Elle est particulièrement adaptée à un réseau clandestin disposant de peu de ressources matérielles et devant produire un grand nombre de clés, soit par la durée de son activité soit par le type de crypto-système employé. Par exemple le chiffre Spirale [1] demande 4 clés de 7 caractères pour chaque message envoyé. Cette solution passe par plusieurs étapes :

* Choix du livre ;

* Choix de la page ;

* Choix de la ligne ;

* Extraction de caractères et construction de la clé ;

* Correction statistique.

#### 1. Choix du livre

Pour ne pas attirer l'attention il doit avant tout être neutre dans le contexte où se trouve l'agent, un roman à la mode par exemple, ou mieux encore être en adéquation avec le milieu infiltré : un manuel financier à Wall Street, le Capital à Moscou, le petit livre rouge à Pékin, la bible dans le Middle West, le coran à La Mecque, etc<fnref n="1" />.

Il le faut suffisamment épais pour offrir plusieurs centaines de pages exploitables, de l'ordre du nombre de jours dans l'année. De nombreuses pages sont perdues soit parce que non numérotées (préface, table des matières,...) soit parce que leur structure est inadaptée à notre usage (index, glossaire, texte très court,...). Au final la partie utile commencera à la page $p_i$ et finira à la page $p_f$, soit un nombre $n_p = p_f-p_i+1$ de pages disponibles.

#### 2. Choix de la page

L'idée fondamentale est :

* utiliser une page par jour ;

* cheminer entre elles de façon aléatoire selon le jour ;

* sans risque de répétition dans l'année ou d'une année sur l'autre.

<footnote n="1">¹ Les lieux communs ont parfois du bon...</footnote>
Notre problème fondamental est donc de bâtir un algorithme simple et efficace, satisfaisant aux conditions ci-dessus, faisant passer du jour à un nombre entier compris entre $p_i$ et $p_f$.

Nous proposons la solution suivante :

Partant du format classique d'écriture des dates jj/mm/aaaa, nous pouvons facilement en tirer un nombre J en considérant les quatre premiers digits comme des chiffres décimaux :

$$J = jj \times 100 + mm \qquad (1)$$

puis appliquer la formule :

$$P = p_i + J \bmod n_p \qquad (2)$$

pour désigner une page P. Par exemple, avec un livre exploitable des pages 11 à 153, nous utilisons les pages :

<table><tr><td>- 18 Mai 2015</td><td>J = 1805</td><td>P = 100 = 11 + 1805 \bmod 143</td></tr><tr><td>- 28 Février 2016</td><td>J = 2802</td><td>P = 96</td></tr><tr><td>- 15 Octobre 2017</td><td>J = 1510</td><td>P = 91</td></tr></table>

Au bout d'un an d'utilisation nous retomberons sur les mêmes pages, pour éviter cela nous devons faire intervenir l'année. Mais toujours d'une manière simple pour l'utilisateur. L'opération modulo disperse bien ses résultats si l'argument varie beaucoup, en général par un produit ou mieux une exponentiation. Cette dernière solution doit être écartée car elle dépasse rapidement les capacités d'une calculatrice de poche et est impossible à calculer manuellement, il nous reste le produit par un facteur pas trop grand pour être effectué à main. En d'autres termes, trouver un hachage sur la valeur de l'année. Nous proposons une solution simple : la somme de ses chiffres. D'où les nouveaux résultats :

<table><tr><td>- 18 Mai 2015</td><td>J = 1805x8</td><td>P = 151</td></tr><tr><td>- 28 Février 2016</td><td>J = 2802x9</td><td>P = 61</td></tr><tr><td>- 15 Octobre 2017</td><td>J = 1510x10</td><td>P = 96</td></tr></table>

Et pour voir l'effet sur les jours suivants :

<table><tr><td>- 19 Mai 2015</td><td>J = 1905x8</td><td>P = 93</td></tr><tr><td>- 29 Février 2016</td><td>J = 2902x9</td><td>P = 103</td></tr><tr><td>- 16 Octobre 2017</td><td>J = 1610x10</td><td>P = 95</td></tr></table>

Nous constatons ainsi les variations $151 \rightarrow 93, 61 \rightarrow 103, 96 \rightarrow 95$.

En conclusion, la formule (2) avec J défini par la formule :

$$J = (jj \times 100 + mm) \times \sum a \qquad (3)$$

donne bien un déplacement plutôt erratique dans les pages du livre et la non-répétitivité systématique d'une année à l'autre.
Si plusieurs correspondants utilisent le même livre et rédigent un message le même jour, ce
serait alors avec la même page et peut être la même clé ce qui n'est pas acceptable. Il
convient donc de les différentier. Pour cela il suffit que chacun apporte son *grain de sel* S, un
entier, et travaille avec la valeur J+S. Pour être arithmétiquement fonctionnelles et distinguer
deux correspondants, les valeurs S₁ et S₂ de leur sel doivent vérifier simultanément

$$
S_1 \neq S_2 \neq 0 \quad \mod n_P \tag{4}
$$

Dans la pratique cela revient à attribuer à chacun le numéro, différent, d'une des pages
exploitables.

3. Choix de la ligne

Le nombre n<sub>L</sub> de lignes d'une page varie naturellement selon le format du livre et le type
d'édition, mais il est en général d'environ la trentaine. Nous pouvons reprendre le principe de
la formule (2) et choisir la ligne L selon la formule :

$$
L = 1 + J \bmod n_L \tag{5}
$$

Poursuivons notre exemple avec des pages de $n_L = 32$ lignes :

- 8 Mai 2015
  J = 1805x8
  P = 151
  L = 9
- 28 Février 2016
  J = 2802x9
  P = 61
  L = 3
- 15 Octobre 2017
  J = 1510x10
  P = 96
  L = 29

S'il faut encore distinguer des agents utilisant la même source, leurs sels doivent vérifier des
conditions supplémentaires garantissant des lignes différentes :

$$
S_1 \neq S_2 \neq 0 \quad \mod n_L \tag{6}
$$

4. Extraction de caractères et construction de la clé

Il s'agit maintenant d'extraire, dans la ligne sélectionnée, des caractères pour façonner une
clé qui soit difficile à découvrir. Cela impose en particulier de ne pas prendre de mots entiers
qui seraient des proies pour une attaque par dictionnaire. Les solutions sont nombreuses et le
résultat d'un compromis entre imagination et simplicité de mise en œuvre. Nous pourrions
par exemple commencer au 7ème caractère et en extraire un ensuite tous les 2 ou 3 caractères.

Dans la notice initiale du chiffre Spirale qui nécessite 4 clés de 7 lettres, nous suggérions la
procédure suivante : extraire les 7 premières lettres et les 7 dernières, indépendamment des
mots ou de la ponctuation, faire de même avec une autre ligne décalée de 5 plus bas par
exemple (mais d'autres règles de choix conviendraient aussi) ; écrire ensuite, un extrait par
ligne, dans un tableau 7x4 puis le lire verticalement depuis le coin supérieur droit. Cela
revient à inverser ces chaînes de caractères et à les entrelacer. Et finalement découper cette
longue chaîne en 4 segments de 7 lettres.
Exemple: - texte de la page

> "We got into Milan ... unloaded us in
> ..........
> said this had ... around his neck."<fnref n="2" />

<table><tr><td>w</td><td>e</td><td>g</td><td>o</td><td>t</td><td>i</td><td>n</td></tr><tr><td>d</td><td>e</td><td>d</td><td>u</td><td>s</td><td>i</td><td>n</td></tr><tr><td>s</td><td>a</td><td>i</td><td>d</td><td>t</td><td>h</td><td>i</td></tr><tr><td>h</td><td>i</td><td>s</td><td>n</td><td>e</td><td>c</td><td>k</td></tr></table>

- 4 clés créées nnikiih ctsteou dngdise eaiwdsh

## 5. Correction statistique

L'usage d'un livre est très simple mais a un défaut intrinsèque : les probabilités d'occurrence des lettres dans les clés sont naturellement proches de celles des lettres du langage du livre et donc non égales. Ces différences prévisibles de fréquence pourraient être mises à profit pour optimiser des attaques par force brute. Une façon simple de corriger partiellement ce défaut serait de remplacer dans les chaînes sélectionnées quelques lettres des plus hautes fréquences par des lettres des plus basses fréquences.

Les fréquences observées des lettres dépendent du langage, du nombre de textes analysés et de leurs natures. Une source<fnref n="3" /> donne des résultats concernant plusieurs langues :

<table><thead><tr><td>Langue</td><td>+ fréquentes</td><td>- fréquentes</td></tr></thead><tbody><tr><td>Français</td><td>E A S I N T</td><td>X J Y Z K W</td></tr><tr><td>Anglais</td><td>E T A O I N</td><td>V K X J Q Z</td></tr><tr><td>Espagnol</td><td>E A O S N I</td><td>H Z J X W K</td></tr><tr><td>Portugais</td><td>A E O S I R</td><td>X Z J K Y W</td></tr><tr><td>Italien</td><td>E I A O N L</td><td>Q K Y X W J</td></tr><tr><td>Allemand</td><td>E N I R S A</td><td>V P J Y X Q</td></tr><tr><td>Néerlandais</td><td>E N A I R T</td><td>J Z F Y X Q</td></tr></tbody></table>

Fréquences naturelles de lettres

Les clés corrigées de l'exemple précédent pourraient alors être : NVIKKIH, CTSQEOU, DNGDKSZ et EAIWDSH.

## 4. Création à partir d'un journal

Cette solution ne peut vraiment s'envisager que pour des correspondants se trouvant dans un même pays. Le caractère quotidien du journal évitant le risque de réemploi au bout d'un certain temps et sa structure en pages, au plus quelques dizaines, et en colonnes, environ une demi-douzaine, entraînent des aménagements aux propositions précédentes.

<footnote n="2">² A Farewell to Arms, E.Hemingway, p81, Charles Scribner's Sons edition.</footnote>

<footnote n="3">³ Source: http://www.bibmath.net/crypto/index.php</footnote>
Une solution simple permettant de différentier tous les utilisateurs et d'éviter les collisions lors de la création des clés consiste à attribuer à chacun d'eux une page, une colonne et une ligne particulière. La renouvellement quotidien du journal assure le renouvellement de la source et évite tous les calculs des formules précédentes.

Par contre, la construction des clés et leur correction statistique conservent les règles énoncées plus haut.

## 5. Création avec un programme

Jusqu'à maintenant tous les procédés que nous avons exposés sont d'une mise en œuvre manuelle. Un outil informatique peut rendre de grand service par sa rapidité mais la construction d'un programme faisant simplement appel au générateur de nombre aléatoire disponible dans tout langage de programmation ne peut être la solution. En effet, à chaque exécution du programme le générateur produit de nouveaux nombres or l'outil dont les correspondants ont besoin doit vérifier une condition bien particulière : utilisé indépendamment en des instants différents, il doit fournir le même résultat, à savoir la clé.

Nous devons donc élaborer un procédé ayant deux propriétés contradictoires :

* Etre déterministe pour être reproductible ;

* Générer un résultat de nature aléatoire.

Nous savons déjà que par, le calcul, il est seulement possible de générer des résultats ayant suffisamment peu de structure discernable pour paraître chaotiques et être qualifiés de pseudo-aléatoires. C'est à ce niveau que nous allons travailler en proposant l'emploi détourné du chiffre Carrousel [2] fondé exclusivement sur un algorithme de permutation des caractères du texte clair. Le programme associé est disponible librement, si nous le faisons travailler en mode de chiffrement sur un texte constitué, par exemple, de 3 exemplaires concaténés d'un même alphabet alors le résultat sera une longue chaîne de caractères dans laquelle nous pouvons puiser un segment qui jouera le rôle de clé. Le fait d'avoir mis plusieurs exemplaires de l'alphabet dans le texte à permuter permet de rencontrer, éventuellement, plusieurs occurrences du même caractère dans le segment choisi. Ce qui lui donne, en tant que future clé, une plus grande variété combinatoire. Dans le même but, plusieurs applications successives de l'algorithme de permutation sont utiles pour enrichir cette variété. De plus, le nombre d'exemplaires de chaque caractère étant le même dans le texte il n'est plus nécessaire d'appliquer des corrections statistiques d'origine linguistique pour rétablir l'équiprobabilité d'occurrence dans cette source de clés. Selon l'alphabet utilisé nous créons des clés de types différents adaptés au chiffre :

- [A, B, ..., Y, Z] clé littérale, de majuscules pour [1] et [3]

- [A, ..., Z, a, ..., z] clé littérale, de majuscules et minuscules

- [A, ..., Z, 0, ..., 9] clé alphanumérique pour [1] et [2]

- [0, ..., 9, A, B, C, D, E, F] clé hexadécimale pour [3]

- [0, ..., 7] clé octale
Finalement nous avons développé une version du programme associé qui admet comme seule donnée fondamentale le nombre de permutations à effectuer sur le texte multi-alphabets. Un paramètre interne au programme est décisif : *la clé de permutation*. Elle doit être initialement convenue entre les correspondants et joue implicitement le rôle de signature des clés générées. L'annexe A donne un exemple des résultats produits par ce programme.

Une autre convention doit être établie entre les correspondants : comment passer du jour du message au nombre de permutations générant la suite de caractères source de la clé du message. À titre d'exemple, les formules (3) et (2) peuvent être reprises en faisant jouer au numéro de page calculé celui de nombre de tours de permutation à appliquer.

Si pour, des raisons de discrétion absolue ou par manque de matériel, il n'est pas possible d'utiliser ce programme une solution de secours peut être d'effectuer chaque jour à la main un tour de permutation de la longue chaîne générée la veille pour y puiser les clés de ce jour. Pour réduire le travail de permutation d'une longue chaîne multi-alphabets, une solution est de travailler sur un seul alphabet et de conserver les résultats obtenus au fil du temps. Puis de combiner, par exemple en les entrelaçant, plusieurs de ces résultats.

Quelque soit la méthode, informatique ou manuelle, pour générer un multi-alphabet permuté à la fin il faut en extraire une ou plusieurs clés. Là encore des conventions, arbitraires, sont à définir : segment continu ou prélèvements ponctuels, à partir de quel caractère, etc. Un seul point est à vérifier : ne pas utiliser plusieurs fois un même caractère dans plusieurs clés car cela biaiserait la répartition équ probable obtenue par la permutation.

À titre de suggestion, nous proposons un schéma d'extraction inspiré d'une des idées du chiffre Diagonales : une clé hexadécimale définit un masque binaire dont les 1 sélectionnent les caractères à extraire dans l'alphabet permuté pour former la chaîne jouant ultérieurement le rôle de clé. L'annexe B illustre ce schéma sur un exemple.

## 6. Références

1. Spirale – un chiffre à masque jetable, 2015.

2. Carrousel – un chiffre par transposition, 2015.

3. Diagonales – un chiffre par transposition, 2015.

## 7. Annexes

<table><tr><td>A</td><td>Exemple de résultats du programme</td></tr><tr><td>B</td><td>Schéma d'extraction d'une chaîne : Exemple</td></tr></table>
PythonWin 3.4.1 (default, Aug 7 2014, 13:13:27) [MSC v.1600 32 bit (Intel)] on win32.

Portions Copyright 1994-2008 Mark Hammond - see 'Help/About PythonWin' for further copyright information.

>>> KEY_GENERATOR 1.0 --

Permutation process from 12-key (JAMESBOND007) and 36-alphabet [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 0 1 2 3 4 5 6 7 8 9] for 20 cycles :

Transposition of characters according to following ranks : [10, 1, 13, 5, 19, 2, 15, 14, 4, 27, 27, 34] for JAMESBOND007

1-Permuted : 0ZMHYWH3Z8DC10MHVTBVRUYQFEWQ42G0TPOAVTC6A8M2RKBN54J8A7ENGU770LLF93Y3SNS1541POJFSEGDJIDLZ6XQ5I9IPC29XU6BXKRKW

2-Permuted : 92ISO722EKPCQW13954U7RCA8AYVBUFLNHLVUVMK5S54TDTD3YKO0RO4MIPNJNCW13F6Q0EF0GXZM8JBYHHGR6JLS76XEWZ819APGTZQBXDI

3-Permuted : A9RBJP4UADZMVYQ2WXGIR710S5C9ZGJC43JURUIB0E3B5HV66FDL9XMY5EH0KDC7F38T6WOWLFPL1K84O2SHTKGKNQNSQYIEOX1V8MN2AT7PZ

4-Permuted : V1T4KHBG5PLI9CVUIQFEXRX9E01W2M8CY2GR71RTLO6ZXSUKT8HJA71F3Y3WD6MPW3SNSYM7JC8NQDKGJ4B25BHD60QAOZALPFU05490VNZE

5-Permuted : UF5GD3ZM0ZNRW19GZAJY7XPAOLXI95KMFUH7RETVCMT2QBIBNSSGVNQ86O2YHKIH73E4QC1PC8ODVPDFKB44XT26SW60JE5J8WRL3Y19U0LA

6-Permuted : RWXFH225LLDTIXWME08ON78VMCPZ13DI8G2RXY5UC1N9A4ET4EBHU0VSTJUCSBR3P3OY61QHMKL69ZPJDZGBQV4KQYS9KA0GO77J6FFAIWN5

7-Permuted : 77QJSU93CN65ZPI5A9KJ0NOU1C8EF6PRSM4X7OXIMQ410GYVY042RW9ENKG1BTT2H3MFSXV3IDJKWLZ8H2FZAUBB6CQAD5LHLPRGT8WVEYD0

8-Permuted : RPA8BG16CDKXE8Z35ADKW0LRQMOAWTZTE5B7NJQEIVYF9FOUFMG47YWO4DMX4V5U3318QP92RPGBINLKS9J20IZTS16VH0C2JHXHNS7UYC6L

9-Permuted : XH0K4MFTM6BQAOE60VPDYWJ7VIL57NL5O3ZN0KAYR9FWAJJI81FBRCIMYH5PGUXG23QS68WUTZHTZDNDB1899E2VQXSUSLC4G3724EPRO1KC

10-Permuted : 739DG5WNIKTA5LATLUZHCYGR9RJ0P4NXM620WD0OTW87V8KESQJZX1Z1FS38FIQM3VES0IG5L2VE6DP4FK1AY9U6PQRBCMBH2N4YOH7JXBC

11-Permuted : N2APF374RBV00J5NCRLS1CHXWTGLHYDQ1T9WYH9J5ISPUKDYEV827XEQ8B6OJEA5G39OQLZMXN4UAK6ZGWDFVO11S8674C1Z2U0BFM3RKPTM

12-Permuted : 0UVZJ6PYTTU9LG04C7NBX127I5HC3F6AQN1YCSAKXZEHRDHOO9K9NPAVS4TL8Y03M3WM6JE5QDBI5BKLF7PWUJFEQOSRGMR24GWZ812XD8VI

13-Permuted : WGUL8THF5VIACHLYMRD4PX4NZX2C28K0V4FC1BVDQEO37PSJMWD10859EGNJK09653I1SGA3A6ZE0TBNJPZ7RKWY6LQXFIT9BMY2SQU7HOUR

14-Permuted : YMRNKN38XUEVC2CF1X6G8PB0EQ4MUSB99YW1X4UHAAM2RZBK1IPFW00WOF4GDJAT33ZQQH560K2YLVTD8HLP7D7OSJ67JR51Z5C9EVGNSLIT

15-Permuted : C57DD42SQIYUM4C8R7KFO8ZWAABIGETAWF7XPGRS051UXL4DQZZWYLLIMJYHPKVN63EV620T9B9OCUV6K3NHRHPJQGSN8TXF2311O9M0BJE5

16-Permuted : 13R6PYUEAEORIBMSTNBJL02Y50ZRM0VV18PP8F7B90QG7NGHVEL7CJCZ18F2ZDU4T3A9S4LNAT1JCIUKD2D3XSHK6HQ0K5QW96XFMW5W4GYX

17-Permuted : X6XKZFG00YJ7RZIE50T8JL9C092T5MUUZSH8OJR4ALVMNDFS9ANP1GCEQK84LHRYN35WQBC4VVFKMEIBPU627B3DS26WDXA71TPW1I3YGHOQ

18-Permuted : PT7BL8MM90KRT2ROXWVKGJ11LA9531IREE3OL8XGVC9506JBW5DHXHMAVDSBNS7F43016ZCYUUWDIYETZGKUN42HQ4SYPQ0PFN87QZ6CF2JA

19-Permuted : 8NNTNS51AJDX59TMQYUDHGFXCV1X6QE7AO2LJK7FUCW3WK84I063P2I59PEZDBR8Y3LZS2MFRI7HROYVLMBG0GUS6BQCZA9HW4OPVET1J4K0

20-Permuted : O40VDE3QVKH7X151ACIP2HWPCUFQTVYR5MUJGDNJRMI6YBKGZLK284R0WZO264XSF3CEQ9I87EPSTJOUN5TMWFGBSZ61L0A37YLH9ANX8BD9

The generated keys were written to 'keys.txt'.

Characters (108):

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 0 1 2 3 4 5 6 7 8 9 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 0 1 2 3 4 5 6 7 8 9 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 0 1 2 3 4 5 6 7 8 9

Keys (108):

O40VDE3QVKH7X151ACIP2HWPCUFQTVYR5MUJGDNJRMI6YBKGZLK284R0WZO264XSF3CEQ9I87EPSTJOUN5TMWFGBSZ61L0A37YLH9ANX8BD9
<table><tr><td>clé<sub>16</sub></td><td colspan="12">A</td><td colspan="12">4</td><td colspan="12">1</td><td colspan="12">3</td><td colspan="12">C</td><td colspan="12">1</td></tr><tr><td>Valeur<sub>2</sub></td><td colspan="6">1010</td><td colspan="6">0100</td><td colspan="6">0001</td><td colspan="6">0011</td><td colspan="6">1100</td><td colspan="6">0001</td></tr><tr><td>Masque</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>1</td><td>1</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td></tr></table>

<table><tr><td>Alphabet</td><td colspan="24">O40VDE3QVKH7X151ACIP2HWP ....</td></tr><tr><td>Permuté</td><td>O</td><td>4</td><td>0</td><td>V</td><td>D</td><td>E</td><td>3</td><td>Q</td><td>V</td><td>K</td><td>H</td><td>7</td><td>X</td><td>1</td><td>5</td><td>1</td><td>A</td><td>C</td><td>I</td><td>P</td><td>2</td><td>H</td><td>W</td><td>P</td></tr><tr><td>Chaîne</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>7</td><td>0</td><td>5</td><td>1</td><td>A</td><td>C</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>P</td></tr><tr><td>Extraite</td><td colspan="24">00E751ACP</td></tr></table>
<figure><img src="image_90.png" /></figure>

## Plan

<table><tr><td>1. Introduction</td><td>1</td></tr><tr><td>2. Construction de la séquence de lettres</td><td>2</td></tr><tr><td>3. Insertion de chiffres</td><td>2</td></tr><tr><td>4. Insertion de caractères spéciaux</td><td>3</td></tr><tr><td>5. Test de résistance</td><td>3</td></tr></table>

## 1. Introduction

Dans le chapitre précédent nous avons présenté plusieurs procédures mécaniques, exécutables à la main ou avec un ordinateur, pour générer un grand nombre de clés dans le cadre de l'échange d'un grand nombre de messages chiffrés entre plusieurs correspondants. Un autre cas de figure encore plus courant existe, celui où un utilisateur unique doit fournir un mot de passe à un programme chiffrant des données et fichiers personnels ou pour accéder à des sites privés ou des services protégés du réseau internet.

Le bon sens et l'hygiène en matière de sécurité informatique veulent que l'on écarte tout mot du langage naturel qu'il est facile de trouver par une recherche par dictionnaire. De même il faut écarter toute référence personnelle ou familiale (dates, prénoms ou surnoms dans la famille, animal de compagnie, loisirs, etc.) qu'une personne de l'entourage peut deviner. En conséquence un mot de passe doit avoir la même structure qu'une clé, c'est à dire une suite de lettres, de chiffres et de certains caractères spéciaux dont la force réside dans sa longueur et son aspect aléatoire.

Sa durée d'utilisation peut être très longue, des mois voir des années, et pendant ce temps sa confidentialité repose sur l'unicité de son détenteur et la résidence dans sa seule mémoire. C'est là que le problème apparaît, en effet les experts de la sécurité informatique recommandent des mots de passe d'au moins 12 caractères aléatoires or le cerveau humain mémorise mal des données non structurées et sans signification. Par contre il mémorise très bien un long texte s'il est intelligible, c'est ce que nous mettons à profit dans la méthode que nous proposons ici et dont le principe consiste à remplacer mentalement chaque mot d'une phrase par un caractère.
## 2. Construction de la séquence de lettres

L'idée de base est de remplacer chaque mot d'une phrase par sa première lettre. Les sources de phrase peuvent être de nature très diverses, par exemple personnelle :

1) *longtemps je me suis couché de bonne heure mais maintenant c'est fini je fais la fête !*

Au fur et à mesure qu'on la prononce mentalement on tape la 1ère lettre pour finalement générer le mot de masse *ljmscdbhmmceffjflf* (17 caractères).

Selon le goût et la culture de l'utilisateur la phrase peut aussi être tirée d'un proverbe :

2) *la guerre, un massacre de gens qui ne se connaissent pas, au profit de gens qui se connaissent mais ne se massacrent pas* → *lgumdgqncspapdgqscmnsmp*

ou extraite d'une chanson, d'une comptine ou d'un poème :

3) *un, deux, trois, nous irons au bois, quatre, cinq, six, cueillir des cerises* → *udtniabqcscdc*

Et même d'une langue étrangère :

4) *to be or not to be, that is the question* → *tbontbtitq*

## 3. Insertion de chiffres

Pour enrichir la forme du mot de passe nous introduisons des chiffres en remplaçant certains mots non par leur 1ère lettre mais par un chiffre qui soit homophone, exemples : un, une → 1; de, deux → 2; si, six → 6. Le procédé peut s'étendre aux langues étrangères. Le tableau suivant propose des substitutions :

<table><tr><td></td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr><tr><td>Français</td><td></td><td>un, une</td><td>Deux, de</td><td>trois</td><td>quatre</td><td>Cinq, saint</td><td>Six, si</td><td>Sept, cet, cette</td><td>huit</td><td>neuf</td></tr><tr><td>Anglais</td><td></td><td>one</td><td>Two, to</td><td>Three, free</td><td>Four, for</td><td>five</td><td>six</td><td>seven</td><td>height</td><td>nine</td></tr></table>

Avec ces conventions les exemples précédents de phrase donnent d'autres mots de passe :

1) *longtemps je me suis couché de bonne heure mais maintenant c'est fini je fais la fête !* → *ljmsc2bhmm7fjflf*

2) *la guerre, un massacre de gens qui ne se connaissent pas, au profit de gens qui se connaissent mais ne se massacrent pas* → *lg1m2gqncspap2gqscmnsmp*

3) *un, deux, trois, nous irons au bois, quatre, cinq, six, cueillir des cerises* → *123niab456cdc*

4) *to be or not to be, that is the question* → *2bon2btitq*