The pqc platform provides:
MLDSA44MLDSA65MLDSA87- mono ML-DSA key generation and signing
- threshold ML-DSA DKG
- threshold ML-DSA signing
- trusted-dealer import
- quorum promotion
Build example:
./gradlew shadowJar -Pkeeper.platforms=pqc
Authority model
ML-DSA changes the signature algorithm, not the authority model.
The same identity rules apply:
- attach authorities to the key identity
- materialize the command into an understood intent
- evaluate policy
- produce proof only after approval
Use MLDSA as the signature scheme for ML-DSA algorithms.
Signing availability
Threshold ML-DSA signing can abort during rejection sampling even when peers are healthy. TKeeper retries with fresh session state up to:
keeper.session.mldsa.max-rounds
The default is 12.
If the cap is exhausted, TKeeper returns:
SESSION_MAX_ROUNDS_EXCEEDED
Treat this as an availability outcome first. It is not automatic evidence that a peer is corrupt.
Latency planning
Increasing keeper.session.mldsa.max-rounds increases the chance of success but also increases worst-case latency and resource use.
For production:
- keep the cap bounded
- set end-to-end request deadlines
- monitor retry counts and latency
- alert on repeated exhaustion
Refresh and rotate
ML-DSA refresh advances the generation while carrying each peer's existing share and public key forward unchanged. It does not replace shares or refresh cryptographic material.
Use rotate or a new DKG when new ML-DSA material is required.
Import and promotion
Trusted-dealer import and quorum promotion must store the aggregate ML-DSA public key as platform side state. Without that side state, later public-key checks and threshold protocols cannot prove the same key identity state.