Post-Quantum Cryptography: Add ML-DSA signing support for OIDC tokens
France's ANSSI will stop certifying non-PQC products from 2027. The US Executive Order 14409 mandates PQC for all federal systems, with key establishment by 2030 and digital signatures by 2031. Australia's ASD/ACSC has published post-quantum vendor guidance urging organizations to assess PQC readiness across their supply chain.
Context
Dex is the OIDC identity provider used widely across the Kubernetes ecosystem. Its token signing is currently limited to RS256 and ES256:
server/signer/rotation.gorotationStrategyForAlgorithm()has a closed switch that only accepts RS256 and ES256, returning "unsupported" for anything elseserver/discovery.gohardcodesIDTokenAlgs: []string{"RS256"}in the OIDC discovery endpoint- The
Signerinterface returns a singularAlgorithm(), making multi-algorithm JWKS an architecture consideration
This means Dex cannot sign OIDC tokens with post-quantum algorithms even when the underlying Go runtime supports them. Every Kubernetes cluster using Dex for authentication has quantum-vulnerable identity tokens.
Proposal
- Extend algorithm support: Add ML-DSA-44, ML-DSA-65, ML-DSA-87 to the
rotationStrategyForAlgorithm()switch per RFC 9964 algorithm identifiers - Discovery endpoint: Include ML-DSA algorithms in
id_token_signing_alg_values_supportedwhen configured - Key rotation: Extend the key rotation strategy to handle ML-DSA key pairs
- PQC TLS: Verify that Dex's TLS server does not override Go's default CurvePreferences (which includes X25519MLKEM768 since Go 1.24)
Go 1.27 will ship crypto/mldsa in stdlib. Until then, filippo.io/mldsa provides a bridge.
References
Source: dexidp/dex