Skip to content

Carry the bound agent identity (manifest_id, agent_id) in the Trust Record (cMCP #302) #33

@carloshvp

Description

@carloshvp

Spec section

Section 3.1 (Trust Record logical schema) and 3.3 (Verification); schema/trace-claim.json; TrustRecord in src/agentrust_trace/models.py.

Problem

The Trust Record subject is the gateway session SPIFFE URI (for example spiffe://cmcp.gateway/session/). It carries no agent identity, so verification proves that a session ran an approved policy and catalog, but not that the agent the operator reviewed (the signed Agent Manifest agent_id) is the agent that acted. cMCP issue agentrust-io/cmcp#302 (Option A, confirmed) binds the manifest to the session at the gateway. For that binding to be verifiable offline (the Option B defense-in-depth cross-check), the bound identity has to travel in the Trust Record.

Proposed change

Add an optional agent-identity block, distinct from subject (which stays the gateway session):

"agent": {
  "agent_id": "spiffe://factory.example/agent/material-movement/dev",
  "manifest_id": "0197739a-8c00-7000-8000-000000000001",
  "binding": "svid-matched"
}
  • All fields optional; records without the block remain valid (backward compatible). subject is unchanged.
  • A verifier holding the offline manifest can then cross-check: agent.agent_id == manifest.agent_id, agent.manifest_id == manifest.manifest_id, and the manifest bound policy/catalog hashes == record.policy.* . That is the Option B self-checking layer.
  • Spec: new subsection under 3.1 for the agent block, and under 3.3 for the cross-check. Schema: add the optional agent object. Model: add an optional agent field to TrustRecord.

Impact

  • Backward compatible: yes (optional fields, existing records validate unchanged).
  • Affects conformance level(s): Level 1+ (identity binding).
  • Conformance tests that need updating: add present/absent agent-block cases; existing tests unaffected.
  • Regulatory mapping impact: supports identity and accountability traceability (informational).

Alternatives considered

  • Overload subject to carry the agent identity: rejected, subject is the gateway session and conflating them loses the very distinction the binding must prove.
  • Keep agent identity only in the cMCP audit chain, not the Trust Record: rejected, the Trust Record is the portable evidence a third party verifies offline, so the binding must travel with it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions