<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.31 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-tsyrulnikov-rats-attested-inference-receipt-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="AIR v1">Attested Inference Receipt (AIR): A COSE/CWT Profile for Confidential AI Inference</title>

    <author initials="B." surname="Tsyrulnikov" fullname="Borys Tsyrulnikov">
      <organization>Cyntrisec</organization>
      <address>
        <email>borys@cyntrisec.com</email>
      </address>
    </author>

    <date year="2026" month="March" day="12"/>

    <area>Security</area>
    <workgroup>RATS</workgroup>
    <keyword>attestation</keyword> <keyword>AI inference</keyword> <keyword>receipt</keyword> <keyword>COSE</keyword> <keyword>CWT</keyword> <keyword>EAT</keyword> <keyword>confidential computing</keyword>

    <abstract>


<?line 65?>

<t>This document defines the Attested Inference Receipt (AIR), an
application-layer COSE_Sign1 envelope carrying CWT claims profiled
per the Entity Attestation Token (EAT) framework. An AIR receipt
binds model identity, input/output hashes, attestation-linked
metadata, and operational telemetry into a single signed artifact
suitable for independent third-party verification of a confidential
AI inference event.</t>

<t>AIR v1 targets single-inference receipts emitted by workloads running
inside hardware-isolated Trusted Execution Environments (TEEs). AIR
is attestation-linked: it carries measurements and a hash reference to
the platform attestation evidence associated with the inference, but
it does not replace platform-specific attestation verification. This
version defines AWS Nitro Enclaves and Intel TDX measurement profiles
only. Pipeline chaining, multi-inference receipts, and extensibility
mechanisms for additional claim or platform profiles are out of scope.</t>



    </abstract>



  </front>

  <middle>


<?line 84?>

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

<t>Deployments that run machine learning models on cloud infrastructure
lack a standardized, interoperable mechanism to prove what happened
during a specific inference. Existing attestation frameworks such as
RATS <xref target="RFC9334"/> establish platform identity and code integrity, but
they do not produce per-inference evidence binding a model, its
inputs and outputs, and the platform state into a single verifiable
artifact.</t>

<t>Platform attestation and ordinary logs are both necessary but
insufficient for this purpose. Platform attestation proves properties
of the workload and its execution environment, typically at a point in
time, while ordinary logs are implementation-specific and often
unsigned. Neither provides a standard, portable object that binds one
inference event to model identity, request/response hashes, and
attestation-linked metadata in a form a third party can verify
independently of the underlying platform.</t>

<t>The Attested Inference Receipt (AIR) fills this gap. An AIR receipt is
an application-layer COSE_Sign1 <xref target="RFC9052"/> envelope whose payload is
a CWT <xref target="RFC8392"/> claims set profiled as an EAT <xref target="RFC9711"/>. The
receipt is signed with Ed25519 <xref target="RFC8032"/> by the workload running
inside a Trusted Execution Environment (TEE). AIR verification is
split into two concerns: AIR-local verification of the signed receipt
itself, and platform-specific verification of the underlying
attestation evidence and key binding. This document standardizes the
former and references the latter, but does not replace platform-
specific attestation procedures.</t>

<t>AIR v1 is scoped to a single inference: one request processed by one
model inside one attested workload produces one receipt. Pipeline
chaining, multi-stage proofs, and integration with transparency logs
(such as SCITT <xref target="SCITT"/>) are deferred to future versions.</t>

<section anchor="goals"><name>Goals</name>

<t>The goals of AIR v1 are:</t>

<t><list style="numbers" type="1">
  <t>Define a receipt wire format using existing IETF standards
(COSE_Sign1, CWT, EAT).</t>
  <t>Bind model identity (cryptographic hash), input/output hashes,
attestation metadata, and operational telemetry in a single
signed envelope.</t>
  <t>Support AIR-local verification using standard COSE/CWT tooling,
while allowing deployments to combine AIR with separate
platform-specific attestation verification as needed.</t>
  <t>Carry platform measurements in a portable receipt shape while
preserving their platform-specific semantics via
<spanx style="verb">measurement_type</spanx>.</t>
  <t>Define an intentionally closed v1 profile with fail-closed
parsing semantics.</t>
</list></t>

</section>
<section anchor="non-goals"><name>Non-Goals</name>

<t>AIR v1 explicitly does not:</t>

<t><list style="symbols">
  <t>Define a transport protocol or session management scheme.</t>
  <t>Specify attestation document verification procedures (these are
platform-specific).</t>
  <t>Define an extension registry or compatibility mechanism for new
claim or platform profiles.</t>
  <t>Prove data deletion or model correctness.</t>
  <t>Provide regulatory certification or compliance guarantees.</t>
  <t>Define pipeline chaining or multi-inference receipts.</t>
</list></t>

</section>
</section>
<section anchor="requirements-language"><name>Requirements Language</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>

<?line -18?>

</section>
<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>Attested Inference Receipt (AIR):</dt>
  <dd>
    <t>An application-layer COSE_Sign1 signed CWT/EAT artifact emitted by
a workload after processing a single AI inference request inside a
TEE. The receipt binds model identity, input/output hashes,
attestation-linked metadata, and operational telemetry.</t>
  </dd>
  <dt>Confidential Workload:</dt>
  <dd>
    <t>The software executing inside a TEE that loads a model, processes
inference requests, and generates AIR receipts. In RATS
<xref target="RFC9334"/> terminology, the confidential workload acts as the
Attester.</t>
  </dd>
  <dt>Verifier:</dt>
  <dd>
    <t>An entity that validates an AIR receipt's signature, claim values,
and policy constraints. AIR-local verification can be performed
with standard COSE/CWT tooling, but full TEE assurance additionally
requires platform-specific verification of the underlying
attestation evidence and signing-key binding. In RATS <xref target="RFC9334"/>
terminology, this maps to the Verifier role.</t>
  </dd>
  <dt>Relying Party:</dt>
  <dd>
    <t>An entity that consumes the verification result to make trust
decisions (e.g., an auditor, compliance officer, or end user). In
RATS <xref target="RFC9334"/> terminology, this maps to the Relying Party role.</t>
  </dd>
  <dt>Endorser:</dt>
  <dd>
    <t>A party that provides endorsements or reference values used to
appraise the attested platform measurements. In typical AIR
deployments, this role is fulfilled by the TEE platform vendor or
attestation service.</t>
  </dd>
  <dt>Measurement Map:</dt>
  <dd>
    <t>The <spanx style="verb">enclave_measurements</spanx> claim containing platform-specific
register values carried in portability-oriented slots. The
<spanx style="verb">measurement_type</spanx> field determines the actual semantics of those
slots on each platform.</t>
  </dd>
  <dt>Receipt:</dt>
  <dd>
    <t>In this document, "receipt" always refers to an AIR receipt. Note
that this differs from the SCITT usage of "receipt" (which refers
to a countersigned statement from a transparency service). The two
are complementary: a future version could register an AIR receipt
with a SCITT transparency service and receive a SCITT receipt in
return.</t>
  </dd>
</dl>

</section>
<section anchor="air-v1-receipt-format"><name>AIR v1 Receipt Format</name>

<section anchor="cosesign1-envelope"><name>COSE_Sign1 Envelope</name>

