<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- -02 generated by kramdown-rfc 1.7.39; -03 hand-edited from -02:
       CMW reference upgraded from draft-ietf-rats-msg-wrap to RFC 9999 (published July 2026),
       Section 8.2 binding anchor added, IANA parenthetical sharpened.
       -04 candidate separates Evidence freshness from Attestation Result applicability,
       defines a provisional EAT claim vocabulary, and makes roles, bootstrap, AR4SI
       projection, test vectors, and adjacent AUDIT/VACR work explicit. -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-sokolov-rats-aep-composition-04" category="info" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="AEP over RATS">Composing Application-Layer Action Evidence with Remote Attestation Procedures</title>
    <seriesInfo name="Internet-Draft" value="draft-sokolov-rats-aep-composition-04"/>
    <author initials="A." surname="Sokolov" fullname="Anton Sokolov">
      <organization>Tyche Institute</organization>
      <address>
        <postal>
          <city>Tallinn</city>
          <country>Estonia</country>
        </postal>
        <email>anton.sokolov@tyche.institute</email>
      </address>
    </author>
    <date year="2026" month="August" day="13"/>
    <area>Security</area>
    <workgroup>Remote ATtestation ProcedureS (RATS)</workgroup>
    <keyword>attestation</keyword>
    <keyword>evidence</keyword>
    <keyword>AI agents</keyword>
    <keyword>accountability</keyword>
    <abstract>
      <t>This document sketches a composition pattern in which an application-layer "action evidence package"
(AEP) -- a signed action record that can be hash-linked to earlier records and that reports an action taken
by an automated (for example, AI-agent) system, the authority under which it was taken, and its outcome -- is treated as Evidence in the sense of the RATS
Architecture (RFC 9334) and bound to platform Evidence produced by a hardware root of trust. The intent is
that a single Verifier, or a composition of Verifiers, can appraise both the platform state and the
application-layer record together, and emit an Attestation Result that a Relying Party can use to reason
about <em>what an automated system reports it did</em> and <em>the appraised state of the platform associated
with that record</em>. The composition does not turn a self-reported action or outcome into an independently
observed fact; it prevents the Relying Party from having to rely on an unbound operator-side log alone. This
is an individual sketch intended to ask the working group whether the pattern is already covered by existing
mechanisms or warrants a short document.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Records of automated decision-making are increasingly produced for accountability purposes: an action
identifier, an authorising principal, inputs and tool calls, and an outcome, optionally hash-linked so that
later modification is detectable. Such an action evidence package (AEP) is useful but has the standard self-report limitation:
every field is asserted by the same software stack whose integrity is in question. The signature proves the
record was produced by a key the runtime holds; it does not prove what the runtime <em>was</em>.</t>
      <t>The RATS Architecture <xref target="RFC9334"/> separates the party that produces Evidence (Attester), the party that
appraises it (Verifier), and the party that acts on the verdict (Relying Party). Binding an AEP to platform
Evidence appraised under RATS anchors the self-report to an independently appraised platform state, but does
not independently observe the action or its external effect. This document describes the composition and
asks whether it is novel enough to specify.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <t>This document uses RATS terminology as defined in <xref target="RFC9334"/>: the roles Attester, Verifier, Relying Party,
Endorser, and Reference Value Provider, and the conceptual messages Evidence, Endorsements, Reference Values,
and Attestation Results.</t>
    </section>
    <section anchor="scope">
      <name>Scope</name>
      <t>This document defines a composition pattern and a provisional claim vocabulary. It does not define an
appraisal algorithm, mandate language, discovery protocol, transparency service, or authorisation policy.
In particular, a Verifier decides how Evidence supports an Attestation Result, and a Relying Party decides
whether that result and the referenced authority permit an action. The examples in this document do not
turn an application authorisation decision into a RATS trustworthiness claim.</t>
    </section>
    <section anchor="named-entities">
      <name>Named Entities and Trust Boundaries</name>
      <t>RATS roles are functions rather than deployment units. The following entities name the functions used in
this composition. An implementation can co-locate them, but it <bcp14>MUST</bcp14> preserve the role and key boundaries in
its evidence and policy records.</t>
      <dl>
        <dt>Action Principal</dt>
        <dd><t>The person or organisation whose authority is referenced by the action. This is an application role,
not a new RATS role.</t></dd>
        <dt>Mandate Issuer</dt>
        <dd><t>The entity that signs or otherwise authenticates the bounded authority. It can also be an Endorser
only when it separately vouches for capabilities of the Attester in the sense of <xref target="RFC9334"/>;
signing a mandate does not by itself produce a RATS Endorsement or appraise platform Evidence.</t></dd>
        <dt>Agent Runtime Attester</dt>
        <dd><t>The entity that produces the AEP Evidence. In the minimal deployment, it contains a software
