<?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-mw-wimse-transitive-attestation-00" submissionType="IETF" category="info" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true">

<front>
<title abbrev="WIMSE-TRANS-POR">Transitive Attestation for Sovereign Workloads: A WIMSE Profile</title><seriesInfo value="draft-mw-wimse-transitive-attestation-00" status="informational" name="Internet-Draft"></seriesInfo>
<author initials="R." surname="Krishnan" fullname="Ram Krishnan"><organization>JPMorgan Chase &amp; Co</organization><address><postal><street></street>
</postal><email>ramkri123@gmail.com</email>
</address></author><author initials="A." surname="Prasad" fullname="A Prasad"><organization>Oracle</organization><address><postal><street></street>
</postal><email>a.prasad@oracle.com</email>
</address></author><author initials="D." surname="Lopez" fullname="Diego R. Lopez"><organization>Telefonica</organization><address><postal><street></street>
</postal><email>diego.r.lopez@telefonica.com</email>
</address></author><author initials="S." surname="Addepalli" fullname="Srinivasa Addepalli"><organization>Aryaka</organization><address><postal><street></street>
</postal><email>srinivasa.addepalli@aryaka.com</email>
</address></author><date/>
<area>Security</area>
<workgroup>WIMSE</workgroup>
<keyword>attestation</keyword>
<keyword>wimse</keyword>
<keyword>transitive</keyword>
<keyword>workload identity</keyword>
<keyword>residency</keyword>

<abstract>
<t>This document defines a <strong>WIMSE Profile</strong> for Transitive Attestation within the Workload Identity in Multi-Service Environments (WIMSE) framework. It addresses the critical problem of <strong>Identity Portability</strong>, where software credentials (e.g., bearer tokens or keys) can be misappropriated and used from unauthorized environments—a risk amplified by the emergence of autonomous <strong>AI Agents</strong> that may move across jurisdictions or be hijacked via <strong>prompt injection attacks</strong>. By providing a standardized <strong>Identity Conveyance</strong> mechanism, this profile cryptographically binds software workloads to their local execution environment (&quot;Proof of Residency&quot;) through a transitive chain of trust. This chain consumes <strong>Evidence</strong> from the underlying platform—supporting both <strong>high-assurance</strong> RATS-based profiles (e.g., [[!I-D.lkspa-wimse-verifiable-geo-fence]]) for residency verification and <strong>standard</strong> Workload Identity Agents for basic co-location proofs—to ensure that an identity is only valid when used from a verified, integral, or geographically compliant host. The integrity and hardware-rooted security of the Workload Identity Agent itself is considered out-of-scope for this document and is addressed in the <strong>Verifiable Geofencing</strong> profile [[!I-D.lkspa-wimse-verifiable-geo-fence]].</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>This document defines the <strong>WIMSE Profile</strong> for &quot;Transitive Attestation&quot;, addressing a critical technical gap in the high-level <strong>WIMSE Architecture</strong> [[!I-D.ietf-wimse-arch]] regarding how platform-level trust is transitively extended to software workloads.</t>
<t>Currently, workload identities are often &quot;context-agnostic&quot;—once a credential (e.g., a bearer token) is issued, it can often be used from any environment. This <strong>Identity Portability</strong> allows an attacker who steals a token in one jurisdiction to use it from another, representing a significant <strong>Sovereignty Violation</strong> for workloads legally required to operate within specific boundaries. This is particularly critical for <strong>AI Agents</strong>, whose autonomous nature, susceptibility to hijacking via <strong>prompt injection attacks</strong>, and potential for rapid migration across cloud environments require strict, verifiable adherence to data residency and host integrity policies.</t>
<t>By addressing the <strong>North-South</strong> security axis of a workload's relationship with its local hosting environment, this profile establishes a <strong>&quot;Silicon-to-SVID&quot;</strong> chain of accountability. It ensures that the Workload Identity Agent (the local agent) is empowered to issue identities that are cryptographically bound to a verified execution context. This mechanism is flexible across assurance levels: it supports <strong>High Assurance</strong> residency verification rooted in hardware evidence (e.g., TPM/TEE), as well as <strong>Standard Assurance</strong> local co-location proofs provided by conventional workload agents.</t>
<t>This draft acts as the <strong>Conveyance Layer</strong> that integrates with the findings of a <strong>RATS Profile</strong> (such as <strong>Verifiable Geofencing</strong> [[!I-D.lkspa-wimse-verifiable-geo-fence]]) to establish two distinct levels of assurance:</t>

