La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Primalité et génération de nombres premiers

Présentations similaires


Présentation au sujet: "Primalité et génération de nombres premiers"— Transcription de la présentation:

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 ( ): 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 Version itérative N,a entiers, N impair, N3, 2aN-1. N passe le test
X=1 ou N-1 ? N,a Déterminer h et d tels que d impair et N-1=2h.d Calculer Xad(mod N) i0 X=N-1 ? X=1 ? XX2 (mod N) i=h ? ii+1 N ne passe pas le test oui non

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
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 4n pour 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2 tel 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= On a 3N0-11 (mod N0), on suspecte donc N0 d’être premier. On factorise alors N0-1 et on obtient N0-1= N1 avec N1= On a 3N1-11 (mod N1), on suspecte donc N1 d’être premier. N1-1= N2 avec N2= On a 3N2-11 (mod N2), on suspecte donc N2 d’être premier. N2-1= 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 (mod N2) donc a2=7 satisfait la condition de Lehmer. On trouve aussi a7=a19=a23=a137=a1973=2. On a donc établi que N2 est 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= On choisit aléatoirement R impair, R2F, par exemple R= On calcule N=R.F+1= On choisit a aléatoirement et on calcule aN-1 (mod N). Exemple 2N-1  (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 (mod N). PGCD( ,N)=1 donc N vérifie la première condition. De même, PGCD(7(N-1)/ ,N)=1 et PGCD(7(N-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 …


Télécharger ppt "Primalité et génération de nombres premiers"

Présentations similaires


Annonces Google