# Test de primalité de Miller-Rabin

En mathématiques, le test de primalité de Miller-Rabin est un test de primalité probabiliste, de type Monte Carlo : étant donné un nombre entier, il donne une réponse oui/non pour conclure soit de façon certaine que celui-ci est composé, soit qu'il est probablement premier. La probabilité qu'un nombre déclaré premier par l'algorithme soit en réalité composé peut être rendue aussi faible que souhaité, en fonction des paramètres d'entrées de l'algorithme. En cela il est analogue au test de primalité de Solovay-Strassen, mais toujours plus efficace que ce dernier.
Sa version originale, due à Gary L. Miller, est déterministe, mais ce déterminisme dépend de l'hypothèse de Riemann généralisée (qui n'est pas démontrée) ; Michael Rabin l'a modifiée pour obtenir un algorithme probabiliste inconditionnel.
Le test de Miller-Rabin est très utilisé en cryptographie asymétrique pour engendrer les grands nombres premiers nécessaires pour le chiffrement RSA, et pour beaucoup des utilisations du chiffrement El Gamal ou de l'échange de clés Diffie-Hellman.

## Principes mathématiques

Comme les tests de primalité de Fermat ou de Solovay-Strassen, celui de Miller-Rabin tire parti d'une propriété de l'entier n, qui dépend d'un entier auxiliaire, le témoin, et qui est vraie dès que n est un nombre premier. Le principe du test est de vérifier cette propriété pour suffisamment de témoins.
Le test de Miller-Rabin étend le test de Fermat : la propriété est un raffinement du petit théorème de Fermat. Elle s'appuie sur le fait que dans un corps, ce qui est le cas de ℤ/pℤ si p est premier, l'équation X$^2$ = 1 n'a pour solutions que 1 et –1. Autrement dit, en termes de congruences, les seuls entiers dont le carré est congru à 1 modulo un nombre premier p sont eux-mêmes congrus à 1 ou à –1 modulo p. On déduit alors du petit théorème de Fermat que :
Proposition.— Soit p > 2 un nombre premier, soient s et d les deux entiers naturels, s non nul et d impair, vérifiant p − 1 = 2$^s$ × d (s est le nombre maximum de fois que l'on peut mettre 2 en facteur dans p − 1). Alors, pour tout entier a qui n'est pas divisible par p :$a^{d}\equiv 1{\pmod {p}}\quad {\rm {ou}}\quad \exists r\in \{0,1,\ldots ,s-1\}\quad a^{2^{r}d}\equiv -1{\pmod {p}}.$
En effet, d'après le petit théorème de Fermat,
$a^{p-1}=(a^{d})^{2^{s}}\equiv 1{\pmod {p}}$
et en prenant de façon répétée des racines carrées à partir de a$^{p–1}$, on obtient soit toujours 1 modulo p, jusqu'à a$^d$ ≡ 1 mod p, soit pour un certain 0 ≤ r < s, a$^{d2r}$ ≡ –1 mod p (a$^{d2i}$ ≡ 1 mod p pour r< i ≤ s), seule autre racine carrée possible de 1 modulo p (voir ci-dessus).
Par contraposition, si : $a^{d}\not \equiv 1{\pmod {n}}\quad {\rm {et}}\quad \forall r\in \{0,1,\ldots ,s-1\}\quad a^{2^{r}d}\not \equiv -1{\pmod {n}}$ alors n est composé, et a est appelé un témoin de Miller pour le fait que n est composé.
A contrario, si la conclusion de la proposition est réalisée, n n'est pas nécessairement premier. On dit alors que n est fortement probablement premier en base a. Lorsque n n'est pas premier mais pourtant fortement probablement premier en base a, on dit que a est un menteur fort (pour n premier), et que n est fortement pseudo-premier en base a.
Un témoin potentiel a peut être choisi sans perte de généralité entre 1 et n, plus précisément 1 < a < n. Le test de Miller-Rabin s'appuie sur le fait que, contrairement au test de Fermat, non seulement un nombre composé possède toujours un témoin de Miller —c'est-à-dire que l'équivalent des nombres de Carmichael n'existe pas pour le test de Miller-Rabin —, mais de plus :
Proposition.— Pour un nombre impair composé n, 3/4 au moins des entiers a, 1 < a < n , sont des témoins de Miller pour n.
Il suffit donc de répéter le test pour suffisamment d'entiers a choisis indépendamment, pour que la probabilité qu'un entier n composé soit déclaré premier devienne très faible.
Cette dernière proposition est un corollaire du théorème suivant, publié indépendamment par Michael Rabin et Louis Monier en 1980 (φ est la fonction indicatrice d'Euler) :
Théorème de Rabin.— Soit n un entier impair composé > 9, avec n – 1 = 2$^s$ × d pour d impair. Alors il existe au plus φ(n)/4 menteurs forts a, pour 1 < a < n, c'est-à-dire des entiers a dans cet intervalle vérifiant soit a$^d$ ≡ 1 mod n, soit a$^{d2r}$ ≡ –1 mod n pour un certain r tel que 0 ≤ r < s.

## Algorithme et temps d'exécution
### Test d'un témoin

L'algorithme suivant permet de déterminer si un entier a est un témoin de Miller pour l'entier n$^,$.
La décomposition n – 1 = 2$^s$d, d impair se calcule en O (log(n)) par une boucle simple : la représentation binaire de n – 1 est la représentation binaire de d, terminée par le bit 1 de poids le plus faible, suivie de s bits à 0. Ce calcul pourrait être effectué une seule fois dans le test de Miller-Rabin pour tous les appels à la procédure de test d'un témoin_de_Miller.
Le calcul du reste x$_0$ de la division de a$^d$ par n puis les élévations au carré successives (pour calculer les x$_i$ = a$^{d2i}$ mod n) sont des calculs d'exponentiation modulaire. Par exponentiation rapide, le calcul se fait en O((log d)(log n)$^2$) pour le calcul de a$^d$, suivi d'au plus s (s ≤ log(n)) élévations au carré en O((log n)$^2$). Le temps de calcul du premier algorithme, le test que a est ou non un témoin de Miller pour n est donc en O((log n)$^3$).

### Test de Miller-Rabin

Le test de Miller-Rabin$^,$ est alors décrit par la procédure suivante : Miller-Rabin(n, k) renvoie « Vrai » si n est fortement pseudo-premier en base a pour k entiers a choisis aléatoirement, « Faux » s'il est composé. Quand Miller-Rabin(n, k) valide n pour un nombre k est suffisamment grand, le nombre n peut être déclaré premier avec une faible probabilité d'erreur (voir la section #Utilisation pour des exemples de valeur numérique).
Le temps de calcul du test de Miller-Rabin est en O(k(log n)$^3$) ; ainsi cet algorithme est en temps polynomial et efficace. La multiplication rapide FFT peut abaisser le temps d'exécution à Õ(k × log$^2$ n).

## Exemples

* Le nombre composé 561 (divisible par 3) est le plus petit nombre de Carmichael. On a :
561 – 1 = 560 = 35×2$^4$ :
| 0 | 2$^{35}$ ≡ | 263 mod 561 | 3$^{35}$ ≡ | 78 mod 561 | 50$^{35}$ ≡ | 560 mod 561 |
| 1 | 263$^2$ ≡ | 166 mod 561 | 78$^2$ ≡ | 474 mod 561 | | |
| 2 | 166$^2$ ≡ | 67 mod 561 | 474$^2$ ≡ | 276 mod 561 | | |
| 3 | 67$^2$ ≡ | 1 mod 561 | 276$^2$ ≡ | 441 mod 561 | | |
| | 2 est un témoin de Miller | 2 est un témoin de Miller | 3 est un témoin de Miller | 3 est un témoin de Miller | 50 est un menteur fort | 50 est un menteur fort |
    On observe que 2 est un témoin de Miller, ce qui suffit pour assurer que 561 est composé ; 3 est également un témoin de Miller. Le nombre 50 est un menteur fort.
* Le nombre 1373653 est le plus petit nombre composé qui n'a ni 2 ni 3 pour témoin de Miller (suite A014233 de l'OEIS) :
1373653 – 1 = 1373652 = 343413×2$^2$ :
| 0 | 2$^{343413}$ ≡ | 890592 mod 1373653 | 3$^{343413}$ ≡ | 1 mod 1373653 | 5$^{343413}$ ≡ | 1199564 mod 1373653 |
| 1 | 890592$^2$ ≡ | 1373652 mod 1373653 | | | 1199564$^2$ ≡ | 73782 mod 1373653 |
| | 2 est un menteur fort | 2 est un menteur fort | 3 est un menteur fort | 3 est un menteur fort | 5 est un témoin de Miller | 5 est un témoin de Miller |
    Le nombre 5 est un témoin de Miller et donc 1373653 est composé.

## Probabilité d'erreur et nombre d'itérations

Le théorème de Rabin permet de montrer que la probabilité qu'un nombre composé impair m de p bits (compris pris entre m = 2$^{p–1}$ et m = 2$^p$), soit déclaré probablement premier par l'algorithme de Miller-Rabin pour k nombres a tirés aléatoirement est inférieure à 4$^{−k}$. C'est une probabilité conditionnelle (n est déclaré probablement premier sachant qu'il est composé). Pour la fiabilité de l'algorithme on s'intéresse plutôt à celle de produire un faux positif, c'est-à-dire à la probabilité que l'algorithme déclare premier un nombre composé, qui est une autre probabilité conditionnelle (n est composé sachant que l'algorithme termine sur Vrai). Pour l'évaluer, la première probabilité (n déclaré probablement premier sachant qu'il est composé) est à comparer avec la probabilité pour un nombre impair quelconque de p bits d'être premier qui est de l'ordre de 2/ln(m) quand m est suffisamment grand, par le théorème des nombres premiers. Ceci donne, pour k suffisamment grand pour que 4$^{−k}$ soit négligeable devant 2/ln(m), une probabilité qu'un nombre de p bits soit composé, sachant que l'algorithme le déclare premier, de l'ordre de ln(m)/(2×4$^k$). Cette probabilité, celle que l'algorithme déclare faussement un nombre premier, devient rapidement très faible quand k augmente.
Il s'avère que dans beaucoup de cas un nombre composé possède nettement plus de 3 témoins de Miller sur 4, et le résultat précédent peut être fortement amélioré. On peut montrer par exemple que la probabilité que l'algorithme déclare faussement premier un nombre de p bits, est en réalité inférieure à 4$^{−k}$.
Pour un grand nombre de bits, cette borne peut encore être améliorée : la probabilité qu'un seul test de Miller-Rabin déclare faussement premier un nombre de p bits est inférieure à p$^2$4$^{2−√p}$, et cette borne peut être encore plus faible pour certaines valeurs de p.

## Versions déterministes

L'algorithme original de Miller est déterministe, mais repose sur l'hypothèse de Riemann généralisée, plus précisément si l'hypothèse de Riemann généralisée est vraie, alors le plus petit témoin de Miller pour un nombre impair composé n est strictement inférieur à 2(ln n)$^2$. Ceci donne immédiatement un algorithme déterministe polynômial pour tester la primalité, en itérant dans l'algorithme de Rabin-Miller sur tous les entiers < 2(ln n)$^2$. Cependant outre que la validité de cet algorithme repose sur une hypothèse non démontrée, il existe d'autres tests déterministes plus efficaces en pratique. Par ailleurs, sur le plan théorique, on sait depuis, sans utiliser d'hypothèse non démontrée, que la primalité est un problème polynomial, par le test de primalité AKS.
Pour certaines bases, on a calculé le plus petit entier composé dont un test de Miller-Rabin utilisant ces bases ne détecte pas qu'il est composé, ce qui fournit un test déterministe jusqu'à ce nombre. Ainsi la suite A014233 de l'OEIS donne en fonction de n le plus petit entier impair composé dont les n premiers entiers premiers ne sont pas des témoins de Miller.
Par exemple le test de Miller-Rabin devient déterministe pour un entier qui s'écrit sur 64 bits quand on prend pour bases les 12 premiers entiers premiers, soit 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37.

## Utilisation

Le test de Miller-Rabin est très utilisé en cryptographie pour produire les nombres premiers nécessaires, pour les chiffres asymétriques en particulier le RSA, mais aussi ceux reposant sur le problème du logarithme discret dans le groupe multiplicatif d'un corps fini premier. La taille des nombres premiers dont on a besoin a augmenté avec les progrès des attaques et des moyens de calcul. Dans une recommandation du NIST de 2013, les tailles des nombres premiers utiles sont toujours au-delà de 100 bits et vont jusqu'à 3072 bits.
Une question est de déterminer le nombre d'itérations de l'algorithme, c'est-à-dire le nombre k d'entiers a dont on va tester qu'ils ne sont pas des témoins de Miller. Par exemple le manuel de la bibliothèque GMP (version 6.0.0) recommande de prendre k = 25, pour obtenir une probabilité d'erreur inférieure à 2$^{–50}$ (~10$^{–15}$).
Le nombre d'itérations dépend de la façon dont le nombre à tester a été obtenu : s'agit-il de tester un nombre produit aléatoirement ou de vérifier un nombre dont on ignore comment il a été produit (possiblement pour tromper certains tests) ? L'utilisation d'un nombre qui n'est pas réellement premier n'a pas forcément des conséquences importantes. Ainsi dans le chiffrement RSA, utiliser pour le module un produit de nombres qui ne sont pas premiers peut produire une erreur lors des opérations de chiffrement/déchiffrement, erreur qui assure d'ailleurs qu'il y a un problème de primalité, mais pas révéler un secret. De plus un nombre très grand dont on sait qu'il est produit aléatoirement peut requérir moins d'itérations (voir #Probabilité d'erreur et nombre d'itérations). On trouve diverses valeurs, qui dépendent de l'utilisation, dans les recommandations du NIST de 2013 qui vont de 3, pour des entiers premiers de 1536 bits utilisés pour produire un module RSA de 3072 bits, à 64 pour des nombres de 3072 et 256 bits utilisés pour un schéma de signature DSA, fondé sur un chiffrement de type El Gamal.