<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.nl" -->
<rfc version="3" ipr="trust200902" submissionType="IETF" category="std" xml:lang="en" consensus="true" xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-lkspa-rats-verifiable-geo-fence-02">

<front>
<title abbrev="V-PEA">Verifiable Proof of Environment Attestation Profile</title><seriesInfo value="draft-lkspa-rats-verifiable-geo-fence-02" stream="IETF" status="standard" 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="N." surname="Smith" fullname="Ned Smith"><organization>Intel</organization><address><postal><street></street>
</postal><email>ned.smith@intel.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="A." surname="Prasad" fullname="A Prasad"><organization>Oracle</organization><address><postal><street></street>
</postal><email>a.prasad@oracle.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 year="2026" month="May" day="23"></date>
<area>Security</area>
<workgroup>RATS</workgroup>
<keyword>environment attestation</keyword>
<keyword>geofencing</keyword>
<keyword>residency</keyword>
<keyword>attestation</keyword>
<keyword>TPM</keyword>
<keyword>GNSS</keyword>
<keyword>RATS</keyword>
<keyword>workload identity</keyword>

<abstract>
<t>Operators of regulated, sovereign, and high-assurance deployments require hardware-rooted, machine-verifiable proof that a workload executes in its approved environment. Current remote attestation mechanisms address two relevant properties in isolation: platform integrity — that the hardware and software stack are in an approved, untampered state — and physical residency — that the hardware resides within an approved geographic boundary. Neither property alone is sufficient: integrity without residency permits a valid platform to operate outside approved boundaries; residency without integrity permits a compromised platform to claim valid placement.</t>
<t>This document defines the <strong>Verifiable Proof of Environment Attestation Profile (V-PEA)</strong>, a profile of the RATS Architecture {{!RFC9334}} that fuses both properties into a single TPM-sealed Evidence structure (<tt>lah-bundle</tt>). V-PEA defines two Evidence dimensions: <strong>WHAT</strong> — hardware provenance (TPM Attestation Key registered and manufacturer-endorsed), platform integrity (firmware and OS state matching reference values), and workload agent software integrity (binary digest matching an approved value); and <strong>WHERE</strong> — physical residency within an approved geographic boundary. A TPM quote seal binds WHAT and WHERE into a single unforgeable statement: neither dimension can be forged or transplanted without invalidating the other.</t>
<t>For the WHERE dimension, V-PEA supports Transparent Zero-Knowledge Proofs (ZKPs), enabling an Attester to prove geographic compliance without disclosing precise coordinates. A positive V-PEA Attestation Result enables a Relying Party to issue hardware-rooted credentials or authorize operations — combining verified execution environment (WHAT) with verified physical placement (WHERE) — before releasing sensitive assets or granting access. Integration with workload identity systems is described in the WIMSE Integration appendix.</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>Operators of sovereign and high-assurance workloads need cryptographic assurance that sensitive computation occurs only on approved, untampered hardware within approved geographic boundaries. Current attestation and location mechanisms address these concerns in isolation and incompletely. The gaps fall into two categories:</t>

<ul>
<li><t><strong>WHAT — incomplete execution environment verification:</strong> Platform attestation typically confirms hardware presence (e.g., &quot;a valid TPM is present&quot;) without verifying the workload agent binary itself or binding platform state (firmware, OS boot chain) explicitly to the issued credential. A compromised or substituted agent binary may still pass basic node attestation.</t>
</li>
<li><t><strong>WHERE — unverifiable physical residency:</strong> Geographic placement is recorded as an administrative label or inferred from network signals (IP geolocation) that are trivially spoofed via VPNs or proxies. There is no mechanism to prove &quot;inside the approved zone&quot; with a hardware root of trust, without disclosing precise coordinates, or without trusting an intermediary.</t>
</li>
</ul>
<t>This document defines the Verifiable Proof of Environment Attestation Profile (V-PEA), a profile of the RATS Architecture {{!RFC9334}} that provides hardware-rooted Evidence for both dimensions. V-PEA enables a Verifier to appraise Evidence that:</t>

<ol>
<li><t><strong>WHAT:</strong> the Workload Identity Agent (Target Environment) is running on an approved, manufacturer-endorsed TPM whose platform state (PCRs) and agent binary digest match Reference Values — establishing hardware provenance, platform integrity, and software integrity; and</t>
</li>
<li><t><strong>WHERE:</strong> that platform is physically resident within an approved geographic boundary, optionally without revealing precise coordinates (privacy-preserving residency via ZKP).</t>
</li>
</ol>
<t>WHAT and WHERE together provide the cryptographic basis for a Relying Party to issue credentials or authorize operations. For integration with specific workload identity systems, see the WIMSE Integration appendix.</t>

<section anchor="scope-and-layered-attestation"><name>Scope and Layered Attestation</name>
<t>V-PEA profiles a two-layer Attester, following the layered attestation model defined in {{!RFC9334}}, Section 3.2. Using the terminology of RFC 9334 Figure 3:</t>
<table>
<thead>
<tr>
<th align="left">Layer</th>
<th align="left">RFC 9334 Role</th>
<th align="left">V-PEA Entity</th>
<th align="left">Responsibility</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><strong>Layer A</strong> (immutable root)</td>
<td align="left">Attesting Environment</td>
<td align="left">TPM + Location Sensor (Claim source)</td>
<td align="left">Establishes WHAT (hardware provenance): manufacturer-endorsed TPM identity (EK cert). Seals all Claims — platform state (PCRs), agent binary digest, and geolocation — into a single TPM quote, fusing WHAT and WHERE. MNO location statements (<tt>mno-location</tt>), when present, are integrated as a signed Claim source for WHERE.</td>
</tr>

<tr>
<td align="left"><strong>Layer B</strong> (measured agent)</td>
<td align="left">Target Environment + Evidence assembler</td>
<td align="left">Workload Identity Agent</td>
<td align="left">Subject of WHAT verification: its binary digest (<tt>target-environment-image-digest</tt>) is measured by the TPM. Collects Claims from the TPM and location sensor(s), constructs the <tt>lah-bundle</tt>, and conveys Evidence to the Verifier.</td>
</tr>
</tbody>
</table><t>The binding of individual workloads to the local Workload Identity Agent — and the credential issuance that follows a positive Attestation Result — are out of scope for this profile. Those concerns are addressed by complementary work such as {{I-D.mw-wimse-transitive-attestation}} and the WIMSE Architecture {{I-D.ietf-wimse-architecture}}. See the WIMSE Integration appendix for a mapping.</t>
</section>

<section anchor="relationship-to-related-work"><name>Relationship to Related Work</name>
<t>defines how a Verifier encodes geographic location conclusions — jurisdiction-level results such as country, subdivision, and city — as EAT Attestation Result Claims for consumption by a Relying Party. That draft addresses the <strong>output encoding</strong> side of the attestation pipeline.</t>
<t>V-PEA addresses the complementary <strong>input side</strong>: the Evidence profile the Attester produces, the hardware-binding mechanism (TPM quote) that makes location evidence verifiable, and the verification procedure the Verifier applies to produce an Attestation Result. V-PEA Evidence is what a Verifier appraises to yield the kind of geographic result claims that {{I-D.richardson-rats-geographic-results}} encodes.</t>
<t>The two documents are intended to compose: a Verifier that appraises a V-PEA <tt>lah-bundle</tt> could express its conclusion as an Attestation Result using the geographic Claims defined in {{I-D.richardson-rats-geographic-results}}. V-PEA is self-contained; use of that encoding is OPTIONAL and is one possible way a Verifier may express its conclusions — consumers MAY enforce geofence policy directly from the Attestation Result, use the V-PEA X.509 extension (OID <tt>1.3.6.1.4.1.65284.1.1</tt>) as the trust signal, or adopt any other result encoding their deployment requires.</t>
<t>One gap in the combined stack is not addressed by either document: the mapping from a raw location fix or geofence proof to a named legal jurisdiction (for example, from &quot;inside polygon P&quot; to &quot;in jurisdiction X&quot;). This mapping raises its own trust questions — who maintains the polygon-to-jurisdiction database, under what authority, and how that mapping is kept current — and is deferred to future work.</t>

<section anchor="platform-ownership-and-confidential-computing"><name>Platform Ownership and Confidential Computing</name>
<t>Intel's Platform Ownership Endorsement (POE) architecture enables remote parties to establish who is in physical possession of the hardware running workloads, using CoRIM-formatted endorsements tied to Platform Instance Identities (PIIDs). POE addresses a complementary concern to V-PEA: POE establishes platform <strong>ownership</strong> (who controls the hardware), while V-PEA establishes platform <strong>residency</strong> (where the hardware is). In deployments using Intel SGX or Intel TDX, a POE could serve as an additional Endorsement consumed by the V-PEA Verifier, strengthening confidence that the Attester is both owned by an approved party and resident within an approved boundary.</t>
</section>