<ul spacing="compact">
<li><strong>Co-location Verification</strong>: A logical binding that ensures the workload and its agent are currently co-located on the same host, typically enforced via operating system isolation and local communication channels (e.g., Unix Domain Sockets).</li>
<li><strong>Residency Verification (High Assurance)</strong>: A high-assurance binding where the Workload Identity Agent itself is proven to be integral and rooted in hardware. This ensures the identity is functionally &quot;sticky&quot; to the verified residence via a <strong>Fast Path</strong> renewal which uses cached attestation results.</li>
</ul>
<t>A workload obtains a fresh signature or proof from a local Workload Identity Agent, typically utilizing a <strong>Workload Fusion Nonce (N_fusion)</strong> to prevent replay. This ensures the identity—and the usage of its associated credentials—is sensitive to the physical or logical residence of the workload, complementing the &quot;East-West&quot; delegation models. Re-attestation follows a <strong>Tiered Schedule</strong> (see [[!I-D.lkspa-wimse-verifiable-geo-fence]]), separating frequent identity renewal from heavyweight platform evidence collection.</t>
</section>

<section anchor="terminology"><name>Terminology</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 [[RFC2119]] [[RFC8174]] when, and only when, they appear in all capitals, as shown here.</t>
<t>This document leverages the terminology defined in the RATS Architecture [[RFC9334]] and the WIMSE Architecture [[!I-D.ietf-wimse-arch]].</t>

<dl spacing="compact">
<dt>Workload Identity Agent (Workload Identity Agent):</dt>
<dd>A local entity that acts as an <strong>Attester</strong> or <strong>Attestation Intermediate</strong> in the RATS framework. It is responsible for providing Evidence or Attestation Results to a workload.</dd>
<dt>Proof of Residency (PoR) / Co-location:</dt>
<dd>A cryptographic proof that binds a workload's current execution session to a specific, verified local environment or host.</dd>
<dt>N_fusion (Workload Fusion Nonce):</dt>
<dd>A nonce provided by the Relying Party specifically for the workload-to-agent fusion flow. It ensures the freshness of the residency proof and cryptographically binds the workload's request to the local agent's attestation.</dd>
</dl>
<t>Workload identities are often represented by bearer tokens or keys that, once compromised, can be used by an attacker from any environment. This &quot;portability&quot; allows an attacker who achieves RCE on a workload (e.g., in Region A) or hijacks an AI agent's logic via <strong>prompt injection</strong> to use the stolen keys or intercepted tokens from an attacking machine (e.g., in Region B).</t>
<t>In the context of <strong>Sovereign Workloads</strong>, this portability is more than a technical vulnerability; it is a <strong>Sovereignty Violation</strong>. If a workload is legally or logically required to operate within a specific jurisdiction, any identity that can be successfully verified from outside that jurisdiction represents a failure of the sovereign boundary. Relying Parties currently lack a standardized way to ensure that a presented identity is being used from the same verified host that was originally authorized.</t>
</section>

<section anchor="scope-and-boundaries"><name>Scope and Boundaries</name>
<t>This document focuses on the <strong>Identity Conveyance</strong> and <strong>Session Binding</strong> mechanisms required for Transitive Attestation. It standardizes how a workload proves its co-location with a local agent and how that proof is bound to application sessions (e.g., mTLS or DPoP).</t>
<t>The following areas are explicitly <strong>OUT OF SCOPE</strong> for this profile:</t>

