Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Après avoir créé les clés publique et privée, nous allons voir comment fait-on pour chiffrer un message quelconque (texte / chiffres ...) grâce au système RSA...
Vous vous doutez surement que l'on va utiliser des chiffres pour chiffrer nos messages. Il va donc falloir trouver un moyen d'associer à chaque caractère un nombre. J'ai deux solutions à vous proposer :
- Remplacer chaque caractère par sa position dans l'alphabet ;
- Remplacer chaque caractère par sa valeur dans la table.ASCII
Quelle solution prendre ?
Chacune des deux solutions a son avantage et son inconvénient. L'avantage de la solution 1) est qu'elle nous permet de gérer de très petits nombres (de 0 à 25), ce qui serait pratique pour les calculs. Son inconvénient découle directement de son avantage, on ne peut gérer que 26 caractères (donc pas de majuscules, pas d'espaces, pas de chiffres, pas d'accents...) Bref, vous avez compris ce n'est pas la meilleure solution pour nous, qui voulons chiffrer n'importe quel caractère.
Nous allons donc choisir la deuxième solution qui nous permet de gérer énormément de caractères, avec des chiffres, des espaces, des accents, etc...
Bien, passons à la suite
Pour chiffrer nos messages, nous allons principalement utiliser le "modulo" et les "puissances". Ce genre d'opérations n'est pas facile à faire de tête
(à moins d'être un vrai génie
). De plus, nous allons nous servir (malgré nos efforts) de nombres relativement grands. Toutes les calculatrices ne sont pas capables d'effectuer les opérations "modulo" et "puissance" avec de grands nombres. C'est pourquoi, je vous conseille d'installer un petit programme qui va faire tout juste ce que l'on veut. Pas plus, pas moins.
Il est disponible sous GNU/Linux et sous Windows.
- L'installation sous Linux se fait de la manière suivante : vous ouvrez une console, et vous y copiez les instructions suivantes :
Si vous n'avez pas installé GMP, il faudra le faire

; copiez ce code, il l'installera pour vous :
Code : Console | cd ~
mkdir RSA
cd RSA
wget http://ftp.sunet.se/pub/gnu/gmp/gmp-4.2.2.tar.gz
tar xfz gmp-4.2.2.tar.gz
cd gmp-4.2.2
./configure --enable-cxx
make
make check
sudo make install
cd ..
rm gmp-4.2.2 gmp-4.2.2.tar.gz
cd /usr/lib/
sudo ln -s /usr/local/lib/libgmpxx.so.4 libgmpxx.so.4
cd ~/RSA |
Pour installer le programme de calcul, copiez ces instructions : Code : Console | cd ~
mkdir RSA
cd RSA
wget http://tuxweb79.free.fr/Calculs_RSA_linux.zip
unzip Calculs_RSA_linux.zip
cd Calculs_RSA
make
chmod +x calculs_RSA |
- Pour Windows, téléchargez le programme de calcul ici.
Puis extrayez l'archive. Pour lancer le programme ouvrez l'invite de commandes (Démarrer -> executer -> "cmd"), puis :
Code : Console | cd chemin/vers/le/dossier/du/programme/ |
Voilà, c'est installé ; on va maintenant s'en servir
On va reprendre nos deux camarades, Alice et Bob. La situation est toujours la même, Bob veut envoyer un message chiffré à Alice. Il va donc récupérer sa clé publique. Dans l'annuaire, il voit :
Annuaire RSA
| Personne | Clé publique |
|---|
| ... |
(N, C) |
| Jean |
(N = 187, C = 3) |
| Alice |
(N= 5141, C = 7) |
| Lucie |
(N= 4183, C = 19) |
| ... |
(N, C) |
Il prend la clé publique d'Alice : (N = 5141, C = 7).
(J'ai volontairement repris la même clé que dans le chapitre précédent afin que vous sachiez les valeurs de P Q et tout ce qui s'ensuit)
Etape 1 : remplacement des caractères par leurs valeurs ASCII
Bob veut envoyer le message "Bonjour !" à Alice. On a vu précédemment, qu'on devait travailler avec des nombres. On se réfère à la table
ASCII, et on effectue le remplacement.
Etape 2 : Premier calcul, la puissance
Ensuite, on va élever chaque sous-message (nombre) à la
puissance C (7, dans notre cas)
On a alors :
Etape 3 : Deuxième et dernier calcul : le modulo
Le modulo, c'est quoi ?
Le modulo, c'est le reste de la division euclidienne d'un nombre entier par un autre.
Un exemple de modulo :

Et oui, car dans 16, on peut placer 5 fois 3 (ce qui donne 15

) et il reste 16 - 15 = 1.
Ainsi on note

.
Nous avons effectué notre premier calcul, nous allons maintenant faire le deuxième calcul, à partir des résultats que l'on a obtenu précédemment.
On va calculer le modulo du résultat obtenu précédemment par N (le N de la clé publique)
Il est important d'utiliser le programme de calcul à partir de ce moment, sans quoi vous ne pourrez pas trouver la valeur finale...
On obtient (grâce au programme) :
Pour calculer ces valeurs avec le programme de calcul il suffit de taper et de valider par "entrée" pour voir le résultat :
Code : Console
On a fini
Voilà, plus de calculs à faire. Ainsi avec la clé publique d'Alice (N = 5141, C = 7), le message "Bonjour !" devient "386 1858 2127 2809 1858 1774 737 3675 244"
A partir du moment où le message est chiffré, on ne peut plus le déchiffrer sans l'aide de la clé privée. Même Bob, qui est l'auteur du message, ne peut le déchiffrer (même si en théorie, il connait le message

)
Effectuer le chiffrage grâce à une seule et unique fonction
On peut facilement ramener les deux opérations précédentes en une seule et unique fonction.
La voici :

. Dans cette fonction "x" représente la valeur ASCII du caractère à chiffrer.
Cette fonction élève x à la puissance C et calcule le reste de la division euclidienne de x
C par N.
Ainsi on a :
On utilisera cette fonction dans le programme que l'on réalisera dans la partie pratique du tutoriel.
Voilà, vous savez maintenant comment on chiffre des messages.
Vous pouvez vous entrainer à chiffrer d'autres messages, en créer d'autres clés. Cela peut être intéressant.
Dans le chapitre suivant, nous allons voir comment peut-on faire pour déchiffrer le message.