<section anchor="geolocation-methods-as-composable-claim-sources"><name>Geolocation Methods as Composable Claim Sources</name>
<t>V-PEA is designed so that different geolocation methods (GNSS, MNO/CAMARA, timing-based, provider region attestation, latency-bounded anchor networks such as SovCert, and emerging quantum-derived location proofs) can independently produce Claims that feed into a common Evidence structure and ultimately into a common Attestation Result format. Each method has distinct security properties and threat models (see Security Considerations). Implementations SHOULD treat geolocation methods as composable and independently appraised Claim sources rather than requiring a single method. This design allows the security considerations for each method to be evaluated independently while the Attestation Result remains uniform.</t>
</section>

<section anchor="other-potentially-related-work"><name>Other Potentially Related Work</name>
<t>The &quot;Sovereign Certificates&quot; initiative (sovcert.org) proposes latency-bounded location inference using dedicated network anchors. The initiative appears to be a single-entity effort without broad community review or standardization process participation. Nonetheless, the SovCert proposal is structurally compatible with V-PEA: SovCert &quot;anchors&quot; produce signed location measurements that are functionally equivalent to other geolocation Claim sources (GNSS, MNO/CAMARA, timing-based). A SovCert location statement could be integrated into the V-PEA Evidence structure as an additional signed Claim source, following the same composable model used for MNO location evidence (see <tt>mno-location</tt>). Future revisions of this document will assess formal integration if the initiative matures or publishes through a recognized standards body.</t>
</section>
</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 {{!RFC2119}} {{!RFC8174}} when, and only when, they appear in all capitals, as shown here.</t>

<section anchor="abbreviations"><name>Abbreviations</name>

<ul>
<li><t><strong>AK</strong>: Attestation Key</t>
</li>
<li><t><strong>BMC</strong>: Baseboard Management Controller</t>
</li>
<li><t><strong>DAA</strong>: Direct Anonymous Attestation</t>
</li>
<li><t><strong>EAT</strong>: Entity Attestation Token</t>
</li>
<li><t><strong>EK</strong>: Endorsement Key</t>
</li>
<li><t><strong>GNSS</strong>: Global Navigation Satellite System</t>
</li>
<li><t><strong>IMA</strong>: Integrity Measurement Architecture</t>
</li>
<li><t><strong>IMEI</strong>: International Mobile Equipment Identity</t>
</li>
<li><t><strong>IMSI</strong>: International Mobile Subscriber Identity</t>
</li>
<li><t><strong>LAH</strong>: Location Anchor Host</t>
</li>
<li><t><strong>MNO</strong>: Mobile Network Operator</t>
</li>
<li><t><strong>OOB</strong>: Out-of-Band</t>
</li>
<li><t><strong>PCR</strong>: Platform Configuration Register</t>
</li>
<li><t><strong>PoR</strong>: Proof of Residency</t>
</li>
<li><t><strong>SPDM</strong>: Security Protocol and Data Model</t>
</li>
<li><t><strong>STARK</strong>: Scalable Transparent ARgument of Knowledge</t>
</li>
<li><t><strong>SVID</strong>: SPIFFE Verifiable Identity Document</t>
</li>
<li><t><strong>TEE</strong>: Trusted Execution Environment</t>
</li>
<li><t><strong>TPM</strong>: Trusted Platform Module</t>
</li>
<li><t><strong>V-PEA</strong>: Verifiable Proof of Environment Attestation Profile</t>
</li>
<li><t><strong>ZKP</strong>: Zero-Knowledge Proof</t>
</li>
</ul>
</section>
</section>

<section anchor="key-terms"><name>Key Terms</name>

<dl>
<dt>Data Residency:</dt>
<dd><t>Requirement that data processing and storage remain within an approved geographic boundary.</t>
</dd>
<dt>Geofencing:</dt>
<dd><t>Enforcement that agents and services execute only on approved hosts within an approved geographic boundary.</t>
</dd>
<dt>Attesting Environment:</dt>
<dd><t>An environment capable of collecting Claims about a Target Environment and producing Evidence. In V-PEA, the TPM serves as the Attesting Environment.</t>
</dd>
<dt>Target Environment:</dt>
<dd><t>An environment about which Claims are collected by an Attesting Environment. In V-PEA, the Workload Identity Agent is the Target Environment measured by the TPM.</t>
</dd>
<dt>Workload Identity Agent:</dt>
<dd><t>On-host component (Target Environment) whose binary integrity is measured by the TPM. Once verified, it assembles the V-PEA Evidence structure.</t>
</dd>
<dt>Location Anchor Host (LAH):</dt>
<dd><t>Host or device that acts as the Attester ({{!RFC9334}}). Contains the TPM (Attesting Environment), the Workload Identity Agent (Target Environment), and one or more geolocation Claim sources (for example, GNSS receiver or MNO-connected modem).</t>
</dd>
<dt>Claim Source (Geolocation):</dt>
<dd><t>A sensor or service that provides geolocation Claims (for example, coordinates, ZKP proof) to the Evidence assembler. The Claim source is not an Attesting Environment; its output is sealed into the TPM quote alongside platform integrity Claims.</t>
</dd>
<dt>Composite Geolocation:</dt>
<dd><t>Location estimate fused from multiple Claim sources and accompanied by a quality indicator.</t>
</dd>
<dt>Proof of Residency (PoR):</dt>
<dd><t>Conclusion that a platform resides within an approved geofence boundary for a specific attestation interval, as determined by a Verifier appraising V-PEA Evidence.</t>
</dd>
<dt>Silicon Root of Trust:</dt>
<dd><t>Hardware trust anchor (for example, TPM) that supports measured boot, protects attestation keys, and acts as the Attesting Environment.</t>
</dd>
<dt>Transparent Zero-Knowledge Proof:</dt>
<dd><t>ZKP that does not require a trusted setup; used to prove &quot;inside an approved zone&quot; without revealing precise coordinates.</t>
</dd>
<dt>V-PEA (Verifiable Proof of Environment Attestation Profile):</dt>
<dd><t>RATS Evidence profile defined in this document. Fuses WHAT (hardware provenance, platform integrity, workload agent software integrity) and WHERE (verified physical residency, optionally via ZKP) into a single TPM-sealed Evidence structure (<tt>lah-bundle</tt>), providing the cryptographic basis for issuing a verified workload identity credential (WHO).</t>
</dd>
<dt>N_fusion:</dt>
<dd><t>Fresh nonce issued by the Relying Party for each attestation interval. Corresponds to the <tt>nonce</tt> field in the <tt>lah-bundle</tt>. Provides freshness per {{!RFC9334}}, Section 10.</t>
</dd>
</dl>
</section>

<section anchor="use-cases"><name>Use Cases</name>
<t>This profile supports hardware-rooted attestation of execution environments for platforms running workload agents and (optionally) user devices. Use cases span server-centric enforcement, user-centric enforcement, and compliance and risk reduction.</t>

<section anchor="server-centric-enforcement"><name>Server-centric Enforcement</name>
<t>Enterprises need cryptographic proof that identity agents run only on approved hosts within an approved geographic boundary, and that credentials are issued only from verified platforms.</t>