Attesting Environment implemented by the action recorder and a co-located runtime Target Environment whose
behaviour is being reported. Co-location is permitted by <xref target="RFC9334"/> but leaves the AEP as a
self-report until it is bound to independently appraised platform Evidence.</t></dd>
        <dt>Platform Attesting Environment</dt>
        <dd><t>The TPM- or TEE-backed combination that collects Claims about the platform Target Environment,
protects the attestation key, and produces platform Evidence. A TPM alone does not collect Claims; the
measurement component that feeds it is part of the Attesting Environment. This environment binds the AEP
digest or linking claim to measured state.</t></dd>
        <dt>Verifier</dt>
        <dd><t>The entity that appraises the AEP Evidence and platform Evidence against Appraisal Policy for Evidence,
Reference Values, and Endorsements, and emits an Attestation Result.</t></dd>
        <dt>AgentRuntimeEndorser</dt>
        <dd><t>A legacy deployment label for a service that may appraise runtime Evidence, validate a mandate, and
issue an application-layer statement binding the appraised runtime to that mandate. That statement is not a
RATS Endorsement merely because of the deployment label, and the label is not a new RATS role. A deployment
that combines Verifier, Endorser, and application binding functions <bcp14>MUST</bcp14> identify which output was
produced under which function, key, and policy.</t></dd>
        <dt>Relying Party</dt>
        <dd><t>The entity that consumes the Attestation Result and application authority and decides whether to
accept the action or its record.</t></dd>
        <dt>Audit Consumer</dt>
        <dd><t>An auditor or audit service that correlates the AEP with interaction, delegation, authorisation-transition,
and service-side records. This aligns with the consumer role in <xref target="I-D.kuehlewind-audit-architecture"/>.</t></dd>
      </dl>
      <t>The deployment Trusted Computing Base (TCB) includes the action recorder and binding gate, the Platform
Attesting Environment, the Verifier implementation and policies, the configured trust-anchor path for
Endorsements and Reference Values, and the keys used to authenticate mandates and results. Artifact stores,
mirrors, and transports need not be trusted for integrity when every consumed object is authenticated and
freshness-checked. This TCB statement is deployment guidance; TCB is not introduced as a RATS architectural
role.</t>
    </section>
    <section anchor="the-action-evidence-package">
      <name>The Action Evidence Package</name>
      <t>An AEP is an application-layer, signed action record. For the purposes of this document its salient
properties are: (a) it reports an action, an authorising principal, and an outcome; (b) it can link to a
predecessor for tamper-evidence, although a hash chain alone does not prevent truncation or equivocation; and
(c) it is produced by the same software stack that performs the action. Property (c) is precisely why it
benefits from composition with platform Evidence.</t>
      <t>More precisely, this document distinguishes the <em>AEP Record</em> from the <em>AEP Evidence profile</em>. The
AEP Record can contain a richer event log. The AEP Evidence profile is an EAT Claims-Set that identifies one
action and binds digests of the authority, canonical action, outcome, optional predecessor record, and
platform Evidence. A conversation record such as <xref target="I-D.birkholz-verifiable-agent-conversations"/>
or a distributed audit record such as <xref target="I-D.kuehlewind-audit-architecture"/> can be carried as a
submodule only when encoded as one of the submodule forms permitted by <xref target="RFC9711"/>; otherwise it
can be referenced by a separately defined integrity-protected digest. It is not copied wholesale into every
claim.</t>
    </section>
    <section anchor="aep-claim-vocabulary">
      <name>Provisional AEP EAT Claim Vocabulary</name>
      <t>The surrounding EAT Claims-Set can use the <tt>iat</tt>, <tt>exp</tt>, <tt>eat_nonce</tt>, and
<tt>submods</tt> claims according to <xref target="RFC9711"/> and the selected encoding. The following new
application claims are expressed in CDDL <xref target="RFC8610"/> and use provisional string labels for
review. The CDDL deliberately does not restate the standard EAT claims: their labels and value types differ
between CBOR and JSON, and a full profile must select and specify those encodings. This document does not
request numeric claim keys or reserve an IANA code point. In particular, the text-labelled CDDL below is a
vocabulary review aid and is not, by itself, a valid CBOR-encoded EAT profile: <xref target="RFC9711"/>
requires CBOR-encoded EAT claim keys to use integer labels.</t>
      <sourcecode type="cddl"><![CDATA[
aep-claims = {
  "aep_action_id" => tstr,
  "aep_authority_ref" => digest-ref,
  "aep_action_digest" => digest-ref,
  "aep_outcome_digest" => digest-ref,
  ? "aep_previous_digest" => digest-ref,
  "aep_platform_evidence_ref" => digest-ref,
  ? "aep_audit_context" => audit-context
}

digest-ref = {
  "hash_alg" => "sha-256",
  "digest" => bstr
}

audit-context = tstr
      ]]></sourcecode>
      <t>Each digest covers a deterministic byte string selected by the profile using the stated hash algorithm.
