Le chiffre de César doit son nom à Jules César (100 avant JC – 44 avant JC), qui l'utilisait pour des communications militaires secrètes. Le chiffre de César est un chiffre de substitution. Jules César utilisait à l'origine un décalage de trois pour chiffrer et déchiffrer les messages. Le chiffrement est effectué à l'aide d'une fonction affine : f(x)=x+b.
Dans un premier temps, chaque caractère du texte initial (message à chiffrer) est converti en un nombre de 0 à 25, correspondant à sa position dans l'alphabet latin qui contient 26 lettres --> (a = 0, b = 1 ... z = 25 ).
Ensuite, chaque nombre obtenu est transformé par une fonction affine (f(x) = 1x + b). "x" représente le nombre tandis que "b" est défini lors du cryptage. "b" est la clé utilisée pour décrypter le message final.
Si on prend toutes les images et les met dans une liste, on obtient n nombres correspondant à n caractères du texte initial. L'étape suivante consiste à trouver les valeurs du modulo 26 de chaque nombre. ( Modulo signifie reste )
Exemple : Modulo 4 de 19 vaut 3 car
19 = 4 * 4 + 3
Par contre, modulo 26 de 26 vaut 0 car26 = 26 * 1 + 0
Par conséquent, nous obtenons une nouvelle liste avec n éléments, chacun entre 0 et 25 tous deux inclus. Tous ces nombres sont convertis en lettres de l'alphabet latin à l'aide des tableaux ci-dessous.
On crée enfin le message final en mettant toutes les lettres côte à côte.
Les étapes 1 et 4 peuvent être réalisées avec ces tableaux :
UN | B | C | D | E | F | G | H | je | J. | K | L | M. | N | Ô | P. | Q | R. | S | T | U | V | W | X | Oui | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |
Si un attaquant sait que le message a été chiffré à l'aide du chiffre César, il peut tenter tous les changements (valeurs b de 1 à 25) pour déchiffrer le message. C'est ce qu'on appelle la méthode bruteforce .
Nous pouvons également utiliser l'analyse fréquentielle pour décrypter le message car chaque lettre est cryptée avec le même algorithme et les lettres les plus courantes en anglais sont :
En utilisant les tableaux ci-dessus, ATTAQUE peut s'écrire : 25 0 19 19 0 2 10 25 Images de chaque nombre :
La nouvelle liste est : 29 4 23 23 4 6 14 29
En utilisant la méthode modulo 26 , on obtient :
Le message final est 3 4 23 23 4 6 14 3 et en utilisant à nouveau les tables, on les convertit dans le message crypté :
DEXXEGOD
ZATTACKZ est chiffré avec la fonction x+4 et devient DEXXEGOD .
En utilisant les tableaux ci-dessus, DEXXEGOD peut s'écrire : 3 4 23 23 4 6 14 3 Images de chaque nombre :
La nouvelle liste est : -1 0 19 19 0 2 10 -1
En utilisant la méthode modulo 26 , on obtient :
Le message final est 25 0 19 19 0 2 10 25 et en utilisant à nouveau les tables, on les convertit dans le message crypté :
ZATTACKZ
DEXXEGOD se déchiffre avec la fonction 1x - 4 et devient ZATTACKZ .
C'est ce qu'on appelle la méthode bruteforce.
En utilisant les tableaux ci-dessus, DEXXEGOD peut s'écrire : 3 4 23 23 4 6 14 3
a est un nombre compris entre 0 et 25. (a = 0 signifierait que le message est déjà déchiffré)
En utilisant la fonction f(x) = Mod(1x + a, 26) :
Nous pouvons obtenir tous ces résultats :
un | Texte décrypté |
---|---|
1 | fgzzgiqf |
2 | ghaahjrg |
3 | hibbiksh |
4 | ijccjlti |
5 | jkddkmuj |
6 | kleelnvk |
7 | lmffmowl |
8 | mnggnpxm |
9 | nohhoqyn |
10 | opiiprzo |
11 | pqjjqsap |
12 | qrkkrtbq |
13 | rsllsucre |
14 | stmmtvds |
15 | tunnuwet |
16 | uvoovxfu |
17 | vwppwygv |
18 | wxqqxzhw |
19 | xyrryaix |
20 | yzsszbjy |
21 | zattackz |
22 | Abuubdla |
23 | bcvvcemb |
24 | cdwwdfnc |
25 | dexxegodieu |
Le seul texte qui a du sens est zattackz donc on peut en déduire que la clé est 21 (25 - b = 21).
DEXXEGOD se décrypte avec la fonction f(x) = 1x - 4 ou f(x) = 1x + 21 et devient ZATTACKZ .
Langue | Chiffrer | Décrypter |
---|---|---|
C | césar.c | À venir |
C# | César.cs | À venir |
C++ | main.cpp | main.cpp |
Javascript | chiffrer.js | décrypter.js |
Python | chiffrer.py | décrypter.py |
Rapide | lib.swift | lib.swift |
npm i @cryptoolsorg/caesarcipher