Tokenkeep PQC
Post-quantum migration analysis: find every byte limit ML-DSA will break.
An inventory tells you where crypto is. It can't tell you what breaks when you swap it. ML-DSA, SLH-DSA and ML-KEM artifacts are 30 to 780 times larger than the classical ones they replace. Tokenkeep PQC traces every signature, public key and ciphertext from the code that produces it to the database columns, cookies, header buffers, TLS records and firmware stacks it has to fit through, then reports every overflow and generates the patch.
The clock is already running
Data signed today is still checked years from now, and a migration that touches every byte limit takes years, not quarters.
- Aug 2024FIPS 203, 204, 205 publishedML-KEM, ML-DSA and SLH-DSA become NIST standards.
- 2030CNSA 2.0: software & firmware signingNational-security systems must sign exclusively with post-quantum algorithms. Networking equipment is due the same year.
- After 2030NIST: RSA & ECDSA deprecatedUnder NIST IR 8547, quantum-vulnerable signatures may still be used only after a documented risk decision.
- 2033CNSA 2.0: web, cloud & OSBrowsers, servers, cloud services and operating systems must use post-quantum algorithms exclusively.
- After 2035NIST: disallowedRSA, ECDSA and EdDSA are no longer approved under NIST standards.
Sources: NIST IR 8547, NSA CNSA 2.0. Check the current text of each before planning against these dates.
A CBOM scanner
Cryptographic Bill of Materials
- Finds
Ed25519::sign()on line 42 - Recommends ML-DSA-65
- Stops there
Tokenkeep PQC
Cross-layer constraint graph
- Follows that signature through Base64, DER and JWT framing, computed exactly per hop
- Into the
VARCHAR(512), the nginx header buffer, the session cookie and the mbedTLS record buffer - Reports demand vs. limit, the overflow in bytes, and whether any config change can fix it
Pick an algorithm. Watch the stack break.
Eight real-world limits, sized with the same encoding math the engine uses: Base64 and Base64url expansion, JWT framing, DER TLVs and TLS 1.3 certificate messages. Click any row to see the fix.
Modeled scenarios, not a scan of your code. JWT assumes 279 B of header and claims, carried in the cookie and in the request header. TLS assumes a 3-certificate chain with minimal X.509 metadata (measured with OpenSSL 3.6.1). Stack workspace is an engine estimate, since no FIPS standard defines stack use, plus a 4 KiB call chain. PostgreSQL B-tree tuple max is 2,704 B.
Check your own config, right here.
Paste an SQL migration, an nginx.conf, a linker script or another config the scanner reads. It's parsed by the engine's own parsers, compiled to WebAssembly, and runs entirely in your browser. Nothing is uploaded.
Hard ceilings
Protocol, platform or hardware limits. Raising a config value can't fix them, so runtime failure is imminent and the fix is architectural.
RFC 6265 cookies · TLS record buffer · PostgreSQL B-tree tuple · QUIC UDP payload · Lambda env · SQS batch · MCU linker stack
Soft limits
Configurable, and wrong until widened. Every finding includes the minimum safe value under the category's headroom policy.
SQL VARCHAR · nginx / Envoy header buffers · Protobuf / OpenAPI max_len · Kafka message.max.bytes · Fluent Bit · WireGuard MTU
From your code to every byte limit.
-
Parse
Files are routed by extension to dedicated extractors: tree-sitter for Rust, sqlparser for DDL, a state-machine lexer for nginx, and readers for YAML,
.proto, linker scripts, Kafka, TOML and C headers. Other languages come in through your existing CycloneDX CBOM. -
Link
Crypto sources connect to capacity sinks within the same project scope. A
signaturecolumn inservices/billingis never charged for a signer inservices/auth. -
Solve
Projected demand per sink, exactly: ⌈(Σ raw × Π enc + TLV + envelope) × outer⌉ × fan-out. Call-graph stack depth is a longest path on a CSR DAG.
-
Remediate
Each breach becomes a reviewed unified diff. Soft limits are widened at the literal's exact byte span. Hard ceilings get an architectural indirection, and the patched tree is re-scanned until it's clean.
Gate the merge, not the incident.
JSON findings on stdout, diagnostics on stderr, and exit codes that mean something: 0 clean, 3 soft limits only, 4 hard ceiling. Run it once per candidate algorithm to answer “if we standardize on SLH-DSA-128s, what breaks?”
# .github/workflows/pqc.yml
- name: PQC blast-radius gate
run: |
tokenkeep-pqc-scan --path . \
--target-algo ML-DSA-65 \
--cbom cbom.json \
--format json > pqc-findings.json
# exit 4 → a hard ceiling will fail at runtime
Diagnostic
tokenkeep-pqc-scan
Free
- Read-only CLI. The remediation engine isn't linked into the binary, so it can't write to your tree
- All 11 sink categories, across monorepo scopes
- Terminal report, JSON output and CI exit codes
- Bring your CBOM for Java, Go, Python, TypeScript and more
Remediation
Tokenkeep PQC Enterprise
Engagement
- Every finding turned into a reviewed unified diff, with units kept as written (
4K → 16K) - Hard-ceiling templates: hash-indexed signature columns, server-side sessions, secret-store references, AIA cert fetching, SQS batch resizing
- Closed-loop verification: apply, re-analyze, zero breaches, every file still parses
- A migration readout your security and infra leads can sign off on
Reference
Post-quantum sizes, by algorithm.
Every number this page uses, in tables you can cite: raw sizes from FIPS 203, 204 and 205, the same values encoded, and which common limits each one breaks.
Start here
Find out what breaks before your users do.
Planning a PQC migration, or running agents against production context? Tell us your stack. We'll show you the blast radius.
or email joseph@tokenkeep.io