C1 — Socle et menace quantiqueDans le dialogue d’impression, choisissez « Enregistrer au format PDF » comme destination.
Retour

Master 1 · Cryptographie post-quantique

Cours 1Socle et menace quantique

Comprendre ce qui tombe, pourquoi, et à quelle échéance — sans faire un cours de physique.

3 chapitres · 10 h de travail estimé

  1. 1. Pourquoi migrer3 h
  2. 2. Calcul quantique pour cryptographes4 h
  3. 3. Outils mathématiques3 h

Chapitre 1 · 3 h

Pourquoi migrer

Situer l'urgence sans la surjouer : hypothèses classiques menacées, récolte-maintenant-déchiffre-plus-tard, calendriers NIST et ANSSI.

Un cours de cryptographie post-quantique commence toujours par le même risque : verser dans l'annonce d'apocalypse ou dans le haussement d'épaules. Les deux sont des erreurs d'ingénieur. Ce chapitre pose la question dans les termes où elle se décide réellement — quelles données, pendant combien de temps, et à partir de quand.

Ce sur quoi repose la cryptographie déployée

Presque tout ce qui protège une communication aujourd'hui tient sur deux hypothèses de difficulté, et deux seulement.

La factorisation : étant donné N=pqN = pq avec pp et qq premiers de 1024 bits, retrouver pp. C'est RSA, pour le chiffrement comme pour la signature.

Le logarithme discret : étant donné gg et gxg^x dans un groupe bien choisi, retrouver xx. C'est Diffie-Hellman, DSA, et toute la famille des courbes elliptiques — ECDH, ECDSA, Ed25519 — qui ne fait que changer le groupe.

Ces deux problèmes ne sont pas indépendants au point qu'on l'espérerait. Ils partagent une structure de groupe abélien fini, et c'est exactement cette structure que l'algorithme de Shor exploite. Un seul algorithme les casse tous les deux, ce qui est une nouvelle bien pire que si chacun avait sa faiblesse propre. La diversification à laquelle on croyait — « nous avons RSA et les courbes elliptiques » — n'existait pas.

Ce qui tombe, ce qui tient

Le tableau suivant est celui à retenir du chapitre. La colonne de droite n'est pas une opinion : elle découle directement des deux algorithmes quantiques connus.

PrimitiveSécurité classiqueFace à un ordinateur quantique
RSA-2048≈ 112 bitseffondrée — Shor, temps polynomial
ECDH / ECDSA P-256128 bitseffondrée — Shor, temps polynomial
Diffie-Hellman fini≈ 112 bitseffondrée — Shor
AES-128128 bits64 bits — Grover, racine carrée
AES-256256 bits128 bits — Grover
SHA-256 (préimage)256 bits128 bits — Grover
SHA-256 (collision)128 bits≈ 128 bits — le gain quantique est marginal

Graphique

Bits de sécurité restants face à un ordinateur quantique

  • RSA-2048 : 00
  • ECDSA P-256 : 00
  • AES-128 : 6464
  • SHA-256 préimage : 128128
  • AES-256 : 128128
Les deux premières barres ne sont pas basses : elles sont nulles, réduites au trait minimal qui les rend visibles. C'est la ligne de partage du cours — le symétrique encaisse et se redimensionne, l'asymétrique classique disparaît.

La conséquence pratique est franche. Le symétrique se répare en doublant la clé : passer de AES-128 à AES-256 restitue 128 bits de sécurité, et cela coûte quelques pourcents de performance. L'asymétrique ne se répare pas : aucune taille de clé RSA ne résiste à Shor, puisque le coût de l'attaque devient polynomial en la taille de la clé. Il faut changer de problème difficile, pas de paramètre.

Quiz · 1 question

Pourquoi ne peut-on pas répondre à la menace quantique en passant à RSA-16384 ?

  • Parce que les clés seraient trop lentes à générer
  • Parce que le coût de Shor est polynomial en la taille de la clé : agrandir n'écarte pas l'attaque, cela la retarde à peine
  • Parce que RSA n'est pas normalisé au-delà de 4096 bits

Réponse : Contre une attaque exponentielle, doubler la clé double le travail de l'attaquant — c'est la logique du symétrique face à Grover. Contre une attaque polynomiale, agrandir la clé ne fait que multiplier le coût par un facteur polynomial : on ne rattrape jamais l'écart. La taille est un levier contre Grover, pas contre Shor.

Récolter maintenant, déchiffrer plus tard

Voici l'argument qui rend la question urgente alors même que la machine n'existe pas.

Un adversaire disposant de capacités d'interception peut enregistrer aujourd'hui un trafic chiffré qu'il ne sait pas lire, le stocker, et le déchiffrer le jour où il disposera d'un ordinateur quantique. Le stockage coûte peu ; la patience ne coûte rien. Ce modèle porte le nom de harvest now, decrypt later.

Il ne s'applique qu'à la confidentialité, et c'est une distinction que beaucoup de présentations escamotent. Une signature vérifiée aujourd'hui par une machine classique n'a rien à craindre d'une machine future : au moment où l'attaquant saura forger la signature, le document aura déjà été accepté ou refusé. En revanche, une signature qui devra encore être vérifiée dans quinze ans — celle d'un firmware, d'un certificat racine, d'un acte notarié — vit exactement le même problème que la confidentialité.

