algorithme de décomposition d'un entier en produit de facteurs premiers De Wikipédia, l'encyclopédie libre
En théorie des nombres, l'algorithme du crible du corps de nombres généralisé[Note 1],[Note 2] (GNFS) obtient la décomposition d'un entier en produit de facteurs premiers. C'est à l'heure actuelle (2018) l'algorithme le plus efficace connu pour obtenir cette décomposition, lorsque le nombre considéré est assez grand[Note 3], c'est-à-dire au-delà d'environ 10100, et ne possède pas de structure remarquable[Note 4]. Cette efficacité est due pour partie à l'utilisation d'une méthode de crible et pour partie à l'utilisation d'algorithmes efficaces pour certaines opérations (comme la manipulation de matrices creuses). La complexité algorithmique du crible de corps de nombres n'est pas prouvée, elle n'est qu'heuristique[Note 5]. Cette estimation est utilisée par les organismes de standardisation tels que le NIST pour fixer des tailles des clés RSA à un niveau de sécurité donné.
De manière remarquable, l'algorithme permet également (au prix de modifications simples) de calculer des logarithmes discrets dans les corps finis, avec la même complexité. C'est à l'heure actuelle (2018) l'algorithme le plus efficace connu dans les corps finis de caractéristique première très grande[Note 6]. En revanche, l'algorithme du crible du corps de nombres n'est pas applicable au calcul du logarithme discret dans un groupe abstrait générique, ce qui est une des motivations derrière la cryptographie sur les courbes elliptiques.
Pour ces raisons, l'algorithme est responsable aujourd'hui de nombreux records de factorisation (et de calculs de logarithmes discrets) et joue un rôle important en cryptographie. Enfin, quoique de manière plus anecdotique, il intervient également dans le contexte plus large de la sécurité informatique, par exemple dans l'attaque Logjam dont il est un composant essentiel[1]: les auteurs ont montré comment intercepter une communication TLS 1.2, une des étapes consistant à calculer au moyen du crible du corps de nombres un logarithme discret dans un corps de 512 bits en moins d'une minute.
L'algorithme du crible du corps de nombres est une des techniques de factorisation développées progressivement au cours du 20esiècle.
Il fut proposé initialement dans une lettre de John Pollard à Arjen Lenstra et Andrew Odlyzko datée de 1988[2], comme une amélioration possible du crible quadratique. L'ayant testé sur le septième nombre de Fermat (factorisé pour la première fois en 1970), l'algorithme est étendu puis publié par Lenstra, Lenstra, Manasse et Pollard en 1990[3],[4] dans une version «restreinte» à certains types d'entiers. Cette première version était tout de même suffisante pour factoriser pour la première fois le neuvième nombre de Fermat avec les ressources disponibles à l'époque[5]. Des travaux successifs et les contributions de Joe Buhler et Carl Pomerance ont permis d'étendre l'algorithme à des entiers arbitraires[6],[7]. L'algorithme du crible du corps de nombres généralisé a atteint sa forme actuelle au courant des années 1990, sous l'impulsion entre autres de Peter Montgomery, mais il a continué à bénéficier depuis de l'amélioration des capacités de calcul des ordinateurs, et de la disponibilité accrue du calcul distribué[8].
L'algorithme fut simultanément adapté pour calculer des logarithmes discrets[9], où il reste aujourd'hui l'algorithme le plus efficace connu pour résoudre ce problème sur les corps finis de grande caractéristique. En petite caractéristique, plusieurs optimisations sont possibles, comme l'algorithme du crible de corps de fonctions (function field sieve) développé initialement par Adleman en 1994[10].
En 1995, Peter Shor présente un algorithme quantique dont la complexité asymptotique est très inférieure à celle du crible du corps de nombres, basé sur une approche radicalement différente; toutefois un tel algorithme nécessite un calculateur quantique suffisamment grand pour fonctionner, ce qu'à l'heure actuelle (2018) on ne sait pas construire.
Principe général
À l'instar du crible quadratique dont il est une amélioration, l'algorithme du crible du corps de nombres fonctionne en deux phases principales[Note 7],[11]:
Une phase de collecte, hautement parallélisable, pendant laquelle l'algorithme recherche des nombres friables modulo l'entier n à factoriser. C'est au cours de cette étape que la technique de crible est utilisée, s'appuyant sur les propriétés des corps de nombres pour sélectionner efficacement des candidats. Les nombres retenus à l'issue de cette première phase se décomposent tous en produits de puissances d'une base de facteurs (en général premiers). L'efficacité du crible du corps de nombres est surtout due à cette technique de crible, qui permet de trouver des nombres friables plus rapidement que d'autres approches telles que le crible quadratique.
Une phase d'algèbre linéaire, difficilement parallélisable, au cours de laquelle l'algorithme construit un élément du noyau d'une grande matrice creuse. Les lignes de cette matrice correspondent aux puissances (modulo 2) de chaque facteur de la base apparaissant dans les nombres collectés dans la phase précédente. Le vecteur du noyau ainsi obtenu permet de déterminer une congruence de carrés, qui donne immédiatement une factorisation de n.
Cette seconde phase n'est pas spécifique au crible du corps de nombres, mais nécessite des algorithmes capables de manipuler des matrices de grande taille. L'algorithme de Lanczos par blocs ou celui de Wiedemann (dû à Coppersmith[12],[13]) sont souvent employés.
Phase de collecte
On note l'entier positif que l'on cherche à factoriser, et on suppose que n'est pas la puissance d'un nombre premier (cette précaution n'est pas un renoncement: dans le cas contraire où il est aisé de factoriser en calculant des racines).
Principe du crible
Le crible du corps de nombres s'appuie sur la remarque suivante. Soit un polynôme unitaire, à coefficients entiers, irréductible sur . Notons une racine complexe de . Supposons qu'il existe tel que , alors il existe un morphisme d'anneaux:\mathbb {Z} [\alpha ]\to \mathbb {Z} /(n)}
défini par :\alpha \mapsto m}
. En particulier, pour tout polynôme à coefficients entiers, on a . Voici comment cette remarque participe à la recherche de congruences de carrés: si on a trouvé une collection de polynômes tels que est un carré dans , notons-le , et que
est un carré dans , notons-le . Alors on a trouvé une relation:
Pour trouver , on va à l'instar du crible quadratique ou de la méthode de Dixon, chercher des nombres friables. Seulement, pour cela, il faut d'abord définir une notion de friabilité sur . Avant de détailler cet aspect, donnons une manière de construire les polynômes et intervenant dans l'équation.
Polynômes f et g
Pour construire le polynôme de la section précédente, on peut utiliser ceci: prenons un entier tel que et posons . En écrivant l'entier en base , on obtient
et on définit
On vérifie aisément que est unitaire, et que par construction, donc . Si n'est pas irréductible, on peut le décomposer en facteurs irréductibles de manière efficace[Note 8].
Pour construire les polynômes , posons de manière heuristique pour deux entiers premiers entre eux avec .
Friabilité sur ℤ[α]
Si était un anneau factoriel, on pourrait simplement décomposer ses éléments en facteurs premiers et chercher les entiers friables de l'anneau pour trouver . Malheureusement, ce n'est en général pas le cas. Cela dit, on dispose de l'application norme qui est multiplicative et dont les valeurs sur sont entières[Note 9]. En particulier, si est un carré dans , alors est un carré dans [Note 10], et plus généralement un élément qui se décompose en de nombreux facteurs aura une norme qui se décompose elle-même en de nombreux facteurs.
On dira qu'un élément de est «friable» lorsque est friable. La phase de collecte consiste donc à chercher des couples tels que est friable en ce sens.
Phase d'algèbre linéaire
La phase d'algèbre linéaire consiste, une fois que l'on dispose de suffisamment de relations entre nombres friables, à construire une congruence de carrés. Pour cela, on représente un nombre friable sur la base de friabilité, c'est-à-dire où , par le vecteur de ses exposants: . Ensemble, tous les nombres collectés forment une matrice, dont on cherche un élément du noyau modulo 2, c'est-à-dire une combinaison linéaire des lignes telle que le vecteur obtenu ait des coefficients pairs.
Cette combinaison linéaire d'exposants correspond à un produit entre les nombres collectés: d'un côté, il s'agit de carrés (donc leur produit est encore un carré modulo ), et de l'autre, il s'agit de nombres dont le produit a des exposants pairs dans la base de friabilité, c'est-à-dire encore des carrés. On a bien une congruence de carrés.
L'analyse de la complexité de l'algorithme repose notamment sur l'estimation de la distribution des nombres friables. Ce problème a été étudié par de Bruijn[14], et Canfield-Erdös-Pomerance[15], qui montrent le résultat suivant:
«Un entier positif choisi au hasard plus petit que est -friable avec probabilité lorsque .»
Dans l'énoncé ci-dessus on utilise la notation L (introduite par Pomerance en 1982[16]), et on note dans la suite le nombre d'entiers positifs premiers inférieurs à . Une analyse globale donne alors une complexité[Note 11]:
L'utilisation des meilleurs algorithmes d'algèbre linéaire et l'amortissement du coût de grâce au crible permettent, en optimisant tous les paramètres, d'estimer la probabilité totale de l'algorithme à [Note 12]. Il est possible d'abaisser encore cette complexité au moins en principe en utilisant deux techniques dues à Coppersmith[17], mais les gains réels de ces modifications ne sont pas encore bien mesurés[Note 13].
De même que la méthode de Dixon[18],[19], le crible du corps de nombres s'adapte bien au calcul de logarithmes discrets. En particulier, il s'agit du plus efficace algorithme classique connu pour résoudre ce problème dans les corps finis, où le crible du corps de nombres s'apparente à une forme de «calcul d'indice»[9].
Le crible du corps de nombres est derrière de nombreux records récents de factorisation et de calculs de logarithmes discrets.
Factorisation de nombres de forme générale
2 Décembre 2019, Fabrice Boudot, Pierrick Gaudry, Aurore Guillevic, Nadia Heninger, Emmanuel Thomé, et Paul Zimmermann, factorisation du nombre RSA RSA-240, d'une taille de 795 bits[20].
4 août 2012, Greg Childers, factorisation du nombre de Mersenne 21061 − 1 d'une taille de 1061 bits[22].
Logarithmes discrets dans un corps de grande caractéristique
2 Décembre 2019, Fabrice Boudot, Pierrick Gaudry, Aurore Guillevic, Nadia Heninger, Emmanuel Thomé, et Paul Zimmermann, logarithme discret modulo un premier sûr de 795 bits[20].
16 juin 2016, Thorsten Kleinjung, Claus Diem, Arjen K. Lenstra, Christine Priplata et Colin Stahlke, logarithme discret modulo un premier sûr de 768 bits[23].
11 juin 2014, Cyril Bouvier, Pierrick Gaudry, Laurent Imbert, Hamza Jeljeli et Emmanuel Thomé, logarithme discret modulo un premier sûr de 596 bits.
5 février 2007, Thorsten Kleinjung, logarithme discret modulo un premier sûr de 530 bits[24].
18 juin 2005, Antoine Joux et Reynald Lercier, logarithme discret modulo un premier sûr de 431 bits.
Il existe un algorithme quantique asymptotiquement strictement plus efficace: l'algorithme de Shor. Cependant il n'est pas possible à l'heure actuelle d'exécuter cet algorithme pour de grands nombres.
Elle s'appuie notamment sur des hypothèses de répartition uniforme qui sont étayées par l'expérience mais pour lesquelles il n'y a pas de justification théorique.
Il existe des algorithmes plus efficaces pour les corps finis de petite caractéristique, en particulier les corps binaires , tels que le crible du corps de fonctions.
(en) David Adrian, Karthikeyan Bhargavan, Zakir Durumeric et Pierrick Gaudry, «Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice», CCS '15 Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security, ACM, , p.5–17 (ISBN9781450338325, DOI10.1145/2810103.2813707, lire en ligne, consulté le )
(en) A. K. Lenstra, H. W. Lenstra Jr., M. S. Manasse et J. M. Pollard, «The number field sieve», STOC '90 Proceedings of the twenty-second annual ACM symposium on Theory of computing, ACM, , p.564–572 (ISBN0897913612, DOI10.1145/100216.100295, lire en ligne, consulté le )
(en) A. K. Lenstra, H. W. Lenstra Jr., M. S. Manasse et J. M. Pollard, «The number field sieve», dans Lecture Notes in Mathematics, Springer Berlin Heidelberg, (ISBN9783540570134, DOI10.1007/bfb0091537, lire en ligne), p.11–42
(en) J. P. Buhler, H. W. Lenstra et Carl Pomerance, «Factoring integers with the number field sieve», dans Lecture Notes in Mathematics, Springer Berlin Heidelberg, (ISBN9783540570134, DOI10.1007/bfb0091539, lire en ligne), p.50–94
(en) Arjen K. Lenstra, chap.5 «General purpose integer factoring», dans Joppe W. Bos et Arjen K. Lenstra, Topics in Computational Number Theory Inspired by Peter L. Montgomery, Cambridge University Press, (DOI10.1017/9781316271575, lire en ligne)
(en) Antoine Joux et Reynald Lercier, «Number Field Sieve for DLP», dans Henk C. A. van Tilborg et Sushil Jajodia, Encyclopedia of Cryptography and Security, Boston, MA, Springer, (ISBN978-1-4419-5905-8, lire en ligne), p.867–873
(en) G. Villard, «A study of Coppersmith's block Wiedemann algorithm using matrix polynomials», LMC-IMAG, REPORT # 975 IM, vol.38, (lire en ligne, consulté le )
(en) G. Villard, «Further analysis of Coppersmith's block Wiedemann algorithm for the solution of sparse linear systems (extended abstract)», ISSAC '97 Proceedings of the 1997 international symposium on Symbolic and algebraic computation, ACM, , p.32–39 (ISBN0897918754, DOI10.1145/258726.258742, lire en ligne, consulté le )
(en) N. de Bruijn, «On the number of positive integers and free of
prime factors », Proceedings of the Koninklijke Nederlandse Akademie van Wetenschappen: Series A: Mathematical Sciences, (lire en ligne)
(en) E. Canfield, P. Erdös et C. Pomerance, «On a problem of Oppenheim concerning
“Factorisatio Numerorum”», Journal of Number Theory, vol.17, , p.1-28
(en) Carl Pomerance, «Analysis and Comparison of Some Integer Factoring Algorithms», dans H. W. Lenstra et R. Tijdeman, Computational Methods in Number Theory, Math Centrum, Amsterdam, , p.89-139
(en) Thorsten Kleinjung, Kazumaro Aoki, Jens Franke et Arjen K. Lenstra, «Factorization of a 768-Bit RSA Modulus», dans Advances in Cryptology – CRYPTO 2010, Springer Berlin Heidelberg, (ISBN9783642146220, DOI10.1007/978-3-642-14623-7_18, lire en ligne), p.333–350