École normale supérieure Département d’informatique 2015-2016 Introduction à la cryptologie TD n◦ 5 : Primalité et factorisation Exercice 1 (Nombres de Fermat et test de primalité de Pépin). 1. Soit k un entier positif. Montrer que si l’entier 2k + 1 est un nombre premier alors k est une puissance de 2. n On appelle n-ème nombre de Fermat le nombre Fn = 22 + 1 pour n > 0. 2. Montrer que si Fn est premier, alors un entier g est un générateur de Z∗Fn si et seulement si g = −1. Fn En déduire que si Fn est premier alors 3 est un générateur de Z∗Fn . 3. Montrer que si 3(Fn −1)/2 ≡ −1 (mod Fn ) alors Fn est premier. Exercice 2 (Division euclidienne rapide par la méthode de Newton). Soit A un anneau commutatif unitaire (en pratique nous considérerons A = Z ou A = ZN ). Soient S, T ∈ A[X] avec deg(S) = n, deg(T ) = m avec m ≤ n et T unitaire. 1. Montrer que l’algorithme classique de division euclienne de S par T a une complexité arithmétique en O(nm) (i.e. le nombre d’opérations nécessaires dans l’anneau A est en O(nm)). 2. Pour P ∈ A[X] et k = deg(P ), nous notons Rec(P (X)) = X k P (1/X) le polynôme réciproque de P . Montrer que Rec(Q) = Rec(S)Rec(T )−1 mod X n−m+1 , où Q est le quotient de la division euclidienne de S par T . 3. Soit F ∈ A[X] avec F (0) = 1. Considérons la suite de polynômes Gi ∈ A[X] définie par G0 = 1 et i+1 Gi+1 = 2Gi − F · G2i mod X 2 pour i ≥ 0. Montrer que pour tour entier i ≥ 0, nous avons i F · Gi ≡ 1 mod X 2 . 4. En déduire un algorithme pour calculer Q et le reste R de la division euclidienne de S par T . 5. Montrer que la complexité arithmétique de cet algorithme de division euclidienne appliqué à deux polynômes de degrés < n est en O(M (n)) où M (n) est la complexité arithmétique du produit de deux polynômes de degré < n de A[X] (avec M (n1 + n2 ) ≥ M (n1 ) + M (n2 ) pour n1 , n2 ∈ N). Exercice 3 (Multi-évaluation d’un polynôme univarié). Soit A un anneau commutatif unitaire (en pratique nous considérerons A = Z ou A = ZN ). Soient a1 , . . . , ad ∈ A. Nous notons M (d) la complexité arithmétique du produit et de la division euclidienne de deux polynômes de degré < d de A[X] (avec M (d1 + d2 ) ≥ M (d1 ) + M (d2 ) pour d1 , d2 ∈ N). 1. Supposons que d = 2k est une puissance de 2 et considérons l’arbre binaire complet T à d feuilles défini par : — chacune des d feuilles est associée à un polynôme X − aj pour j ∈ {1, . . . , d} ; — pour chaque nœud interne u ayant les fils v et w associés aux polynômes Mv (X) et Mw (X) respectivement, u est associé au polynôme Mu (X) = Mv (X) · Mw (X). Donner un algorithme pour construire l’arbre T avec une complexité arithmétique en O(M (d) log d). 2. Soit P ∈ A[X] unitaire avec deg(P ) = d. Donner un algorithme qui prenant en entrée P , (a1 , . . . , ad ) et l’arbre T , calcule P (X) mod Mu (X) pour tout u ∈ T , avec une complexité arithmétique en O(M (d) log d). 1 3. Déduire des questions précédentes un algorithme qui calcule P (a1 ), . . . , P (ad ) pour tout d ∈ N avec une complexité arithmétique en O(M (d) log d). Exercice 4 (Algorithme de Pollard-Strassen). Soit N un entier positif composé et d = dN 1/4 e. 1. Montrer que (d2 )! ∧ N 6= 1. 2. En utilisant l’exercice précédent, expliquer comment on peut calculer (d2 )! mod N en O(M (d) log(d)) opérations arithmétiques dans Z/N Z. 3. En déduire un moyen de trouver un diviseur propre de N en O(N 1/4+o(1) ) opérations élémentaires. Exercice 5 (Extraction de racine carrée modulo p` ). Soit p un nombre premier impair et ` ≥ 2 un entier. 1. Montrer qu’un entier x premier avec p vérifie x2 ≡ 1 mod p` si et seulement si x ≡ ±1 mod p` . 2. Montrer qu’un entier x premier avec p est un carré modulo p si et seulement si x est un carré modulo p` . 3. En supposant connu un algorithme pour calculer une racine carrée de x modulo p (cf Ex. 8), donner un algorithme pour calculer une racine carrée de x modulo p` . Exercices complémentaires Exercice 6 (Algorithme de Pohlig-Hellman). Soit G un groupe cyclique d’ordre fini n dont la décomposition en facteurs premiers est connue. 1. Montrer que si n = pq est le produit de deux nombres premiers p et q distincts alors il existe √ √ un algorithme qui résout le problème du logarithme discret dans G en O( p + q + log(n)) multiplications dans G. 2. Montrer que si n = pe où p est un nombre premier et e ≥ 2 est un entier, alors il existe un algorithme √ qui résout le problème du logarithme discret dans G e, O(e( p + log(n))) multiplications dans G. 3. En déduire, si n = q1e1 · · · qkek où les qi sont des nombres premiers deux à deux distincts, alors il Pk √ existe un algorithme qui résout le problème du logarithme discret en O( i=1 ei ( qi + log(n))) opérations dans G. Exercice 7 (Extraction de racine carrée modulo p – Algorithme de Tonelli-Shanks). Soit p un nombre premier impair. 1. Supposons p ≡ 3 mod 4. Donner un algorithme de complexité O(log3 p) opérations binaires qui, étant donné α ∈ {1, . . . , p − 1} tel que αp = 1, retourne β ∈ {1, . . . , p − 1} tel que β 2 ≡ α mod p. Supposons maintenant que p ≡ 1 mod 4 et posons p = 2h m + 1 avec m impair. 2. Donner un algorithme probabiliste qui étant donné p retourne un élément γ de {1, . . . , p − 1} tel que γp = −1 en temps espéré O(log2 p) opérations binaires. Montrer que pour un tel γ, l’élément δ = γ m engendre l’unique sous-groupe d’ordre 2h de (Z/pZ)∗ . 3. Soit α ∈ {1, . . . , p − 1} tel que αp = 1. Montrer que αm appartient au sous-groupe engendré par δ et en utilisant un algorithme de logarithme discret, en déduire un algorithme pour calculer une racine carrée de αm mod p. 4. En utilisant l’exercice précédent, en déduire un algorithme permettant de calculer les racines carrées de α en temps O(log3 p). 2