La cryptographie existe depuis l'antiquité et est utilisée pour transmettre des messages de manière sécurisés. L'utilisation de la cryptographie a largement augmenté avec la Première et Seconde Guerre mondiale où la confidentialité des transmissions était primordiale. De nos jours, nous l'utilisons quotidiennement sans forcement le savoir.
La cryptographie existe depuis l'antiquité et est utilisée pour transmettre des messages de manière sécurisée. L'utilisation de la cryptographie a fortement augmenté avec la Première et Seconde Guerre mondiale où la confidentialité des transmissions était primordiale. De nos jours, nous l'utilisons quotidiennement sans forcément le savoir.
Apparu en 1977, le RSA porte le nom de ses auteurs :
Apparu en 1977, le RSA porte le nom de ses auteurs :
* Ronald **R**ivest
* Ronald **R**ivest
* Adi **S**hamir
* Adi **S**hamir
* Leonard **A**dleman
* Leonard **A**dleman
et sert à chiffrer des données de manière asymétrique, RSA à cet effet utilise une clé publique ainsi qu'une clé privée.
et sert à chiffrer des données de manière asymétrique, le RSA à cet effet utilise une clé publique ainsi qu'une clé privée.
Afin de déchiffrer le message que nous avons intercepté, nous allons utiliser divers outils mathématiques qui, utilisés ensemble permettent de lire le message en clair. Dans la suite de ce rapport, nous allons approfondir ces outils mathématiques en expliquant leur principe ainsi que leurs applications et comment ils nous ont permis de trouver le message ci-dessous.
Afin de déchiffrer le message que nous avons intercepté, nous allons utiliser divers outils mathématiques qui, utilisés ensemble permettent de lire le message en clair. Dans la suite de ce rapport, nous allons approfondir ces outils mathématiques en expliquant leur principe ainsi que leurs applications et comment ils nous ont permis de trouver le message ci-dessous.
...
@@ -20,9 +25,9 @@ _**De toutes façons, les réunions de la Table Ronde c'est deux fois par mois.
...
@@ -20,9 +25,9 @@ _**De toutes façons, les réunions de la Table Ronde c'est deux fois par mois.
## Méthodologie
## Méthodologie
Dans cette partie du rapport, nous allons tout d'abord détailler les outils mathématiques nécessaires pour comprendre la méthode que nous avons utilisé pour casser le chiffrement, puis nous décrirons comment nous avons cassé le chiffrement.
Dans cette partie du rapport, nous allons tout d'abord détailler les outils mathématiques nécessaires pour comprendre la méthode que nous avons utilisée pour casser le chiffrement, puis nous décrirons comment nous avons cassé celui-ci.
Pour rappel, ci-dessous, se trouvent les données que nous avons interceptées. Ces données ont été chiffrées avec le chiffrement *RSA*. Les variables $n$ et $e$ correspondent à la clé publique (nous reviendrons plus tard sur cette notion dans la suite du rapport) et la variable _encrypted_data_ correspond aux données chiffrées qui une fois déchiffrée et regroupés reconstitue le message que nous cherchons.
Pour rappel, ci-dessous, se trouvent les données que nous avons interceptées. Ces données ont été chiffrées avec le chiffrement *RSA*. Les variables $n$ et $e$ correspondent à la clé publique (nous reviendrons plus tard sur cette notion dans la suite du rapport) et la variable _encrypted_data_ correspond aux données chiffrées qui une fois déchiffrées et regroupées reconstituent le message que nous cherchons.
@@ -36,7 +41,7 @@ Nous avons dû utiliser divers outils mathématiques afin de pouvoir déchiffrer
...
@@ -36,7 +41,7 @@ Nous avons dû utiliser divers outils mathématiques afin de pouvoir déchiffrer
#### Brève explication du RSA
#### Brève explication du RSA
RSA est un chiffrement asymétrique, il existe donc toujours deux clés, la première clé est la clé dites publique (utilisé pour le chiffrement) et la deuxième la clé est la clé dites privée (utilisé pour le déchiffrement). L'image ci-dessous décrit le chiffrement et le déchiffrement de données asymétriques. Le "Cipher Text" correspond aux données "encrypted_data" que nous avons interceptées.
RSA est un chiffrement asymétrique, il existe donc toujours deux clés, la première clé est la clé dites publique (utilisée pour le chiffrement) et la deuxième est la clé dites privée (utilisée pour le déchiffrement). L'image ci-dessous décrit le chiffrement et le déchiffrement de données asymétriques. Le "Cipher Text" correspond aux données "encrypted_data" que nous avons interceptées.


