Skip to content
Snippets Groups Projects
Commit f1d3d65b authored by Florian Burgener's avatar Florian Burgener
Browse files

Rapport fichiers

parent d140004d
Branches
No related tags found
No related merge requests found
# Travail Pratique RSA
Cours : ISC_121 - 2021-2022
Groupe : 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é. Cette manière de faire a surtout vu le jours en période de guerres, où les informations étaient primordiales afin de gagner les divers conflits entre états et / ou groupe de personnes.
Apparu en 1977, le RSA qui porte son nom à ses auteurs :
* Ronald Rivest
* Adi Shamir
* Leonard Adleman
et sert de méthode d'encryption de données textes. Son fonctionnement est asymétrique, par conséquent, il utilise une clef publique ainsi qu'une clef privée.
Dans notre cas, afin de déchiffrer le message chiffré transmis par email, nous allons utiliser diverses méthodes mathématiques vues en cours.
Dans la suite de ce document, nous allons approfondir ces méthodes mathématiques en expliquant en quoi elles nous aident et comment nous les avons implémentées de manière algorithmique. Pour terminer, nous allons vous montrer les résultats obtenus par le biais de notre méthode de résolution en concluant le projet.
## Méthodologie
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.
Ci-dessous, se trouve les données que nous avons interceptées, ces données correspondent à un chiffrage RSA :
| 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
Nous avons dû 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és `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`).
On va ensuite itérer tant que le `reste actuel` est plus grand que 0. Dans chaque itération on va ajouter au `tableau des restes` le `reste de la division entière` de l'avant dernier et du dernier élément de l'index courant.
$`r[i - 2] mod\, r[i - 1]`$
Si le reste à l'indice actuel est plus grand que 0, alors on ajoute au tableau des `x` et `y` les calculs suivants :
$`x[i - 2] - q[i] * x[i - 1]`$
$`y[i - 2] - q[i] * y[i - 1]`$
Pour terminer, on retourne les deux derniers points stockés en `x` et `y`.
#### Inverse modulaire
Pour calculer l'inverse modulaire on utilise le chiffre à inverser modulairement, nommé `a`, et le chiffre modulaire, nommé `n`.
Il faut en premier temps récupérer les coefficients de Bézout de `a` et `n`.
Chaque nombre possède au maximum un seul inverse modulaire, mais il se peut qu'il n'en ait pas.
Une fois récupérés on vérifie que le produit de `a` et du premier coefficient de Bézout modulo `n` est égal à 1.
$`a * coefficients[0] mod\, n`$
Si c'est le cas, cela signifie qu'on a trouvé l'inverse modulaire que l'on va ensuite retourner.
$`coefficients[0] mod\, n`$
#### 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.
La premier étape c'est de décomposer l'`exposant` en puissance de 2.
$`64+32+8+4=108`$
La deuxième étape consiste à construire la table des puissances. Pour cela on met en puissance la `base` par chaque puissance de 2 jusqu'à la dernière calculée précédemment (dans notre exemple $1$ jusqu'à $64$).
```
14^1 = 14
14^2 = 14² = 196 => 20
14^4 = 20² = 400 => 4
14^8 = 4² = 16 => 16
14^16 = 16² = 256 => 14
14^32 = 14² = 196 => 20
14^64 = 20² = 400 => 4
```
La troisième étape on reprend la décomposition de l'étape 1 et on calcul cette dernière à partir du tableau de l'étape 2.
$`14^{108} = 14^{64} * 14^{32} * 14^8 * 14^4`$
$`14^{108} mod\, 22 ≡ (4 * 20 * 16 * 4) mod\, 22 ≡ 5120 mod\, 22`$
Le résultat de notre exemple est donc $`5120 mod\,22 = 16`$
Dans un premier temps, on va vérifier si l'`indice modulaire` est égal à 1 et si c'est le cas on retourne 0 car il n'est pas possible de calculer la puissance modulaire dans ce cas de figure.
On initialise le résultat à 1 et on effectue une division entière de la `base` par l'`indice modulaire` que l'on va stocker directement dans 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.
## Résultat
- Présentation de votre réalisation.
### Sortie
En appliquant notre méthode de résolution aux données fournies par email. Voici le message déchiffré :
`De toutes façons, les réunions de la Table Ronde c'est deux fois par mois. Donc, si le mec il dit après-demain à partir de dans deux jours, suivant s'il le dit à la fin du mois, ça reporte.`
### 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
La raison pour laquelle on arrive à décoder un message aussi rapidement est due à l'utilisation des mathématiques modulaires. À l'aide du modulo, on travaille avec des petits chiffres ce qui réduit la complexité des calculs que doit faire la machine.
## Conclusion
- Rappel de votre réalisation.
- Résumé des résultats importants.
- Ouverture sur la suite :
- Quelles améliorations sont possibles ?
- Comment poursuivre le travail ?
- Comment l'intégrer dans un cadre plus large ?
Voir le rapport dans le dossier "rapport"
\ No newline at end of file
# Travail Pratique RSA
Cours : ISC_121 - 2021-2022
Groupe : 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é. Cette manière de faire a surtout vu le jours en période de guerres, où les informations étaient primordiales afin de gagner les divers conflits entre états et / ou groupe de personnes.
Apparu en 1977, le RSA qui porte son nom à ses auteurs :
* Ronald Rivest
* Adi Shamir
* Leonard Adleman
et sert de méthode d'encryption de données textes. Son fonctionnement est asymétrique, par conséquent, il utilise une clef publique ainsi qu'une clef privée.
Dans notre cas, afin de déchiffrer le message chiffré transmis par email, nous allons utiliser diverses méthodes mathématiques vues en cours.
Dans la suite de ce document, nous allons approfondir ces méthodes mathématiques en expliquant en quoi elles nous aident et comment nous les avons implémentées de manière algorithmique. Pour terminer, nous allons vous montrer les résultats obtenus par le biais de notre méthode de résolution en concluant le projet.
## Méthodologie
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.
Ci-dessous, se trouve les données que nous avons interceptées, ces données correspondent à un chiffrage RSA :
| 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
Nous avons dû 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és `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`).
On va ensuite itérer tant que le `reste actuel` est plus grand que 0. Dans chaque itération on va ajouter au `tableau des restes` le `reste de la division entière` de l'avant dernier et du dernier élément de l'index courant.
$`r[i - 2] mod\, r[i - 1]`$
Si le reste à l'indice actuel est plus grand que 0, alors on ajoute au tableau des `x` et `y` les calculs suivants :
$`x[i - 2] - q[i] * x[i - 1]`$
$`y[i - 2] - q[i] * y[i - 1]`$
Pour terminer, on retourne les deux derniers points stockés en `x` et `y`.
#### Inverse modulaire
Pour calculer l'inverse modulaire on utilise le chiffre à inverser modulairement, nommé `a`, et le chiffre modulaire, nommé `n`.
Il faut en premier temps récupérer les coefficients de Bézout de `a` et `n`.
Chaque nombre possède au maximum un seul inverse modulaire, mais il se peut qu'il n'en ait pas.
Une fois récupérés on vérifie que le produit de `a` et du premier coefficient de Bézout modulo `n` est égal à 1.
$`a * coefficients[0] mod\, n`$
Si c'est le cas, cela signifie qu'on a trouvé l'inverse modulaire que l'on va ensuite retourner.
$`coefficients[0] mod\, n`$
#### 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.
La premier étape c'est de décomposer l'`exposant` en puissance de 2.
$`64+32+8+4=108`$
La deuxième étape consiste à construire la table des puissances. Pour cela on met en puissance la `base` par chaque puissance de 2 jusqu'à la dernière calculée précédemment (dans notre exemple $1$ jusqu'à $64$).
```
14^1 = 14
14^2 = 14² = 196 => 20
14^4 = 20² = 400 => 4
14^8 = 4² = 16 => 16
14^16 = 16² = 256 => 14
14^32 = 14² = 196 => 20
14^64 = 20² = 400 => 4
```
La troisième étape on reprend la décomposition de l'étape 1 et on calcul cette dernière à partir du tableau de l'étape 2.
$`14^{108} = 14^{64} * 14^{32} * 14^8 * 14^4`$
$`14^{108} mod\, 22 ≡ (4 * 20 * 16 * 4) mod\, 22 ≡ 5120 mod\, 22`$
Le résultat de notre exemple est donc $`5120 mod\,22 = 16`$
Dans un premier temps, on va vérifier si l'`indice modulaire` est égal à 1 et si c'est le cas on retourne 0 car il n'est pas possible de calculer la puissance modulaire dans ce cas de figure.
On initialise le résultat à 1 et on effectue une division entière de la `base` par l'`indice modulaire` que l'on va stocker directement dans 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.
## Résultat
- Présentation de votre réalisation.
### Sortie
En appliquant notre méthode de résolution aux données fournies par email. Voici le message déchiffré :
`De toutes façons, les réunions de la Table Ronde c'est deux fois par mois. Donc, si le mec il dit après-demain à partir de dans deux jours, suivant s'il le dit à la fin du mois, ça reporte.`
### 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
La raison pour laquelle on arrive à décoder un message aussi rapidement est due à l'utilisation des mathématiques modulaires. À l'aide du modulo, on travaille avec des petits chiffres ce qui réduit la complexité des calculs que doit faire la machine.
## Conclusion
- Rappel de votre réalisation.
- Résumé des résultats importants.
- Ouverture sur la suite :
- Quelles améliorations sont possibles ?
- Comment poursuivre le travail ?
- Comment l'intégrer dans un cadre plus large ?
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment