PQC Hybrid (Bare Post-Quantum Algorithm Without a Classical Partner)
ID |
kotlin.pqc_hybrid |
Severity |
info |
Remediation Complexity |
medium |
Remediation Risk |
low |
Remediation Effort |
medium |
Resource |
Cryptography |
Language |
Kotlin |
Tags |
ASVS50:v11.2.1, ASVS50:v11.6.1, CWE:327, NIST.IR.8547, OWASP:2025:A04, crypto, pqc, quantum |
Description
Flags a bare (pure) post-quantum key-establishment or signature primitive — for example ML-KEM or
ML-DSA used on its own — where post-quantum transition guidance recommends a hybrid construction
that combines the PQC scheme with a classical one. This is the hybrid-transition axis of
post-quantum readiness, separate from pqc_readiness (classical public-key that must migrate) and
pqc_weak_keylength (symmetric/hash sizing).
Rationale
Post-quantum algorithms are young; confidence in their long-term security is still maturing. To hedge that risk during the migration period, national standards bodies — notably Germany’s BSI (TR-02102) and France’s ANSSI — recommend deploying PQC key establishment and signatures in a hybrid construction: the shared secret (or signature assurance) is derived from both a classical algorithm (e.g. X25519, ECDSA) and a PQC algorithm (e.g. ML-KEM, ML-DSA), so a future break in either component alone does not compromise the protection.
A finding is emitted only for a bare PQC primitive; an algorithm that is already a hybrid
construction (e.g. X25519MLKEM768) is compliant and is not flagged. Because the underlying
algorithm is already quantum-safe, this is an advisory, policy-gated signal: regions whose policy
mandates pure PQC rather than hybrid (e.g. NSA CNSA 2.0) disable it with requireHybrid: false.
In Kotlin (running on JDK 24+ which exposes ML-KEM / ML-DSA through the JCA), a bare PQC key-pair generator is flagged under hybrid-transition guidance, while a hybrid construction is the recommended target:
KeyPairGenerator.getInstance("ML-KEM") // bare PQC KEM — recommend a hybrid (X25519+ML-KEM-768)
KeyPairGenerator.getInstance("ML-DSA") // bare PQC signature — recommend a hybrid signature
Remediation
Where transition guidance applies, replace the bare PQC primitive with a hybrid construction that
combines it with a classical algorithm — for key establishment, a hybrid KEM such as
X25519+ML-KEM-768; for signatures, a classical (EdDSA/ECDSA) + ML-DSA dual signature. Where policy
instead mandates pure PQC, set requireHybrid: false to disable this rule.
References
-
CWE-327 : Use of a Broken or Risky Cryptographic Algorithm.
-
BSI TR-02102-1 : Cryptographic Mechanisms.
-
ANSSI : Position Paper on Post-Quantum Cryptography.
-
NIST IR 8547 : Transition to Post-Quantum Cryptography Standards.