Skip to content

Hybrid PQC Certificates: Generation, Testing, and Compatibility

Pure PQC certs break legacy verifiers; hybrid designs carry classical + PQC material. This guide summarizes composite, catalyst, and chameleon styles, tooling, and what ships in production today—with algorithm background in NIST PQC algorithms.

Hybrid PQC Certificates: Generation, Testing, and Compatibility

Section titled “Hybrid PQC Certificates: Generation, Testing, and Compatibility”

TL;DR: Production now: hybrid TLS 1.3 key exchange (X25519MLKEM768) + classical ECDSA certificates. Lab now: ML-DSA and oqs-provider composite signatures. Not production-default yet: composite/catalyst certificates in browsers—standards and client support still catching up.

Executives: Don’t fund “PQC TLS” that only swaps certs—session protection starts with KEM; auth evolution follows client ecosystems.

Security: Hybrid KEM addresses harvest-now-decrypt-later without waiting for PQC signature ubiquity.

Engineers: Certificate bloat breaks assumptions; test CDNs, WAFs, and CI with multi-kilobyte chains.

  • Pure ML-DSA leafs fail on clients that don’t know the OID.
  • Terminology collision: “hybrid” means KEM, composite sig, or catalyst extensions depending on author.
  • Tooling split: OpenSSL 3.5 native vs oqs-provider vs Bouncy Castle for full format coverage.
  • Standards: Composite I-Ds ≠ universal RFC yet—plan for churn.
  • Downgrade story: Catalyst designs may let legacy clients validate classical only—understand the threat model.

Pure ML-DSA is structurally valid X.509 but unrecognized on many stacks → hard failure. Hybrid certificates aim to carry both classical and PQC so updated verifiers use both and legacy verifiers use classical—different designs achieve this differently.

Separate concern: Hybrid key exchange (e.g. X25519MLKEM768) is standardized and deployable now; it does not replace the need to plan PQC signatures later.

Summarized vs PKI Consortium PQC matrix (pqccm).

Single cert; composite public key and composite signature OIDs embed both classical and PQC. Pros: clear semantics, standard ASN.1 shape. Cons: verifiers that don’t know the composite OID reject the whole cert—no classical-only fallback inside the same fields.

Hybrid (catalyst / alternative) certificates

Section titled “Hybrid (catalyst / alternative) certificates”

ITU-T X.509 alternative extensions: classical “primary” cert; PQC in extensions PQC-aware clients understand. Pros: legacy may ignore unknown extensions and still validate classical. Cons: parsing complexity; downgrade to classical-only if attacker can forge classical (by design in transition).

Classical “outer” + embedded inner PQC cert in an extension—strong transition story, ~2× size.

Pure ML-DSA (and KEM) for lab certs and TLS with PQC signatures on stacks that support them—not native composite catalyst generation.

Terminal window
openssl genpkey -algorithm ML-DSA-65 -out server_key.pem
openssl req -x509 -new -key server_key.pem \
-out server_cert.pem -days 365 \
-subj "/CN=pqc-lab.example.com"
openssl x509 -in server_cert.pem -text -noout | head -20

oqs-provider (composite-style signature algorithms)

Section titled “oqs-provider (composite-style signature algorithms)”

Hybrids like p384_mldsa65 combine classical + ML-DSA under one provider algorithm name.

Terminal window
openssl genpkey -algorithm p384_mldsa65 \
-provider oqsprovider -out hybrid_key.pem
openssl req -x509 -new -key hybrid_key.pem \
-provider oqsprovider \
-out hybrid_cert.pem -days 365 \
-subj "/CN=hybrid-lab.example.com"
openssl x509 -in hybrid_cert.pem -text -noout -provider oqsprovider

Examples: p256_mldsa44, rsa3072_mldsa44, p384_mldsa65, p521_mldsa87. Catalyst/chameleon: use Bouncy Castle PoCs / tools for full format coverage.

Cross-vendor artifacts and matrices: IETF-Hackathon/pqc-certificates.

Terminal window
openssl genpkey -algorithm ML-DSA-65 -out ca_key.pem
openssl req -x509 -new -key ca_key.pem -out ca_cert.pem -days 3650 \
-subj "/CN=PQC Test CA/O=Lab"
openssl genpkey -algorithm ML-DSA-65 -out server_key.pem
openssl req -new -key server_key.pem -out server_csr.pem \
-subj "/CN=pqc-lab.example.com"
openssl x509 -req -in server_csr.pem -CA ca_cert.pem -CAkey ca_key.pem \
-CAcreateserial -out server_cert.pem -days 365
openssl s_server -cert server_cert.pem -key server_key.pem \
-tls1_3 -groups X25519MLKEM768 -accept 4433
openssl s_client -connect localhost:4433 -tls1_3 \
-groups X25519MLKEM768 -CAfile ca_cert.pem -brief

Confirm group X25519MLKEM768 and expected signature algorithm in output.

Terminal window
wc -c classical_cert.pem pqc_cert.pem hybrid_cert.pem
openssl x509 -in classical_cert.pem -outform DER -o classical.der
# compare DER sizes; full chain byte count for realistic handshake modeling

Rule of thumb (order of magnitude): ECDSA P-256 leaf ~0.5–0.8 KiB DER; ML-DSA-65 leaf ~5–6 KiB; composite P-384 + ML-DSA-65 ~6–7 KiB; three-cert ML-DSA chains often ~15–20 KiB vs classical ~2–3 KiB.

Requires nginx built against OpenSSL 3.5+ with appropriate directives; example pattern:

ssl_conf_command Groups X25519MLKEM768;
# ssl_conf_command SignatureAlgorithms ML-DSA-65; # if using ML-DSA certs
CapabilityMaturity
X25519MLKEM768Production in major browsers / OpenSSL 3.5
Pure ML-DSA server certsLab / limited production verifier support
Composite certs (oqs-provider / BC)Generation & internal testing; not universal browser TLS auth
Catalyst extensionsMostly research / BC—limited mainstream TLS
  1. Deploy now: Hybrid KEM + classical certs.
  2. Test now: ML-DSA and composite pipelines, monitoring, and size limits.
  3. Track: IETF composite drafts + browser PQC signature roadmaps.
  • Benchmark handshake size end-to-end (edge, mobile, API gateway)
  • Inventory tools that parse or inspect certs—upgrade if size/OID limits exist
  • OpenSSL + provider versions pinned in runbooks
  • Lab matrix aligned with IETF Hackathon artifacts for regression tests