diff --git a/README.md b/README.md index 88e06edead4ae42f95cb1db53fc7a0baa40b9132..0e654aff60b421f3993e29e6f07b0994f8d7f3d7 100644 --- a/README.md +++ b/README.md @@ -1 +1,4 @@ -Voir le rapport dans le dossier "rapport" \ No newline at end of file +**Groupe 13** + +Notre rapport en version PDF, se trouve dans le dossier "rapport/rapport.pdf". +Le code se trouve dans le fichier "break_encryption.py". diff --git a/rapport/rapport.md b/rapport/rapport.md index 4b9f269f062e332b879255aa95195554f9346f86..a6a2308c6a9a00688b5f83f6fb91baf459bcd573 100644 --- a/rapport/rapport.md +++ b/rapport/rapport.md @@ -1,5 +1,5 @@ --- -title: Travail Pratique : RSA +title: Travail Pratique : RSA, Groupe 13 author: G. ACKERMANN, F. BURGENER, Q. FASLER, D. GENGA --- @@ -53,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 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*. +Ce qui nous intéresse dans cette égalité sont les coefficients $x$ et $y$ qui nous seront 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 : @@ -67,7 +67,7 @@ L'inverse modulaire est une notion qui nous sert à calculer la clé privée du $au \equiv 1 \pmod{n}$ -L'inverse modulaire pour entier relatif $a$ dans les modulo $n$ existe seulement quand $PGCD(a, n) = 1$, autrement dit $a$ et $n$ doivent être premiers entre eux. +L'inverse modulaire pour un entier relatif $a$ dans les modulo $n$ existe seulement quand $PGCD(a, n) = 1$, autrement dit $a$ et $n$ doivent être premiers entre eux. On peut donc calculer l'inverse modulaire avec : @@ -110,7 +110,7 @@ $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, 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$. +La clé publique se compose de deux variables, les variables $e$ et $n$ qui sont une partie des données que nous avons interceptée 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$ @@ -126,11 +126,9 @@ Dans cette section, nous allons séparer notre raisonnement en 4 étapes. Dans l #### É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 si 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 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$. +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$ @@ -158,7 +156,7 @@ Voici les données déchiffrées : 2123076, 7696244, 544433524, 24934, 7317443, Il faut donc maintenant décoder ces données en UTF-8 pour reconstituer le message textuel. -Par exemple, le nombre $2123076$ correspond aux lettres "De", le nombre 7696244 correspond " tou", etc. Une fois qu'on concatène tous les bouts de chaîne de caractère, on obtient *le précieux message qu'on souhaite déchiffrer depuis le début*. +Par exemple, le nombre $2123076$ correspond aux lettres "De", le nombre $7696244$ correspond " tou", etc. Une fois qu'on concatène tous les bouts de chaîne de caractère, on obtient *le précieux message qu'on souhaite déchiffrer depuis le début*. ## Résultat @@ -172,7 +170,7 @@ _**De toutes façons, les réunions de la Table Ronde c'est deux fois par mois. ### Performances Étant donné que la clé a été générée sur une faible quantité de bits, on peut appliquer la méthode de force-brute pour la résolution de $p$ et $q$. -### Explication +#### Explication La raison pour laquelle on arrive à déchiffrer le message aussi rapidement est due au fait que $n$ est codé sur une faible quantité de bits (32 pour être précis), ce qui nous permet de calculer $p$ et $q$ rapidement. Grâce à l'exponentiation rapide, on peut déchiffrer chaque partie du message rapidement du fait que l'on travaille avec de petits nombres. ## Conclusion diff --git a/rapport/rapport.pdf b/rapport/rapport.pdf index f7fe88d2d20cb081a64041def0dbf0071f7aff81..5a1300bd3d1de0e77755c23330ada892e8687207 100644 Binary files a/rapport/rapport.pdf and b/rapport/rapport.pdf differ