<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-ritz-eca-00" submissionType="IETF" category="exp" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true">

<front>
<title abbrev="ECA">Ephemeral Compute Attestation (ECA) Protocol</title><seriesInfo value="draft-ritz-eca-00" stream="IETF" status="experimental" name="Internet-Draft"></seriesInfo>
<author fullname="Nathanael Ritz"><organization>Independent</organization><address><postal><street></street>
</postal><email>nathanritz@gmail.com</email></address></author><date year="2025" month="September" day="28"></date>
<area>Security</area>
<workgroup></workgroup>

<abstract>
<t>This document specifies the Ephemeral Compute Attestation (ECA)
protocol, which enables ephemeral compute instances to prove
their identity without pre-shared operational credentials. ECA
uses a three-phase ceremony that cryptographically combines a
public Boot Factor (a high-entropy provisioning value), a secret
Instance Factor, and a dynamically released Validator Factor to
establish attestation evidence. The protocol is transport-agnostic
and produces Entity Attestation Tokens (EAT) for consumption by
Relying Parties, such as within automated certificate issuance
protocols.</t>
</abstract>

</front>

<middle>

<section anchor="scope-problem-statement-and-motivation"><name>Scope, Problem Statement and Motivation</name>
<t>ECA profiles the RATS <xref target="RFC9334"></xref> &quot;passport model&quot;. It assumes
familiarity with the roles defined in the RATS architecture.</t>
<t>Modern software architecture increasingly relies on ephemeral
compute instances, which require a secure and reliable method
to bootstrap their identity upon creation. While solutions exist
for this problem, they are often tied to a specific vendor's
ecosystem or lack the robustness required for certain environments.
This creates significant challenges for portability, security,
and operational consistency across diverse computing landscapes.</t>

<section anchor="the-provider-native-identity-dilemma"><name>The Provider-Native Identity Dilemma</name>
<t>Hyperscale cloud providers (e.g., AWS, GCP, Azure) offer Instance
Metadata Services (IMDS) that can provide a cryptographically
signed token attesting to an instance's identity. This is a mature
model for applications developed to run within a single provider's
environment. However, IMDS typically relies on HTTP-based access
within the instance's network, which can introduce latency in
high-throughput scenarios and requires instances to trust the
provider's metadata endpoint.</t>
</section>

<section anchor="limitations-of-the-current-landscape"><name>Limitations of the Current Landscape</name>
<t>Despite the success of provider-native solutions, their approach
creates a new set of challenges in a world that is increasingly
multi-cloud and security-conscious.</t>

<section anchor="vendor-lock-in-and-portability"><name>Vendor Lock-In and Portability</name>
<t>Workloads are now frequently designed to be portable across
different providers, but their identity bootstrapping mechanisms
are not. An application architected to use the AWS Instance
Identity Document cannot be moved to GCP, a private cloud, or a
bare-metal server without significant re-engineering of its
security and trust establishment logic. This friction couples a
workload's identity to its location, undermining the core goal
of portability.</t>
</section>

<section anchor="the-trust-gap-in-high-assurance-environments"><name>The Trust Gap in High-Assurance Environments</name>
<t>Provider-native identity mechanisms fundamentally require that
the cloud provider itself is a trusted entity. The identity token
is issued by the provider's infrastructure and its validity rests
on that trust. However, in Confidential Computing and other
zero-trust scenarios, the threat model must include a potentially
malicious or compromised provider. AMD SEV or Intel TDX, for
instance, offer memory encryption and remote attestation, but
their reports are tied to specific hardware generations,
complicating migration across diverse fleets. In these cases,
an identity token issued by the infrastructure is insufficient;
trust must be anchored in a separate, verifiable source, such
as a hardware root of trust (HRoT). TPM-based systems, such
as those in TCG specifications, provide measured boot integrity
but often require platform-specific endorsement keys, limiting
interoperability in hybrid setups.</t>
</section>

<section anchor="inconsistency-in-alt-cloud-and-on-premise-environments"><name>Inconsistency in &quot;Alt-Cloud&quot; and On-Premise Environments</name>
<t>For the vast ecosystem of smaller cloud providers, private clouds,
and on-premise data centers, a standardized IMDS-like service
does not exist. This forces operators into less secure or bespoke
bootstrapping patterns, such as injecting pre-shared secrets via
user-data. While a practical starting point, this approach
re-introduces TOFU risks and creates a broad exposure surface
for secrets in logs, state files, and metadata services,
compounding operational complexity at scale. Traditional TOFU,
as seen in SSH key exchanges, assumes initial connections are
secure but can fail in automated deployments where instances are
spun up frequently without human oversight. For example, in
systems like Kubernetes or OpenStack, user-data injection requires
careful configuration management to prevent accidental exposure
during cluster scaling or migrations. For concrete patterns
addressing these risks, see [<tt>I-D.eca-impl</tt>] Section 2.1.</t>
</section>
</section>

<section anchor="eca-an-alternative-approach"><name>ECA: An Alternative Approach</name>
<t>The Ephemeral Compute Attestation (ECA) protocol is designed to
address these limitations directly. It provides a single, open
standard that:</t>

<ul>
<li><t><strong>Decouples Identity from Infrastructure:</strong> ECA establishes
instance identity through a transport-agnostic protocol,
facilitating portability of workloads across environments.</t>
</li>
<li><t><strong>Supports Trust Anchoring:</strong> ECA's design, allows trust to be
anchored by a hardware root of trust (HRoT), providing
cryptographic proof of identity that remains effective even if
the underlying provider is untrusted.</t>
</li>
<li><t><strong>Provides a Standard for Various Environments:</strong> ECA offers a
standardized bootstrapping mechanism for on-premise, bare-metal,
and &quot;alt-cloud&quot; deployments that lack a native identity service.</t>
</li>
</ul>
<t>ECA approaches the bootstrapping problem as a cryptographic
challenge based on verifiable proof of factor possession,
independent of location.</t>
<blockquote><t><strong>Integration with Existing Frameworks:</strong> ECA design focus was
to complement, not replace, existing identity and attestation
frameworks. For detailed exploration of how ECA integrates with
ACME, BRSKI, SPIFFE/SPIRE, and other systems, see [<tt>I-D.eca-impl</tt>]
Section 4 &quot;Integration with Existing Frameworks&quot;.</t>
</blockquote></section>
</section>

<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>
<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;,
&quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;,
and &quot;OPTIONAL&quot; in this document are to be interpreted as described
in BCP 14 <xref target="RFC2119"></xref> <xref target="RFC8174"></xref> when, and only when, they appear
in all capitals, as shown here.</t>

<dl spacing="compact">
<dt><strong>Boot Factor (BF)</strong></dt>
<dd>An exposure-tolerant, high-entropy value (≥128 bits) provisioned
during instance creation. The <tt>BF</tt> value acts as a public
challenge token; the protocol security is maintained even if
<tt>BF</tt> may be exposed in logs or metadata.</dd>
<dt><strong>Instance Factor (IF)</strong></dt>
<dd>A per-instance secret value, known only to the Attester and the
Verifier, that is never transmitted over the public channel.
The Attester must prove possession of the <tt>IF</tt> in conjunction
with the <tt>BF</tt> to authenticate. It may be hardware-derived,
orchestrator-provided, or artifact-based. For concrete patterns
and implementation guidance, see [<tt>I-D.eca-impl</tt>] Section 2.</dd>
<dt><strong>Validator Factor (VF)</strong></dt>
<dd>A confidential value generated and released by the Verifier only
after successful initial authentication of <tt>BF</tt>+<tt>IF</tt> possession.
<strong>The VF MUST be bound to the IF</strong> (e.g.,
<tt>VF = SHA-256(seed || IF)</tt>). This binding ensures <tt>VF</tt> secrecy
against network attackers, as noted in the formal model (see
Appendix A.1).</dd>
<dt><strong>Joint Possession</strong></dt>
<dd>The cryptographic property where security derives from proving
knowledge of multiple factors (<tt>BF</tt>+<tt>VF</tt>) rather than secrecy
of individual components.</dd>
<dt><strong>Integrity Hash Beacon (IHB)</strong></dt>
<dd>A SHA-256 binding of <tt>BF</tt> to <tt>IF</tt> that enables exposure-tolerant
authentication while preventing pre-computation attacks.</dd>
<dt><strong>Instance Factor Pattern (IFP)</strong></dt>
<dd>The set of defined methods for sourcing the secret value for
Instance Factor (<tt>IF</tt>). Three patterns are defined:
hardware-rooted (Pattern A), orchestrator-provisioned
(Pattern B), and artifact-based (Pattern C). For detailed
specifications, see [<tt>I-D.eca-impl</tt>] Section 2.</dd>
<dt><strong>Entity Attestation Token (EAT)</strong></dt>
<dd>A standardized token format <xref target="RFC9711"></xref> used to convey attestation
evidence in a cryptographically verifiable form.</dd>
<dt><strong>Exchange Identifier (eca_uuid)</strong></dt>
<dd>A unique identifier for each attestation lifecycle instance, used
to construct artifact repository paths and prevent replay attacks.</dd>
<dt><strong>Artifact Repository</strong></dt>
<dd>A simple, addressable store (e.g., a web server, an object store)
where peers can publish and retrieve cryptographic artifacts.</dd>
<dt><strong>Attestation Ceremony (&quot;ceremony&quot;)</strong></dt>
<dd>The RATS architecture <xref target="RFC9334"></xref> refers to the exchange between
participants as &quot;attestation procedures.&quot; This document uses
&quot;Attestation Ceremony&quot; (or &quot;ceremony&quot;) synonymously to describe
the complete, multi-phase sequence of cryptographic exchanges
required for an attestation. The term &quot;ceremony&quot; is used
conventionally throughout this specification.</dd>
</dl>
</section>