The profile or vector <bcp14>MUST</bcp14> identify those exact bytes and any canonicalisation rule; hashing an
ambiguous in-memory object or an unspecified JSON serialisation does not produce an interoperable binding.</t>
      <t>This revision does not define a complete EAT profile in the sense of Section 6.3 of <xref target="RFC9711"/>:
the encoding, serialisation, protection, and claims-requirement items listed there are not settled by the
prototype reported here. Section 6.2 of <xref target="RFC9711"/> states that the <tt>eat_profile</tt> claim
<bcp14>MUST NOT</bcp14> be used to identify a partial profile, so this revision names none and presents the
vocabulary with text labels only. Settling those items, and stating the CBOR and JSON encodings, is expected
before any profile identifier or numeric label assignment is proposed.</t>
      <dl>
        <dt>aep_action_id</dt>
        <dd><t>An identifier unique in the action producer's domain. It supports duplicate and replay detection but
is not, by itself, proof of uniqueness.</t></dd>
        <dt>aep_authority_ref</dt>
        <dd><t>A digest of the exact mandate, grant, or other authority evaluated for this action.</t></dd>
        <dt>aep_action_digest</dt>
        <dd><t>A digest of the canonical action request as observed at the point where effect can occur.</t></dd>
        <dt>aep_outcome_digest</dt>
        <dd><t>A digest of the canonical outcome or effect record. A success assertion without independently
observable effect evidence remains an application-layer claim.</t></dd>
        <dt>aep_previous_digest</dt>
        <dd><t>The digest of the preceding AEP Record when the producer maintains a hash chain.</t></dd>
        <dt>aep_platform_evidence_ref</dt>
        <dd><t>The linking digest for the platform Evidence or Attestation Result bound at record time.</t></dd>
        <dt>aep_audit_context</dt>
        <dd><t>An opaque, producer-scoped correlation handle that lets an Auditor relate this record to the
surrounding Interaction, Delegation, and Authorization Transition Records. Its internal structure is
deployment-defined: <xref target="I-D.kuehlewind-audit-architecture"/> proposes its own context-propagation
fields, and this document does not restate them. It is correlation context, not an authorisation decision,
and it can be identifying; see <xref target="privacy-considerations"/>.</t></dd>
      </dl>
      <t>The AEP Evidence Claims-Set <bcp14>MUST</bcp14> receive integrity protection that covers the action,
authority, outcome, and platform references. This revision does not select the EAT protection mechanism or
algorithms; a full profile must do so. A locator, if used to retrieve a detached object, is not a substitute
for an integrity-protected digest.</t>
    </section>
    <section anchor="composition-with-rats">
      <name>Composition with RATS</name>
      <t>The composition treats the AEP as application-layer Evidence conveyed alongside platform Evidence:</t>
      <ol spacing="normal" type="1"><li>
          <t>The platform produces hardware-rooted Evidence (for example, a TPM quote over measured-boot registers,
or a TEE attestation token), appraised against Reference Values (for example, conveyed as a Concise
Reference Integrity Manifest <xref target="I-D.ietf-rats-corim"/>) and Endorsements by a Verifier.</t>
        </li>
        <li>
          <t>The AEP Evidence profile is conveyed as a further Evidence item. Candidate conveyances are an EAT
<xref target="RFC9711"/> whose Claims-Set carries the AEP Evidence claims, or a Collection CMW -- the RATS
Conceptual Message Wrapper <xref target="RFC9999"/> -- that groups platform Evidence and the AEP Evidence
into one message. EAT submodules can carry a nested Claims-Set, nested token, or Detached-Submodule-Digest;
the last of these is a digest of a detached Claims-Set and is not a generic digest wrapper for an arbitrary
AEP Record.</t>
        </li>
        <li>
          <t>A Verifier -- or, following the layered Platform-Verifier / Workload-Verifier pattern of
<xref target="I-D.ietf-rats-multi-verifier"/>, a platform Verifier and an application Verifier in composition --
appraises both and emits an Attestation Result.</t>
        </li>
      </ol>
      <t>The binding between the two is load-bearing: the AEP, at record time, <bcp14>SHOULD</bcp14> incorporate a reference to a
fresh platform appraisal (or to the platform Evidence and the nonce that scoped it), so that a later Relying
Party can ask not only "what does the automated system report that it did, and under what authority?" but
"and is that report bound to a platform whose state was independently attested within the same freshness
window?". The <xref target="RFC9334"/> Section
10 freshness mechanisms -- nonces, synchronised-clock timestamps, and Epoch IDs/handles -- apply unchanged.</t>
      <t>When the composition is modelled as Evidence for a composite or layered Attester in a single Collection