<t>An AIR v1 receipt is a tagged COSE_Sign1 structure (CBOR tag 18) as
defined in <xref target="RFC9052"/> Section 4.2:</t>

<figure><artwork><![CDATA[
COSE_Sign1 = [
  protected   : bstr,          ; serialized protected header
  unprotected : map,            ; unprotected header map
  payload     : bstr,           ; serialized CWT claims map
  signature   : bstr .size 64   ; Ed25519 signature
]
]]></artwork></figure>

<t>The signature covers <spanx style="verb">Sig_structure1 = ["Signature1", protected,
external_aad, payload]</spanx> where <spanx style="verb">external_aad</spanx> is empty (<spanx style="verb">h''</spanx>).</t>

<t>Verifiers <bcp14>MUST</bcp14> reject untagged COSE_Sign1 structures. The CBOR tag 18
is mandatory.</t>

</section>
<section anchor="protected-header"><name>Protected Header</name>

<t>The protected header is a CBOR map containing exactly two entries:</t>

<texttable>
      <ttcol align='right'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>1</c>
      <c>alg</c>
      <c>-8</c>
      <c>EdDSA (Ed25519)</c>
      <c>3</c>
      <c>content type</c>
      <c>61</c>
      <c>application/cwt</c>
</texttable>

<t>Verifiers <bcp14>MUST</bcp14> reject receipts where <spanx style="verb">alg</spanx> is not -8 or where
<spanx style="verb">content type</spanx> is not 61. Additional protected header parameters are
not defined in v1 and <bcp14>MUST NOT</bcp14> be present.</t>

<t>The signing algorithm is Ed25519 with strict verification semantics
per <xref target="RFC8032"/> Section 5.1.7. Verifiers <bcp14>MUST</bcp14> reject non-canonical S
values (S &gt;= L where L is the Ed25519 group order).</t>

</section>
<section anchor="unprotected-header"><name>Unprotected Header</name>

<t>The unprotected header <bcp14>MUST</bcp14> be empty for AIR v1 receipts. AIR v1 does
not use <spanx style="verb">kid</spanx> or any other unprotected header parameter. Because
unprotected header parameters are not covered by the COSE signature,
verifiers <bcp14>MUST</bcp14> reject receipts with non-empty unprotected headers.</t>

</section>
<section anchor="payload-cwt-claims-map"><name>Payload: CWT Claims Map</name>

<t>The payload is a CBOR-encoded CWT claims map. The map uses
deterministic encoding per <xref target="RFC8949"/> Section 4.2.1, with keys sorted
by the bytewise lexicographic order of their deterministic encodings.</t>

<t>The claims map is closed: verifiers <bcp14>MUST</bcp14> reject maps containing
unknown integer keys. Duplicate keys <bcp14>MUST</bcp14> be rejected.</t>

</section>
<section anchor="cddl"><name>CDDL Schema</name>

<t>The following CDDL <xref target="RFC8610"/> defines the complete wire shape:</t>

<figure><sourcecode type="cddl"><![CDATA[
air-receipt = #6.18([
  protected:   bstr .cbor air-protected-header,
  unprotected: air-unprotected-header,
  payload:     bstr .cbor air-claims,
  signature:   bstr .size 64
])

air-protected-header = {
  1 => -8,          ; alg: EdDSA (Ed25519)
  3 => 61,          ; content type: application/cwt
}

air-unprotected-header = {}

air-claims = {
  ; --- Standard CWT/EAT claims ---
  1   => tstr,                  ; iss: issuer
  6   => uint,                  ; iat: issued-at (Unix seconds)
  7   => bstr .size 16,         ; cti: CWT ID (UUID v4, 16 bytes)
  265 => "https://spec.cyntrisec.com/air/v1",  ; eat_profile
  ? 10 => bstr .size (8..64),   ; eat_nonce (optional)

  ; --- AIR private claims ---
  -65537 => tstr,               ; model_id
  -65538 => tstr,               ; model_version
  -65539 => sha256-hash,        ; model_hash
  -65540 => sha256-hash,        ; request_hash
  -65541 => sha256-hash,        ; response_hash
  -65542 => sha256-hash,        ; attestation_doc_hash
  -65543 => enclave-measurements, ; enclave_measurements
  -65544 => tstr,               ; policy_version
  -65545 => uint,               ; sequence_number
  -65546 => uint,               ; execution_time_ms
  -65547 => uint,               ; memory_peak_mb
  -65548 => tstr,               ; security_mode
  ? -65549 => tstr,             ; model_hash_scheme (optional)
}

sha256-hash = bstr .size 32
sha384-hash = bstr .size 48

enclave-measurements = nitro-measurements / tdx-measurements

nitro-measurements = {
  "pcr0"             => sha384-hash,
  "pcr1"             => sha384-hash,
  "pcr2"             => sha384-hash,
  ? "pcr8"           => sha384-hash,
  "measurement_type" => "nitro-pcr",
}

tdx-measurements = {
  "pcr0"             => sha384-hash,   ; MRTD
  "pcr1"             => sha384-hash,   ; RTMR0
  "pcr2"             => sha384-hash,   ; RTMR1
  "measurement_type" => "tdx-mrtd-rtmr",
}
]]></sourcecode></figure>

<t>The full CDDL is also provided in <xref target="appendix-cddl"/>.</t>

</section>
</section>
<section anchor="claim-semantics"><name>Claim Semantics</name>

<section anchor="standard-cwteat-claims"><name>Standard CWT/EAT Claims</name>

<section anchor="iss-issuer-key-1"><name>iss (Issuer) -- key 1</name>

<t>A text string identifying the issuing entity (e.g.,
<spanx style="verb">"cyntrisec.com"</spanx>). The value is operator-assigned and opaque to the
receipt format. Verifiers <bcp14>MAY</bcp14> check against an expected issuer
allowlist.</t>

</section>
<section anchor="iat-issued-at-key-6"><name>iat (Issued At) -- key 6</name>

<t>An unsigned integer representing the Unix timestamp (seconds since
epoch) when the inference completed. Verifiers apply a freshness
check: <spanx style="verb">now - max_age &lt;= iat &lt;= now + clock_skew</spanx>. Verifiers <bcp14>SHOULD</bcp14>
reject future timestamps.
AIR v1 encodes <spanx style="verb">iat</spanx> as an unsigned integer only, consistent with the
time-encoding restriction in <xref target="RFC9711"/> Section 4.3.1. AIR v1 does
not use <spanx style="verb">exp</spanx> or <spanx style="verb">nbf</spanx>.</t>

</section>
<section anchor="cti-cwt-id-key-7"><name>cti (CWT ID) -- key 7</name>

<t>A 16-byte binary string containing a UUID v4 encoded as raw bytes
(not the 36-character string form). Each receipt <bcp14>MUST</bcp14> have a unique
cti. Verifiers maintaining replay state <bcp14>SHOULD</bcp14> track observed cti
values.</t>

</section>
<section anchor="eatprofile-key-265"><name>eat_profile -- key 265</name>

<t>The fixed string value <spanx style="verb">"https://spec.cyntrisec.com/air/v1"</spanx>.
Verifiers <bcp14>MUST</bcp14> reject receipts with unknown eat_profile values.</t>

</section>
<section anchor="eatnonce-key-10"><name>eat_nonce -- key 10</name>

