Leçon 10

La cryptographie

Dans le répertoire javascript créez un dossier cours10. Il contiendra tous les fichiers de cette leçon.
Sur l'éditeur Brackets allez dans Fichier, ouvrez un dossier et sélestionner le dossier cours10. Le nom du dossier s'affiche à gauche.
A l'aide d'un clic droit de la souris sur le nom du dossier, créez un dossier js puis un dossier html.

1. Codage de César

Pour coder un message, on procède de la manière suivante : à chacune des 26 lettres de l'alphabet, on commence par lui associer un entier $n$ de l'ensemble $\Omega = \{0~;~ 1~;~2~;~\ldots~;~24~;~ 25\}$ selon le tableau ci-dessous :
$$\begin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}\hline 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\\ \hline 0 &1 &2 &3 &4 &5 &6 &7 &8 &9 &10 &11 &12&13 &14 &15 &16 &17 &18 &19 &20 &21 &22 &23 &24 &25\\ \hline\hline \end{array}$$ Le texte s'obtient en remplaçant chaque lettre du texte clair original par une lettre à distance fixe, toujours du même côté, dans l'ordre de l'alphabet.
Pour les dernières lettres (dans le cas d'un décalage à droite), on reprend au début.

La distance fixe est la clé du codage, elle est donnée par deux lettres.

Si la clé est CH, la distance entre C et H est 5.
Avec un décalage de 5 vers la droite, A est remplacé par F, B devient G, et ainsi jusqu'à X devient C, puis Y devient D etc. Il s'agit d'une permutation circulaire de l'alphabet.
La longueur du décalage, 5 dans l'exemple évoqué, constitue la clé du chiffrement qu'il suffit de transmettre au destinataire — s'il sait déjà qu'il s'agit d'un chiffrement de César — pour que celui-ci puisse déchiffrer le message.

Dans le cas de l'alphabet latin, le chiffre de César n'a que 26 clés possibles (y compris la clé nulle, qui ne modifie pas le texte).\\

Pour simplifier, les messages à coder utiliseront seulement les lettres du tableau. Autrement dit, il n'y a pas de ponctuation, pas d'accents , etc.

Exemple : On veut coder la phrase " Je suis en BTS SIO" avec la clé CH


On utilisera :

  1. La méthode charCodeAt() retourne le code ASCII du caractère
  2. La méthode fromCharCode() retourne la lettre du code ASCII
  3. La méthode toUpperCase() qui transforme les lettres en majuscule

Votre script fera appel à quatre fonctions :

2. Codage affine

Codage

Pour coder un message, on procède comme précédemment : à chacune des 26 lettres de l'alphabet, on commence par lui associer un entier $n$ de l'ensemble $\Omega = \{0~;~ 1~;~2~;~\ldots~;~24~;~ 25\}$.
Puis on associe à tout entier $n$ de $\Omega$ le reste de la division euclidienne de $(3n + 5)$ par 26 ; ce reste est alors associé à la lettre correspondante.
On admet que tous ces restes allant de 0 à 25 sont distincts.

Exemple : pour coder la lettre P on procède de la manière suivante :

Ainsi la lettre P est codée par la lettre Y. Les étapes 2 et 3 sont appelées codage affine.


Décodage

Pour le décodage on procède de la même manière en associant à tout entier $n$ de $\Omega$ le reste de la division euclidienne de $(9n + 7)$ par 26 ; ce reste est alors associé à la lettre correspondante.

3. Codage Vigenère

Un système de cryptographie, difficile à briser, fut inventé au XVIe siècle par le français Vigenère.
Il consistait à écrire 25 alphabets décalés par rapport à l’alphabet normal :
l’alphabet qui commence par B et finit par …YZA, l’alphabet qui commence par C et finit par …ZAB ... etc.

Le codage va s’effectuer sur le principe du chiffre de César : on remplace la lettre d’origine par la lettre occupant la même place dans l’alphabet décalé.
Mais à la différence du chiffre de César, un même message va utiliser non un, mais plusieurs alphabets décalés.
Pour savoir quels alphabets doivent être utilisés, et dans quel ordre, on utilise une clé.
Si cette clé est VIGENERE et le message " Il faut coder cette phrase, on procédera comme suit :
$$\begin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}\hline 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\\ \hline 0 &1 &2 &3 &4 &5 &6 &7 &8 &9 &10 &11 &12&13 &14 &15 &16 &17 &18 &19 &20 &21 &22 &23 &24 &25\\ \hline\hline \end{array}$$

Vous pouvez tester vos codages ici : Chiffre de Vigenère

Exemple :

$$\begin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}\hline \hline Lettre1&I&L&F&A&U&T&C&O&D&E&R&C&E&T&T&E&P&H&R&A&S&E\\ \hline Rang1&8&11&5&0&20&19&2&14&3&4&17&2&4&19&19&4&15&7&17&0&18&4\\ \hline Clé&V&I&G&E&N&E&R&E&V&I&G&E&N&E&R&E&V&I&G&E&N&E\\ \hline Rang&21&8&6&4&13&4&17&4&21&8&6&4&13&4&17&4&21&8&6&4&13&4\\ \hline Rang2&3&19&11&4&7&23&19&18&24&12&23&6&17&23&10&8&10&15&23&4&5&8\\ \hline Lettre2&D&T&L&E&H&X&T&S&Y&M&X&G&R&X&K&I&K&P&X&E&F&I\\ \hline \end{array}$$

4. Codage de Hill

Codage

Exemple : $\underbrace{\text{TE}}_{{\text{mot en clair}}}\stackrel{\text{étape} 1}{\Longrightarrow} (19,4) \stackrel{\text{étape}\: 2}{\Longrightarrow} (13,19) \stackrel{\text{étape}\: 3}{\Longrightarrow} \underbrace{\text{NT}}_{{\text{mot codé}}}$

ou encore on obtiendra :

phrase =" Je suis malade" $ \Longrightarrow$ phrase_sans_espace = "JESUISMALADE" $\Longrightarrow$ phrase_codée = "HBYYMYCGRZTL"

Dans le cas d'un nombre impair de lettres, la drenière lettre n'est pas codée.

Exemple : "Je suis en forme" donne : "HBYYMYFCTNPLE"

Décodage

Pour la procédure de décodage on reprend les trois étapes précédentes mais en utilisant un nouveau calcul

Exemple : $\underbrace{\text{NT}}_{{\text{mot codé}}}\stackrel{\text{étape} 1}{\Longrightarrow} (13,19) \stackrel{\text{étape}\: 2}{\Longrightarrow} (19,4) \stackrel{\text{étape}\: 3}{\Longrightarrow} \underbrace{\text{TE}}_{{\text{mot décodé}}}$