STH2, Maple 2011
Le système RSA
Le système RSA est une méthode de cryptage de messages. C’est actuellement l’une des méthodes les plus sûres que l’on connaisse et la plupart des transmissions sécurisées utilisent son principe de base.
La méthode est la suivante : Alice souhaite envoyer un message à Bob. Elle veut le coder de telle manière que si quelqu’un intercepte son message, il ne pourra pas ou aura beaucoup de mal à le décoder. Pour cela Bob choisit deux nombres premiers p et q très grands. Il calcule leur produit n = pq et l’indicateur d’Euler ϕ(n) = (p−1)(q −1). Enfin il choisit un entier e < n premier avec ϕ(n) et il détermine un entier d tel que ed = 1 mod ϕ(n). Il transmet les nombres n et e à Alice. Ces nombres ne sont pas secrets et tout le monde peut les connaître : (n, e) est la clé publique de Bob. Alice veut envoyer un message M sous la forme d’un nombre inférieur à n. Elle calcule M1 =Me modn et elle transmet M1 à Bob. Ce dernier calcule alors M2 =M1d modn. Ce nombreM2 est égal àM et le message a bien été transmis.
Explication : l’ensemble des éléments inversibles de Z/nZ est un groupe pour la multiplication. Il est d’ordre ϕ(n). Comme ed = 1 modϕ(n), on peut écrire ed = 1 +kϕ(n). Alors M2 =M1d = (Me)d =M1+ϕ(n) =M Mϕ(n). Or Mϕ(n) = 1 mod n, donc M2 =M mod n. Comme M était inférieur à n, on obtient bien M2 =M.
Sécurité : si quelqu’un intercepte le messageM1, il doit connaîtredpour retrouver M. Mais pour connaître d, il faut connaître ϕ(n) et pour connaître ϕ(n), il faut connaître p et q. Ainsi, réussir à décoder M revient à factoriser l’entier n. Or la factorisation de grands nombres est un problème difficile. Si les nombresp etq sont très grands (de l’ordre de10100), le temps requis par des ordinateurs pour factoriser n est de l’ordre de plusieurs mois.
1
Programmation
1. Écrire un programme puissance(a,b,n) qui calcule ab mod n. Ce programme doit pouvoir fonctionner avec de grandes valeurs de b.
2. Écrire un programme codage(M,n,e) qui code le message M à partir de la clé publique(n, e).
3. Écrire un programme decodage(M1,p,q,e) qui décode un message M1 envoyé avec le programme précédent.
4. Vérifier pour différentes valeurs (petites et grandes) depetqque ce programme permet bien de retrouver le message initial.
Essayer avec p= 11,q = 23 ete= 15. Expliquer.
5. Écrire un programmeespion(M1,n,e) qui décodeM1sans connaîtrepetq(on utilisera les commandesifactor, convert(.,list)etexpand). Pour quelles valeurs dep etq ce programme va-t-il nécessiter plus de dix secondes ?
Le système RSA repose sur la difficulté de factoriser les grands nombres. Nous allons vérifier cette assertion.
6. Écrire un programme qui évalue le temps que met Maple à factoriser un produit de deux nombres premiers.
7. Représenter graphiquement l’évolution de ce temps en fonction de la taille (nombre de chiffres) des nombres à factoriser.
Pour que le système RSA soit réalisable, il faut pouvoir trouver de grands nombres premiers, et donc disposer de tests de primalité rapides. Nous allons vérifier cela.
8. Écrire un programme qui évalue le temps que met Maple à tester la primalité d’un nombre.
9. Représenter graphiquement l’évolution de ce temps en fonction de la taille des nombres à tester.
10. Écrire un programme qui teste la primalité d’un nombre et comparer sa vitesse d’exécution à celle de isprime.
Fonctions Maple utiles : mod, ifactor, isprime, time, listplot
2