<t>An optional binary string (8-64 bytes per <xref target="RFC9711"/> Section 4.1)
provided by the client to bind the receipt to a specific request
session. If the verifier supplied a nonce, it <bcp14>MUST</bcp14> check that
eat_nonce matches. This is the primary replay resistance mechanism
when verifier-side cti deduplication is not feasible.</t>

</section>
</section>
<section anchor="air-private-claims"><name>AIR Private Claims</name>

<t>AIR uses negative integer keys in the CWT private-use range to
avoid collision with IANA-registered claims. Keys -65537 through
-65548 are assigned and required. Key -65549 is assigned and
optional. No other AIR private claim keys are defined in v1.</t>

<section anchor="modelid-key-65537"><name>model_id -- key -65537</name>

<t>A text string containing the human-readable model identifier (e.g.,
<spanx style="verb">"minilm-l6-v2"</spanx>). Operator-assigned, opaque. Not cryptographic; use
model_hash for binding.</t>

</section>
<section anchor="modelversion-key-65538"><name>model_version -- key -65538</name>

<t>A text string containing the human-readable model version (e.g.,
<spanx style="verb">"1.0.0"</spanx>). Operator-assigned, opaque.</t>

</section>
<section anchor="modelhash-key-65539"><name>model_hash -- key -65539</name>

<t>A 32-byte SHA-256 <xref target="FIPS180-4"/> hash of the model weights. This is
the cryptographic binding between the receipt and a specific model
artifact. Verifiers <bcp14>MUST</bcp14> compare against a known-good hash when
model identity matters. The model_hash <bcp14>MUST NOT</bcp14> be all zeros.</t>

</section>
<section anchor="requesthash-key-65540"><name>request_hash -- key -65540</name>

<t>A 32-byte SHA-256 hash of the inference request payload. Binds the
receipt to a specific input. Clients holding the original request
can recompute and compare. The hash is computed over the raw wire
bytes of the request as received by the workload; AIR v1 does not
define a canonicalization scheme for request payloads.</t>

</section>
<section anchor="responsehash-key-65541"><name>response_hash -- key -65541</name>

<t>A 32-byte SHA-256 hash of the inference response payload. Binds the
receipt to a specific output. As with request_hash, the hash is
computed over the raw wire bytes of the response as emitted by the
workload.</t>

</section>
<section anchor="attestationdochash-key-65542"><name>attestation_doc_hash -- key -65542</name>

<t>A 32-byte SHA-256 hash of the platform attestation document (e.g.,
Nitro COSE attestation document, TDX quote). Links the receipt to
TEE evidence without embedding the (potentially large) attestation
document itself.</t>

<t>Note: AIR v1 does not define attestation document verification.
Verifiers that require TEE assurance <bcp14>MUST</bcp14> independently obtain and
verify the attestation document, then compare its hash to
<spanx style="verb">attestation_doc_hash</spanx>.</t>

</section>
<section anchor="measurements"><name>enclave_measurements -- key -65543</name>

<t>A map containing platform-specific measurement registers. The map
structure depends on the <spanx style="verb">measurement_type</spanx> field within it.</t>

<section anchor="nitro-pcr-variant-measurementtype-nitro-pcr"><name>Nitro PCR Variant (measurement_type = "nitro-pcr")</name>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">"pcr0"</spanx></c>
      <c>bstr 48</c>
      <c>Yes</c>
      <c>PCR0 (SHA-384)</c>
      <c><spanx style="verb">"pcr1"</spanx></c>
      <c>bstr 48</c>
      <c>Yes</c>
      <c>PCR1 (SHA-384)</c>
      <c><spanx style="verb">"pcr2"</spanx></c>
      <c>bstr 48</c>
      <c>Yes</c>
      <c>PCR2 (SHA-384)</c>
      <c><spanx style="verb">"pcr8"</spanx></c>
      <c>bstr 48</c>
      <c>No</c>
      <c>PCR8 (SHA-384)</c>
      <c><spanx style="verb">"measurement_type"</spanx></c>
      <c>tstr</c>
      <c>Yes</c>
      <c><spanx style="verb">"nitro-pcr"</spanx></c>
</texttable>

</section>
<section anchor="tdx-mrtdrtmr-variant-measurementtype-tdx-mrtd-rtmr"><name>TDX MRTD/RTMR Variant (measurement_type = "tdx-mrtd-rtmr")</name>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">"pcr0"</spanx></c>
      <c>bstr 48</c>
      <c>Yes</c>
      <c>MRTD (SHA-384)</c>
      <c><spanx style="verb">"pcr1"</spanx></c>
      <c>bstr 48</c>
      <c>Yes</c>
      <c>RTMR0 (SHA-384)</c>
      <c><spanx style="verb">"pcr2"</spanx></c>
      <c>bstr 48</c>
      <c>Yes</c>
      <c>RTMR1 (SHA-384)</c>
      <c><spanx style="verb">"measurement_type"</spanx></c>
      <c>tstr</c>
      <c>Yes</c>
      <c><spanx style="verb">"tdx-mrtd-rtmr"</spanx></c>
</texttable>

<t>The TDX registers are mapped to <spanx style="verb">pcr0</spanx>/<spanx style="verb">pcr1</spanx>/<spanx style="verb">pcr2</spanx> portability slots
for cross-platform verifier simplicity. The <spanx style="verb">measurement_type</spanx> field
disambiguates the actual register semantics. These slot names do not
imply that Nitro PCRs and TDX MRTD/RTMRs are semantically identical.</t>

<t>All pcr0/pcr1/pcr2 values <bcp14>MUST</bcp14> be exactly 48 bytes. Verifiers <bcp14>MUST</bcp14>
reject receipts where any required measurement register is the wrong
length. The <spanx style="verb">measurement_type</spanx> <bcp14>MUST</bcp14> be one of the defined values;
unknown types <bcp14>MUST</bcp14> be rejected.</t>

</section>
</section>
<section anchor="policyversion-key-65544"><name>policy_version -- key -65544</name>

<t>A text string identifying the version of the policy governing the
workload (e.g., <spanx style="verb">"policy-2026.02"</spanx>). Informational.</t>

</section>
<section anchor="sequencenumber-key-65545"><name>sequence_number -- key -65545</name>

<t>An unsigned integer that increases monotonically within a single
workload session. Resets on workload restart. Verifiers processing a
stream of receipts <bcp14>SHOULD</bcp14> check monotonicity; gaps indicate missed
receipts within a session.</t>

</section>
<section anchor="executiontimems-key-65546"><name>execution_time_ms -- key -65546</name>

<t>An unsigned integer representing the wall-clock inference time in
milliseconds. Informational; anomalously low or high values may
indicate issues but are not a verification failure.</t>

</section>
<section anchor="memorypeakmb-key-65547"><name>memory_peak_mb -- key -65547</name>

<t>An unsigned integer representing the peak memory usage during
inference in megabytes. Informational.</t>

</section>
<section anchor="securitymode-key-65548"><name>security_mode -- key -65548</name>

<t>A text string identifying the security mode of the workload (e.g.,
<spanx style="verb">"GatewayOnly"</spanx>, <spanx style="verb">"FullAttestation"</spanx>). Informational. Verifiers <bcp14>MAY</bcp14>
require a specific security mode.</t>

</section>
<section anchor="mhscheme"><name>model_hash_scheme -- key -65549</name>

