Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

choix de e dans RSA

1 réponse
Avatar
Antoine L.
Salut

Dans RSA, supposons que j'ai mes deux nombres p,q , premiers.
On a le module RSA qui vaut: n= p.q
Il faut ensuite choisir un nombre e, premier avec phi(n)=(p-1).(q-1)
Il n'y a aucune indication sur le choix de e (je lis: Intro à l'algo)
Comment le choisit-on ? On prend 3, et on vérifie que not(3 | phi(n)) ?,
etc... sinon on essaie le suivant ?

L'étape suivante, c'est le calcul de d, tel que: d.e = 1 (mod phi(n))
Ici c'est une résolution d'équation linéaires modulaires ? Ah oui ca
utilise Euclide-étendu, un algorithme qui s'éxecute en O(log(n))

Est-ce que le choix de e, (c'est l'exposant public son nom?), a une
influence sur la sécurité ?
Si on le prend petit, l'application de la clef publique sera-t'elle
plus rapide ? P(M)=M^e (mod n). En fait l'algo employé pour
l'exponentiation modulaire s'exécute en O(lg b), b est l'exposant; donc
ca a l'air très bon a priori, à moins qu'il y ait des coûts très élevés
dûs aux grands entiers?

Egalement, s'il est petit, est-ce qu'il rend la réversibilité de
l'opération moins coûteuse ?
P(M) = M^e (mod n)
Donc si on arrive à trouver un nombre N tel que N^e = P(M), alors on a
trouvé M. Est-ce que c'est ça le logarithme discret ?



--
antoine .
A. NO!
Q. Should I top-post?

1 réponse

Avatar
pornin
According to Antoine L. :
Dans RSA, supposons que j'ai mes deux nombres p,q , premiers.
On a le module RSA qui vaut: n= p.q
Il faut ensuite choisir un nombre e, premier avec phi(n)=(p-1).(q-1)
Il n'y a aucune indication sur le choix de e (je lis: Intro à l'algo)
Comment le choisit-on ? On prend 3, et on vérifie que not(3 | phi(n)) ?,
etc... sinon on essaie le suivant ?


On choisit habituellement e petit et avec un "poids de Hamming" (nombre
de bits à 1 dans l'écriture en base 2) faible : le but est d'accélérer
les opérations mettant en jeu l'exposant public (chiffrement, et
vérification d'une signature). Par ailleurs, certaines implémentations
ont du mal à gérer les exposants publics qui dépassent une certaine
taille (par exemple, le code cryptographique inclus dans Windows ne
sait pas gérer les "e" de plus de 32 bits...).

Quand on fabrique la clé, on fait comme ça :
1. on choisit e arbitrairement
2. on choisit p nombre aléatoire de la taille recherchée (512 bits si on
veut un module de 1024 bits)
3. si e n'est pas premier avec p-1, on retourne en 2.
4. si p n'est pas premier, on retourne en 2.
5. on choisit q nombre aléatoire dans le bon intervalle (il faut que p*q
ait la taille de module recherchée)
6. si e n'est pas premier avec q-1, on retourne en 2.
7. si q n'est pas premier, on retourne en 2.

et voilà. Pour que les étapes 3 et 6 n'échouent pas trop souvent, le plus
simple est de choisir un "e" qui soit en plus un nombre premier. Les choix
usuels sont 3, 17 et 65537 (respectivement 11, 10001 et 10000000000000001
en binaire), qui sont des nombres premiers.


L'étape suivante, c'est le calcul de d, tel que: d.e = 1 (mod phi(n))
Ici c'est une résolution d'équation linéaires modulaires ? Ah oui ca
utilise Euclide-étendu, un algorithme qui s'éxecute en O(log(n))


O((log n)^2) (quadratique en la taille du module).


Est-ce que le choix de e, (c'est l'exposant public son nom?), a une
influence sur la sécurité ?


Il existe une "attaque" dans le cas de e très petit : si un même
message m est chiffré avec RSA par rapport à e clés publiques utilisant
l'exposant e (par exemple 3 clés publiques ayant l'exposant public 3),
alors on peut reconstituer le message sans connaître aucune des clés
privées. Dans la pratique, cette attaque n'est pas applicable, parce
qu'on ne chiffre jamais un message "tel quel" : on applique un "padding"
comportant des octets aléatoires, ce qui fait que ce n'est pas le même
entier qui est envoyé en entrée des différentes clés publiques.

À part ça, il semblerait que la taille de l'exposant public n'influe
pas notablement sur la sécurité. Je ne sais pas si c'est prouvé.


Si on le prend petit, l'application de la clef publique sera-t'elle
plus rapide ? P(M)=M^e (mod n). En fait l'algo employé pour
l'exponentiation modulaire s'exécute en O(lg b), b est l'exposant; donc
ca a l'air très bon a priori, à moins qu'il y ait des coûts très élevés
dûs aux grands entiers?


C'est O(log b) multiplications modulaires, chacune ayant un coût en
O((log n)^2) (sauf finasseries complexes, peu rentables pour des nombres
de quelques milliers de bits). L'optimisation des opérations sur la
clé publique est importante, surtout quand ces opérations doivent être
réalisées par des matériels peu puissants (genre des cartes à puces).


P(M) = M^e (mod n)
Donc si on arrive à trouver un nombre N tel que N^e = P(M), alors on a
trouvé M. Est-ce que c'est ça le logarithme discret ?


Non. Le logarithme discret, c'est : étant donnés g, p et g^x mod p,
trouver x.


--Thomas Pornin