<section anchor="core-design-principles"><name>Core Design Principles</name>
<t><strong>Exposure Tolerance</strong>: Protocol security is maintained even if the
Boot Factor becomes public. This reduces the operational burden of
protecting bootstrap secrets in logs, configuration systems, or
during provisioning.</t>
<t><strong>Deterministic Identity</strong>: All cryptographic keys are derived
deterministically from high-entropy factors, ensuring repeatable
identity generation without dependence on potentially weak runtime
entropy sources.</t>
<t><strong>Transport Agnostic</strong>: The protocol's security is derived from the
cryptographic content of exchanged artifacts, not the properties
of the transport layer. This allows flexible deployment over any
simple retrieval mechanism.</t>
<t><strong>Relationship to Static Artifact Exchange (SAE):</strong> While ECA is a
transport-agnostic protocol, the Static Artifact Exchange (SAE)
<eref target="">I-D.sae-protocol</eref> is the recommended transport mechanism. SAE's
static, pull-only model is intentionally minimal to reduce the
overall attack surface. This approach reducing common attack
surfaces like injection and parser vulnerabilities. By relying on
SAE, it re-inforces ECA's proof-driven design that relies solely
from the cryptographic content of the exchanged artifacts to
achieve its security goals, while mitigating risks particularly
regarding freshness guarantees (see Appendix A.2.2.).</t>
<t><strong>Privileged Credential Vacuum:</strong> The Attester begins its lifecycle
with no privileged operational credentials (e.g., API keys, service
tokens, or passwords). This operationalizes a &quot;verify-then-trust&quot;
model, ensuring that trust is never assumed but must be
cryptographically proven through successful attestation. Operational
credentials are only delivered after a Relying Party (RP) appraises
the Attestation Result (AR) from the Verifier and deems it
acceptable. For post-attestation patterns including re-attestation
and hierarchical trust, see [<tt>I-D.eca-impl</tt>] Section 3.</t>

<section anchor="protocol-requirements-normative"><name>Protocol Requirements (Normative)</name>
<t>This section defines abstract properties that MUST hold for any
conforming implementation. Concrete algorithms and encodings are
defined by profiles (see Section 8 &quot;Profiles&quot;).</t>

<ol>
<li><t><strong>Accept-Once Ceremony</strong></t>

<ul spacing="compact">
<li>Each attestation ceremony is identified by a globally unique
<tt>eca_uuid</tt>.</li>
<li>A Verifier MUST accept each <tt>eca_uuid</tt> at most once and MUST
treat re-observations as replay and abort. Verifiers SHOULD
use a persistent store (e.g., a database or file) to track
accepted <tt>eca_uuid</tt> values for at least the expected lifetime
of an Attestation Result to prevent replay.</li>
</ul></li>
<li><t><strong>Dual-Channel Binding</strong></t>

<ul>
<li><t>The protocol maintains two logically independent channels:</t>

<ul spacing="compact">
<li>an <strong>Attester channel</strong> (artifacts the Attester serves), and</li>
<li>a <strong>Verifier channel</strong> (artifacts the Verifier serves).</li>
</ul></li>
<li><t>Implementations MUST bind these channels cryptographically so
that artifacts from one channel authenticate critical inputs
from the other (i.e., no single channel can unilaterally
complete the ceremony).</t>
</li>
</ul></li>
<li><t><strong>Privileged Credential Vacuum</strong></t>

<ul spacing="compact">
<li>Any privileged credential or capability MUST NOT be released
to the Attester prior to successful appraisal by the Verifier.</li>
<li>Success is signaled only by a profile-defined positive
terminal artifact; failure is signaled by a profile-defined
authenticated failure artifact.</li>
</ul></li>
<li><t><strong>Authenticated Artifacts</strong></t>

<ul spacing="compact">
<li>Each phase artifact that influences appraisal MUST be
integrity-protected under a key bound to ceremony inputs
defined by the active profile.</li>
<li>Integrity protection MUST cover at minimum: <tt>eca_uuid</tt>,
channel role (Attester/Verifier), and a profile-defined set
of claims sufficient for appraisal.</li>
</ul></li>
<li><t><strong>Replay &amp; Freshness</strong></t>

<ul spacing="compact">
<li>Implementations MUST enforce replay resistance for phase
artifacts within the ceremony lifetime.</li>
<li>Freshness semantics (e.g., timestamps or nonces) MUST be
provided by the active profile and included in the
authenticated data.</li>
</ul></li>
<li><t><strong>Termination &amp; State</strong></t>

<ul spacing="compact">
<li>The Verifier MUST publish a terminal status (success or
authenticated failure).</li>
<li>After terminalization, subsequent artifacts for the same
<tt>eca_uuid</tt> MUST be ignored.</li>
</ul></li>
<li><t><strong>No Attester-Supplied Trust Pinning</strong></t>

<ul spacing="compact">
<li>Verifiers MUST NOT establish trust for appraisal by pinning
any CA or key material supplied by the Attester.</li>
</ul>
<blockquote><t>Note: The security properties of ceremony isolation depend
significantly on the transport mechanism. See Section 6.5
for transport-specific security considerations regarding
Verifier key management.</t>
</blockquote></li>
<li><t><strong>Transport Minimalism</strong></t>

<ul spacing="compact">
<li>The protocol MUST be realizable over a static artifact
repository (poll/pull). Profiles MAY specify additional
transports but MUST NOT weaken the requirements above.</li>
</ul></li>
</ol>
</section>
</section>

<section anchor="protocol-overview"><name>Protocol Overview</name>
<t>The ECA protocol follows a three-phase ceremony, as illustrated in
the figure below. The ceremony begins with the Attester in a
privileged credential vacuum, possessing only its initial factors.
It concludes with the Verifier producing a signed Attestation
Result (AR) upon successful validation, which can then be delivered
to the Attester for presentation to Relying Parties (RP).</t>

<artwork><![CDATA[   Attester                                           Verifier
(possesses BF, IF)                                (expects BF, IF)
      |                                                  |
      |  Phase 1: Prove Possession of BF+IF              |
      |  (publishes IHB, kem_pub, HMAC)                  |
      |------------------------------------------------->|
      |                                                  |
      |                                             (Validates proof
      |                                               at Gates 1-4)
      |                                                  |
      |  Phase 2: Receive Validator Factor               |
      |  (retrieves Encrypted {VF, nonce} + Signature)   |
      |<-------------------------------------------------|
      |                                                  |
      |  Phase 3: Prove Joint Possession of BF+VF        |
      |  (publishes signed Evidence EAT)                 |
      |------------------------------------------------->|
      |                                                  |
      |                                             (Appraises EAT
      |                                               at Gates 5-11)
      |                                                  |
      |<.................................................. (SUCCESS)
      |                                              Attestation
(receives AR for RP)                                  Result (AR)
]]></artwork>

<section anchor="sec-validation-gates"><name>Validation Gates</name>
<t>The Verifier enforces a sequence of fail-closed validation gates
in a specific order derived from the protocol's formal model. Each
gate represents a critical check that must pass before proceeding.</t>

<ol>
<li><t><strong>MAC Verification</strong>: Verifies the integrity of the Phase-1
payload using an HMAC tag derived from <tt>BF</tt> and <tt>IF</tt>.</t>

<ul spacing="compact">
<li>Failure Action: Immediate termination. Publish error status
<tt>MAC_INVALID</tt>.</li>
</ul></li>
<li><t><strong>Instance Authorization</strong>: Checks if the Attester's identity
(e.g., derived from <tt>eca_uuid</tt> or IF) is authorized to proceed.</t>

<ul spacing="compact">
<li>Failure Action: Immediate termination. Publish error status
<tt>ID_MISMATCH</tt>.</li>
</ul></li>
<li><t><strong>IHB Validation</strong>: Confirms that the received Integrity Hash
Beacon (IHB) matches the expected value for the authorized
instance.</t>

<ul spacing="compact">
<li>Failure Action: Immediate termination. Publish error status
<tt>IHB_MISMATCH</tt>.</li>
</ul></li>
<li><t><strong>KEM Public Key Match</strong>: Ensures the ephemeral encryption
public key in the payload matches the expected key for the
session.</t>

<ul spacing="compact">
<li>Failure Action: Immediate termination. Publish error status
<tt>KEM_MISMATCH</tt>.</li>
</ul></li>
<li><t><strong>Evidence Time Window</strong>: Validates that the <tt>iat</tt>, <tt>nbf</tt>, and
<tt>exp</tt> claims in the final EAT are within an acceptable time skew
(e.g., ±60 seconds).</t>

<ul spacing="compact">
<li>Failure Action: Immediate termination. Publish error status
<tt>TIME_EXPIRED</tt>.</li>
</ul></li>
<li><t><strong>EAT Schema Compliance</strong>: Checks that the EAT contains all
required claims with the correct types and encodings.</t>

<ul spacing="compact">
<li>Failure Action: Immediate termination. Publish error status
<tt>SCHEMA_ERROR</tt>.</li>
</ul></li>
<li><t><strong>EAT Signature</strong>: Verifies the Ed25519 signature on the EAT
using the public key derived from <tt>BF</tt> and <tt>VF</tt>.</t>

<ul spacing="compact">
<li>Failure Action: Immediate termination. Publish error status
<tt>SIG_INVALID</tt>.</li>
</ul></li>
<li><t><strong>Nonce Match</strong>: Ensures the nonce in the EAT matches the nonce
the Verifier issued in Phase 2, proving freshness.</t>

<ul spacing="compact">
<li>Failure Action: Immediate termination. Publish error status
<tt>NONCE_MISMATCH</tt>.</li>
</ul></li>
<li><t><strong>JP Validation</strong>: Verifies the Joint Possession proof, ensuring
the final identity key is bound to the ceremony context.</t>

<ul spacing="compact">
<li>Failure Action: Immediate termination. Publish error status
<tt>KEY_BINDING_INVALID</tt>.</li>
</ul></li>
<li><t><strong>PoP Validation</strong>: Verifies the final Proof-of-Possession tag,
confirming the Attester's knowledge of both <tt>BF</tt> and <tt>VF</tt>.</t>

<ul spacing="compact">
<li>Failure Action: Immediate termination. Publish error status
<tt>POP_INVALID</tt>.</li>
</ul></li>
<li><t><strong>Identity Uniqueness (Replay)</strong>: Persists the terminal state
for the <tt>eca_uuid</tt> and rejects any future attempts to use it.</t>

<ul spacing="compact">
<li>Failure Action: Immediate termination. Publish error status
<tt>IDENTITY_REUSE</tt>.</li>
</ul></li>
</ol>
<t>These gates align with the formal model's events (see Appendix A.1):
- Gate 8 Nonce Match (per AttesterUsesNonce event).
- Gate 9 JP Validation (per VerifierValidatesWithKey event).
- Gate 10 PoP Validation (See Section 8) (per VerifierAccepts
  event).</t>
</section>

<section anchor="phase-1-authenticated-channel-setup"><name>Phase 1: Authenticated Channel Setup</name>

<ul spacing="compact">
<li><strong>Attester</strong> generates an ephemeral X25519 keypair
deterministically from <tt>BF</tt> + <tt>IF</tt>.</li>
<li>Computes the Integrity Hash Beacon (IHB):
<tt>IHB = SHA-256(BF || IF)</tt>.</li>
<li>Publishes a CBOR payload containing <tt>{kem_pub, ihb}</tt> and an
associated HMAC tag to the repository.</li>
<li><strong>Verifier</strong> retrieves the published artifacts and validates them
against Gates 1-4.</li>
</ul>
</section>

<section anchor="phase-2-challenge-and-validator-factor-release"><name>Phase 2: Challenge and Validator Factor Release</name>

<ul spacing="compact">
<li><strong>Verifier</strong> generates a fresh <tt>VF</tt> (≥128 bits) and a 16-byte
nonce.</li>
<li>Encrypts <tt>{VF, nonce}</tt> using HPKE to the Attester's ephemeral
public key.</li>
<li>Signs the encrypted payload with its Ed25519 key and publishes it
to the repository.</li>
<li><strong>Attester</strong> retrieves the published payload, verifies its
authenticity, and decrypts the <tt>VF</tt>.</li>
</ul>
</section>

<section anchor="phase-3-joint-possession-proof"><name>Phase 3: Joint Possession Proof</name>

<ul spacing="compact">
<li><strong>Attester</strong> derives a final Ed25519 signing keypair
deterministically from <tt>BF</tt>+<tt>VF</tt>.</li>
<li>Creates a signed EAT containing identity claims, the Verifier's
nonce, and a final Proof-of-Possession HMAC.</li>
<li>Publishes the signed EAT to the repository.</li>
<li><strong>Verifier</strong> retrieves the final EAT and validates it against
Gates 5-11, yielding an Attestation Result (AR) upon success.</li>
</ul>
</section>

<section anchor="key-lifecycle"><name>Key Lifecycle</name>
<t>When using SAE transport <eref target="">I-D.sae-protocol</eref>:
- Implementations MAY use long-term or ephemeral Verifier keys
- Ephemeral per-ceremony keys are RECOMMENDED for operational best
  practice</t>
<t>When using other transports:
- Implementations MUST use ephemeral per-ceremony Verifier keys
  (see Security Considerations Section 6.5.2 for rationale)</t>
</section>
</section>

<section anchor="sec-states"><name>Protocol States</name>
<table>
<thead>
<tr>
<th align="left">State</th>
<th align="left">Description</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><tt>INIT</tt></td>
<td align="left">New attestation lifecycle initiated.</td>
</tr>

<tr>
<td align="left"><tt>AWAITING_ATTESTER_PROOF</tt></td>
<td align="left">Awaiting Phase 1 artifacts.</td>
</tr>

<tr>
<td align="left"><tt>PROVING_TO_ATTESTER</tt></td>
<td align="left">Publishing Phase 2 artifacts.</td>
</tr>

<tr>
<td align="left"><tt>AWAITING_EVIDENCE</tt></td>
<td align="left">Awaiting Phase 3 artifacts.</td>
</tr>

<tr>
<td align="left"><tt>VALIDATING</tt></td>
<td align="left">Appraisal of evidence.</td>
</tr>

<tr>
<td align="left"><tt>SUCCESS</tt></td>
<td align="left">Terminal success state.</td>
</tr>

<tr>
<td align="left"><tt>FAIL</tt></td>
<td align="left">Terminal failure state.</td>
</tr>
</tbody>
</table>
<section anchor="sec-state-transitions"><name>State Transitions</name>
<table>
<thead>
<tr>
<th align="left">State</th>
<th align="left">Event</th>
<th align="left">Next State</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><tt>INIT</tt></td>
<td align="left">New attestation lifecycle.</td>
<td align="left"><tt>AWAITING_ATTESTER_PROOF</tt></td>
</tr>

<tr>
<td align="left"><tt>AWAITING_ATTESTER_PROOF</tt></td>
<td align="left">Phase 1 artifacts retrieved and validated.</td>
<td align="left"><tt>PROVING_TO_ATTESTER</tt></td>
</tr>

<tr>
<td align="left"><tt>PROVING_TO_ATTESTER</tt></td>
<td align="left">Phase 2 artifacts published.</td>
<td align="left"><tt>AWAITING_EVIDENCE</tt></td>
</tr>

<tr>
<td align="left"><tt>AWAITING_EVIDENCE</tt></td>
<td align="left">Phase 3 artifacts retrieved.</td>
<td align="left"><tt>VALIDATING</tt></td>
</tr>

<tr>
<td align="left"><tt>VALIDATING</tt></td>
<td align="left">Appraisal results pass.</td>
<td align="left"><tt>SUCCESS</tt></td>
</tr>

<tr>
<td align="left">Any</td>
<td align="left">Any validation check fails or timeout.</td>
<td align="left"><tt>FAIL</tt></td>
</tr>
</tbody>
</table></section>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t><strong>Trust Boundaries</strong>: Without hardware roots of trust, the security
scope is limited to passive network observers rather than
compromised infrastructure providers. Hardware-rooted Instance
Factor Pattern A addresses this limitation. For detailed pattern
specifications, see [<tt>I-D.eca-impl</tt>] Section 2. This hardware-based
protection is critical for mitigating State Reveal attacks; a
formal analysis confirmed that a compromise of the Attester's
software environment can expose the ephemeral decryption keys used
in Phase 2, thereby compromising the ceremony's core secrets (see
Appendix A.2.3).</t>
<t><strong>Exposure tolerance:</strong> The protocol is designed to tolerate
incidental exposure of the unique per-use Boot Factor token (BF)
(e.g., in control-plane logs), however this tolerance does not
replace the need for sound operational hygiene. Operators SHOULD
avoid unnecessary public dissemination of <tt>BF</tt> to minimize
attracting targeted attacks. Security is layered; cryptographic
strength complements, but does not replace, good operational
practices.</t>
<t><strong>Secrets Handling:</strong> Derived keys are sensitive cryptographic
material. Implementations MUST handle them securely in memory
(e.g., using locked memory pages) and explicitly zeroize them
after use.</t>
<t><strong>Exposure Tolerance:</strong> A core design principle of this protocol
is that the Boot Factor (BF) is considered <strong>public information</strong>
and its security does not depend on the BF's confidentiality. This
exposure tolerance is a deliberate architectural choice that
enables powerful, flexible provisioning patterns, such as using a
public key from an ACME certificate as a verifiable Boot Factor.</t>
<t>This design places the entire security burden for the initial
authentication on the confidentiality of the <strong>Instance Factor
(IF)</strong>. The protocol's security is anchored on the Attester proving
its knowledge of the secret <tt>IF</tt> in conjunction with the public
<tt>BF</tt>.</t>
<t>The operational risk is therefore focused on preventing the
concurrent exposure of both <tt>BF</tt> and <tt>IF</tt>. This risk is tightly
time-bounded by two key factors:</t>

<ol spacing="compact">
<li><strong>The Accept-Once Policy:</strong> The window of vulnerability is
extremely short. Once a Verifier consumes an <tt>eca_uuid</tt> and
successfully completes the ceremony, the &quot;accept-once&quot; rule
renders any stolen factors for that specific ceremony useless
for future impersonation attacks.</li>
<li><strong>Transport Security (SAE):</strong> When using a transport like SAE,
an attacker cannot mount a meaningful impersonation attack
without gaining write access to the secure artifact repository,
which represents a significant and independent security
boundary.</li>
</ol>
<t>Therefore, operational hygiene should focus on protecting the
end-to-end provisioning process to ensure the secrecy of the <tt>IF</tt>
until the ceremony is complete, rather than on attempting to hide
the public <tt>BF</tt>.</t>

<section anchor="security-properties-formal-model"><name>Security Properties (Formal Model)</name>
<t>The protocol's security properties have been analyzed using an
exploratory ProVerif model. The model positively identifies key
security goals such as authentication, freshness, key binding,
and confidentiality against a network attacker, assuming a public
Boot Factor (BF). For a detailed summary of the formal model, its
queries, and the proven properties within the models, see
Appendix A.</t>
</section>

<section anchor="impersonation-risk"><name>Impersonation Risk</name>
<t>The security properties described in Section 6.1 depend on the
secrecy of the joint factors. These properties will be compromised
if both the Boot Factor (BF) and Instance Factor (IF) are exposed
concurrently before a successful ceremony completes. Therefore,
<tt>BF</tt> and <tt>IF</tt> MUST NOT be transmitted together over an unsecured
channel prior to the conclusion of the ceremony. Such exposure
would allow an adversary to intercept the Validator Factor (VF)
and perfectly impersonate the intended Attester.</t>
<t>To reduce this risk, operators SHOULD minimize the time window
between when an Attester becomes operational with its <tt>BF</tt> and when
a Verifier is available to appraise the Attester's evidence.</t>
</section>

<section anchor="threat-models"><name>Threat Models</name>
<t>ECA is designed to address two key threat models: the <strong>Network
Attacker</strong> (a Dolev-Yao-style MiTM who controls communication but
not participant state) and the <strong>Malicious Provider</strong> (a privileged
insider with control-plane access). The analysis from an
exploratory ProVerif model suggests that the protocol, as modelled,
defeats the Network Attacker through its Phase 1 MAC and joint
possession proofs.</t>
<t>The choice of Instance Factor Pattern directly maps to the desired
security goals:</t>

<ul spacing="compact">
<li><strong>IFP Patterns B and C</strong> are sufficient to achieve <strong>workload
portability and standardization</strong>. They protect against Network
Attackers but assume the underlying infrastructure provider is
trusted.</li>
<li><strong>IFP Pattern A</strong> is designed for <strong>high-assurance and zero-trust
environments</strong>. By anchoring the <tt>IF</tt> in a hardware root of trust
(HRoT), it enables strong isolation and is sufficient to mitigate
the Malicious Provider threat model.</li>
</ul>
<t>For detailed pattern specifications and implementation guidance,
see [<tt>I-D.eca-impl</tt>] Section 2.</t>
</section>

<section anchor="attester-state-compromise"><name>Attester State Compromise</name>
<t>The formal model confirms that the protocol cannot maintain secrecy
of the Validator Factor (VF) if the Attester's runtime state is
compromised and the ephemeral decryption key is extracted. The
confidentiality of <tt>VF</tt> is critically dependent on the secrecy of
the Attester's ephemeral private decryption key. A formal &quot;State
Reveal&quot; analysis was conducted, where the Attester's ephemeral
private key was deliberately leaked to an attacker (see Appendix
A.2.3). The model confirmed that this compromise allows a passive
network attacker to intercept the Phase 2 ciphertext from the
Verifier and successfully decrypt it, thereby revealing the <tt>VF</tt>.</t>
<t>This result establishes the protocol's security boundary regarding
the Attester's runtime state. The only viable mitigation for this
threat is the use of IFP Pattern A (hardware-rooted), where the
Instance Factor (IF), and by extension all keys derived from it,
are protected by a hardware root of trust, making them resilient
to software-level compromise.</t>
</section>

<section anchor="verifier-key-compromise-impact-analysis"><name>Verifier Key Compromise Impact Analysis</name>
<t>Formal analysis (Appendix A.2.2) identified that long-term Verifier
keys enable freshness attacks in theory. However, the protocol's
cryptographic binding design <strong>ensures</strong> these attacks cannot
produce valid authentication, limiting impact to denial of service
at worst.</t>
<t>When using SAE transport <eref target="">I-D.sae-protocol</eref>, compromise of
Verifier signing keys has negligible security impact:</t>

<ul spacing="compact">
<li><strong>Authentication remains secure</strong>: Attackers cannot forge
acceptable evidence</li>
<li><strong>Protocol integrity maintained</strong>: All validation gates (8-10)
will reject evidence derived from attacker-injected values</li>
<li><strong>Maximum impact</strong>: Denial of service only</li>
</ul>
<t>This resilience results from two factors:
1. SAE's pull-only architecture prevents message injection without
   repository access
2. ECA's cryptographic binding ensures evidence from corrupted
   ceremonies fails appraisal</t>
<t>Given these mitigations, implementations using SAE MAY use
long-term Verifier keys with acceptable security properties, though
ephemeral keys remain RECOMMENDED for operational hygiene and
ceremony isolation.</t>
<t>Note: Implementations using push-capable or direct-communication
transports MUST use ephemeral per-ceremony keys, as these
transports enable active injection attacks that compromise
freshness.</t>

<section anchor="with-sae-transport-pull-only-model"><name>With SAE Transport (Pull-Only Model)</name>
<t>When using the Static Artifact Exchange (SAE) protocol</t>

<ul spacing="compact">
<li>Compromise of Verifier signing keys is limited to denial-of-
service impact</li>
<li>Attackers cannot inject forged Phase 2 artifacts without
repository write access</li>
<li>Evidence produced under attacker-controlled inputs will fail
appraisal at legitimate Verifiers (Gates 8-10 will reject the
malformed evidence)</li>
</ul>
<t>This mitigation arises from SAE's architectural properties:
- Pull-only communication (no push channel to Attester)
- Repository-based artifact exchange with access control
- Immutability requirements preventing artifact replacement</t>
</section>

<section anchor="with-direct-communication-transports"><name>With Direct Communication Transports</name>
<t>For implementations using direct peer-to-peer communication or
push-capable transports, the formal model (Appendix A.2.2)
demonstrates that:</t>

<ul spacing="compact">
<li>Long-term Verifier keys enable injection of (<tt>VF'</tt>, <tt>nonce'</tt>)
pairs.</li>
<li>This breaks the formal Freshness property.</li>
<li>While authentication still fails (corrupted Evidence is
rejected), the DoS potential justifies mandatory ephemeral keys.</li>
</ul>
<t>Therefore, ephemeral per-ceremony keys are normatively mandated
(MUST) when not using SAE <eref target="">I-D.sae-protocol</eref> or equivalent
pull-only, repository-based transports.</t>
</section>

<section anchor="recommendation-rationale"><name>Recommendation Rationale</name>
<t>While SAE mitigates the immediate security impact of key compromise,
ephemeral keys remain RECOMMENDED for all implementations because
they provide:</t>

<ul spacing="compact">
<li>Ceremony isolation (compromise affects only single attestation)</li>
<li>Operational hygiene through regular key rotation</li>
<li>Clear security boundaries for audit and analysis</li>
<li>Future-proofing against transport mechanism changes</li>
</ul>
</section>
</section>
</section>

<section anchor="non-goals"><name>Non-Goals</name>
<t>ECA explicitly does not attempt to address several related but
distinct problems:</t>
<t><strong>Software-Based Mitigation of Hypervisor Threats:</strong> ECA supports
full integration with hardware roots of trust (HRoT) where
available, and such integration is RECOMMENDED. ECA does not
replace the need for HRoTs where the threat model must assume a
compromised service provider, hypervisor or related platform,
including protections against Attester state compromise (see
Section 6.4).</t>
<t><strong>Replacement for Single-Cloud IMDS:</strong> ECA is not intended to
replace provider-native IMDS for simple workloads operating within
a single, trusted cloud environment. For such use cases, IMDS
provides a simpler, adequate solution. ECA's value is realized in
multi-cloud, high-assurance, or non-IMDS environments.</t>
<t><strong>Infrastructure Trust Bootstrapping</strong>: ECA assumes operational
mechanisms exist for manifest distribution, verifier discovery, and
PKI infrastructure. It integrates with existing trust foundations
rather than replacing them.</t>
<t><strong>Identity Framework Replacement</strong>: ECA complements rather than
competes with systems like SPIFFE/SPIRE, potentially serving as a
high-assurance node attestor for existing identity frameworks. For
detailed integration patterns, see [<tt>I-D.eca-impl</tt>] Section 4.</t>
<t><strong>Manufacturer Provenance</strong>: ECA does not provide supply-chain
attestation or manufacturer-anchored trust. ECA handles runtime
attestation for transient instances at the software layer.</t>
<t><strong>Real-time Performance Optimization</strong>: The asynchronous design
prioritizes security and reliability over minimal latency.
Preliminary efforts suggest total latency of less than 2 seconds
using SAE for VM attestation, which is minimal compared to standard
cloud VM startup time. Sub-second attestation is not a primary
goal, however feedback for secure optimizations are welcomed.</t>
</section>

<section anchor="sec-profiles"><name>Profiles (Normative)</name>
<t>This document defines the protocol abstractly. Concrete
cryptographic mechanisms are supplied by profiles. A conforming
implementation MUST implement at least one profile, and any chosen
profile MUST preserve all requirements in Section 3.1.</t>
<blockquote><t>Note: No MTI Algorithms in this Revision. This -00 revision does
not define mandatory-to-implement (MTI) primitives. A reference
profile (&quot;ECA-VM-v1&quot;) is specified in [<tt>I-D.eca-impl</tt>] Section 6
as a candidate to enable experimentation and interop with the
prototype.</t>
</blockquote><t>Key Separation (Architecture requirement): Regardless of profile,
implementations MUST maintain strict separation between:
- Phase 2 encryption keys (used by the Verifier to release VF to
  the Attester), and
- Phase 3 identity/signing keys (used by the Attester to sign
  Evidence/EAT).</t>
<t>Profiles typically achieve separation via domain-separated KDF
invocations; however, any mechanism that guarantees computational
unlinkability between Phase 2 and Phase 3 key material is
acceptable, provided Section 3 invariants remain intact.</t>

<section anchor="sec-pop"><name>Proof-of-Possession (PoP) Construction</name>
<t>A profile MUST provide a PoP mechanism that proves joint-possession
of both factors used across the ceremony and binds the result to
the session context. At minimum, the PoP's authenticated input MUST
cover:</t>

<ul spacing="compact">
<li><tt>eca_uuid</tt>,</li>
<li>the Integrity Hash Beacon (IHB) or an equivalent <tt>BF</tt>+<tt>IF</tt>
binding,</li>
<li>the Attester's Phase-3 signing public key, and</li>
<li>the Verifier's freshness input (e.g., <tt>vnonce</tt>).</li>
</ul>
<t>The PoP output MUST be verifiable by the Verifier without
additional round trips and MUST be integrity-protected under a key
that is infeasible to compute without both factors required by the
active profile.</t>
</section>
</section>

<section anchor="sec-evidence-profiles"><name>EAT profiles</name>

<section anchor="evidence-claims"><name>Evidence Claims</name>
<table>
<thead>
<tr>
<th align="left">Claim</th>
<th align="left">EAT Key</th>
<th align="left">Value Type</th>
<th align="center">M/O</th>
<th align="left">Description</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><strong>ECA UUID</strong></td>
<td align="left">2 (sub)</td>
<td align="left">tstr</td>
<td align="center">M</td>
<td align="left">The unique <tt>eca_uuid</tt> for the attestation lifecycle. The value of this claim MUST be the <tt>eca_uuid</tt>.</td>
</tr>

<tr>
<td align="left"><strong>Expiration</strong></td>
<td align="left">4 (exp)</td>
<td align="left">int</td>
<td align="center">M</td>
<td align="left">NumericDate (epoch seconds). MUST be encoded as a 64-bit unsigned integer.</td>
</tr>

<tr>
<td align="left"><strong>Not Before</strong></td>
<td align="left">5 (nbf)</td>
<td align="left">int</td>
<td align="center">M</td>
<td align="left">NumericDate (epoch seconds). MUST be encoded as a 64-bit unsigned integer.</td>
</tr>

<tr>
<td align="left"><strong>Issued At</strong></td>
<td align="left">6 (iat)</td>
<td align="left">int</td>
<td align="center">M</td>
<td align="left">NumericDate (epoch seconds). MUST be encoded as a 64-bit unsigned integer.</td>
</tr>

<tr>
<td align="left"><strong>Verifier Nonce</strong></td>
<td align="left">10 (nonce)</td>
<td align="left">tstr</td>
<td align="center">M</td>
<td align="left">Verifier-issued <tt>vnonce</tt> (<strong>base64url</strong>, unpadded) representing exactly 16 bytes of entropy (typically 22 chars).</td>
</tr>

<tr>
<td align="left"><strong>ECA Identity</strong></td>
<td align="left">256 (EUID)</td>
<td align="left">tstr</td>
<td align="center">M</td>
<td align="left"><tt>eca_attester_id</tt> = hex SHA-256 of the Ed25519 public key used to sign this EAT.</td>
</tr>

<tr>
<td align="left"><strong>EAT Profile</strong></td>
<td align="left">265</td>
<td align="left">tstr</td>
<td align="center">M</td>
<td align="left"><tt>urn:ietf:params:eat:profile:eca-v1</tt>.</td>
</tr>

<tr>
<td align="left"><strong>Measurements</strong></td>
<td align="left">273</td>
<td align="left">tstr</td>
<td align="center">M</td>
<td align="left">Integrity Hash Beacon (IHB) (<strong>lowercase hex</strong>).</td>
</tr>