<t>An optional text string declaring how model_hash was computed,
enabling verifiers to reproduce the hash from model artifacts.</t>

<t>Defined scheme values:</t>

<texttable>
      <ttcol align='left'>Scheme</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">"sha256-single"</spanx></c>
      <c>SHA-256 of a single model weights file</c>
      <c><spanx style="verb">"sha256-concat"</spanx></c>
      <c>SHA-256 of deterministically concatenated weight files (lexicographic filename order)</c>
      <c><spanx style="verb">"sha256-manifest"</spanx></c>
      <c>SHA-256 of a self-describing manifest listing per-file hashes</c>
</texttable>

<t>If present, verifiers <bcp14>MUST</bcp14> recognize the scheme value. Unknown
schemes <bcp14>MUST</bcp14> be rejected (fail-closed). If absent, verifiers <bcp14>SHOULD</bcp14>
treat model_hash as opaque (can still compare against a known-good
hash, but cannot independently reproduce it).</t>

<t>No additional scheme values are defined in AIR v1. Future revisions
<bcp14>MAY</bcp14> define more scheme values. AIR v1 implementations <bcp14>MUST NOT</bcp14> invent
new scheme values.</t>

</section>
</section>
</section>
<section anchor="eat-profile-declaration"><name>EAT Profile Declaration</name>

<t>This section consolidates the mandatory profile positions per
<xref target="RFC9711"/> Section 6.3.</t>

<t><list style="numbers" type="1">
  <t><strong>Profile identifier</strong>: URI
<spanx style="verb">"https://spec.cyntrisec.com/air/v1"</spanx> (carried in eat_profile,
key 265).</t>
  <t><strong>Encoding</strong>: CBOR only (<xref target="RFC8949"/>). JSON serialization is not
defined.</t>
  <t><strong>Envelope</strong>: COSE_Sign1 (<xref target="RFC9052"/> Section 4.2), CBOR tag 18.
Untagged COSE_Sign1 <bcp14>MUST</bcp14> be rejected.</t>
  <t><strong>Payload content type</strong>: COSE content_type = 61
(<spanx style="verb">application/cwt</spanx>). The payload is a CWT claims map.</t>
  <t><strong>HTTP media type</strong>: <spanx style="verb">application/eat+cwt</spanx> (<xref target="RFC9782"/>).
Receivers <bcp14>SHOULD</bcp14> accept both <spanx style="verb">application/cwt</spanx> and
<spanx style="verb">application/eat+cwt</spanx>.</t>
  <t><strong>Signing algorithm</strong>: Ed25519 only (COSE alg = -8).
<spanx style="verb">verify_strict</spanx> required (canonical S per <xref target="RFC8032"/> Section
5.1.7). No algorithm negotiation in v1.</t>
  <t><strong>Detached bundles</strong>: Not supported in v1. The attestation
document is referenced by hash (attestation_doc_hash), not
embedded.</t>
  <t><strong>Key identification</strong>: Out of band. The verifier obtains the
Ed25519 public key through a platform-specific channel (e.g.,
attestation document, key registry). AIR v1 does not use <spanx style="verb">kid</spanx>.</t>
  <t><strong>Mandatory claims</strong>: 16 required claims: iss, iat, cti,
eat_profile, model_id, model_version, model_hash, request_hash,
response_hash, attestation_doc_hash, enclave_measurements,
policy_version, sequence_number, execution_time_ms,
memory_peak_mb, security_mode.</t>
  <t><strong>Optional claims</strong>: 2 optional claims: eat_nonce (replay
resistance), model_hash_scheme (hash computation method).</t>
  <t><strong>Freshness</strong>: <spanx style="verb">iat</spanx> carries the execution timestamp (Unix
seconds). Verifiers apply <spanx style="verb">max_age</spanx> + <spanx style="verb">clock_skew</spanx> policy.
<spanx style="verb">eat_nonce</spanx> provides optional challenge-response replay
resistance (<xref target="RFC9711"/> Section 4.1, 8-64 bytes).</t>
  <t><strong>Deterministic encoding</strong>: Required. Map keys sorted per
<xref target="RFC8949"/> Section 4.2.1 by the bytewise lexicographic order of
their deterministic encodings.</t>
  <t><strong>Closed claims map</strong>: The claims map is closed. Unknown integer
keys <bcp14>MUST</bcp14> be rejected. Duplicate keys <bcp14>MUST</bcp14> be rejected.</t>
  <t><strong>Unprotected header</strong>: <bcp14>MUST</bcp14> be empty. All header parameters are
carried in the protected header. Receipts with non-empty
unprotected headers <bcp14>MUST</bcp14> be rejected.</t>
  <t><strong>Private claim keys</strong>: Keys -65537 through -65549 are assigned
in the CWT private-use range (<xref target="RFC8392"/>). No IANA registration
is required. AIR v1 defines no extension mechanism or additional
private claim keys beyond this set.</t>
</list></t>

</section>
<section anchor="verification-procedure"><name>Verification Procedure</name>

<t>The AIR v1 verification procedure is organized into four layers.
These layers define AIR-local verification only. A deployment that
requires full TEE assurance <bcp14>MUST</bcp14> additionally obtain and verify the
underlying platform attestation evidence and the binding between that
evidence and the AIR signing key using platform-specific procedures.
If any check in any layer fails, the verifier <bcp14>MUST</bcp14> reject the receipt
and <bcp14>SHOULD</bcp14> report the specific failure. Implementations <bcp14>MAY</bcp14>
continue executing later layers after a failure to collect a
complete set of diagnostic results, but the overall verification
verdict <bcp14>MUST</bcp14> be rejection if any layer fails.</t>

<section anchor="layer-1-parse"><name>Layer 1: Parse</name>

<t><list style="numbers" type="1">
  <t>Decode the input as CBOR. Confirm the outer structure is tagged
with CBOR tag 18.</t>
  <t>Decode the COSE_Sign1 array (4 elements).</t>
  <t>Confirm the receipt size does not exceed 65,536 bytes.</t>
  <t>Decode the protected header. Confirm it is a well-formed CBOR
map.</t>
  <t>Confirm <spanx style="verb">alg</spanx> (label 1) in the protected header is -8 (EdDSA).
Reject receipts with any other algorithm.</t>
  <t>Confirm <spanx style="verb">content type</spanx> (label 3) in the protected header is 61
(<spanx style="verb">application/cwt</spanx>).</t>
  <t>Confirm the unprotected header is empty.</t>
  <t>Decode the payload. Confirm it is a well-formed CBOR map.</t>
  <t>Confirm <spanx style="verb">eat_profile</spanx> (key 265) equals
<spanx style="verb">"https://spec.cyntrisec.com/air/v1"</spanx>. Reject receipts with
unknown profile values.</t>
</list></t>

</section>
<section anchor="layer-2-cryptographic-verification-air-local"><name>Layer 2: Cryptographic Verification (AIR-local)</name>

<t><list style="numbers" type="1">
  <t>Construct Sig_structure1 = ["Signature1", protected, h'',
payload].</t>
  <t>Verify the Ed25519 signature over Sig_structure1 using the
provided public key. The verification <bcp14>MUST</bcp14> use <spanx style="verb">verify_strict</spanx>
semantics (reject non-canonical S values).</t>
</list></t>