Retenez donc deux urgences distinctes : le chiffrement est urgent à cause de la récolte anticipée ; la signature est urgente pour ce qui a une longue durée de vérification.

L'inégalité de Mosca

Michele Mosca a proposé une formulation qui tient en une ligne et qui transforme un débat d'opinion en calcul.

X+Y>Zvous eˆtes deˊjaˋ en retardX + Y > Z \quad \Longrightarrow \quad \text{vous êtes déjà en retard}

XX est la durée pendant laquelle une donnée doit rester confidentielle. YY est le temps nécessaire pour migrer le système qui la protège. ZZ est le temps restant avant qu'existe un ordinateur quantique cryptographiquement pertinent — un CRQC, dans le vocabulaire du domaine.

L'intérêt de la formule n'est pas de prédire ZZ, qui reste inconnu. Il est de montrer que pour de grandes valeurs de XX, la valeur de ZZ ne change rien au verdict. Un dossier médical à protéger cinquante ans est déjà en retard dans tous les scénarios, y compris les plus optimistes. Une session TLS bancaire, dont la valeur s'évapore en quelques heures, ne l'est dans aucun.

C'est aussi la seule des trois variables sur laquelle vous avez prise : YY, le temps de migration, dépend de votre inventaire et de votre agilité cryptographique — le sujet du chapitre 14.

Les calendriers officiels

Trois textes structurent la migration au moment où ce cours est écrit. Vérifiez-en les versions courantes : ce sont les seules données du chapitre qui bougent chaque année.

Le NIST, dans le rapport IR 8547, propose de déclarer obsolètes après 2030 les mécanismes à 112 bits de sécurité classique — RSA, ECDSA, ECDH, Diffie-Hellman — et de les interdire après 2035. C'est un calendrier de retrait, pas de simple recommandation.

L'ANSSI a une position plus prudente sur un point précis : elle exige l'hybridation, c'est-à-dire la combinaison d'un mécanisme classique et d'un mécanisme post-quantique, et n'accepte pas un schéma post-quantique employé seul avant 2030 au plus tôt. La raison est explicite : les schémas post-quantiques sont jeunes, et l'hybridation garantit qu'une cryptanalyse surprise ne fait pas pire que l'état antérieur. Le chapitre 10, avec la cassure de SIKE, montrera que cette prudence n'est pas théorique.

La NSA, avec la suite CNSA 2.0, publie un calendrier par catégorie d'équipement pour les systèmes de sécurité nationale, avec des dates d'exclusivité échelonnées entre 2030 et 2033 selon le type de produit.

Quiz · 1 question

Un système signe des mises à jour de firmware pour du matériel industriel déployé pour vingt ans. Le modèle « récolter maintenant, déchiffrer plus tard » s'y applique-t-il ?

  • Oui, comme pour tout usage cryptographiquemême risque
  • Non, mais il est urgent quand même : le matériel devra vérifier des signatures pendant vingt ansautre risque
  • Non, et il n'y a donc pas d'urgence particulièreaucun risque

Réponse : La récolte anticipée ne menace que la confidentialité, et une signature ne cache rien. Mais le matériel restera en service vingt ans, et devra vérifier des signatures pendant tout ce temps : le jour où un attaquant sait forger une signature ECDSA, il pousse ce qu'il veut sur le parc. La durée de VÉRIFICATION joue ici le rôle que la durée de confidentialité joue ailleurs — et elle est souvent bien plus longue, parce que remplacer une racine de confiance gravée dans du silicium n'est pas une mise à jour logicielle.

À vous

Le calcul de Mosca vaut d'être fait sur des cas concrets, parce qu'il classe les systèmes dans un ordre qui n'est pas celui de l'intuition.

Exercice de code

Implémentez le verdict de Mosca, puis lisez le classement : il ne correspond pas à l'ordre d'urgence que l'intuition suggère.

Point de départ

// L'inégalité de Mosca : si X + Y > Z, vous êtes DÉJÀ en retard.
//
//   X = durée pendant laquelle la donnée doit rester confidentielle
//   Y = temps nécessaire pour migrer le système
//   Z = temps restant avant qu'un ordinateur quantique cryptographiquement
//       pertinent existe
//
// Les trois sont des estimations. La seule que vous maîtrisez est Y.

const ANNEE_COURANTE = 2026;

// Z est le paramètre le plus discuté. On raisonne donc par scénarios plutôt
// que par une valeur unique : c'est la bonne façon de traiter une inconnue.
const SCENARIOS = { optimiste: 25, median: 15, pessimiste: 8 };

const SYSTEMES = [
  { nom: "Dossier médical",        X: 50, Y: 4 },
  { nom: "Secret industriel",      X: 20, Y: 3 },
  { nom: "Session TLS bancaire",   X: 1,  Y: 2 },
  { nom: "Signature de firmware",  X: 15, Y: 6 },
  { nom: "Archive diplomatique",   X: 50, Y: 7 },
];

function verdict(X, Y, Z) {
  // À COMPLÉTER — renvoyez "EN RETARD" si X + Y > Z, "à surveiller" si on
  // est à moins de 3 ans de la bascule, "confortable" sinon.
  return "?";
}