<tr>
<td align="left"><strong>PoP</strong></td>
<td align="left">274 (PoP)</td>
<td align="left">tstr</td>
<td align="center">M</td>
<td align="left">Final Proof of Possession tag (<strong>base64url</strong>, unpadded) computed as defined by the active profile.</td>
</tr>

<tr>
<td align="left"><strong>JP Proof</strong></td>
<td align="left">276</td>
<td align="left">tstr</td>
<td align="center">M</td>
<td align="left">Joint Possession proof (<strong>lowercase hex</strong>), binding the final identity to the ceremony.</td>
</tr>

<tr>
<td align="left"><strong>Intended Use</strong></td>
<td align="left">275</td>
<td align="left">tstr</td>
<td align="center">M</td>
<td align="left">The intended use of the EAT (e.g., attestation, enrollment credential binding).</td>
</tr>
</tbody>
</table><t>Values marked &quot;tstr&quot; that carry binary material (e.g., nonces,
tags) MUST specify their encoding. In the ECA-VM-v1 profile (see
[<tt>I-D.eca-impl</tt>] Section 6), <tt>nonce</tt> and <tt>PoP</tt> are base64url
(unpadded); <tt>EUID</tt>, <tt>Measurements</tt>, and <tt>JP Proof</tt> are lowercase
hex.</t>
</section>

<section anchor="attestation-results"><name>Attestation Results</name>
<table>
<thead>
<tr>
<th align="left">Claim</th>
<th align="left">Key</th>
<th align="left">Value Type</th>
<th align="left">Description</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><strong>Issuer</strong></td>
<td align="left">1</td>
<td align="left">tstr</td>
<td align="left">An identifier for the Verifier that produced the result.</td>
</tr>

<tr>
<td align="left"><strong>Subject</strong></td>
<td align="left">2</td>
<td align="left">tstr</td>
<td align="left">The <tt>eca_attester_id</tt> identity of the instance that was successfully attested.</td>
</tr>

<tr>
<td align="left"><strong>Expiration</strong></td>
<td align="left">4 (exp)</td>
<td align="left">int</td>
<td align="left">OPTIONAL. NumericDate defining the AR's validity period.</td>
</tr>

<tr>
<td align="left"><strong>Not Before</strong></td>
<td align="left">5 (nbf)</td>
<td align="left">int</td>
<td align="left">OPTIONAL. NumericDate defining the AR's validity period.</td>
</tr>

<tr>
<td align="left"><strong>Issued At</strong></td>
<td align="left">6</td>
<td align="left">int</td>
<td align="left">NumericDate (epoch seconds) of the successful validation.</td>
</tr>

<tr>
<td align="left"><strong>JWT ID</strong></td>
<td align="left">7</td>
<td align="left">tstr</td>
<td align="left">The unique <tt>eca_uuid</tt> of the attestation lifecycle to prevent replay.</td>
</tr>

<tr>
<td align="left"><strong>Key ID</strong></td>
<td align="left">-1 (kid)</td>
<td align="left">bstr</td>
<td align="left">OPTIONAL. The hash of the Verifier's public key used to sign the AR.</td>
</tr>

<tr>
<td align="left"><strong>Status</strong></td>
<td align="left">-262148</td>
<td align="left">tstr</td>
<td align="left">The outcome of the attestation. MUST be <tt>urn:ietf:params:rats:status:success</tt>.</td>
</tr>
</tbody>
</table><t>For failures, the AR payload SHOULD follow the same structure but
with a <tt>status</tt> of <tt>urn:ietf:params:rats:status:failure</tt> and an
additional <tt>error_code</tt> claim (e.g., -262149 as a <tt>tstr</tt>)
containing the authenticated error. Relying Parties consuming the
AR MUST validate the <tt>nbf</tt> and <tt>exp</tt> claims to ensure the AR is
within its validity period.</t>
</section>
</section>

<section anchor="transport-considerations"><name>Transport Considerations</name>
<t>The ECA protocol is transport-agnostic. It requires only that
peers have a mechanism to publish and retrieve immutable
cryptographic artifacts from a pre-defined Artifact Repository. The
Static Artifact Exchange (SAE) protocol <eref target="">I-D.sae-protocol</eref> is
specified as the recommended pattern to fulfill this requirement.
SAE's static, &quot;publish-then-poll&quot; model is intentionally chosen to
minimize the attack surface associated with traditional, dynamic
APIs. By avoiding direct request processing, it eliminates entire
classes of vulnerabilities like injection and parser flaws,
ensuring that protocol security is derived from the cryptographic
content of the artifacts alone.</t>
</section>

<section anchor="operational-considerations"><name>Operational Considerations</name>
<t>For detailed operational guidance including scalability, time
synchronization, addressing complexity, and provisioning patterns,
see [<tt>I-D.eca-impl</tt>] Section 5.</t>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>
<t>IANA is requested to register:</t>

<section anchor="sec-iana-eat-profile"><name>EAT Profile</name>

<ul>
<li><t><strong>Profile</strong>: <tt>urn:ietf:params:eat:profile:eca-v1</tt></t>
</li>
<li><t><strong>ECA Attestation Result Claims:</strong> IANA is requested to establish
a registry for ECA Attestation Result Claims as outlined in
Section 9.2. This registry defines the claims used within the
signed CBOR object that constitutes an Attestation Result.</t>
</li>
</ul>
</section>

<section anchor="sec-iana-registries"><name>Registries</name>

<section anchor="sec-iana-errors"><name>ECA Error Codes Registry</name>
<t>This registry defines application-specific error codes that are
used in addition to the base error codes defined in
<eref target="">I-D.sae-protocol</eref>. The Canonical Content string defined here MUST
be used as the input to the HMAC-SHA256 function when generating an
error signal, as specified by the SAE protocol.</t>
<table>
<thead>
<tr>
<th align="left">Code</th>
<th align="left">Canonical Content (UTF-8)</th>
<th align="left">Gate</th>
<th align="left">Description</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><tt>MAC_INVALID</tt></td>
<td align="left"><tt>MAC_INVALID</tt></td>
<td align="left">1</td>
<td align="left">Provided MAC was invalid.</td>
</tr>

<tr>
<td align="left"><tt>ID_MISMATCH</tt></td>
<td align="left"><tt>ID_MISMATCH</tt></td>
<td align="left">2</td>
<td align="left">Provided instance identity was invalid.</td>
</tr>

<tr>
<td align="left"><tt>IHB_MISMATCH</tt></td>
<td align="left"><tt>IHB_MISMATCH</tt></td>
<td align="left">3</td>
<td align="left">Recomputed IHB did not match expected value.</td>
</tr>

<tr>
<td align="left"><tt>KEM_MISMATCH</tt></td>
<td align="left"><tt>KEM_MISMATCH</tt></td>
<td align="left">4</td>
<td align="left">Did not get expected KEM key for the session.</td>
</tr>

<tr>
<td align="left"><tt>TIME_EXPIRED</tt></td>
<td align="left"><tt>TIME_EXPIRED</tt></td>
<td align="left">5</td>
<td align="left">Evidence timestamp was outside valid time window.</td>
</tr>

<tr>
<td align="left"><tt>SCHEMA_ERROR</tt></td>
<td align="left"><tt>SCHEMA_ERROR</tt></td>
<td align="left">6</td>
<td align="left">Attestation token failed schema validation.</td>
</tr>

<tr>
<td align="left"><tt>SIG_INVALID</tt></td>
<td align="left"><tt>SIG_INVALID</tt></td>
<td align="left">7</td>
<td align="left">Attestation token signature failed.</td>
</tr>

<tr>
<td align="left"><tt>NONCE_MISMATCH</tt></td>
<td align="left"><tt>NONCE_MISMATCH</tt></td>
<td align="left">8</td>
<td align="left">Nonce in the EAT did not match the issued nonce.</td>
</tr>

<tr>
<td align="left"><tt>KEY_BINDING_INVALID</tt></td>
<td align="left"><tt>KEY_BINDING_INVALID</tt></td>
<td align="left">9</td>
<td align="left">The key used for validation is not bound to the session's Boot Factor.</td>
</tr>

<tr>
<td align="left"><tt>POP_INVALID</tt></td>
<td align="left"><tt>POP_INVALID</tt></td>
<td align="left">10</td>
<td align="left">The PoP tag was invalid.</td>
</tr>

<tr>
<td align="left"><tt>IDENTITY_REUSE</tt></td>
<td align="left"><tt>IDENTITY_REUSE</tt></td>
<td align="left">11</td>
<td align="left">Attempt to reassign an existing identity.</td>
</tr>

