Skip to content

Commit 1ff4b89

Browse files
committed
docs(geolocation): Add policy proof generation & verification example
- Enterprise generates policy commitment with public boundary polygon - Keylime Agent Plugin generates ZKP + TPM-signed output - Auditor verifies independently without seeing precise coordinates - Note: boundary policies are regulatory (not trade secrets) so sharing is default
1 parent 92376a3 commit 1ff4b89

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

docs/auditor-privacy-preserving-geolocation.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,68 @@ When an auditor requests geolocation compliance evidence:
301301
3. **Verify Hardware Attestation:** Confirm the session was on attested hardware via SVID.
302302
4. **Aggregate Compliance:** Confirm all sessions in the audit window are compliant.
303303

304+
### Example: Policy Proof Generation & Verification
305+
306+
> [!NOTE]
307+
> **Public Boundary Policy:** Unlike proprietary prompt logic, geolocation compliance boundaries (e.g., "EEA", "US-EAST") are defined by regulation—not trade secrets. Sharing the exact boundary polygon with auditors is a **reasonable default**.
308+
309+
#### Step 1: Enterprise Generates Policy Proof
310+
311+
The Enterprise defines the compliance boundary and generates a verifiable policy commitment:
312+
313+
```json
314+
// POLICY DEFINITION (Public - shared with Auditor)
315+
{
316+
"policy_name": "EEA_REGULATION_K_v2",
317+
"policy_version": "2026.1",
318+
"boundary_polygon": [
319+
{"lat": 71.185, "lon": -9.55}, // Norway (northwest)
320+
{"lat": 71.185, "lon": 31.59}, // Finland (northeast)
321+
{"lat": 34.80, "lon": 31.59}, // Cyprus (southeast)
322+
{"lat": 36.00, "lon": -9.55} // Portugal (southwest)
323+
],
324+
"policy_hash": "sha256:7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069"
325+
}
326+
```
327+
328+
The Keylime Agent Plugin generates ZKP proofs using this policy:
329+
330+
```
331+
Enterprise Server (Keylime Agent Plugin)
332+
═════════════════════════════════════════
333+
334+
1. Load Policy: EEA_REGULATION_K_v2
335+
2. Receive TPM-signed GPS: (48.8566, 2.3522) ← Paris
336+
3. ZKP Circuit: point_in_polygon(48.8566, 2.3522, EEA_BOUNDARY) → TRUE
337+
4. Generate Proof: π = Prove(coordinates, boundary, tpm_sig)
338+
5. TPM Sign Output: output_sig = TPM_Sign(SHA256(π))
339+
6. Emit SVID Claim: grc.geolocation.status = "compliant"
340+
```
341+
342+
#### Step 2: Auditor Verifies Proof
343+
344+
The Auditor receives the Evidence Bundle and verifies independently:
345+
346+
```
347+
Auditor Verification (Independent)
348+
══════════════════════════════════
349+
350+
1. Retrieve Policy: Download EEA_REGULATION_K_v2 from regulatory registry
351+
2. Verify Policy Hash: SHA256(boundary_polygon) == "sha256:7f83b..." ✓
352+
3. Verify ZKP Proof:
353+
- Load proof π from Evidence Bundle
354+
- Load public inputs: boundary_polygon, tpm_public_key, timestamp
355+
- Run Noir Verifier: Verify(π, public_inputs) → TRUE ✓
356+
4. Verify TPM Output Signature:
357+
- Verify output_sig against Keylime-registered TPM public key ✓
358+
5. Conclusion: "Session was on verified hardware within EEA boundary"
359+
```
360+
361+
**Key Insight:** The Auditor never sees the precise GPS coordinates (48.8566, 2.3522). They only verify that:
362+
- A valid TPM-signed coordinate existed (input integrity)
363+
- That coordinate was inside the EEA polygon (compliance)
364+
- The proof was generated on a specific Keylime-attested server (output integrity)
365+
304366
---
305367

306368
## 8. Regulatory Mapping

0 commit comments

Comments
 (0)