<ul spacing="compact">
<li><strong>Agent Identity and Integrity</strong>: The mechanism by which a Workload Identity Agent (e.g., SPIRE Agent) proves its own identity and code integrity to a remote verifier.</li>
<li><strong>Platform Attestation</strong>: The collection and verification of hardware-level evidence (TPM quotes, TEE measurements) for the host platform.</li>
<li><strong>Workload Identity Manager Interactions</strong>: The specific protocols and APIs for obtaining nonces or credentials from a <strong>Workload Identity Manager (WIM Manager)</strong> during the issuance phase (e.g., SVID CSRs).</li>
</ul>
<t>These security guarantees are provided by the underlying <strong>RATS Profile</strong> for <strong>Verifiable Geofencing</strong> [[!I-D.lkspa-wimse-verifiable-geo-fence]]. This WIMSE profile assumes that the Workload Identity Agent is operating in a verified, integral state as established by the Geofencing layer.</t>
</section>

<section anchor="the-solution-transitive-attestation-for-proof-of-residency"><name>The Solution: Transitive Attestation for Proof of Residency</name>
<t>&quot;Transitive Attestation&quot; establishes a chain of trust from a hardware root through a local agent to the workload. The Workload Identity Agent provides the workload with a &quot;live&quot; proof that it is currently resident on the verified host. This local peer-to-peer connection is typically enforced through a <strong>Unix Domain Socket (UDS)</strong>, providing a kernel-level guarantee that the workload is co-located with the hardware-rooted agent.</t>

<section anchor="mtls-based-transitive-attestation"><name>mTLS-based Transitive Attestation</name>
<t>In an mTLS environment, the Proof of Residency (PoR) is bound to the mutually authenticated session and the local execution context via a transitive chain of trust.</t>

<section anchor="mtls-por-protocol-flow"><name>mTLS PoR Protocol Flow</name>
<t>The mTLS-based flow integrates residency verification into the session establishment and validation phase:</t>

<ol spacing="compact">
<li><strong>Certificate Extensions</strong>: The client (workload) supplies an X.509 certificate during the mTLS handshake containing a custom extension. This extension includes the public key or SVID details of the local Workload Identity Agent (Attester).</li>
<li><strong>Post-Handshake Nonce</strong>: After the mTLS handshake is successfully completed, the client requests a residency-specific nonce from the <strong>Verifier</strong> (e.g., Relying Party) to ensure anti-replay.</li>
<li><t><strong>Local Attestation Binding</strong>: The client constructs a PoR assertion payload containing:</t>

<ul spacing="compact">
<li>A cryptographic hash of the TLS Exporter value [[RFC5705]].</li>
<li>The residency nonce provided by the server.</li>
<li>A timestamp representing the current time of assertion creation.
<br />
</li>
</ul></li>
</ol>
<blockquote><t>[!NOTE]
By binding to the TLS Exporter instead of the application traffic keys, the Proof of Residency remains valid across TLS 1.3 <tt>KeyUpdate</tt> operations. Standard key rotation refreshes traffic keys but does not change the exporter master secret, thus avoiding unnecessary re-attestation cycles while maintaining strong cryptographic binding to the session.</t>
</blockquote>
<ol spacing="compact" start="4">
<li><strong>Agent Signature</strong>: The client sends this payload to the local Workload Identity Agent (typically via a Unix Domain Socket). The Workload Identity Agent verifies the local peer environment and signs the payload with its private key.</li>
<li><strong>PoR Submission</strong>: The client sends this attested response to the resource server for verification.</li>
<li><t><strong>Server Verification</strong>: The <strong>Verifier</strong> performs a joint verification of identity and residency:</t>

<ul spacing="compact">
<li><strong>Identity</strong>: Verifies the client certificate as part of standard mTLS.</li>
<li><strong>Residency</strong>: Verifies the PoR assertion signature against the Workload Identity Agent public key found in the client's certificate extension.</li>
<li><strong>Binding and Freshness</strong>: Ensures that the TLS Exporter hash, the nonce, and the timestamp match the current active session and are within an acceptable freshness window.</li>
</ul></li>
</ol>
<t>Upon successful verification, the resource server has proof that the client identity (presented via mTLS) is currently resident in the same authorized environment as the verified Workload Identity Agent.</t>
</section>
</section>

