320 likes | 572 Vues
Primalité et génération de nombres premiers. Motivation. La plupart des algorithmes à clés secrètes utilisent des nombres premiers de grande taille. Exemple: dans RSA, le modulo est le produit de deux nombres premiers.
E N D
Motivation • La plupart des algorithmes à clés secrètes utilisent des nombres premiers de grande taille. • Exemple: dans RSA, le modulo est le produit de deux nombres premiers. • Dans les cryptogrammes El-Gamal, LUC, ECC, etc … on utilise aussi des nombres premiers de grande taille.
Nombres premiers et nombres composés • Un nombre premier est un nombre divisible seulement par 1 et par lui-même (1 n’est pas premier). • Exemple: 7 est premier, 9 est un nombre composé. • Théorème d’Euclide: Il y a une infinité de nombres premiers.
Densité • Théorème de LaVallée-Poussin: Le nombre de nombres premiers inférieur à N est environ égal à N/ln(N). • Un nombre inférieur à N pris au hasard a une probabilité de 1/ln(N) d’être premier. • Exemple: un nombre de 100 chiffres décimaux a une chance sur 230 d’être premier. • Il y a « relativement » beaucoup de nombres premiers.
Primalité: la préhistoire • Crible d ’Erathostène: pour savoir si N est premier, on essaie de le diviser par tous les nombres compris entre 2 et N. • Critère impraticable dès que N est trop grand. • Chine (200 av. JC): Si 2N-1 1 (mod. N) alors N est premier. • Autres travaux: nombres idéonaux (Euler). • Avant Lehmer, il n’existait pas de critères efficaces.
Primalité: l’histoire • Lehmer (186?): deux critères viables qui nécessitent la factorisation soit de N-1, soit de N+1. • Pocklington (1914): perfectionne le critère de Lehmer (une factorisation incomplète de N-1 suffit). • Brillhart (1973): factorisation encore plus succinte et croisement des critères N-1 et N+1. • Autres travaux (1976-1978): Judd, Williams, Bach, … Critères utilisant des factorisations de N2+1, N2+N+1, N2-N+1, … • Lenstra-Cohen (1983): Premier test généraliste (ne suppose aucune factorisation connue). • Schoof (1985): Test généraliste utilisant des courbes elliptiques. • Atkin-Morain (1988): Courbes elliptiques. Moins lourd que l’algorithme de Schoof. • Agarwal-Saxena-Kayl (2001): On peut déterminer si un nombre est premier en temps polynomial.
Complexité • La factorisation des nombres entiers est infaisable au delà de 100 chiffres décimaux. • Les algorithmes à courbes elliptiques sont infaisables au-delà de 300 chiffres et sont difficiles à implémenter. • Il existe des méthodes inexactes (ou seulement incomplètes) qui donne de bons résultats.
Théorème de Fermat • Soit a et N deux entiers avec 2aN-1. Si N est premier alors aN-11 (mod N). • N=7, a=2, 26=641 (mod 7). Donc 7 est peut-être premier. • N=9, a=5, 587 (mod 9). Donc 9 n’est pas premier. • N=341, a=2, 23401 (mod 341). Mais 341=1131 n’est pas premier. On dit que 341 est pseudo-premier pour la base 2. • La réciproque du théorème de Fermat est fausse. • Le critère chinois est faux.
Test de Fermat • On a 334056 (mod 341) et donc 341 n’est pas premier. • On peut envisager de croiser les tests de Fermat • Mais 561 contredit tous les tests de Fermat: 25601 (mod 561), 35601 (mod 561), 55601 (mod 561), etc … • Le test de Fermat, seul, est insuffisant.
Nombres de Carmichael • Un nombre composé qui passe avec succès tous les tests de Fermat est un nombre de Carmichael. • 561 est le plus petit nombre de Carmichael. • Soit n un nombre entier tel que 6n+1, 12n+1 et 18n+1 soient premiers, alors N=(6n+1)(12n+1)(18n+1) est appelé nombre de Chernick. • Un nombre de Chernick est un nombre de Carmichael (1729 est le plus petit). • Heuristiquement, il y a une infinité de nombres de Chernick. • Théorème de Granville (1993): Il y a une infinité de nombres de Carmichael.
Equation X21 (mod N) • Soit X un entier tel que X21 (mod N). • Alors X2-1=(X+1)(X-1)0 (mod N). • Si X1 et XN-1, alors on a 2 nombres inférieurs à N dont le produit est un multiple de N, donc N n’est pas premier. • Exemple 521 (mod 24), donc 640 (mod 24)
Test de Miller-Rabin • Soit N un entier pair supérieur ou égal à 3. • Soit a un entier tel que 2aN-1. • Supposons que aN-11 (mod N). • N-1 est pair. On pose X=a(N-1)/21 (mod N). • On a donc X21 (mod N). • Donc si X1 et XN-1 alors N n’est pas premier • Si X1 (mod N) et (N-1)/2 pair, on continue avec Y=a(N-1)/41 (mod N). • Si X=N-1 alors le test s’arrête. • On dit que N passe le test de Miller-Rabin pour la base a quand on a épuisé tous les recours sans obtenir de contradiction.
N,a ii+1 Déterminer h et d tels que d impair et N-1=2h.d oui i=h ? N ne passe pas le test non XX2 (mod N) Calculer Xad(mod N) i0 oui N ne passe pas le test X=1 ? non non non X=1 ou N-1 ? X=N-1 ? oui oui N passe le test N passe le test Version itérative • N,a entiers, N impair, N3, 2aN-1.
Exemple 1 • N=53, a=2 • N-1=52=2213 • X0=213 (mod 53)30 • X1=302 (mod 53)52=N-1 • On a obtenu aucune contradiction donc 53 passe le test pour la base 2.
Exemple 2 • N=561, a=2 • N-1=2435 • X0=235 (mod 53)263 • X1=2632 (mod 53)166 • X2=1662 (mod 53)67 • X3=672 (mod 53)1 • On obtient une contradiction donc 561 ne passe pas le test. • 561 n’est pas premier.
Exemple 3 • N=2047, a=2 • N-1=21023 • X0=21023 (mod 53)1 • 2047 passe le test de Miller-Rabin pour la base 2. • Mais 2047=2389 n’est pas premier. • On dit que 2047 est pseudo-premier fort pour la base 2.
Test de Miller-Rabin • Théorème de Miller: Soit N un nombre composé, alors il ne peut passer au plus que N/4 de Miller-Rabin avec succès. • En fait la borne est très pessimiste. • Soit N un nombre à tester, on choisit aléatoirement n bases de tests. • Si N passe tous les tests, alors il y a moins d’une chance sur 4npour que N soit en fait composé.
Bilan • Le test de Miller-Rabin a un coût algorithmique inférieur au test de Fermat. • Il permet de séparer efficacement nombres composés et nombres premiers. • Mais ce test ne permet pas d’établir avec certitude qu’un nombre est premier. • Noter néanmoins qu’on ne connaît pas de nombre composé qui soit pseudo-premier fort pour 30 bases différentes.
Génération de nombres premiers • Il existe des méthodes qui génèrent des nombres qui sont effectivement premiers. • En contre-partie, les nombres générés ne sont pas totalement aléatoires. • On ne peut pas générer tous les nombres premiers. En fait, on génère des nombres N d’une forme telle que si N est effectivement premier, la « preuve » est facile à établir.
Théorème de Lehmer • Soit N un nombre entier impair supérieur à 3. • On suppose qu’il existe un nombre entier a2tel que aN-11 (mod N). • On suppose de plus que pour tout diviseur p premier de N-1, il existe un entier ap tel que ap(N-1)/p1 (mod N). • Alors N est premier.
Méthode de Gordon (1985) • On choisit N au hasard et on essaye de factoriser N-1. • Si on arrive à factoriser complètement N-1, on applique le théorème de Lehmer à N. • Si on n’arrive pas à factoriser N-1, on choisit un autre nombre N et on recommence. • Problème: La factorisation complète de N-1 n’a aucune chance d’aboutir si N a plusieurs centaines de chiffres
Exemple (Knuth) • N0=37866809061660057264219253397. • On a 3N0-11 (mod N0), on suspecte donc N0 d’être premier. • On factorise alors N0-1 et on obtient N0-1=22 . 19 . 107 . 353 . 91813 . N1 avec N1=143675413657196977. • On a 3N1-11 (mod N1), on suspecte donc N1 d’être premier. • N1-1=24 . 32 . 547 . 1103 . N2 avec N2=1653701519. • On a 3N2-11 (mod N2), on suspecte donc N2 d’être premier. • N2-1=2 . 7 . 19 . 23 . 137 . 1973. • La factorisation de N2-1 est sûre: tous les facteurs premiers sont connus avec certitude. • On peut alors essayer d’appliquer le critère de Lehmer.
Exemple (Knuth) • On a 2(N2-1)/21 (mod N2), donc la valeur a2=2 ne marche pas. • On essaye successivement les valeurs 2, 3, 5, 7 … • On trouve 7(N2-1)/21653701518 (mod N2) donc a2=7 satisfait la condition de Lehmer. • On trouve aussi a7=a19=a23=a137=a1973=2. • On a donc établi que N2est premier. • La factorisation de N1-1 est alors sûre et on peut alors essayer d’appliquer le critère de Lehmer à N1.
Exemple (Knuth) • On continue et on montre que N1 puis N0 est premier. • On parle de preuve par descente. • N0 est premier si N1<N0 est premier, N1 est premier si N2<N1 est premier et N2 est suffisamment petit pour que l’on montre facilement qu’il est premier. • D’autres certificats comme celui d’Atkin-Morain utilise le principe de la descente.
Théorème de Pocklington • Soit N un nombre entier impair supérieur à 3. • Hypothèses: N=R.F+1 avec F pair. • La factorisation de F est entièrement connue. • PGCD(R,F)=1. • Il existe un entier a tel que aN-11 (mod N) et pour tout facteur premier p de F, PGCD(a(N-1)/p-1,N)=1. • Alors: Tout facteur premier de N est de la forme k.F+1 avec k1. • En particulier, si N<(F+1)2, alors N est premier. • En fait, si N<(F+1).(2F+1) alors N est premier.
Méthode de Maurer (1987) • On cherche à générer un nombre premier de 20 chiffres. • On choisit F pair de factorisation connue. Par exemple, F=23257376907=5010183422. • On choisit aléatoirement R impair, R2F, par exemple R=7419669081. • On calcule N=R.F+1=37173903026352175183. • On choisit a aléatoirement et on calcule aN-1 (mod N). • Exemple 2N-1 31953700866015605260 (mod N). • Le résultat est différent de 1 donc N n’est pas premier. • On choisit une nouvelle valeur pour R et on recommence.
Méthode de Maurer (1987) • R=7785640265. • N=39007485785358686831. • On a 7N-11 (mod N) donc N est peut-être premier. • On a 7(N-1)/2 39007485785358686830 (mod N). • PGCD(39007485785358686829,N)=1 donc N vérifie la première condition. • De même, PGCD(7(N-1)/32573-1,N)=1 et PGCD(7(N-1)/76907-1,N)=1. • Donc N est bien premier.
Remarques • Dans l’exemple précédent, si on prend a=2, on a bien 2N-11 (mod N) et donc on suspecte N d’être premier. • Mais 2(N-1)/21 (mod N) et donc PGCD(2(N-1)/2-1,N)=N. • La valeur a=2 ne permet pas d’établir la primalité de N. • Deux stratégies sont possibles: soit on insiste en choisissant une nouvelle valeur pour a (parce que l’on espère que N soit bien premier), soit on abandonne et on génère un nouveau candidat.
Remarques • La plupart des problèmes apparaissent quand on teste le facteur 2 de F: une fois sur deux, a « ne marche pas ». • On peut éviter ce problème en calculant le symbole de Jacobi de a pour N: si J(a,N)=-1, a ne posera pas de problème. • Ce calcul est rapide par rapport aux exponentiations. • Autre remarque: pour choisir les facteurs premiers de F, on peut utiliser récursivement la génération de nombres premiers. • On peut donc choisir des valeurs F avec de grands facteurs premiers.
Raffinement de Brillhart et al. • Soit N vérifiant les conditions du théorème de Pocklington sauf que N<2F3 seulement. • On pose R=2Fs+r avec 0r2F. • Alors si s=0 ou si r2-8s n’est pas un carré parfait, alors N est premier. • Déterminer exactement si un nombre est ou non un carré parfait est algorithmiquement assez coûteux.
Carré parfait • Quand on génère des nombres premiers, on se contente de conditions suffisantes. • Si N2 (mod 3), N n’est pas un carré parfait. • Si N2 ou 3 (mod 5) ou N3, 5 ou 6 (mod 7) idem. • Si N vérifie une seule de ces congruences, alors N n’est pas un carré parfait. • De manière générale, si Na (mod M) avec J(a,M)=-1 où J est le symbole de Jacobi (resp. Legendre) si M est composé (resp. premier), alors N n’est pas un carré parfait.
Autres méthodes • Il existe aussi des critères de primalité à partir des suites de Lucas. • Ces critères permettent d’établir si un nombre pas trop grand est premier, générer des grands nombres premiers ou tester avec une grande fiabilité (Pseudo-primalité forte pour le critère de Lucas) • Les critères de primalité des logiciels comme Mupad, Maple ou Mathematica sont en fait le plus souvent composés d’une série de tests de Miller-Rabin puis un test de pseudo-primalité forte pour le critère de Lucas. • On peut encore combiner à d’autres tests: suite de Perrin, de Fibonacci, de Judd, de Williams, tests à courbes elliptiques …