• Aucun résultat trouvé

Encore plus loin avec Fermat

Dans le document MATHÉMATIQUES ET TI-Nspire (Page 140-145)

Annexe : les nombres hautement composés

Étape 1 : on décompose 1063 en base 2, en procédant à des divisions successives par 2

2. La méthode de Fermat

2.6 Encore plus loin avec Fermat

Plus p est proche de N, plus le nombre d’étapes nécessaires est petit. C’est le cas dans les exemples que nous avons donnés13. Dans le cas contraire, le nombre d’étapes peut être beaucoup plus grand que pour les divisions successives.

2.6 Encore plus loin avec Fermat

La méthode de Fermat est particulièrement efficace, on l’a remarqué, lorsque l’un des facteurs est très proche de la racine carrée de N. Peut-on s'arranger pour que ce soit le cas ?

Revenons sur l’exemple proposé par Mersenne à Fermat pour la factorisation de 100 895 598 169 : il ne se factorise pas facilement avec la méthode de Fermat14. Supposons que l’on sache qu’il s’écrit sous la forme p q , avec p < q et 1

7 p

q  . On a donc 7p q . Il n’en faut pas plus pour avancer…

Considérons maintenant N  7 1 7p q : 7N est bien un entier impair (c’est un point important), produit de deux entiers très voisins. On peut donc appliquer la méthode de Fermat :

L’on obtient alors la factorisation en moins de 10 secondes !

En général, on ne connaît pas le rapport qui a été donné plus haut : rien n’interdit d’essayer différentes valeurs. Si le nombre a de nombreux facteurs, on peut en obtenir quelques-uns ainsi.

L’algorithme de Lerman s’appuie sur ce principe.

13 Dont l’exemple de Fermat.

14 La calculatrice ne renvoie rien d’intéressant dans un temps raisonnable.

l’on utilise quand on cherche à factoriser un nombre composé.

Principe de l’algorithme

On suppose que le nombre n à factoriser possède un facteur premier p tel que les nombres premiers divisant p Ŕ 1 soient tous petits, disons par exemple inférieurs à 10 000 (ou toute autre borne qu’on voudra bien se fixer en fonction de la puissance de son outil de calcul). Plus précisément, on supposera dans la suite que p Ŕ 1 divise 10 000!.

Cette dernière condition, importante pour le fonctionnement de l’algorithme, n’est pas si souvent réalisée, d’autant moins que n devient grand. Cependant il suffit qu’elle le soit pour un des facteurs premiers de n, ce qui permet dans l’ensemble de couvrir des entiers n de taille respectable, comme le montrent les exemples qui suivent :

Nous supposerons donc que n s’écrit sous la forme n = pp’, avec p entier premier tel que p Ŕ 1 divise 10 000! et p’ entier naturel quelconque. Comme on cherche à factoriser n, l’entier p, pas plus que p’,

L’idée de l’algorithme p Ŕ 1 de Pollard est très simple : on effectue de proche en proche le calcul

En d’autres termes, du fait que n est un multiple de p, on peut passer de la congruence modulo n à la congruence modulo p.

Mais p étant par hypothèse un nombre premier, le petit théorème de Fermat permet d’affirmer que : 2p11(mod )p .

Comme 10 000! est un multiple de p Ŕ 1, on a aussi :

10000!

2 1(mod )p (2)

Le rapprochement des congruences (1) et (2) montre que : m  1 (mod p)

d’où il ressort que p divise m Ŕ 1.

Comme p divise à la fois m Ŕ 1 et n, il divise pgcd(mŔ1,n). En d’autres termes, ce pgcd, dont le calcul, faut-il le rappeler, est très efficace, fournira un facteur non trivial de n si l’on a de la chance, ou n lui-même parfois, ce qui n’apporte rien…

Étude avec l’application Tableur et listes

Dans la pratique, il n’est pas nécessaire d’aller jusqu’à 10 000! pour obtenir un résultat. On peut à chaque étape calculer m, et le pgcd qui correspond, pour le cas échéant en déduire un facteur de n.

À l’aide d’une feuille de calcul, examinons ce qui se passe sur un cas particulier pas trop grand, par exemple, 10 001 :

l’entier est rentré en A1, et mémorisé dans une variable n ; dans la colonne B, on entre tous les entiers de 1 à 100 avec seq ;

dans la colonne C, de C1 à C100, on effectue les calculs successifs de 21, puis (21)2, ((21)2)3 etc. modulo n : on peut par exemple saisir en C2 la formule15 : =mod(c1^(b2),n) ;

en D2, il reste à calculer gcd(c2–1,n), puis à recopier vers le bas.

Le résultat ici montre un facteur, premier, de 10 001, à savoir 73, que l’on obtient à partir de 2 . 6!

L’entier p que l’on cherche divise à la fois m Ŕ 1 = 1 168 et 10 001, donc leur pgcd qui vaut 73. Voilà mis en évidence ce qu’on cherchait, c’est-à-dire un diviseur de n. Une factorisation est donc :

10 001 = 73  137.

Chacun des facteurs obtenus est bien ici premier16.

15 Le programme d’exponentiation modulaire peut être utilisé ici pour s’affranchir des limitations de la fonction mod.

16 Mais ce n’est pas obligatoire… Sinon, on recommence à partir des facteurs obtenus, plus petits, auxquels on essaie d’appliquer une méthode de factorisation…

On remarque aussi que la suite des pgcd (colonne D) est croissante au sens large. En effet, il est clair que si d divise mod(k!,n) et n, alors nécessairement d divise aussi mod((k+1)!,n) et n.

Dans certains cas, semble-t-il rares, on peut « rater » un diviseur, comme le montre l’exemple suivant (image de gauche) ; signalons qu’en travaillant avec 3 plutôt que 2, on récupère cette fois le diviseur manquant 13 (image de droite).

Écriture d’une fonction

La fonction qui suit tient compte de notre étude précédente. Contrairement à ce que nous avons fait dans le tableur, on ne teste le pgcd que toutes les 10 étapes (on peut changer si nécessaire cette valeur dans le programme, soit pour l’augmenter, ou pour la diminuer, 10 semble être un compromis raisonnable). D’autre part, les calculs des puissances successives se font avec 2, mais on pourrait utiliser tout autre nombre comme 3 ou 18. Par commodité, ce nombre a été choisi pour être le

deuxième argument de la fonction, le premier étant l’entier que l’on cherche à factoriser. Le code est le suivant :

Testons cette fonction avec les différents nombres entiers évoqués au début du chapitre. Avec 34 563 298 729 527 654 368, on récupère dans un temps très court pas moins de 3 facteurs non triviaux qui conduisent à la factorisation complète de cet entier de 20 chiffres :

Pour 1030 + 1, on récupère très rapidement les facteurs 6161, 9901, 3541 et 27961, pas tous premiers, mais notre fonction échoue à trouver un facteur à 1030 1

6161 9901 3541 27961

   :

D’autres résultats montrent l’étonnante efficacité de cette méthode, pourtant très simple, avec des temps de traitement très courts :

Voici une factorisation complète de 1040 + 1 :

La méthode p Ŕ 1 de Pollard induit des restrictions dans le choix des entiers qui interviennent dans le cryptage RSA : faire intervenir des nombres premiers p et q tels que p Ŕ 1, ou q Ŕ 1, possède de petits facteurs premiers est fortement contre-indiqué ! On comprend aisément pourquoi !

Dans le document MATHÉMATIQUES ET TI-Nspire (Page 140-145)