Cryptographie post-quantique · C1 Socle et menace quantique · Chapitre 2 · 4 h
Calcul quantique pour cryptographes
Comprendre l'attaque sans faire de physique : transformée de Fourier quantique, Shor en temps polynomial, Grover et son simple gain quadratique.
Ce chapitre a un objectif précis et une limite tout aussi précise. L'objectif : comprendre pourquoi Shor casse RSA et pourquoi Grover ne casse pas AES. La limite : nous ne ferons pas un cours de mécanique quantique. Un cryptographe a besoin de savoir ce que ces algorithmes prennent en entrée, ce qu'ils rendent, et à quel coût — pas de savoir résoudre l'équation de Schrödinger.
Le qubit, sans mysticisme
Un bit classique vaut 0 ou 1. Un qubit est décrit par deux nombres complexes et tels que :
À la mesure, on obtient 0 avec probabilité et 1 avec probabilité , et l'état est détruit. Un registre de qubits est décrit par amplitudes.
C'est ici que naît le malentendu le plus répandu du domaine. On lit partout qu'un ordinateur quantique « essaie toutes les possibilités en parallèle ». C'est faux, et il faut le dire fermement à des étudiants qui l'ont lu ailleurs. Les amplitudes existent bien, mais la mesure n'en rend qu'une seule, tirée au hasard. Un parallélisme dont on ne peut extraire qu'un résultat aléatoire ne vaut rien.
Ce qui fait la puissance de l'algorithmique quantique n'est pas la superposition, c'est l'interférence. Les amplitudes sont des nombres complexes : elles peuvent s'annuler. Un algorithme quantique utile est un algorithme qui organise les annulations de sorte que les mauvaises réponses s'éteignent mutuellement et que les bonnes se renforcent, avant la mesure. Tout le métier est là.
L'intrication est le troisième ingrédient : l'état de deux qubits n'est pas toujours décomposable en deux états individuels. C'est ce qui rend le registre irréductible à qubits séparés, et donc l'espace des états exponentiel.
Quiz · 1 question
Pourquoi la superposition seule ne suffit-elle pas à accélérer un calcul ?
- Parce que préparer une superposition coûte un temps exponentiel
- Parce que la mesure ne rend qu'un seul résultat, tiré au hasard : il faut d'abord organiser des interférences
- Parce que la superposition ne concerne qu'un qubit à la fois
Réponse : On peut mettre n qubits en superposition de toutes les 2ⁿ valeurs avec n portes de Hadamard, donc en temps linéaire. Le problème est à la sortie : mesurer donne une valeur au hasard, ce qu'un tirage aléatoire classique aurait fourni gratuitement. Un algorithme quantique utile passe son temps à faire interférer les amplitudes pour que les mauvaises réponses s'annulent AVANT la mesure.
La transformée de Fourier quantique
L'outil central de Shor est la transformée de Fourier quantique, la QFT. C'est la transformée de Fourier discrète habituelle, appliquée au vecteur des amplitudes.
Sa propriété décisive : elle transforme une amplitude périodique de période en une amplitude concentrée sur les multiples de . Autrement dit, elle convertit une période — information globale, invisible sur un échantillon — en une position, qu'une mesure révèle en une fois.
Le coût est ce qui surprend. La transformée de Fourier discrète classique sur points coûte opérations, ou ramené à par la FFT. La QFT sur qubits coûte portes. On passe d'exponentiel à quadratique — en le nombre de qubits, ce qui n'est pas un miracle mais un changement d'unité de compte : la QFT ne donne pas accès aux amplitudes, elle les transforme en bloc sans jamais permettre de les lire.
Shor : une seule ligne est quantique
La factorisation se ramène à un problème de période. Pour factoriser , on choisit au hasard et on cherche l'ordre de modulo , c'est-à-dire le plus petit tel que . Si est pair et , alors
sont des facteurs non triviaux de . Cette réduction est entièrement classique et date d'avant Shor. Ce que Shor a apporté, c'est une méthode quantique pour trouver .
Animation · 8 étapes
Shor sur N = 15 : tout est classique sauf une ligne
- Le nombre à factoriser — N = 15 est ridicule, et c'est voulu : ce que la trace montre n'est pas la difficulté du calcul mais la RÉPARTITION du travail entre classique et quantique.
- Tirer une base au hasard — On choisit a entre 2 et N−1. Le tirage est classique, et s'il tombe mal on recommence — Shor est un algorithme probabiliste, pas un oracle.
- Le coup de chance qu'on espère ne pas avoir — Si a partageait un facteur avec N, l'algorithme d'Euclide le donnerait tout de suite et on n'aurait besoin d'aucun ordinateur quantique. Ici pgcd(7, 15) = 1 : pas de chance, il faut continuer.
- La seule ligne quantique — On cherche le plus petit r tel que 7^r ≡ 1 mod 15. La suite des puissances vaut 7, 4, 13, 1 : la période est 4. Classiquement, trouver r coûte autant que factoriser ; c'est la transformée de Fourier quantique qui l'extrait en temps polynomial.
- La période doit être paire — Si r était impair, a^(r/2) n'aurait pas de sens entier et il faudrait retirer un autre a. Ici r = 4 convient. La probabilité que le tirage soit exploitable est d'au moins 1/2, d'où quelques répétitions au pire.
- Premier facteur par un simple pgcd — 7² = 49 ≡ 4 mod 15. On calcule pgcd(4 − 1, 15) = pgcd(3, 15) = 3. Le facteur sort d'un algorithme d'Euclide, vieux de deux mille trois cents ans.
- Second facteur — pgcd(4 + 1, 15) = pgcd(5, 15) = 5. Et 3 × 5 = 15.
- Ce qu'il faut retenir de la trace — Neuf lignes, une seule quantique. RSA ne tombe pas parce qu'un ordinateur quantique « essaie tous les facteurs en parallèle » — cette formule est fausse — mais parce qu'il sait extraire une période, et que la factorisation s'y ramène.
Déroulez la trace et comptez : une ligne sur neuf est quantique. C'est la formulation correcte de la menace, et elle est plus utile que l'image de la machine qui essaie tous les facteurs. Le logarithme discret tombe de la même manière, parce que trouver tel que est également un problème de période déguisé — d'où le fait qu'un seul algorithme emporte RSA, Diffie-Hellman et les courbes elliptiques.
Le coût annoncé est polynomial : de l'ordre de opérations quantiques pour un module de bits, contre un coût sous-exponentiel pour le meilleur algorithme classique connu, le crible algébrique.
Grover : pourquoi seulement la racine carrée
Grover résout un problème différent : chercher l'unique bonne entrée parmi possibilités, quand la seule chose qu'on sache faire est tester une entrée. Il y parvient en évaluations au lieu de .
Appliqué à une clé de 128 bits, cela donne évaluations au lieu de : la sécurité est divisée par deux en bits, pas effondrée. D'où la règle simple du chapitre précédent — doubler la taille des clés symétriques.
Trois précisions rendent Grover encore moins menaçant qu'il n'en a l'air, et méritent d'être connues.
D'abord, cette borne est optimale : on sait démontrer qu'aucun algorithme quantique ne fait mieux que pour une recherche non structurée. Il n'y a pas de « Grover amélioré » à craindre.
Ensuite, Grover se parallélise mal. Répartir la recherche sur machines ne divise le temps que par , alors qu'une recherche exhaustive classique se divise par . Les évaluations doivent donc être largement séquentielles, ce qui impose une durée de calcul et une profondeur de circuit considérables.
Enfin, chaque évaluation exige d'implémenter AES en circuit quantique réversible, ce qui coûte bien plus cher qu'un tour d'AES sur un processeur ordinaire. Le NIST en tient compte dans ses niveaux de sécurité, en plafonnant la profondeur de circuit admissible.
Quiz · 1 question
AES-256 est-il menacé par Grover ?
- Oui : sa sécurité tombe à 128 bits, ce qui reste hors de portée — gain quadratique
- Oui : sa sécurité tombe à 16 bits — gain exponentiel
- Non : Grover ne s'applique pas aux chiffrements par blocs — hors périmètre
Réponse : Grover s'applique bien à AES — c'est une recherche non structurée sur l'espace des clés — et fait effectivement tomber AES-256 de 256 à 128 bits. Mais 2¹²⁸ évaluations largement séquentielles d'un circuit AES réversible restent hors d'atteinte de toute machine imaginable. « Menacé » et « affaibli » ne sont pas synonymes : c'est la nuance que le tableau du chapitre 1 encode.
Où en est le matériel
C'est la question que tout auditoire pose, et la seule à laquelle il faut répondre avec des ordres de grandeur plutôt qu'avec une date.
La distinction décisive est celle entre qubit physique et qubit logique. Les qubits physiques sont bruités : leur état se dégrade en quelques dizaines de microsecondes. Un qubit logique est un qubit corrigé, construit à partir de nombreux qubits physiques par un code correcteur quantique. Le rapport dépend du taux d'erreur physique et se compte aujourd'hui en centaines à milliers de qubits physiques par qubit logique.
Les machines annoncées se comptent en centaines à un millier de qubits physiques, et le franchissement du seuil de correction d'erreur — le point où ajouter des qubits physiques réduit effectivement le taux d'erreur logique — a été démontré expérimentalement, ce qui constitue le jalon scientifique important de ces dernières années.
Les estimations de ressources pour casser RSA-2048 se comptaient, dans les travaux de référence de 2019, en une vingtaine de millions de qubits physiques bruités pour quelques heures de calcul. Des travaux ultérieurs ont fait descendre cette estimation d'un ordre de grandeur. La leçon à en tirer n'est pas un chiffre — il changera encore — mais une tendance : les estimations de ressources baissent régulièrement, sous l'effet de meilleurs algorithmes autant que de meilleur matériel. Un plan de migration qui suppose que est figé est un plan fragile.
À vous
L'exercice remplace la sous-routine quantique par une recherche naïve. Tout le reste du code est le vrai Shor. Comptez le coût de chaque partie, et vous verrez précisément ce que l'ordinateur quantique achète — et ce qu'il n'achète pas.
Exercice de code
Implémentez la recherche de période, puis regardez la seule colonne qui explose — c'est exactement celle que l'ordinateur quantique supprime.
Point de départ
// Shor, mais entièrement classique : on REMPLACE la sous-routine quantique
// par une recherche naïve de période. Le reste du code est le vrai Shor.
//
// L'exercice n'a donc rien de quantique. Son but est de vous faire toucher
// du doigt QUELLE ligne est chère, et pourquoi c'est la seule qu'un
// ordinateur quantique change.
const pgcd = (a, b) => (b === 0 ? a : pgcd(b, a % b));
// Exponentiation modulaire rapide — nécessaire dès que N dépasse quelques
// milliers, sinon a^x déborde.
function puissanceMod(a, x, n) {
let r = 1n, base = BigInt(a) % BigInt(n), e = BigInt(x), m = BigInt(n);
while (e > 0n) {
if (e & 1n) r = (r * base) % m;
base = (base * base) % m;
e >>= 1n;
}
return Number(r);
}
let coutPeriode = 0;
// LA sous-routine que Shor confie au quantique. Ici, force brute.
function periode(a, N) {
// À COMPLÉTER — cherchez le plus petit r ≥ 1 tel que a^r ≡ 1 (mod N),
// en incrémentant coutPeriode à chaque essai. Renvoyez null si r dépasse N.
return null;
}
function shor(N, essais = 20) {
for (let k = 0; k < essais; k++) {
const a = 2 + Math.floor(Math.random() * (N - 3));
const d = pgcd(a, N);
if (d > 1) return { p: d, q: N / d, a, r: null, chance: true };
const r = periode(a, N);
if (r === null || r % 2 !== 0) continue;
const x = puissanceMod(a, r / 2, N);
if (x === N - 1) continue; // cas dégénéré, on retire un a
const p = pgcd(x - 1, N);
const q = pgcd(x + 1, N);
if (p > 1 && p < N) return { p, q: N / p, a, r, chance: false };
}
return null;
}
for (const N of [15, 21, 91, 3599]) {
coutPeriode = 0;
const t = shor(N);
console.log(
t
? `N = ${String(N).padStart(5)} → ${t.p} × ${t.q}` +
` (a = ${t.a}, r = ${t.r ?? "—"}, ${coutPeriode} essais de période)`
: `N = ${N} : échec`
);
}
Solution
const pgcd = (a, b) => (b === 0 ? a : pgcd(b, a % b));
function puissanceMod(a, x, n) {
let r = 1n, base = BigInt(a) % BigInt(n), e = BigInt(x), m = BigInt(n);
while (e > 0n) {
if (e & 1n) r = (r * base) % m;
base = (base * base) % m;
e >>= 1n;
}
return Number(r);
}
let coutPeriode = 0;
function periode(a, N) {
// La boucle qu'un ordinateur quantique n'exécute PAS. Il n'essaie pas les
// valeurs une par une : il prépare une superposition de tous les a^x, puis
// la transformée de Fourier quantique fait ressortir la fréquence 1/r.
let x = a % N;
for (let r = 1; r <= N; r++) {
coutPeriode++;
if (x === 1) return r;
x = (x * a) % N;
}
return null;
}
function shor(N, essais = 20) {
for (let k = 0; k < essais; k++) {
const a = 2 + Math.floor(Math.random() * (N - 3));
const d = pgcd(a, N);
if (d > 1) return { p: d, q: N / d, a, r: null, chance: true };
const r = periode(a, N);
if (r === null || r % 2 !== 0) continue;
const x = puissanceMod(a, r / 2, N);
if (x === N - 1) continue;
const p = pgcd(x - 1, N);
const q = pgcd(x + 1, N);
if (p > 1 && p < N) return { p, q: N / p, a, r, chance: false };
}
return null;
}
for (const N of [15, 21, 91, 3599]) {
coutPeriode = 0;
const t = shor(N);
console.log(
t
? `N = ${String(N).padStart(5)} → ${t.p} × ${t.q}` +
` (a = ${t.a}, r = ${t.r ?? "—"}, ${coutPeriode} essais de période)`
: `N = ${N} : échec`
);
}
// Ce qu'il faut lire dans la colonne « essais de période ».
//
// Elle croît comme N, c'est-à-dire de façon EXPONENTIELLE en le nombre de
// chiffres. Pour N = 3599 = 59 × 61, on compte déjà quelques milliers
// d'essais ; pour un module RSA de 2048 bits, ce serait de l'ordre de 2^2048.
//
// Toutes les autres lignes — pgcd, exponentiation modulaire, tirage de a —
// sont polynomiales et resteraient parfaitement praticables sur un module de
// 2048 bits. Le pgcd de deux nombres de 2048 bits prend quelques
// microsecondes.
//
// Autrement dit : RSA ne tient debout QUE parce que cette seule fonction est
// coûteuse. La transformée de Fourier quantique la rend polynomiale, et tout
// l'édifice s'effondre sans qu'aucune autre ligne n'ait besoin de changer.
À retenir
Flashcards · 3 cartes
- Quelle est la seule partie quantique de l'algorithme de Shor ?
- La recherche de la période r de x ↦ a^x mod N. Le tirage de a, le pgcd et la réduction de la factorisation au problème de période sont classiques et antérieurs à Shor. C'est la transformée de Fourier quantique qui transforme une période — information globale — en une position mesurable.
- Pourquoi Grover ne fait-il que doubler les tailles de clés symétriques ?
- Son gain est quadratique : √N au lieu de N, soit la moitié des bits de sécurité. Cette borne est prouvée optimale, l'algorithme se parallélise mal (k machines ne divisent le temps que par √k), et chaque évaluation exige un circuit AES réversible coûteux. AES-256 conserve donc 128 bits, hors de portée.
- Qu'est-ce qui distingue un qubit logique d'un qubit physique, et pourquoi est-ce décisif ?
- Un qubit logique est un qubit corrigé, construit à partir de centaines ou de milliers de qubits physiques bruités par un code correcteur. Les annonces se comptent en qubits physiques, les estimations d'attaque en qubits logiques : confondre les deux fait varier le pronostic de plusieurs ordres de grandeur.