Post-Quantum Risk Intelligence
Lattice scans certificates, networks, containers and source code — then tells you what a quantum adversary could actually do, with the reasoning attached.
235 tests · FIPS 203/204 · 61 API routes
What it does
Lattice tells you whether that matters, how much, and what to do about it.
Certificates, negotiated suites, dependency manifests and image layers — the cryptography actually present, not what a name suggests.
Each primitive is classified by family and resolved to a strength, then measured against two specific quantum attacks: Shor and Grover.
A 0–100 score where 0 is safe, a CycloneDX CBOM, a PDF, and per-finding provenance naming the detector behind every claim.
Every number carries its reasoning: severity never moves without an explanation, an evidence block, and a provenance marker.
How the quantum assessment works
Traffic captured today can be decrypted once a quantum computer arrives — harvest now, decrypt later. So Lattice measures, it does not guess.
A primitive in an asymmetric family is either Shor-broken or it is not. No partial credit. RSA, DH, ECDSA and EdDSA do not get weaker under Shor — they stop existing.
Circuit-verified factorisations
15 → 3×5 · 21 → 3×7 · 33 → 3×11 · 35 → 5×7 · 39 → 3×13 · 55 → 5×11
Periods verified classically before any factor is returned.
Quadratic search costs √(2^n) ≈ 2^(n/2) evaluations, so a symmetric primitive of strength n is worth n/2. A 256-bit key is worth about 128 bits.
| Primitive | Classical | Effective | Verdict |
|---|---|---|---|
| AES-128 | 128 bits | 64 bits | HIGH |
| AES-256 | 256 bits | 128 bits | acceptable floor |
| SHA-256 | 256 bits | 128 bits | low |
Only post-quantum algorithms clear the 128-bit effective floor. Anything below it is reported as Grover-degraded rather than safe.
Measured on Qiskit-Aer at 4096 shots: the π/4 coefficient fits at 0.7328 against 0.7854 theory — a 6.7% gap from shot noise and finite-depth discretisation.
An algorithm Lattice cannot classify is reported as unassessed — never rounded up to broken, never rounded down to safe. None is not 0: zero is the sentinel meaning Shor-broken, and treating unknown as zero would turn every unclassified primitive into an existential finding.
Shor is executed against small composites (15–55) to demonstrate the method — no laptop simulator factors a 2048-bit modulus. Classical strength numbers come from published tables, and the code labels them as such.
The six layers
Six deployable surfaces over the same primitives — ML-KEM-768 key exchange and ML-DSA-65 signatures, from FIPS 203 and FIPS 204.
ML-KEM-768 and ML-DSA-65 behind one import — keygen, sign, verify, encapsulate, decapsulate for any Python app.
Open →Real signing and encapsulation with a lifecycle around it, sealed at rest under AES-256-GCM.
Open →Registry for domains configured for hybrid TLS. Termination is nginx — the build fails rather than silently serving classical TLS.
Open →Real X.509 issuance with a separate ML-DSA-65 attestation alongside it. The certificate itself is never called post-quantum.
Open →Workload identity, signed policy decisions and session derivation. Policy denies on an internal error.
Open →Sequence the move from classical to post-quantum cryptography across the estate, one algorithm at a time.
Open →