Most post-quantum material explains the math. This page is the other half: what an engineering team actually does to move a real system from RSA and elliptic curves to ML-KEM and ML-DSA. It ends in an interactive checklist of 28 items across five phases that you can tick off and export to your tracker.

Why now: the deadlines are already published

Nobody knows the exact year a cryptographically relevant quantum computer (CRQC) arrives. Regulators have stopped waiting for that answer and have set dates instead. Three roadmaps matter to most teams:

EU roadmap (NIS Cooperation Group, June 2025)

Member states and operators should start the transition and build inventories by end of 2026, migrate high-risk use cases by 2030, and medium-risk by 2035.

NSA CNSA 2.0 (US national security systems)

New NSS acquisitions must support CNSA 2.0 algorithms from 1 January 2027. Software and firmware signing must use them exclusively by 2030; web browsers, servers, cloud services and operating systems by 2033.

NIST IR 8547 (initial public draft, Nov 2024)

112-bit security algorithms such as RSA-2048 and P-256 are deprecated after 2030. All quantum-vulnerable public-key algorithms are disallowed after 2035, whatever the key size.

Even if you sell nothing to governments, these dates flow downstream: into compliance frameworks, enterprise procurement questionnaires, and the defaults of the libraries you depend on.

Harvest now, decrypt later and Mosca’s inequality

An attacker who records your TLS traffic today can store it and decrypt it once a CRQC exists. This is called harvest now, decrypt later (HNDL), and it is why confidentiality has to move before the quantum computer arrives, not after.

Mosca’s inequality

Let x be how many years your data must stay secret, y how many years your migration will take, and z how many years until a CRQC exists. If

x + y > z

you are already late. Example: medical records that must stay private for 10 years (x = 10), and a large organization that needs 5 years to migrate (y = 5). If a CRQC is plausible within 15 years, the work should have started already. You can’t control z; you can shrink y, which is what the checklist below is for.

The migration order in one paragraph

Find your crypto first. Make it swappable. Then protect key exchange with a hybrid (classical + ML-KEM), because HNDL makes that exposure real today. Move signatures next, starting with the ones you control end to end and with long-lived roots of trust that have long lead times. Finally, validate, roll out behind a flag, and monitor. Symmetric crypto mostly stays: AES-256 and SHA-2 remain fine. The post-quantum security chapter explains why.

The PQC migration checklist

Each item is one concrete action with the reason behind it. Links go to the deeper chapters on ML-KEM and ML-DSA when you need the details.

PQC migration checklist0 / 28 done

Tick items as you go. Progress is saved in this browser only; nothing is sent anywhere.

1. Inventory & risk0 / 6 done

  • List every place public-key crypto runs: public and internal TLS/mTLS, SSH, JWT/JOSE and OIDC tokens, code and artifact signing, KMS/HSM keys, VPN/IPsec, database and at-rest key wrapping, S/MIME/PGP, and the third-party SDKs that do crypto on your behalf. CycloneDX 1.6 has a CBOM format for this.

  • Combine passive handshake capture (TLS and SSH groups, signature algorithms), your CA and Certificate Transparency records, and source/dependency scans for crypto API calls. Questionnaires miss hard-coded RSA in a forgotten service.

  • For each data flow, write down how many years it must stay confidential (x in Mosca’s inequality). Health, identity, financial and state data often need 10–25 years, which puts traffic recorded today in harvest-now-decrypt-later range.

  • Root CAs, firmware-signing keys and devices that stay in the field for 10–15 years are the slow part: a device that cannot be updated must ship with a quantum-safe root of trust before it leaves the factory.

  • Recorded key exchanges can be decrypted later, so confidentiality is at risk today. A forged signature needs a quantum computer at the moment of the attack. The exception is long-lived trust anchors with long lead times. Post-quantum security →

  • Map each system to the deadline that applies to you (EU 2030 for high-risk, CNSA 2.0, NIST 2030/2035) so the plan survives reorgs and budget cycles.

