4.7 KiB
4.7 KiB
Portable Audit Pack Contract (v1 Draft)
Purpose
Define a deterministic, offline-verifiable portable audit pack contract that unifies Stella Ops evidence export semantics across Attestor, EvidenceLocker, AuditPack, and CLI verification flows.
Contract status
- Status: Draft for implementation.
- Source sprint:
docs-archived/implplan/2026-02-10-completed-sprints/SPRINT_20260210_003_DOCS_portable_audit_pack_translation.md - Canonical schema:
docs/modules/evidence-locker/schemas/portable-audit-pack-manifest.v1.schema.json
Companion profile documents
- Compatibility mapping:
docs/modules/evidence-locker/portable-audit-pack-compatibility.md - Determinism profile:
docs/modules/evidence-locker/portable-audit-pack-determinism.md - Rekor offline verification profile:
docs/modules/evidence-locker/portable-audit-pack-rekor-offline.md - CLI runbook (target behavior):
docs/modules/evidence-locker/portable-audit-pack-cli-runbook.md - Optional Parquet profile:
docs/modules/evidence-locker/portable-audit-pack-parquet-profile.md - Verification test matrix:
docs/modules/evidence-locker/portable-audit-pack-test-matrix.md
Target bundle profile
Required artifacts
manifest.json(JCS canonical JSON)manifest.sig(DSSE envelope over canonical manifest, detached file)canonical_bom.json(canonicalized BOM snapshot)dsse_envelope.json(attestation envelope bound to BOM/subject)rekor/proof material:- checkpoint note/signature
- inclusion proof data
- tile bundle reference material (
tile.taror equivalent deterministic bundle)
Optional artifacts
merged_vex.json(canonical merged VEX view)components.parquet(optional analytics profile)checksums.txt/ replay helper assets for operational workflows
Manifest contract (portable profile)
Core fields
spec_versioncreated_utcartifact(name,version,digest,media_type)filesmap with per-file:sha256sizecontent_type- profile-specific metadata (for example
compression,schema_fingerprint)
digests:canonical_bom_sha256dsse_payload_digest
rekor:log_idapi_versiontile_refsroot_hash
timestampsverifiers(key references and trust metadata)
Schema note:
- Required field set and allowed optional fields are frozen in
portable-audit-pack-manifest.v1.schema.json.
Determinism rules
- JSON canonicalization MUST use RFC 8785/JCS-compatible canonical output.
- Manifest signing input MUST be the canonical bytes of
manifest.json. - File inventory MUST be sorted lexicographically by canonical path.
- Archive metadata MUST be deterministic (mtime, uid/gid, mode, ordering).
- Digests MUST be lowercase SHA-256 hex unless profile explicitly states otherwise.
Verification contract
- Verify
manifest.sigagainst canonicalmanifest.json. - Verify every file digest/size in
manifest.files. - Verify DSSE envelope signature(s) and payload digest binding.
- Verify Rekor inclusion proof against checkpoint root using bundled proof/tile data.
- Verify artifact/BOM subject digest consistency.
- If
components.parquetis present, validate schema fingerprint metadata.
Default policy is fail-closed for missing or invalid required verification inputs.
Current state vs target (gap summary)
- Implemented:
- Detached
manifest.sigsupport in audit bundle paths. - Rekor offline proof verification primitives.
- EvidenceLocker fields for canonical BOM/payload digest and Rekor refs.
- Detached
- Gaps:
- No single unified portable manifest schema with full required field set.
- Non-uniform canonicalization implementations across pack writers.
- Determinism not fully enforced across all packaging flows.
- Optional Parquet profile not defined in portable pack contract.
Ownership map
Attestor: DSSE/Rekor proof verification contract and tile/checkpoint binding.EvidenceLocker: persistence/export schema and portable bundle profile publication.StellaOps.AuditPack: deterministic pack write/read/sign/verify implementation.CLI: pack generation and offline verification UX parity.QA: deterministic fixtures, tamper matrix, replay verification.
Implementation notes
- Keep compatibility mapping for legacy bundle manifests; do not silently reinterpret fields.
- Keep offline posture: no mandatory network calls in verification.
- Prefer shared canonicalization libraries over local ad hoc JSON serializers.
References
docs/modules/attestor/repro-bundle-profile.mddocs/modules/attestor/transparency.mddocs/modules/evidence-locker/export-format.mddocs/modules/evidence-locker/schemas/audit-bundle-index.schema.jsondocs/modules/evidence-locker/schemas/stellaops-evidence-pack.v1.schema.json