Skip to content

Group trust metadata by contributor and generalize signatures - #117

Draft
jonathanhefner wants to merge 6 commits into
Agent-Card:mainfrom
jonathanhefner:agent/identity-keyed-trust-manifests
Draft

jonathanhefner wants to merge 6 commits into
Agent-Card:mainfrom
jonathanhefner:agent/identity-keyed-trust-manifests

Conversation

@jonathanhefner

@jonathanhefner jonathanhefner commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

This draft is based on top of #108, #109, and #110, which have all been approved. It will be rebased onto main once those PRs are merged. Until then, the last commit in this PR contains the relevant changes -- preceding commits belong to the prerequisite PRs.


Summary

Allow publishers, assessors, and federated registries to contribute trust metadata about the same artifact, with independent signatures over the fields each endorses.

Area Current design Proposed design
Trust metadata One entry.trustManifest entry.trustManifests[identity], each retaining its attestation and provenance arrays
Signatures Entry signature covers the whole Trust Manifest; separate root signature Separate signatures arrays on entries and the catalog root, selecting fields through arrays of keys
Artifact binding Release fields repeated in entry.trustManifest.subject Sign the entry’s release fields and entry.digest directly
Policy URLs Inside the signed Trust Manifest Shared entry fields; signing coverage follows the selected paths

Motivation

  • Independent contributions. A publisher can sign its source provenance while an assessor signs its audit evidence for the same release. If each selects its own Trust Manifest and the shared release fields, the assessor can update its evidence without invalidating the publisher’s signature. A registry can add its own contribution alongside both.
  • Flexible coverage. Signers can endorse entry extensions or other relevant fields. Catalog operators can sign Host Info through root signatures or endorse the complete catalog snapshot.
  • Reuse existing standards. Detached JWS and JCS authenticate selected paths, values, and timestamps. The existing did:web rules authenticate independent contributors while preserving the additional checks for publisher authority.

Rationale

ADR-0028 explains the construction and tradeoffs.

The schema, guides, mappings, examples, and threat model are updated together.

Notes

  • Dependencies: #108, #109, and #110.
  • Validation: Specification and strict documentation builds, example checks, and local signing tests.

Limit `TrustManifest` to Catalog Entries and remove `host.trustManifest`
from the normative prose, CDDL, data model, conformance rules,
verification guidance, and authoring guides.

A nested Host signature has no defined artifact subject, does not
approve the surrounding catalog, and lacks a demonstrated Host-specific
claim workflow. Record that rationale in ADR-0026 and leave operator
authentication as a residual risk for the separate catalog-signature
profile.
Require every `Subject` to identify the artifact it describes, and require signed entry manifests to bind any catalog version they rely on. Verify those signed release coordinates against the containing entry so valid artifact bytes and trust claims cannot be transplanted or relabeled as another release.

Record the design rationale in ADR-0025, extend the threat model, and align the normative prose, CDDL, examples, xRegistry mapping, and author guidance. Clarify that catalog-level integrity remains complementary to publisher-signed release binding.

Signed-off-by: Jonathan Hefner <jonathan@hefner.pro>
Narrow `TrustManifest.identity` to the issuer of the manifest claims,
leaving artifact identity to the signed `subject` and runtime identity
to protocol-specific profiles.

Define one interoperable `urn:air` and root `did:web` verification
profile with explicit namespace authorization, detached JWS
construction, DID key selection, ES256 requirements, current-state
lifecycle semantics, and fail-closed Level 3 behavior. Keep the common
JWS envelope extensible so separately defined profiles can supply
different key-selection rules.

Remove the misleading generic SPIFFE, HTTPS, and DNS resolution
procedure, record the design in ADR-0027, and align the guidance,
examples, threat model, and earlier ADR history with the narrower issuer
model.
Combine upstream PRs Agent-Card#108, Agent-Card#109, and Agent-Card#110 as a temporary review base.
Resolve the overlapping host-removal and did:web documentation edits by
preserving entry issuer verification and removing Host Trust Manifests.
Allow publishers, assessors, and registries to contribute independently
to the same entry. Identity-keyed Trust Manifests hold their claims,
while entry and catalog signatures select the fields each signer
endorses.

Use detached JWS over canonical paths, values, context, and timestamps.
Bind claims to shared entry release coordinates and digest without a
duplicated subject. Reuse did:web key verification while distinguishing
contributor attribution, publisher authority, and complete catalog
snapshot coverage.

Update the schema, examples, guides, distribution mappings, and threat
model together while retaining existing transport signing delegation.
Expose the claimed signer as a required identity URI so consumers can
inspect endorsements without profile-specific extraction from JWS
headers. Keep signature arrays to support several endorsements from the
same identity.

Bind the exact signer value into the canonical payload. Require the
did:web key reference to match that identity and retain DID document,
controller, and assertion-key authorization checks. Update the proposed
ADR, schema, guide, examples, and threat model consistently.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant