TP RSA - LISIC

publicité
TP/Projet : L’algorithme RSA
Introduction
Dans ce TP/Projet nous allons implémenter l’algorithme RSA.
Le système de chiffrement RSA a été inventé par trois mathématiciens :
Ron Rivest, Adi Shamir et Len Adleman, en 1977.
L’algorithme RSA est un outil puissant permettant de chiffrer des données personnelles. Il est aujourd’hui l’algorithme de chiffrement le plus utilisé
(cartes bancaires, transactions, messageries, ...).
Ce TP/Projet ca s’organiser en trois partie :
— Génération des clés.
— Chiffrement.
— Déchiffrement.
Le résultat attendu est le même que la démonstration faite en cours. Le
choix du langage est laissé libre mais une préférence est donnée au langage
C.
Rappel du cours sur le fonctionnement global
Création des clés
1. Choisir deux nombres premiers p et q.
2. Calculer n = p ∗ q et φ = (p − 1)(q − 1)
3. Choisir e premier avec φ
4. Calculer d, inverse de e modulo φ (utliser l’algorithme d’euclide étendu).
Le couple (n, e) est la clé publique, et le couple (n, d) est la clé privée.
Les cofficients de Bézout
Etienne Bézout a démontré que deux nombres a et b sont premiers entre
eux, si et seulement s’il existe des solutions u et v telles que a ∗ u + b ∗ v = 1
(avec u et v entiers). Dans notre cas, φ et e sont premiers entre eux, nous
cherchons donc u dans l’équation e ∗ u + φ ∗ v = 1. Ces valeurs sont appelées
coefficients de Bézout.
1
L’algorithme d’euclide étendu
L’algorithme d’euclide étendu permet, à partir de deux entiers de calculer
non seulement le PGCD de ces deux nombres mais également un des couples
(u, v) de l’équation précédente.
L’algorithme est le suivant :
(int r, int u, int v) = euclide(int a, int b) {
// r = PGCD(a, b) et r = au + bv
r = a; u = 1; v = 0;
int rp = b; int up = 0; int vp = 1;
int q, rs, us, vs;
while (rp != 0)
q = r /
rs = r;
r = rp;
rp = rs
}
return (r,u,v)
{
rp;
us = u; vs = v;
u = up; v = vp;
- q * rp; up = us - q * up; vp = vs - q * vp;
}
Dans notre cas, 2 < d < φ, donc si d ne convient pas il faut simplement
lui ajouter φ.
Chiffrement
Chiffrer chaque caractère c du texte avec caractère chiffré = ce mod n.
Déchiffrement
Déchiffrer chaque caractère c du texte avec caractère déchiffré = cd
mod n.
Remarques
Quels sont les deux problèmes résultants de cette implémentation ?
Corriger votre programme en conséquence.
2
Téléchargement