<section anchor="demonstrating-proof-of-residency-dpor"><name>Demonstrating Proof of Residency (DPoR)</name>
<t>&quot;Demonstrating Proof of Residency&quot; (DPoR) is an enhancement to the Demonstrating Proof-of-Possession (DPoP) mechanism defined in [[RFC9449]]. While DPoP ensures <em>possession</em> of a private key held by the client, DPoR ensures the physical or logical <em>residency</em> of the workload using that key by binding the request to a local attestation.</t>

<section anchor="dpor-protocol-flow"><name>DPoR Protocol Flow</name>
<t>The DPoR flow integrates residency verification into the per-request application-level authorization:</t>

<ol spacing="compact">
<li><strong>Nonced Request</strong>: The <strong>Verifier</strong> SHOULD provide a residency-specific nonce (e.g., via a <tt>DPoR-Nonce</tt> header) to the client to ensure anti-replay of the residency proof.</li>
<li><t><strong>Local Attestation Binding</strong>: The client constructs a DPoR assertion payload containing:</t>

<ul spacing="compact">
<li>The hash of the DPoP public key used for the request (e.g., the <tt>jkt</tt> thumbprint).</li>
<li>The residency nonce provided by the server.</li>
<li>A timestamp representing the current time of assertion creation.</li>
</ul></li>
<li><strong>Agent Signature</strong>: The client sends this payload to the local Workload Identity Agent (typically via a Unix Domain Socket). The Workload Identity Agent (acting as an Attester) verifies the local execution context and signs the payload with its private key.</li>
<li><strong>DPoR Assertion Submission</strong>: The client includes the resulting signature in a <tt>DPoR</tt> header or as an extension to the <tt>DPoP</tt> JWT.</li>
<li><t><strong>Server Verification</strong>: The <strong>Verifier</strong> performs a joint verification of possession and residency:</t>

<ul spacing="compact">
<li><strong>Possession</strong>: Verifies the DPoP proof as per [[RFC9449]].</li>
<li><strong>Residency</strong>: Verifies the DPoR assertion signature against the Workload Identity Agent public key.</li>
<li><strong>Binding and Freshness</strong>: Ensures that the <tt>jkt</tt> (DPoP key thumbprint), the nonce, and the timestamp in the residency proof match the current request and are within an acceptable freshness window.</li>
</ul></li>
</ol>
<t>This binding ensures that a DPoP key cannot be &quot;exported&quot; and used from a different machine, as the resource server would detect the lack of a valid, hardware-rooted residency proof for that specific key from the new environment.</t>
</section>
</section>

<section anchor="confidential-computing-and-hardware-rooted-binding"><name>Confidential Computing and Hardware-Rooted Binding</name>
<t>In Confidential Computing (CC) environments, the Relationship between high-level workload identities and hardware-rooted evidence is formalized through specific architectural patterns. This section details how Transitive Attestation bridges the gap between hardware quotes and application-layer identities.</t>

<section anchor="logical-quoting-enclave"><name>Logical Quoting Enclave</name>
<t>In a Transitive Attestation model, trust is passed through a chain of components.</t>

<ul spacing="compact">
<li><strong>Hardware Layer</strong>: A Confidential Computing environment (e.g., Intel TDX or SGX) provides a &quot;Hardware Root of Trust.&quot;</li>
<li><strong>Intermediate Layer (Workload Identity Agent)</strong>: In this profile, the Workload Identity Agent (e.g., a SPIRE Agent) is treated as the trusted software component that &quot;vouches&quot; for the workloads.</li>
<li><strong>Logical Equivalent</strong>: By running the Workload Identity Agent inside a TEE (Trusted Execution Environment), the hardware can attest to the integrity of the agent. This allows the agent to act as a &quot;Compliance Bridge&quot; as defined in [[!I-D.lkspa-wimse-verifiable-geo-fence]]. Just as a hardware <strong>Quoting Enclave (QE)</strong> signs a local report to turn it into a globally verifiable &quot;Quote,&quot; the Workload Identity Agent (running in a TEE) signs Workload Identity Documents (SVIDs/WITs). Effectively, the agent becomes a <em>logical</em> quoting enclave that bridges hardware-rooted trust to software-level workload identities.</li>
</ul>
</section>

