Crible algébrique

algorithme de décomposition d'un entier en produit de facteurs premiers

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.

Histoire modifier

L'algorithme du crible du corps de nombres est une des techniques de factorisation développées progressivement au cours du 20e siè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 d'opération modifier

Principe général modifier

À 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 modifier

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 modifier

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   défini par  . 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 modifier

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 ℤ[α] modifier

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 modifier

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

Complexité de l'algorithme modifier

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

Adaptation au calcul de logarithme discret modifier

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

Records obtenus au moyen de cet algorithme modifier

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 modifier

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

Factorisation de nombres de forme particulière modifier

Logarithmes discrets dans un corps de grande caractéristique modifier

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

Voir aussi modifier

Notes et références modifier

Notes modifier

  1. Aussi connu sous son nom anglais, generalised number field sieve, ou son acronyme : GNFS.
  2. Parfois appelé de manière moins précise « crible algébrique » ou « crible sur les corps de nombres », plus rarement « crible de corps de nombres ».
  3. 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.
  4. Lorsqu'on s'intéresse à des nombres de forme particulière, comme les nombres de Fermat ou de Mersenne, une version spécialisée de l'algorithme est plus efficace.
  5. 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.
  6. 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.
  7. Comme indiqué par (Lenstra 2017), ce découpage en deux phases a été identifié par Morrison et Brillhart dès 1975.
  8. Si la factorisation de   n'est pas triviale on obtient directement une factorisation de  .
  9. Dans le détail, si on note   les conjugués complexes de  , alors   ce qui montre que la norme de   est un polynôme en   à coefficients entiers.
  10. La réciproque n'est en général pas vraie : par exemple on a dans  , donc   est un carré, alors que   n'en est pas un.
  11. Voir (Lenstra 2017, Section 5.2.3).
  12. Voir (Lenstra 2017, Section 5.5.3).
  13. Voir (Lenstra 2017, Section 5.5.4).

Références modifier

  1. (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 (ISBN 9781450338325, DOI 10.1145/2810103.2813707, lire en ligne, consulté le )
  2. (en) « The development of the number field sieve », Lecture Notes in Mathematics,‎ (ISSN 0075-8434 et 1617-9692, DOI 10.1007/bfb0091534, lire en ligne, consulté le )
  3. (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 (ISBN 0897913612, DOI 10.1145/100216.100295, lire en ligne, consulté le )
  4. (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, (ISBN 9783540570134, DOI 10.1007/bfb0091537, lire en ligne), p. 11–42
  5. (en) A. K. Lenstra, H. W. Lenstra Jr., M. S. Manasse et J. M. Pollard, « The factorization of the ninth Fermat number », Mathematics of Computation, vol. 61, no 203,‎ , p. 319–349 (ISSN 0025-5718 et 1088-6842, DOI 10.1090/S0025-5718-1993-1182953-4, lire en ligne, consulté le )
  6. (en) C. Pomerance, « A Tale of Two Sieves », Notices of the AMS,‎ , p. 1473–1485 (lire en ligne)
  7. (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, (ISBN 9783540570134, DOI 10.1007/bfb0091539, lire en ligne), p. 50–94
  8. (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, (DOI 10.1017/9781316271575, lire en ligne)
  9. a et b (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, (ISBN 978-1-4419-5905-8, lire en ligne), p. 867–873
  10. (en) Leonard M. Adleman, « The function field sieve », dans Lecture Notes in Computer Science, Springer Berlin Heidelberg, (ISBN 9783540586913, DOI 10.1007/3-540-58691-1_48, lire en ligne), p. 108–121
  11. (en) Michael A. Morrison et John Brillhart, « A method of factoring and the factorization of 𝐹₇ », Mathematics of Computation, vol. 29, no 129,‎ , p. 183–205 (ISSN 0025-5718 et 1088-6842, DOI 10.1090/S0025-5718-1975-0371800-5, lire en ligne, consulté le )
  12. (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 )
  13. (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 (ISBN 0897918754, DOI 10.1145/258726.258742, lire en ligne, consulté le )
  14. (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)
  15. (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
  16. (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
  17. (en) Don Coppersmith, « Modifications to the Number Field Sieve », Journal of Cryptology, vol. 6, no 3,‎ (ISSN 0933-2790 et 1432-1378, DOI 10.1007/bf00198464, lire en ligne, consulté le )
  18. Maurice Kraitchik, Théorie des Nombres, Paris, Gauthier-Villars,
  19. (en) Martin E. Hellman et Justin M. Reyneri, « Fast Computation of Discrete Logarithms in GF (q) », dans Advances in Cryptology, Springer US, (ISBN 9781475706048, DOI 10.1007/978-1-4757-0602-4_1, lire en ligne), p. 3–13
  20. a et b Emmanuel Thomé, “795-bit factoring and discrete logarithms,” December 2, 2019.
  21. (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, (ISBN 9783642146220, DOI 10.1007/978-3-642-14623-7_18, lire en ligne), p. 333–350
  22. (en) Greg Childers, « Factorization of a 1061-bit number by the Special Number Field Sieve », IACR ePrint Archive, no 444,‎ (lire en ligne, consulté le )
  23. (en) Thorsten Kleinjung, « Logarithme discret dans un cors de 768 bits », sur listserv.nodak.edu, (consulté le )
  24. (en) Thorsten Kleinjung, « Logarithme discret dans un corps de 530 bits », sur listserv.nodak.edu, (consulté le )