for (const [nom, Z] of Object.entries(SCENARIOS)) {
  console.log(`\n── Scénario ${nom} : Z = ${Z} ans (CRQC vers ${ANNEE_COURANTE + Z}) ──`);
  for (const s of SYSTEMES) {
    console.log(
      `  ${s.nom.padEnd(24)} X+Y = ${String(s.X + s.Y).padStart(2)} ans   ${verdict(s.X, s.Y, Z)}`
    );
  }
}

Solution

const ANNEE_COURANTE = 2026;
const SCENARIOS = { optimiste: 25, median: 15, pessimiste: 8 };

const SYSTEMES = [
  { nom: "Dossier médical",        X: 50, Y: 4 },
  { nom: "Secret industriel",      X: 20, Y: 3 },
  { nom: "Session TLS bancaire",   X: 1,  Y: 2 },
  { nom: "Signature de firmware",  X: 15, Y: 6 },
  { nom: "Archive diplomatique",   X: 50, Y: 7 },
];

function verdict(X, Y, Z) {
  const marge = Z - (X + Y);
  if (marge < 0) return "EN RETARD (marge " + marge + " ans)";
  if (marge < 3) return "à surveiller (marge " + marge + " ans)";
  return "confortable (marge " + marge + " ans)";
}

for (const [nom, Z] of Object.entries(SCENARIOS)) {
  console.log(`\n── Scénario ${nom} : Z = ${Z} ans (CRQC vers ${ANNEE_COURANTE + Z}) ──`);
  for (const s of SYSTEMES) {
    console.log(
      `  ${s.nom.padEnd(24)} X+Y = ${String(s.X + s.Y).padStart(2)} ans   ${verdict(s.X, s.Y, Z)}`
    );
  }
}

// Ce que la sortie apprend, et qui n'est pas intuitif.
//
// 1. La session TLS bancaire n'est JAMAIS en retard : X = 1 an. La donnée
//    n'a aucune valeur une fois la transaction passée. Migrer d'abord les
//    systèmes les plus visibles est un réflexe, pas une priorité.
// 2. Le dossier médical est en retard dans les TROIS scénarios, y compris
//    l'optimiste. Quand X vaut 50 ans, la valeur de Z ne change plus rien :
//    le verdict est déjà tombé.
// 3. La signature de firmware est le cas subtil. Une signature ne protège
//    aucun secret — la récolte anticipée ne la menace pas. Ce qui compte
//    est la date à laquelle le matériel sera encore en service et devra
//    vérifier des signatures : c'est un X déguisé.
//
// Conclusion opérationnelle : le tri se fait sur X, pas sur la criticité
// ressentie du système.

Ce que ce chapitre ne dit pas

Trois honnêtetés pour finir, qui vous éviteront de surjouer devant un auditoire technique.

Personne ne connaît ZZ. Les estimations d'experts s'étalent sur plusieurs décennies, et elles sont produites par des gens qui ont un intérêt dans la réponse — constructeurs de machines quantiques comme vendeurs de solutions post-quantiques. Le chapitre 2 donne l'état du matériel pour que vous jugiez par vous-même.

Migrer n'est pas gratuit. Les clés et les signatures grossissent, parfois d'un facteur dix, parfois d'un facteur mille. Les handshakes se fragmentent. Certains protocoles ne supportent pas la taille des nouveaux objets. Le bloc IV traite cette facture.

Les nouveaux schémas sont jeunes. ML-KEM repose sur une hypothèse étudiée depuis une vingtaine d'années, contre quarante-cinq ans pour RSA. C'est l'argument central en faveur de l'hybridation, et c'est aussi pourquoi ce cours consacre un chapitre entier aux candidats brisés.

À retenir

Flashcards · 3 cartes

Pourquoi le symétrique survit-il à la menace quantique, mais pas l'asymétrique classique ?
Grover ne donne qu'un gain quadratique : AES-256 conserve 128 bits, il suffit de doubler la clé. Shor donne un gain exponentiel sur la factorisation et le logarithme discret, qui deviennent polynomiaux : aucune taille de clé RSA ou ECC ne rattrape cet écart. On change de paramètre contre Grover, on change de problème contre Shor.
Énoncez l'inégalité de Mosca et dites ce qu'elle sert à décider.
X + Y > Z, où X est la durée de confidentialité exigée, Y le temps de migration et Z le temps avant un CRQC. Elle sert à PRIORISER : quand X est grand, le verdict ne dépend plus de Z, et le tri des systèmes se fait sur la durée de vie de la donnée plutôt que sur la criticité ressentie du système.
À quoi « récolter maintenant, déchiffrer plus tard » ne s'applique-t-il pas ?
Aux signatures dont la vérification est immédiate : au moment où l'attaquant saurait les forger, la décision a déjà été prise. Le modèle vise la confidentialité. Mais une signature à longue durée de vérification — firmware, certificat racine, acte notarié — subit un risque équivalent.

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 α\alpha et β\beta tels que α2+β2=1|\alpha|^2 + |\beta|^2 = 1 :

ψ=α0+β1|\psi\rangle = \alpha \, |0\rangle + \beta \, |1\rangle