CMW, Section 8.2 of <xref target="RFC9999"/> requires the Evidence messages to be cryptographically bound
together. The binding need not be an outer signature: it can be achieved through identifiers or linking
claims, such as nonces, across the collection's items. An integrity-protected digest link from the AEP
Evidence to the corresponding platform Evidence can contribute to that binding, but the collection designer
must ensure that the complete set of items is protected against substitution as Section 8.2 requires.</t>
    </section>
    <section anchor="discovery-and-bootstrap">
      <name>Discovery and Bootstrap</name>
      <t>This composition does not assume zero-input discovery. Before it can accept an Endorsement, Reference Value,
Verifier result, mandate, or AgentRuntimeEndorser output, a deployment has at least one local input: for
example, a configured trust anchor, a configured signed trusted-list URI, or a provisioning channel. DNS,
DHCP, Web discovery, and registries can distribute locators, but none creates authority without a configured
acceptance rule.</t>
      <t>In one deployment pattern, the Relying Party starts from a configured URI for a signed trusted list. It
authenticates the list to a locally configured root, checks list status, validity and service history, and
uses the resulting entry to locate an AgentRuntimeEndorser. Authority therefore traces to the configured
root and policy, not merely to possession of an endpoint key.</t>
    </section>
    <section anchor="a-result-vocabulary">
      <name>AR4SI Projection and Application Decision</name>
      <t>The composition has two outputs that must not be collapsed. First, a Verifier can emit an EAR
<xref target="I-D.ietf-rats-ear"/> containing an AR4SI trustworthiness vector
<xref target="I-D.ietf-rats-ar4si"/> for facets it actually appraised. Second, application policy computes
Authorised, Unauthorised, or Indeterminate from the authority and action claims. The application decision is
not an AR4SI tier.</t>
      <t>This document proposes no projection of its own. What follows is a report of the values one open-source
Verifier returned when the platform-side experiment was exercised against it, as described in
<xref target="appraisal-by-an-open-source-verifier"/>:</t>
      <ul>
        <li>in the good state, the Verifier populated <tt>executables</tt> with the affirming value <tt>2</tt>;</li>
        <li>when the selected PCR composite diverged from the provisioned Reference Value, it populated
<tt>executables</tt> with <tt>33</tt>, a warning-tier value, while returning an overall contraindicated
status;</li>
        <li>when one byte inside the signed attestation structure was altered, it set <tt>99</tt> on every facet
and returned contraindicated, recording a signature-verification problem;</li>
        <li>in Cases A and B the remaining facets carried the value <tt>0</tt>. AR4SI defines that value as "No
assertion": the Evidence was insufficient to make a conclusion. Although AR4SI describes an absent facet as
not applicable to the submitted Evidence, it says that a Relying Party's appraisal policy should not
distinguish value <tt>0</tt> from no Trustworthiness Claim; neither form makes a trustworthiness assertion.</li>
      </ul>
      <t>No projection is proposed for the action axis either. Whether a composition of this kind warrants an
additional trustworthiness claim, or is better reported through the application decision alone, is left as a
question for the working group.</t>
      <t>AR4SI values are signed 8-bit integers grouped into none, affirming, warning, and contraindicated tiers.
The exact method by which a Verifier derives them is out of scope, consistent with AR4SI. Freshness is also
separate: an expired result or nonce mismatch can make an otherwise valid appraisal inapplicable without
inventing an "expired" AR4SI tier.</t>
    </section>
    <section anchor="grounded-use-case">
      <name>Grounded Use Case: A Bounded Payment Action</name>
      <t>A person approves a mandate allowing an automated runtime to pay one named supplier up to a fixed amount
before an expiry time. The runtime later submits a payment instruction to a service. At the point where the
instruction can take effect, the recorder creates an AEP with: the mandate digest in
<tt>aep_authority_ref</tt>; the canonical instruction digest in <tt>aep_action_digest</tt>; the service result
digest in <tt>aep_outcome_digest</tt>; and the current platform Evidence reference in
<tt>aep_platform_evidence_ref</tt>. For an authorised Auditor, the audit context can correlate the AEP with
records identifying the person, runtime, parent approval event, and authorisation state in force.</t>
      <t>The Verifier appraises the runtime and platform Evidence and emits an EAR. The Relying Party separately
