Vous êtes sur la page 1sur 14

Exploration mathématique de la cryptographie

Introduction:

Avec la croissance rapide de la popularité des crypto-monnaies telles que Bitcoin et

Ethereum, le public est de plus en plus conscient des mécanismes de la cryptographie qui

assurent la sécurité de ces monnaies. Les algorithmes avec des codes cryptographiques

forts, tels que SHA-256 (utilisé par Bitcoin) et KECCAK256 (utilisé par Ethereum), qui ne

peuvent être piratés que par des ordinateurs puissants en essayant des millions de

possibilités, sont devenus la norme de sécurité cryptographique. D'autre part, la

cryptographie n'était pas encore dominée par la technologie moderne. Pour bien

comprendre les racines de cette science, il faut revenir à la cryptographie classique. La

majorité des codes de cryptographie classique peuvent être résolus à la main et une

catégorie principale comprend les codes de substitution, dans lesquels on retrouve les

fameux codes Caesar et les codes de substitution polygraphique (où des groupes de lettres

sont remplacés par d'autres groupes de lettres) comme les codes de Hill. J'aimerais

comparer ces deux types de codes pour explorer leurs forces et leurs faiblesses dans le

chiffrement de mes propres messages, et également déterminer des méthodes pour

améliorer la sécurité de ces deux codes. En solidifiant mes connaissances dans les racines

de la cryptographie classique, j'ai pu ensuite poursuivre mon intérêt pour les crypto-

monnaies avec une meilleure compréhension de l'histoire du domaine de la cryptographie

qui supporte la technologie. C'est pourquoi j'ai choisi ce sujet.

Le code César :

Le code César est le plus classique des codes de substitution. Pour mieux comprendre, les

termes suivants doivent être pris en considération :

● Texte en clair : Terme qui indique le texte lisible ordinaire avant qu'il ne soit chiffré

en texte chiffré, ou le texte lisible après avoir été déchiffré.1

● Texte chiffré : C'est la sortie illisible d'un algorithme de cryptage qui est obtenue en

utilisant un algorithme appelé chiffrement.2


● Encoder: Indiquer l'acte de transformer un message en suivant les règles d'un code

cryptographique.

● Décoder: Indiquant l'acte de reconstruction d'un message codé pour en extraire le

message d'origine.

● Clé: Information privée qui permettra au destinataire de décoder rapidement un

message en suivant les règles du code.

Le code César est un déphasage de l'alphabet, où nous remplaçons les lettres du texte en

clair par d'autres lettres de l'alphabet afin d'avoir un nouvel alphabet pour écrire le texte

chiffré. Par exemple, le code César classique souvent utilisé par Jules César lui-même était

un code avec un déphasage de 3 :

ABCDEFGHIJKLMNOPQRSTUVWXYZ

DEFGHIJKLMNOPQRSTUVWXYZABC

Dans la première rangée, on voit l'alphabet dans son ordre naturel : c'est l'alphabet avec

lequel le texte en clair sera écrit. La deuxième ligne montre l'alphabet après un décalage de

phase de trois lettres vers la gauche ; c'est l'alphabet correspondant avec lequel le texte

chiffré sera écrit. Si, par exemple, on voulait encoder le message "HELLO", il faut

commencer par prendre la lettre de la deuxième ligne qui correspond au "H" de la première

ligne, qui est "K". En continuant, le texte chiffré complet sera alors "KHOOR". Ainsi si nous

acheminons le message "KHOOR" vers un allié secret, nous pourrions accompagner

l'information de la touche "3", qui indiquera au conteneur de décaler l'alphabet de trois

lettres vers la gauche pour obtenir le courrier d'origine.

Comment déchiffrer mathématiquement le code César ? C'est ici que nous avons dû utiliser

l'opération modulo. appartenant au domaine de l'arithmétique modulaire (qui fait référence

aux mathématiques des nombres entiers qui "cyclent" pour revenir à la valeur initiale après

avoir atteint un certain nombre).

L'opération modulo calcule le reste du quotient d'une division d'entiers. Pour mettre

l'opération sous forme d'équation, une opération modulo équivaut donc à :

x mod y=x−([ x ÷ y ]∗y) (Équation 1)


Quand x ÷ y ne produit pas un quotient qui est un nombre entier, il doit être arrondi à la

valeur entière la plus proche sous le quotient. L'équation utilise donc la partie entière

(représentée par des parenthèses comme ceci[ X ] ), défini comme suit :

un ≤ b<a+1

Oùun est un entier etb est un nombre réel. La valeur deun est désigné comme la partie

entière par défaut. Donc sib = 8,7 nous pouvons voir queun = 8. En bref, [8,7] = 8.

En multipliant la partie entière de x ÷ y par le diviseur y, nous obtiendrons un produit qui

dénote le multiple de y le plus proche de x. Lorsque nous soustrayons cette valeur du

dividende x, le reste de la division x ÷ y est alors obtenu. Ce reste sera le résultat de notre

opération modulo x mod y.

Voici un exemple d'opération modulo utilisant l'équation (1), en remplaçant x par 17 et y par

8 :

17 contre 8=17−([17 ÷8 ]∗8)

17 contre 8=17−(2∗8)

17 contre 8=1

Cela démontre que lorsque nous divisons 17 par 8, nous obtenons un quotient de 2 avec un

reste de 1. Ce reste est donc le résultat de notre opération modulo. Maintenant, pour coder

un code Caesar, nous devons d'abord convertir les lettres du texte en clair en valeurs

numériques. On attribue à chaque lettre de l'alphabet une valeur entière de 0 à 25 dans

l'ordre chronologique, donc A = 0, B = 1, C = 2, etc On utilise la fonction suivante pour

encoder un message.

e ( x)=(x +k ) mod 26 (Équation 2)

k est une constante indiquant la clé du code, donc le nombre de lettres déplacées dans le

décalage alphabétique.

Pour encoder le message, prenez le résultat et affectez-lui la lettre correspondante dans

l'alphabet. Donc, logiquement, si on veut décoder le texte chiffré, il suffit de décaler

l'alphabet en sens inverse du même nombre de lettres :


d ( x )=(x −k )mod 26 (Équation 3)

Pour tester les limites du code de Caesar, j'ai décidé d'appliquer ces deux fonctions à mon

propre post :

Texte en clair : EXPLORE

Clé : 6

Pour convertir les lettres en chiffres de 0 à 25 :

E = 4, X = 23, P = 15, L = 11, O = 14, R = 17

Pour encoder la lettre E = 4 :

Nous remplaçons k par 6 et x par 4 dans l'équation 2 :

e (4 )=(4+ 6)mod 26

e (4 )=10 contre 26

e (4 )=10−([10 ÷ 26]∗26)

e (4 )=10−(0∗26)

et ( 4)=10

10 correspond à la lettre K dans l'alphabet, donc le texte chiffré de la lettre E est K.

Pour coder la lettre X = 23, on remplace k par 6 et x par 23 dans l'équation (2).

e (23)=(23+6) contre 26

e (23)=29 contre 26

e (23)=29−([29÷ 26]∗26)

e (23)=29−(1∗26)

e (23)=3

3 correspond à la lettre D dans l'alphabet, donc le texte chiffré de la lettre X est D. En

continuant ce processus avec chacune des lettres d'EXPLORE, nous obtenons un texte

chiffré complet de 'KDVRUXK'. Je vais maintenant décoder ce message en utilisant la

fonction d(x), ou l'équation (3).

Pour décoder la lettre K (correspondant au chiffre 10), on remplace x par 10 et k par 6 dans

l'équation (3) :
d (10)=(10−6)contre 26

d (10)=4 contre 26

d (10)=4−([4 ÷ 26]∗26)

d (10)=4−( 0∗26)

d (10)=4

4 correspond à la lettre E, donc le texte en clair décodé de la lettre K est E. En continuant ce

processus avec chaque lettre du texte chiffré, j'ai obtenu un texte en clair de "EXPLORE",

qui confirme que les fonctions e(x) et d(x) peut être utilisé pour encoder et décoder

facilement un message en utilisant le code de Caesar.

Les faiblesses du code César :

Lors de mon application du code de César, j'ai réalisé qu'il serait très facile de "déchiffrer" le

code sans connaître la clé en essayant simplement les 26 possibilités différentes pour le

déphasage. Après tout, le code de César n'est qu'un simple déplacement de l'alphabet. De

plus, si le texte en clair est un message de plusieurs mots, nous pouvons raccourcir le

processus en appliquant cette méthode uniquement sur les deux premiers mots et en

essayant les différents déphasages jusqu'à ce que le résultat ait un sens, puis en appliquant

entièrement la même clé au message. Voyant cela, je me suis rendu compte que pour

augmenter la difficulté de "craquer" le code par essais et erreurs, il fallait augmenter le

nombre de possibilités à essayer. Une solution que j'ai envisagée était d'ignorer l'ordre

alphabétique et de réorganiser les lettres au hasard. Dans ce cas, il y en aurait 26 !

Permutations possibles pour la réaffectation des lettres chiffrées, donc environ 4,03 × 10 !"

permutations. C'est beaucoup - un nombre si énorme qu'on ne pourrait jamais déchiffrer le

code sans utiliser un ordinateur ! D'un autre côté, de cela

façon dont la clé du code va devoir être l'ensemble de l'alphabet réarrangé, car il n'y aura

pas de modèle à suivre pour créer une clé comme c'est le cas avec le déphasage

Le code de César. Cela diminuera la sécurité du code. Si le conteneur perd la clé, il serait

possible de décoder le message sans même savoir quel type de code a été utilisé. En plus
de ces problèmes, j'ai vu que toute variation du code de César où l'on remplace une lettre

de l'alphabet par une autre lettre a une faiblesse universelle. Dans la langue anglaise,

certaines lettres sont utilisées beaucoup plus fréquemment que d'autres : par exemple, la

lettre « e » ou la lettre « a ». En fait, lors d'un recensement de tous les articles sur Wikipédia

en anglais en 2008, les résultats ont montré que la lettre "e" est apparue au total 115 024

205 fois, tandis que "a", la lettre avec la deuxième fréquence la plus élevée, n'est apparue

que 67 563 628 fois . Voici un diagramme circulaire des 8 lettres qui sont apparues le plus

fréquemment :

AUTRE

Graphique circulaire montrant la lettre la plus couramment utilisée sur wikipedia

Comme on peut le voir, sur les 26 lettres de l'alphabet, les 8 lettres qui apparaissent le plus

fréquemment ont déjà une fréquence supérieure à 50%. Cela montre un déséquilibre

important dans la langue française quant à l'utilisation de certaines lettres. En bref, les

individus cherchant à intercepter un message de type César peuvent simplement identifier la

lettre qui apparaît le plus souvent dans le texte chiffré et la remplacer par un « e », puis

identifier la lettre qui apparaît la deuxième plus souvent et la remplacer par un « a ». ", et

ainsi de suite. Bien sûr, ce n'est pas une méthode infaillible, mais elle est certainement très
efficace, et dans le domaine de la cryptographie classique, on parle d'analyse fréquentielle.

Comment résoudre cette faiblesse dans la sécurité des codes de substitution tels que le

code Caesar sans compromettre la sécurité du code ? La réponse est le code Hill.

Le code Colline :

Le code Hill a été inventé par Lester S. Hill en 1929, et c'est un code de substitution

polygraphique, c'est-à-dire un code où des groupes de lettres peuvent être remplacés par

d'autres groupes, plutôt que de simplement substituer une seule lettre à une autre comme

c'est le cas. cas avec le code de César. Cela augmente la sécurité du code, car il est moins

facile de trouver les fréquences des groupes de lettres. De plus, le code Hill est un peu

spécial ; son utilisation est liée au domaine de l'algèbre linéaire. Travailler avec un code de

Hill nécessite une certaine connaissance des matrices, qui sont des "tables de nombres

utilisées pour interpréter la théorie des résultats de l'algèbre linéaire". Dans les matrices, les

nombres sont organisés en lignes et en colonnes. Quand on dit qu'une matrice a des

dimensions,un B signifie que la matrice aun rangées etb Colonnes. Par exemple, voici une

matrice de dimensions 2×2 :

Cette matrice comporte 2 lignes et 2 colonnes.

Il faut aussi savoir multiplier des matrices. La matrice de multiplication ne peut se faire

qu'avec deux matrices, et le résultat est toujours une seule matrice. Si nous voulons

multiplier une matrice a×b et une matrice b×c, le produit matriciel aura des dimensions a×c.

Notez que la matrice de multiplication ne peut se faire que si le nombre de lignes de la

première matrice est le même que le nombre de colonnes de l'autre. Lorsque nous

travaillons avec le code Hill, nous ne multiplierons que des matrices avec un nombre égal de

lignes et de colonnes (également appelées matrices carrées) par des matrices avec une

seule colonne (également appelées vecteurs colonnes ou colonnes matricielles, où les

dimensions sont a × 1).

Voici comment multiplier une matrice 2x2 par un vecteur colonne de 2×1 :
(Équation 4)

Ces règles algébriques déterminent que pour multiplier ces deux matrices il faut multiplier

chaque ligne de la première matrice par la colonne entière du vecteur, et additionner les

valeurs. Après cette multiplication, on obtient une matrice de dimensions 2 × 1. Ces règles

peuvent également s'appliquer aux multiplications de matrices 3 × 3 par des vecteurs

colonnes 3 × 1, de matrices 4 × 4 par des vecteurs colonnes 4 × 1, etc. . En suivant cette

règle, voici la matrice de multiplication d'une matrice 3 × 3 par un vecteur colonne 3 × 1 :

(Équation 5)

En plus de la multiplication matricielle, il faut aussi savoir trouver l'inverse des matrices pour

pouvoir décoder un code de Hill. La méthode pour trouver l'inverse d'une matrice est

généralement la suivante :
−1 −1
C =d ∗adj(C) (équation 6)

Dans cette équation (6), C correspond à la matrice qui est la clé du code, C-1 est la matrice

inverse de la matrice C, d est le déterminant de la clé, d-1 est l'inverse

modulaire de d, et adj(C) représente la co-matrice de C. Voici les définitions de ces

termes que j'ai écrit suite à mes recherches :

● Déterminant: une valeur qui peut être calculée à partir des éléments d'une matrice

carrée. Cette valeur révèle certaines propriétés utiles de la matrice.

● Inverse modulaire : comme en arithmétique classique où l'on obtient 1 lorsqu'on

multiplie une valeur x par son inverse 1/x, l'inverse modulaire est une valeur qui,

multipliée par la valeur d'origine, donne 1 (mod Y).

● Matrice inverse : comme en arithmétique classique où l'on obtient 1 lorsqu'on

multiplie une valeur x par son inverse 1/x , la matrice inverse est une matrice qui,

multipliée par la matrice d'origine, donne l'identité de la matrice (équivalente à une


valeur de 1, l'identité matrix est un carré matriciel où la diagonale est remplie de uns

et le reste est rempli de zéros, comme celui-ci :

● Co-matrice : la co-matrice d'une matrice carrée « est une matrice introduite par une

généralisation du calcul de l'inverse d'une matrice A ».

Pour encoder un code Hill, vous devez d'abord créer une matrice de clés, l'élément qui

permettra au destinataire de décoder le message. Cette matrice clé doit avoir un inverse

pour que le décodage soit possible. Le message, converti en vecteurs colonnes avec le

même nombre de lignes que la matrice clé, sera codé en multipliant chaque vecteur colonne

par la matrice clé. Ensuite, nous appliquons l'opération modulo au résultat pour nous

assurer que les valeurs résultantes restent inférieures à 26, afin de pouvoir convertir les

nombres en lettres. Pour illustrer ce processus, j'ai créé ma propre clé (à partir d'une matrice

2x2 pour plus de simplicité) et j'ai également encodé un message :

Ma clé sera HILL. Convertissez ceci en une matrice carrée 2 × 2 pour avoir une clé de

travail, donc :

Ensuite, ces lettres doivent être converties en chiffres (où A = 0, B = 1, C = 2, etc.) pour

pouvoir les traiter :

La matrice carrée résultante sera ma clé. Maintenant, je dois vérifier si cette matrice est

réversible. Pour ce faire, je dois trouver le déterminant de la matrice. Voici une méthode

générale pour trouver le déterminant d'une matrice carrée 2×2 :

(Équation 7)
Notez que la notation a changé : les parenthèses sont remplacées par des tirets, puisque

cet élément représente le déterminant et non la matrice carrée. Maintenant, je remplace a,

b, c et d par 7, 8, 11 et 11 respectivement dans l'équation (7) :

Comme nous ne voulons travailler qu'avec des valeurs comprises entre 0 et 25 pour pouvoir

convertir le résultat en lettres de l'alphabet, nous avons dû appliquer l'opération modulo à -

11 :

−11 contre 26=15

Le déterminant de cette matrice clé est donc 15. Les règles indiquent que pour être

inversible, le déterminant de la matrice ne peut pas être nul, et ne peut pas avoir de facteur

commun avec le nombre avec lequel on opère l'opération modulo (donc 26 dans ce cas ).

Heureusement, puisque 15 remplit ces deux critères, nous pouvons voir que notre matrice

clé est inversible !

Maintenant, je vais choisir un message en clair et le convertir en vecteurs colonnes

numériques :

Puisqu'il y a un nombre impair de lettres dans le message, la convention dit que nous

devons remplir la case vide avec un X. Après cela, j'ai multiplié chaque vecteur colonne par

la matrice clé d'origine en suivant la méthode générale de multiplication matricielle telle

qu'elle est donnée dans l'équation (4):


Ensuite, pour pouvoir convertir ce message encodé en lettres alphabétiques, j'applique

l'opération modulo pour chaque nouveau vecteur colonne :

Donc mon résultat est :

J'obtiens alors un texte chiffré PJHIYKRU.

Le processus de décodage d'un code de Hill est beaucoup plus difficile, car nous devions

trouver l'inverse de la matrice clé. Pour comprendre ce concept, on peut prendre l'analogie

de l'arithmétique classique : lorsque l'on multiplie un produit par l'inverse (inverse) de l'un

des facteurs d'origine, on obtient l'autre facteur, puisque l'inverse fonctionne comme une

division. Il en est de même avec l'inverse de la matrice clé : en multipliant celle-ci par les

produits, qui sont les vecteurs colonnes du texte chiffré, on obtient les vecteurs colonnes du

texte en clair. Considérons d'abord la méthode générale pour trouver l'inverse d'une matrice

clé et analysons les valeurs pour trouver :


−1 −1
C =d ∗adj(C) (Équation 8)

Nous devons obtenir l'inverse modulaire du déterminant et la co-matrice de la matrice clé.

Pour trouver l'inverse modulaire, il faut trouver la valeur (par essais et erreurs) qui, multipliée

par le déterminant, donne 1 mod 26 :


−1
15∗d =1 contre 26

15∗7=105=1 contre 26
−1
d =7

Ensuite, nous devons trouver la co-matrice de la matrice clé. Voici la méthode générale pour

trouver la co-matrice d'une matrice carrée 2×2 :

(Équation 9)

Nous insérons les valeurs de notre matrice de clés :


Ensuite on applique l'opération modulo sur cette matrice pour obtenir des valeurs entre 0 et

25 :

Maintenant, en suivant la méthode générale, nous multiplions l'inverse modulaire du

déterminant par la co-matrice pour obtenir l'inverse de la matrice :

Notre matrice clé inverse est donc ZWBX. J'ai ensuite multiplié la matrice de clé inverse par

les vecteurs colonnes du texte chiffré pour obtenir ceux du texte en clair en suivant la

méthode générale de multiplication matricielle comme indiqué dans l'équation (4):

L'opération modulo est appliquée pour pouvoir convertir les vecteurs colonnes en lettres :

Le texte en clair obtenu est donc BONJOURX ! Nous avons pu encoder et décoder un

message de manière fiable en utilisant le code Hill.

Les faiblesses du code Hill :

Après avoir testé moi-même le code Hill, j'ai trouvé que c'était assez simple à calculer et à

décoder. En utilisant le code de Hill, on peut aussi éliminer simultanément la faiblesse de


l'analyse de la fréquence de certaines lettres qui est présente dans le code de César, du fait

de l'application de l'algèbre linéaire et de la matrice de multiplication. Le tout crée un code

classique très robuste, mais très efficace. Cependant, le code Hill présente encore certaines

faiblesses : en raison de la nature des inverses de matrice, si un intrus pouvait trouver

suffisamment de vecteurs colonnes du texte en clair X et du texte chiffré Y, cet individu

pourrait alors en déduire la matrice clé Z en inversant ZX = Y et en utilisant la formule


−1
Z=YX . D'autre part, le code Hill 2 × 2 n'est pas le seul qui existe - lors de l'augmentation

des dimensions des matrices clés, il devient considérablement plus difficile de trouver la

matrice clé par la méthode que j'ai décrite ci-dessus car le processus en général devient

beaucoup plus difficile. plus complexe. Lorsque j'ai essayé d'encoder et de décoder le texte

en clair CHERRY avec une matrice de clé ALPHABETA, j'ai eu beaucoup plus de difficultés.

Même la multiplication matricielle devient incroyablement complexe lorsque nous n'avons

augmenté les dimensions que de 1 - imaginez la complexité d'un code Hill avec une matrice

clé de 4 × 4 ou 6 × 6.

Conclusion:

En conclusion, nous pouvons voir que le code Caesar et le code Hill ont tous deux leurs

propres forces et faiblesses, qui peuvent être ciblées de manières très différentes. Chacun,

cependant, avait sa propre contribution importante au domaine de la cryptographie

classique. J'ai réalisé que la cryptographie est une science qui fait une intersection

importante entre la théorie mathématique et l'application de la vie réelle; par exemple, même

si le processus d'encodage et de décodage d'un message peut être très mathématiquement

centré, le processus de "craquage" d'un code peut être très imaginatif et logique. La

cryptographie classique peut certes paraître très simple maintenant que l'on peut faire appel

à des outils de technologies complexes et à de puissants algorithmes cryptographiques,

mais ce domaine a joué un très grand rôle dans l'histoire, qu'il s'agisse de la responsabilité

de sécuriser les messages privés de Jules César, ou de la invention d'Enigma, une machine

de cryptage et de décryptage d'informations qui a joué un rôle majeur dans la Seconde


Guerre mondiale. De plus, ce n'est qu'en réfléchissant sur le passé des progrès de ce

domaine que nous pourrions envisager le potentiel de la crypto dans le futur de la sécurité

de l'information. Maintenant que j'en sais plus sur les fondements de la cryptographie, je

suis tellement excité de voir comment le domaine va se développer, à une époque où la

sécurité de l'information devient de plus en plus critique.

Bibliographie:

1. Loshin P, 'Qu'est-ce que le texte en clair? - Définition de la recherche

'(Sécurité, 29 novembre 2021)

<https://www.techtarget.com/searchsecurity/definition/plaintext>

2. 'Qu'est-ce que le texte chiffré? Définition du texte chiffré, signification du texte

chiffré »(La période économique)

<https://economictimes.indiatimes.com/definition/ciphertext>

Vous aimerez peut-être aussi