Documentation · Markdown source · Edit on GitHub · CC0 1.0

ADR 0008: Key Lifecycle for Receipt Verifiability (K1–K6, Forward Specification)

Status: Proposed — forward specification. K1–K6 have been listed in spec/receipt-v1.md §10 since 2026-06-24; this record states the decisions as the standard's own. The v1 verifier is unchanged. Date: 2026-10-17

Related: ADR 0005 (the standard is the source of truth), ADR 0007 (receipt envelope; D3 transparency-log proof, D4 error registry), spec/v0.1.md §2 (key_custody) and §3 (JWKS), spec/transparency-log-v0.1.md, docs/security/KEY_ROTATION.md.

Context

A receipt is meant to remain verifiable long after it is issued — across routine key rotation — and a compromised key must not make forged receipts look authentic. A node may sign several layers (offer, transport, payment) with one key, so one compromise reaches all of them. The v1 receipt verifier checks signature and freshness only: it matches the JWS kid against the JWKS fetched at verification time, with no notion of retired or revoked keys.

The decisions for that lifecycle were recorded in the reference implementation's repository and cited here twice as "ADR 0011". Following ADR 0005, this record states them in the standard's own terms.

Decision

These rules are forward specification: a lifecycle-aware verifier implements them; the v1 verifier does not change.

K1–K6 apply to a node's key whoever holds it. Where key_custody is platform (v0.1 §2), the operator holding the key performs rotation and revocation, and the same metadata is published in the host domain's JWKS; a verifier applies the same rules either way.

Consequences

Not carried over from the implementation's record: its delivery phases, its acceptance checklist, its internal code paths and its own retention commitments. This ADR adds no runtime behavior and no new tools.