Le chiffrage/cryptage existe depuis des siècles, bien avant la naissance de l’informatique, il permet de protéger des informations et de communiquer des messages secrets. En lisant ce tutoriel, découvrez à votre tour des techniques antiques et modernes de chiffrement et de déchiffrement, qui vous permettront de comprendre comment sécuriser vos messages ou bien simplement à vous amuser avec vos amis
Sommaire
Quelques termes essentiels
Nous allons d’abord définir quelques mots de base qui apparaîtront au cours de ce tutoriel :
Cryptographie : la cryptographie c’est l’ensemble des techniques de chiffrement, qui permettent de chiffrer un message. La cryptographie est principalement utilisée pour protéger un message considéré comme confidentiel.
Clé : Les clés de chiffrement sont des caractères ou séquences de caractères utilisés, avec un algorithme ou un processus mathématique, pour transformer des données en texte clair en un texte chiffré, ou un contraire transformer un texte chiffré en texte en clair.
Substitution : C’est une manière de chiffrer un message en remplaçant ses caractères par d’autres caractères. Ces caractères ne sont pas aléatoires mais sont définit à l’aide d’une clé ou d’une table de substitution.
Ensuite, il est important de comprendre les termes de chiffrement et de cryptage :
Le chiffrement consiste à transformer des informations lisibles, appelées texte en clair, en un format illisible, appelé texte chiffré, en utilisant une clé. Le cryptage est un synonyme, souvent utilisé pour désigner le chiffrement mais le terme le plus approprié et utilisé en cryptographie est celui de chiffrement. On parle de déchiffrement lorsque l’utilisateur dispose de la clé nécessaire pour retrouver le texte en clair. Et de décryptage lorsqu’on parvient à traduire des informations chiffrées en informations lisibles sans disposer de la clé (souvent via une attaque brute).
Les types de chiffrement
Il existe différents types de chiffrement, voici les deux principaux :
Symétrique : système de chiffrement qui utilise une seule clé pour chiffrer ET déchiffrer un texte. L’inconvénient est que si quelqu’un arrive à avoir la clé il peut lire tous les infos.
Asymétrique : système de chiffrement qui utilise deux clés différentes : une clé(public) pour chiffrer et une autre clé(privé) pour déchiffrer. Donc un message chiffré avec la clé publique ne peux être déchiffré qu’avec la clé privée correspondante, et inversement. L’inconvénient c’est que même si il est un peu plus sécurisé, ce système est beaucoup plus lent.
Le chiffre de César
Le code de César est une méthode de chiffrement antique, utilisé par Jules César pou faire parvenir ses messages secrets sans qu’il soit intercepté par les troupes ennemies. Le concept est très simple il suffit de décaler dans l’ordre alphabétique les lettres d’un mot.
Pour chiffrer avec le code de César je dois donc choisir un nombre de décalage, et l’appliquer à l’alphabet.
Voici un exemple schématisé avec un décalage de 3 :
Mais comment fait-on pour le déchiffrer ? Si on connaît la clé il suffit juste de compter dans l’autre sens mais c’est peu probable qu’on nous la donne. Pour la trouver ce n’est pas très compliqué, on repère les lettres les plus répétées, on suppose que c’est un E ou un A, et on compte jusqu’à la lettre correspondante sur le message chiffré.
Exemple : « OH FKLHQ » le H est répété deux fois je suppose que c’est un E, il y aurait donc un décalage de 3 : je compte à l’envers et j’obtiens : « le chien ». La clé utilisée :
clair : ABCDEFGHIJKLMNOPQRSTUVWXYZ
chiffré : DEFGHIJKLMNOPQRSTUVWXYZABC
On a ici de la chance, car cette méthode est compliqué lorsque nous avons peu de mots.
L’autre possibilité serait d’essayer tous les décalages possibles, ca peut nous paraître long (sauf si nous disposons du disque de césar), mais ca ne l’ai pas du tout pour un ordinateur, et c’est là le problème de ce code qui est bien trop simple à déchiffrer.
Voici une proposition de script Python :
Celui-ci fonctionne avec un décalage de 9 dans l’ordre alphabétique, mais tu peux bien sur le modifier par n’importe quel nombre (préférablement compris entre 1 et 26)
cryptage = {chr(65+i) : chr(65+(i+9)%26) for i in range(26)} message = "message a modifier" message_crypte = "" for j in message: message_crypte = message_crypte + cryptage[j] print(message_crypte)
Le chiffre de Vigenère
C’est un système de chiffrement par substitution du 16-ème siècle qui utilise une clé et un tableau à double entrée. Chaque lettre du texte à chiffrer est décalée selon la lettre correspondante de la clé, avec le tableau. Si tu te poses la question, la clé ne possède par forcement le même nombre de caractère que le mot à déchiffrer, si celle-ci est plus courte il faut simplement la répéter pour qu’elle soit assez longue.
Pour chiffrer avec la méthode de Vigenère il faut choisir une clé, puis il faut prendre la première lettre de notre mot à chiffrer et celui de notre clé dans chaque colonne, et récupérer la lettre qui se trouve à leur intersection.
Exemple : le mot de base commence par « s… » et la clé commence par « c… » : on regarde dans le tableau et la lettre au croisement de « c » et « s » est « u », le mot chiffré commence donc par « u ».
Comment le déchiffre t-on ? Lorsque nous avons un texte chiffrer avec la méthode de Vigenère nous sommes également en possession d’une clé. On se munie alors du tableau de Vigenère (voir ci dessous) et nous cherchons la lettre qui se trouve au croisement de la lettre du texte chiffré et de celle qui lui correspond dans la clé.
Exemple : le mot chiffré commence par « m… » et la clé commence par « c… » : on regarde dans le tableau et la lettre au croisement de « c » et « m » est « o », le mot déchiffré commence donc par « o ».
Le tableau de Vigenère
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 | |
A | 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 |
B | 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 | A |
C | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B |
D | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C |
E | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D |
F | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E |
G | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F |
H | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G |
I | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H |
J | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I |
K | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J |
L | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K |
M | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L |
N | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M |
O | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N |
P | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
Q | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P |
R | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q |
S | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R |
T | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S |
U | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T |
V | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U |
W | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V |
X | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W |
Y | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X |
Z | Z | 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 |
Le chiffrage par substitution
De nombreux chiffrements fonctionne par substitution mais cette méthode est « propre à elle-même ». En effet, les méthodes de chiffrage précédentes sont pas les plus sécurisés car elle offre peu de possibilités, alors que le chiffrage par substitution, lui, offre des milliards de possibilités le rendant presque impossible à déchiffrer.
Comme nous l’avons vu au début de cet article la substitution c’est remplacer des caractères par d’autres caractères. Ces caractères ne sont pas forcement des lettres, ils peuvent être des emojis ou bien des formes géométriques (la plupart des sociétés secrètes fonctionne avec la géométrie : code des templiers, franc maçon ou encore croix de lorraine).
Pour chiffrer un message avec cette méthode part d’une principe que le chiffrage par substitution est beaucoup plus libre et n’obéit pas à une règle précise, donc tu dois toi même créer une clé, en choisissant les caractères que tu veux utiliser et la manière dont tu les attribue
Créer des messages (presque) indécryptable
Voici quelques techniques qui peuvent rendre votre message encore plus compliqué a décrypter et qui rendra fou celui qui tente de le découvrir :
- attribuer plusieurs caractères à une même lettre (ex : je remplace le « E » par les lettres « N », « S », et « I »)
- retirer certaines lettres
- retirer les espaces
- ajouter des séquences/enchainements de lettres très peu probables
- former des mots seulement lisibles en diagonale
- faire des fautes volontaires
Comment décrypter n’importe quel message
Décrypter c’est parvenir à transformer un texte chiffré en texte clair sans la clé, il faut alors fonctionner par étapes pour arriver à la trouver. La technique que nous allons étudier se nomme la Markov Chain Monte Carlo (MCMC) et a été établi par un professeur de Stanford et ses élèves il y a quelques années
- Premièrement il faut étudier la fréquence d’apparition d’un caractère (utilisé pour déchiffrer Enigma;) ; si on sait que le texte est français le caractère le plus utilisé sera probablement un E, ou un A. On peu par exemple classer les 5 caractères les plus utilisés et les remplacer par les 5 lettres les plus répétées en français
Voici un tableau du top 5 des lettres qui apparaissent le plus dans la langue française :
Rang | Caractère | Nombre d’occurrences | Pourcentage |
1 | e | 115 024 205 | 12.10% |
2 | a | 67 563 628 | 7.11% |
3 | i | 62 672 992 | 6.59% |
4 | s | 61 882 785 | 6.51% |
5 | n | 60 728 196 | 6.39% |
- Après cette analyse, on peut déjà proposer une clé (cela ne veut pas dire qu’elle doit être absolument correcte, tu peux donc classer certaine lettre qui ont la même fréquence un peu comme bon de semble car on s’en occupe après)
- On applique cette clé et on voit si le message est plausible. Cette vérification est déjà possible à l’œil nu, car on repère les enchainements de lettres qui sont probables ou non (avoir un enchainement de ce type « wlm » est peu possible en français par exemple). Mais on va tout de même appliquer un facteur de plausibilité qui va nous permettre de calculer la probabilité que la clé que l’on propose soit valide. Il faut calculer la probabilité des enchainement, « DE » est beaucoup plus plausible que « XJ » son facteur est donc plus élevé.
- On échange ensuite deux lettres et on recalcule le facteur de plausibilité, notre but est d’avoir un facteur de plausibilité le plus grand possible, avec des enchainements plus correctes. Pour cela il faut accepter les changements qui fonctionnent et ceux qui ne fonctionnent pour mieux progresser et trouver la bonne clé (algorithme de Metropolis).
- Après de nombreuses permutations on peut normalement trouvé la bonne clé, soit le bon message !
Le chiffrement le plus sécurise : AES-256
Tu ne trouveras pas ici le moyen de chiffrer ou décrypter avec cette méthode mais il me semblait essentiel de l’évoquer.
L’AES-256 est un algorithme de cryptographie symétrique et sûrement le plus sécurisé du monde. Il fonctionne avec une clé de 256 bits (d’où son nom), et chiffre le message en 14 tours, c’est a dire qu’il chiffre le texte au cours de chacune des 14 étapes/tours, sur des blocs de 16 octets. Il est pratiquement incassable par n’importe quelle méthode de force brute, et est même parfois considéré comme résistant aux attaques quantiques (utilisation des principes de la mécanique quantique pour compromettre la sécurité des systèmes cryptographiques). C’est un moyen de chiffrement qui est utilisé dans les applications gouvernementales et militaires, aux Etats-Unis principalement, ou par les entreprises opérant dans des industries hautement réglementées.
Pour plus d’informations, je te propose d’aller lire cet article .
Petit jeu
Essaye maintenant d’identifier le chiffrement utilisé et de le déchiffrer ! Bonne chance 🎲
Message chiffré : DIYKH HA RSGLCWUZ
Clé : CRYPTOGRAPHIE
(solution : ISSUER SA UT OVARB)
Étudiante au lycée Louis Pasteur, en classe de 1ère spécialité NSI en 2024
74 72 75 73 74 20 69 6e 20 47 6f 64