2. Crypto-agility prep0 / 6 done

  • Route crypto through one internal library or a small set of vetted wrappers so switching an algorithm is a deploy, not a rewrite across 40 services.

  • Versioned ciphertext headers, key IDs, JWS alg values and certificate OIDs let you read old data and write new data at the same time. Formats that assume “always RSA” block migration.

  • OpenSSL 3.5+ ships ML-KEM, ML-DSA and SLH-DSA; Go 1.24+ has crypto/mlkem; JDK 24 added ML-KEM and ML-DSA; BoringSSL, AWS-LC and Bouncy Castle support them too. Old runtimes are the most common blocker.

  • Fixed-width DB columns, HTTP header and cookie limits, UDP datagrams, HSM object sizes and QR codes all have to hold ML-KEM-768 keys (1,184 B), ciphertexts (1,088 B) and ML-DSA-65 signatures (3,309 B). Parameter selection →

  • Ask CDN, cloud KMS, HSM, IdP, VPN and payment providers which FIPS 203/204/205 algorithms they support, whether they negotiate hybrid TLS, their FIPS 140-3 validation status, and the dates they commit to.

  • liboqs (Open Quantum Safe) is excellent for prototyping and interop tests but is not meant for production. In production use your platform’s maintained library, and FIPS 140-3 validated modules where compliance requires them, as validations become available.

3. Key exchange & hybrid TLS0 / 6 done

  • The hybrid group combines X25519 with ML-KEM-768 and stays secure if either one holds. OpenSSL 3.5+, Go 1.24+ crypto/tls (on by default), BoringSSL and Chrome 131+ support it, and CDNs such as Cloudflare already negotiate it with browsers. Start at the edge. Hybrid TLS guide →

  • The hybrid key share adds about 1.2 KB, so the ClientHello no longer fits in one ~1,500-byte packet. Some firewalls, load balancers and IDS devices that expect a single-segment ClientHello drop or reset the connection. Test through your real network path. Hybrid TLS guide →

  • Go services get the hybrid by default only if Config.CurvePreferences is unset; an explicit list must add X25519MLKEM768. Check sidecars, ingress controllers and database drivers separately.

  • Recent OpenSSH releases offer mlkem768x25519-sha256 (and the older sntrup761x25519-sha512) and prefer them by default. Update bastions, CI runners and the SSH libraries embedded in deploy tools.

  • ML-KEM-768 targets NIST category 3 and is the common default. Use ML-KEM-1024 where CNSA 2.0 applies; keep ML-KEM-512 for constrained cases after a deliberate review. Parameter selection →

  • IKEv2 can add ML-KEM through RFC 9370 multiple key exchanges. For data at rest, AES-256 is fine; the exposure is RSA/ECDH used to wrap or transport data keys, so re-wrap those under ML-KEM or a symmetric KEK.

4. Signatures & PKI0 / 5 done

  • ML-DSA (FIPS 204) is fast with moderate sizes. SLH-DSA (FIPS 205) relies only on hash functions but has large, slow signatures, which suits rarely used roots of trust. For firmware, CNSA 2.0 specifies stateful LMS/XMSS. Dilithium / ML-DSA →

  • ML-DSA-44 already means a 2,420 B signature and a 1,312 B public key, against 64 B and 32 B for Ed25519. A certificate chain carries several of each, and JWTs, cookies and log lines grow with them. Lattice signatures →

  • Code and artifact signing, internal PKI and service-to-service tokens can move now. Public WebPKI certificates depend on CA/Browser Forum and browser support that is still being settled.

  • During migration, sign with both a classical and a PQ algorithm (separately or as an IETF composite signature) so verifiers can upgrade at their own pace. Decide which verifier requires what, and when the classical half is dropped.

  • CNSA 2.0 expects quantum-resistant software and firmware signing exclusively by 2030. Boot ROMs and hardware roots of trust have multi-year lead times, so these go into hardware roadmaps now.