</section>
<section anchor="layer-3-claim-validation"><name>Layer 3: Claim Validation</name>

<t><list style="numbers" type="1">
  <t>Confirm <spanx style="verb">cti</spanx> (key 7) is exactly 16 bytes.</t>
  <t>Confirm <spanx style="verb">iat</spanx> (key 6) is a non-zero unsigned integer.</t>
  <t>Confirm <spanx style="verb">model_hash</spanx> (key -65539) is exactly 32 bytes and not
all zeros.</t>
  <t>Confirm all required text string claims (iss, model_id,
model_version, policy_version, security_mode) are non-empty and
within reasonable bounds (implementation-defined, <bcp14>RECOMMENDED</bcp14>
maximum 1024 bytes each).</t>
  <t>Confirm <spanx style="verb">enclave_measurements</spanx> (key -65543) is a map.</t>
  <t>Confirm <spanx style="verb">measurement_type</spanx> within enclave_measurements is one
of the defined values (<spanx style="verb">"nitro-pcr"</spanx> or <spanx style="verb">"tdx-mrtd-rtmr"</spanx>).</t>
  <t>Confirm all pcr0/pcr1/pcr2 values are exactly 48 bytes.</t>
  <t>If <spanx style="verb">measurement_type</spanx> is <spanx style="verb">"tdx-mrtd-rtmr"</spanx>, confirm <spanx style="verb">pcr8</spanx> is
absent. TDX measurement maps <bcp14>MUST NOT</bcp14> contain pcr8.</t>
  <t>If <spanx style="verb">model_hash_scheme</spanx> (key -65549) is present, confirm it is
one of the defined values (<spanx style="verb">"sha256-single"</spanx>,
<spanx style="verb">"sha256-concat"</spanx>, <spanx style="verb">"sha256-manifest"</spanx>). Unknown values <bcp14>MUST</bcp14> be
rejected.</t>
  <t>Confirm the claims map contains no unknown integer keys and no
duplicate keys.</t>
</list></t>

</section>
<section anchor="layer-4-policy-evaluation"><name>Layer 4: Policy Evaluation</name>

<t>Policy checks are configurable per verifier deployment. The following
checks are defined:</t>

<dl>
  <dt><strong>FRESH</strong> (timestamp bounds):</dt>
  <dd>
    <t>If configured, verify <spanx style="verb">now - max_age &lt;= iat &lt;= now + clock_skew</spanx>.</t>
  </dd>
  <dt><strong>NONCE</strong> (challenge binding):</dt>
  <dd>
    <t>If the verifier supplied a nonce, verify eat_nonce matches.</t>
  </dd>
  <dt><strong>MODEL</strong> (expected model):</dt>
  <dd>
    <t>If configured, verify model_hash and/or model_id match expected
values.</t>
  </dd>
  <dt><strong>PLATFORM</strong> (expected platform):</dt>
  <dd>
    <t>If configured, verify measurement_type matches expected value.</t>
  </dd>
  <dt><strong>REPLAY</strong> (deduplication):</dt>
  <dd>
    <t>If the verifier maintains a seen-cti store, reject duplicate cti
values.</t>
  </dd>
</dl>

<t>Verifiers <bcp14>SHOULD</bcp14> document which Layer 4 policies they enforce.</t>

</section>
</section>
<section anchor="relationship-to-other-work"><name>Relationship to Other Work</name>

<section anchor="draft-messous-eat-ai"><name>draft-messous-eat-ai</name>

<t><xref target="I-D.messous-eat-ai"/> defines AI-related claims for EAT,
including model identification, training metadata, and performance
metrics. AIR v1 is complementary: where draft-messous-eat-ai focuses
on per-agent identity, provenance, and authorization metadata, AIR v1
focuses narrowly on per-inference execution evidence from a
confidential workload. AIR intentionally binds a specific request/
response event to attestation-linked metadata; it is not a general AI
agent identity profile. A future version of AIR could adopt
registered claim keys from draft-messous-eat-ai once they stabilize,
replacing the current private-use integer keys.</t>

</section>
<section anchor="scitt"><name>SCITT</name>

<t>The Supply Chain Integrity, Transparency and Trust <xref target="SCITT"/>
framework uses "receipt" to mean a countersigned statement from a
transparency service. In AIR, "receipt" means a workload-signed
inference proof. The two are complementary: an AIR receipt could be
registered as a SCITT statement, and the resulting SCITT receipt
(countersignature from the transparency service) would provide
independent auditability. This document uses "AIR receipt"
consistently to avoid ambiguity.</t>

</section>
<section anchor="rats-architecture"><name>RATS Architecture</name>

<t>AIR can be incorporated into a RATS <xref target="RFC9334"/> architecture as
follows:</t>

<t><list style="symbols">
  <t>The confidential workload is the <strong>Attester</strong>.</t>
  <t>A deployment-specific <strong>Verifier</strong> can evaluate AIR receipts
together with platform attestation evidence and applicable
endorsements or reference values.</t>
  <t>The end user, auditor, or compliance officer is the <strong>Relying
Party</strong> (they consume verification results).</t>
  <t>The TEE platform vendor or attestation service providing
endorsements or reference values acts as the <strong>Endorser</strong>.</t>
</list></t>

<t>AIR v1 is a workload-emitted signed application-layer artifact, not a
verifier-emitted attestation result. AIR does not replace the
underlying platform attestation evidence or the verifier procedures
needed to evaluate it. Instead, AIR packages per-inference execution
claims together
with measurements and a hash reference to the platform attestation
document. It is therefore distinct from IETF EAR (EAT Attestation
Result), which is produced by a verifier after evaluating platform
evidence. In a complete deployment, a verifier may evaluate platform
evidence and AIR together, and an EAR might reference an AIR receipt
as part of the evidence it considered.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="receipt-integrity"><name>Receipt Integrity</name>

<t>The Ed25519 signature over the COSE Sig_structure1 protects the
protected header and all claims against tampering. The unprotected
header is not covered by the signature; AIR v1 requires it to be
empty (Section 4.3).</t>

</section>
<section anchor="algorithm-pinning"><name>Algorithm Pinning</name>

<t>AIR v1 pins the signing algorithm to Ed25519 (alg = -8). The
algorithm identifier is carried in the protected header and is
therefore signed. This prevents algorithm confusion attacks where an
attacker substitutes a weaker algorithm.</t>

</section>
<section anchor="replay-protection"><name>Replay Protection</name>

<t>Replay protection in AIR v1 is a shared responsibility:</t>

<t><list style="symbols">
  <t>The <spanx style="verb">cti</spanx> claim provides a unique receipt identifier. Verifiers
maintaining state <bcp14>SHOULD</bcp14> track observed cti values and reject
duplicates.</t>
  <t>The <spanx style="verb">eat_nonce</spanx> claim (optional) provides challenge-response
freshness. When present, it binds the receipt to a specific
verifier-supplied challenge, preventing replay to other verifiers.</t>
  <t>The <spanx style="verb">sequence_number</spanx> claim provides monotonicity within a
session. Gaps indicate missed receipts.</t>
</list></t>

<t>Verifiers not maintaining state and not using eat_nonce have limited
replay protection (only iat-based freshness). Deployments requiring
strong replay resistance <bcp14>MUST</bcp14> use at least one of cti deduplication
or eat_nonce.</t>