...
@@ -48,7 +53,7 @@ Le théorème de Bachet-Bézout nous dit que le PGCD (**P**lus **G**rand **C**om
...
@@ -48,7 +53,7 @@ Le théorème de Bachet-Bézout nous dit que le PGCD (**P**lus **G**rand **C**om
$PGCD(a, b) = ax + by$
$PGCD(a, b) = ax + by$
Ce qui nous intéresse dans cette égalité sont les coefficients $x$ et $y$ qui en tant que tels ne nous serve à rien, mais nous sont utiles pour déterminer l'inverse modulaire d'un nombre que nous expliquerons juste après, mais avant ça il y a une autre notion importante à savoir : *le théorème de Bézout*.
Ce qui nous intéresse dans cette égalité sont les coefficients $x$ et $y$ qui en tant que tels ne nous servent à rien, mais nous sont utiles pour déterminer l'inverse modulaire d'un nombre que nous expliquerons juste après, mais avant cela il y a une autre notion importante à savoir : *le théorème de Bézout*.
Le théorème de Bézout nous dit que deux entiers relatifs $a$ et $b$ sont premiers entre eux (si et) seulement s'il existe deux entiers relatifs $x$ et $y$ tels :
Le théorème de Bézout nous dit que deux entiers relatifs $a$ et $b$ sont premiers entre eux (si et) seulement s'il existe deux entiers relatifs $x$ et $y$ tels :
...
@@ -76,7 +81,7 @@ L'exponentiation modulaire nous sert pour effectuer les calculs de déchiffremen
...
@@ -76,7 +81,7 @@ L'exponentiation modulaire nous sert pour effectuer les calculs de déchiffremen
$14^{108} \pmod{22}$
$14^{108} \pmod{22}$
Comme vous vous en doutez effectuer un tel calcul sur ordinateur est très lent, l'algorithme d'exponentiation modulaire règle ce problème. Afin de calculer le résultat, nous avons besoin de décomposer notre calcul en trois éléments : la base ($14$ pour notre exemple), l'exposant ($108$) et le modulo ($22$).
Comme vous vous en doutez, effectuer un tel calcul sur ordinateur est très lent, l'algorithme d'exponentiation modulaire règle ce problème. Afin de calculer le résultat, nous avons besoin de décomposer notre calcul en trois éléments : la base ($14$ pour notre exemple), l'exposant ($108$) et le modulo ($22$).
La **première étape** consiste à décomposer l'exposant en puissance de 2.
La **première étape** consiste à décomposer l'exposant en puissance de 2.
La **deuxième étape** consiste à construire la table des puissances qui décompose notre calcul. On commence avec le nombre de notre base : $14$, puis on l'élève au carré. $14^2 = 196$ et ensuite on applique notre modulo $196 \equiv 20 \pmod{22}$ et on répète l'opération en reprenant à chaque fois le résultat d'avant. On trouve cette table :
La **deuxième étape** consiste à construire la table des puissances qui décompose notre calcul. On commence avec le nombre de notre base : $14$, puis on l'élève au carré $14^2 = 196$ et ensuite on applique notre modulo $196 \equiv 20 \pmod{22}$ et on répète l'opération en reprenant à chaque fois le résultat d'avant. On trouve cette table :
La clé publique se compose de deux variables, la variable $e$ et $n$ qui sont une partie des données que nous avons interceptées avec le message chiffré. La clé privée se compose elle aussi de deux variables, la variable $d$ (*ce que nous cherchons à découvrir*) et $n$. La variable $n$ est le produit de deux nombres premiers $p$ et $q$, c'est avec ces deux variables composant $n$ ($n$ est un nombre semi-premier) que nous pouvons calculer $d$.
La clé publique se compose de deux variables, les variables $e$ et $n$ qui sont une partie des données que nous avons interceptées avec le message chiffré. La clé privée se compose elle aussi de deux variables, la variable $d$ (*ce que nous cherchons à découvrir*) et $n$. La variable $n$ est le produit de deux nombres premiers $p$ et $q$, c'est avec ces deux variables composant $n$ ($n$ est un nombre semi-premier) que nous pouvons calculer $d$.
$n = pq$
$n = pq$
$d = e^{-1} \pmod{(p-1)(q-1)}$ (il existe forcément un inverse modulaire car $e$ et $(p-1)(q-1)$ sont premiers entre eux)
$d = e^{-1} \mod{(p-1)(q-1)}$ (il existe forcément un inverse modulaire car $e$ et $(p-1)(q-1)$ sont premiers entre eux)
Pour chiffrer les données $M$ avec RSA, il faut utiliser la formule suivante : $M^e \pmod{n}$
Pour chiffrer les données $M$ avec RSA, il faut utiliser la formule suivante : $M^e \pmod{n}$
...
@@ -117,21 +122,21 @@ Pour déchiffrer les données $µ$ avec RSA, il faut utiliser la formule suivant
...
@@ -117,21 +122,21 @@ Pour déchiffrer les données $µ$ avec RSA, il faut utiliser la formule suivant
### Méthode de résolution
### Méthode de résolution
Dans cette section, nous allons séparer notre raisonnement en 4 étapes. Dans la première étape, on cherche à trouver $p$ et $q$ en fonction de $n$, la deuxième étape consiste à calculer la clé privée (variable $d$), la troisième a déchiffrer le message et finalement la dernière étape a reconstituer le message en décodant les données en UTF-8.
Dans cette section, nous allons séparer notre raisonnement en 4 étapes. Dans la première étape, on cherche à trouver $p$ et $q$ en fonction de $n$, la deuxième étape consiste à calculer la clé privée (variable $d$), la troisième à déchiffrer le message et finalement la dernière étape à reconstituer le message en décodant les données en UTF-8.
#### Étape 1 : trouver les variables $p$ et $q$ en fonction de $n$
#### Étape 1 : trouver les variables $p$ et $q$ en fonction de $n$
$n$ étant un nombre semi-premier, deux nombres premiers le composent, ces nombres sont $p$ et $q$.
$n$ étant un nombre semi-premier, deux nombres premiers le composent, ces nombres sont $p$ et $q$.
Pour trouver $p$ et $q$, il faut soit trouver $p$ soit $q$, car s'il on trouve $p$ on peut alors trouver $q$ de la manière suivante : $q = \frac{n}{p}$ et inversement.
Pour trouver $p$ et $q$, il faut soit trouver $p$ soit $q$, car si on trouve $p$ on peut alors trouver $q$ de la manière suivante : $q = \frac{n}{p}$ et inversement.
Donc nous voulons trouver seulement $p$, pour ce faire nous essayons de diviser $n$ par tous les nombre entre $2$ et $\sqrt{n}$, on s'arrête dès que l'on trouve un nombre qui divise $n$ sans reste. Nous nous permettons d'utiliser la force-brute, car on travaille sur un RSA-32 (32 bits), $p$ et $q$ font 16 bits chacun, la valeur maximale d'un nombre 16 bits est $2^{16} - 1 = 65535$ donc si $65535$ est nombre premier on fait au maximum $65535$ tours de boucle (et tests de division) sachant que $65535$ n'est pas un nombre premier notre programme fait de tout manière moins de $65535$ itérations pour trouver $p$.
Donc nous voulons trouver seulement $p$, pour ce faire nous essayons de diviser $n$ par tous les nombres entre $2$ et $\sqrt{n}$, on s'arrête dès que l'on trouve un nombre qui divise $n$ sans reste. Nous nous permettons d'utiliser la force-brute, car on travaille sur un RSA-32 (32 bits), $p$ et $q$ font 16 bits chacun, la valeur maximale d'un nombre 16 bits est $2^{16} - 1 = 65535$ donc si $65535$ est un nombre premier on fait au maximum $65535$ tours de boucle (et tests de division) sachant que $65535$ n'est pas un nombre premier notre programme fait de tout manière moins de $65535$ itérations pour trouver $p$.
Dans notre cas, nous avons trouvé $p = 38039$ et $q = \frac{1653973759}{38039} = 43481$
Dans notre cas, nous avons trouvé $p = 38039$ et $q = \frac{1653973759}{38039} = 43481$
#### Étape 2 : calculer la clé privée (variable $d$)
#### Étape 2 : calculer la clé privée (variable $d$)
Une fois les variables $p$ et $q$ trouvées, on peut facilement calculer la variable $d$ (clé privée) avec la formule suivante : $d = e^{-1} \pmod{(p-1)(q-1)}$
Une fois les variables $p$ et $q$ trouvées, on peut facilement calculer la variable $d$ (clé privée) avec la formule suivante : $d = e^{-1} \mod{(p-1)(q-1)}$
Dans notre cas, nous avons trouvé $d = 679327809$
Dans notre cas, nous avons trouvé $d = 679327809$
...
@@ -145,11 +150,11 @@ Par exemple pour déchiffrer le premier nombre $1511395078$ des données chiffr
...
@@ -145,11 +150,11 @@ Par exemple pour déchiffrer le premier nombre $1511395078$ des données chiffr
Force est de constater que sans l'algorithme d'exponentiation rapide, il est impossible d'effectuer ce calcul rapidement sur ordinateur moderne. On applique le déchiffrement sur toutes les données et obtient une liste de nombres qu'il va falloir encore décoder.
Force est de constater que sans l'algorithme d'exponentiation rapide, il est impossible d'effectuer ce calcul rapidement même sur ordinateur moderne. On applique le déchiffrement sur toutes les données et on obtient une liste de nombres qu'il va falloir encore décoder.
#### Étape 4 (étape final) : décoder les données déchiffrées
#### Étape 4 (étape final) : décoder les données déchiffrées
Il faut donc maintenant décoder ces données en UTF-8 pour reconstituer le message textuel.
Il faut donc maintenant décoder ces données en UTF-8 pour reconstituer le message textuel.
...
@@ -179,16 +184,16 @@ Le but principal de ce travail pratique était de déchiffrer un message chiffr
...
@@ -179,16 +184,16 @@ Le but principal de ce travail pratique était de déchiffrer un message chiffr
* l'exponentiation modulaire ;
* l'exponentiation modulaire ;
* RSA.
* RSA.
Ces outils utilisent l'arithmétique modulaire, cela nous permet de travailler avec des nombres bien plus petits que ceux sortant des calculs bruts.
Ces outils utilisent l'arithmétique modulaire ce qui nous permet de travailler avec des nombres bien plus petits que ceux sortant des calculs bruts et d'éviter le problème de dépassement d'entier.
Pendant la réalisation du projet, on a découvert certaines valeurs très importantes à la résolution de ce dernier. La première fut $p$ que l'on a trouvé en divisant $\frac{n}{p}$ à chaque nombre possible allant de $2 \, à \,\sqrt{n}$, la valeur que nous avons trouvé est $38039$. Par conséquent, nous avons trouvé que $q = \frac{1653973759}{38039} = 43481$
Nous avons trouvé plusieurs valeurs qui ont été essentielles pour le déchiffrement du message. La première fut $p$ que l'on a trouvée en essayant de diviser $n$ par tous les nombres entre $2$ et $\sqrt{n}$, la valeur que nous avons trouvée pour $p$ est $38039$. Par conséquent, nous avons trouvé que $q = \frac{1653973759}{38039} = 43481$
Ensuite, nous devions calculer la clé privée. Pour ce faire, nous avons calculé l'inverse modulaire de $e^{-1} \pmod{(p-1)(q-1)}$ et nous avons trouvé que $d$ vaut $679327809$. Grâce à cette information cruciale, nous avons pu déchiffrer le message avec la fonction mathématique suivante $µ^d \pmod{n}$. Nous avons appliqué cette formule sur chacune des données chiffrée que nous avions interceptées.
Ensuite, nous devions calculer la clé privée. Pour ce faire, nous l'avons calculée avec la formule suivante $d = e^{-1} \mod{(p-1)(q-1)}$ et avons trouvé que $d$ vaut $679327809$. Grâce à cette information cruciale, nous avons pu déchiffrer le message avec cette formule : $µ^d \pmod{n}$. Nous l'avons appliquée sur chacune des données chiffrées que nous avions interceptées, ce qui nous a permis de déchiffrer le message.
Au niveau des améliorations possibles :
Au niveau des améliorations possibles :
* il est clair que notre méthode de force-brute ne fonctionne que sur des RSA avec de petites clés (faibles en bits), nous pourrions appliquer d'autres méthodes pour casser le RSA qui serait bien plus efficace ;
* il est clair que notre méthode de force-brute ne fonctionne que sur des RSA avec de petites clés (faibles en bits), nous pourrions appliquer d'autres méthodes pour casser le RSA qui serait bien plus efficace ;
* on pourrait prendre le projet et le réalisé dans le sens inverse étant donné que nous connaissons comment déchiffrer un message chiffré en RSA-32, nous savons donc aussi chiffrer un message.
* on pourrait prendre le projet et le réaliser dans le sens inverse étant donné que nous connaissons comment déchiffrer un message chiffré en RSA-32, nous savons donc aussi chiffrer un message.
Pour conclure, nous avons pu déchiffrer le message que nous avons intercepté en appliquant nos connaissances sur le fonctionnement du chiffrement RSA et des outils mathématiques qui l'entourent.
Pour conclure, nous avons pu déchiffrer le message que nous avons intercepté en appliquant nos connaissances sur le fonctionnement du chiffrement RSA et des outils mathématiques qui l'entourent.