Probleme – Fabriquer un nombre premier
Exercice · niveau 3 (difficile) · informatique (MP2I/MPI), chapitre 25 — Algorithmes probabilistes, approximation, séparation et évaluation
Énoncé
Le chapitre annonce que la construction d'un nombre premier de taille cryptographique est l'usage propre de Las Vegas. On la construit.
- Écrire le test de primalité de Fermat, et mesurer son taux d'erreur.
- Montrer que certains composés le trompent toujours.
- Écrire la génération Las Vegas, et mesurer le nombre de tirages.
- Extrapoler à bits.
Corrigé
1. Le test. Il repose sur le petit théorème de Fermat : si est premier et , alors . On teste la contraposée sur témoins tirés au hasard.
(* Exponentiation modulaire rapide. Precondition : m >= 1, e >= 0.
Complexite : Theta(log e) multiplications. *)
let rec puiss_mod b e m =
if e = 0 then 1
else let r = puiss_mod b (e / 2) m in
let r2 = r * r mod m in
if e mod 2 = 0 then r2 else r2 * b mod m
(* Test de primalite de Fermat a k temoins.
Sortie : false => n est composé A COUP SUR ; true => n est PROBABLEMENT premier.
Complexite : Theta(k log n). *)
let fermat n k =
if n < 4 then n = 2 || n = 3
else if n mod 2 = 0 then false
else begin
let probable = ref true in
for _ = 1 to k do
let a = 2 + Random.int (n - 3) in
if puiss_mod a (n - 1) n <> 1 then probable := false
done;
!probable
end
L'erreur est unilatérale : un « faux » est une certitude, un « vrai » est une probabilité. C'est ce qui rend le test exploitable — on ne rejettera jamais un premier.
Mesure sur tous les entiers de à , qui contiennent nombres premiers :
| témoins | faux positifs | faux négatifs |
|---|---|---|
Aucun faux négatif, jamais : c'est le théorème. Et les faux positifs s'effondrent avec .
2. Les nombres de Carmichael. Un composé est dit de Carmichael si pour tout premier avec . Les plus petits sont , et . Sur eux, le test ne peut réussir qu'en tombant sur un partageant un facteur avec — et la proportion de tels témoins peut être faible. Mesure du taux de témoins « menteurs », c'est-à-dire pour lesquels le test conclut à tort :
| menteurs | proportion | erreur à | |
|---|---|---|---|
| sur | |||
| sur | |||
| sur | |||
| sur | --- | ||
| sur | --- |
Sur , trois témoins sur quatre mentent : témoins laissent encore d'erreur, et il n'y a aucun qui rende l'erreur arbitrairement petite indépendamment de — la proportion de menteurs tend vers pour des nombres de Carmichael à beaucoup de facteurs.
C'est pourquoi la cryptographie n'emploie pas Fermat mais Miller-Rabin, qui affine le test en exploitant les racines carrées de modulo , et pour lequel on démontre qu'au plus un quart des témoins mentent, quel que soit le composé. La probabilité d'erreur tombe alors sous , sans exception. Miller-Rabin est hors programme ; le fait que Fermat ait un défaut structurel, lui, se mesure.
3. La génération. C'est le schéma Las Vegas pur : tirer, tester, recommencer.
(* Un nombre premier de b bits, avec probabilite d'erreur < 2^-k environ.
Precondition : b >= 3. TOUJOURS un nombre qui passe le test ;
le nombre de tirages est aleatoire, d'esperance environ ln(2^b)/2. *)
let premier_de b k =
let bas = 1 lsl (b - 1) and haut = 1 lsl b in
let rec tirer essais =
let x = bas + Random.int (haut - bas) in
let x = if x mod 2 = 0 then x + 1 else x in (* on ne tire que des impairs *)
if x < haut && fermat x k then (x, essais)
else tirer (essais + 1)
in
tirer 1
Terminaison : elle n'est pas garantie au sens strict — c'est la définition même d'un Las Vegas. Elle est presque sûre : chaque tirage réussit avec une probabilité fixe, donc la probabilité de ne jamais réussir est . Le nombre de tirages suit une loi géométrique d'espérance .
Le calcul de . Le théorème des nombres premiers donne : la densité des premiers autour de vaut environ . En ne tirant que des impairs, on double cette densité, d'où
Mesure sur générations :
| (bits) | tirages mesurés | |
|---|---|---|
4. À bits, la formule donne tirages, ce qui est le chiffre annoncé par le chapitre. Chaque tirage coûte exponentiations modulaires sur bits ; l'ensemble prend une fraction de seconde sur une machine ordinaire. C'est ainsi que sont fabriquées les clés RSA.
Et l'on mesure ce que le hasard apporte ici. Aucun procédé déterministe connu ne construit un premier de bits : on ne sait pas écrire de formule, et énumérer les impairs à partir d'un point donné n'offre aucune garantie de temps. Le hasard n'est pas un pis-aller ; c'est le seul procédé connu, et il est efficace. L'aléa sert ici à construire, pas à accélérer — c'est la distinction que le chapitre place au cœur de Las Vegas.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.