L'algorithme du crible quadratique est un algorithme de factorisation fondé sur l'arithmétique modulaire. C'est en pratique le plus rapide après le crible général des corps de nombres, lequel est cependant bien plus compliqué, et n'est plus performant que pour factoriser un nombre entier d'au moins cent chiffres. Le crible quadratique est un algorithme de factorisation non spécialisé, c'est-à-dire que son temps d'exécution dépend uniquement de la taille de l'entier à factoriser, et non de propriétés particulières de celui-ci.

Objectif de base

modifier

L'algorithme, mis au point en 1981 par Carl Pomerance, est un raffinement de la méthode de factorisation de Dixon, elle-même basée sur celle de Fermat : on essaye d'établir une congruence de carrés modulo n (l'entier à factoriser), qui, souvent, conduit bien à une factorisation de n.

L'algorithme fonctionne en deux phases :

  • la phase de collecte des données, où il collecte les informations qui peuvent conduire à une congruence de carrés, et
  • la phase d'exploitation des données, où il place toutes les données qu'il a collectées dans une matrice et la résout pour obtenir une congruence de carrés.

La phase de collecte peut se paralléliser facilement et efficacement, mais pas la phase d'exploitation, à moins d'avoir peu de sous-systèmes et que chacun d'eux dispose d'une mémoire suffisante pour stocker toute la matrice (dans ce cas on peut utiliser l'algorithme par blocs de Wiedemann (en)).

L'approche naïve pour trouver une congruence de carrés est de choisir un nombre au hasard, l'élever au carré, et espérer que le plus petit reste (positif ou nul) modulo n soit un carré parfait (i.e. soit le carré d'un entier). Par exemple, modulo 5959, l'entier 802 est congru à 441=212. Pour n grand, cette approche trouve rarement une congruence de carrés, mais lorsque cela arrive, cette congruence est le plus souvent non triviale donc permet de factoriser n.

La durée d'exécution[1] du crible quadratique pour factoriser un entier n est en

 

avec la notation O de Landau et la notation L.

Optimisation de la recherche de congruences

modifier

Le crible quadratique essaie de trouver des couples d'entiers x et y(x) (où y(x) est une fonction de x) satisfaisant une condition bien plus faible que x2y2 (mod n). Il choisit un ensemble de nombres premiers qu'on appelle base de facteurs, et cherche des x pour lesquels le « plus petit reste absolu » y(x) de x2 modulo n se factorise complètement sur cette "base". De tels couples d'entiers sont dits réguliers relativement à cette base, et la factorisation de y(x) sur la base, jointe à la valeur de x, constitue ce qu'on appelle une relation. Le crible quadratique accélère le processus de recherche de relations en prenant x proche de la racine carrée de n. Ainsi y(x) sera plus petit, et aura donc plus de chance d'être « régulier ». Pour x=[√n]+z avec z entier "petit",

 

Néanmoins, cela implique aussi que y croît linéairement avec z.

Une autre façon d'augmenter les chances de régularité est d'augmenter simplement la taille de la base, mais cela impose de collecter plus de relations. En effet, pour être sûr que les relations sont linéairement dépendantes, il faut qu'il y en ait au moins une de plus que le nombre de facteurs premiers dans la base.

Relations partielles et cycles

modifier

Même si, dans une relation, y(x) n'est pas régulier, il peut arriver qu'en fusionnant deux telles relations partielles on en forme une "complète". Il faut pour cela qu'en dehors de la base, les facteurs premiers des deux y soient les mêmes. Par exemple, si la base est {2, 3, 5, 7} et n = 91, en faisant le produit des deux relations partielles

  et
 

on obtient

 

On en déduit une relation complète en multipliant les deux côtés par le carré de 11-1 modulo 91, c'est-à-dire de 58 (valeur obtenue à l'aide de l'algorithme d'Euclide étendu, par exemple) :

  soit
 

Une telle relation complète (obtenue par combinaison de relations partielles) est appelée un cycle. Quelquefois, la formation d'un cycle à partir de deux relations partielles conduit directement à une congruence de carrés, mais rarement.

Vérifier la régularité par criblage

modifier

Il existe plusieurs manières de vérifier la régularité des y. La plus évidente est la méthode des essais de divisions, bien que ceci augmente le temps d'exécution pour la phase de collecte des données. Une autre méthode parfois utilisée est la méthode des courbes elliptiques. Mais la pratique la plus courante est de procéder par criblage.

 
 
 
 

Ainsi, si l'on connait un x tel que y(x) ≡ 0 (mod p), on en déduit toute une suite de y qui sont divisibles par p. En répétant ce processus pour d'autres valeurs de p, on trouve des valeurs régulières, par un processus de criblage (analogue au crible d'Ératosthène) au lieu d'avoir à tester la régularité à chaque fois (ce test systématique prendrait trop de temps pour de grands nombres comme ceux des records de factorisation ci-dessous). Au cours de ce processus on perd l'information détaillée de la factorisation des y réguliers collectés, mais comme ils n'ont que de "petits" facteurs (ceux de la base), on peut la recalculer rapidement.

Polynômes multiples

modifier

Dans la pratique, le seul polynôme y(x) = x2n ne fournit pas suffisamment de (x, y) réguliers sur la base des facteurs. On utilise alors toute une famille de polynômes qui, pour être des carrés modulo n, doivent être d'une forme similaire à l'original :

 

Cette approche, appelée crible quadratique à polynômes multiples (MPQS, pour Multiple Polynomial Quadratic Sieve), est parfaitement adaptée à la parallélisation.

Exemple

modifier

Voici un exemple. Soit n = 1817. La partie entière de sa racine carrée est 42. Comme n est petit, le polynôme y(z) = (42+z)2-1817 suffit (pas besoin du crible multipolynomial).

Collecte des données

modifier

On se limite, comme base F de facteurs, à -1 et aux nombres premiers p pour lesquels n est un résidu quadratique modulo p :

 

Puisque F compte 4 éléments, on a besoin de 5 couples réguliers (z, y(z)). Les premiers trouvés (par ordre croissant sur z) sont les suivants :

z y(z)=(42+z)2-1817 factorisation de y(z)
1 32 −10 • 25 • 70 • 130
3 208 −10 • 24 • 70 • 131
9 784 −10 • 24 • 72 • 130
81 13312 −10 • 210 • 70 • 131
103 19208 −10 • 23 • 74 • 130

(on pourrait aussi choisir des z négatifs).

Exploitation des données

modifier

On forme la matrice des exposants qui interviennent dans la factorisation des y(z) :

 

La troisième ligne (qui correspond à (z, y) = (9, 784)) est nulle modulo 2 donc est déjà une congruence de carrés, qu'on peut utiliser pour factoriser n : modulo 1817,

 

et pgcd(51+28,1817) = 79, pgcd(51-28,1817) = 23. Ce sont les deux facteurs non triviaux de 1817.

On aurait pu utiliser d'autres congruences de carrés déduites de cette matrice. Par exemple en combinant la deuxième ligne et la quatrième (puisque leur somme est paire) :

 

et pgcd(5535+1664,1817)=23, pgcd(5535-1664,1817)=79.

Cet exemple montre aussi que le crible quadratique n'est utile que pour n grand. Pour un nombre aussi petit que 1817, cet algorithme est un canon pour tuer une mouche. Les essais de divisions pourraient trouver un facteur en 9 divisions.

Records de factorisation

modifier

Jusqu'à la découverte du crible généralisé sur les corps de nombres, l'algorithme non spécialisé le plus rapide (asymptotiquement) que l'on connaissait était le crible quadratique. À présent, la méthode des courbes elliptiques possède le même temps d'exécution asymptotique que le crible quadratique (dans le cas où n est produit de deux grands nombres premiers), mais dans la pratique, le crible quadratique est plus rapide car il utilise des calculs en simple précision au lieu des calculs en multi-précision pour la méthode des courbes elliptiques.

Le , la factorisation de RSA-129 fut achevée à l'aide du crible quadratique. C'est un nombre de 129 chiffres, produit de deux grands nombres premiers, l'un de 64 chiffres et l'autre de 65. La base des facteurs pour cette factorisation contenait 524 339 nombres premiers. La collecte des données prit 5 000 années MIPS faite par calcul distribué via Internet. Les données collectées totalisèrent 2 Go. La phase d'exploitation des données prit 45 heures sur le supercalculateur MasPar (en) (massivement parallèle) de Bellcore (devenu depuis Telcordia Technologies (en)). Ce fut, parmi les records publiés, le plus grand nombre factorisé par un algorithme non spécialisé, jusqu'à ce que le crible sur les corps de nombres soit utilisé pour la factorisation de RSA-130, terminée le . Tous les nombres RSA factorisés depuis l'ont été par le crible sur les corps de nombres.

Le record suivant du crible quadratique est la décomposition, en 2001, d'un nombre de 135 chiffres en produit de deux facteurs premiers, l'un de 66 chiffres et l'autre de 69. (Ce produit est un diviseur du nombre  , qui est lui-même un facteur aurifeuillien (en) de  .)

Notes et références

modifier
  1. (en) Carl Pomerance, « A Tale of Two Sieves », Notices of the AMS, vol. 43, no 12,‎ , p. 1473–1485 (lire en ligne)

Article lié

modifier