PQC Migration Roadmap: How to Build One and Where to Start
02 juil. 2026
ArticleBuild a funded post-quantum migration roadmap: inventory crypto, rank business impact and sequence algorithm change without freezing delivery.
Lire l’article
Gestion des clés ML-KEM : tailles de clés FIPS 203, clés éphémères ou statiques, TLS hybride X25519MLKEM768, stockage HSM et cycle de vie des clés PQC.
La gestion des clés ML-KEM est l'ensemble des contrôles qui encadrent la génération, le stockage, la distribution, la rotation et la destruction des clés utilisées par ML-KEM, le mécanisme d'encapsulation de clés post-quantique normalisé par le NIST dans FIPS 203. La plupart des clés ML-KEM sont éphémères et ne vivent que le temps d'une poignée de main TLS ; les clés statiques exigent la même protection que toute clé privée à long terme, avec deux particularités : des clés plus grandes, et une graine (seed) de 64 octets aussi sensible que la clé privée elle-même.
L'établissement de clés est la partie de votre cryptographie exposée au « harvest now, decrypt later » : un trafic enregistré aujourd'hui avec un échange de clés RSA ou ECDH pourra être déchiffré dès qu'un ordinateur quantique suffisamment puissant existera. C'est pourquoi le projet de plan de transition du NIST et le calendrier fédéral américain placent l'établissement de clés en premier, et pourquoi ML-KEM est le premier algorithme post-quantique que la plupart des organisations exploiteront en production, souvent déjà via le TLS hybride des versions récentes d'OpenSSL.
Ce guide couvre les tailles de clés de FIPS 203, les différences entre la gestion des clés ML-KEM et celle de RSA et d'ECDH, le TLS hybride avec X25519MLKEM768, l'emplacement des clés ML-KEM, un tableau du cycle de vie, les échéances de NIST IR 8547 et de CNSA 2.0, ainsi que la planification de la migration.
ML-KEM (Module-Lattice-Based Key-Encapsulation Mechanism) est spécifié dans FIPS 203, publié par le NIST le 13 août 2024. Selon les termes du NIST, il s'agit d'un mécanisme d'encapsulation de clés que deux parties peuvent utiliser « to establish a shared secret key over a public channel » (pour établir une clé secrète partagée sur un canal public). Sa sécurité repose sur le problème Module Learning with Errors, réputé résister aux attaques par ordinateur quantique.
Deux points comptent pour la gestion des clés :
KeyGen produit une clé d'encapsulation ek (publique) et une clé de décapsulation dk (privée). Encaps(ek) renvoie un chiffré et un secret partagé de 32 octets. Decaps(dk, ciphertext) retrouve le même secret partagé.La recommandation complémentaire du NIST, SP 800-227 (version finale, septembre 2025), explique comment utiliser les KEM en toute sécurité, notamment les clés statiques et éphémères, les données au repos et les constructions hybrides. Lisez-la en parallèle de FIPS 203 lorsque vous rédigez une politique ML-KEM.
FIPS 203 approuve trois jeux de paramètres. Les tailles ci-dessous proviennent du tableau 3 de FIPS 203 ; les catégories de sécurité, de la section 8.
| Jeu de paramètres | Catégorie de sécurité NIST | Clé d'encapsulation (publique) | Clé de décapsulation (privée) | Chiffré | Secret partagé |
|---|---|---|---|---|---|
| ML-KEM-512 | 1 | 800 octets | 1 632 octets | 768 octets | 32 octets |
| ML-KEM-768 | 3 | 1 184 octets | 2 400 octets | 1 088 octets | 32 octets |
| ML-KEM-1024 | 5 | 1 568 octets | 3 168 octets | 1 568 octets | 32 octets |
À titre de comparaison, une clé publique X25519 fait 32 octets.
Lequel choisir. FIPS 203 indique : « NIST recommends using ML-KEM-768 as the default parameter set, as it provides a large security margin at a reasonable performance cost. » (Le NIST recommande ML-KEM-768 comme jeu de paramètres par défaut, car il offre une large marge de sécurité pour un coût de performance raisonnable.) La norme conseille aussi d'utiliser le jeu de paramètres le plus robuste qui soit praticable dès la mise en place de la protection, afin d'éviter une transition ultérieure. Les systèmes de sécurité nationale suivent CNSA 2.0, qui désigne ML-KEM-1024 (voir Échéances).
La graine. La génération de clés ML-KEM part de deux valeurs aléatoires de 32 octets, d et z. FIPS 203 autorise le stockage de cette graine de 64 octets pour redériver la paire de clés plus tard, mais précise que « it is sensitive data and shall be treated with the same safeguards as a decapsulation key » (il s'agit de données sensibles, qui doivent bénéficier des mêmes protections qu'une clé de décapsulation).
1. Une interface différente. Avec ECDH, chaque partie combine sa clé privée avec la clé publique de l'autre. Avec le transport de clés RSA, l'émetteur choisit un secret et le chiffre. ML-KEM ne fait ni l'un ni l'autre : la partie qui encapsule obtient un nouveau secret partagé et un chiffré, et seul le détenteur de dk peut retrouver ce secret. Les bibliothèques, les API de HSM et les workflows d'encapsulation (key wrapping) construits autour de encrypt/decrypt ou de derive ont besoin d'un nouveau chemin encapsulate/decapsulate. PKCS#11 3.2 ajoute précisément cela (voir la FAQ).
2. Les clés éphémères et statiques obéissent à des règles différentes. SP 800-227 est explicite : « If an application uses an ephemeral key pair, the key pair shall be used for only one execution of key-establishment via a KEM and shall be destroyed as soon as possible after its use. » (Si une application utilise une paire de clés éphémère, celle-ci ne doit servir qu'à une seule exécution d'établissement de clés via un KEM et doit être détruite le plus tôt possible après usage.) Une clé ML-KEM statique, en revanche, est une clé privée à long terme qui exige garde, sauvegarde et rotation.
3. Deux formats privés à gérer. Une clé privée ML-KEM peut être stockée sous forme de graine de 64 octets, de dk étendue (1 632 à 3 168 octets), ou des deux. SP 800-227 note que « some applications might call for storing keys using only a short seed, while other applications might call for storing keys in an expanded format that allows for faster computations » (certaines applications peuvent exiger de stocker les clés sous la seule forme d'une graine courte, d'autres sous un format étendu qui accélère les calculs). Votre politique doit préciser quel format est stocké, exporté et sauvegardé, car une sauvegarde contenant uniquement la graine ne peut pas être restaurée dans un système qui n'accepte que dk, et inversement.
4. La preuve de possession change. Une clé KEM ne peut pas signer une demande de certificat. SP 800-227 précise qu'une partie qui utilise la clé d'encapsulation statique d'une autre « must have assurance of the other party's ownership of the key » (doit avoir l'assurance que l'autre partie détient bien la clé), assurance obtenue auprès d'une autorité de certification ou par une preuve de possession associée à une vérification d'identité. Attendez-vous à ce que les processus d'enrôlement des certificats ML-KEM diffèrent du modèle CSR signée que vous utilisez pour RSA.
5. La vérification des entrées est obligatoire. FIPS 203 exige que Encaps et Decaps ne s'exécutent que sur des entrées vérifiées (section 7). Importer une clé provenant d'une source non fiable est donc une étape de validation, pas une simple copie de fichier.
6. Des objets plus volumineux. Des clés et des chiffrés plus grands ont un impact sur les poignées de main TLS, les colonnes de base de données, les limites d'attributs et les quotas de stockage des HSM.
| Aspect | RSA (transport de clés) / ECDH (accord de clés) | ML-KEM (FIPS 203) |
|---|---|---|
| Résistance quantique | Non ; le projet NIST IR 8547 propose la dépréciation après 2030 (112 bits) et l'interdiction après 2035 | Conçu pour résister aux attaques quantiques |
| Opération | RSA : chiffrer/déchiffrer un secret choisi. ECDH : dériver à partir de deux paires de clés | Encapsuler/décapsuler ; le secret est généré pendant l'encapsulation |
| Taille typique de la clé publique | X25519 : 32 octets ; RSA-2048 : module de 256 octets | 800 / 1 184 / 1 568 octets |
| Stockage de la clé privée | Valeur de la clé privée | Graine de 64 octets, dk étendue (1 632 à 3 168 octets), ou les deux |
| Usage éphémère | ECDHE dans TLS 1.3 | Partage de clé ML-KEM dans le TLS 1.3 hybride ; une exécution d'établissement de clés par paire de clés |
| Usage statique | Transport de clés RSA, ECDH statique | Clé d'encapsulation à long terme publiée ou certifiée ; dk conservée dans un KMS/HSM |
| Preuve de possession | CSR signée (RSA) | Aucune signature possible ; preuve de possession via l'autorité de certification ou le protocole |
| Peut-elle signer ? | RSA oui ; clés ECDH non | Non ; utiliser ML-DSA ou SLH-DSA |
| Support HSM/API | PKCS#11, KMIP, KMS cloud depuis de nombreuses années | PKCS#11 3.2 définit les objets et mécanismes ML-KEM ; le support varie selon les produits |
| Mode de transition | Classique uniquement | Généralement hybride avec X25519 ou ECDH pendant la transition |
X25519MLKEM768 est un groupe d'échange de clés TLS 1.3 qui exécute ML-KEM-768 et X25519 en parallèle et combine les deux secrets partagés, de sorte que la session reste sûre tant que l'un des deux algorithmes tient. Il est normalisé dans la RFC 10024, « Post-Quantum Traditional (PQ/T) Hybrid Key Agreement Mechanisms for TLS 1.3 » (Standards Track, août 2026), publiée à partir du brouillon IETF draft-ietf-tls-ecdhe-mlkem.
La RFC 10024 définit trois groupes :
| Groupe | Code point | Recommandé | Partage client | Partage serveur | Secret partagé |
|---|---|---|---|---|---|
| X25519MLKEM768 | 4588 (0x11EC) | Y | 1 216 octets (1 184 ML-KEM + 32 X25519) | 1 120 octets (1 088 ML-KEM + 32 X25519) | 64 octets |
| SecP256r1MLKEM768 | 4587 (0x11EB) | N | 1 249 octets | 1 153 octets | 64 octets |
| SecP384r1MLKEM1024 | 4589 (0x11ED) | N | 1 665 octets | 1 665 octets | 80 octets |
Un détail piège les implémenteurs : dans X25519MLKEM768, la partie ML-KEM vient en premier dans le partage de clé et dans le secret partagé concaténé, alors que les deux groupes à courbes NIST placent la partie ECDH en premier.
Ce que cela implique pour la gestion des clés : rien à stocker. Dans le TLS 1.3 hybride, le client génère une nouvelle paire de clés ML-KEM à chaque poignée de main, envoie la clé d'encapsulation de 1 184 octets, et le serveur répond par un chiffré. Les deux paires de clés sont éphémères et détruites après la poignée de main, exactement comme ECDHE aujourd'hui. Le serveur continue de s'authentifier avec son certificat RSA ou ECDSA existant.
Ce groupe est aussi déjà déployé. OpenSSL 3.5.0 (8 avril 2025) a ajouté ML-KEM, ML-DSA et SLH-DSA et a modifié « the default TLS keyshares ... to offer X25519MLKEM768 and X25519 » (les partages de clés TLS par défaut, pour proposer X25519MLKEM768 et X25519). Pour vérifier si un serveur le négocie :
# OpenSSL 3.5 or later
openssl s_client -connect example.com:443 -groups X25519MLKEM768 </dev/null 2>/dev/null | grep -i -E "group|temp key"
La première décision consiste à déterminer quelles clés doivent réellement être gérées.
| Usage | Type de clé | Emplacement de la partie privée | Effort de gestion |
|---|---|---|---|
| TLS 1.3 hybride (X25519MLKEM768) | Éphémère | Mémoire du processus de la bibliothèque TLS, pour une poignée de main | Configuration uniquement : activer le groupe, surveiller la négociation |
| Échange de clés IPsec / VPN hybride | Éphémère | Mémoire de la passerelle | Niveau configuration et firmware |
| Chiffrement de données ou de clés pour un destinataire à long terme | Statique | KMS ou HSM ; dk ne devrait pas en sortir | Cycle de vie complet : garde, sauvegarde, rotation, destruction |
| Encapsulation de clés (key wrapping) entre systèmes ou tenants | Statique | KMS ou HSM | Cycle de vie complet plus politique d'accès |
| Équipements ou services dotés d'une clé KEM certifiée | Statique | Élément sécurisé de l'équipement, TPM ou HSM | Cycle de vie plus émission et révocation des certificats |
Pour les clés statiques, SP 800-227 fixe le socle : les données privées (graines et clés de décapsulation) « needs to be stored within the cryptographic module in a manner that is secure against both leakage and unauthorized modification » (doivent être stockées dans le module cryptographique de manière à être protégées contre les fuites comme contre les modifications non autorisées), et l'import comme l'export « needs to be performed in a secure manner » (doivent être réalisés de manière sécurisée). En pratique : générer dans le KMS ou le HSM, garder dk non exportable sauf si la sauvegarde impose un export encapsulé, et n'exposer que Decaps aux applications.
Utilisez ce tableau comme point de départ d'une politique de clés ML-KEM statiques. Les clés TLS éphémères ne concernent que les lignes génération et destruction, prises en charge par la bibliothèque TLS.
| Étape | Ce qu'il faut décider | Spécificités ML-KEM |
|---|---|---|
| Génération | Où les clés sont générées ; quel jeu de paramètres | Générer dans un module validé. FIPS 203 exige un RBG approuvé d'une force de sécurité d'au moins 128, 192 ou 256 bits pour ML-KEM-512, -768 et -1024. ML-KEM-768 par défaut ; ML-KEM-1024 dans le périmètre CNSA 2.0 |
| Stockage | Format et protection | Stocker la graine, dk ou les deux, et consigner lequel. Traiter la graine exactement comme dk. La clé publique ek doit être protégée contre la modification, pas contre la divulgation |
| Distribution | Comment les pairs obtiennent la clé d'encapsulation | Certificat ou canal authentifié ; prévoir la preuve de possession, puisque la clé ne peut pas signer |
| Utilisation | Qui peut appeler Decaps | Restreindre par identité applicative ; journaliser chaque décapsulation pour les clés statiques |
| Rotation | Cryptopériode et ré-encapsulation | Fixer une cryptopériode selon la politique. Les données ou clés encapsulées avec l'ancienne clé doivent être ré-encapsulées, ou l'ancienne dk conservée (déchiffrement seul) jusqu'à leur expiration |
| Sauvegarde et restauration | Format d'export et garde | Export encapsulé uniquement. Une graine de 64 octets est compacte mais doit être sauvegardée avec les mêmes contrôles que la clé complète ; vérifier que le système cible accepte le format |
| Destruction | Quand et comment | FIPS 203 indique que la clé de décapsulation « must be destroyed after it is no longer needed » (doit être détruite dès qu'elle n'est plus nécessaire). Détruire ensemble la graine et dk, sauvegardes comprises |
| Audit | Preuves | Enregistrer les événements de génération, d'utilisation, de rotation et de destruction dans un journal inviolable |
Si vous avez besoin d'un fichier de clé portable pour des tests, OpenSSL 3.5 montre directement le choix de la graine. Par défaut, il conserve la graine ; cette commande n'écrit que la dk FIPS 203 :
openssl genpkey -provparam ml-kem.retain_seed=no -algorithm ml-kem-768 -out priv-only.pem
Réservez ces clés logicielles aux tests.
NIST IR 8547. Le document du NIST Transition to Post-Quantum Cryptography Standards n'est encore qu'un projet initial soumis à consultation publique (publié le 12 novembre 2024 ; consultation close le 10 janvier 2025). Pour l'établissement de clés, il propose que DH/MQV sur corps finis, DH/MQV sur courbes elliptiques et l'établissement de clés RSA à 112 bits de sécurité soient dépréciés après 2030, et que ces algorithmes à 112 bits et à 128 bits ou plus soient interdits après 2035. S'agissant d'un projet, ces dates indiquent l'orientation du NIST plutôt que des règles définitives.
CNSA 2.0. Aux États-Unis, les systèmes de sécurité nationale suivent la suite CNSA 2.0 de la NSA. Un Internet-Draft de l'IETF rédigé par la NSA, qui définit un profil TLS pour CNSA 2.0 (draft-becker-cnsa2-tls-profile), indique que « CNSA 2.0 requires the use of ML-KEM-1024 for key establishment in TLS » (CNSA 2.0 exige ML-KEM-1024 pour l'établissement de clés dans TLS). Les dates par catégorie et leur articulation avec le calendrier fédéral de l'OMB figurent dans notre guide de la réglementation post-quantique américaine : NIST, OMB et CNSA 2.0.
dk et de l'export encapsulé.DuoKey couvre les étapes d'inventaire et de politique ci-dessus. D'après la documentation de DuoKey :
classical, hybrid ou pqc_only), la référence de clé et le backend. La posture hybride avec ML-KEM et ML-DSA est disponible d'emblée. Passer au PQC seul est une modification de politique ; le code applicatif ne change pas.CAP fonctionne aujourd'hui sur DuoKey Cockpit via une API REST et des clients de référence Java/Spring Boot et .NET/EF Core ; des SDK packagés figurent sur la feuille de route. Pour tout ce qui n'est pas mentionné ici, par exemple le support ML-KEM d'un modèle de HSM précis, contactez DuoKey.
Q: Qu'est-ce que la gestion des clés ML-KEM ?
C'est l'ensemble des contrôles qui encadrent la génération, le stockage, la distribution, la rotation, la sauvegarde et la destruction des clés ML-KEM, les clés KEM post-quantiques définies dans FIPS 203. Les clés éphémères utilisées dans le TLS hybride ne demandent qu'une configuration correcte ; les clés statiques exigent une gestion complète du cycle de vie dans un KMS ou un HSM, y compris la protection de la graine de 64 octets.
Q: ML-KEM remplace-t-il RSA ?
En partie. ML-KEM remplace RSA (et ECDH) pour l'établissement de clés : transport de clés et accord de clés. Il ne remplace pas les signatures RSA ; pour celles-ci, le NIST a normalisé ML-DSA (FIPS 204) et SLH-DSA (FIPS 205). Pendant la transition, ML-KEM est généralement combiné avec X25519 ou ECDH dans un mode hybride.
Q: Qu'est-ce que X25519MLKEM768 ?
Un groupe d'échange de clés TLS 1.3 hybride qui combine ML-KEM-768 et X25519, normalisé dans la RFC 10024 avec le code point 0x11EC. Le partage client fait 1 216 octets, le partage serveur 1 120 octets, et le secret partagé combiné 64 octets. OpenSSL 3.5 le propose par défaut.
Q: Un HSM peut-il stocker des clés ML-KEM ?
Cela dépend du HSM et de son firmware. La norme PKCS#11 3.2 (OASIS Standard, juin 2026) définit les objets de clés ML-KEM (CKK_ML_KEM), un mécanisme de génération de paires de clés (CKM_ML_KEM_KEY_PAIR_GEN), C_EncapsulateKey et C_DecapsulateKey, ainsi que des attributs pour la graine (CKA_SEED) et la clé de décapsulation (CKA_VALUE). Savoir si un HSM donné les implémente, et avec quel statut de validation, est une question à poser à son fournisseur.
Q: Faut-il stocker la graine ML-KEM ou la clé de décapsulation ?
Les deux sont autorisés. FIPS 203 permet de stocker la graine de 64 octets et de redériver la paire de clés, à condition que la graine bénéficie des mêmes protections que la clé de décapsulation. Choisissez un format de référence unique par système, et assurez-vous que votre format de sauvegarde peut être importé là où vous le restaureriez.
Q: Quel jeu de paramètres ML-KEM utiliser ?
Le NIST recommande ML-KEM-768 par défaut et conseille le jeu de paramètres le plus robuste qui soit praticable. Utilisez ML-KEM-1024 lorsque CNSA 2.0 s'applique ou que votre politique exige la catégorie de sécurité 5.
Q: Faut-il de nouveaux certificats pour utiliser ML-KEM dans TLS ?
Pas pour l'échange de clés hybride. X25519MLKEM768 modifie l'échange de clés, pas l'authentification ; vos certificats RSA ou ECDSA existants continuent donc de fonctionner. Les certificats changent lorsque vous migrez les signatures vers ML-DSA.
ML-KEM change moins de choses à la gestion des clés que ne le laissent penser ses tailles de clés, à condition de séparer les deux cas. Les clés éphémères du TLS hybride relèvent d'une tâche de configuration que vous pouvez lancer dès ce trimestre. Les clés statiques exigent une politique qui couvre la graine, l'interface KEM et la preuve de possession.
dk ou les deux), la cryptopériode, la sauvegarde et la destructionÉcrit par
DuoKey Team
Ressources associées
Dites-nous où le contrôle est difficile aujourd’hui. Nous vous aiderons à définir une prochaine étape concrète.