Skip to content

Lab-02: Full PQC Chain

Key Message: End-to-end PQC chain = same architecture, quantum-safe. The hierarchy doesn’t change — only the algorithms.


“I’m ready to go fully quantum-safe. How do I build a complete PQC PKI from root to end-entity?”

This demo shows a production-ready 3-level PKI hierarchy using only post-quantum algorithms. No classical cryptography anywhere in the chain.

For legacy client compatibility, see Lab-03: Hybrid.

┌─────────────────────────────────────────────────────────────────┐
│ │
│ ROOT CA │
│ ════════ │
│ ML-DSA-87 │
│ (maximum security, 256 bits) │
│ │ │
│ │ Signs │
│ ▼ │
│ ISSUING CA │
│ ══════════ │
│ ML-DSA-65 │
│ (daily operations) │
│ │ │
│ │ Signs │
│ ▼ │
│ TLS CERTIFICATE │
│ ═══════════════ │
│ ML-DSA-65 │
│ server.example.com │
│ │
└─────────────────────────────────────────────────────────────────┘

  1. Create a Root CA (ML-DSA-87 - highest security)
  2. Create an Issuing CA signed by the Root (ML-DSA-65)
  3. Generate a server key and CSR
  4. Issue a TLS server certificate
  5. Examine the complete chain

Terminal window
./journey/02-full-chain/demo.sh

Terminal window
# Initialize the root CA with highest security level
qpki ca init --profile profiles/pqc-root-ca.yaml \
--var cn="PQC Root CA" \
--ca-dir output/pqc-root-ca
qpki inspect output/pqc-root-ca/ca.crt
Terminal window
# Create issuing CA signed by root
qpki ca init --profile profiles/pqc-issuing-ca.yaml \
--var cn="PQC Issuing CA" \
--parent output/pqc-root-ca \
--ca-dir output/pqc-issuing-ca
qpki inspect output/pqc-issuing-ca/ca.crt
Terminal window
# Generate ML-DSA-65 key and CSR
qpki csr gen --algorithm ml-dsa-65 \
--keyout output/server.key \
--cn server.example.com \
--out output/server.csr
Terminal window
# Issue end-entity certificate from CSR
qpki cert issue --ca-dir output/pqc-issuing-ca \
--profile profiles/pqc-tls-server.yaml \
--csr output/server.csr \
--out output/server.crt
qpki inspect output/server.crt

Tip: For detailed ASN.1 output, use openssl x509 -in <cert> -text -noout


CertificateClassical (ECDSA)Full PQCRatio
Root CA~1 KB~7 KB~7x
Issuing CA~1 KB~6 KB~6x
TLS Server~1 KB~6 KB~6x
Full chain~3 KB~19 KB~6x

Approximate sizes. The trade-off: larger certificates for quantum resistance.

Bandwidth impact is usually negligible compared to application payloads.


Use CaseRecommended AlgorithmWhy
Root CAML-DSA-87Maximum security, long-lived
Issuing CAML-DSA-65Balance security/performance
TLS ServerML-DSA-65Server authentication
TLS ClientML-DSA-44Constrained devices OK
Code SigningML-DSA-65Long-lived signatures

SLH-DSA (hash-based signatures) is a conservative alternative:

AlgorithmProsCons
ML-DSASmall keys, fast verifyNewer, lattice-based
SLH-DSAWell-understood mathLarge signatures (~17-49 KB)

Use SLH-DSA when:

  • Maximum cryptographic conservatism is required
  • Signature size is not a constraint
  • You want hash-based (no lattice assumptions)

ScenarioRecommendation
New internal PKIFull PQC - Start quantum-safe
Public-facing serversHybrid (Lab-03) - Legacy client support
Government/MilitaryFull PQC - Regulatory requirements
IoT (long-lived)Full PQC - Future-proof devices
Short-lived tokensClassical OK - Low SNDL risk

  1. Same workflow: Creating a PQC hierarchy uses identical PKI concepts
  2. Algorithm stacking: Root uses highest level, decreasing down the chain
  3. Size trade-off: ~6x larger certificates for quantum resistance


The Revelation | QLAB Home | Next: Hybrid →