</section>
<section anchor="model-hash-limitations"><name>Model Hash Limitations</name>

<t>The <spanx style="verb">model_hash</spanx> claim (SHA-256 of model weights) proves byte-level
identity, not model correctness, bias, or safety. Two distinct models
with identical hashes are computationally infeasible, but a model
with a correct hash may still produce harmful or incorrect outputs.</t>

<t>The <spanx style="verb">model_hash_scheme</spanx> claim (<xref target="mhscheme"/>) declares how the hash
was computed. Unknown scheme values <bcp14>MUST</bcp14> be rejected. This prevents
a verifier from accepting a hash computed with an unrecognized method
that might weaken integrity guarantees.</t>

</section>
<section anchor="attestation-document-not-verified-by-receipt"><name>Attestation Document Not Verified by Receipt</name>

<t>The <spanx style="verb">attestation_doc_hash</spanx> claim is a SHA-256 hash of the platform
attestation document. AIR v1 does not embed or verify the attestation
document. AIR-local verification alone is therefore insufficient to
establish TEE assurance. Verifiers requiring such assurance <bcp14>MUST</bcp14>
independently obtain and verify the attestation document using
platform-specific procedures (e.g., Nitro COSE verification against
the AWS root CA, Intel TDX DCAP verification against Intel PCS).</t>

</section>
<section anchor="workload-honesty-and-evidence-scope"><name>Workload Honesty and Evidence Scope</name>

<t>An AIR receipt only speaks for what the signing workload observed and
emitted. If the workload is malicious, misconfigured, or signs hashes
for data that did not come from the claimed inference path, AIR can
still produce a syntactically valid receipt. AIR therefore does not
protect against an untrusted signer or against semantics outside the
measured workload boundary.</t>

<t>Deployments that rely on AIR for end-to-end assurance <bcp14>MUST</bcp14> treat the
receipt as meaningful only when the signing key is bound to an
attested workload whose measurement set and execution policy are
acceptable to the verifier.</t>

</section>
<section anchor="signing-key-binding"><name>Signing Key Binding</name>

<t>AIR v1 does not define how the Ed25519 signing key relates to the
TEE attestation. A verifier <bcp14>MUST NOT</bcp14> infer TEE provenance from the AIR
signature alone. A cross-workload substitution or relay attack occurs
when a receipt signed by one workload is presented with attestation
evidence from a different workload. A deployment that requires
end-to-end TEE assurance <bcp14>MUST</bcp14> verify, using a platform-specific
binding mechanism, that the AIR signing public key is bound to the
attested workload represented by the attestation evidence. AIR v1 does
not define these mechanisms because they differ by platform (e.g.,
Nitro attestation documents carry a <spanx style="verb">public_key</spanx> field, while TDX
deployments commonly bind via <spanx style="verb">REPORTDATA</spanx>). Implementations that
require end-to-end TEE assurance <bcp14>SHOULD</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Generate the Ed25519 key inside the TEE at startup.</t>
  <t>Include the public key in the platform attestation document
(e.g., Nitro <spanx style="verb">public_key</spanx> field, TDX <spanx style="verb">REPORTDATA</spanx>).</t>
  <t>Provide the attestation document alongside the receipt for
end-to-end verification.</t>
</list></t>

</section>
<section anchor="tee-compromise"><name>TEE Compromise</name>

<t>AIR v1 assumes the TEE hardware is correct (Trust Assumption TA-1).
A hardware vulnerability, firmware bug, or supply chain compromise
affecting the TEE breaks all AIR guarantees. AIR v1 does not define
revocation mechanisms for compromised platforms.</t>

</section>
<section anchor="clock-integrity"><name>Clock Integrity</name>

<t>The <spanx style="verb">iat</spanx> claim depends on the workload's system clock. On AWS
Nitro, the enclave uses the host clock (no independent time source).
On Intel TDX, the CVM has a TSC but it is subject to frequency
scaling. AIR v1 freshness checks are only as accurate as the
platform clock.</t>

</section>
<section anchor="deterministic-encoding"><name>Deterministic Encoding</name>

<t>AIR v1 requires deterministic CBOR encoding (<xref target="RFC8949"/> Section
4.2.1). This ensures that the same claims always produce the same
payload bytes, preventing signature-valid variants of the same
receipt. Implementations <bcp14>MUST</bcp14> sort map keys per the CBOR
deterministic encoding rules.</t>

</section>
<section anchor="closed-claims-map"><name>Closed Claims Map</name>

<t>The claims map is closed: unknown integer keys <bcp14>MUST</bcp14> be rejected.
This prevents downgrade attacks where an attacker adds unrecognized
claims that a naive verifier might silently accept as benign. This
closed-scope behavior is intentional in AIR v1; future extensions
require a revised profile.</t>

</section>
</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<section anchor="inputoutput-hashes"><name>Input/Output Hashes</name>

<t>The request_hash and response_hash claims contain SHA-256 hashes,
not plaintext inputs or outputs. However, for low-entropy inputs
(e.g., binary classification queries, yes/no questions), an
adversary with knowledge of the input space could brute-force the
hash to recover the original input. Deployments handling sensitive
low-entropy data <bcp14>SHOULD</bcp14> consider whether receipt exposure risks
input recovery.</t>

</section>
<section anchor="correlation-metadata"><name>Correlation Metadata</name>

<t>AIR receipts contain timestamps (iat), sequence numbers, and
identifiers (cti, iss) that could be used to correlate activity
across receipts. In privacy-sensitive deployments, operators <bcp14>SHOULD</bcp14>
consider whether the combination of receipt metadata enables
unwanted profiling.</t>

</section>
<section anchor="nonce-privacy"><name>Nonce Privacy</name>

<t>The eat_nonce claim, when present, may leak correlation data if the
same nonce is reused across sessions or if the nonce encodes
client-identifying information. Verifiers <bcp14>SHOULD</bcp14> use random nonces
and avoid embedding client identifiers in nonce values.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document has no IANA actions at this time.</t>

<t>AIR v1 uses negative integer keys in the CWT private-use range
(keys -65537 through -65549). If AIR gains adoption, a future
version may request registration of these claims in the CWT Claims
registry established by <xref target="RFC8392"/>. The eat_profile URI
(<spanx style="verb">"https://spec.cyntrisec.com/air/v1"</spanx>) follows the EAT profile
naming conventions in <xref target="RFC9711"/> but is not registered in any
IANA registry.</t>

<t>The HTTP media type <spanx style="verb">application/eat+cwt</spanx> referenced in Section 6
is registered by <xref target="RFC9782"/>.</t>

</section>
<section anchor="implementation-status"><name>Implementation Status</name>

<t>Note to RFC Editor: Please remove this section before publication.</t>

<t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting, per
<xref target="RFC7942"/>.</t>

<section anchor="reference-implementation-rust"><name>Reference Implementation (Rust)</name>

<dl>
  <dt>Organization:</dt>
  <dd>
    <t>Cyntrisec</t>
  </dd>
  <dt>Implementation:</dt>
  <dd>
    <t>EphemeralML (<spanx style="verb">common/src/air_receipt.rs</spanx>, <spanx style="verb">common/src/air_verify.rs</spanx>)</t>
  </dd>
  <dt>Description:</dt>
  <dd>
    <t>Full AIR v1 emitter and 4-layer verifier. Generates COSE_Sign1
