La cryptologie est étymologiquement la “science du secret”, elle comprend la cryptographie et la cryptanalyse.
La cryptographie est une technique d’écriture qui permet à un individu de transmettre une information à un autre individu sans que l’information de soit intelligible pour quiconque autre (théoriquement). Historiquement, on chiffre ou crypte l’information à l’aide d’un algorithme et d’une clef et on la décrypte avec ce même algorithme et cette même clef. La cryptanalyse est la discipline qui consiste à tenter de décrypter un code sans en connaitre la clef.
La stéganographie est l’art de dissimuler un message dans un autre message, elle n’est pas considérée comme une forme de cryptographie mais elle a souvent été utilisée en complément pour transmettre de manière secrète la clef de déchiffrement d’un message.
Dans cet article, nous allons nous intéresser à l’évolution de la cryptographie à travers l’histoire et l’importance de celle-ci dans notre société d’hyper connectivité.
L’intérêt porté à la transmission d’un message de manière secrète à tout lecteur qui n’en est pas destinataire est probablement aussi ancien que l’écriture elle-même. Des tablettes babyloniennes datant de plus de 2 500 av. J.-C. montrent des variations de caractères peu commune que certains historiens considèrent comme de la cryptographie.
La cryptographie peut se décomposer en trois grands champs qui se distinguent par leurs méthodes (algorithmes) de chiffrement : les chiffrements dits “classique” par transposition et par substitution et le chiffrement dit “moderne” par calculs.
Le chiffrement par transposition
Le chiffrement par transposition consiste à changer l’ordre des caractères d’un message sans changer le sens de chaque caractère. La scytale est un outil qui a été utilisé dans l’antiquité pour chiffrer par transposition des messages militaires. Elle consiste en un bâton de bois autour duquel est entourée une bande de cuir ou de parchemin sur laquelle on va écrire notre message dans la longueur, une fois déroulé, le message n’est plus qu’une suite de caractères mélangés. La clef de ce type de chiffrement n’est autre que diamètre de la scytale.
“En 404 avant J.-C., Lysandre de Sparte vit arriver un messager ensanglanté, l’un des cinq survivants d’un éprouvant voyage depuis la Perse. Le messager tendit sa ceinture à Lysandre qui l’entoura autour de sa scytale et apprit que Phranabaze de Perse s’apprêtait à l’attaquer. Grâce à la scytale, Lysandre se prépara à cette attaque et le repoussa.”
PLUTARQUE / Vies des hommes illustres / Bibliothèque Charpentier, Tome 2 (traduction d’Alexis Pierron)
Le chiffrement par substitution
Le chiffrement par substitution consiste à changer les caractères sans en changer l’ordre, ainsi, tous les “e” d’un message peuvent devenir des “p” mais seront toujours placer au même endroit dans le texte. Le plus célèbre des chiffrements par substitution est le chiffre de César qui consiste à remplacer chaque lettre de l’alphabet par celle qui suit, décalée de n caractères vers la droite ou la gauche où n est la clef de cryptage.
Le nom de ce chiffre lui vient de l’empereur Romain qui l’utilisait couramment pour ces correspondances personnelles.
Le tableau ci-dessous montre un chiffre de César avec un décalage de 3 crans vers la gauche.
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 |
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 |
Ce type de cryptage est assez faible car il assez facile de tester toutes les combinaisons de clef possibles (il n’y en a que 26). On peut compliquer ce type de chiffrement en utilisant une clef de type mot de passe, qui n’est pas un indice de décalage mais un mot que l’on va écrire au début du tableau.
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 |
C | O | D | E | J | A | N | V | I | R | S | T | U | W | X | Y | Z | B | F | G | H | K | L | M | P | Q |
Ainsi, avec “code janvier”, il devient plus difficile de décrypter le message et on peut imaginer changer de clef chaque mois sans avoir à communiquer de nouvelles clefs qui pourraient être interceptées.
La fiabilité et la simplicité de l’algorithme de substitution par mot-clé en ont fait le système de chiffrement préféré pendant des siècles. Durant toute cette période, le sentiment communément admis était que les cryptographes avaient définitivement gagné la partie contre les cryptanalystes.
L’analyse de fréquences
Le 8 février 1587, Marie, ex-reine d’Écosse, était décapité à Londres. Elle était accusée à juste titre de comploter pour faire assassiner la reine Elisabeth d’Angleterre. À charge, ont été découvertes des lettres qu’elle avait écrit suivant un algorithme de cryptage par substitution. Ce que ne savait pas Marie c’est que plus de 700 ans plus tôt, un sage nommé al-Kindi né à Bagdad avait mis au point une méthode permettant de déchiffrer les chiffres par substitution : l’analyse fréquentielle des caractères.
L’analyse de fréquences est un procédé qui se base sur la fréquence des caractères d’un texte et d’une langue. Dans chaque langue, l’utilisation des caractères n’est pas équivalente, en français par exemple on utilise beaucoup plus le A que le Y. En analysant un grand nombre de textes dans une langues, on peut dresser un tableau des fréquences d’occurrences de chaque lettre. En français le tableau est le suivant :
Lettre | Fréquence | Lettre | Fréquence |
A | 8.15 % | N | 7.12 % |
B | 0.97% | O | 5.28 % |
C | 3.15 % | P | 2.80 % |
D | 3.73 % | Q | 1.21 % |
E | 17.39 % | R | 6.64 % |
F | 1.12 % | S | 8.14 % |
G | 0.97 % | T | 7.22 % |
H | 0.85 % | U | 6.38 % |
I | 7.31 % | V | 1.64 % |
J | 0.45 % | W | 0.03 % |
K | 0.02 % | X | 0.41 % |
L | 5.69 % | Y | 0.28 % |
M | 2.87 % | Z | 0.15 % |
Grâce à ces données, on sait que le caractère d’un message écrit en français qui revient le plus souvent a de forte chance d’être un “e”. Le second un “a” ou un “s” et ainsi de suite. De cette manière, en recevant un message codé comme celui présenté dans la figure suivante, il suffit de compter le nombre d’occurrence de chaque caractère, de calculer sa fréquence et de regarder dans le tableau précédent pour savoir de quelle lettre il s’agit.
Quelle est cette chanson française ?
swblb wjknl wmwsk niwvw bqlsk nuwoc kdwub kswbl bwdql fbwps wblbw pjkrl wpbck pdwnp pcnjk dlwvw pjlii lwnpv wnqpw pswbl bwxcn lwmwj wtkbp sqcnb qlsqc nocwv krpvl fjlii wkrpv wkqrp wnwbn qcdwi ktnlp qcpcr ulwik cpplm qiloc wvwpj liilw npvwn qpwpm wdlwr pvcul wiwbi wpbql iwpwr bnwwi iwprw skniw rbocw vwbql vcrjc plulw roclx klbmq cwnpw pjklr ppcnc rjqnu wkcvw tqlpv wiwcn kjqcn sicpt iwcoc wiwul wikcb qcnsw blbwj knlwm wbkbb wrvpb nkrpl pqcpc rwbcl iwvwb qrbql biwdw rbvwi krclb xnqlv wjwnw rdqlw iktki ikvwo cwmkd klpun lbwsq cnbql swblb wxcnl wbcvl pocwi kdlwu wpbcr wtkyc wuzko cwvql ybkcp qiwli vwxiq nlvwj qljwp squzw ppqrb dlvwp wbjwp gwcfs iwcnw rbvwx nqlvm wdlwr pvcul wiwbi wpbql iwpwr bnwwi iwprw skniw rbocw vwbql vcrjc plulw roclx klbmq cwnpw pjklr ppcnc rjqnu wkcvw tqlpv wiwcn kjqcn sicpt iwcoc wiwul wikcb qcnvk rpiks rqjtn wvwbk ncwsw blbwj knlwj wrbwr vpbcm wrkbb wrvps icpoc wbqls qcnsk nblnv krpik srqjt nwvwb kncws wblbw jknlw jwrbw rvpbc mwrkb bwrvp sicpo cwbql sqcns knbln mwdlw rpvcu lwiwb iwpbq liwpw rbnww iiwpr wskni wrboc wvwbq lvcrj cplul wrocl xklbm qcwnp wpjkl rppcn crjqn uwkcv wtqlp vwiwc nkjqc nsicp tiwco cwiwu lwikc bqcn
Le code Python en annexe peut vous aider à décrypter ce message. Cela ne fonctionnera pas du premier coup car le texte n’est pas représentatif des fréquences d’occurrence de la langue française mais en échangeant l’ordre des caractères de la variable “test”, on arrive facilement à décrypter le message.
L’ingéniosité d’al-Kindi a inversé le rapport de forces entre cryptographes et cryptanalyses faisant passer pour un temps le pouvoir aux mains des cryptanalystes.
Le chiffrement par substitution poly-alphabétique
Ce que ne savait pas non plus Marie, ou alors était-ce par fainéantise, c’est que l’analyse fréquentielle d’al-Kindi avait été mis à mal plus d’un siècle plutôt par l’Allemand Johannes Trithemius et le Français Blaise de Vigenère. Les chiffrages par substitution présentés précédemment sont dit mono-alphabétique car chaque lettre et remplacé par une autre mais toujours la même. La subtilité de Vigenère avec son carré est qu’une même lettre peut être remplacé par différentes lettres et ainsi fausser l’analyse fréquentielle.
Carré de Vigenère basique
Le principe du carré de Vigenère est de rechercher la 1ère lettre du texte dans la 1ère ligne, la 2ème dans la seconde et ainsi de suite par exemple le mot “DATA” sera crypté en “DBVD”. Ainsi on remarque que les “A” de “DATA” sont successivement transcrits en “B” puis en “D”.
Le carré de Vigenère tel que présenté ici n’as pas de clef mais on peut lui associer un mot clef de la même manière que pour le chiffre de César, voici un exemple avec le mot clef “CODE”, ici le mot “DATA” serait crypté en “FOWE” :
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 | |
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 |
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 |
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 |
Carré de Vigenère avec “CODE” en mot clef
C’est le Britannique Charles Babbage (1791-1871) qui le premier imagine un système pour décrypter le carré de Vigenère. Il se rend compte que le carré de Vigenère n’est en fait qu’un multiple chiffrage mono-alphabétique. En effet chaque caractère modulo la longueur du mot clef est crypté de la même manière. Dans notre exemple, un “A” écrit en première position sera transcrit de la même manière qu’un “A” écrit en cinquième position. En devinant la longueur du mot clef ici 4, on peut découper le texte en 4 parties qui perdent leur sens mais sur lesquelles on peut faire une analyse fréquentielle et ainsi obtenir le mot clef et décrypter le message.
Babbage a imaginé une machine différentielle permettant d’effectuer ces opérations mais n’a jamais publier ces résultats malgré le côté révolutionnaire que sa machine. En 1863, l’officier prussien Friedrich Krasiski publia une méthode similaire qui rendit le chiffrement poly-alphabétique pénétrable.
Machine différentielle de Babbage, construite d’après ses plans.
Ces deux courants de recherche convergeaient vers un même point et donnèrent naissance à un même processus : la mécanisation.
La cryptographie a pris une importance majeure avec l’augmentation des communications et notamment des télécommunications avec l’invention du télégraphe. Durant la première guerre mondiale, la cryptanalyse a joué un rôle décisif lors des évènements dit du “télégramme Zimmermann” et du déchiffrage du chiffre ADFGVX utilisé par les allemands. L’évènement du télégramme de Zimmermann fut décisif dans la décision des Américains de rentrer en guerre du côté des alliés. La cryptanalyse du chiffre ADFGVX par Georges Panvins en 1918 permis de retenir l’avancée Allemande en France en décryptant les messages interceptés.
Ces évènements ont poussé les nations à développer des machines mécaniques permettant de crypter de manière de plus en plus sophistiqué les messages dont la plus célèbre est la machine Enigma développée par l’Allemand Arthur Scherbius dans les années 1920 et cassée durant la seconde guerre mondiale par Alan Turing considéré comme le père de l’informatique moderne. Le film Imitation Game met en scène la création du Colossus, le premier prototype d’ordinateur ayant permis le décryptage d’Enigma.
Machine Enigma
La cryptographie Moderne
Avec l’essor de l’informatique et des capacités de calcul qui vont avec, la cryptographie a dû et pu se renouveler et mettre en place un système révolutionnaire dans la façon d’envisager la cryptographie, le système de clefs privées et clefs publiques. Jusqu’à récemment, dans tous les systèmes cryptographiques concevables, il fallait absolument que les clefs d’un émetteur et d’un récepteur soient identiques. La clé était donc un secret partagé entre l’émetteur et le récepteur et rendait pour cette raison tous les systèmes vulnérables. Pendant des milliers d’années, la possibilité de chiffrer un message avec une clef et de la déchiffrer avec une autre aurait semblé absurde et c’est pourtant ce que les mathématiques et l’informatique ont permis.
Les algorithmes de chiffrement utilisés aujourd’hui utilisent deux clefs, une clef publique visible par tous et une clef privée plus classique. La transmission d’un message se fait comme suit : l’émetteur récupère la clef publique du récepteur et l’utilise pour chiffrer son message. Le récepteur utilise ensuite sa clef privée pour déchiffrer le message. Cette méthode à l’énorme avantage de ne pas nécessiter de communication préalable entre l’émetteur et le récepteur.
Ce sont les mathématiques qui permettent de créer ces clefs particulières et plus spécifiquement l’arithmétique modulaire et la théorie des nombres par les nombres premiers.
Bibliographie :
- https://www.cnil.fr/fr/comprendre-les-grands-principes-de-la-cryptologie-et-du-chiffrement
- https://www.apprendre-en-ligne.net/crypto/index-crypto-subst.html
- https://ingeniumcanada.org/fr/le-reseau/articles/le-fonctionnement-de-lenigma-revele
- Joan Gómez, Mathématiques, espionnage et piratage informatique Codage et cryptographie RBA Coleccionables
Annexe :
#francais = « esaintrulodcpmvqgfhbxjy »
test = « esaintrulodcpmvqgfhbxjy »
def alKindi(message, francais):
codeFreq = « »
result = « »
freq = []
for i in message:
trouve = False
if i != ‘ ‘ and i != ‘.’ and i != ‘,’ and i != « ‘ » and i != « ? » and i != « é » and i != « à » and i != « ç » and i != « – » :
for j in freq:
if j[0] == i:
trouve = True
j[1] += 1
if not trouve:
freq.append([i, 1])
freq.sort(key=lambda x:x[1], reverse=True)
print(freq)
for i in freq:
codeFreq += i[0]
print(codeFreq)
for i in message:
if i == ‘ ‘ or i == ‘.’ or i == ‘,’ or i == « ‘ » or i == « ? » or i == « é » or i == « à » or i == « ç » or i == « – » :
result += i
else:
for j,k in enumerate(codeFreq):
if i == k:
result += francais[j]
print(result)
alKindi(« swblb wjknl wmwsk niwvw bqlsk nuwoc kdwub kswbl bwdql fbwps wblbw pjkrl wpbck pdwnp pcnjk dlwvw pjlii lwnpv wnqpw pswbl bwxcn lwmwj wtkbp sqcnb qlsqc nocwv krpvl fjlii wkrpv wkqrp wnwbn qcdwi ktnlp qcpcr ulwik cpplm qiloc wvwpj liilw npvwn qpwpm wdlwr pvcul wiwbi wpbql iwpwr bnwwi iwprw skniw rbocw vwbql vcrjc plulw roclx klbmq cwnpw pjklr ppcnc rjqnu wkcvw tqlpv wiwcn kjqcn sicpt iwcoc wiwul wikcb qcnsw blbwj knlwm wbkbb wrvpb nkrpl pqcpc rwbcl iwvwb qrbql biwdw rbvwi krclb xnqlv wjwnw rdqlw iktki ikvwo cwmkd klpun lbwsq cnbql swblb wxcnl wbcvl pocwi kdlwu wpbcr wtkyc wuzko cwvql ybkcp qiwli vwxiq nlvwj qljwp squzw ppqrb dlvwp wbjwp gwcfs iwcnw rbvwx nqlvm wdlwr pvcul wiwbi wpbql iwpwr bnwwi iwprw skniw rbocw vwbql vcrjc plulw roclx klbmq cwnpw pjklr ppcnc rjqnu wkcvw tqlpv wiwcn kjqcn sicpt iwcoc wiwul wikcb qcnvk rpiks rqjtn wvwbk ncwsw blbwj knlwj wrbwr vpbcm wrkbb wrvps icpoc wbqls qcnsk nblnv krpik srqjt nwvwb kncws wblbw jknlw jwrbw rvpbc mwrkb bwrvp sicpo cwbql sqcns knbln mwdlw rpvcu lwiwb iwpbq liwpw rbnww iiwpr wskni wrboc wvwbq lvcrj cplul wrocl xklbm qcwnp wpjkl rppcn crjqn uwkcv wtqlp vwiwc nkjqc nsicp tiwco cwiwu lwikc bqcn « , test)