À la mesure, on obtient 0 avec probabilité α2|\alpha|^2 et 1 avec probabilité β2|\beta|^2, et l'état est détruit. Un registre de nn qubits est décrit par 2n2^n 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 2n2^n 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 à nn 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 rr en une amplitude concentrée sur les multiples de N/rN/r. 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 2n2^n points coûte O(n2n)O(n \, 2^n) opérations, ou O(n2n)O(n 2^n) ramené à O(2nlog2n)O(2^n \log 2^n) par la FFT. La QFT sur nn qubits coûte O(n2)O(n^2) 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 2n2^n 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 NN, on choisit aa au hasard et on cherche l'ordre rr de aa modulo NN, c'est-à-dire le plus petit rr tel que ar1(modN)a^r \equiv 1 \pmod N. Si rr est pair et ar/2≢1a^{r/2} \not\equiv -1, alors

gcd(ar/21,  N)etgcd(ar/2+1,  N)\gcd\left(a^{r/2} - 1,\; N\right) \quad\text{et}\quad \gcd\left(a^{r/2} + 1,\; N\right)

sont des facteurs non triviaux de NN. 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 rr.

Animation · 8 étapes

Shor sur N = 15 : tout est classique sauf une ligne

  1. Le nombre à factoriserN = 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.
  2. Tirer une base au hasardOn 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.
  3. Le coup de chance qu'on espère ne pas avoirSi 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.
  4. La seule ligne quantiqueOn 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.
  5. La période doit être paireSi 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.
  6. Premier facteur par un simple pgcd7² = 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.
  7. Second facteurpgcd(4 + 1, 15) = pgcd(5, 15) = 5. Et 3 × 5 = 15.
  8. Ce qu'il faut retenir de la traceNeuf 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 xx tel que gx=hg^x = h 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 O(n3)O(n^3) opérations quantiques pour un module de nn 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 NN possibilités, quand la seule chose qu'on sache faire est tester une entrée. Il y parvient en O(N)O(\sqrt{N}) évaluations au lieu de NN.

Appliqué à une clé de 128 bits, cela donne 2642^{64} évaluations au lieu de 21282^{128} : 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 N\sqrt{N} 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 kk machines ne divise le temps que par k\sqrt{k}, alors qu'une recherche exhaustive classique se divise par kk. Les 2642^{64} é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éegain quadratique
  • Oui : sa sécurité tombe à 16 bitsgain exponentiel
  • Non : Grover ne s'applique pas aux chiffrements par blocshors 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 ZZ 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.

Chapitre 3 · 3 h

Outils mathématiques

Anneaux de polynômes Z_q[X]/(X^n+1), échantillonnage gaussien, corps finis, rappels de complexité et de réductions.

Trois objets reviennent dans tous les chapitres qui suivent : un anneau de polynômes, une distribution de bruit, et une notion de réduction entre problèmes. Ce chapitre les installe proprement, pour n'avoir plus à s'interrompre ensuite. Il est court et instrumental : rien ici n'est de la cryptographie, tout y sert.

L'anneau de travail : Zq[X]/(Xn+1)\mathbb{Z}_q[X]/(X^n+1)

ML-KEM et ML-DSA ne manipulent pas des vecteurs d'entiers mais des polynômes. L'anneau est toujours le même :

Rq=Zq[X]/(Xn+1),n puissance de 2R_q = \mathbb{Z}_q[X] / (X^n + 1), \qquad n \text{ puissance de } 2

Un élément est un polynôme de degré au plus n1n-1 dont les coefficients sont pris modulo qq. Il y a donc deux réductions simultanées, et les confondre est l'erreur classique. Le modulo qq borne les coefficients ; le modulo Xn+1X^n+1 borne le degré. La seconde est la plus intéressante : puisque Xn1X^n \equiv -1, tout terme de degré n+kn+k revient en degré kk avec un signe moins. On appelle cela la convolution négacyclique.

Animation · 9 étapes

(1 + 2X + 3X² + 4X³) × (5 + 6X) dans Z₁₇[X]/(X⁴+1)

  1. Quatre cases, une par degréUn élément de l'anneau est un polynôme de degré au plus 3 : quatre coefficients, tous pris modulo 17. On accumule les produits croisés dans ces quatre cases.
  2. f₀ · g₀ → degré 0Le produit des termes constants va en case 0. Rien de surprenant pour l'instant.
  3. f₀ · g₁ → degré 1Les degrés s'additionnent, comme dans tout produit de polynômes.
  4. f₁ · g₀ → degré 1Deuxième contribution au degré 1 : 6 + 10 = 16. On accumule dans la même case.
  5. f₁ · g₁ → degré 2Rien de neuf. Le calcul reste celui d'un produit ordinaire.
  6. f₂ · g₀ → degré 2, et le modulo entre en jeu12 + 15 = 27, mais on travaille modulo 17 : la case vaut 10. Le modulo q borne les coefficients ; il ne provoque aucun repli de degré.
  7. f₂ · g₁ → degré 318 mod 17 = 1. Dernier degré représentable dans l'anneau.
  8. f₃ · g₀ → degré 31 + 20 = 21 ≡ 4 mod 17. Il ne reste plus qu'un produit croisé.
  9. f₃ · g₁ → degré 4 : le repli négacycliqueLe degré 4 n'existe pas dans l'anneau. Comme X⁴ ≡ −1, le terme revient en degré 0 avec un SIGNE MOINS : 5 − 24 = −19 ≡ 15 mod 17. C'est là toute la différence avec un anneau cyclique, où il reviendrait avec un plus. Le résultat est 15 + 16X + 10X² + 4X³.

Regardez la dernière étape de l'animation : c'est là que tout se joue. Les huit premiers produits sont ceux d'une multiplication de polynômes ordinaire. Le neuvième déborde, et le terme de degré 4 ne disparaît pas — il revient en degré 0 en changeant de signe.

Pourquoi Xn+1X^n+1 et pas Xn1X^n-1

La question paraît cosmétique. Elle ne l'est pas.

Dans l'anneau cyclique Zq[X]/(Xn1)\mathbb{Z}_q[X]/(X^n-1), le polynôme Xn1X^n-1 se factorise toujours : il admet X=1X = 1 pour racine. Évaluer un polynôme en 11 revient à sommer ses coefficients, et cette évaluation est un homomorphisme d'anneaux. Il existe donc une projection non triviale de l'anneau vers Zq\mathbb{Z}_q — un canal par lequel de l'information sur les facteurs s'échappe, et qui permet à un attaquant de travailler en dimension 1 au lieu de nn.

Dans l'anneau négacyclique, avec nn puissance de 2, le polynôme Xn+1X^n+1 est le 2n2n-ième polynôme cyclotomique. Il est irréductible sur Q\mathbb{Q}, l'anneau correspondant est l'anneau des entiers d'un corps de nombres, et la projection n'existe pas. Un signe sépare un anneau exploitable d'un anneau qui ne l'est pas. L'exercice de fin de chapitre vous fait mesurer la différence à la main.

Quiz · 1 question

Dans Z_q[X]/(X⁴+1), que devient le terme 24·X⁴ ?

  • Il disparaîtannulé
  • Il devient 24 en degré 0repli cyclique
  • Il devient −24 en degré 0repli négacyclique

Réponse : X⁴ ≡ −1, donc 24·X⁴ ≡ −24. Le terme revient en degré 0 avec un changement de signe. S'il revenait avec un plus, on serait dans l'anneau cyclique Z_q[X]/(X⁴−1) — celui qui possède l'homomorphisme d'évaluation en 1, et qu'on évite précisément pour cette raison.

La NTT, et pourquoi qq est ce qu'il est

Multiplier deux polynômes de degré 255 coûte 2562=65536256^2 = 65\,536 multiplications par la méthode naïve. C'est l'opération la plus fréquente de ML-KEM : elle doit être rapide.

La solution est la transformée en théorie des nombres, la NTT — une transformée de Fourier discrète où les racines de l'unité complexes sont remplacées par des racines de l'unité dans Zq\mathbb{Z}_q. Elle ramène le coût à O(nlogn)O(n \log n), parce que dans le domaine transformé la multiplication devient point à point.

Encore faut-il que ces racines existent, et c'est ce qui dicte le choix de qq. Une racine primitive 2n2n-ième de l'unité existe dans Zq\mathbb{Z}_q si et seulement si q1(mod2n)q \equiv 1 \pmod{2n}.

Schémaqqnnq1q - 1NTT
ML-KEM332925628×132^8 \times 13incomplète
ML-DSA8380417256213×3×11×312^{13} \times 3 \times 11 \times 31complète

Le détail mérite un instant. Pour ML-KEM, q1=3328q - 1 = 3328 est divisible par 256 mais pas par 512 : il existe une racine 256-ième de l'unité, pas de racine 512-ième. La NTT ne peut donc pas descendre jusqu'à des polynômes constants ; elle s'arrête à 128 polynômes de degré 1, et la multiplication point à point est en réalité une multiplication de petits polynômes. Ce n'est pas une négligence : q=3329q = 3329 a été choisi le plus petit possible pour réduire la taille des clés, et cette NTT incomplète est le prix payé. ML-DSA, moins contraint sur la taille, prend un qq qui autorise la NTT complète.

Le bruit : gaussienne ou binomiale centrée

Tous les schémas à réseaux ajoutent du bruit. Sa distribution n'est pas un détail d'implémentation — la preuve de sécurité en dépend, et les attaques par canaux auxiliaires la visent en priorité.

La gaussienne discrète sur Z\mathbb{Z}, de paramètre σ\sigma, attribue à chaque entier xx une probabilité proportionnelle à exp(x2/2σ2)\exp(-x^2 / 2\sigma^2). C'est la distribution des preuves : les réductions de Regev et d'Ajtai sont énoncées pour elle. C'est aussi un cauchemar d'implémentation, parce qu'échantillonner une gaussienne en temps constant demande des tables ou des rejets soigneusement écrits. Falcon paie ce prix, et le chapitre 7 expliquera pourquoi il n'a pas le choix.

La binomiale centrée CBD(η)\mathrm{CBD}(\eta) est la réponse pragmatique. On tire 2η2\eta bits aléatoires et on renvoie la somme des η\eta premiers moins la somme des η\eta derniers. Le résultat est dans [η,η][-\eta, \eta], la distribution est symétrique et grossièrement en cloche, et l'échantillonnage est naturellement en temps constant : compter des bits ne branche pas. ML-KEM et ML-DSA l'utilisent, avec η\eta valant 2 ou 3. La preuve de sécurité est alors adaptée à cette distribution plutôt qu'à la gaussienne.

C'est un arbitrage exemplaire, et il vaut d'être souligné en cours : on a préféré une distribution moins élégante mais implémentable sûrement. Le chapitre 12 montrera ce que coûte le choix inverse.

Quiz · 1 question

Pourquoi ML-KEM préfère-t-il une binomiale centrée à une gaussienne discrète ?

  • Parce que la binomiale donne une meilleure sécurité prouvée
  • Parce qu'elle s'échantillonne naturellement en temps constant, en comptant des bits
  • Parce que la gaussienne discrète n'est pas définie sur les entiers

Réponse : La gaussienne est la distribution des preuves originelles — elle n'est pas moins sûre, au contraire. Mais l'échantillonner en temps constant demande des tables ou des boucles de rejet délicates, et c'est une source d'attaques par canaux auxiliaires bien documentée. Compter des bits, en revanche, ne branche jamais. La preuve a été refaite pour la binomiale : on a adapté la théorie à ce qu'on savait implémenter sûrement.

Réductions : ce que « se réduit à » veut dire

Dernier outil, et le plus important conceptuellement. Dire qu'un schéma « repose sur LWE » signifie qu'on a construit une réduction : un algorithme qui, disposant d'un attaquant contre le schéma, résout LWE. La contraposée est l'énoncé utile — si LWE est difficile, alors le schéma est sûr.

Deux qualités distinguent les bonnes réductions des autres.

Une réduction est serrée si l'attaquant construit contre le problème difficile a une efficacité comparable à celle de l'attaquant contre le schéma. Une réduction lâche, qui perd un facteur 2402^{40}, oblige à surdimensionner les paramètres pour compenser — ou bien on l'ignore, ce qui se fait plus souvent qu'on ne l'admet.

Une réduction est du pire cas vers le cas moyen si elle transforme un attaquant qui réussit sur des instances aléatoires en un algorithme qui résout toutes les instances. C'est la propriété remarquable des réseaux, absente de RSA : personne ne sait montrer que factoriser un module RSA tiré au hasard est aussi difficile que factoriser le pire module possible. Le chapitre 5 énoncera précisément la réduction de Regev, qui donne cette garantie à LWE.

À vous

Deux fonctions de dix lignes, et le troisième test répond à la question du chapitre : pourquoi un signe change tout.

Exercice de code

Implémentez le repli négacyclique, puis comparez avec la variante cyclique : le troisième test explique à lui seul le choix de X^n + 1.

Point de départ

// L'anneau de travail de ML-KEM et ML-DSA : Z_q[X]/(X^n + 1).
// Ici en miniature — q = 17, n = 4 — pour que tout soit vérifiable à la main.

const q = 17;
const n = 4;

const mod = (x) => ((x % q) + q) % q;

// Multiplication NÉGACYCLIQUE : les degrés ≥ n reviennent en degré (deg - n)
// AVEC UN SIGNE MOINS, parce que X^n ≡ −1 dans cet anneau.
function multiplier(f, g) {
  const r = new Array(n).fill(0);
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      const deg = i + j;
      // À COMPLÉTER — deux cas : deg < n, et deg ≥ n (repli avec signe).
      r[deg % n] = mod(r[deg % n] + f[i] * g[j]);
    }
  }
  return r;
}

// Variante CYCLIQUE, pour comparer : X^n ≡ +1. C'est l'anneau qu'on
// N'UTILISE PAS, et la suite montre pourquoi.
function multiplierCyclique(f, g) {
  const r = new Array(n).fill(0);
  for (let i = 0; i < n; i++)
    for (let j = 0; j < n; j++) r[(i + j) % n] = mod(r[(i + j) % n] + f[i] * g[j]);
  return r;
}

const afficher = (p) =>
  "[" + p.map((c) => String(c).padStart(2)) + "]";

const f = [1, 2, 3, 4];
const g = [5, 6, 0, 0];

console.log("f            =", afficher(f));
console.log("g            =", afficher(g));
console.log("f × g        =", afficher(multiplier(f, g)), "  attendu [15, 16, 10,  4]");
console.log("f ×cyc g     =", afficher(multiplierCyclique(f, g)));

// Test 1 — X^n doit valoir −1, c'est la définition de l'anneau.
const X = [0, 1, 0, 0];
let Xn = [1, 0, 0, 0];
for (let k = 0; k < n; k++) Xn = multiplier(Xn, X);
console.log("\nX^4          =", afficher(Xn), "  attendu [16,  0,  0,  0]  (soit −1)");

// Test 2 — la somme des coefficients est-elle un invariant ?
const somme = (p) => mod(p.reduce((a, b) => a + b, 0));
console.log("\nsomme(f)×somme(g) =", mod(somme(f) * somme(g)));
console.log("somme(f ×cyc g)   =", somme(multiplierCyclique(f, g)), " ← égal : un homomorphisme");
console.log("somme(f × g)      =", somme(multiplier(f, g)), " ← différent : pas d'homomorphisme");

Solution

const q = 17;
const n = 4;

const mod = (x) => ((x % q) + q) % q;

function multiplier(f, g) {
  const r = new Array(n).fill(0);
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      const deg = i + j;
      // Le repli négacyclique tient en un signe. C'est la seule différence
      // avec un produit de polynômes ordinaire — et elle suffit à changer
      // la structure algébrique de l'anneau.
      const signe = deg >= n ? -1 : 1;
      const cible = deg % n;
      r[cible] = mod(r[cible] + signe * f[i] * g[j]);
    }
  }
  return r;
}