<tr>
<td align="left"><tt>PUBLISHER_INVALID</tt></td>
<td align="left"><tt>PUBLISHER_INVALID</tt></td>
<td align="left">-</td>
<td align="left">Attester artifacts were observed at a repository not hosted by the Attester.</td>
</tr>

<tr>
<td align="left"><tt>TIMEOUT_PHASE1</tt></td>
<td align="left"><tt>TIMEOUT_PHASE1</tt></td>
<td align="left">-</td>
<td align="left">Attester failed to publish Phase 1 artifacts within timeout</td>
</tr>

<tr>
<td align="left"><tt>TIMEOUT_PHASE2</tt></td>
<td align="left"><tt>TIMEOUT_PHASE2</tt></td>
<td align="left">-</td>
<td align="left">Attester failed to publish Phase 2 artifacts within timeout</td>
</tr>

<tr>
<td align="left"><tt>TRANSPORT_ERROR</tt></td>
<td align="left"><tt>TRANSPORT_ERROR</tt></td>
<td align="left">-</td>
<td align="left">Underlying transport protocol error</td>
</tr>
</tbody>
</table></section>
</section>
</section>

<section anchor="acknowledgments"><name>Acknowledgments</name>
<t>The design of this protocol was heavily influenced by the
simplicity and security goals of the <tt>AGE</tt> [AGE] file encryption
tool. The protocol's core cryptographic mechanisms would not be as
simple or robust without the prior work of the IETF community in
standardizing modern primitives, particularly Hybrid Public Key
Encryption (HPKE) in [RFC 9180]. The author wishes to thank the
contributors of these foundational standards for making this work
possible.</t>
</section>

<section anchor="sec-refs"><name>References</name>

<dl spacing="compact">
<dt><eref target="">I-D.sae-protocol</eref></dt>
<dd>Ritz, N., &quot;Static Artifact Exchange (SAE) Protocol&quot;, Work in
Progress, Internet-Draft, draft-ritz-sae-00, 28 September 2025.</dd>
<dt>[<tt>I-D.eca-impl</tt>]</dt>
<dd>Ritz, N., &quot;Ephemeral Compute Attestation (ECA) - Implementation
Guide&quot;, Work in Progress, Internet-Draft, draft-ritz-eca-impl-00,
28 September 2025.</dd>
<dt><xref target="RFC2119"></xref></dt>
<dd>Bradner, S., &quot;Key words for use in RFCs to Indicate Requirement
Levels&quot;, BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997,
<eref target="https://www.rfc-editor.org/info/rfc2119">https://www.rfc-editor.org/info/rfc2119</eref>.</dd>
<dt><xref target="RFC4648"></xref></dt>
<dd>Josefsson, S., &quot;The Base16, Base32, and Base64 Data Encodings&quot;,
RFC 4648, DOI 10.17487/RFC4648, October 2006,
<eref target="https://www.rfc-editor.org/info/rfc4648">https://www.rfc-editor.org/info/rfc4648</eref>.</dd>
<dt><xref target="RFC5869"></xref></dt>
<dd>Krawczyk, H. and P. Eronen, &quot;HMAC-based Extract-and-Expand Key
Derivation Function (HKDF)&quot;, RFC 5869, DOI 10.17487/RFC5869, May
2010, <eref target="https://www.rfc-editor.org/info/rfc5869">https://www.rfc-editor.org/info/rfc5869</eref>.</dd>
<dt><xref target="RFC6234"></xref></dt>
<dd>Eastlake 3rd, D. and T. Hansen, &quot;US Secure Hash Algorithms (SHA
and SHA-based HMAC and HKDF)&quot;, RFC 6234, DOI 10.17487/RFC6234,
May 2011, <eref target="https://www.rfc-editor.org/info/rfc6234">https://www.rfc-editor.org/info/rfc6234</eref>.</dd>
<dt><xref target="RFC7519"></xref></dt>
<dd>Jones, M., Bradley, J., and N. Sakimura, &quot;JSON Web Token (JWT)&quot;,
RFC 7519, DOI 10.17487/RFC7519, May 2015,
<eref target="https://www.rfc-editor.org/info/rfc7519">https://www.rfc-editor.org/info/rfc7519</eref>.</dd>
<dt><xref target="RFC7748"></xref></dt>
<dd>Langley, A., Hamburg, M., and S. Turner, &quot;Elliptic Curves for
Security&quot;, RFC 7748, DOI 10.17487/RFC7748, January 2016,
<eref target="https://www.rfc-editor.org/info/rfc7748">https://www.rfc-editor.org/info/rfc7748</eref>.</dd>
<dt><xref target="RFC8032"></xref></dt>
<dd>Josefsson, S. and I. Liusvaara, &quot;Edwards-Curve Digital Signature
Algorithm (EdDSA)&quot;, RFC 8032, DOI 10.17487/RFC8032, January 2017,
<eref target="https://www.rfc-editor.org/info/rfc8032">https://www.rfc-editor.org/info/rfc8032</eref>.</dd>
<dt><xref target="RFC8174"></xref></dt>
<dd>Leiba, B., &quot;Ambiguity of Uppercase vs Lowercase in RFC 2119 Key
Words&quot;, BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017,
<eref target="https://www.rfc-editor.org/info/rfc8174">https://www.rfc-editor.org/info/rfc8174</eref>.</dd>
<dt><xref target="RFC8392"></xref></dt>
<dd>Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, &quot;CBOR
Web Token (CWT)&quot;, RFC 8392, DOI 10.17487/RFC8392, May 2018,
<eref target="https://www.rfc-editor.org/info/rfc8392">https://www.rfc-editor.org/info/rfc8392</eref>.</dd>
<dt><xref target="RFC8949"></xref></dt>
<dd>Bormann, C. and P. Hoffman, &quot;Concise Binary Object Representation
(CBOR)&quot;, STD 94, RFC 8949, DOI 10.17487/RFC8949, December 2020,
<eref target="https://www.rfc-editor.org/info/rfc8949">https://www.rfc-editor.org/info/rfc8949</eref>.</dd>
<dt><xref target="RFC8995"></xref></dt>
<dd>Pritikin, M., Richardson, M., Eckert, T., Behringer, M., and K.
Watsen, &quot;Bootstrapping Remote Secure Key Infrastructure (BRSKI)&quot;,
RFC 8995, DOI 10.17487/RFC8995, May 2021,
<eref target="https://www.rfc-editor.org/info/rfc8995">https://www.rfc-editor.org/info/rfc8995</eref>.</dd>
<dt><xref target="RFC9180"></xref></dt>
<dd>Barnes, R., Bhargavan, K., Lipp, B., and C. Wood, &quot;Hybrid Public
Key Encryption&quot;, RFC 9180, DOI 10.17487/RFC9180, February 2022,
<eref target="https://www.rfc-editor.org/info/rfc9180">https://www.rfc-editor.org/info/rfc9180</eref>.</dd>
<dt><xref target="RFC9334"></xref></dt>
<dd>Birkholz, H., Thaler, D., Richardson, M., Smith, N., and W. Pan,
&quot;Remote ATtestation procedureS (RATS) Architecture&quot;, RFC 9334,
DOI 10.17487/RFC9334, January 2023,
<eref target="https://www.rfc-editor.org/info/rfc9334">https://www.rfc-editor.org/info/rfc9334</eref>.</dd>
<dt><xref target="RFC9711"></xref></dt>
<dd>Mandyam, G., Lundblade, L., Ballesteros, M., and J. O'Donoghue,
&quot;The Entity Attestation Token (EAT)&quot;, RFC 9711,
DOI 10.17487/RFC9711, August 2025,
<eref target="https://www.rfc-editor.org/info/rfc9711">https://www.rfc-editor.org/info/rfc9711</eref>.</dd>
<dt>[AGE]</dt>
<dd>Valsorda, F. and Cartwright-Cox, B., &quot;The age encryption
specification&quot;, February 2022, <eref target="https://age-encryption.org/v1">https://age-encryption.org/v1</eref>.</dd>
<dt>[ECA-PV-BL-MODEL]</dt>
<dd>title: &quot;ECA ProVerif: Baseline Happy Path (model)&quot;
target: <eref target="https://github.com/eca-sae/internet-drafts-eca-sae/blob/pv0.3.0/formal-model/eca-pv.baseline.happy-path.model.txt">https://github.com/eca-sae/internet-drafts-eca-sae/blob/pv0.3.0/formal-model/eca-pv.baseline.happy-path.model.txt</eref>
date: 2025-09-26</dd>
<dt>[ECA-PV-BL-PROOF]</dt>
<dd>title: &quot;ECA ProVerif: Baseline Happy Path (proof)&quot;
target: <eref target="https://github.com/eca-sae/internet-drafts-eca-sae/blob/pv0.3.0/formal-model/eca-pv.baseline.happy-path.proof.txt">https://github.com/eca-sae/internet-drafts-eca-sae/blob/pv0.3.0/formal-model/eca-pv.baseline.happy-path.proof.txt</eref>
date: 2025-09-26</dd>
<dt>[ECA-PV-AT-FS-MODEL]</dt>
<dd>title: &quot;ECA ProVerif: Advanced Threats – Forward Secrecy (model)&quot;
target: <eref target="https://github.com/eca-sae/internet-drafts-eca-sae/blob/pv0.3.0/formal-model/eca-pv.advanced-threat.forward-secrecy.model.txt">https://github.com/eca-sae/internet-drafts-eca-sae/blob/pv0.3.0/formal-model/eca-pv.advanced-threat.forward-secrecy.model.txt</eref>
date: 2025-09-26</dd>
<dt>[ECA-PV-AT-SR-MODEL]</dt>
<dd>title: &quot;ECA ProVerif: Advanced Threats – State Reveal (model)&quot;
target: <eref target="https://github.com/eca-sae/internet-drafts-eca-sae/blob/pv0.3.0/formal-model/eca-pv.advanced-threat.state-reveal.model.txt">https://github.com/eca-sae/internet-drafts-eca-sae/blob/pv0.3.0/formal-model/eca-pv.advanced-threat.state-reveal.model.txt</eref>
date: 2025-09-26</dd>
</dl>
</section>