checks that the mandate is valid, the supplier and amount are in scope, the action and outcome digests match
the records it observed, the action identifier has not been consumed, and the EAR is applicable now. An
Auditor can then correlate this AEP with the Interaction, Delegation, Authorization Transition, and
service-side Action Records described by <xref target="I-D.kuehlewind-audit-architecture"/>. The use case is
grounded because each acceptance and refusal condition corresponds to an observable claim or adjacent
record; it does not require disclosure of a model's internal reasoning.</t>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>An implementation experiment should publish positive and negative vectors for at least the following
cases. The Verifier run described in <xref target="appraisal-by-an-open-source-verifier"/> exercises the
platform-axis conditions of V2 and V3 and the good-state platform conditions of V1. It does not exercise V4:
the run submitted no stale replay, and the unmodified reference scheme performed no nonce comparison, as
<xref target="sec-freshness"/> records. The outcome-substitution case of V5, and V6 in its entirety, are
specified here and are not claims about that run:</t>
      <dl>
        <dt>V1 — known instance and approved measurement</dt>
        <dd><t>The attestation key and PCR composite match provisioned material, all AEP digests bind, and the
nonce is fresh. The EAR is affirming for the supported facets; application authorisation is evaluated
separately.</t></dd>
        <dt>V2 — measurement substitution</dt>
        <dd><t>The quote remains correctly signed but the PCR composite differs from the Reference Value. The
exercised Verifier reports <tt>executables=33</tt> in the warning tier and an overall contraindicated EAR
status.</t></dd>
        <dt>V3 — forged platform Evidence</dt>
        <dd><t>One byte in the signed attestation structure is changed. Cryptographic validation fails and the
result is contraindicated.</t></dd>
        <dt>V4 — stale replay</dt>
        <dd><t>A previously valid quote is submitted in a session with a different expected nonce. Evidence
appraisal must fail closed even though the old signature and PCR value remain valid.</t></dd>
        <dt>V5 — action or outcome substitution</dt>
        <dd><t>The platform Evidence is retained while the canonical action or outcome object is changed. The
changed object no longer matches the integrity-protected digest in the AEP Evidence; when the outcome digest
also contributes to the signed platform Evidence, outcome substitution breaks that reverse binding as well.
The Relying Party rejects the record.</t></dd>
        <dt>V6 — authority substitution or replay</dt>
        <dd><t>The action is paired with another mandate, or a consumed <tt>aep_action_id</tt> is reused. Platform
appraisal can remain affirming, but application policy returns Unauthorised. This vector demonstrates why
AR4SI and authorisation verdicts are separate.</t></dd>
      </dl>
      <t>Each vector must identify the exact input bytes, expected layer of rejection, expected EAR fields when an
EAR is produced, and expected application decision. A single boolean "valid" result is insufficient for
cross-implementation diagnosis.</t>
    </section>
    <section anchor="feasibility-note">
      <name>Prototype Observations (Informative)</name>
      <t>The appraisal algorithms and evidence-scheme implementation are out of scope. The prototype is retained
only to show that the named bindings and refusal cases can be exercised and to derive the minimal result
report and test vectors above.</t>
      <t>A small emulated feasibility check (software TPM via swtpm, with a minimal Verifier stand-in) folds the
hash of a synthetic AEP Record, which includes its outcome digest, together with a fresh nonce into an
attestation-key-signed quote, with a model-artefact measurement in a platform register. It resolves the three
platform-axis cases and shows that the old quote fails validation when checked against different expected
AEP-derived qualifying data. This is a binding-sensitivity check, not an appraisal of the truth of the
reported outcome or a complete implementation of the AEP Evidence Claims-Set. It is emulated and minimal; it
demonstrates the cryptographic mechanism, not a hardware-rooted guarantee. Details are in
<xref target="ZENODO-AEP"/>.</t>
    </section>
    <section anchor="appraisal-by-an-open-source-verifier">
      <name>Appraisal by an Open-Source RATS Verifier</name>
      <t>To compare the platform-side result vocabulary against a real Attestation Result rather than a stand-in,
