<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="urn:ietf:params:xml:ns:rfc2629" type="application/xml"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     ipr="trust200902"
     docName="draft-emirdag-scitt-ai-agent-execution-00"
     category="info"
     submissionType="IETF"
     
     version="3">

  <front>
    <title abbrev="SCITT AI Agent Execution">AI Agent Execution Profile of SCITT</title>
    <seriesInfo name="Internet-Draft" value="draft-emirdag-scitt-ai-agent-execution-00"/>
    <author initials="P." surname="Emirdag" fullname="Pinar Emirdag">
      <organization>VERIDIC Inc.</organization>
      <address>
        <email>e.pinar@theveridic.ai</email>
        <uri>https://theveridic.ai</uri>
      </address>
    </author>
    <date year="2026" month="April" day="13"/>
    <area>Security</area>

    <abstract>
      <t>This document defines a SCITT (Supply Chain Integrity, Transparency,
      and Trust) profile for creating independently verifiable,
      tamper-evident records of autonomous AI agent actions. The profile defines the AgentInteractionRecord (AIR)
      as the COSE_Sign1 signed statement payload for material agent
      actions; maps SCITT roles to the agent execution context, with the
      Agent Operator as Issuer and an independent Evidence Custodian as
      Transparency Service; specifies Registration Policy requirements
      including hash chain integrity, temporal ordering, and sequence
      completeness; defines a redaction receipt mechanism for
      privacy-preserving evidence custody; and provides compliance
      mappings to EU AI Act Articles 12 and 19, DORA, NIST AI RMF,
      MAS AI Risk Management Guidelines, PCI DSS v4.0, and MiFID II.</t>
    </abstract>

    <note removeInRFC="true">
      <name>About This Document</name>
      <t>Discussion of this document takes place on the SCITT Working Group
      mailing list (scitt@ietf.org).</t>
    </note>
  </front>

  <middle>
    <section anchor="introduction">
      <name>Introduction</name>

      <section anchor="post-execution-evidence-problem">
        <name>The Post-Execution Evidence Problem</name>
        <t>Autonomous AI agents execute consequential actions -- payments,
        trades, contracts, regulated data access -- at machine speed,
        often without contemporaneous human review. Post-execution
        evidence of agent actions must be complete (omissions detectable),
        captured at execution time, tamper-evident, and verifiable without
        depending on the agent operator's cooperation, if it is to
        withstand scrutiny from regulators, courts, and insurers.</t>
        <t>Operator-controlled audit logs are mutable by the operator,
        carry no third-party attestation, and are not designed for
        independent verification.</t>
        <t>This profile addresses the gap by defining how independently
        custodied, post-execution evidence records bind to the SCITT
        architecture.</t>
      </section>

      <section anchor="relationship-to-scitt">
        <name>Relationship to SCITT</name>
        <t>This profile is an application of <xref target="I-D.ietf-scitt-architecture"/>.
        It:</t>
        <ul>
          <li>REQUIRES compliance with <xref target="I-D.ietf-scitt-architecture"/></li>
          <li>REQUIRES AIRs to be encoded as COSE_Sign1 Signed Statements <xref target="RFC9052"/></li>
          <li>DEFINES domain-specific extensions for AI agent execution evidence</li>
        </ul>
        <t>The SCITT architecture's non-equivocation property is particularly
        significant for this domain: it guarantees that two different
        Relying Parties cannot be shown two different versions of the same
        Evidence Chain. Combined with the three-role separation (Issuer,
        Transparency Service, Relying Party), this provides the structural
        independence required for evidence to withstand institutional
        scrutiny.</t>
      </section>

      <section anchor="scope">
        <name>Scope</name>
        <t>This document specifies:</t>
        <ul>
          <li>AgentInteractionRecord (AIR) schema as COSE_Sign1 payload</li>
          <li>SCITT role mappings for the agent execution context</li>
          <li>Registration Policy requirements for AIR admission</li>
          <li>Hash chain construction and four-step verification algorithm</li>
          <li>Identity binding levels (Minimum, Institutional, Delegation)</li>
          <li>Redaction receipt mechanism for privacy-preserving custody</li>
          <li>Evidence Receipt semantics</li>
          <li>Compliance mappings to applicable regulatory frameworks</li>
        </ul>
        <t>This document does not specify:</t>
        <ul>
          <li>General SCITT architecture (see <xref target="I-D.ietf-scitt-architecture"/>)</li>
          <li>COSE Receipt format (see <xref target="RFC9052"/>)</li>
          <li>Capture mechanism (MCP middleware, framework wrappers, proxies are all conforming implementations)</li>
          <li>Storage backend technology</li>
          <li>Identity infrastructure (DIDs, SPIFFE <xref target="SPIFFE"/>, Verifiable Credentials are external systems)</li>
          <li>Analytics or query APIs</li>
          <li>Specific regulatory requirements applicable to any deployment</li>
          <li>Content evaluation, risk scoring, or analytical interpretation of recorded actions</li>
        </ul>
      </section>
    </section>

    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY",
      and "OPTIONAL" in this document are to be interpreted as described
      in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in
      all capitals, as shown here.</t>
      <dl>
        <dt>Agent:</dt><dd>An autonomous software system that perceives inputs, makes decisions, and takes actions on behalf of a principal, using one or more AI models.</dd>
        <dt>Agent Operator:</dt><dd>The organisation that deploys, configures, and directs an Agent. Responsible for the Agent's actions in law and contract. The Issuer in this profile.</dd>
        <dt>Material Action:</dt><dd>An action taken by an Agent that creates, modifies, or extinguishes an external obligation, transfers value, accesses regulated data, or produces a consequential output. See <xref target="material-action"/>.</dd>
        <dt>AgentInteractionRecord (AIR):</dt><dd>A structured, signed, hash-chained record of a single Material Action. The signed statement payload for this profile.</dd>
        <dt>Evidence (in this profile):</dt><dd>Information derived from a signed, hash-chained AgentInteractionRecord that attests to the integrity, provenance, and temporal ordering of a Material Action. Evidence attests to what was recorded and that the record has not been altered; it does not attest to the correctness, legality, or commercial merit of the recorded action.</dd>
        <dt>Evidence Chain:</dt><dd>The ordered, hash-chained sequence of AIRs registered with a Transparency Service for a given agent deployment.</dd>
        <dt>Evidence Custody:</dt><dd>The independent, append-only holding of integrity proofs and signed records on behalf of a principal, without access to, control over, or liability for the underlying assets, transactions, or decisions those records reference.</dd>
        <dt>Evidence Custodian:</dt><dd>The party performing Evidence Custody by operating the Transparency Service. Independent of the Agent Operator. Holds the append-only Evidence Chain.</dd>
        <dt>Evidence Receipt:</dt><dd>A Receipt issued by the Transparency Service upon successful registration of an AIR.</dd>
        <dt>Redaction Receipt:</dt><dd>A record within the AIR attesting that a specific field was redacted prior to signing, preserving the SHA-256 hash of the original value.</dd>
        <dt>Principal:</dt><dd>The human or institutional entity on whose behalf the Agent acts.</dd>
        <dt>EES:</dt><dd>Evidence Envelope Specification. The open format specification defining the AIR schema and verification algorithm. See <xref target="ees-relationship"/>.</dd>
      </dl>
    </section>

    <section anchor="scitt-role-mapping">
      <name>SCITT Role Mapping</name>

      <section anchor="issuer">
        <name>Issuer -- the Agent Operator</name>
        <t>The Agent Operator is the Issuer. The Operator's evidence pipeline
        captures Material Actions at execution time, normalises them to
        the AIR schema, applies redaction policy, and signs the record
        using an ECDSA P-256 key pair.</t>
        <t>The Issuer's signing key MUST be registered with the Transparency
        Service prior to first submission, bound to the Operator's
        organisational identity, and rotated on a schedule no longer than
        12 months. Key rotation events MUST themselves be registered as
        records in the Evidence Chain.</t>
      </section>

      <section anchor="transparency-service">
        <name>Transparency Service -- the Evidence Custodian</name>
        <t>The Evidence Custodian is an independent party -- not the Agent
        Operator, without financial or operational interest in the Agent's
        behaviour -- that holds the append-only Evidence Chain under
        custodial SLAs.</t>
        <t>The Transparency Service MUST maintain the chain as append-only
        (records once admitted cannot be deleted, modified, or reordered),
        issue an Evidence Receipt for each admitted record via <xref target="I-D.ietf-scitt-scrapi"/>, and implement
        the non-equivocation guarantee.</t>
      </section>

      <section anchor="relying-party">
        <name>Relying Party</name>
        <t>Relying Parties arrive after the fact, with zero prior context, and
        must be able to verify records without operator cooperation.</t>
      </section>

      <section anchor="role-mapping-summary">
        <name>Role Mapping Summary</name>
        <table>
          <thead><tr><th>SCITT Role</th><th>This Profile</th></tr></thead>
          <tbody>
            <tr><td>Issuer</td><td>Agent Operator</td></tr>
            <tr><td>Signed Statement</td><td>AgentInteractionRecord</td></tr>
            <tr><td>Transparency Service</td><td>Evidence Custodian</td></tr>
            <tr><td>Receipt</td><td>Evidence Receipt</td></tr>
            <tr><td>Relying Party</td><td>Auditor / Regulator / Insurer / Counterparty</td></tr>
          </tbody>
        </table>
      </section>
    </section>

    <section anchor="material-action">
      <name>The Material Action</name>

      <section anchor="material-action-definition">
        <name>Definition</name>
        <t>A Material Action is the unit of record in this profile. Every
        Material Action MUST produce exactly one AgentInteractionRecord.
        An action is material if it satisfies one or more of:</t>
        <dl>
          <dt>(a) Value transfer</dt><dd>initiates, authorises, or confirms a transfer of monetary value or financial instruments.</dd>
          <dt>(b) Contract formation or modification</dt><dd>creates, amends, or terminates a legal obligation between parties.</dd>
          <dt>(c) Regulated data access</dt><dd>accesses, modifies, or transmits data subject to regulatory protection.</dd>
          <dt>(d) Consequential decision</dt><dd>produces a decision that materially affects the rights or interests of a person.</dd>
          <dt>(e) External system commitment</dt><dd>commits state to an external system that cannot be trivially undone.</dd>
        </dl>
        <t>This list is not exhaustive. Implementations SHOULD treat any
        autonomous action with externally observable consequences as material.</t>
      </section>

      <section anchor="action-type-classification">
        <name>Action Type Classification</name>
        <t>The following action types are defined by this profile:</t>
        <table>
          <thead><tr><th>Action Type</th><th>Material Action Category</th></tr></thead>
          <tbody>
            <tr><td>payment_initiation</td><td>Value transfer</td></tr>
            <tr><td>payment_execution</td><td>Value transfer</td></tr>
            <tr><td>trade_execution</td><td>Value transfer</td></tr>
            <tr><td>contract_execution</td><td>Contract formation or modification</td></tr>
            <tr><td>regulated_data_access</td><td>Regulated data access</td></tr>
            <tr><td>regulated_data_export</td><td>Regulated data access</td></tr>
            <tr><td>credit_decision</td><td>Consequential decision</td></tr>
            <tr><td>configuration_change</td><td>External system commitment</td></tr>
          </tbody>
        </table>
        <t>Implementations MAY define additional values using a reverse-DNS
        namespace (e.g., com.example.custom-action). Values without a
        namespace prefix are reserved for this profile.</t>
      </section>
    </section>

    <section anchor="air">
      <name>AgentInteractionRecord</name>

      <section anchor="air-overview">
        <name>Overview</name>
        <t>The AIR captures eight categories of evidence about a Material
        Action: what the agent was given; what it produced; what resources
        it used; what it reasoned; who it is; what authorised it; when it
        acted; and where it fits in a causal chain.</t>
      </section>

      <section anchor="air-schema">
        <name>Schema (CDDL)</name>
        <t>The following CDDL <xref target="RFC8610"/> reproduces the AgentInteractionRecord schema
        from the Evidence Envelope Specification [EES] for implementer
        convenience.</t>
        <sourcecode type="cddl"><![CDATA[
AgentInteractionRecord = {
  "schema_version"         : tstr,        ; MUST be "air-1.0"
  "record_id"              : tstr,        ; UUID v7
  "session_id"             : tstr,
  "action_type"            : tstr,
  "action_subtype"         : tstr / null,
  "action_timestamp_ms"    : uint,        ; Unix epoch, ms
  "captured_timestamp_ms"  : uint,
  "written_timestamp_ms"   : uint / null,
  "agent_id"               : tstr,        ; Stable deployment ID
  "agent_version"          : tstr,
  "agent_did"              : tstr / null,  ; W3C DID
  "agent_workload_id"      : tstr / null,  ; SPIFFE ID
  "operator_id"            : tstr,
  "operator_pubkey_id"     : tstr,
  "principal_id"           : tstr / null,
  "delegation_chain"       : [* tstr] / null,
  "intent_attestation"     : tstr / null,
  "auth_context"           : AuthContext / null,
  "input_hash"             : bstr,        ; SHA-256
  "input_summary"          : tstr / null,
  "outcome_state"          : tstr,
  "outcome_hash"           : bstr,
  "outcome_summary"        : tstr / null,
  "tool_calls"             : [* ToolCallRecord],
  "jurisdiction"           : tstr,        ; ISO 3166-1 alpha-2
  "retention_class"        : tstr,
  "policy_refs"            : [* tstr],
  "external_refs"          : [* ExternalRef],
  "parent_record_id"       : tstr / null,
  "workflow_id"            : tstr / null,
  "trace_id"               : tstr / null,
  "consumer_instructions"  : tstr / null,
  "reasoning_hash"         : bstr / null,  ; SHA-256
  "redaction_receipts"     : [* RedactionReceipt],
}
; The COSE protected header carries: content_hash, chain_hash,
; prev_chain_hash, sequence_number, action_timestamp_ms, and
; agent_id. The latter two also appear in the payload; the
; protected header copies enable chain verification without
; payload access. See Section 5.6.

AuthContext = { "token_type" : tstr, "scopes" : [* tstr],
  "audience" : tstr / null, "expires_at_ms" : uint / null }

ToolCallRecord = { "tool_id" : tstr, "tool_type" : tstr,
  "input_hash" : bstr, "output_hash" : bstr,
  "is_write" : bool, "timestamp_ms" : uint }

ExternalRef = { "ref_type" : tstr, "ref_value" : tstr,
  "ref_system" : tstr / null }

RedactionReceipt = { "field_path" : tstr,
  "original_hash" : bstr, "policy_id" : tstr,
  "timestamp_ms" : uint }

; COSE protected header fields (not in payload):
; The COSE_Sign1 signature covers this header and the payload
; per RFC 9052; it is not a field within the header itself.
;
; Per [I-D.ietf-scitt-architecture] Section 5.1.1.1 and RFC 9597,
; the protected header MUST include CWT Claims (label 15) with
; iss (Issuer, claim 1) and sub (Subject, claim 2), plus key
; identification via kid (label 4), x5t (label 34), or
; x5chain (label 33).
;
; In this profile:
;   iss (claim 1) = operator_id (the Agent Operator identity)
;   sub (claim 2) = agent_id (the agent deployment identity)
;   kid (label 4) = operator_pubkey_id
CoseProtectedFields = {
  ; --- SCITT-mandated parameters (integer labels) ---
  &(alg: 1)          => int,           ; -7 for ES256
  &(kid: 4)          => bstr,          ; operator_pubkey_id
  &(CWT_Claims: 15)  => CWT_Claims_Map,
  ; --- Profile-specific integrity fields ---
  "content_hash"       : bstr,
  "prev_chain_hash"    : bstr,
  "chain_hash"         : bstr,
  "sequence_number"    : uint,
  "action_timestamp_ms": uint,
  "agent_id"           : tstr,
}

CWT_Claims_Map = {
  &(iss: 1) => tstr,   ; operator_id
  &(sub: 2) => tstr,   ; agent_id
}
]]></sourcecode>
      </section>

      <section anchor="key-field-definitions">
        <name>Field Definitions</name>

        <t>Core Identity Fields:</t>
        <dl>
          <dt>schema_version REQUIRED:</dt><dd>MUST be "air-1.0". Identifies the AIR schema version for forward compatibility.</dd>
          <dt>record_id REQUIRED:</dt><dd>UUID v7 (<xref target="RFC9562"/>), time-ordered. Unique identifier for this record. Enables deduplication on resubmission.</dd>
          <dt>session_id REQUIRED:</dt><dd>UUID grouping related Material Actions within a single workflow or conversation.</dd>
          <dt>agent_id REQUIRED:</dt><dd>Stable deployment identifier for the agent. Assigned by the Agent Operator. Does not change across restarts or model updates. Forms the primary grouping key for the Evidence Chain.</dd>
          <dt>agent_version REQUIRED:</dt><dd>String encoding the model name, model version, agent framework, and framework version. Format is implementation-defined but MUST be deterministic for a given execution environment.</dd>
          <dt>agent_did OPTIONAL:</dt><dd>W3C Decentralized Identifier providing a portable, cryptographically verifiable identity anchor that survives across sessions and operators.</dd>
          <dt>agent_workload_id OPTIONAL:</dt><dd>SPIFFE ID (<xref target="SPIFFE"/>) identifying the specific runtime workload instance. More specific than agent_id; different instances of the same deployment will have different workload IDs.</dd>
          <dt>operator_id REQUIRED:</dt><dd>Identifier for the Agent Operator. Corresponds to the Issuer identity (CWT Claims iss) in the COSE protected header.</dd>
          <dt>operator_pubkey_id REQUIRED:</dt><dd>Key identifier for the signing key used. Corresponds to kid in the COSE protected header.</dd>
          <dt>principal_id OPTIONAL:</dt><dd>Identifier for the human or institutional entity on whose behalf the Agent acts.</dd>
        </dl>

        <t>Authorisation Fields:</t>
        <dl>
          <dt>delegation_chain OPTIONAL:</dt><dd>Ordered array of references to Verifiable Credentials establishing the authority chain from Principal to Agent.</dd>
          <dt>intent_attestation OPTIONAL:</dt><dd>Reference to a signed attestation of the principal's intent.</dd>
          <dt>auth_context OPTIONAL:</dt><dd>OAuth/authorisation context at execution time. Contains token_type, scopes, audience, and expires_at_ms. Records which scopes the Agent was operating under at the moment of the Material Action.</dd>
        </dl>

        <t>Timestamp Fields:</t>
        <dl>
          <dt>action_timestamp_ms REQUIRED:</dt><dd>Unix epoch in milliseconds. The moment the Material Action completed. Distinct from captured_timestamp_ms and written_timestamp_ms. Also carried in the COSE protected header for chain verification without payload access.</dd>
          <dt>captured_timestamp_ms REQUIRED:</dt><dd>Unix epoch in milliseconds. When the capture pipeline recorded the action.</dd>
          <dt>written_timestamp_ms OPTIONAL:</dt><dd>Unix epoch in milliseconds. When the Transparency Service admitted the record. Null until admission.</dd>
        </dl>

        <t>Action Classification Fields:</t>
        <dl>
          <dt>action_type REQUIRED:</dt><dd>Classification of the Material Action. Values defined by this profile are listed in <xref target="action-type-classification"/>. Implementations MAY define additional values using a reverse-DNS namespace.</dd>
          <dt>action_subtype OPTIONAL:</dt><dd>Refinement of the action type. Implementation-defined.</dd>
        </dl>

        <t>Input and Outcome Fields:</t>
        <dl>
          <dt>input_hash REQUIRED:</dt><dd>SHA-256 hash of the raw input to the agent. Preserves evidence of input without storing the input itself.</dd>
          <dt>input_summary OPTIONAL:</dt><dd>Human-readable summary of the input, post-redaction.</dd>
          <dt>outcome_state REQUIRED:</dt><dd>Terminal state of the Material Action. MUST be one of: completed, failed, partially_completed, reversed, pending_confirmation.</dd>
          <dt>outcome_hash REQUIRED:</dt><dd>SHA-256 hash of the raw output.</dd>
          <dt>outcome_summary OPTIONAL:</dt><dd>Human-readable summary of the outcome, post-redaction.</dd>
          <dt>tool_calls REQUIRED:</dt><dd>Array of ToolCallRecord objects. Each records a single tool or API invocation: tool_id, tool_type, input_hash, output_hash, is_write, timestamp_ms. MAY be empty if no tools were invoked.</dd>
        </dl>

        <t>Reasoning Fields:</t>
        <dl>
          <dt>reasoning_hash OPTIONAL:</dt><dd>SHA-256 hash of the reasoning trace. Preserves evidence of reasoning without requiring the raw trace in the AIR.</dd>
        </dl>

        <t>Regulatory and Policy Fields:</t>
        <dl>
          <dt>jurisdiction REQUIRED:</dt><dd>ISO 3166-1 alpha-2 country code identifying the applicable jurisdiction.</dd>
          <dt>retention_class REQUIRED:</dt><dd>Retention period label: regulatory_7yr, regulatory_5yr, regulatory_3yr, operational_1yr, custom. These are informational classification labels.</dd>
          <dt>policy_refs REQUIRED:</dt><dd>Array of references to policies governing this action. MAY be empty.</dd>
          <dt>consumer_instructions OPTIONAL:</dt><dd>Principal-defined constraints for agentic commerce: price thresholds, merchant restrictions, product scope, recurrence limits.</dd>
        </dl>

        <t>Provenance and Correlation Fields:</t>
        <dl>
          <dt>external_refs REQUIRED:</dt><dd>Array of ExternalRef objects cross-referencing external systems (trade IDs, payment references). MAY be empty.</dd>
          <dt>parent_record_id OPTIONAL:</dt><dd>UUID of the parent AIR in a multi-step workflow. Enables causal chain reconstruction.</dd>
          <dt>workflow_id OPTIONAL:</dt><dd>Identifier for the broader workflow this action belongs to.</dd>
          <dt>trace_id OPTIONAL:</dt><dd>OpenTelemetry trace ID for observability correlation.</dd>
        </dl>

        <t>Privacy Fields:</t>
        <dl>
          <dt>redaction_receipts REQUIRED:</dt><dd>Array of RedactionReceipt objects attesting to redacted fields. MAY be empty.</dd>
        </dl>
      </section>

      <section anchor="identity-binding">
        <name>Identity Binding Levels</name>
        <t>Level 1 -- Minimum: agent_id and operator_id present. Signing
        key pre-registered and signature verifies.</t>
        <t>Level 2 -- Institutional: Level 1 plus auth_context present
        with valid scopes and non-expired token claims.</t>
        <t>Level 3 -- Delegation: Level 2 plus at least one resolvable
        Verifiable Credential in delegation_chain.</t>
      </section>

      <section anchor="integrity-envelope">
        <name>Integrity Envelope</name>
        <t>Every AIR is accompanied by integrity fields carried in the COSE
        protected header (see <xref target="cose-encoding"/>): content_hash (SHA-256 of
        the payload), prev_chain_hash (preceding record's chain
        hash), chain_hash, sequence_number (monotonically increasing,
        0-based), action_timestamp_ms, and agent_id. The protected header
        also carries the SCITT-mandated CWT Claims (iss and sub) and key
        identification (kid) as specified in <xref target="cose-encoding"/>.
        The COSE_Sign1
        signature covers the protected header and payload per
        <xref target="RFC9052"/> and is the fourth element of the COSE_Sign1
        array, not a field within the protected header.
        These fields are structurally separate from the payload,
        enabling full chain verification — including identity and
        temporal ordering — without payload access, and
        supporting payload redaction without breaking the chain.</t>
        <t>The chain_hash construction uses four inputs:
        SHA-256(content_hash || prev_chain_hash ||
        action_timestamp_ms || agent_id). This binds identity
        and temporal ordering into the chain at the cryptographic
        level: a receipt proves who, when, and what without
        requiring payload access. Both agent_id and
        action_timestamp_ms are mandatory fields supplied by the
        upstream agent platform at capture time; the Registration
        Policy (<xref target="registration-policy"/>) MUST reject submissions missing either field.</t>
      </section>

      <section anchor="cose-encoding">
        <name>COSE Encoding</name>
        <t>AIRs are encoded as COSE_Sign1 structures <xref target="RFC9052"/> with algorithm
        ES256 (ECDSA with SHA-256 over P-256). Payload is the canonical
        JSON serialisation of the AIR (<xref target="RFC8785"/>), encoded as a CBOR byte
        string.</t>
        <t>The COSE protected header includes both SCITT-mandated parameters
        and profile-specific integrity fields. Per
        <xref target="I-D.ietf-scitt-architecture"/> Section 5.1.1.1 and
        <xref target="RFC9597"/>, the protected header MUST include CWT Claims
        (COSE label 15) containing the Issuer claim (iss, claim label 1,
        as defined in <xref target="RFC8392"/>) set to the operator_id, and
        the Subject claim (sub, claim label 2) set to the agent_id. The
        protected header MUST also include key identification via kid
        (COSE label 4) set to the operator_pubkey_id. Implementations MAY
        use x5t or x5chain (<xref target="RFC9360"/>) as alternatives to
        kid when X.509 certificates are used.</t>
        <t>In addition, the protected header carries the profile-specific
        integrity fields: content_hash, prev_chain_hash, chain_hash,
        sequence_number, action_timestamp_ms, and agent_id.
        The agent_id value in the protected header is identical to the
        CWT Claims sub value; the protected header copy enables chain
        verification without CWT Claims parsing.
        The payload contains only the remaining AIR
        content fields. This separation
        allows the Transparency Service to validate chain
        integrity from the protected header without parsing
        the payload, and supports Selective Disclosure and
        payload redaction without breaking the chain.</t>
        <t>The profile-specific integrity fields use string labels in this
        revision for readability. A subsequent revision will propose
        integer label registration via IANA for these fields.</t>
      </section>

      <section anchor="hash-chain-construction">
        <name>Hash Chain Construction</name>
        <t>For sequence_number = 0: prev_chain_hash = 32 zero bytes.
        For all subsequent records: prev_chain_hash = chain_hash of preceding record.
        For every record:</t>
        <sourcecode type="pseudocode"><![CDATA[
content_hash = SHA-256(COSE_Sign1.payload)
chain_hash   = SHA-256(content_hash || prev_chain_hash ||
                       action_timestamp_ms || agent_id)
]]></sourcecode>
        <t>COSE_Sign1.payload is the raw byte string from the COSE
        structure's payload field -- the CBOR-encoded canonical JSON
        serialisation (RFC 8785) of the AIR content fields.</t>
        <t>The concatenation inputs are encoded as follows:</t>
        <dl>
          <dt>content_hash (32 bytes)</dt><dd>Raw SHA-256 digest bytes.</dd>
          <dt>prev_chain_hash (32 bytes)</dt><dd>Raw SHA-256 digest bytes. For the first record in a chain (sequence_number = 0), 32 zero bytes (0x00 * 32).</dd>
          <dt>action_timestamp_ms (8 bytes)</dt><dd>Unsigned 64-bit integer in big-endian (network) byte order.</dd>
          <dt>agent_id (4 + N bytes)</dt><dd>Length-prefixed UTF-8 string: a 4-byte big-endian unsigned 32-bit integer containing the byte length of the UTF-8 encoding, followed by the UTF-8 encoded bytes. No null terminator.</dd>
        </dl>
        <t>The total input to SHA-256 is exactly 76 + len(agent_id) bytes.
        This encoding is deterministic: two conforming implementations
        given the same field values MUST produce the same chain_hash.</t>
        <t>The Transparency Service MUST verify hash chain continuity before
        admitting each record.</t>

        <t>Concurrency and Serialisation:</t>
        <t>The hash chain construction requires sequential production of
        records within a single Evidence Chain. Because each record's
        chain_hash depends on the preceding record's chain_hash via
        prev_chain_hash, a conforming implementation cannot produce record
        N+1 until record N has been finalised and signed. This dependency
        provides a total ordering guarantee that is cryptographically
        enforced rather than administratively asserted.</t>
        <t>Evidence Chains are scoped per agent_id. Agents with distinct
        agent_id values operate independent chains with no cross-chain
        ordering dependency. Concurrent agent deployments do not contend
        with each other.</t>
        <t>Within a single agent_id, implementations MUST serialise record
        production. Two conforming patterns exist: (a) the Issuer's capture
        pipeline maintains a per-agent_id serialisation point (queue or
        mutex) and produces fully signed, sequenced records before
        submission to the Transparency Service; or (b) the Transparency
        Service assigns sequence numbers at admission time and returns
        chain_hash to the Issuer for use in the next record. Pattern (a)
        requires Issuer-side state but minimises round trips. Pattern (b)
        centralises ordering but introduces a synchronous dependency on the
        Transparency Service for each record.</t>
        <t>If an agent produces multiple Material Actions concurrently, the
        capture pipeline queues them and serialises into the chain in
        arrival order. Records MAY share the same action_timestamp_ms;
        the sequence_number provides the authoritative total ordering.</t>
      </section>

      <section anchor="verification-algorithm">
        <name>Verification Algorithm</name>
        <t>Four-step algorithm. Requires only the record, preceding chain_hash
        (or Evidence Receipt), and the Issuer's public key.</t>
        <ol>
          <li>Payload integrity. Compute SHA-256 of the COSE
          payload directly. Compare to content_hash in the
          COSE protected header. Mismatch = FAIL.</li>
          <li>Chain integrity. From the COSE protected header, extract
          content_hash, prev_chain_hash, action_timestamp_ms, and
          agent_id. Compute SHA-256(content_hash || prev_chain_hash ||
          action_timestamp_ms || agent_id) using the byte encoding
          defined in <xref target="hash-chain-construction"/>.
          Compare to chain_hash. Mismatch = FAIL.</li>
          <li>Signature validity. Verify the COSE_Sign1 signature
          per <xref target="RFC9052"/> using the operator's public key.
          Invalid = FAIL.</li>
          <li>Sequence completeness. Verify sequence_number is exactly
          one greater than preceding record (or zero). Gap = FAIL.</li>
        </ol>
        <t>If all four steps pass: the record is VERIFIED -- intact, untampered,
        correctly positioned, and signed by the claimed Issuer.</t>
      </section>

      <section anchor="algorithm-agility">
        <name>Algorithm Agility</name>
        <t>This profile mandates ES256 (ECDSA with SHA-256 over P-256) as the
        mandatory-to-implement algorithm. Implementations SHOULD design for
        algorithm transition. The schema_version field in the AIR payload
        and the alg parameter in the COSE protected header together provide
        the mechanism for introducing new algorithms in future revisions
        without breaking existing chains.</t>
        <t>A chain MAY contain a key rotation record (action_type: key_rotation)
        that transitions to a new algorithm. Records before and after the
        transition point are verified with their respective algorithms as
        indicated by the alg parameter in each record's COSE protected header.
        Transparency Services MUST retain the prior public key and algorithm
        identifier to enable verification of pre-transition records.</t>
        <t>A future revision of this profile will specify post-quantum
        transition mechanisms, including ML-DSA (FIPS 204) as a candidate
        additional algorithm for Evidence Receipt signatures.</t>
      </section>
    </section>

    <section anchor="registration-policy">
      <name>Registration Policy</name>
      <t>A Transparency Service operating this profile MUST enforce the
      following policy. Records failing any requirement MUST be
      rejected.</t>
      <t>The Registration Policy and associated trust anchors MUST be
      registered as Signed Statements on the Transparency Service's
      verifiable data structure, per Section 5.1.1 of
      <xref target="I-D.ietf-scitt-architecture"/>.</t>
      <t>6.1. Schema Conformance: Valid COSE_Sign1 with ES256; protected
      header MUST include CWT Claims (label 15) with iss and sub per
      <xref target="RFC9597"/>, and key identification via kid, x5t, or
      x5chain; valid AIR per CDDL; schema_version "air-1.0"; all REQUIRED
      fields non-null; valid action_type.</t>
      <t>6.2. Identity Binding: Minimum Level 1. Services MAY require Level 2
      or 3 for specific categories.</t>
      <t>6.3. Temporal Ordering: action_timestamp_ms &lt;= captured_timestamp_ms;
      captured within 300s of submission; prev_chain_hash matches;
      sequence_number correct.</t>
      <t>6.4. Redaction Receipt Requirement: For regulated_data_access,
      regulated_data_export, payment_initiation, payment_execution, and
      credit_decision, at least one RedactionReceipt MUST be present.</t>
      <t>6.5. Error Semantics: A Transparency Service rejecting a submission
      MUST return an error response per <xref target="I-D.ietf-scitt-scrapi"/>.
      The error type SHOULD be
      urn:ietf:params:scitt:error:signed-statement:rejected-by-registration-policy
      with a detail string identifying which of the above requirements
      (6.1 through 6.4) the submission failed to satisfy.</t>
    </section>

    <section anchor="evidence-receipt">
      <name>Evidence Receipt</name>
      <t>Upon successful admission, the Transparency Service issues an
      Evidence Receipt (COSE_Sign1 signed by the Service's own key)
      containing: record_id, chain_hash, sequence_number,
      admission_timestamp_ms, and Service operator identifier.</t>
      <t>The Evidence Receipt is the primary artefact presented in
      verification, audit, or legal proceedings.</t>
      <t>7.1. Verifiable Data Structure: This profile uses the hash chain
      defined in Section 5.7 as its verifiable data structure. The
      chain_hash attested in the Evidence Receipt serves as the inclusion
      proof: it cryptographically binds the record to a unique position
      in the append-only Evidence Chain, providing the same structural
      guarantee as a Merkle tree inclusion proof. A subsequent revision
      of this profile will formally register the hash chain as a
      verifiable data structure type per
      <xref target="I-D.ietf-cose-merkle-tree-proofs"/> and align the
      Evidence Receipt's COSE structure with the COSE Receipts format,
      including the verifiable data structure identifier (COSE label
      -111) in the protected header and proof encoding in the
      unprotected header (COSE label -222).</t>
      <t>7.2. Transparent Statement: Per
      <xref target="I-D.ietf-scitt-architecture"/> Section 7, a
      Transparent Statement is a Signed Statement with one or more
      Receipts embedded in the unprotected header (COSE label 394).
      Implementations of this profile SHOULD support producing
      Transparent Statements by attaching the Evidence Receipt to the
      AIR's unprotected header. The Evidence Receipt MAY also be stored
      and presented as a standalone artefact independent of the AIR.</t>
    </section>

    <section anchor="compliance-mapping">
      <name>Compliance Mapping</name>
      <t>The mappings in this section are informational and illustrative.
      They describe how properties of this profile may be relevant to
      specific regulatory frameworks. They do not constitute legal
      advice, regulatory interpretation, or a claim of compliance with
      any regulation. The frameworks listed below are representative
      examples; they do not form an exhaustive list of potentially
      applicable regulations.</t>

      <section><name>EU AI Act Articles 12 and 19</name>
        <t>AIRs provide properties relevant to Article 12 (tamper-resistant
        logging) and Article 19 (log retention). Annex III Section 5
        classifies credit scoring and life/health insurance pricing AI as
        high-risk; deployers of these systems are the primary institutional
        demand for AIR custody.</t>
      </section>

      <section><name>DORA (Regulation (EU) 2022/2554)</name>
        <t>DORA <xref target="DORA"/> requires technically verifiable operational logs sufficient
        for regulators to reconstruct ICT incidents. Article 28 requires
        contractual audit rights with ICT third-party providers.</t>
      </section>

      <section><name>NIST AI Risk Management Framework</name>
        <t>Govern 1.2 -- Issuer/Custodian separation = accountability.
        Map 5.2 -- Evidence Chains = tamper-evident behaviour record.
        Measure 2.5 -- Identity binding = Trustworthy AI criteria.
        Manage 2.4 -- Evidence Receipts = incident reconstruction.</t>
      </section>

      <section><name>US Financial Record-Keeping</name>
        <t>FINRA Rule 4511 <xref target="FINRA-4511"/> requires member firms to make and preserve
        books and records; SEC Rule 17a-4 <xref target="SEC-17a-4"/> prescribes retention
        periods (6yr/3yr) and electronic storage requirements.</t>
        <t>AIRs with action_type "trade_execution" provide independent execution
        records. Use retention_class "regulatory_7yr".</t>
      </section>

      <section><name>MAS AI Risk Management Guidelines (Singapore)</name>
        <t>MAS proposed Guidelines on AI Risk Management <xref target="MAS-AI-RM"/> (November 2025)
        explicitly cover AI agents. AIRs provide independently custodied
        records relevant to third-party AI oversight requirements.</t>
      </section>

      <section><name>PCI DSS v4.0</name>
        <t>Requirement 10 of PCI DSS v4.0 <xref target="PCI-DSS-4"/> mandates comprehensive audit trails for payment
        environments. PCI SSC AI Principles (September 2025)
        explicitly cover agentic AI systems that autonomously
        initiate payments.</t>
      </section>

      <section><name>MiFID II</name>
        <t>MiFID II <xref target="MIFID-II"/> Article 25(1) record-keeping; Delegated Regulation 2017/565, Article
        72 five-year retention.</t>
      </section>
    </section>

    <section anchor="ees-relationship">
      <name>Relationship to the Evidence Envelope Specification</name>
      <t>The Evidence Envelope Specification (EES) is an open format
      specification for independently custodied AI agent execution
      records, defining the AIR schema, verification algorithm, and
      capture interface contract.</t>
      <t>This SCITT profile and the EES are complementary. (For a comparable SCITT profile in a different domain, see <xref target="VCP"/>.) The EES defines the
      canonical schema (JSON Schema), verification algorithm (pseudocode
      + reference implementation), and writer interface contract (IDL).
      This profile defines the SCITT binding: COSE encoding,
      Transparency Service submission, SCITT Receipt verification.</t>
      <t>The AgentInteractionRecord schema reproduced in <xref target="air-schema"/> is a
      conformant subset of the EES schema. The canonical definition,
      including the full field set and extensibility model, is
      maintained in the EES. Implementations of this profile do not
      require the EES; the AIR schema in <xref target="air-schema"/> is self-contained.
      The EES provides additional guidance for implementers building
      capture interfaces.</t>
      <t>Implementations SHOULD reference EES v0.1 <xref target="EES"/> for the canonical schema
      definition.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This section describes the threat model, trust assumptions, and
      required security controls for implementations of this profile.
      It supplements the security considerations in the SCITT
      architecture <xref target="I-D.ietf-scitt-architecture"/>.</t>

      <section><name>Threat Model</name>
        <t>This profile addresses the following threats:
        (a) Evidence fabrication, (b) Evidence suppression,
        (c) Evidence modification, (d) Timing manipulation.
        This profile does not address threats arising from compromise of
        the AI agent model itself (prompt injection, goal misalignment,
        adversarial inputs).</t>
      </section>

      <section><name>Trust Assumptions</name>
        <t>(a) The Transparency Service (Evidence Custodian) is structurally
        independent of the Issuer (Agent Operator). If the same entity
        operates both roles, the tamper-evidence guarantees are void.
        (b) The Transparency Service is operationally honest.
        (c) The Issuer's signing key is not compromised at the time of signing.</t>
      </section>

      <section><name>Signing Key Management</name>
        <t>Implementations MUST store signing keys in hardware security modules
        (HSMs) or equivalent tamper-resistant environments. Keys MUST be
        rotated at least annually.</t>
      </section>

      <section><name>Replay Attack Prevention</name>
        <t>The combination of sequence_number, prev_chain_hash, and
        captured_timestamp_ms prevents replay attacks.</t>
      </section>

      <section><name>Capture Pipeline Compromise</name>
        <t>If the capture pipeline is compromised, an attacker can
        fabricate or suppress AIRs before they are signed. This threat
        is mitigated by the Issuer's signing key being held in an HSM
        separate from the capture pipeline, and by the Transparency
        Service's Registration Policy validating temporal ordering
        and sequence completeness. A gap in sequence_number or a
        timing anomaly in action_timestamp_ms provides evidence of
        suppression even if the pipeline itself is compromised.</t>
      </section>

      <section><name>Custodian Compromise</name>
        <t>If the Transparency Service itself is compromised, the attacker
        cannot forge Issuer signatures on existing AIRs or retroactively
        alter hash chain values without detection by any Relying Party
        holding a prior Evidence Receipt.</t>
      </section>

      <section><name>Append-Only Integrity</name>
        <t>Append-only integrity is enforced by both the hash chain structure
        and the Transparency Service operational policy. Neither alone is
        sufficient. Storage backends MUST implement write-once-read-many
        (WORM) semantics or equivalent immutability guarantees.</t>
      </section>

      <section><name>Collusion</name>
        <t>If the Issuer and the Transparency Service collude, they can
        jointly fabricate, suppress, or modify evidence without detection
        by Relying Parties who rely solely on receipts from the compromised
        Transparency Service. This is the fundamental limitation of any
        two-party evidence system.</t>
      </section>
    </section>

    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>Access to Evidence Chains MUST be permissioned and purpose-limited.
      Verification does not require access to record content -- the
      algorithm uses only the public key and hash chain values.
      Transparency Services SHOULD expose verification endpoints that do
      not expose payloads.</t>
      <t>The redaction mechanism defined in the Registration Policy
      ensures that signed records never contain raw PII for action types
      involving regulated data or payment information. The content_hash
      covers the redacted form; the original_hash in the Redaction Receipt
      allows authorised parties to verify specific field values without
      the Transparency Service holding the raw data.</t>
      <t>Even without payload access, the COSE protected header exposes
      agent_id, action_timestamp_ms, and sequence_number. An observer
      with access to chain metadata can infer activity frequency, timing
      patterns, and action volume for a given agent deployment.
      Transparency Services SHOULD apply access controls to chain
      metadata with the same rigour as payload content.</t>
      <t>This profile does not define data subject access or erasure
      mechanisms. These are operational responsibilities of the
      Transparency Service operator and are outside the scope of this
      specification.</t>
    </section>

    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions. If this profile progresses beyond
      Informational status, the authors will propose an IANA registry
      for action_type values.</t>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front><title>Key words for use in RFCs to Indicate Requirement Levels</title><author initials="S." surname="Bradner"/><date year="1997" month="March"/></front>
          <seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front><title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title><author initials="B." surname="Leiba"/><date year="2017" month="May"/></front>
          <seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="8174"/>
        </reference>
        <reference anchor="RFC8610">
          <front><title>Concise Data Definition Language (CDDL)</title><author initials="H." surname="Birkholz"/><author initials="C." surname="Vigano"/><author initials="C." surname="Bormann"/><date year="2019" month="June"/></front>
          <seriesInfo name="RFC" value="8610"/>
        </reference>
        <reference anchor="RFC8785">
          <front><title>JSON Canonicalization Scheme (JCS)</title><author initials="A." surname="Rundgren"/><author initials="B." surname="Jordan"/><author initials="S." surname="Erdtman"/><date year="2020" month="June"/></front>
          <seriesInfo name="RFC" value="8785"/>
        </reference>
        <reference anchor="RFC9052">
          <front><title>CBOR Object Signing and Encryption (COSE): Structures and Process</title><author initials="J." surname="Schaad"/><date year="2022" month="August"/></front>
          <seriesInfo name="RFC" value="9052"/>
        </reference>
        <reference anchor="RFC9562">
          <front><title>Universally Unique IDentifiers (UUIDs)</title><author initials="K." surname="Davis"/><author initials="B." surname="Peabody"/><author initials="P." surname="Leach"/><date year="2024" month="May"/></front>
          <seriesInfo name="RFC" value="9562"/>
        </reference>
        <reference anchor="RFC8392">
          <front><title>CBOR Web Token (CWT)</title><author initials="M." surname="Jones"/><author initials="E." surname="Wahlstroem"/><author initials="S." surname="Erdtman"/><author initials="H." surname="Tschofenig"/><date year="2018" month="May"/></front>
          <seriesInfo name="RFC" value="8392"/>
        </reference>
        <reference anchor="RFC9597">
          <front><title>CBOR Web Token (CWT) Claims in COSE Headers</title><author initials="T." surname="Looker"/><author initials="M.B." surname="Jones"/><date year="2024" month="June"/></front>
          <seriesInfo name="RFC" value="9597"/>
        </reference>
        <reference anchor="RFC9360">
          <front><title>CBOR Object Signing and Encryption (COSE): Header Parameters for Carrying and Referencing X.509 Certificates</title><author initials="J." surname="Schaad"/><date year="2023" month="February"/></front>
          <seriesInfo name="RFC" value="9360"/>
        </reference>
        <reference anchor="I-D.ietf-scitt-architecture">
          <front><title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title><author initials="H." surname="Birkholz"/><author initials="A." surname="Delignat-Lavaud"/><author initials="C." surname="Fournet"/><date year="2025" month="October"/></front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scitt-architecture-22"/>
        </reference>
        <reference anchor="I-D.ietf-cose-merkle-tree-proofs">
          <front><title>COSE Receipts</title><author initials="O." surname="Steele"/><author initials="H." surname="Birkholz"/><author initials="A." surname="Delignat-Lavaud"/><author initials="C." surname="Fournet"/><date year="2025" month="September"/></front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-merkle-tree-proofs-18"/>
        </reference>
        <reference anchor="I-D.ietf-scitt-scrapi">
          <front>
            <title>SCITT Reference APIs</title>
            <author initials="H." surname="Birkholz"/>
            <author initials="J." surname="Geater"/>
            <date year="2024"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scitt-scrapi"/>
        </reference>
      </references>

      <references>
        <name>Informative References</name>
        <reference anchor="FINRA-4511">
          <front><title>Books and Records</title><author><organization>FINRA</organization></author><date/></front>
          <seriesInfo name="FINRA Rule" value="4511"/>
        </reference>
        <reference anchor="SEC-17a-4">
          <front><title>Records to be Preserved by Certain Exchange Members</title><author><organization>SEC</organization></author><date/></front>
          <seriesInfo name="17 CFR" value="240.17a-4"/>
        </reference>
        <reference anchor="DORA">
          <front><title>Digital Operational Resilience Act</title><author><organization>European Parliament and Council</organization></author><date year="2022"/></front>
          <seriesInfo name="Regulation (EU)" value="2022/2554"/>
        </reference>
        <reference anchor="MAS-AI-RM">
          <front><title>Guidelines on AI Risk Management</title><author><organization>Monetary Authority of Singapore</organization></author><date year="2025" month="November"/></front>
        </reference>
        <reference anchor="PCI-DSS-4">
          <front><title>Payment Card Industry Data Security Standard v4.0</title><author><organization>PCI SSC</organization></author><date year="2025" month="March"/></front>
        </reference>
        <reference anchor="MIFID-II">
          <front><title>Markets in Financial Instruments Directive</title><author><organization>European Parliament and Council</organization></author><date year="2014"/></front>
          <seriesInfo name="Directive" value="2014/65/EU"/>
        </reference>
        <reference anchor="EES">
          <front><title>Evidence Envelope Specification v0.1</title><author><organization>VERIDIC Inc.</organization></author><date year="2026"/></front>
          <seriesInfo name="URL" value="https://theveridic.github.io/VERIDIC/standards/ees/v0.1"/>
        </reference>
        <reference anchor="SPIFFE">
          <front><title>Secure Production Identity Framework for Everyone</title><author><organization>SPIFFE Project</organization></author><date year="2024"/></front>
        </reference>
        <reference anchor="VCP">
          <front><title>SCITT Profile for Financial Trading Audit Trails: VeritasChain Protocol (VCP)</title><author initials="T." surname="Kamimura"/><date year="2025" month="December"/></front>
          <seriesInfo name="Internet-Draft" value="draft-kamimura-scitt-vcp-02"/>
        </reference>
      </references>
    </references>



    
  </back>
</rfc>