</middle>

<back>
<references><name>Informative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5869.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6234.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7748.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8032.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8392.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8995.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9180.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9334.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9711.xml"/>
</references>

<section anchor="appendix-a-formal-modelling-informative"><name>Formal Modelling (Informative)</name>
<t>The protocol's security properties were analyzed using an
exploratory formal model in ProVerif [ECA-PV-BL-MODEL]. The model
assumes a powerful Dolev-Yao network attacker who can intercept,
modify, and inject messages. It also correctly models the Boot
Factor (<tt>BF</tt>) as public knowledge from the start, as per the
protocol's &quot;exposure tolerance&quot; principle (Section 3).</t>
<t>The analysis was conducted in two parts: verification of the core
security properties against a network attacker, and an analysis of
the protocol's behavior under specific key compromise scenarios to
define its security boundaries.</t>

<section anchor="core-security-properties-baseline-model"><name>Core Security Properties (Baseline Model)</name>
<t>In the baseline model, all core security goals were successfully
shown to hold against a network attacker [ECA-PV-BL-PROOF].</t>
<table>
<thead>
<tr>
<th align="left">Property</th>
<th align="left">ProVerif Query</th>
<th align="left">Result</th>
<th align="left">Interpretation</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><strong>Authentication</strong></td>
<td align="left"><tt>inj-event(VerifierAccepts(...)) ==&gt; inj-event(AttesterInitiates(...))</tt></td>
<td align="left"><strong>True</strong></td>
<td align="left">The Verifier only accepts an attestation if a unique Attester legitimately initiated it. This prevents an attacker from impersonating the Attester.</td>
</tr>

<tr>
<td align="left"><strong>Freshness</strong></td>
<td align="left"><tt>event(AttesterUsesNonce(n)) ==&gt; event(VerifierGeneratesNonce(n))</tt></td>
<td align="left"><strong>True</strong></td>
<td align="left">The Attester will only use a nonce that was genuinely generated by the Verifier for that ceremony. This property is the basis for <strong>Gate 8 (Nonce Match)</strong> and prevents replay attacks.</td>
</tr>

<tr>
<td align="left"><strong>Key Binding</strong></td>
<td align="left"><tt>event(VerifierValidatesWithKey(pk)) ==&gt; event(AttesterPresentsKey(pk))</tt></td>
<td align="left"><strong>True</strong></td>
<td align="left">The final identity key that the Verifier checks is unambiguously bound to the Attester that participated in the ceremony, validating <strong>Gate 9 (JP Validation)</strong>.</td>
</tr>

<tr>
<td align="left"><strong>Confidentiality</strong></td>
<td align="left"><tt>not (event(VFReleased(vf)) &amp;&amp; attacker(vf))</tt></td>
<td align="left"><strong>True</strong></td>
<td align="left">The secret <tt>ValidatorFactor</tt> (<tt>VF</tt>) is never revealed to a network attacker, satisfying a fundamental security goal of the protocol.</td>
</tr>
</tbody>
</table></section>

<section anchor="boundary-analysis-advanced-threat-models"><name>Boundary Analysis (Advanced Threat Models)</name>
<t>Additional tests were performed to formally define the protocol's
security boundaries under specific compromise scenarios.</t>

<section anchor="key-compromise-impersonation-kci"><name>Key Compromise Impersonation (KCI)</name>
<t>A test was conducted where an attacker compromises an
<tt>InstanceFactor</tt> (<tt>IF</tt>) from one ceremony and attempts to
impersonate a Verifier in a different ceremony [ECA-PV-BL-MODEL].
The model indicated this attack is not possible [ECA-PV-BL-PROOF].
The KCI security query passed, confirming that compromising a
secondary factor (<tt>IF</tt>) does not allow an attacker to forge
messages from a primary party (the Verifier), as they still lack
the Verifier's private signing key.</t>
</section>

<section anchor="verifier-key-compromise"><name>Verifier Key Compromise</name>
<t>A test was conducted modeling a compromised long-term Verifier
signing key [ECA-PV-AT-FS-MODEL]:</t>

<ul>
<li><t><strong>Result</strong>: The model demonstrated that an attacker can inject
arbitrary (VF', nonce') pairs, breaking the Freshness property
(<tt>event(AttesterUsesNonce(n)) ==&gt; event(VerifierGeneratesNonce(n))</tt>
was <strong>False</strong>).</t>
</li>
<li><t><strong>Interpretation</strong>: While the formal model identifies a freshness
violation, the protocol's cryptographic design ensures this only
enables denial of service, not authentication bypass:</t>
</li>
<li><t>The attacker can cause the Attester to derive keys from (<tt>BF</tt>,
<tt>VF'</tt>)</t>
</li>
<li><t>However, the resulting Evidence will contain:</t>

<ul spacing="compact">
<li>Wrong nonce (fails Gate 8)</li>
<li>Wrong JP proof (fails Gate 9)</li>
<li>Wrong PoP tag (fails Gate 10)</li>
<li>No correctly implemented Verifier should accept this Evidence</li>
</ul></li>
</ul>
<t>Furthermore, when using SAE transport <eref target="">I-D.sae-protocol</eref>, even this
DoS attack becomes infeasible without repository write access, as
noted in Section 6.5.1.</t>

<ul spacing="compact">
<li><t><strong>Mitigation</strong>: This analysis provides the formal rationale for:</t>

<ul spacing="compact">
<li>Section 6.5.2's requirement for ephemeral keys with
push-capable transports</li>
<li>Section 6.5.1's relaxed guidance when using SAE transport</li>
</ul></li>
</ul>
</section>

<section anchor="attester-state-reveal"><name>Attester State Reveal</name>
<t>A test was conducted modeling a compromised Attester whose
ephemeral private decryption key is leaked [ECA-PV-AT-SR-MODEL].</t>

<ul>
<li><t><strong>Result</strong>: The model demonstrated that this allows a passive
attacker to decrypt the Phase 2 ciphertext and steal the
<tt>ValidatorFactor</tt> (<tt>VF</tt>)
(<tt>not (event(VFReleased(vf)) &amp;&amp; attacker(vf))</tt> was <strong>False</strong>).</t>
</li>
<li><t><strong>Interpretation</strong>: This result formally establishes the security
boundary discussed in Section 6.4</t>
</li>
<li><t><strong>Mitigation</strong>: This analysis provides the formal rationale for
hardware-rooted Instance Factor Pattern A when the threat model
must assume compromise of the underlying provisioning platform.
For pattern specifications, see [<tt>I-D.eca-impl</tt>] Section 2.</t>
</li>
</ul>
</section>
</section>
</section>

</back>

</rfc>