function multiplierCyclique(f, g) {
  const r = new Array(n).fill(0);
  for (let i = 0; i < n; i++)
    for (let j = 0; j < n; j++) r[(i + j) % n] = mod(r[(i + j) % n] + f[i] * g[j]);
  return r;
}

const afficher = (p) => "[" + p.map((c) => String(c).padStart(2)) + "]";

const f = [1, 2, 3, 4];
const g = [5, 6, 0, 0];

console.log("f            =", afficher(f));
console.log("g            =", afficher(g));
console.log("f × g        =", afficher(multiplier(f, g)), "  attendu [15, 16, 10,  4]");
console.log("f ×cyc g     =", afficher(multiplierCyclique(f, g)));

const X = [0, 1, 0, 0];
let Xn = [1, 0, 0, 0];
for (let k = 0; k < n; k++) Xn = multiplier(Xn, X);
console.log("\nX^4          =", afficher(Xn), "  attendu [16,  0,  0,  0]  (soit −1)");

const somme = (p) => mod(p.reduce((a, b) => a + b, 0));
console.log("\nsomme(f)×somme(g) =", mod(somme(f) * somme(g)));
console.log("somme(f ×cyc g)   =", somme(multiplierCyclique(f, g)), " ← égal : un homomorphisme");
console.log("somme(f × g)      =", somme(multiplier(f, g)), " ← différent : pas d'homomorphisme");

// Le troisième test est le plus instructif, et c'est celui qu'on saute
// d'habitude.
//
// Dans l'anneau CYCLIQUE Z_q[X]/(X^n − 1), évaluer un polynôme en X = 1
// revient à sommer ses coefficients, et cette évaluation est un
// HOMOMORPHISME d'anneaux : somme(f × g) = somme(f) × somme(g). Autrement
// dit, l'anneau possède une projection non triviale vers Z_q — un canal par
// lequel de l'information sur les facteurs s'échappe, et sur lequel un
// attaquant peut monter une attaque en dimension 1 au lieu de n.
//
// Dans l'anneau NÉGACYCLIQUE, X^n + 1 est le 2n-ième polynôme cyclotomique
// quand n est une puissance de 2 : il est IRRÉDUCTIBLE sur Q, l'anneau est
// un corps de nombres, et cette projection n'existe pas.
//
// C'est pour cela que ML-KEM et ML-DSA travaillent modulo X^256 + 1 et non
// modulo X^256 − 1. Un signe.

À retenir

Flashcards · 3 cartes

Quelles sont les DEUX réductions simultanées dans Z_q[X]/(Xⁿ+1) ?
Le modulo q borne les COEFFICIENTS ; le modulo Xⁿ+1 borne le DEGRÉ. La seconde est négacyclique : un terme de degré n+k revient en degré k avec un signe moins, puisque Xⁿ ≡ −1.
Pourquoi Xⁿ+1 plutôt que Xⁿ−1 ?
Xⁿ−1 admet 1 pour racine, donc l'évaluation en 1 — la somme des coefficients — est un homomorphisme vers Z_q : une projection non triviale par laquelle de l'information s'échappe. Pour n puissance de 2, Xⁿ+1 est le 2n-ième polynôme cyclotomique, irréductible sur Q, et cette projection n'existe pas.
Qu'est-ce qu'une réduction du pire cas vers le cas moyen, et pourquoi est-ce rare ?
Elle transforme un attaquant qui réussit sur des instances aléatoires en un algorithme résolvant TOUTES les instances : casser le schéma en moyenne implique casser le problème au pire. Les réseaux l'offrent (Ajtai, Regev) ; RSA non — nul ne sait relier la difficulté d'un module tiré au hasard à celle du pire module.

QCM du bloc 0 — Socle et menace quantique

Neuf questions sur les trois premiers chapitres. Elles ne reprennent aucun quiz de leçon : chacune demande de transposer sur une situation nouvelle, et plusieurs croisent deux chapitres. Le bilan final nomme les chapitres à reprendre.

QCM de bloc · 9 questions

Socle et menace quantique

1. Une entreprise chiffre ses sauvegardes en AES-256 et protège la clé de chiffrement par RSA-2048. Où se situe le risque quantique ?

  • Dans AES-256, que Grover ramène à 128 bits
  • Dans RSA-2048, qui protège la clé : l'ensemble ne vaut que son maillon asymétrique
  • Nulle part : des sauvegardes hors ligne ne sont pas interceptables

Réponse : AES-256 tient parfaitement, et l'hypothèse « hors ligne » ne dit rien de la façon dont la clé a circulé. Le maillon faible est RSA-2048 : quiconque a intercepté l'échange de la clé pourra la déchiffrer plus tard et lire des sauvegardes pourtant chiffrées en AES-256. Un chaînage ne vaut jamais mieux que son composant le plus faible.

2. Système A : X = 1 an, Y = 8 ans. Système B : X = 40 ans, Y = 1 an. Lequel traiter en premier ?

  • B — X domine largement l'inégalité, et sa marge est très négative dans tous les scénarios
  • A — sa migration est la plus longue, il faut donc s'y prendre au plus tôt
  • Les deux : X + Y est du même ordre de grandeur dans les deux cas

Réponse : X + Y vaut 9 pour A et 41 pour B : ce n'est pas du même ordre. Un Y long est un argument pour commencer tôt, mais il ne crée pas d'urgence si la donnée perd toute valeur en un an. C'est X qui décide, et c'est ce qui rend le classement de Mosca contre-intuitif.

