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.
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.
Key encapsulation — ML-KEM.
Replaces RSA and ECC key exchange. Sizes are what goes on the wire.
| Algorithm | Keygen | Encap | Decap | Encap ops/sec | Public key | Ciphertext |
|---|---|---|---|---|---|---|
| ML-KEM-512NIST level 1 | 13.8 µs | 25.5 µs | 27.9 µs | 39,179 | 800 B | 768 B |
| ML-KEM-768NIST level 3 | 21.1 µs | 23.2 µs | 22.7 µs | 43,140 | 1.16 KB | 1.06 KB |
| ML-KEM-1024NIST level 5 | 25.8 µs | 29.4 µs | 47.0 µs | 33,965 | 1.53 KB | 1.53 KB |
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.
| Algorithm | Keygen | Sign | Verify | Public key | Signature | Family |
|---|---|---|---|---|---|---|
| ML-DSA-44NIST level 2 | 37.4 µs | 108.8 µs | 58.3 µs | 1.28 KB | 2.36 KB | Lattice |
| ML-DSA-65NIST level 3 | 92.0 µs | 202.9 µs | 67.9 µs | 1.91 KB | 3.23 KB | Lattice |
| ML-DSA-87NIST level 5 | 87.8 µs | 186.4 µs | 74.8 µs | 2.53 KB | 4.52 KB | Lattice |
| SLH-DSA-SHAKE-128sNIST level 1 | 183.93 ms | 1.415 s | 1.43 ms | 32 B | 7.67 KB | Hash |
| SLH-DSA-SHAKE-128fNIST level 1 | 2.74 ms | 66.65 ms | 3.97 ms | 32 B | 16.69 KB | Hash |
What it costs inside a real handshake.
Primitives in isolation don't tell you this. Full handshakes, same host, same night.
Nothing here is behind a login.
Current-day snapshot free, forever. Clone the harness and you should reproduce these within run-to-run variance.