Un peu d’histoire
L’algorithme du chiffrement RSA a été proposé en 1977 par Ron Rivest, Adi Shamir et Len Adleman; et fût breveté par le MIT en 1983. Celui-ci expira le 21 Septembre 2000.
Utilisation
Le chiffrement par RSA est très utilisé dans le web, et plus particulièrement dans le e-commerce pour les certificats SSL. En effet, cela permet d’authentifier et de signer numériquement une connexion et/ou un document.
Principe
Un petit exemple pour illustrer ce principe:
Alice va créer une paire de clés: une clé privée et une clé publique. Elle donnera la clé publique à Bob, Carole, Denis, … qui l’utiliseront pour chiffrer leurs données confidentielles pour ensuite les renvoyer à Alice. Celle-ci va utiliser sa clé privée pour déchiffrer ces données.
Plus concrètement, c’est comme si:
- Alice donne un coffre-fort ouvert à Bob.
- Bob y glisse son message, referme le coffre, et le rend à Alice.
- Alice étant la seule à posséder la clé pour ouvrir le coffre, elle est donc la seule à pouvoir voir le message de Bob.
Un peu de mathématiques
Les formules
Soit la paire de clés
, respectivement clé publique, clé privée.
Pour chiffrer un message: f(c) : 
Pour déchiffrer un message: g(m) : 
En fait, la fonction f(c) est une fonction trappe (ou à sens unique). Cela signifie que les images de la fonction n’admettent pas d’antécédents évidents. Le seul moyen de les trouver, c’est de connaître la « trappe de la fonction » pour pouvoir l’inverser.
Remarques
En Mathématiques,
vaut en algorithmique
% 
Les algorithmes du PGCD et du test de primalité sont disponibles ici.
Implémentation
- Choisir 2 nombres premiers p et q « suffisamment grands ».
- Calculer n:

- Calculer l’indicatrice d’Euler de n, soit:
%20=%20(p-1)(q-1))
- Prendre
au hasard tel que
soit premier avec
(Petit rappel, cela signifie que leur PGCD = 1)
- D’après le théorème de Bachet-Bézout, e étant premier avec
, il est inversible modulo
; c’est à dire qu’il existe un entier d tel que
. En utilisant l’identité de Bézout qui nous dit que
; on sait que %20+%20(k%20\times%20\varphi)%20=%201)
- On a notre paire de clés:
et )
Chiffrer les données
- On convertit chaque caractères en ASCII et on les met bout à bout.
- On découpe cette chaine en blocs que taille(n) – 1 caractères. Ex: Si n = 1073, un bloc fera 3 caractères.
- On complète le dernier bloc avec des 0, si il fait moins de 3 caractères
- On applique la formule f(c) = m^e mod n et on met bout à bout chaque image de la fonction.
Pour déchiffrer, c’est exactement la même chose, mais en utilisant la clé privée.
Un petit exemple
- On prend 2 nombres
et
aléatoirement: 
- On calcule n:

- L’indicatrice d’Euler
=(29-1)(37-1)=1008)
- On prend
.
n’est pas premier avec
… On en prend un autre
. Nous avons notre clé publique:
.
- On va calculer d:
. Vérification: 71 * 1079 % 1008 = 1. On a maintenant notre clé privée: )
- On va chiffrer « HELLO »: m = ASCII(HELLO) = 7269767679.
- taille(n) – 1 = 3. m = 726 976 767 900
- 726^71 % 1073 = 436
976^71 % 1073 = 822
767^71 % 1073 = 825
900^71 % 1073 = 552
Finalement, le message chiffré devient: 436 822 825 552
- Pour le déchiffrer:
436^1079 % 1073 = 726
822^1079 % 1073 = 976
825^1079 % 1073 = 767
552^1079 % 1073 = 900
On retrouve bien 72 69 76 76 79, soit HELLO.
Laisser une réponse
You must be logged in to post a comment.