receipts with deterministic CBOR encoding and Ed25519 signing.
Verifier implements all four layers (parse, crypto, claims, policy)
with structured error codes.</t>
  </dd>
  <dt>Maturity:</dt>
  <dd>
    <t>Reference implementation with end-to-end validation on three
confidential-computing platforms.</t>
  </dd>
  <dt>Coverage:</dt>
  <dd>
    <t>Validated against the 10-vector AIR corpus (2 valid, 8 invalid) and
exercised in cross-cloud E2E runs.</t>
  </dd>
  <dt>Contact:</dt>
  <dd>
    <t>borys@cyntrisec.com</t>
  </dd>
</dl>

</section>
<section anchor="python-interop-verifier"><name>Python Interop Verifier</name>

<dl>
  <dt>Organization:</dt>
  <dd>
    <t>Cyntrisec (same team, independent implementation)</t>
  </dd>
  <dt>Implementation:</dt>
  <dd>
    <t><spanx style="verb">spec/v1/scripts/interop_test.py</spanx></t>
  </dd>
  <dt>Description:</dt>
  <dd>
    <t>Minimal Python verifier using <spanx style="verb">pycose</spanx> and <spanx style="verb">cbor2</spanx> libraries.
Validates COSE_Sign1 structure, Ed25519 signature, and claim
presence.</t>
  </dd>
  <dt>Maturity:</dt>
  <dd>
    <t>Test/interop.</t>
  </dd>
</dl>

</section>
<section anchor="e2e-validation"><name>E2E Validation</name>

<t>The reference implementation has been validated end-to-end on three
confidential computing platforms:</t>

<texttable>
      <ttcol align='left'>Platform</ttcol>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Date</ttcol>
      <c>AWS Nitro Enclaves (m6i)</c>
      <c>PASS</c>
      <c>2026-02-28</c>
      <c>GCP Confidential Space TDX (c3-standard-4)</c>
      <c>PASS</c>
      <c>2026-02-27</c>
      <c>GCP Confidential Space GPU H100 CC (a3-highgpu-1g)</c>
      <c>PASS</c>
      <c>2026-02-27</c>
</texttable>

</section>
</section>
<section anchor="examples"><name>Examples</name>

<section anchor="valid-receipt-walkthrough"><name>Valid Receipt Walkthrough</name>

<t>The following describes a valid AIR v1 receipt in diagnostic
notation. This corresponds to the <spanx style="verb">v1-nitro-no-nonce</spanx> golden vector.</t>

<t>The COSE_Sign1 envelope (tagged with CBOR tag 18):</t>

<figure><artwork><![CDATA[
18([
  h'A2012703183D',           / protected: {1: -8, 3: 61} /
  {},                         / unprotected: empty /
  h'B0...',                   / payload: CWT claims map /
  h'<64 bytes>'               / signature: Ed25519 /
])
]]></artwork></figure>

<t>The protected header decodes to:</t>

<figure><artwork><![CDATA[
{
  1: -8,    / alg: EdDSA /
  3: 61     / content type: application/cwt /
}
]]></artwork></figure>

<t>The payload (CWT claims map) includes the 16 required claims:</t>

<figure><artwork><![CDATA[
{
  1: "cyntrisec.com",                          / iss /
  6: 1740000000,                               / iat /
  7: h'<16 bytes UUID v4>',                    / cti /
  265: "https://spec.cyntrisec.com/air/v1",    / eat_profile /
  -65537: "minilm-l6-v2",                      / model_id /
  -65538: "1.0.0",                             / model_version /
  -65539: h'<32 bytes SHA-256>',               / model_hash /
  -65540: h'<32 bytes SHA-256>',               / request_hash /
  -65541: h'<32 bytes SHA-256>',               / response_hash /
  -65542: h'<32 bytes SHA-256>',               / attestation_doc_hash /
  -65543: {                                    / enclave_measurements /
    "pcr0": h'<48 bytes SHA-384>',
    "pcr1": h'<48 bytes SHA-384>',
    "pcr2": h'<48 bytes SHA-384>',
    "measurement_type": "nitro-pcr"
  },
  -65544: "policy-2026.02",                    / policy_version /
  -65545: 1,                                   / sequence_number /
  -65546: 77,                                  / execution_time_ms /
  -65547: 0,                                   / memory_peak_mb /
  -65548: "FullAttestation"                    / security_mode /
}
]]></artwork></figure>

<t>Verification with the corresponding Ed25519 public key succeeds
through all four layers.</t>

</section>
<section anchor="invalid-receipt-categories"><name>Invalid Receipt Categories</name>

<t>The specification includes 8 invalid golden vectors covering failure
modes across all verification layers:</t>

<texttable>
      <ttcol align='left'>Vector</ttcol>
      <ttcol align='left'>Layer</ttcol>
      <ttcol align='left'>Expected Failure</ttcol>
      <c>wrong-key</c>
      <c>L2</c>
      <c>SIG_FAILED</c>
      <c>wrong-alg</c>
      <c>L1</c>
      <c>BAD_ALG</c>
      <c>zero-model-hash</c>
      <c>L3</c>
      <c>ZERO_MODEL_HASH</c>
      <c>bad-measurement-length</c>
      <c>L3</c>
      <c>BAD_MEASUREMENT_LENGTH</c>
      <c>nonce-mismatch</c>
      <c>L4</c>
      <c>NONCE_MISMATCH</c>
      <c>model-hash-mismatch</c>
      <c>L4</c>
      <c>MODEL_HASH_MISMATCH</c>
      <c>platform-mismatch</c>
      <c>L4</c>
      <c>PLATFORM_MISMATCH</c>
      <c>stale-iat</c>
      <c>L4</c>
      <c>TIMESTAMP_STALE</c>
</texttable>

<t>Complete vector files (JSON with hex-encoded COSE bytes, expected
failure codes, and policy overrides) are available in the reference
implementation repository.</t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC8032">
  <front>
    <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
    <date month="January" year="2017"/>
    <abstract>
      <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8032"/>
  <seriesInfo name="DOI" value="10.17487/RFC8032"/>
</reference>

<reference anchor="RFC8392">
  <front>
    <title>CBOR Web Token (CWT)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
    <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <date month="May" year="2018"/>
    <abstract>
      <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8392"/>
  <seriesInfo name="DOI" value="10.17487/RFC8392"/>
</reference>

<reference anchor="RFC8610">
  <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"/>
    <abstract>
      <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8610"/>
  <seriesInfo name="DOI" value="10.17487/RFC8610"/>
</reference>

<reference anchor="RFC8949">
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <date month="December" year="2020"/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
      <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="94"/>
  <seriesInfo name="RFC" value="8949"/>
  <seriesInfo name="DOI" value="10.17487/RFC8949"/>
</reference>

<reference anchor="RFC9052">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
      <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="96"/>
  <seriesInfo name="RFC" value="9052"/>
  <seriesInfo name="DOI" value="10.17487/RFC9052"/>
</reference>

<reference anchor="RFC9334">
  <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">
  <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="FIPS180-4" target="https://csrc.nist.gov/pubs/fips/180-4/upd1/final">
  <front>
    <title>Secure Hash Standard (SHS)</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2015" month="August"/>
  </front>
</reference>


