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 x1v ( 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…