Le système RSA

publicité
Le système RSA
Sources : « Histoire des codes secrets » par S SINGH (JC Lattès)
Ce système de codage porte les initiales de ses inventeurs, les mathématiciens américains
Ronald Rivest, Adi Shamir et Leonard Aldeman, du MIT. Leurs idées utilisent des
mathématiques connues depuis longtemps, c’est la combinaison de toutes ces notions qui est
vraiment nouvelle.
Les principes utilisés :
1) Le petit théorème de Fermat : si p est premier, alors pour tout entier n, n p  n est un
multiple de p.
Preuve par récurrence sur n :
Initialisation : 0 p  0  0  0  p vérifiée.
Hérédité : Supposons la propriété vraie pour un certain entier n. Alors
p
(n  1) p  (n  1)   C pk n k  (n  1)
k 0
p 1
 1  n p   C pk n k  (n  1)
k 1
p 1
 n p  n   C pk n k
k 1
p!
est un multiple de p si 1 k  p-1 (car le p du numérateur
k!( p  k )!
ne peut pas se simplifier au dénominateur). n p  n est un multiple de p par hypothèse de
récurrence, donc (n  1) p  (n  1) , somme de multiples de p, est un multiple de p.
L’hérédité est prouvée, et tout baigne.
Il résulte de ce théorème que si n n’est pas un multiple de p, alors n p 1  1 est un multiple de
p (une factorisation et un coup de théorème de Gauss, en utilisant que p est premier, donc que
n, qui n’est pas un multiple de p, est premier avec p).
Or, p étant premier, C pk 
2) On considère la fonction f définie par f ( x)  x k (mod N ) (le reste de la division
Euclidienne de xk par N : sous certaines conditions portant sur k et N que nous allons étudier,
c’est une bijection (bien sûr modulo N), qui perturbe extrêmement les nombres.
Posons N = pq, où p et q sont tous deux premiers, et cherchons k premier avec (p – 1)(q - 1).
Alors, à l’aide de l’algorithme d’Euclide, on détermine u et v tels que ku  ( p  1)( q  1)v  1 .
Il en résulte que ( x k ) u  x ku  x1v ( p 1)( q 1) .
Oui, mais x v ( p 1)( q 1)  ( x p 1 ) v ( q 1) , et comme x p 1  1(mod p) (c’est le petit théorème de
Fermat, p est premier) il en résulte que x ku  x(mod p) .
De même x ku  x(mod q)
Il ne reste plus qu’à appliquer le théorème chinois, qui dit qu’un système de congruences
modulo respectivement p et q est équivalent à une seule congruence modulo pq si p et q sont
premiers entre eux, pour en déduire que x ku  x(mod pq) .
Il en résulte que la fonction f est inversible par la fonction g définie par g ( x)  x u (mod N ) et
donc qu’elle est bijective.
D’autre part, pour inverser f, il faut connaître p et q (car on doit Bezouter k et (p-1)(q-1), ce
qui demande à factoriser N, ce qui est un travail redoutable dès que N est grand.
Pour fixer les idées, il est actuellement assez facile (avec un ordinateur standard) de fabriquer
des nombres premiers de 50 chiffres, mais il est impossible en un temps raisonnable de
décomposer en facteurs premiers un nombre de 100 chiffres (produit de deux précédents)
Pourquoi la fonction puissance modulo N perturbe-t-elle les nombres ? C’est parce que, dès
que le résultat dépasse N, on revient à 0. Ce n’est donc pas croissant, comme la fonction
puissance dans .
Exemple avec de petits nombres : prenons p = 7 et q = 11. Alors N = 77, et (p-1)(q-1) = 60.
On peut prendre k = 13.
Pour élever à la puissance 13, on décompose en somme de puissances de 2 : 13 = 8 + 4 +1.
Cherchons le code de 19 :
19 = 19 (mod 77)
192 = 361 = 4x77 + 53 = 53 (mod 77)
194 = 532 = 2809 = 36x77 + 37 = 37 (mod 77)
198 = 372 = 1369 = 17x77+60 = 60 (mod 77)
et 1913 = 198x194x19 = 60x37x19 = 42180 = 547x77 + 61 = 61 (mod 77)
Le code de 19 est donc 61.
Quelle est la réciproque de la puissance 13 ?
Il faut Euclider 60 et 13, puis Bezouter
60 = 4x13 + 8
1 = 5x(60 – 4x13) – 3x13 = 5x60 – 23x13
13 = 1x8 + 5
1 = 2x8 – 3x(13 – 8) = 5x8 – 3x13
8 = 1x5 + 3
1 = 2x(8 – 5) –5 = 2x8 – 3x5
5 = 1x3 + 2
1 = 3 – (5 – 3) = 2x3 - 5
3 = 1x2 + 1
1=3–2
L’inverse de 13 est donc –23, c’est à dire 37 (attention, il s’agit ici de congruences modulo
60). Vérifions : 13x37 = 481 = 8x60 + 1.
Il en résulte que pour revenir à 19, il faut élever 61 à la puissance 37 (maintenant, les calculs
se font modulo 77).
La vérification est laissée au lecteur.
 x  a(mod p)
3) Preuve du théorème chinois : considérons le système 
, p et q premiers
 x  b(mod q)
entre eux.
On a donc x  a  p  b  q .
Bezoutons p et q : il existe u, v tels que up + vq = 1, donc a = aup + avq et b = bup + bvq.
On a donc aup + avq + p = bup + bvq + q ce qui équivaut à p( + (a – b)u) = q( - (a – b)v)
Comme p et q sont premiers entre eux, on applique le théorème de Gauss : il existe un entier k
tel que  + (a – b)u = kq (et  - (a – b)v = kp).
On a donc  = kq -(a – b)u et x = a + p = a + p(kq -(a – b)u) = a(1 – up) + bup + kpq, ce qui,
compte tenu du Bezout, donne x = avq + bup + kpq.
On a bien obtenu x unique modulo pq.
Il est facile de voir que la solution obtenue répond à la question.
C’est beau l’algèbre…
Téléchargement