NIST Post-Quantum Standards (2024)

NIST ran an open competition from 2016 to 2024. Eight years of cryptographers worldwide trying to break each other's submissions. Three algorithms came out standardised. They cover the two things you need to replace in TLS: key exchange and digital signatures. For network infrastructure right now, the key exchange one is the immediate priority. The signature migration is a separate wave, further out.

Key Encapsulation

ML-KEM

FIPS 203

Replaces RSA and ECDH in TLS key exchange. Three parameter sets: ML-KEM-512, ML-KEM-768 (the one in active deployment), ML-KEM-1024. This is what protects session traffic.

Digital Signatures

ML-DSA

FIPS 204

Replaces RSA and ECDSA for code signing, certificates, and authentication. TLS certificates still use classical signatures today. That migration is still being worked out across the industry.

Hash-Based Signatures

SLH-DSA

FIPS 205

An alternative signature scheme based on hash functions rather than the same mathematical family as ML-KEM. Slower and larger, but provides algorithm diversity. Useful if you don't want all your eggs in one basket.

What is deployed today vs what is coming: ML-KEM (key exchange) is already live in Chrome, Firefox, Cloudflare, and F5 BIG-IP 17.5.1+. Your TLS certificates still use classical RSA or ECDSA, and that's acceptable for now. Certificates are short-lived and aren't the target of harvest now, decrypt later attacks the way session traffic is. The certificate migration (ML-DSA) is the next wave and isn't urgent yet.

How ML-KEM Slots Into TLS 1.3

This is the part that made it feel practical rather than theoretical. ML-KEM occupies exactly the same slot in the TLS 1.3 handshake where ECDH used to sit. The protocol structure doesn't change. Both sides advertise what they support, agree on an algorithm, exchange the key material through the key_share extension, and derive the session key. The difference is what happens mathematically inside that exchange. The result is that the session key is never transmitted at all. It is derived independently on both sides from the encapsulation process.

๐ŸŒ Browser
TLS 1.3 client
โ˜๏ธ Server
Cloudflare ยท F5
1
Client Hello: advertises X25519MLKEM768 โ†’ Server
Browser includes X25519MLKEM768 in its supported_groups and sends a speculative key share upfront so the server can respond immediately without an extra round-trip if it supports ML-KEM.
2
Server encapsulates the shared secret โ† Server
Server uses the browser's ML-KEM public key to encapsulate a random shared secret. This produces a ciphertext. Server sends this back in its key_share response.
3
Browser decapsulates: both sides derive the same session key
Browser uses its ML-KEM private key to decapsulate the ciphertext, recovering the shared secret. Both sides now hold the same value, without it ever being transmitted across the wire. Session keys are then derived via HKDF.
4
AES-256-GCM, unchanged
All HTTP data encrypted with AES-256. This step is identical to classical TLS. No change needed here.
One detail worth understanding: HelloRetryRequest. If the client doesn't send the right key share upfront, the server fires back a HelloRetryRequest asking it to retry with the correct group. That's an extra round-trip. Cloudflare's default behaviour ("supported" mode) uses this approach. It works but adds latency. Setting Cloudflare to "preferred" mode via the API makes it send the ML-KEM key share in the first ClientHello, skipping that round-trip. Worth doing if you're tuning for performance.

Why X25519MLKEM768 Runs Both Algorithms Together

When you see X25519MLKEM768 in a TLS negotiation, that's a hybrid group identifier. It's ML-KEM-768 and the classical X25519 running simultaneously in the same handshake. The approach is deliberate. ML-KEM is new. It went through eight years of global scrutiny and came out clean, but it doesn't have the decades of real-world deployment that X25519 has. Running both means an attacker has to break both simultaneously to compromise the session. If ML-KEM has an unexpected weakness, X25519 still holds. If a quantum computer eventually breaks X25519, ML-KEM still holds.

TLS 1.3 is non-negotiable

ML-KEM uses the key_share extension that only exists in TLS 1.3. If any part of your stack has TLS 1.2 as a minimum (a Cloudflare zone setting, an F5 profile, a load balancer), ML-KEM can't negotiate. It doesn't fall back gracefully. It just won't happen. Check your minimum TLS versions before anything else.

Certificates are fine for now

The server certificate still uses RSA or ECDSA and that's not a problem today. Certificates prove identity, not confidentiality, and they're short-lived (90 days typically). They aren't worth harvesting for future decryption. Post-quantum certificates using ML-DSA are coming but they're a separate migration, not urgent yet.