Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > Algorithmique > La cryptographie asymétrique : RSA > La Théorie > Et le chiffrage, comme ça se passe ? > Lecture du tutoriel

Et le chiffrage, comme ça se passe ?

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)
Avatar
Auteur : TuxWeb
Visualisations : 3 197

Plus d'informations Plus d'informations
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...
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Tout fonctionne avec des chiffres !

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 :
  1. Remplacer chaque caractère par sa position dans l'alphabet ;
  2. 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...

Je vous conseille de mettre ce lien http://www.asciitable.com/ en favori, car nous allons devoir nous y référer assez souvent.


Bien, passons à la suite :p

Un programme de calcul

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.



Voilà, c'est installé ; on va maintenant s'en servir :D

Le chiffrage proprement dit

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
PersonneClé 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.


B \Leftrightarrow 66 \\o \Leftrightarrow 111 \\n \Leftrightarrow 110 \\j \Leftrightarrow 106 \\o \Leftrightarrow 111 \\u \Leftrightarrow 117 \\r \Leftrightarrow 114 \\(espace)  \Leftrightarrow 32 \\! \Leftrightarrow 33\\


Etape 2 : Premier calcul, la puissance



Ensuite, on va élever chaque sous-message (nombre) à la puissance C (7, dans notre cas)
On a alors :


B \Leftrightarrow 66 \Rightarrow 66^7 \\o \Leftrightarrow 111 \Rightarrow 111^7 \\n \Leftrightarrow 110 \Rightarrow 110^7 \\j \Leftrightarrow 106 \Rightarrow 106^7 \\o \Leftrightarrow 111 \Rightarrow 111^7 \\u \Leftrightarrow 117 \Rightarrow 117^7 \\r \Leftrightarrow 114 \Rightarrow 114^7 \\(espace)  \Leftrightarrow 32 \Rightarrow 32^7 \\! \Leftrightarrow 33 \Rightarrow 33^7 \\


Vous pouvez à l'aide du programme de calcul, calculez les valeurs précédentes (66^7, etc..) en tapant simplement

Code : Console
./calculs_RSA 66 7


dans la console et appuyez sur "entrée" pour voir le résultat.

Sous Windows, tapez simplement "calculs_RSA"


Etape 3 : Deuxième et dernier calcul : le modulo



Le modulo, c'est quoi ? o_O

Le modulo, c'est le reste de la division euclidienne d'un nombre entier par un autre.

Un exemple de modulo :



"16 modulo 3" \Leftrightarrow 16mod(3) = 1
Et oui, car dans 16, on peut placer 5 fois 3 (ce qui donne 15 ^^ ) et il reste 16 - 15 = 1.
Ainsi on note 16mod(3) = 1.


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) :



B \Leftrightarrow 66 \Rightarrow 66^7 \Rightarrow (66^7)mod(5141) = 386 \\o \Leftrightarrow 111 \Rightarrow 111^7 \Rightarrow (111^7)mod(5141) = 1858 \\n \Leftrightarrow 110 \Rightarrow 110^7 \Rightarrow (110^7)mod(5141) = 2127 \\j \Leftrightarrow 106 \Rightarrow 106^7 \Rightarrow (106^7)mod(5141) = 2809 \\o \Leftrightarrow 111 \Rightarrow 111^7 \Rightarrow (111^7)mod(5141) = 1858 \\u \Leftrightarrow 117 \Rightarrow 117^7 \Rightarrow (117^7)mod(5141) = 1774 \\r \Leftrightarrow 114 \Rightarrow 114^7 \Rightarrow (114^7)mod(5141) = 737 \\(espace)  \Leftrightarrow 32 \Rightarrow 32^7 \Rightarrow (32^7)mod(5141) = 3675 \\! \Leftrightarrow 33 \Rightarrow 33^7 \Rightarrow (33^7)mod(5141) = 244 \\


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
./calculs_RSA 66 7 5141



On a fini :D



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 : f(x) = x^C mod(N). 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 xC par N.

Ainsi on a :


B \Leftrightarrow 66 \Rightarrow f(66) = 386 \\\cdots \\! \Leftrightarrow 33 \Rightarrow f(33) = 244 \\

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.
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 05/04/2008 à 19:18:34
Modifié : le 20/09/2008 à 12:31:08
Avancement : 100%
Licence : Creative Commons BY-SA

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 89 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.0216s (0.0107s)