The Sectum AI evidence chain
Every Sectum AI run produces an evidence pack an auditor or DPO
accepts. The pack is tamper-evident: anyone with the OSS
sectum-ai verify can independently confirm that the pack
was produced at a stated time, against stated test conditions, and
has not been altered since.
Goals
-
Every run produces an
EvidencePackwith a stable schema, versioned for forward compatibility. -
The pack is tamper-evident: mutating any field breaks
verification with a specific
[FAIL]reason. - Verification is independent of Sectum AI — the verifier and its supporting code are Apache 2.0; no Sectum AI installation is required to check a pack the customer received.
- Findings carry control mappings (SOC 2 CC6.x, ISO 27001 A.8.x, GDPR Art. 17/32, EU AI Act Art. 15, NIST AI RMF MEASURE 2.7, OWASP LLM08:2025) so auditor walkthroughs map directly.
Construction
The pack is built deterministically. The steps:
- Canonicalize the run. The run record —
run_id,started_at,finished_at,scenario_hash,manifest_hash,adapter_versions,probe_versions, the list of findings — is serialized as canonical JSON: sorted keys, fixed numeric precision, no floats where avoidable. - Hash the canonical run. SHA-256 over the
canonical JSON yields the
run_digest. This is the single value the rest of the chain anchors to. - Timestamp the digest. The
run_digestis submitted to an RFC 3161 Time-Stamp Authority. The returned TSA token binds the digest to a public time. Development uses a free TSA; production deploys configure a pinned TSA (or the customer's preferred TSA, where the auditor wants control). - Record in a transparency log. The digest plus signature is recorded as a Sigstore Rekor transparency-log entry; the inclusion proof is stored in the pack. Keyless signing via OIDC is the default where available; the operator can also configure a private Rekor or a self-managed key.
- Wrap as in-toto attestation. The canonical run
goes into an in-toto Statement envelope (subject =
run_digest, predicate = the run + control mappings) so the artifact slots into existing supply-chain attestation tooling. - Render the audit PDF. A human-readable PDF covers the executive summary, scope, methodology, per-finding detail with mapped controls, and instructions for the recipient to verify the pack independently.
What ships in a pack
| File | Purpose |
|---|---|
evidence.json | Machine-readable, schema-versioned evidence record. Loaded by sectum-ai verify to validate the chain. |
audit-pack.pdf | Human-readable: executive summary, scope, methodology, per-finding evidence, control mappings, verification instructions. |
attestation.intoto.json | The in-toto Statement envelope binding the run digest to the predicate. |
| TSA token (in-band) | RFC 3161 timestamp token over the run digest. |
| Rekor inclusion proof (in-band) | Log index, inclusion proof, signed entry timestamp. Optional — on by default for Sectum Cloud, opt-in for OSS local runs. |
Independent verification
The verifier ships in the Apache 2.0 OSS. Anyone can run it:
pip install sectum-ai
sectum-ai verify evidence.json \
--tsa-cert tsa-cert.pem \
--tsa-root tsa-root.pem \
[--rekor-key rekor.pem]
Exit codes follow the rest of the CLI: 0 verified,
4 verification failed. A failure prints a
[FAIL] line that explains exactly which check broke
(e.g., run_digest mismatch, TSA signature invalid,
Rekor inclusion proof does not match).
Tamper-evidence in practice
The properties an auditor cares about:
-
Mutating any field in
evidence.jsonchanges therun_digest; the TSA-signed digest no longer matches;sectum-ai verifyexits with[FAIL] run_digest mismatch. -
Re-signing the digest with a different TSA breaks the
TSA-certificate-chain check;
sectum-ai verifyexits with[FAIL] tsa signature invalidor[FAIL] tsa certificate chain. - Forging a Rekor inclusion proof requires control of a Rekor key pinned in the verify call. Public Rekor proofs are validated against the publicly-published Sigstore root.
- The manifest hash in the evidence pack binds the test conditions to the run. Editing the manifest after the fact changes its hash; the pack's stored value no longer matches; verification fails.
The non-goal
Sectum AI verifies and attests. It does not remediate. Findings include remediation pointers — specific surface, specific marker count — but the change to the customer's stack belongs to the platform team. The evidence chain proves what was tested, what was found, and when. Fixing the findings is a separate motion.
Sample artifacts
Real sample evidence packs ship in the OSS repo:
docs/samples/.
Includes a sample evidence.json, audit-pack.pdf,
and attestation.intoto.json the buyer's auditor can
inspect before signing an engagement.