FIPS 203 · 204 · 205 · measured daily

Post-quantum cryptography, measured.

Every NIST-standardized post-quantum algorithm, benchmarked on real silicon and composed into full TLS and SSH handshakes. One thousand timed iterations per operation, garbage collector disabled, process pinned to a core. Every number links to the run that produced it.

Run date
2026-08-22
Commit
Host
Xeon Platinum 8259CL @ 2.50GHz
Instance
t3.medium
liboqs
0.15.0
CPU steal
6.9%
Algorithms tracked
8
3 KEMs, 5 signature schemes
Signing spread
6,972×
ML-DSA-65 against SLH-DSA-SHAKE-128s
Hybrid TLS wire cost
36.5×
2,336 B against classical 64 B
Run integrity
6.9%
CPU steal on t3.medium. Disclosed, not hidden
Signing time

The gap the standard doesn't warn you about.

Logarithmic axis — on a linear one, all but the largest bar would be invisible. That is the finding, not a plotting convenience.

ML-DSA-44
Lattice · level 2
108.8 µs
ML-DSA-87
Lattice · level 5
186.4 µs
ML-DSA-65
Lattice · level 3
202.9 µs
SLH-DSA-SHAKE-128f
Hash-based
66.65 ms
SLH-DSA-SHAKE-128s
Hash-based
1.415 s
100 µs1 ms10 ms100 ms1 s
Lattice (FIPS 204)Hash-based (FIPS 205)
FIPS 203

Key encapsulation — ML-KEM.

Replaces RSA and ECC key exchange. Sizes are what goes on the wire.

AlgorithmKeygenEncapDecapEncap ops/secPublic keyCiphertext
ML-KEM-512NIST level 113.8 µs25.5 µs27.9 µs39,179800 B768 B
ML-KEM-768NIST level 321.1 µs23.2 µs22.7 µs43,1401.16 KB1.06 KB
ML-KEM-1024NIST level 525.8 µs29.4 µs47.0 µs33,9651.53 KB1.53 KB
FIPS 204 · 205

Digital signatures — ML-DSA and SLH-DSA.

Note the inversion: the hash-based schemes carry the smallest public keys and the slowest signing on the board.

AlgorithmKeygenSignVerifyPublic keySignatureFamily
ML-DSA-44NIST level 237.4 µs108.8 µs58.3 µs1.28 KB2.36 KBLattice
ML-DSA-65NIST level 392.0 µs202.9 µs67.9 µs1.91 KB3.23 KBLattice
ML-DSA-87NIST level 587.8 µs186.4 µs74.8 µs2.53 KB4.52 KBLattice
SLH-DSA-SHAKE-128sNIST level 1183.93 ms1.415 s1.43 ms32 B7.67 KBHash
SLH-DSA-SHAKE-128fNIST level 12.74 ms66.65 ms3.97 ms32 B16.69 KBHash
TLS 1.3 key exchange · composed

What it costs inside a real handshake.

Primitives in isolation don't tell you this. Full handshakes, same host, same night.

MLKEM768
Pure post-quantum key exchange
Mean
65.7 µs
Wire
2,272 B
vs classical
−78.5%
SecP256r1MLKEM768
Hybrid, NIST curve
Mean
221.9 µs
Wire
2,402 B
vs classical
−24.9%
X25519MLKEM768
Hybrid — the one most stacks deploy
Mean
290.2 µs
Wire
2,336 B
vs classical
−7.0%
X25519
Classical baseline
Mean
279.6 µs
Wire
64 B
vs classical
baseline
Read this before quoting a timing deltaThis run carried 6.9% CPU steal on a burstable instance, which inflates the classical baseline and compresses every delta above. Timing deltas from this host are a distribution, not a verdict. The byte counts are not — those are fixed by the protocol, not the processor. Read the wire column as the durable number. Migration to a dedicated-core instance is scheduled.
Take the data

Nothing here is behind a login.

Current-day snapshot free, forever. Clone the harness and you should reproduce these within run-to-run variance.