diff --git a/README.md b/README.md index 73b171c362258077d62262a3e9b5e17c3d427538..96ec6e1a78fe853fb2f5b61c42613ce4fe10923b 100644 --- a/README.md +++ b/README.md @@ -16,23 +16,21 @@ Pour ce travail pratique en math, il nous a été demandé de créer un programm ## Méthodologie -### Rappel théorique -Voici ci-dessous, l'ensemble des variables utilisées dans notre code. +Dans cette partie du rapport nous allons tout d'abord détailler des rappels théoriques nécessaires afin de pouvoir comprendre ensuite notre méthode de chiffrement du message. -* `n` et `e`, ensemble ils représentent la clé publique -* `messages` représente notre message encodée -* La multiplication de `p` et `q` représente `n` -* `d` représente la clé privée +Ci-dessous, ce trouves les données que nous avons interceptées, ces données correspondent à un chiffrage RSA : -Valeurs de départ : +| Variable | Valeur | +| -------- | ------------------------------------------------------------ | +| n | 1653973759 | +| e | 5249 | +| messages | 1511395078, 260436590, 1630654276, 1190458520, 790492067, 515550941, 297140366, 755589582, 647075331, 1191707844, 901889430, 660956124, 1500654109, 984322720, 1275630738, 1244853107, 1445928913, 1312523810, 265093060, 933013993, 1375592761, 195866064, 534502441, 928270408, 166404031, 621272622, 1304987439, 905393335, 55120151, 772595721, 506609577, 1172751778, 162439707, 233959833, 1468937795, 1358701120, 901889430, 495995733, 1524090698, 1043509086, 934992314, 1545639379, 1061595897, 1348452679, 1135067876, 905393335, 621272622, 55120151, 233959833, 1220119699, 708711266, 517797467, 195866064, 1579814353, 412378626, 498875436, 445485200, 7656659 | -| Variable | Valeur | -|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| n | 1653973759 | -| e | 5249 | -| messages | 1511395078 , 260436590 , 1630654276 , 1190458520 , 790492067 , 515550941 , 297140366 , 755589582 , 647075331 , 1191707844 , 901889430 , 660956124 , 1500654109 , 984322720 , 1275630738 , 1244853107 , 1445928913 , 1312523810 , 265093060 , 933013993 , 1375592761 , 195866064 , 534502441 , 928270408 , 166404031 , 621272622 , 1304987439 , 905393335 , 55120151 , 772595721 , 506609577 , 1172751778 , 162439707 , 233959833 , 1468937795 , 1358701120 , 901889430 , 495995733 , 1524090698 , 1043509086 , 934992314 , 1545639379 , 1061595897 , 1348452679 , 1135067876 , 905393335 , 621272622 , 55120151 , 233959833 , 1220119699 , 708711266 , 517797467 , 195866064 , 1579814353 , 412378626 , 498875436 , 445485200 , 7656659 | +### Rappels théoriques -### Calcul des coefficients de Bézout +Nous avons du utiliser divers outils mathématiques afin de pouvoir déchiffrer le message intercepté, ces outils sont : les coefficients de Bézout, l'inverse modulaire, exponentiation modulaire et le théorème du RSA. + +#### Coefficients de Bézout Pour récupérer les coefficients de Bézout on utilise deux entiers naturels nommé `a` et `b`. En premier lieu on va stocker `a` et `b` dans un `tableau de reste` (`r`), ensuite on va stocker 0 et 1 dans un `tableau de x`, nommé `x`, de même avec 1 et 0 pour un `tableau de y`, nommé `y`, ainsi que 0 et 0 pour le `tableau des quotients` (`q`). @@ -48,7 +46,7 @@ $`y[i - 2] - q[i] * y[i - 1]`$ Pour terminer, on retourne les deux derniers points stockés en `x` et `y`. -### Calcul de l'inverse modulaire +#### Inverse modulaire Pour calculer l'inverse modulaire on utilise le chiffre à inverser modulairement, nommé `a`, et le chiffre modulaire, nommé `n`. @@ -64,7 +62,7 @@ Si c'est le cas, cela signifie qu'on a trouvé l'inverse modulaire que l'on va e $`coefficients[0] mod\, n`$ -### Calcul de la puissance modulaire +#### Exponentiation modulaire Afin de calculer la puissance modulaire, nous avons besoin d'une `base` ($14$), d'un `exposant` ($108$) et d'un `indice modulaire` ($22$) qui sont tous des entiers naturels. @@ -100,6 +98,10 @@ On initialise le résultat à 1 et on effectue une division entière de la `base Ensuite, on itère tant que l'`exposant` est supérieur à 0. À chaque itération on vérifie si l'`exposant` modulo 2 est égal à 1. +#### Chiffrement/déchiffrement RSA + +RSA est un chiffrement asymétrique, il existe donc toujours deux clés, la première la clé publique (chiffrement) et la deuxième la clé privée (déchiffrement). + ### Méthode de résolution Nous avons commencé par calculer les valeurs de `p` et `q` afin de calculer l'exposant `d` à l'aide de l'inverse modulaire de `e` et de l'`indicatrice d'Euler`. Ensuite on va parcourir pour chacun des blocs, nommé `x`, du message on calcule la puissance modulaire de $`x^d\, mod\, n`$ que l'on convertit en bytes afin de le décoder en UTF-8 pour l'ajouter à la version décodée. Une fois tous les `x` parcourus, on affiche la version du message décodée.