the TPM Evidence and its AEP-outcome-digest measurement were exercised against an instance of the open-source
Project Veraison implementation of the RATS Verifier role, built and run locally. The run did not implement
the provisional AEP Evidence Claims-Set, convey an AEP and platform Evidence in one Collection CMW, or ask
the Verifier to appraise application authorisation. It is therefore a platform-side feasibility exercise,
not an end-to-end implementation of the composition. This is an independent exercise of an open-source
implementation; it is NOT a claim that the implementation, experiment, or AEP profile is conformant, and it
does not imply endorsement or partnership with the Veraison project.</t>
      <t>The platform Attesting Environment used an emulated software TPM (swtpm), not a hardware root of trust. A fresh EC P-256 Attestation Key (AK) was created in the swtpm; the AEP outcome digest was measured into a Platform Configuration Register (PCR 4); and a genuine swtpm TPM quote was produced over PCRs 1-4 with the freshness nonce as qualifying data. The quote was packed into the Verifier reference TPM evidence wire format (NODE_ID || SIZE || TPMS_ATTEST || TPMT_SIGNATURE). A Concise Reference Integrity Manifest (CoRIM) was provisioned carrying two items keyed by a single instance identifier: the AK public key as a trust anchor, and the golden PCR composite digest as a Reference Value. The quote was then submitted through one challenge-response session per appraisal, and the Verifier returned a signed EAR.</t>
      <t>The verdicts below were read from the decoded EARs, which used the Verifier's own profile:</t>
      <ul>
        <li>Case A, good state with the AEP outcome digest measured into PCR 4: the Verifier returned ear.status "affirming".</li>
        <li>Case B, PCR 4 re-measured with a different outcome so the PCR composite digest diverges from the golden Reference Value: "contraindicated".</li>
        <li>Case D, one byte flipped inside TPMS_ATTEST so the quote signature no longer verifies against the AK: "contraindicated" (tampered platform Evidence, rejected).</li>
      </ul>
      <t>Case A was independently re-verified outside the Verifier: the quote PCR digest equals the provisioned golden value, and the signature verifies against the AK public key. These are the two substantive appraisal checks independently repeated here, not an exhaustive description of the Verifier's parsing and trust-anchor processing. The results confirm the observed affirming/contraindicated distinction used by the test vectors; they do not show that the reference scheme emitted every AR4SI facet proposed in <xref target="a-result-vocabulary"/>. Freshness is a separate condition, and the reference scheme used here did not enforce it, which motivates the freshness consideration below.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Composition does not dissolve trust assumptions; it relocates them. The platform axis depends on the
provenance and protection of the Attesting Environment, applicable Endorsements or directly configured trust
anchors, Reference Values, and the Verifier's independence. The AEP axis depends on the action recorder and
its signing key. Platform Evidence grounds that key or recorder only when the deployment measures or otherwise
binds them into the appraised state; the experiment reported here binds an outcome digest, not the AEP signing
key or the truth of the reported effect. Binding an AEP to a platform appraisal is only as fresh as the weaker
of the two freshness mechanisms. Attesting a specific model or workload version requires that artefact be
measured into the attested state, which is a deployment commitment.</t>
      <t>If a composition claims the reverse output-binding exercised here, a forged AEP outcome presented under
otherwise-valid platform Evidence <bcp14>MUST</bcp14> be detectable: the outcome digest must contribute to data
covered by the platform Evidence's integrity protection. A one-way AEP reference to platform Evidence alone
does not establish that property. The feasibility note and the appraisal in
<xref target="appraisal-by-an-open-source-verifier"/> demonstrate the cryptographic binding in software-TPM
emulation. Using a hardware TPM can strengthen key protection, but it still proves only that the supplied
digest contributed to the quoted state; the truth of the action or external effect depends on the recorder
and measurement path.</t>
      <section anchor="sec-freshness">
        <name>Evidence Freshness and Result Applicability Are Separate</name>
        <t>The platform-side appraisal above surfaced a freshness observation worth recording for implementers. A challenge-response transport supplies a session nonce, and the EAT freshness mechanisms of RFC 9711 are available; but whether the nonce is actually enforced depends on the Verifier appraisal scheme, not on the transport. In the unmodified reference TPM scheme exercised here, the appraisal performed quote-signature and PCR-reference checks, but it did not compare the nonce the Attester bound into the quote qualifying data (the ExtraData field of TPMS_ATTEST) against the session expected nonce. As a result, a replayed or stale quote, correctly signed over a matching PCR state, could still be appraised as affirming. The unmodified run applied no freshness check at any layer: neither the reference scheme nor the surrounding experiment compared the bound nonce against the session expected nonce.</t>
        <t>Evidence freshness belongs in the Verifier's Appraisal Policy for Evidence. The idiomatic remedy has two small, separable pieces and applies generally to any scheme whose Evidence carries an attester-bound nonce in signed qualifying data: (1) the appraisal scheme surfaces the attester-bound qualifying data (here, TPMS_ATTEST.ExtraData) as an extracted claim, so that an appraisal policy has a value to compare; and (2) the appraisal policy compares that claim against the expected nonce retained for the session and returns a contraindicated verdict when they differ. If a deployment cannot perform that comparison inside the Verifier, the outer application must fail closed and record the compensating check rather than silently treating the otherwise-affirming result as fresh. This is an observation about a community-maintained reference scheme, not a deployed production trust service.</t>
        <t>The Relying Party has a separate freshness decision after the Verifier issues an Attestation Result. At the moment it performs an operation, it decides whether that result remains applicable under its Appraisal Policy for Attestation Results and its application policy. This includes any result expiry or local maximum age, binding to the exact AEP, action and request context, and single-use or consumed state where the application requires it. A historical record can remain cryptographically valid while no longer authorising a replay. The effective freshness of an AEP/platform composition is therefore bounded by the weaker of the Evidence-appraisal window and the result/action-applicability window.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The actor, on-behalf-of party, trace identifiers, action, mandate, outcome, platform identity, and timing
