Primalité et génération de nombres premiers

Slides:



Advertisements
Présentations similaires
Dans cette partie Graphes Eulériens.
Advertisements

Algorithmes et structures de données avancées Cours 7
Algorithmes et structures de données avancés
Calculs de complexité d'algorithmes
Les Structures de contrôles itératives
Cours d'algorithmique 11 / Intranet 1 9 janvier 2006 Cours dAlgorithmique N P - complétude.
CHAPITRE 2 Nombres entiers, initiation à l’arithmétique- Nombres rationnels.
ARITHMETIQUE Bernard Izard 3° Avon PG I - DIVISEURS
Enseigner l’arithmétique en série L
Algorithme des différences Fraction irréductible
Programmes de calculs en 3ème
Utilisation des tableaux
Fluctuations d’une fréquence selon les échantillons, Probabilités
Continuité Introduction Continuité Théorème des valeurs intermédiaires
Enseignement de spécialité en S
Atelier Probabilités et statistiques
PGCD : sous ce sigle un peu bizarre se cache un outil bien utile dans les simplifications de fractions, mais aussi dans bien des problèmes de la vie courante…
Approche par les problèmes en TS spécialité maths
CHAPITRE 1 Arithmétique
Chapitre 1 PGCD de deux nombres.
Division euclidienne - décimale
Optimisation non linéaire sans contraintes
ARITHMETIQUE : NOMBRES PREMIERS, PGCD
Les Nombres Premiers « Un nombre premier est un nombre qui ne se casse pas quand on le laisse tomber par terre. » Paul Erdös (1913 – 1996)
Coloration gap sommet identifiante de graphes
Introduction à l’algorithmique
Périodicité, Apériodicité, Universalité et autres petits problèmes…
IFT Chapitre 1 Classes de complexité fondamentales:
IFT Au delà de NP: hiérarchie polynomiale, EXP, NEXP.
Algorithmes d ’approximation
Présentation dans le cadre du congrès mathématique
Conception et analyse des algorithmes Les algorithmes probabilistes
1 La récursion. Nous avons vu qu'un programme est constitué d'un ensemble de fonctions. Il est possible pour une fonction donnée d'appeler une autre fonction.
Algorithmes probabilistes
Le dernier théorème de Fermat
Programmation linéaire en nombres entiers : les méthodes de troncature
Cryptographie - 2.
ASI 3 Méthodes numériques pour l’ingénieur
Conception et analyse des algorithmes
ASI 3 Méthodes numériques pour l’ingénieur
SUITES cours 24.
Le chiffrement asymétrique
Le chiffrement symétrique
D.E ZEGOUR Ecole Supérieure d’Informatique
Les Algorithmes Cryptographiques Asymétriques
Multiprécision.
Programmation linéaire en nombres entiers
Algorithmes Branch & Bound
Micro-intro aux stats.
Attaque du protocoles RSA Yoann Moulin ESISAR IR - P2004
Pr BELKHIR Abdelkader USTHB
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
1 1 Huitième journée Quelques algorithmes. 2 Définition Description des tâches pour que celles-ci soient aisément programmables Différent d’une méthode.
Atelier Probabilités et statistiques
Mathématiques Discrètes Chapitre 2 (section 3)
Algorithme des différences
Algorithme des différences Fraction irréductible
Quelques pistes d’algorithmes possibles au lycée
Leçon Nombres entiers et rationnels
Réalisation d’un logiciel de Chiffrement RSA.
Chapitre 4 Variables aléatoires discrètes
Post-optimisation, analyse de sensibilité et paramétrage
Résolution des équations différentielles
Algorithmique Boucles et Itérations
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
Cycle, Cocycle, Arbre et Arborescence
Chap.V RSA. I. Rappels Mathématiques La congruence Définition 1 a et b sont congrus modulo n s’ils ont même reste par la division par n. On note a≡b[n]
Complexité algorithmique
1 UE Intro. Optimisation L3 INFO UPSud II. Programmation linéaire en variables entières (ou mixtes)
Transcription de la présentation:

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

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.

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

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.

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

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.

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.

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.

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

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

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

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

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

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.

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.

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.

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

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.

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 …