1 / 32

Primalité et génération de nombres premiers

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.

beck
Download Presentation

Primalité et génération de nombres premiers

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Primalité et génération de nombres premiers

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. Théorème de Fermat • Soit a et N deux entiers avec 2aN-1. Si N est premier alors aN-11 (mod N). • N=7, a=2, 26=641 (mod 7). Donc 7 est peut-être premier. • N=9, a=5, 587 (mod 9). Donc 9 n’est pas premier. • N=341, a=2, 23401 (mod 341). Mais 341=1131 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.

  9. Test de Fermat • On a 334056 (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: 25601 (mod 561), 35601 (mod 561), 55601 (mod 561), etc … • Le test de Fermat, seul, est insuffisant.

  10. 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.

  11. Equation X21 (mod N) • Soit X un entier tel que X21 (mod N). • Alors X2-1=(X+1)(X-1)0 (mod N). • Si X1 et XN-1, alors on a 2 nombres inférieurs à N dont le produit est un multiple de N, donc N n’est pas premier. • Exemple 521 (mod 24), donc 640 (mod 24)

  12. Test de Miller-Rabin • Soit N un entier pair supérieur ou égal à 3. • Soit a un entier tel que 2aN-1. • Supposons que aN-11 (mod N). • N-1 est pair. On pose X=a(N-1)/21 (mod N). • On a donc X21 (mod N). • Donc si X1 et XN-1 alors N n’est pas premier • Si X1 (mod N) et (N-1)/2 pair, on continue avec Y=a(N-1)/41 (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.

  13. N,a ii+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 XX2 (mod N) Calculer Xad(mod N) i0 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, N3, 2aN-1.

  14. Exemple 1 • N=53, a=2 • N-1=52=2213 • 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.

  15. Exemple 2 • N=561, a=2 • N-1=2435 • 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.

  16. Exemple 3 • N=2047, a=2 • N-1=21023 • X0=21023 (mod 53)1 • 2047 passe le test de Miller-Rabin pour la base 2. • Mais 2047=2389 n’est pas premier. • On dit que 2047 est pseudo-premier fort pour la base 2.

  17. 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é.

  18. 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.

  19. 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.

  20. Théorème de Lehmer • Soit N un nombre entier impair supérieur à 3. • On suppose qu’il existe un nombre entier a2tel que aN-11 (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)/p1 (mod N). • Alors N est premier.

  21. 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

  22. Exemple (Knuth) • N0=37866809061660057264219253397. • On a 3N0-11 (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-11 (mod N1), on suspecte donc N1 d’être premier. • N1-1=24 . 32 . 547 . 1103 . N2 avec N2=1653701519. • On a 3N2-11 (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.

  23. Exemple (Knuth) • On a 2(N2-1)/21 (mod N2), donc la valeur a2=2 ne marche pas. • On essaye successivement les valeurs 2, 3, 5, 7 … • On trouve 7(N2-1)/21653701518 (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.

  24. 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.

  25. 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-11 (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 k1. • En particulier, si N<(F+1)2, alors N est premier. • En fait, si N<(F+1).(2F+1) alors N est premier.

  26. 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=23257376907=5010183422. • On choisit aléatoirement R impair, R2F, 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.

  27. Méthode de Maurer (1987) • R=7785640265. • N=39007485785358686831. • On a 7N-11 (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.

  28. Remarques • Dans l’exemple précédent, si on prend a=2, on a bien 2N-11 (mod N) et donc on suspecte N d’être premier. • Mais 2(N-1)/21 (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.

  29. 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.

  30. 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 0r2F. • 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.

  31. Carré parfait • Quand on génère des nombres premiers, on se contente de conditions suffisantes. • Si N2 (mod 3), N n’est pas un carré parfait. • Si N2 ou 3 (mod 5) ou N3, 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 Na (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.

  32. 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 …

More Related