<ul>
<li><t><strong>Platform-to-platform (general):</strong> Relying Parties accept credentials only when the issuing Attester's Evidence demonstrates platform integrity and &quot;in-zone&quot; residency, preventing credentials from being used outside the approved boundary.</t>
</li>
<li><t><strong>Agentic AI platforms:</strong> An AI agent platform may issue credentials for sensitive operations only when its Attester presents hardware-rooted integrity Evidence and a verifiable &quot;in-zone&quot; proof (optionally privacy-preserving), binding identity to both platform state and residency.</t>
</li>
<li><t><strong>Federated / edge AI (key or model release):</strong> High-value artifacts (e.g., decryption keys or model weights in federated learning) are released only when the partner/edge Attester demonstrates integrity and residency within the required boundary. This is useful for intermittently connected sites.</t>
</li>
<li><t><strong>Server verification:</strong> Clients validate that a server endpoint is operating within an approved boundary (e.g., by policy tied to the Attestation Result for that server's platform).</t>
</li>
</ul>
</section>

<section anchor="user-centric-enforcement"><name>User-centric Enforcement</name>
<t>Enterprises may also need trustworthy location signals for user-facing access decisions.</t>

<ul>
<li><t><strong>Geofenced access control:</strong> User access is permitted only when the user (or user device) proves it is within an allowed boundary, ideally without requiring precise location disclosure.</t>
</li>
<li><t><strong>On-premises boundaries:</strong> Customer-premises equipment can define an enterprise boundary, with a network or enterprise infrastructure providing supporting evidence for policy enforcement.</t>
</li>
<li><t><strong>Restricted support geographies:</strong> Administrative or support actions can be allowed only when the operator proves presence within allowed geographies, reducing policy and insider-risk exposure.</t>
</li>
</ul>
</section>

<section anchor="compliance-and-risk-reduction"><name>Compliance and Risk Reduction</name>
<t>V-PEA provides audit-ready Evidence to support data residency and sovereignty controls, and it can also reduce non-compliance risk from misconfiguration or spoofable signals. Even when not mandated, &quot;in-zone&quot; proofs help address: configuration drift, edge relocation/proxying, contractual residency requirements, and location-privacy minimization (proving &quot;inside the zone&quot; without storing coordinates).</t>
</section>
</section>

<section anchor="verifiable-proof-of-environment-attestation-profile-v-pea"><name>Verifiable Proof of Environment Attestation Profile (V-PEA)</name>
<t>V-PEA is a profile of the RATS Architecture {{!RFC9334}} that fuses hardware-rooted Evidence of WHAT and WHERE into a single TPM-sealed attestation structure. WHAT — the Workload Identity Agent (Target Environment) is the approved, unmodified binary running on an approved, untampered TPM platform. WHERE — the platform physically resides within an approved geographic boundary. The Attester (Location Anchor Host) produces a <tt>lah-bundle</tt> that a Verifier appraises; a positive Attestation Result authorizes the Relying Party to issue credentials or authorize operations — but only when both WHAT and WHERE pass. For integration with specific workload identity systems, see the WIMSE Integration appendix.</t>

<section anchor="rats-role-mapping"><name>RATS Role Mapping</name>
<t>V-PEA instantiates the RATS Architecture {{!RFC9334}} with the following role assignments.</t>
<table>
<thead>
<tr>
<th align="left">RATS Role ({{!RFC9334}})</th>
<th align="left">V-PEA Entity</th>
<th align="left">Function</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left">Attester</td>
<td align="left">Location Anchor Host (LAH)</td>
<td align="left">Contains the Attesting Environment (TPM) and Target Environment (Workload Identity Agent). Produces V-PEA Evidence (the <tt>lah-bundle</tt>), including TPM quotes and geolocation Claims.</td>
</tr>

<tr>
<td align="left">Verifier</td>
<td align="left">Verifier (for example, Keylime Verifier or HPE OneView)</td>
<td align="left">Appraises V-PEA Evidence — validates TPM quotes, checks PCRs against Reference Values, verifies geolocation proofs — and produces an Attestation Result.</td>
</tr>

<tr>
<td align="left">Endorser</td>
<td align="left">TPM Manufacturer</td>
<td align="left">Provides Endorsements (EK certificate chain) vouching for the TPM's identity and signing capability.</td>
</tr>

<tr>
<td align="left">Reference Value Provider</td>
<td align="left">Platform administrator or supply chain entity</td>
<td align="left">Supplies Reference Values: known-good PCR values, approved agent binary digests (<tt>target-environment-image-digest</tt>), and geofence boundary definitions.</td>
</tr>

<tr>
<td align="left">Relying Party</td>
<td align="left">Credential issuer or policy decision point</td>
<td align="left">Consumes the Attestation Result and applies its Appraisal Policy for Attestation Results to decide whether to issue credentials, release keys, or authorize operations.</td>
</tr>

<tr>
<td align="left">Verifier Owner</td>
<td align="left">Security administrator</td>
<td align="left">Configures the Appraisal Policy for Evidence: freshness windows, required trust levels, approved PCR sets, and geofence policy.</td>
</tr>

<tr>
<td align="left">Relying Party Owner</td>
<td align="left">Policy administrator</td>
<td align="left">Configures the Appraisal Policy for Attestation Results: which Verifiers are trusted, minimum result freshness, and required Claims in the Attestation Result.</td>
</tr>
</tbody>
</table><t>Note: The Mobile Network Operator (MNO), when present, provides a signed location statement (<tt>mno-location</tt>) that the Attester integrates into its Evidence as a signed Claim source. This is attester-collected Evidence — not a RATS Endorsement — because the MNO asserts network-observed location, not the Attester's identity or characteristics. The same model applies to other external signed location sources (such as SovCert anchors or quantum-derived proofs), which MAY similarly be integrated as signed Claim sources within the <tt>lah-bundle</tt>.</t>
</section>

<section anchor="evidence-flow"><name>Evidence Flow</name>
<t>The V-PEA Evidence flow follows the RATS background-check model ({{!RFC9334}}, Section 5.2): the Attester conveys Evidence to the Verifier (possibly via a Relying Party), the Verifier appraises it using Reference Values and Endorsements, and conveys the Attestation Result to the Relying Party.</t>

<artwork>                                    Reference Value
Endorser                             Provider
(TPM Mfr)                            (Admin)
   |                                   |
   | EK cert                           | PCRs, agent digest,
   | chain                             | geofence polygons
   v                                   v
Attester (LAH)                      Verifier
  [TPM: Attesting Env]              Appraises Evidence
  [Agent: Target Env]  -- lah-bundle --&gt;  against Reference Values
  [Sensor(s): Claim sources]               and Endorsements
  [MNO (opt): signed Claim source]
                                        |
                          Attestation Result
                                        |
                                        v
                                  Relying Party
                            (applies Appraisal Policy
                             for Attestation Results)
</artwork>
<t>The Attestation Result produced by the Verifier is the output of V-PEA's RATS pipeline. What the Relying Party does with the Attestation Result — issue a credential, release a key, authorize an operation — is a Relying Party policy decision outside the scope of this profile. See the WIMSE Integration appendix for one such consumption pattern.</t>
</section>

<section anchor="v-pea-evidence-structure"><name>V-PEA Evidence Structure</name>
<t>The <tt>lah-bundle</tt> is the RATS Evidence structure defined by this profile. It is a hardware-sealed object produced by the Attester (LAH) and conveyed to the Verifier for appraisal. It encodes both Evidence dimensions: WHAT (hardware provenance via <tt>tpm-ak</tt> and manufacturer endorsement; platform integrity via PCRs in the TPM quote; software integrity via <tt>target-environment-image-digest</tt>) and WHERE (geofence residency via <tt>geolocation-proof-hash</tt> and <tt>geolocation-payload</tt>, optionally as a privacy-preserving ZKP). All fields are fused by the <tt>tpm-quote-seal</tt> into a single TPM-signed statement — neither dimension can be selectively forged or transplanted without invalidating the seal.</t>

<section anchor="top-level-structure"><name>Top-Level Structure</name>

<sourcecode type="json">{
  &quot;lah-bundle&quot;: { },
  &quot;mno-location&quot;: { }
}
</sourcecode>
<t>When present, the <tt>lah-bundle</tt> fields are serialized using JSON Canonicalization Scheme (JCS) for hash computation. In the bundle, <tt>tpm-ak</tt> is carried as a PEM-encoded public key string, but hash inputs such as <tt>tpm-ak-bytes</tt> are derived from the raw DER bytes of the same public key.</t>
</section>

<section anchor="lah-bundle-fields"><name>lah-bundle Fields</name>
<table>
<thead>
<tr>
<th align="left">Field</th>
<th align="left">Type</th>
<th align="center">Required</th>
<th align="left">Description</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><tt>tpm-ak</tt></td>
<td align="left">string (PEM)</td>
<td align="center">Yes</td>
<td align="left">TPM Attestation Key public key (PEM-encoded, <tt>-----BEGIN PUBLIC KEY-----</tt> format). Hardware identity anchor. The TPM enforces that only this key can produce <tt>tpm-quote-seal</tt> — proving the quote was produced by the same physical hardware as the geolocation sensor.</td>
</tr>

<tr>
<td align="left"><tt>geolocation-id-hash</tt></td>
<td align="left">string (Base64URL)</td>
<td align="center">Yes</td>
<td align="left">SHA-256 over <tt>tpm-ak-bytes</tt> concatenated with any sensor-specific identifiers (see Sensor Type Input Recipes appendix for per-sensor constructions). Binds the TPM identity anchor to the geolocation sensor identity. Sensor integrity is assumed to be established via an out-of-band channel (for example, hardware inventory or supply chain attestation).</td>
</tr>

<tr>
<td align="left"><tt>geolocation-proof-hash</tt></td>
<td align="left">string (Base64URL)</td>
<td align="center">Yes</td>
<td align="left">SHA-256 commitment over <tt>geolocation-payload</tt>. Required in both privacy modes. When <tt>privacy-technique=zkp</tt>: <tt>SHA-256(zkp-proof-bytes)</tt>. When <tt>privacy-technique=none</tt>: <tt>SHA-256(JCS({lat, lon, accuracy}))</tt>.</td>
</tr>

<tr>
<td align="left"><tt>privacy-technique</tt></td>
<td align="left">string enum</td>
<td align="center">Yes</td>
<td align="left"><tt>&quot;none&quot;</tt> = raw lat/lon/accuracy in payload. <tt>&quot;zkp&quot;</tt> = zero-knowledge proof URI in payload. Controls location privacy only; device identity privacy is always protected via <tt>geolocation-id-hash</tt>.</td>
</tr>

<tr>
<td align="left"><tt>geolocation-payload</tt></td>
<td align="left">object</td>
<td align="center">Yes</td>
<td align="left">Inner location data. Structure depends on <tt>privacy-technique</tt> (see Payload Variants below). Committed to by <tt>geolocation-proof-hash</tt> and optionally signed by <tt>mno-location.mno-sig</tt>.</td>
</tr>

<tr>
<td align="left"><tt>nonce</tt></td>
<td align="left">string (Base64URL)</td>
<td align="center">Yes</td>
<td align="left">Freshness nonce (N_fusion) issued by the Relying Party for each attestation interval, per {{!RFC9334}}, Section 10.2. Implementations may use chained nonce constructions for additional audit guarantees (see Nonce Chain and Merkle Audit Log appendix).</td>
</tr>

<tr>
<td align="left"><tt>timestamp</tt></td>
<td align="left">integer (int64)</td>
<td align="center">Yes</td>
<td align="left">Unix epoch seconds. Set by the Attester (LAH) at bundle construction time.</td>
</tr>

<tr>
<td align="left"><tt>tpm-quote-seal</tt></td>
<td align="left">string (Base64URL)</td>
<td align="center">Yes</td>
<td align="left"><tt>TPM2_Quote</tt> produced by the AK in <tt>tpm-ak</tt>. Qualifying data = <tt>SHA-256(JCS({tpm-ak, geolocation-id-hash, geolocation-proof-hash, privacy-technique, nonce, timestamp, target-environment-image-digest}))</tt>. Fuses WHAT (hardware identity: <tt>tpm-ak</tt>; platform state: PCRs; software integrity: <tt>target-environment-image-digest</tt>) and WHERE (<tt>geolocation-id-hash</tt>, <tt>geolocation-proof-hash</tt>) into a single hardware-sealed statement. Neither dimension can be forged or transplanted without invalidating this seal.</td>
</tr>

<tr>
<td align="left"><tt>target-environment-image-digest</tt></td>
<td align="left">string (hex SHA-256)</td>
<td align="center">Yes</td>
<td align="left">SHA-256 digest of the Target Environment (Workload Identity Agent) binary, measured at attestation time. This digest is computed over the measured binary image bytes or artifact bytes that the TPM records. Compared by the Verifier against Reference Values to detect agent binary compromise.</td>
</tr>
</tbody>
</table></section>

<section anchor="geolocation-payload-variants"><name>geolocation-payload Variants</name>
<t><strong>When <tt>privacy-technique = &quot;none&quot;</tt> (raw coordinates):</strong></t>
<table>
<thead>
<tr>
<th align="left">Field</th>
<th align="left">Type</th>
<th align="center">Required</th>
<th align="left">Description</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><tt>lat</tt></td>
<td align="left">number (float64)</td>
<td align="center">Yes</td>
<td align="left">Latitude, WGS-84 decimal degrees</td>
</tr>

<tr>
<td align="left"><tt>lon</tt></td>
<td align="left">number (float64)</td>
<td align="center">Yes</td>
<td align="left">Longitude, WGS-84 decimal degrees</td>
</tr>

<tr>
<td align="left"><tt>accuracy</tt></td>
<td align="left">number (float64)</td>
<td align="center">Yes</td>
<td align="left">Accuracy radius in meters</td>
</tr>
</tbody>
</table><t><tt>geolocation-proof-hash = Base64URL(SHA-256(JCS({lat, lon, accuracy})))</tt></t>
<t><strong>When <tt>privacy-technique = &quot;zkp&quot;</tt> (zero-knowledge proof):</strong></t>
<table>
<thead>
<tr>
<th align="left">Field</th>
<th align="left">Type</th>
<th align="center">Required</th>
<th align="left">Description</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><tt>zkp-proof-uri</tt></td>
<td align="left">string (URI)</td>
<td align="center">Yes</td>
<td align="left">URI to fetch full ZKP proof bytes from the proof depository. Verifier fetches bytes, computes <tt>SHA-256(bytes)</tt>, checks against <tt>geolocation-proof-hash</tt>.</td>
</tr>

<tr>
<td align="left"><tt>zkp-format</tt></td>
<td align="left">string enum</td>
<td align="center">Yes</td>
<td align="left">ZKP proof system. Currently: <tt>&quot;plonky2&quot;</tt>.</td>
</tr>
</tbody>
</table><t><tt>geolocation-proof-hash = Base64URL(SHA-256(zkp-proof-bytes))</tt></t>
</section>

<section anchor="mno-location"><name>MNO Location Evidence (Signed Claim Source)</name>
<t>The <tt>mno-location</tt> element carries a signed location statement from a Mobile Network Operator (MNO). In RATS terms, this is attester-collected Evidence — a signed Claim source — rather than a RATS Endorsement: the MNO asserts network-observed device location within carrier visibility but does not vouch for the Attester's identity or platform characteristics. This element is OPTIONAL at the top level; when present, its fields are REQUIRED.</t>
<table>
<thead>
<tr>
<th align="left">Field</th>
<th align="left">Type</th>
<th align="center">Required</th>
<th align="left">Description</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><tt>mno-key-cert</tt></td>
<td align="left">string (Base64URL DER)</td>
<td align="center">Yes</td>
<td align="left">MNO signing certificate. Verifiers SHOULD validate this certificate chains to a known MNO root before accepting the location statement.</td>
</tr>

<tr>
<td align="left"><tt>mno-sig</tt></td>
<td align="left">string (Base64URL)</td>
<td align="center">Yes</td>
<td align="left">ECDSA/EdDSA signature over <tt>JCS(geolocation-payload)</tt> only. The MNO attests location within carrier visibility — does not sign host fields (<tt>tpm-ak</tt>, <tt>nonce</tt>, <tt>tpm-quote-seal</tt>).</td>
</tr>
</tbody>
</table></section>
</section>

<section anchor="attestation-result"><name>Attestation Result</name>
<t>Upon successful appraisal of the <tt>lah-bundle</tt>, the Verifier produces an Attestation Result ({{!RFC9334}}, Section 8.4). This profile does not mandate a specific encoding for the Attestation Result. Implementations MAY express results using:</t>

<ul>
<li><t>EAT Attestation Result Claims, including geographic Claims per {{I-D.richardson-rats-geographic-results}};</t>
</li>
<li><t>an X.509 extension (OID <tt>1.3.6.1.4.1.65284.1.1</tt>) embedded in a credential issued by a Relying Party acting as CA; or</t>
</li>
<li><t>any other result encoding that satisfies the Relying Party's Appraisal Policy for Attestation Results.</t>
</li>
</ul>
<t>The Attestation Result MUST convey at minimum:</t>
<table>
<thead>
<tr>
<th align="left">Claim</th>
<th align="left">Description</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left">Platform integrity</td>
<td align="left">Whether the TPM quote was valid and PCR values matched Reference Values.</td>
</tr>

<tr>
<td align="left">Agent integrity</td>
<td align="left">Whether <tt>target-environment-image-digest</tt> matched a known-good Reference Value.</td>
</tr>

<tr>
<td align="left">Residency</td>
<td align="left">Whether the geolocation proof (raw or ZKP) satisfied the configured geofence policy.</td>
</tr>

<tr>
<td align="left">Freshness</td>
<td align="left">The attestation interval (nonce and timestamp) for which the result is valid.</td>
</tr>

<tr>
<td align="left">Trust level</td>
<td align="left">The location trust level achieved (see Location Trust Levels).</td>
</tr>
</tbody>
</table><t>When the Attestation Result is embedded in an X.509 extension and marked CRITICAL, any downstream consumer that does not understand the extension MUST reject the credential, enforcing fail-closed behavior.</t>
</section>

<section anchor="tpm-quote-verification-procedure"><name>TPM Quote Verification Procedure</name>
<t>The Verifier MUST perform the following steps to validate the <tt>tpm-quote-seal</tt>:</t>

<ol>
<li><t>Decode <tt>tpm-quote-seal</tt> (Base64URL → bytes)</t>
</li>
<li><t>Parse <tt>TPMS_ATTEST</tt> structure</t>
</li>
<li><t>Assert <tt>TPMS_ATTEST.type == TPM_ST_ATTEST_QUOTE</tt></t>
</li>
<li><t>Compute <tt>expected_qd = SHA-256(JCS({tpm-ak, geolocation-id-hash, geolocation-proof-hash, privacy-technique, nonce, timestamp, target-environment-image-digest}))</tt></t>
</li>
<li><t>Assert <tt>TPMS_ATTEST.qualifyingData == expected_qd</tt></t>
</li>
<li><t>Verify signature over <tt>TPMS_ATTEST</tt> bytes using <tt>tpm-ak</tt> public key (RSASSA-PKCS1-v1_5 or ECDSA)</t>
</li>
</ol>
<t>If any step fails, the Verifier MUST reject the Evidence and MUST NOT produce a positive Attestation Result.</t>
</section>

<section anchor="freshness-and-replay-prevention"><name>Freshness and Replay Prevention</name>
<t>To prevent mix-and-match and replay attacks, Verifiers MUST enforce the following:</t>

<ul>
<li><t>Attestation Results MUST be fresh and MUST be bound to the appraisal event (for example, by cryptographically binding freshness values used for platform quotes within the Attestation Result).</t>
</li>
<li><t>The <tt>nonce</tt> field in the <tt>lah-bundle</tt> MUST be a freshness value issued by the Relying Party for each attestation interval, per the nonce-based freshness model in {{!RFC9334}}, Section 10.2.</t>
</li>
<li><t>Verifiers MUST reject Evidence where the <tt>timestamp</tt> falls outside the configured freshness window.</t>
</li>
</ul>
<t>Where policy requires it, the Verifier can additionally require that the Target Environment measurement (<tt>target-environment-image-digest</tt>) matches an approved Reference Value, reducing the risk that a modified or unauthorized agent produces accepted Evidence.</t>
</section>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t>V-PEA provides hardware-rooted assurance of both WHAT (approved, untampered execution environment) and WHERE (approved physical residency), enabling a Relying Party to issue credentials or authorize operations only when both dimensions pass appraisal. The security of issued credentials is only as strong as the weakest of these two dimensions. Implementers must address the following threats:</t>

<ul>
<li><t><strong>Replay and mix-and-match</strong>: Use nonces and evidence stapling so that old location evidence cannot be combined with a fresh platform quote (or vice versa).</t>
</li>
<li><t><strong>Location spoofing</strong>: GNSS and mobile network signals must be treated as adversarial inputs; per-source threats and mitigations are detailed in the subsections below.</t>
</li>
<li><t><strong>Relay and displacement</strong>: When proximity mechanisms are introduced in future profiles, implementers should be aware that they are vulnerable to relay attacks and anchor displacement. Mitigations (such as tight RTT-based acceptance windows and anchor health attestation) are deferred to those future profiles.</t>
</li>
<li><t><strong>Management controller compromise</strong>: OOB paths reduce dependence on the host OS but introduce dependence on the management controller and its network. Protect this component with secure boot, authenticated updates, strong access controls, network segmentation, and audit logging.</t>
</li>
<li><t><strong>Time and freshness</strong>: Verifiers MUST enforce bounded freshness windows and MUST define recovery behavior (re-attestation, quarantine, or revocation) when clocks drift or evidence becomes stale.</t>
</li>
<li><t><strong>Registry and allowlist integrity</strong>: Protect Reference Value stores and Appraisal Policy configurations against tampering; treat them as high-value privileged assets.</t>
</li>
<li><t><strong>Privacy</strong>: Avoid unnecessary collection or retention of precise location data. Prefer &quot;in-zone&quot; proofs (ZKP) where policy permits. See the Privacy Applicability note below.</t>
</li>
</ul>

<section anchor="privacy-applicability"><name>Privacy Applicability</name>
<t>The relevance of location privacy varies significantly by deployment context:</t>

<ul>
<li><t><strong>Datacenter and server environments</strong>: When an Attester is a server in a known datacenter, the physical location of the hardware is typically not sensitive — it may be a matter of public record or contractual documentation. In such deployments, <tt>privacy-technique = &quot;none&quot;</tt> (raw coordinates) is appropriate and the ZKP overhead is unnecessary.</t>
</li>
<li><t><strong>User-facing and edge environments</strong>: When an Attester is a user device or edge node, precise coordinates may constitute Personally Identifiable Information (PII). In such deployments, <tt>privacy-technique = &quot;zkp&quot;</tt> SHOULD be used to prove geofence compliance without disclosing exact location.</t>
</li>
<li><t><strong>Mixed deployments</strong>: Appraisal Policy for Evidence SHOULD allow the Verifier Owner to configure which privacy technique is acceptable per Attester class or per geofence policy.</t>
</li>
</ul>
<t>Implementers SHOULD select the privacy technique appropriate to their deployment context rather than applying ZKP uniformly.</t>
</section>

<section anchor="location-spoofing"><name>Location Spoofing</name>

<section anchor="fundamental-limitation-sensor-data-provenance"><name>Fundamental Limitation: Sensor Data Provenance</name>
<t>It is important to acknowledge that binding location Claims to a TPM quote (hardware provenance) does NOT, by itself, guarantee that the underlying sensor data is correct. A TPM can faithfully seal whatever data the sensor provides — including spoofed data. The TPM proves that the sealed data came from the measured platform; it does not prove that the sensor's input signals were authentic.</t>
<t>Therefore, the security of V-PEA's geolocation Claims depends on BOTH:</t>

<ol>
<li><t><strong>Hardware provenance</strong> (addressed by the TPM quote and <tt>target-environment-image-digest</tt>): ensuring the data was processed by an approved, untampered platform.</t>
</li>
<li><t><strong>Sensor input integrity</strong> (addressed by the mitigations below): ensuring the sensor received authentic signals rather than spoofed or replayed inputs.</t>
</li>
</ol>
<t>Implementers MUST NOT rely solely on TPM binding as evidence of correct location. The Appraisal Policy for Evidence SHOULD require corroborating evidence from independent channels and SHOULD specify minimum signal authentication requirements commensurate with the geofence policy's sensitivity.</t>
</section>

<section anchor="gnss-spoofing"><name>GNSS Spoofing</name>
<t>GNSS signals are unauthenticated by default and can be spoofed via synthetic signal generators (e.g., software-defined radio replay of valid signals) or multipath injection. Implementers SHOULD apply mitigations proportional to the required assurance level:</t>

<ul>
<li><t><strong>Signal authentication</strong>: Galileo OSNMA (Open Service Navigation Message Authentication) provides cryptographic authentication of navigation messages and is the strongest available civilian countermeasure. GPS GAIA offers equivalent protection for GPS III signals. Implementations SHOULD prefer authenticated GNSS signals where available.</t>
</li>
<li><t><strong>Multi-constellation cross-validation</strong>: Cross-checking fixes across independent constellations (GPS, Galileo, GLONASS, BeiDou) substantially raises the cost of spoofing; consistent simultaneous spoofing of all constellations requires significantly more attacker capability.</t>
</li>
<li><t><strong>Anomaly detection</strong>: Sudden position jumps, implausible velocity changes, and anomalous signal-to-noise ratios are indicators of spoofing or jamming. Evidence that fails these checks SHOULD be rejected.</t>
</li>
</ul>
</section>

<section anchor="mobile-network-spoofing"><name>Mobile Network Spoofing</name>
<t>Mobile network location evidence is subject to distinct threats:</t>

<ul>
<li><t><strong>IMSI catchers and rogue base stations</strong>: Attacker-controlled base stations can force a device onto a fake cell, yielding attacker-controlled location if evidence derives from device-reported cell identity.</t>
</li>
<li><t><strong>SS7/Diameter abuse</strong>: Attackers with access to legacy carrier signaling can issue location queries that yield false or manipulated carrier-side location data.</t>
</li>
<li><t><strong>MNO root key compromise</strong>: The <tt>mno-location</tt> element is only as trustworthy as the MNO signing root. Verifiers MUST validate the <tt>mno-key-cert</tt> certificate chain to a known MNO root and SHOULD treat a root compromise as requiring immediate policy revocation.</t>
</li>
</ul>
<t>The CAMARA API model — where location is derived from carrier network infrastructure rather than device-reported cell identifiers — is more resistant to IMSI catcher attacks and is the RECOMMENDED approach when MNO corroboration is used.</t>
<t>Notwithstanding these mitigations, MNO-derived location is ultimately under the control of the carrier infrastructure. A compromised or coerced MNO can produce false location statements. Verifiers SHOULD treat MNO location statements as corroborating evidence rather than sole proof of residency, and Appraisal Policies SHOULD require independent corroboration (for example, GNSS + MNO) for high-assurance geofence policies.</t>
</section>

<section anchor="location-trust-levels"><name>Location Trust Levels</name>
<t>The quality indicator defined in Composite Geolocation SHOULD be mapped to a location trust level enforced by the Verifier as a precondition for a positive Attestation Result. The following non-normative tiers illustrate a conformant policy:</t>
<table>
<thead>
<tr>
<th align="left">Trust Level</th>
<th align="left">Evidence Basis</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left">Low</td>
<td align="left">Single unauthenticated GNSS fix, no corroboration</td>
</tr>

<tr>
<td align="left">Medium</td>
<td align="left">Multi-constellation GNSS with anomaly detection, or network-side MNO corroboration (CAMARA) alone</td>
</tr>

<tr>
<td align="left">High</td>
<td align="left">Authenticated GNSS (OSNMA or GAIA), or Medium GNSS + MNO corroboration</td>
</tr>

<tr>
<td align="left">Highest</td>
<td align="left">Authenticated GNSS + independent network-side MNO corroboration (CAMARA) + anomaly detection</td>
</tr>
</tbody>
</table><t>The security value of multi-source corroboration derives from <strong>channel independence</strong>: GNSS and MNO evidence travel over different physical and logical channels. Requiring consistent evidence from both simultaneously raises the bar for spoofing. Verifiers SHOULD require a minimum trust level commensurate with the sensitivity of the enforced geofence policy, and SHOULD apply conservative policy (downgrade or reject the Attestation Result) when evidence quality degrades.</t>
</section>
</section>

<section anchor="zero-knowledge-proof-security"><name>Zero-Knowledge Proof Security</name>
<t>V-PEA's <tt>privacy-technique = &quot;zkp&quot;</tt> mode uses Plonky2 proofs (a STARK-based proof system using FRI commitments). The following properties and threats apply:</t>

<ul>
<li><t><strong>Circuit correctness is the primary attack surface.</strong> A ZKP proves only what its arithmetic circuit encodes. Errors in the geofence boundary circuit — including precision errors, off-by-one boundary conditions, or incorrect coordinate system handling — yield proofs that are cryptographically valid but semantically incorrect. The geofence circuit MUST be independently audited before deployment.</t>
</li>
<li><t><strong>No trusted setup.</strong> Plonky2 is STARK-based and requires no trusted setup phase, eliminating the class of attacks arising from compromised SNARK setup parameters. Implementations substituting a different <tt>zkp-format</tt> MUST ensure it also provides transparent setup, or MUST document the resulting trust assumptions.</t>
</li>
<li><t><strong>Computational soundness.</strong> STARK security is computational, not unconditional, and relies on the collision resistance of the underlying hash function. Implementations SHOULD target at least 128-bit security and MUST document the proof system parameters (field size, hash function, FRI parameters) to enable independent security analysis.</t>
</li>
<li><t><strong>URI availability.</strong> When <tt>privacy-technique = &quot;zkp&quot;</tt>, the Verifier MUST reject Evidence if the <tt>zkp-proof-uri</tt> cannot be resolved or the fetched proof bytes do not match <tt>geolocation-proof-hash</tt>.</t>
</li>
<li><t><strong>Proof freshness.</strong> A valid ZKP proves location at proof-generation time. The nonce and timestamp freshness requirements that apply to <tt>tpm-quote-seal</tt> apply equally to ZKP proofs: Verifiers MUST reject proofs whose <tt>timestamp</tt> falls outside the configured freshness window.</t>
</li>
<li><t><strong>Prover integrity.</strong> A compromised prover can produce false proofs even for a correctly specified circuit. This threat is mitigated by V-PEA's TPM binding: the <tt>tpm-quote-seal</tt> covers <tt>geolocation-proof-hash</tt>, so a false proof can only be embedded in a bundle that also passes TPM quote verification for an approved platform. The ZKP privacy guarantee is only meaningful in conjunction with verified platform integrity.</t>
</li>
</ul>
</section>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>
<t>IANA is requested to register the following Object Identifier (OID) in the &quot;SMI Numbers&quot; registry under the &quot;SMI Private Enterprise Numbers&quot; (1.3.6.1.4.1) branch, or as appropriate for the V-PEA profile.</t>

<ul>
<li><t><strong>OID</strong>: <tt>1.3.6.1.4.1.65284.1.1</tt></t>
</li>
<li><t><strong>Description</strong>: Verifiable Proof of Environment Attestation Profile (V-PEA) Evidence / Attestation Result</t>
</li>
<li><t><strong>Reference</strong>: This document.</t>
</li>
<li><t><strong>PEN</strong>: 65284 (IANA Private Enterprise Number assigned to Ram Krishnan)</t>
</li>
</ul>
</section>

<section anchor="references"><name>References</name>

<section anchor="normative-references"><name>Normative References</name>

<ul>
<li><t>{{!RFC9334}}</t>
</li>
<li><t>{{!RFC2119}}</t>
</li>
<li><t>{{!RFC8174}}</t>
</li>
<li><t>{{I-D.richardson-rats-geographic-results}}</t>
</li>
<li><t>{{I-D.mw-wimse-transitive-attestation}}</t>
</li>
<li><t>{{I-D.ietf-wimse-architecture}}</t>
</li>
</ul>
</section>

<section anchor="informative-references"><name>Informative References</name>

<ul>
<li><t>{{!RFC7942}}</t>
</li>
<li><t>{{I-D.ramki-ptp-hardware-rooted-attestation}}</t>
</li>
</ul>
</section>
</section>

</middle>

<back>

<section anchor="contributors"><name>Contributors</name>
<t>The following individuals have contributed to this document:</t>
<t>Bala Siva Sai Akhil Malepati<br />
Independent<br />
Email: saiakhil2012@yahoo.com</t>
<t>Ghada Arfaoui<br />
Orange<br />
Email: ghada.arfaoui@orange.com</t>
<t>Michael Epley<br />
Red Hat<br />
Email: mepley@redhat.com</t>
<t>Vijay Masilamani<br />
Independent<br />
Email: saanvijay20@gmail.com</t>
</section>

<section anchor="operational-guidance"><name>Operational Guidance</name>

<section anchor="gating-decisions-on-attestation-results"><name>Gating Decisions on Attestation Results</name>
<t>A Relying Party consumes the Attestation Result produced by the Verifier and applies its Appraisal Policy for Attestation Results to make application-specific decisions. Common decision types include:</t>

<ul>
<li><t><strong>Credential issuance</strong>: Issue or renew a workload credential only when the Attestation Result satisfies policy.</t>
</li>
<li><t><strong>Key release</strong>: Release decryption keys or model weights only to Attesters with a positive, fresh Attestation Result.</t>
</li>
<li><t><strong>Access authorization</strong>: Gate access to sensitive APIs or data stores on a valid Attestation Result.</t>
</li>
</ul>
<t>In intermittently connected edge deployments, local operation can continue during outages, while centralized policy can be enforced on renewal and on release of high-value secrets once connectivity is available.</t>
</section>

<section anchor="distributed-credential-issuance-and-scaling"><name>Distributed Credential Issuance and Scaling</name>
<t>To support edge deployments and intermittent connectivity, credential issuance by a Relying Party may be distributed within a sovereign boundary.</t>

<ul>
<li><t><strong>Edge issuance</strong>: Credentials may be issued by a Relying Party deployed within the same boundary as the Attesters.</t>
</li>
<li><t><strong>Scoping</strong>: Issued credentials should be scoped so they are not accepted outside the intended deployment boundary (for example, via trust bundle partitioning and policy).</t>
</li>
<li><t><strong>Renewal gating</strong>: Relying Parties should renew short-lived credentials only when the Attestation Result for integrity and residency is valid for the requested freshness window.</t>
</li>
</ul>
</section>

<section anchor="mobility-and-handover"><name>Mobility and Handover</name>
<t>When an Attester moves between anchors or boundaries, the Target Environment (Workload Identity Agent) should trigger a new V-PEA attestation cycle that reflects the new LAH and current residency.</t>
<t>Verifiers should treat this as a normal re-attestation event:
- platform integrity continuity can remain stable, but
- residency Claims should be re-evaluated against the geofence policy for the new anchor/boundary.</t>
</section>

<section anchor="location-anchor-hosts"><name>Location Anchor Hosts</name>
<t>To scale location sensing, a deployment may use dedicated anchors:</t>

<ul>
<li><t><strong>End-user anchors</strong>: A user device (for example, a phone) can serve as an LAH for a nearby client device. The mechanism by which the anchor establishes its own location (and any proximity evidence it may provide) is out of scope for this document.</t>
</li>
<li><t><strong>Data center anchors</strong>: A small set of hosts can act as LAHs for a cluster. Timing-based mechanisms (for example, PTP-derived) may assist in establishing relative location; protocol details are deferred to future profiling work (see {{I-D.ramki-ptp-hardware-rooted-attestation}}).</t>
</li>
</ul>
</section>
</section>

<section anchor="scalable-fleet-management"><name>Scalable Fleet Management</name>
<t>Large deployments need lifecycle management for the attestation keys referenced by V-PEA (for example, <tt>tpm-ak</tt>) and for the policies that authorize them.</t>

<section anchor="nonce-chain-and-merkle-audit-log"><name>Nonce Chain and Merkle Audit Log</name>
<t>One way to satisfy the freshness requirements in this profile is through a chained nonce and Merkle audit log. Where <tt>bundle[n]</tt> denotes the JCS-canonicalized <tt>lah-bundle</tt> object at attestation interval <tt>n</tt>:</t>

<artwork>chain[n] = SHA-256(chain[n-1] || SHA-256(JCS(bundle[n])))
nonce[n]  = HMAC(secret, n || chain[n-1])
</artwork>
<table>
<thead>
<tr>
<th align="left">Mechanism</th>
<th align="left">Role</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left">Chained nonce</td>
<td align="left">Input control — Attester cannot submit without responding to the Verifier's current state.</td>
</tr>

<tr>
<td align="left">Merkle chain</td>
<td align="left">Audit output — proves inclusion of past bundles, detects gaps, and enables regulatory audit.</td>
</tr>
</tbody>
</table></section>

<section anchor="key-registry-and-synchronization"><name>Key Registry and Synchronization</name>

<ul>
<li><t>A central Verifier maintains a registry of accepted AK public keys and associated metadata (for example, EK certificate chain, hardware identity, and status).</t>
</li>
<li><t>An Edge Verifier may maintain a local registry to support disconnected operation and periodically synchronizes updates to the central registry.</t>
</li>
</ul>
</section>

<section anchor="key-rotation"><name>Key Rotation</name>
<t>To prevent rogue key injection during rotation:</t>

<ul>
<li><t>The central registry should accept a new AK only if the Edge Verifier provides a rotation proof that chains the new AK to previously accepted state.</t>
</li>
<li><t>A rotation proof should be a JCS-canonicalized object signed by the previously accepted AK (or, if available, validated by a fresh hardware-rooted OOB quote).</t>
</li>
</ul>

<section anchor="example-rotation-proof"><name>Example Rotation Proof</name>

<sourcecode type="json">{
 &quot;new-ak-pub&quot;: &quot;Base64URL_Encoded_Public_Key&quot;,
 &quot;serial-number&quot;: &quot;AK_Serial_XYZ&quot;,
 &quot;timestamp&quot;: 1708845600,
 &quot;hardware-uuid&quot;: &quot;Host_Hardware_UUID&quot;,
 &quot;signature&quot;: &quot;Base64URL_Signature_from_Previous_AK&quot;
}
</sourcecode>
</section>
</section>

<section anchor="credential-activation-and-re-verification"><name>Credential Activation and Re-Verification</name>
<t>Credential activation (for example, <tt>TPM2_MakeCredential</tt>) is expensive to run on every request. Verifiers should perform it on events such as:</t>

<ul>
<li><t>Initial onboarding<br />
</t>
</li>
<li><t>Reboot / reset detection (for example, TPM clock/reset counters)<br />
</t>
</li>
<li><t>Policy violations or drift signals (for example, firmware or inventory changes)<br />
</t>
</li>
<li><t>Failure of location evidence checks<br />
</t>
</li>
<li><t>Explicit elevation to higher assurance policy<br />
</t>
</li>
</ul>
<t>Between full activations, Verifiers may accept fresh quotes from registered AKs as proof of continued compliance, subject to policy.</t>
</section>

<section anchor="revocation-and-health-signals"><name>Revocation and Health Signals</name>

<ul>
<li><t>The Edge Verifier should maintain a per-node health signal (for example, tamper, firmware policy violations).</t>
</li>
<li><t>On severe health signals, the Verifier should revoke the relevant AK(s) and reject identities derived from them according to policy.</t>
</li>
</ul>
</section>

<section anchor="disconnected-operation-leased-attestation-result"><name>Disconnected Operation (Leased Attestation Result)</name>
<t>For intermittent connectivity, the Verifier may produce Attestation Results with extended validity (a lease) under policy. If a lease is used:</t>

<ul>
<li><t>The Verifier should revoke or cease producing positive results locally on tamper/drift signals.</t>
</li>
<li><t>The Attester should re-attest and satisfy current policy on reconnection before the Relying Party accepts a new Attestation Result or releases high-value secrets.</t>
</li>
</ul>
</section>
</section>

<section anchor="deployment-patterns-informative"><name>Deployment Patterns</name>
<t>Implementations commonly fall into the following patterns, differing in how platform integrity Evidence and the <tt>tpm-quote-seal</tt> are collected:</t>

<ul>
<li><t><strong>In-band host attestation</strong>: Evidence collected by host software (for example, Keylime-style deployments). In this pattern, the Relying Party generates <tt>N_fusion</tt> and shares it with the Verifier (for example, the Keylime Verifier) over a server-to-server channel. The Verifier then delivers <tt>N_fusion</tt> to the Attester on the host, which collects TPM and geolocation Claims, assembles the <tt>lah-bundle</tt>, and returns it via the host-side channel. This pattern is well-suited to commodity servers and cloud VMs where a BMC path is not available or not required.</t>
</li>
<li><t><strong>Out-of-band management</strong>: Evidence collected via a management controller / BMC path (for example, iLO-class OOB management such as HPE OneView). In this pattern, the Relying Party generates <tt>N_fusion</tt> and shares it with the Verifier (for example, HPE OneView) over a server-to-server channel. The Verifier delivers <tt>N_fusion</tt> to the host via the BMC / OOB path — bypassing the host OS entirely. The host TPM seals the <tt>lah-bundle</tt> with that nonce, and the sealed bundle is returned via the same OOB path. This pattern is recommended for high-assurance environments where the host OS is part of the threat model.</t>
</li>
<li><t><strong>Cloud-hosted attestation environments</strong>: Provider mechanisms exposing measured boot and TPM-backed Claims (for example, Nitro-class enclaves or shielded VM instances). The cloud provider supplies a hardware-rooted quote that can serve as the <tt>tpm-quote-seal</tt>; the geolocation Claim is typically derived from the provider's zone or region attestation. Implementations should verify that the provider's attestation scope satisfies the geofence policy.</t>
</li>
</ul>
</section>

<section anchor="policy-use"><name>Policy Use</name>
<t>Relying parties and credential issuers can use V-PEA Attestation Results as inputs to authorization.</t>

<ul>
<li><t><strong>ABAC</strong>: Residency and integrity Claims from the Attestation Result can be mandatory attributes for sensitive operations.</t>
</li>
<li><t><strong>KMS gatekeeping</strong>: Release of high-value assets (for example, decryption keys) should depend on a recent, positive Attestation Result.</t>
</li>
<li><t><strong>Fail closed</strong>: When the Attestation Result is embedded in an X.509 extension marked CRITICAL, any consumer that does not understand the extension will reject the credential.</t>
</li>
</ul>
</section>

<section anchor="v-pea-examples-and-sensor-recipes"><name>V-PEA Examples and Sensor Recipes</name>

<section anchor="example-instance-privacy-technique-zkp"><name>Example Instance (privacy-technique = &quot;zkp&quot;)</name>

<sourcecode type="json">{
  &quot;lah-bundle&quot;: {
    &quot;tpm-ak&quot;: &quot;-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG...\n-----END PUBLIC KEY-----&quot;,
    &quot;geolocation-id-hash&quot;: &quot;7f4a2c1b9e3d8f0a6b5c4d2e1f0a9b8c...&quot;,
    &quot;geolocation-proof-hash&quot;: &quot;c8bc2ed62a7a650d99e0884197cdf345...&quot;,
    &quot;privacy-technique&quot;: &quot;zkp&quot;,
    &quot;geolocation-payload&quot;: {
      &quot;zkp-proof-uri&quot;: &quot;https://verifier.example/v1/proof/c8bc2ed6...&quot;,
      &quot;zkp-format&quot;: &quot;plonky2&quot;
    },
    &quot;nonce&quot;: &quot;ZmUyZjdmMzlmZGVlZWQxOTM1YjY0Mjk0...&quot;,
    &quot;timestamp&quot;: 1740693456,
    &quot;tpm-quote-seal&quot;: &quot;ARoAAQALAAUACwEA...&quot;,
    &quot;target-environment-image-digest&quot;: &quot;a1b2c3d4e5f6...64-char-hex-sha256&quot;
  },
  &quot;mno-location&quot;: {
    &quot;mno-key-cert&quot;: &quot;MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A...&quot;,
    &quot;mno-sig&quot;: &quot;MEYCIQDx9z2k...&quot;
  }
}
</sourcecode>
</section>

<section anchor="sensor-type-input-recipes"><name>Sensor Type Input Recipes</name>
<t>The following recipes define how <tt>geolocation-id-hash</tt> is constructed from different sensor types. The Verifier sees only the opaque hash — never the raw identifiers.</t>
<table>
<thead>
<tr>
<th align="left">Sensor Type</th>
<th align="left">geolocation-id-hash Input</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left">Mobile (CAMARA)</td>
<td align="left"><tt>SHA-256(tpm-ak-bytes \|\| IMEI-bytes \|\| IMSI-bytes)</tt></td>
</tr>

<tr>
<td align="left">GNSS receiver</td>
<td align="left"><tt>SHA-256(tpm-ak-bytes \|\| sensor-serial-bytes \|\| sensor-class-id-bytes)</tt></td>
</tr>
</tbody>
</table></section>
</section>

<section anchor="implementation-status"><name>Implementation Status</name>
<t>[Note to RFC Editor: This section may be removed before publication as per {{!RFC7942}}.]</t>
<t>A reference implementation of the V-PEA profile is publicly available:</t>

<ul>
<li><t><strong>Repository</strong>: <eref target="https://github.com/lfedgeai/AegisSovereignAI">https://github.com/lfedgeai/AegisSovereignAI</eref></t>
</li>
<li><t><strong>Path</strong>: <tt>hybrid-cloud-poc/</tt></t>
</li>
<li><t><strong>License</strong>: Apache 2.0</t>
</li>
</ul>
<t>The implementation demonstrates the <strong>in-band host attestation</strong> deployment pattern ({{deployment-patterns-informative}}) using:</t>

<ul>
<li><t><strong>TPM 2.0</strong> hardware root of trust (AK-based quotes, PCR 15 TOCTOU protection)</t>
</li>
<li><t><strong>SPIRE</strong> (Relying Party) with a custom <tt>unifiedidentity</tt> plugin that consumes V-PEA Attestation Results and embeds them as an X.509 extension (OID <tt>1.3.6.1.4.1.65284.1.1</tt>)</t>
</li>
<li><t><strong>Keylime</strong> (Verifier) with IMA measurement of the Target Environment binary (<tt>target-environment-image-digest</tt>)</t>
</li>
<li><t><strong>Plonky2</strong> STARK prover for <tt>privacy-technique = &quot;zkp&quot;</tt> geofence proofs</t>
</li>
<li><t><strong>Geolocation sensor cascade</strong>: Mobile/CAMARA, GNSS/GPS, and config-file fallback with IMEI/IMSI binding for <tt>geolocation-id-hash</tt></t>
</li>
</ul>
<t>The implementation includes automated end-to-end tests (<tt>./run-demo.sh</tt>) that exercise the full attestation flow from TPM quote construction through ZKP proof generation and Attestation Result consumption.</t>
</section>

<section anchor="wimse-integration"><name>WIMSE Integration</name>
<t>This appendix describes how a WIMSE deployment consumes V-PEA Attestation Results. The mapping is informative and does not constrain V-PEA's RATS profile.</t>

<section anchor="relationship-to-wimse-architecture"><name>Relationship to WIMSE Architecture</name>
<t>The WIMSE Architecture {{I-D.ietf-wimse-architecture}} defines a credential issuance and workload identity framework. V-PEA produces Attestation Results that WIMSE credential issuers consume as trust inputs. The following mapping shows how V-PEA RATS roles correspond to WIMSE entities:</t>
<table>
<thead>
<tr>
<th align="left">V-PEA RATS Role</th>
<th align="left">WIMSE Entity</th>
<th align="left">Function</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left">Attester (LAH)</td>
<td align="left">Platform hosting the SPIRE Agent</td>
<td align="left">Produces V-PEA Evidence about the agent and platform.</td>
</tr>

<tr>
<td align="left">Verifier</td>
<td align="left">Platform integrity service (for example, Keylime)</td>
<td align="left">Appraises Evidence and produces Attestation Results.</td>
</tr>

<tr>
<td align="left">Relying Party</td>
<td align="left">SPIRE Server (Credential Issuer / CA)</td>
<td align="left">Consumes the Attestation Result; issues or renews X.509-SVIDs only when the result satisfies its Appraisal Policy for Attestation Results.</td>
</tr>

<tr>
<td align="left">(out of V-PEA scope)</td>
<td align="left">Workload</td>
<td align="left">Receives its credential (for example, SVID) from the SPIRE Agent via transitive attestation {{I-D.mw-wimse-transitive-attestation}}.</td>
</tr>

<tr>
<td align="left">(out of V-PEA scope)</td>
<td align="left">Downstream service consumer (mTLS peer)</td>
<td align="left">Consumes the issued credential; trusts the CA signature as proxy for verified integrity and residency.</td>
</tr>
</tbody>
</table></section>

<section anchor="workload-binding-fields"><name>Workload Binding Fields</name>
<t>In a WIMSE deployment the Relying Party (SPIRE Server) may require additional context to associate the Attestation Result with a specific credential issuance event. The following fields are carried outside the V-PEA Evidence structure, typically in the credential issuance request or as Relying Party policy inputs:</t>
<table>
<thead>
<tr>
<th align="left">Field</th>
<th align="left">Type</th>
<th align="left">Description</th>
</tr>
</thead>

<tbody>
<tr>
<td align="left"><tt>workload-id</tt></td>
<td align="left">string (SPIFFE ID)</td>
<td align="left">The workload's SPIFFE identity URI (for example, <tt>spiffe://example.org/python-app</tt>).</td>
</tr>

<tr>
<td align="left"><tt>key-source</tt></td>
<td align="left">string</td>
<td align="left">Identifier for the origin of the workload's key material (for example, <tt>&quot;tpm-app-key&quot;</tt>). Deployment-specific.</td>
</tr>
</tbody>
</table><t>These fields are not part of V-PEA Evidence. They are consumed by the Relying Party when applying its Appraisal Policy for Attestation Results.</t>
</section>

<section anchor="x-509-extension-for-downstream-consumers"><name>X.509 Extension for Downstream Consumers</name>
<t>When the WIMSE Relying Party acts as a CA (for example, SPIRE Server issuing X.509-SVIDs), it MAY embed V-PEA Attestation Result information as an X.509 extension (OID <tt>1.3.6.1.4.1.65284.1.1</tt>). Implementations SHOULD mark this extension as CRITICAL so that any downstream consumer that does not understand it will reject the credential, enforcing fail-closed behavior for residency-constrained workloads.</t>
</section>
</section>

<section anchor="data-residency-references"><name>Data Residency References</name>
<t>India -- Reserve Bank of India (RBI): Payment System Data Localization (2018): From RBI Circular RBI/2017-18/153 (April 6, 2018): &quot;All system providers shall ensure that the entire data relating to payment systems operated by them are stored in a system only in India. This data should include the full end-to-end transaction details / information collected / carried / processed as part of the message / payment instruction.&quot;</t>
<t>South Korea's Data Localization Regulations -- Geospatial Information Management Act (Spatial Data Act): Article 16, Paragraph 1: Prohibits the export of state-led survey data.</t>
</section>

</back>

</rfc>
