diff --git a/rapport/rapport.md b/rapport/rapport.md index c12d66a6899a80e90dae14b2a984b15b5155b23d..4b9f269f062e332b879255aa95195554f9346f86 100644 --- a/rapport/rapport.md +++ b/rapport/rapport.md @@ -1,3 +1,8 @@ +--- +title: Travail Pratique : RSA +author: G. ACKERMANN, F. BURGENER, Q. FASLER, D. GENGA +--- + # Travail Pratique : RSA Cours : ISC_121 - 2021-2022 @@ -5,14 +10,14 @@ Groupe 13 : Gawen ACKERMANN, Florian BURGENER, Quentin FASLER, Dario GENGA ## Introduction -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 : * Ronald **R**ivest * Adi **S**hamir * 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. @@ -20,9 +25,9 @@ _**De toutes façons, les réunions de la Table Ronde c'est deux fois par mois. ## 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. | Variable | Valeur | | -------------- | ------------------------------------------------------------ | @@ -36,7 +41,7 @@ Nous avons dû utiliser divers outils mathématiques afin de pouvoir déchiffrer #### 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 $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 : @@ -76,7 +81,7 @@ L'exponentiation modulaire nous sert pour effectuer les calculs de déchiffremen $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. @@ -84,7 +89,7 @@ $2^6 + 2^5 + 2^3 + 2^2 = 64 + 32 + 8 + 4 = 108$ $14^{64} * 14^{32} * 14^8 * 14^4 = 14^{108}$ -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 : ``` 14 = 14 @@ -105,11 +110,11 @@ $14^{108} \equiv (4 * 20 * 16 * 4) \equiv 5120 \equiv 16 \pmod{22}$ #### Chiffrement/déchiffrement avec le RSA -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$ -$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}$ @@ -117,21 +122,21 @@ Pour déchiffrer les données $µ$ avec RSA, il faut utiliser la formule suivant ### 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$ $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$ #### É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$ @@ -145,11 +150,11 @@ Par exemple pour déchiffrer le premier nombre $1511395078$ des données chiffr $1511395078^{679327809} \pmod{1653973759} = 2123076$ -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 -Voici données déchiffrées : 2123076, 7696244, 544433524, 24934, 7317443, 539784046, 544433516, 11125618, 6909557, 544435823, 2123108, 1411408236, 7103073, 5382245, 6581871, 660807781, 544502629, 7693668, 6692984, 544434543, 544366960, 6909805, 1142959731, 744713839, 543781664, 2123116, 543384941, 2124905, 544500068, 7499873, 762554563, 1634559332, 2125417, 2138307, 7496048, 544369012, 2123108, 7233892, 6561907, 544765285, 7696234, 539784050, 6911347, 7233910, 661856372, 2124905, 2123116, 544500068, 2138307, 2122092, 544106854, 2127204, 6909805, 2108531, 543270851, 7366002, 7631471, 11877 +Voici les données déchiffrées : 2123076, 7696244, 544433524, 24934, 7317443, 539784046, 544433516, 11125618, 6909557, 544435823, 2123108, 1411408236, 7103073, 5382245, 6581871, 660807781, 544502629, 7693668, 6692984, 544434543, 544366960, 6909805, 1142959731, 744713839, 543781664, 2123116, 543384941, 2124905, 544500068, 7499873, 762554563, 1634559332, 2125417, 2138307, 7496048, 544369012, 2123108, 7233892, 6561907, 544765285, 7696234, 539784050, 6911347, 7233910, 661856372, 2124905, 2123116, 544500068, 2138307, 2122092, 544106854, 2127204, 6909805, 2108531, 543270851, 7366002, 7631471, 11877 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 * l'exponentiation modulaire ; * 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 : * 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. \ No newline at end of file diff --git a/rapport/rapport.pdf b/rapport/rapport.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f7fe88d2d20cb081a64041def0dbf0071f7aff81 Binary files /dev/null and b/rapport/rapport.pdf differ