3. Pourquoi le logarithme discret tombe-t-il en même temps que la factorisation ?

  • Parce que Shor a publié deux algorithmes distincts la même année
  • Parce qu'ECDSA emploie RSA en interne pour la génération de ses clés
  • Parce que les deux se ramènent à la recherche d'une période dans un groupe abélien fini

Réponse : Un seul algorithme les emporte tous les deux, et c'est ce qui rend la nouvelle si mauvaise. La factorisation comme le logarithme discret se reformulent en recherche de période, et c'est cette période que la transformée de Fourier quantique extrait. La diversification à laquelle on croyait — « nous avons RSA et les courbes » — n'existait pas.

4. Un fournisseur annonce une machine à 1000 qubits. Quelle question posez-vous avant de conclure quoi que ce soit ?

  • Combien de qubits LOGIQUES cela donne une fois la correction d'erreur appliquée
  • Quelle est la fréquence d'horloge du processeur quantique
  • Aucune : 1000 qubits suffisent à factoriser RSA-2048

Réponse : Les annonces se comptent en qubits physiques, bruités ; les estimations d'attaque se comptent en qubits logiques, corrigés. Le rapport se compte aujourd'hui en centaines ou milliers de qubits physiques par qubit logique. Confondre les deux fait varier le pronostic de plusieurs ordres de grandeur — et 1000 qubits physiques sont très loin du compte.

5. Grover appliqué à la recherche de COLLISIONS sur SHA-256 :

  • ramène la résistance de 128 à 64 bits
  • n'apporte qu'un gain marginal : le paradoxe des anniversaires domine déjà le calcul
  • ramène la résistance à zéro, comme Shor sur RSA

Réponse : Attention à ne pas confondre les deux résistances. En PRÉIMAGE, SHA-256 offre 256 bits et Grover les ramène à 128. En COLLISION, l'attaque des anniversaires donne déjà 128 bits classiquement, et les variantes quantiques n'améliorent cela que marginalement, au prix d'une mémoire considérable. La colonne « collision » du tableau du chapitre 1 est donc la seule qui ne bouge presque pas.

6. Pourquoi ML-KEM ne peut-il pas employer une NTT complète, alors que ML-DSA le peut ?

  • Parce que n = 256 est trop petit pour une NTT complète
  • Parce que ML-KEM n'emploie pas de NTT du tout
  • Parce que q − 1 = 3328 est divisible par 256 mais pas par 512 : il n'existe pas de racine 512-ième de l'unité

Réponse : Les deux schémas partagent n = 256 et emploient tous deux une NTT. C'est le module qui diffère : 3328 = 2⁸ × 13 s'arrête à 256, alors que 8 380 416 = 2¹³ × 3 × 11 × 31 va bien au-delà de 512. La NTT de ML-KEM s'arrête donc à 128 polynômes de degré 1 — prix assumé d'un q petit, choisi pour réduire la taille des clés.

7. Une équipe propose de remplacer la binomiale centrée de ML-KEM par une gaussienne discrète, « plus conforme aux preuves d'origine ». Que répondez-vous ?

  • Bonne idée : la preuve de sécurité en serait plus directe
  • La preuve a été refaite pour la binomiale, et l'échantillonnage gaussien en temps constant est une source documentée de fuites
  • Impossible : une gaussienne n'est pas définie sur les entiers

Réponse : La gaussienne discrète existe bien sur les entiers, et c'est effectivement la distribution des preuves de Regev. Mais l'argument de conformité est vide : la preuve a été refaite pour la binomiale. Et l'argument d'implémentation est décisif — compter des bits ne branche jamais, échantillonner une gaussienne en temps constant est délicat et a déjà donné lieu à des attaques. On adapte la théorie à ce qu'on sait implémenter sûrement.

8. Qu'interdit exactement une réduction du pire cas vers le cas moyen ?

  • L'existence de clés accidentellement faibles parmi celles qu'on tire au hasard
  • L'existence de tout algorithme d'attaque sous-exponentiel
  • Que le problème appartienne à NP ∩ coNP

Réponse : Elle relie la difficulté moyenne à la difficulté du pire cas : casser des instances tirées au hasard reviendrait à résoudre TOUTES les instances. Le tirage ne peut donc pas tomber sur une instance accidentellement facile. Elle ne dit rien du coût des meilleures attaques connues, ni de la classe de complexité — le problème approché est justement dans NP ∩ coNP pour γ ≥ √n.

9. Un routeur industriel déployé pour vingt ans vérifie des signatures ECDSA sur ses mises à jour de firmware. Quelle priorité de migration ?

  • Faible : la récolte anticipée ne concerne pas les signatures
  • Nulle : un firmware n'est pas une donnée confidentielle
  • Élevée : la durée de VÉRIFICATION joue le rôle de X, et le matériel n'est pas agile

Réponse : Les deux premières affirmations sont exactes et ne concluent rien. La récolte anticipée ne menace pas les signatures, mais le routeur devra vérifier des signatures pendant vingt ans : le jour où l'on sait forger de l'ECDSA, on pousse ce qu'on veut sur le parc. Et remplacer une racine de confiance gravée dans du silicium n'est pas une mise à jour logicielle — Y est irréductible.