5. Validation & rollout0 / 5 done

  • Run known-answer tests and NIST ACVP vectors for FIPS 203/204/205 in CI, plus interop tests against a second implementation. Encoding bugs are the most common failure.

  • KyberSlash showed that secret-dependent division leaked keys through timing in several ML-KEM/Kyber implementations. Prefer implementations with constant-time audits, and don’t modify their internals. Kyber / ML-KEM →

  • ML-KEM is fast, often cheaper per operation than X25519; the real cost is bytes on the wire and in storage. Measure handshake p50/p99, egress, and signature verification cost at peak.

  • Canary by region or client population, track handshake failures by client and network, and keep a single switch that reverts to classical groups without a code deploy.

  • Log the negotiated TLS group and signature algorithm, chart the share of hybrid connections, and alert on regressions. Feed new findings back into the CBOM so the inventory stays current.

Founding cohort · Dec 1–Dec 17, 2026

Turn this checklist into a plan for your system

Work through this checklist with an instructor and peers in Post-Quantum Cryptography for Engineers: six live sessions, Tuesdays & Thursdays, 16:00–17:30 UTC, capped at 25 seats. You leave with a migration plan for your own system.

No spam. One email when enrollment opens, a few before the cohort. Unsubscribe anytime.

See the curriculum →

Size budget: what changes on the wire

Post-quantum algorithms are fast, but they are larger. Most migration bugs are size bugs: a field, header, packet or HSM slot that assumed 32 or 64 bytes.

AlgorithmPublic keyCiphertext / signatureTypical role
X25519 (classical)32 B32 BToday’s key exchange
ML-KEM-768 (FIPS 203)1,184 B1,088 BDefault KEM, hybrid TLS
ML-KEM-1024 (FIPS 203)1,568 B1,568 BCNSA 2.0 key establishment
Ed25519 (classical)32 B64 BToday’s signatures
ML-DSA-44 (FIPS 204)1,312 B2,420 BSize-sensitive signatures
ML-DSA-65 (FIPS 204)1,952 B3,309 BDefault signatures
SLH-DSA-SHA2-128s (FIPS 205)32 B7,856 BConservative, long-lived roots

Common migration mistakes

FAQ

Where should a post-quantum migration start?

Start with a cryptographic inventory: every TLS endpoint, SSH server, token format, signing key, KMS/HSM key, VPN and third-party SDK that uses RSA or elliptic curves. Then classify data by how long it must stay secret and migrate key exchange first, because recorded traffic can be decrypted later.

What is X25519MLKEM768?

X25519MLKEM768 is the hybrid TLS 1.3 key-exchange group that combines classical X25519 with ML-KEM-768 (FIPS 203). The shared secret stays safe as long as either component is unbroken. It is supported by OpenSSL 3.5+, Go 1.24+ (on by default), BoringSSL and Chrome 131+.

Do I need to replace AES and SHA-2 too?

Mostly no. Grover’s algorithm gives at most a square-root speedup against symmetric keys, and in practice much less, so AES-256 and SHA-256/384 remain fine. The urgent work is public-key crypto: RSA, ECDH, ECDSA and EdDSA, which Shor’s algorithm breaks.

Should I migrate signatures now or later?

Key exchange comes first because of harvest-now-decrypt-later. Signatures can follow, since forging one needs a quantum computer at the time of the attack, but long-lived roots of trust such as firmware-signing keys and root CAs have long lead times and should be planned now.

What are the deadlines for post-quantum migration?

NIST IR 8547 (draft) deprecates 112-bit public-key algorithms such as RSA-2048 and P-256 after 2030 and disallows all quantum-vulnerable public-key algorithms after 2035. The EU roadmap asks for first steps by end of 2026, high-risk systems by 2030 and medium-risk by 2035. CNSA 2.0 requires PQC support in new national security system acquisitions from January 2027.

Going deeper: ML-KEM internals, ML-DSA internals, how lattice signatures work, and how parameter sets are chosen.

Founding cohort · Dec 1–Dec 17, 2026

Migrate with a group, not alone

Work through this checklist with an instructor and peers in Post-Quantum Cryptography for Engineers: six live sessions, Tuesdays & Thursdays, 16:00–17:30 UTC, capped at 25 seats. You leave with a migration plan for your own system.

No spam. One email when enrollment opens, a few before the cohort. Unsubscribe anytime.

See the curriculum →