can be identifying or commercially sensitive even when represented only by digests. Stable identifiers can
enable correlation across actions and administrative domains. A producer <bcp14>SHOULD</bcp14> disclose only claims needed
by the Relying Party, use context-scoped identifiers where global correlation is unnecessary, and place
sensitive conversation or audit records in access-controlled detached objects rather than inline submodules.</t>
      <t>Digesting low-entropy fields does not anonymise them. A party that can guess a supplier, amount, tool name,
or mandate text can test the guess against a disclosed digest. Profiles therefore need explicit disclosure,
retention, and salt/keyed-commitment decisions. An Auditor's need to reconstruct a record does not imply that
every Relying Party should receive the underlying conversation or authority object.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions. (If a future revision requests registered EAT claim labels for the
provisional vocabulary, or registers a media type that would identify an AEP carried as a Record CMW or as an entry of a Collection CMW
<xref target="RFC9999"/>, the corresponding registrations would appear here.)</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8610.xml">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC9334" target="https://www.rfc-editor.org/info/rfc9334" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9334.xml">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="RFC9711" target="https://www.rfc-editor.org/info/rfc9711" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9711.xml">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="L. Lundblade" initials="L." surname="Lundblade"/>
            <author fullname="G. Mandyam" initials="G." surname="Mandyam"/>
            <author fullname="J. O'Donoghue" initials="J." surname="O'Donoghue"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="April" year="2025"/>
            <abstract>
              <t>An Entity Attestation Token (EAT) provides an attested claims set that describes the state and characteristics of an entity, a device such as a smartphone, an Internet of Things (IoT) device, network equipment, or such. This claims set is used by a relying party, server, or service to determine the type and degree of trust placed in the entity.</t>
              <t>An EAT is either a CBOR Web Token (CWT) or a JSON Web Token (JWT) with attestation-oriented claims.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9711"/>
          <seriesInfo name="DOI" value="10.17487/RFC9711"/>
        </reference>
        <reference anchor="RFC9999" target="https://www.rfc-editor.org/info/rfc9999" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9999.xml">
          <front>
            <title>Remote ATtestation procedureS (RATS) Conceptual Message Wrapper (CMW)</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="July" year="2026"/>
            <abstract>
              <t>The conceptual messages introduced by the Remote ATtestation procedureS (RATS) architecture (RFC 9334) are protocol-agnostic data units that are conveyed between RATS roles during RATS interactions. Conceptual messages describe the meaning and function of such data units within RATS data flows without specifying a wire format, encoding, transport mechanism, or processing details. The initial set of conceptual messages is defined in Section 8 of RFC 9334 and includes Evidence, Attestation Results, Endorsements, Reference Values, and Appraisal Policies.</t>
              <t>This document introduces the Conceptual Message Wrapper (CMW) that provides a common structure to encapsulate these messages. It defines a dedicated Concise Binary Object Representation (CBOR) tag, corresponding JSON Web Token (JWT) and CBOR Web Token (CWT) claims, and an X.509 extension.</t>
              <t>Together, these mechanisms allow CMWs to be used in CBOR-based protocols, web APIs using JWTs and CWTs, and PKIX artifacts such as X.509 certificates. Additionally, this document defines media types and CoAP Content-Formats that may be used to identify CMWs when transported over protocols such as HTTP, MIME, and CoAP.</t>
              <t>The goal is to improve the interoperability and flexibility of remote attestation protocols. Introducing a shared message format such as CMW enables consistent support for different attestation message types, enables the evolution of message serialization formats without breaking compatibility, and avoids the need to redefine how messages are handled within each protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9999"/>
          <seriesInfo name="DOI" value="10.17487/RFC9999"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-rats-ar4si" target="https://datatracker.ietf.org/doc/html/draft-ietf-rats-ar4si-10" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-rats-ar4si.xml">
          <front>
            <title>Attestation Results for Secure Interactions</title>
            <author fullname="Eric Voit" initials="E." surname="Voit">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Hardjono" initials="T." surname="Hardjono">
              <organization>MIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Vincent Scarlata" initials="V." surname="Scarlata">
              <organization>Intel</organization>
            </author>
            <date day="18" month="May" year="2026"/>
            <abstract>
              <t>This document defines reusable Attestation Result information elements. When these elements are offered to Relying Parties as Evidence, different aspects of Attester trustworthiness can be evaluated. Additionally, where the Relying Party is interfacing with a heterogeneous mix of Attesting Environment and Verifier types, consistent policies can be applied to subsequent information exchange between each Attester and the Relying Party. This document also defines two serialisations of the proposed information model, utilising CBOR and JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-ar4si-10"/>
        </reference>
        <reference anchor="I-D.ietf-rats-ear" target="https://datatracker.ietf.org/doc/html/draft-ietf-rats-ear-04" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-rats-ear.xml">
          <front>
            <title>EAT Attestation Results</title>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Eric Voit" initials="E." surname="Voit">
              <organization>Cisco</organization>
            </author>
            <author fullname="Sergei Trofimov" initials="S." surname="Trofimov">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="26" month="May" year="2026"/>
            <abstract>
              <t>This document defines the EAT Attestation Result (EAR) message format. EAR is used by a verifier to encode the result of the appraisal over an attester's evidence. It embeds an AR4SI's "trustworthiness vector" to present a normalized view of the evaluation results, thus easing the task of defining and computing authorization policies by relying parties. Alongside the trustworthiness vector, EAR provides contextual information bound to the appraisal process. This allows a relying party (or an auditor) to reconstruct the frame of reference in which the trustworthiness vector was originally computed. EAR supports simple devices with one attester as well as composite devices that are made of multiple attesters, allowing the state of each attester to be separately examined. EAR can also accommodate registered and unregistered extensions. It can be serialized and protected using either CWT or JWT.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-ear-04"/>
        </reference>
        <reference anchor="I-D.ietf-rats-corim" target="https://datatracker.ietf.org/doc/html/draft-ietf-rats-corim-11" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-rats-corim.xml">
          <front>
            <title>Concise Reference Integrity Manifest</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>arm</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Independent</organization>
            </author>
            <author fullname="Wei Pan" initials="W." surname="Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>Remote Attestation Procedures (RATS) enable Relying Parties to assess the trustworthiness of a remote Attester and therefore to decide whether or not to engage in secure interactions with it. Evidence about trustworthiness can be rather complex and it is deemed unrealistic that every Relying Party is capable of the appraisal of Evidence. Therefore that burden is typically offloaded to a Verifier. In order to conduct Evidence appraisal, a Verifier requires not only fresh Evidence from an Attester, but also trusted Endorsements and Reference Values from Endorsers and Reference Value Providers, such as manufacturers, distributors, or device owners. This document specifies the information elements for representing Endorsements and Reference Values in CBOR format.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-corim-11"/>
        </reference>
        <reference anchor="I-D.ietf-rats-multi-verifier" target="https://datatracker.ietf.org/doc/html/draft-ietf-rats-multi-verifier-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-rats-multi-verifier.xml">
          <front>
            <title>Remote Attestation with Multiple Verifiers</title>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>Arm Ltd</organization>
            </author>
            <author fullname="Jun Zhang" initials="J." surname="Zhang">
              <organization>Huawei Technologies France S.A.S.U.</organization>
            </author>
            <author fullname="Houda Labiod" initials="H." surname="Labiod">
              <organization>Huawei Technologies France S.A.S.U.</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="5" month="May" year="2026"/>
            <abstract>
              <t>IETF RATS Architecture, defines the key role of a Verifier. In a complex system, this role needs to be performed by multiple Verfiers coordinating together to assess the full trustworthiness of an Attester. This document focuses on various topological patterns for a multiple Verifier system. It only covers the architectural aspects introduced by the Multi Verifier concept, which is neutral with regard to specific wire formats, encoding, transport mechanisms, or processing details.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-multi-verifier-00"/>
        </reference>
        <reference anchor="I-D.birkholz-verifiable-agent-conversations" target="https://datatracker.ietf.org/doc/html/draft-birkholz-verifiable-agent-conversations-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.birkholz-verifiable-agent-conversations.xml">
          <front>
            <title>Verifiable Agent Conversation Records</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="Tobias Heldt" initials="T." surname="Heldt"/>
            <author fullname="Orie Steele" initials="O." surname="Steele"/>
            <date day="25" month="February" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-birkholz-verifiable-agent-conversations-00"/>
        </reference>
        <reference anchor="I-D.kuehlewind-audit-architecture" target="https://datatracker.ietf.org/doc/html/draft-kuehlewind-audit-architecture-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.kuehlewind-audit-architecture.xml">
          <front>
            <title>An Architecture for Auditing AI Agent Delegation and Interactions</title>
            <author fullname="Mirja Kuehlewind" initials="M." surname="Kuehlewind"/>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz"/>
            <date day="18" month="May" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kuehlewind-audit-architecture-00"/>
        </reference>
        <reference anchor="ZENODO-AEP" target="https://doi.org/10.5281/zenodo.20818671">
          <front>
            <title>Hardware-rooted attestation for AI-agent evidence: composing IETF RATS with action evidence packages</title>
            <author initials="A." surname="Sokolov" fullname="Anton Sokolov">
              <organization/>
            </author>
            <date month="July" year="2026"/>
          </front>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Thanks to the Veraison community for the discussion that prompted this sketch.</t>
    </section>
  </back>
</rfc>
