Keys
- Rotation, revocation and expiryverified
- Three signing-key domains kept apartverified
- Private keys encrypted at restverified
- KMS and HSM custody (adapters tested against mocks and emulators)partly verified
SOC 2AICPA Trust Services CriteriaHow the trust is split, what is addressed, what is not, and how to report a weakness.
Trust model
Artifact keys sign consent artifacts, log keys sign the transparency log's roots and receipts, and checkpoint keys sign audit checkpoints. They are separate files, so forging one kind of evidence does not forge another.
A verifier is independent only if its keys come from somewhere other than the instance it checks.
/.well-known/qodiqa/keys/.well-known/qodiqa/transparency-keys /.well-known/qodiqa/checkpoint-keysThreat model
Only what the specification and the repositories address. Anything not shipped is under Limits.
How qodiqa responds. Every execution call needs an artifact signed with a gateway Ed25519 key. The signature, the required fields, the 60-second age limit and the binding to the exact method, path and body are checked before any provider is called.
What stays with you. Who is issued a signing key, and the consent records behind it.
Protocol, artifact verificationHow qodiqa responds. An artifact works once: its nonce is registered atomically in Redis and a second use answers REPLAY_DETECTED. It also expires after 60 seconds at most.
What stays with you. Operating Redis, which replay protection depends on.
Protocol, replay protectionHow qodiqa responds. Each audit entry hashes the one before it, and decisions become leaves in a signed Merkle log. A verifier that imports nothing from the gateway rejects a changed field.
What stays with you. Taking the verification keys from outside the instance.
Verifier test vectorsHow qodiqa responds. The audit chain is unkeyed, so an operator can rewrite it unless checkpoints are anchored outside the gateway. Opt-in anchors commit each checkpoint to a repository others can clone.
What stays with you. Turning anchoring on, and a witness you do not control.
Audit anchoringHow qodiqa responds. Provider output is untrusted: it passes the output checks, and the decision is recorded before the answer is released. If the record cannot be written, the answer is withheld.
What stays with you. What an answer means; output inspection is best effort.
Enforcement flowHow qodiqa responds. Keys live in three separate domains, rotate and revoke with a recorded lifecycle, and are encrypted at rest. A revoked key stops verifying at once.
What stays with you. The key-encryption key and your rotation schedule.
Key managementKeys and evidence
Statuses are those of the capability matrix on the frameworks pages, quoted as written there.
Verify it yourself
Run them from clones of the public repositories; the first clone is in Quickstart, step 4.
npm testThe vector checkers, the recorded sessions and the tamper self-tests all print PASS, then all checks passed.
node bin/qodiqa-proof-verify.js --proof examples/proof/proof.tampered.example.json
# exit 1 = INVALIDA verdict of INVALID: one audit-entry field was changed.
git clone https://github.com/qodiqa/qodiqa-anchors.git && cd qodiqa-anchors && npm testA line structure check passed with the number of anchors and files.
Scope and limits
Release 1.0.0 is the only release so far; fixes go to the default branch and ship in the next release. Framework mappings live on the frameworks pages.
Report a vulnerability
Please do not open a public issue for a security problem.
Use Report a vulnerability under the repository's Security tab. Preferred.
Open the Security tabFor reports that cannot go through GitHub.
security@qodiqa.comWhat you found, how to reproduce it, the version or commit, and the impact you expect.
A small team: these windows are targets, not guarantees.
What a report can cover, and what it cannot.