+| R21 | **Answered 2026-09-24 for the receipt field set, which was the open half.** Slice 024 proposed the `signed_payload` field set for review and built "the default until cleared"; nothing cleared it until now, and slice 120's AC3 could not be met while that was true. Two questions, both now answered from published standards rather than from instinct. **Does the field set reproduce a third party's protected mechanism?** No, because it contains no mechanism anyone owns: `prev_hash` with `seq` is a forward-integrity hash chain (Bellare and Yee 1997; Schneier and Kelsey 1998), `key_id` is COSE `kid`, `scheme` occupies COSE `alg`'s role, `at` is RFC 3339, `subject` is in-toto's Statement subject, `chain_scope` is Certificate Transparency's per-log scoping, `fingerprint` is an RFC 8785 canonical-digest commitment and `decision` is XACML's PDP outcome. IETF **RFC 9943** (Standards Track, June 2026) standardises this whole object class as COSE_Sign1 Signed Statements and Receipts, which settles it: an open standard for the thing means the mechanism is nobody's to protect. **May policy identifiers enter `signed_payload`?** No, and the existing placement in unsigned `meta` is confirmed rather than merely tolerated. SLSA's attestation model separates `externalParameters` (untrusted, MUST be included and verified downstream) from `internalParameters` (platform-set, trusted, OPTIONAL, not verified downstream); a policy identifier is the second kind. Field-tier minimisation (arXiv 2608.25474) gives the governing property: the ledger commits to a canonical digest of the full parameters computed *before* minimisation, so "reclassifying a field changes what is disclosed without invalidating a historical entry, reopening a hash, or altering what an offline verifier checks" - Trinity already holds that commitment as the fingerprint, and moving policy identifiers into the signed bytes would convert a revisable disclosure decision into an immutable one for no gain, since a downstream verifier cannot evaluate Trinity's policy anyway and `decision.basis` already names the layer that decided inside the signed bytes. The original hazard also holds: if policy identifiers ever come from the external authority plane, embedding another party's namespace in immutable signed bytes is exactly what this row warns about, and in `meta` a namespace change is a metadata change rather than a scheme bump. **The rule, so this is not re-litigated:** the signed payload carries the commitment and the decision facts; anything platform-set, revisable or another party's namespace goes in `meta`. The row above stands for everything other than the receipt field set | Low (was Med: the named open question is closed) | High | The lift condition slice 024 named, met | docs/06-risk-register.md R21; slice 120 AC3 | 024, 120 |
0 commit comments