<reference anchor="RFC2119">
  <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">
  <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>




    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC7942">
  <front>
    <title>Improving Awareness of Running Code: The Implementation Status Section</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="A. Farrel" initials="A." surname="Farrel"/>
    <date month="July" year="2016"/>
    <abstract>
      <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
      <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="205"/>
  <seriesInfo name="RFC" value="7942"/>
  <seriesInfo name="DOI" value="10.17487/RFC7942"/>
</reference>

<reference anchor="RFC9782">
  <front>
    <title>Entity Attestation Token (EAT) Media Types</title>
    <author fullname="L. Lundblade" initials="L." surname="Lundblade"/>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <author fullname="T. Fossati" initials="T." surname="Fossati"/>
    <date month="May" year="2025"/>
    <abstract>
      <t>The payloads used in Remote ATtestation procedureS (RATS) may require an associated media type for their conveyance, for example, when the payloads are used in RESTful APIs.</t>
      <t>This memo defines media types to be used for Entity Attestation Tokens (EATs).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9782"/>
  <seriesInfo name="DOI" value="10.17487/RFC9782"/>
</reference>


<reference anchor="I-D.messous-eat-ai" target="https://datatracker.ietf.org/doc/draft-messous-eat-ai/">
  <front>
    <title>Entity Attestation Token (EAT) Profile for Autonomous AI Agents</title>
    <author initials="A." surname="Messous">
      <organization></organization>
    </author>
    <author initials="L." surname="Morand">
      <organization></organization>
    </author>
    <author initials="P. C." surname="Liu">
      <organization></organization>
    </author>
    <date year="2026" month="February" day="23"/>
  </front>
</reference>
<reference anchor="SCITT" target="https://datatracker.ietf.org/wg/scitt/about/">
  <front>
    <title>Supply Chain Integrity, Transparency, and Trust (SCITT)</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

</references>


<?line 1055?>

<section anchor="appendix-cddl"><name>Full CDDL Schema</name>

<t>This appendix reproduces the complete CDDL schema from <xref target="cddl"/> for
convenience.</t>

<figure><sourcecode type="cddl"><![CDATA[
; Attested Inference Receipt (AIR) v1 -- CDDL Schema
; Status: v1.0 FROZEN
; References: RFC 9052, RFC 8392, RFC 9711, RFC 8949, RFC 8610

air-receipt = #6.18([
  protected:   bstr .cbor air-protected-header,
  unprotected: air-unprotected-header,
  payload:     bstr .cbor air-claims,
  signature:   bstr .size 64
])

air-protected-header = {
  1 => -8,          ; alg: EdDSA (Ed25519)
  3 => 61,          ; content type: application/cwt
}

air-unprotected-header = {}

air-claims = {
  ; --- Standard CWT/EAT claims ---
  1   => tstr,                  ; iss: issuer
  6   => uint,                  ; iat: issued-at (Unix seconds)
  7   => bstr .size 16,         ; cti: CWT ID (UUID v4, 16 bytes)
  265 => "https://spec.cyntrisec.com/air/v1",  ; eat_profile
  ? 10 => bstr .size (8..64),   ; eat_nonce (optional)

  ; --- AIR private claims ---
  -65537 => tstr,               ; model_id
  -65538 => tstr,               ; model_version
  -65539 => sha256-hash,        ; model_hash
  -65540 => sha256-hash,        ; request_hash
  -65541 => sha256-hash,        ; response_hash
  -65542 => sha256-hash,        ; attestation_doc_hash
  -65543 => enclave-measurements, ; enclave_measurements
  -65544 => tstr,               ; policy_version
  -65545 => uint,               ; sequence_number
  -65546 => uint,               ; execution_time_ms
  -65547 => uint,               ; memory_peak_mb
  -65548 => tstr,               ; security_mode

  ; --- Optional claims (v1.0) ---
  ? -65549 => tstr,             ; model_hash_scheme
}

sha256-hash = bstr .size 32
sha384-hash = bstr .size 48

enclave-measurements = nitro-measurements / tdx-measurements

nitro-measurements = {
  "pcr0"             => sha384-hash,
  "pcr1"             => sha384-hash,
  "pcr2"             => sha384-hash,
  ? "pcr8"           => sha384-hash,
  "measurement_type" => "nitro-pcr",
}

tdx-measurements = {
  "pcr0"             => sha384-hash,   ; MRTD
  "pcr1"             => sha384-hash,   ; RTMR0
  "pcr2"             => sha384-hash,   ; RTMR1
  "measurement_type" => "tdx-mrtd-rtmr",
}
]]></sourcecode></figure>

</section>
<section anchor="appendix-vectors"><name>Golden Vector Summary</name>

<t>The reference implementation includes 10 golden test vectors (2
valid, 8 invalid) generated with a deterministic Ed25519 key pair:</t>

<t><list style="symbols">
  <t>Seed: <spanx style="verb">2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</spanx></t>
  <t>Public key: <spanx style="verb">197f6b23e16c8532c6abc838facd5ea789be0c76b2920334039bfa8b3d368d61</spanx></t>
</list></t>

<t>Vectors are JSON files containing the COSE_Sign1 bytes (hex-encoded),
expected verification outcomes, and policy overrides for Layer 4
tests. They are available in the repository under <spanx style="verb">spec/v1/vectors/</spanx>.</t>

<t>Valid vectors:</t>

<t><list style="symbols">
  <t><spanx style="verb">v1-nitro-no-nonce.json</spanx>: Nitro measurements, no eat_nonce
(canonical golden vector).</t>
  <t><spanx style="verb">v1-tdx-with-nonce.json</spanx>: TDX measurements, with eat_nonce
(tests nonce binding and TDX measurement variant).</t>
</list></t>

<t>Invalid vectors exercise specific failure modes across all four
verification layers:</t>

<t><list style="symbols">
  <t><spanx style="verb">v1-wrong-key.json</spanx> (L2: SIG_FAILED)</t>
  <t><spanx style="verb">v1-wrong-alg.json</spanx> (L1: BAD_ALG)</t>
  <t><spanx style="verb">v1-zero-model-hash.json</spanx> (L3: ZERO_MODEL_HASH)</t>
  <t><spanx style="verb">v1-bad-measurement-length.json</spanx> (L3: BAD_MEASUREMENT_LENGTH)</t>
  <t><spanx style="verb">v1-nonce-mismatch.json</spanx> (L4: NONCE_MISMATCH)</t>
  <t><spanx style="verb">v1-model-hash-mismatch.json</spanx> (L4: MODEL_HASH_MISMATCH)</t>
  <t><spanx style="verb">v1-platform-mismatch.json</spanx> (L4: PLATFORM_MISMATCH)</t>
  <t><spanx style="verb">v1-stale-iat.json</spanx> (L4: TIMESTAMP_STALE)</t>
</list></t>

</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>The author thanks the RATS working group for the foundational
architecture (<xref target="RFC9334"/>), the EAT editors for the profiling
framework (<xref target="RFC9711"/>), and the COSE editors for the signing
structures (<xref target="RFC9052"/>). The measurement of confidential computing
overhead referenced in this document was performed on AWS Nitro
Enclaves and GCP Confidential Space (Intel TDX).</t>

</section>


  </back>

<!-- ##markdown-source:
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
uOItLqWWjd6Ee/h/AYZDvpazpAAA

-->

</rfc>
