Q-Shield report signing keys

Published 2026-10-08. Updated 2026-11-03: both keys were replaced, and new reports are signed with ML-DSA-87.

A Q-Shield proof report is signed with two keys at once, Ed25519 and ML-DSA (the post-quantum signature standard, FIPS 204). Reports signed from 2026-11-03 use a new Ed25519 key and ML-DSA-87, the level CNSA 2.0 requires; reports signed before then use the older Ed25519 key and ML-DSA-65. A report is valid only if both signatures verify against the keys on this page. A key carried inside a report is never trusted.

The keys

AlgorithmKey idPublic key (base64)
Ed25519D72A8F9C5DE25146pDNdgd59DFjKiy4GIjzl++RUDCI4xqLwfSMvvgRJ0us=
ML-DSA-8711055C6262215FABToo long to print here: it is in the file below, 2,592 bytes.

Reports signed before 2026-11-03 use these keys, which stay published so those reports keep verifying:

AlgorithmKey idPublic key (base64)
Ed25519D4B93458E36D1F69UJ8LwXQUt4jnqA4pjQcaFN4vaAXPecUxoJpgrcX3mLQ=
ML-DSA-65604DF4F5974F5A6BToo long to print here: it is in the file below, 1,952 bytes.

The file

All four public keys, in the format the verifier reads: https://epochcoreqcs.com/qshield-keys/KEYS.json

SHA-256 of that file: a06cb5aba7150c315caa62b39fec15bc7f72a67534aa32985b1fd68eec75f1f7

What a valid signature shows

That the report body has not changed since it was signed with the private keys that belong to these public keys. It is evidence for an auditor, not a certification, and it covers only the hosts listed in the report.

Checking a report

Each PDF report prints the OpenSSL commands (OpenSSL 3.5 or newer) and the files they need, so a report can be checked without any EpochCore software. Work out each key's id from the key file the check used (the first 16 characters, in capitals, of the SHA-256 of the raw public key) and compare it with the ids above. Don't rely on the ids printed in the report itself.

Collector releases

The Q-Shield collector that design partners run themselves is signed with the same two keys. Its Download page shows the signed release (version, SHA-256 of the file, source commit and image ID) and the OpenSSL steps to check the file and both signatures. Check the key ids the same way.