Cette méthode, qui tire son nom de ses trois auteurs: Rivest, Shamir et Adelman [40], se fonde sur le fait qu'un algorithme comme celui de Solovay-Strassen [44] dont le principe est donné dans la Table 16 permet assez facilement de savoir si un "grand" nombre entier possède ou non d'autres diviseurs que lui ou l'unité (c'est à dire s'il est "composé" ou s'il est "premier") tandis qu'il est très difficile de factoriser effectivement un nombre composé uniquement de nombres premiers de grande taille.
Soit alors une entité communicante A. Elle choisit d'abord (secrètement)
deux nombres premiers distincts
et
, puis calcule
et
et enfin choisit un nombre
tel que
.
L'entité A calcule alors
tel que
.
L'existence de ce nombre d est assurée par le théorème de Bezout et
on sait le calculer effectivement par l'algorithme d'Euclide.
A fait alors connaître le couple
, qui
constitue ce que l'on appelle la clef publique, ... et bien entendu,
tout le reste est gardé secret. Le couple
constitue ce que l'on appelle la clef privée. Un exemple est donné
Table 17. Si B veut faire parvenir à A le nombre x avec
, il lui envoie :
.
Et A calcule :
.
Le fait que
pour tous les choix de
est une conséquence
du théorème d'Euler et de ce que
n'est pas divisible par
un carré.
Après en avoir décrit le principe, voyons maintenant la "résistance"
de l'algorithme RSA. Deux choses sont claires : il n'a pas été publié
à ce jour de méthode générale pour trouver la clef privée
à partir de la clef publique
qui soit
meilleure que les essais systématiques (soit un ordre de grandeur
de 1E150 essais pour N sur 64 octets...).
Et d'autre part, il est facile de voir que la connaissance d'un couple
permet de factoriser le modulo : la résolution
cryptanalytique du RSA est donc d'une complexité équivalente à celle
de la factorisation d'un nombre composé n.
Or le meilleur algorithme connu pour factoriser un nombre
connu pour être divisible a une complexité en
,
en désignant par
le plus petit facteur premier de
.
Pour un entier de 64 octets, produit de deux "grands"
nombres premiers,
, soit une complexité
en
opérations
sur 64 octets, prenant quelques millions d'années à 1Mop/sec...
Mais d'une part il est peut être erroné d'appliquer des résultats
généraux sur la complexité de la factorisation à des nombres dont
on sait qu'ils sont le produit de deux premiers. Et d'autre part,
on sait que certains choix de
sont désastreux.
Il pourrait y en avoir d'autres.
Donnons un exemple simple. Soit
, produit de deux premiers
et
. Nous convenons de
et posons
,
. On a :
. Soit
.
Comme
, on commence à essayer
qui donne
(à rejeter), puis
...
Et pour
, on trouve
, prouvant que l'on a réussi.
On trouve alors
et
. Moralité :
et
doivent être suffisamment différents.
Une attaque beaucoup plus subtile peut être menée en utilisant le
développement en fraction continue de
ou, mieux, de
(qui sont publics) [50]. Cet algorithme permet de trouver les
fractions qui sont les meilleures approximantes d'un nombre donné.
Or un résultat élémentaire est que, à dénominateur maximal fixé, deux
fractions ne peuvent pas être trop proches sans devenir égales. La
Table 18 indique comment il est possible, sous réserve
de ce que
soit suffisamment petit, d'inférer la valeur
d'une fraction contenant la clef secrète au dénominateur.