<section anchor="channel-binding-via-tls-exporter"><name>Channel Binding via TLS Exporter</name>
<t>To prevent man-in-the-middle (MITM) and replay attacks, the hardware evidence must be cryptographically bound to the communication channel. This is achieved using the <strong>TLS Exporter</strong> [[RFC5705]].</t>

<ul spacing="compact">
<li><strong>The Mechanism</strong>: RFC 5705 allows both sides of a TLS session to derive a unique, secret value (the Exporter) that is bound to that specific handshake.</li>
<li><strong>The Binding</strong>: The workload places a hash of this TLS Exporter value into the <strong>User Defined Data</strong> field of the CC quote (e.g., <tt>ReportData</tt> in SGX or <tt>RTMR</tt> in TDX).</li>
<li><strong>Security Property</strong>: This cryptographically binds the hardware evidence to that specific TLS session. If an attacker attempts to reuse the same quote on a different TLS session, the Exporter values will not match, and the verification will fail.</li>
</ul>
</section>

<section anchor="relying-party-verification-loop"><name>Relying Party Verification Loop</name>
<t>The Relying Party (Verifier) completes the trust loop by performing the following steps:</t>
<blockquote><t>[!NOTE]
The Relying Party (which may be the Resource Server or an API Gateway/Proxy acting on its behalf) extracts the TLS Exporter value.</t>
</blockquote>
<ol spacing="compact">
<li><strong>Hardware Verification</strong>: Receives the CC Quote and verifies the hardware signature (proving the code is running in a real TEE).</li>
<li><strong>Extractor</strong>: Extracts the TLS Exporter value (or its hash) from the quote's metadata (User Defined Data).</li>
<li><strong>Comparison</strong>: Compares this value to its own locally computed TLS Exporter value for the current active connection.</li>
<li><strong>Enforcement</strong>: If they match, the Relying Party is certain that the entity it is talking to via TLS is the <em>exact same entity</em> that generated the hardware attestation.</li>
</ol>
<t>This architecture ensures that identity is not just a bearer token, but is cryptographically tied to the verified runtime environment and the specific communication channel.</t>
</section>
</section>
</section>

<section anchor="relation-to-other-ietf-work"><name>Relation to Other IETF Work</name>
<table>
<thead>
<tr>
<th align="left">Layer</th>
<th align="left">Component</th>
<th align="left">WG</th>
<th align="left">Core Responsibility</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><strong>Layer 1</strong></td>
<td align="left"><strong>Transitive Attestation</strong></td>
<td align="left"><strong>WIMSE</strong></td>
<td align="left"><strong>Conveyance</strong>: Binds identity to the local agent (Co-location/Residency).</td>
</tr>

<tr>
<td align="left"><strong>Layer 2</strong></td>
<td align="left"><strong>Verifiable Geofencing</strong></td>
<td align="left"><strong>RATS</strong></td>
<td align="left"><strong>Platform Evidence</strong>: Verifies host integrity and Workload Identity Agent hardware residency (TPM).</td>
</tr>

<tr>
<td align="left"><strong>Layer 3</strong></td>
<td align="left"><strong>Verifiable Geofencing</strong></td>
<td align="left"><strong>RATS</strong></td>
<td align="left"><strong>Location Evidence</strong>: Verifies physical geography (GNSS/ZKP).</td>
</tr>

<tr>
<td align="left"><strong>Delegation</strong></td>
<td align="left"><strong>Actor Chain</strong></td>
<td align="left"><strong>SPICE</strong></td>
<td align="left">Provides <strong>East-West</strong> identity delegation proof [[!I-D.draft-mw-spice-actor-chain]].</td>
</tr>

