Distribution quantique de clés (QKD) & Avantages et limites des PQC paramétrés
Comment partager une clé secrète dont la sécurité repose sur la physique (BB84, E91) plutôt que sur un problème calculatoire — puis pourquoi les circuits quantiques paramétrés, cœur des algorithmes variationnels, sont si durs à entraîner (barren plateaus, expressibilité vs entraînabilité). Sans prérequis mathématiques, avec du code Q# et Qiskit.
Distribution quantique de clés (QKD)
La QKD ne chiffre rien. C’est une méthode pour que deux parties — Alice et Bob — se mettent d’accord sur une clé secrète aléatoire identique, dont la sécurité ne repose pas sur la difficulté d’un calcul (comme RSA) mais sur les lois de la physique quantique. Une fois la clé partagée, on l’utilise classiquement (one-time pad, ou comme clé AES).
Analogie .NET : vois la QKD comme un protocole d’échange de clés (à la Diffie-Hellman) — mais au lieu de s’appuyer sur « le log discret est dur à calculer », il s’appuie sur « on ne peut pas copier ni observer un qubit inconnu sans laisser de trace ». La sécurité devient une propriété physique, pas une hypothèse de complexité.
Pourquoi c’est sûr : deux principes physiques
- Théorème de non-clonage (jour 10) : un espion (Eve) ne peut pas copier un qubit inconnu pour le réémettre intact.
- La mesure perturbe l’état : si Eve mesure un qubit dans la mauvaise base, elle le modifie. Cette perturbation se traduit par des erreurs détectables côté Bob.
BB84, le protocole fondateur (Bennett & Brassard, 1984)
- Alice tire au hasard un bit (0/1) et une base parmi deux : la base rectiligne
Z(|1⟩) ou diagonaleX(|−⟩). Elle prépare et envoie le qubit correspondant. - Bob mesure chaque qubit dans une base choisie aussi au hasard.
- Sifting : sur un canal classique public, ils annoncent uniquement les bases (jamais les bits) et ne gardent que les positions où les bases coïncident. Là, leurs bits sont corrélés ; ailleurs, le résultat de Bob est aléatoire et jeté.
- Détection d’Eve : ils sacrifient un échantillon de bits gardés pour estimer le QBER (Quantum Bit Error Rate). Au-delà d’un seuil (~11 %), ils concluent à une écoute et jettent toute la clé.
Intuition de l’erreur : Eve ignore la base d’Alice. Quand elle devine mal (1 fois sur 2) puis réémet, elle introduit ~25 % d’erreurs sur les positions concernées. Impossible d’écouter sans laisser d’empreinte.
E91, la variante intriquée (Ekert, 1991)
Une source distribue des paires intriquées (états de Bell, jour 7). Alice et Bob mesurent selon des angles tirés au hasard. La sécurité repose sur la violation des inégalités de Bell (CHSH) : si les corrélations dépassent ce qu’une explication classique permet, l’intrication est intacte → pas d’espion. Une Eve réintroduirait des « variables locales » qui ramènent les corrélations sous la borne classique.
Limites pratiques (le vrai mur)
| Limite | Cause | Conséquence |
|---|---|---|
| Distance | Pertes en fibre (~0,2 dB/km) | Portée ~ quelques centaines de km |
| Pas d’amplificateur | Non-clonage interdit de « répéter » le signal | On ne peut pas booster comme en télécom classique |
| Taux de clé | Décroît avec la distance | Débits faibles sur longue distance |
| Attaques d’implémentation | Imperfections matérielles (photon-number-splitting, failles de détecteurs) | Parades : decoy states, MDI-QKD |
Solutions émergentes : répéteurs quantiques (encore immatures) et liens satellitaires (ex. satellite Micius) pour franchir de longues distances.
# Qiskit — un round simplifié de BB84
from qiskit import QuantumCircuit
import random
bit = random.randint(0, 1) # bit secret d'Alice
basis_a = random.randint(0, 1) # 0 = base Z, 1 = base X (Alice)
basis_b = random.randint(0, 1) # base de mesure de Bob
qc = QuantumCircuit(1, 1)
if bit: qc.x(0) # encode le bit (|0⟩ ou |1⟩)
if basis_a: qc.h(0) # passe en base diagonale si X
# --- canal quantique : Eve pourrait mesurer ici et tout perturber ---
if basis_b: qc.h(0) # Bob revient dans sa base de mesure
qc.measure(0, 0)
# On ne garde ce bit (clé brute) QUE si basis_a == basis_b : c'est le sifting.
Piège fréquent : la QKD ne « transmet » pas un message secret par intrication, et ne va pas plus vite que la lumière. Elle produit seulement une clé ; le chiffrement reste une étape classique séparée.
Avantages et limites des PQC paramétrés
Ici PQC = Parametrized Quantum Circuit (circuit quantique paramétré) — à ne pas confondre avec la crypto post-quantique du jour 37. C’est un circuit dont certaines portes ont des angles réglables (θ) que l’on optimise, exactement comme on entraîne un réseau de neurones. C’est le moteur de VQE, QAOA et du machine learning quantique (jours 24-26).
Analogie ML : un PQC est un modèle paramétré. Les angles θ jouent le rôle des poids ; un optimiseur classique (gradient, etc.) les ajuste pour minimiser une fonction de coût. La boucle est hybride quantique-classique.
Le compromis central : expressibilité ↔ entraînabilité
- Expressibilité : capacité de l’ansatz à atteindre une large portion de l’espace des états. Trop peu expressif → il ne peut pas représenter la solution.
- Entraînabilité : facilité à trouver les bons θ. Or plus un ansatz est expressif, plus il devient difficile à entraîner. C’est une tension fondamentale, pas un détail d’ingénierie.
Les barren plateaus (plateaux stériles)
C’est l’obstacle majeur. Pour un ansatz trop profond / trop expressif / initialisé au hasard, le gradient de la fonction de coût devient exponentiellement petit avec le nombre de qubits.
Image : imagine chercher le point le plus bas d’un désert plat à perte de vue, dans le noir. Aucune pente ne te dit où aller. L’optimiseur tâtonne au hasard : l’entraînement n’avance pas. Plus on ajoute de qubits, plus le désert s’aplatit (variance du gradient ↓ exponentiellement).
| Cause d’un barren plateau | Pourquoi |
|---|---|
| Ansatz trop profond / aléatoire | Se rapproche d’un circuit aléatoire (2-design) |
| Fonction de coût globale | Mesure tous les qubits à la fois → gradients plus plats |
| Intrication excessive | Concentre la mesure |
| Bruit | Crée des noise-induced barren plateaus (les aggrave) |
Parades : penser « problème-aware »
- Ansatz adapté au problème (ex. UCCSD en chimie, structure de QAOA calquée sur le problème) plutôt qu’un ansatz hardware-efficient générique aléatoire.
- Fonctions de coût locales (mesurer peu de qubits) plutôt que globales.
- Profondeur maîtrisée, initialisation maligne (identity-block init), entraînement couche par couche.
# Qiskit — ansatz "hardware-efficient" générique (à manier avec prudence)
from qiskit.circuit.library import EfficientSU2
ansatz = EfficientSU2(num_qubits=20, reps=12, entanglement="full")
# 20 qubits, 12 couches, intrication totale, angles initialisés au hasard :
# très expressif... donc très exposé au barren plateau (gradients plats).
# Un ansatz "problème-aware" plus court serait souvent préférable.
// Q# — une couche d'ansatz paramétré : des rotations dont les angles
// (le tableau "theta") sont optimisés par une boucle classique externe.
operation AnsatzLayer(qs : Qubit[], theta : Double[]) : Unit is Adj + Ctl {
for i in 0 .. Length(qs) - 1 {
Ry(theta[i], qs[i]); // rotation paramétrée
}
for i in 0 .. Length(qs) - 2 {
CNOT(qs[i], qs[i + 1]); // intrication entre voisins
}
}
Piège fréquent : « plus de couches = meilleur modèle » est faux en quantique. Empiler des couches sur un ansatz générique aggrave les barren plateaus au lieu d’améliorer la solution.