
UPMC Ann´
ee 09/10 3
faire une multiplication, cette boucle compte pour O(ln(n)) multiplications. L’algorithme effectue
donc O(ln(n)) multiplications modulaires. (Un produit modulo npeut ˆetre r´ealis´e en O(ln(n)2).
Le test de Miller-Rabin d´ecrit ci-dessus renvoie, si nest un entier impair non premier, Compos´e
avec une probabilit´e sup´erieure `a 3/4. Ceci est clairement trop faible pour un usage sˆur tel que la
cryptologie l’exige. N´eanmoins, et c’est l`a la grande force des algorithmes de type Monte Carlo, si
l’on relance kfois le test de Miller-Rabin sur le mˆeme entier impair non premier nla probabilit´e
que le test se trompe, c’est `a dire qu’il renvoie les kfois Probablement premier, est de (1/4)kce
qui d´ecroit exponentiellement vite vers 0 quand ktend vers l’infini.
En pratique, 6 appels (au lieu de 44) au test de Miller-Rabin suffisent pour avoir un r´esultat
sˆur `a 2−80 pr`es. Ceci est du au fait que le lemme 1 donnant une borne du nombre de t´emoins forts
est tr`es lache. Le test de Miller-Rabin est donc aujoud’hui encore, l’un des tests de primalit´es les
plus efficaces connus.
1.1.2. Le calcul de racines carr´ees modulaires. En cryptologie, un certain nombre de cryptages
repose sur des applications math´ematiques computationnellement asym´etriques, on dit qu’une
application fest computationnellement asym´etrique si fest une bijection de Adans B, telle que
le calcul de f(a) peut se faire en temps polynomial pour tout a∈A, alors que le calcul de f−1(b)
est difficile (au moins NP-Complet). De telles applications existent, par exemple l’exponentiation
modulaire et sa r´eciproque le logarithme discret (voir cours de crypto). Nous allons montrer ici que
le carr´e modulaire n’est pas (d’un point de vue probabiliste) une application computationnellement
asym´etrique.
Un entier xest un r´esidu quadratique modulo p, s’il existe un entier ytel que 0 < y < p et
y2=qmod p. L’entier yest alors une racine carr´ee de xmodulo p.Il est bon de remarquer que
0 n’est pas consid´er´e comme un r´esidu quadratique bien que 02= 0.
Commen¸cons par un petit rappel d’alg`ebre qui nous sera bien utile par la suite :
Propri´et´e 2. Z/pZest un corps ssi pest premier. Dans un corps, un polynˆome de degr´e na au
plus nracines distinctes.
Donc, un r´esidu quadratique a au plus 2 racines carr´ees distinctes. Si yest une racine carr´ee de
xmodulo p, alors −yest aussi et yet −ysont diff´erents mod p(pest impair). Par cons´equent,
les p−1 entiers {1, . . . , p −1}sont les racines carr´ees d’exactement p−1
2r´esidus quadratiques
diff´erents : exactement la moiti´e des entiers non nuls modulo psont des r´esidus quadratiques.
Nous allons dans un premier temps donner une caract´erisation des r´esidus quadratiques :
Propri´et´e 3. Soit pun nombre premier impair et x∈ {1, ..., p −1}.On a pour tout x, x(p−1)/2=
±1, de plus x(p−1)/2= 1 si et seulement si xest un r´esidu quadratique modulo p.
Preuve. Posons z=x(p−1)/2mod p, on a z2= 1 mod pcar par le petit th´eor`eme de Fermat
x(p−1) = 1 mod p. Donc zest une racine modulo pde 1 et vaut 1 ou −1. Ceci conclut la premi`ere
partie de la proposition.
Si xest un r´esidu quadratique, il existe un entier ytel que 0 < y < p et y2=xmod p. D’apr`es
le petit th´eor`eme de Fermat : x(p−1)/2=y(p−1) = 1 mod p.
Dans Z/pZ, une ´equation polynˆomiale ne peut avoir plus de solutions que son degr´e. Nous
connaissons d´ej`a (p−1)/2 racines `a l’´equation x(p−1)/2= 1 mod p(les r´esidus quadratiques),
donc aucun non-r´esidu ne peut en ˆetre solution.
Il est donc assez rapide de tester si un entier xest un r´esidu quadratique, en faisant une
exponentiation modulaire. Notre probl`eme est donc de trouver l’une des deux racines modulaires
d’un r´esidu quadratique. Remarquez que si l’on a trouv´e une racine xalors l’autre est −x. Il y a
un fait assez surprenant dans ce probl`eme, suivant que pest congru 1 ou 3 modulo 4 la solution
est simple ou difficile `a trouver. Voici la partie simple :
Propri´et´e 4. Soit pun nombre premier tel que p= 4k+ 3 alors si xest un r´esidu quadratique,
une racine modulaire de xest xk+1.
Preuve. Comme xest un r´esidu quadratique, x(p−1)/2= 1 avec (p−1)/2=2k+ 1, on a donc
x2k+2 =x. Il s’ensuit que xk+1 est une racine carr´ee modulo p.