<tr>
<td align="left"><strong>Shield</strong></td>
<td align="left"><strong>SPICE</strong></td>
<td align="left"><strong>SPICE</strong></td>
<td align="left">Employs Selective Disclosure (SD-CWT) to protect residency/geographic privacy.</td>
</tr>
</tbody>
</table>
<ol spacing="compact">
<li><strong>Transitive Attestation (WIMSE) - Layer 1 (Conveyance)</strong>: This document act as the technical integrator profile for WIMSE. It standardizes how local context results are transitively extended to workloads. It reflects its status as the <strong>Consumer</strong> of attestation results to address the <strong>North-South</strong> identity portability problem.</li>
<li><strong>Verifiable Geofencing (RATS) - Layer 2 &amp; 3 (Evidence)</strong>: Defined in [[!I-D.lkspa-wimse-verifiable-geo-fence]]. This document acts as the <strong>RATS Profile</strong> that provides the hardware-rooted foundation (TPM, Silicon Root of Trust, GNSS) and the out-of-band monitoring required to verify the Workload Identity Agent itself. It generates the high-assurance evidence that Layer 1 consumes.</li>
<li><strong>Actor Chain - The Delegation</strong>: Complements this draft by addressing the <strong>East-West</strong> axis of agent-to-agent communication [[!I-D.draft-mw-spice-actor-chain]]. While Transitive Attestation proves <em>where</em> an actor is running (North-South), the Actor Chain proves <em>who</em> called whom across the network (East-West).</li>
<li><strong>SPICE (Secure Patterns for Internet Credential Exchange) - The Shield</strong>: Utilizes Selective Disclosure (SD-CWT) to protect sensitive location data. It allows a workload to prove residency within a broad &quot;Sovereign Zone&quot; without revealing precise GPS coordinates, balancing security with privacy.</li>
</ol>
<t>Additional relationships include:</t>

<ul spacing="compact">
<li><strong>Verifiable Geofencing [[!I-D.lkspa-wimse-verifiable-geo-fence]]</strong>: Provides the normative technical specification for Layer 2 and Layer 3 attestation. This draft (Transitive Attestation) acts as the application-layer profile that implements these residency proofs within mTLS and DPoP flows, fulfilling the &quot;Silicon-to-SVID&quot; chain.</li>
<li><strong>WIMSE Architecture [[!I-D.ietf-wimse-arch]]</strong>: This draft provides the technical fulfillment for the secure agent requirements and thread model mitigations (e.g., token theft) defined in the architecture.</li>
</ul>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t>Proof of Residency or Co-location specifically mitigates the &quot;Stolen Credential Portability&quot; threat, which encompasses both stolen private keys and stolen bearer/DPoP tokens.</t>
<t>An attacker who steals a private key or intercepts an active token from a workload cannot use those credentials from an external environment. Any attempt to use the stolen credential requires a corresponding PoR assertion that is:</t>

<ol spacing="compact">
<li><strong>Locally Attested</strong>: Linked to the local Workload Identity Agent's signing interface, typically protected by OS permissions or hardware roots.</li>
<li><strong>Context-Specific</strong>: Bound to a fresh, server-provided nonce and a current timestamp.</li>
<li><strong>Protected</strong>: Access to the Workload Identity Agent's signing capability is restricted by local Operating System permissions and logical isolation.</li>
</ol>
<t>Consequently, credentials become functionally &quot;sticky&quot; to the verified residence; an attacker cannot generate a valid proof without achieving a compromise of the identity agent itself. While a software-based agent provides strong logical isolation, a hardware-rooted agent (see [[!I-D.lkspa-wimse-verifiable-geo-fence]]) provides the highest level of protection against agent cloning and export.</t>
<t>The security of this model relies on the <strong>Workload Identity Agent</strong> correctly providing a fresh assertion bound to the current workload session. While this document specifies the conveyance of <tt>N_fusion</tt>, the underlying platform-level freshness—including the binding to hardware-rooted platform nonces (<tt>N_platform</tt>)—is managed by the associated <strong>RATS Profile</strong> (see [[!I-D.lkspa-wimse-verifiable-geo-fence]]). If a verifier accepts a residency proof that lacks a fresh agent signature, the &quot;Silicon-to-SVID&quot; chain of trust is compromised.</t>
<t>TBD: Discussion on Workload Identity Agent compromise, nonce entropy requirements, and clock skew for timestamp verification.</t>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>
<t>This document has no IANA actions at this time.</t>
</section>

</middle>

<back>

</back>

</rfc>
