<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Parag Mali - tag: attestation</title><description>Posts tagged attestation.</description><link>https://paragmali.com/</link><language>en-US</language><lastBuildDate>Sun, 07 Jun 2026 04:13:10 GMT</lastBuildDate><atom:link href="https://paragmali.com/tags/attestation/rss.xml" rel="self" type="application/rss+xml"/><item><title>Verify Me, Don&apos;t Trust Me: Apple PCC, Azure Confidential AI, and the Architecture of the Modern AI Cloud</title><link>https://paragmali.com/blog/verify-me-dont-trust-me-apple-pcc-azure-confidential-ai-and-/</link><guid isPermaLink="true">https://paragmali.com/blog/verify-me-dont-trust-me-apple-pcc-azure-confidential-ai-and-/</guid><description>Apple Private Cloud Compute and Azure confidential AI ship the same promise through unrecognisably different machinery. On five axes they differ in degree. On one axis -- verifiable transparency of the production fleet -- they differ in kind.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><content:encoded>
Apple and Microsoft now ship the same user-facing promise -- &quot;the cloud cannot see your AI prompt&quot; -- through completely different machinery. Apple&apos;s **Private Cloud Compute** (announced June 10, 2024 [@apple-pcc-blog]; source release October 24, 2024 [@apple-pcc-research]) runs custom Apple-Silicon servers with a per-node Secure Enclave Processor and publishes every production image hash to a public, append-only **Transparency Log** that the user&apos;s device cryptographically refuses to bypass. Microsoft&apos;s Azure confidential AI substrate (`NCCads_H100_v5`, GA September 24, 2024 [@ms-h100-ga]) composes AMD SEV-SNP confidential VMs with NVIDIA H100 GPUs in CC-On mode, verifies the composed attestation through Microsoft Azure Attestation, and gates customer-managed keys through Secure Key Release from Azure Key Vault. On five of six architectural axes the two designs differ in *degree*. On the sixth -- verifiable transparency of the production fleet -- they differ in *kind*.
&lt;h2&gt;1. Same Promise, Opposite Architectures&lt;/h2&gt;
&lt;p&gt;On June 10, 2024, Apple announced Private Cloud Compute and promised that &quot;personal user data sent to PCC isn&apos;t accessible to anyone other than the user -- not even to Apple&quot; [@apple-pcc-blog]. On September 24, 2024, Microsoft brought its first confidential GPU SKU to general availability. NVIDIA&apos;s companion blog called Azure &quot;the first cloud provider to offer confidential computing with NVIDIA H100 GPUs&quot; [@nvidia-h100-ga]. Microsoft&apos;s coordinated Trustworthy AI post framed the same architectural commitment: Microsoft itself cannot view or tamper with the data or the model inference process [@ms-h100-ga] [@ms-trustworthy-ai]. Two vendors. The same user-facing contract. Five months apart.&lt;/p&gt;
&lt;p&gt;Open the lid on either one and the machinery is unrecognisable.&lt;/p&gt;
&lt;p&gt;Apple PCC runs on custom Apple-Silicon servers, each with a &lt;a href=&quot;https://paragmali.com/blog/apple-secure-enclave-vs-microsoft-pluton-two-roads-to-hardwa/&quot; rel=&quot;noopener&quot;&gt;Secure Enclave Processor&lt;/a&gt; wired into a vendor-controlled certificate chain. Every production node image hash is published to an append-only public log that the user&apos;s device cryptographically refuses to bypass [@apple-pcc-blog] [@apple-pcc-release-transparency].&lt;/p&gt;
&lt;p&gt;Azure&apos;s confidential-AI substrate runs on the &lt;code&gt;Standard_NCC40ads_H100_v5&lt;/code&gt; SKU: 40 non-multithreaded 4th-Gen AMD EPYC Genoa vCPUs, 320 GiB of RAM, one NVIDIA H100 NVL GPU with 94 GB of high-bandwidth memory, with the Trusted Execution Environment &quot;spanning confidential VM on the CPU and attached GPU&quot; [@ms-sku-nccads]. Trust is rooted in AMD&apos;s per-chip signing key, Intel&apos;s TDX module on the alternative SKU family, NVIDIA&apos;s on-die hardware root of trust on the GPU, and a Microsoft-operated verifier service called Microsoft Azure Attestation [@ms-maa-overview]. None of those signers are Apple, and Apple&apos;s signer is none of them.&lt;/p&gt;
&lt;p&gt;That is not a difference of brand preference. It is a difference about &lt;em&gt;who you are trusting and how you can check&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This article is a side-by-side architectural treatment of the two designs. It will compare them on six axes you will be able to recite at the end:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Silicon control&lt;/strong&gt; -- who controls the chip, the firmware, the OS, and the inference runtime.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hardware root of trust&lt;/strong&gt; -- which signing keys anchor the attestation chain.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attestation surface&lt;/strong&gt; -- what cryptographic artefact the relying party actually consumes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key release and state model&lt;/strong&gt; -- whether the customer holds keys, and how those keys are released to the workload.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPU TEE&lt;/strong&gt; -- how confidential compute extends from the CPU into the GPU.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network anonymization&lt;/strong&gt; -- whether the operator can correlate requests with their originating client.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;By the end you should be able to read a Microsoft Azure Attestation JSON Web Token and an Apple PCC attestation envelope at the same level of fluency, and explain to a non-specialist what each cryptographic artefact actually proves. You should be able to name the threat each architecture defends against, and the threats neither closes by construction.&lt;/p&gt;
&lt;p&gt;When the user-facing promise is the same, the architectural divergence is the entire story. To understand what that divergence means, we first have to see where each architecture came from. The two designs did not converge on the same problem by coincidence. They descended from two different ancestor problems that took until 2024 to meet.&lt;/p&gt;
&lt;h2&gt;2. Confidential Computing&apos;s Two Parents&lt;/h2&gt;
&lt;p&gt;September 14, 2017. Mark Russinovich, Azure CTO, publishes &quot;Introducing Azure confidential computing.&quot; Microsoft, he writes, is &quot;the first cloud to offer new data security capabilities with a collection of features and services called Azure confidential computing,&quot; and the point of the announcement is &quot;encryption of data while in use&quot; [@ms-russinovich-2017]. Russinovich names &quot;data in use&quot; as the third protection state, the missing companion to &quot;at rest&quot; and &quot;in transit.&quot; Five years later the Confidential Computing Consortium publishes &quot;A Technical Analysis of Confidential Computing&quot; v1.3, the vendor-neutral document both Apple and Microsoft now anchor on, which defines the field formally and gives the lower bounds explicitly [@ccc-technical-analysis] [@ccc-about].&lt;/p&gt;
&lt;p&gt;Russinovich&apos;s framing did not appear from nowhere. It was the cloud-operator-side voice of a conversation that had two parents in the underlying hardware.&lt;/p&gt;
&lt;h3&gt;Parent one: the hardware TEE lineage&lt;/h3&gt;
&lt;p&gt;A &lt;strong&gt;Trusted Execution Environment&lt;/strong&gt; is a hardware-isolated execution context inside a system whose own host operating system or hypervisor is &lt;em&gt;not&lt;/em&gt; trusted to look in. The lineage starts in the early 2000s with ARM TrustZone&apos;s split-world NS-bit, then Intel TXT (Trusted Execution Technology) for measured launch on the CPU side -- originally announced as &lt;strong&gt;LaGrande Technology&lt;/strong&gt; at IDF 2003 and rebranded as TXT around 2007 with the vPro / Q35-Q45 chipset rollout. Apple shipped its first &lt;strong&gt;Secure Enclave Processor&lt;/strong&gt; -- a separate Apple-designed processor core on the same SoC as the main application processor, with its own boot ROM, AES engine, and protected memory -- on the iPhone 5s in September 2013 [@apple-sep-guide].&lt;/p&gt;

A hardware-isolated execution context inside a larger system in which code can run with cryptographic guarantees of confidentiality and integrity even when the system&apos;s own operating system, hypervisor, or peripheral firmware is compromised or controlled by an adversary. TEEs include process-scope enclaves (Intel SGX), VM-scope confidential VMs (AMD SEV-SNP, Intel TDX), and on-die separate-processor designs (Apple Secure Enclave Processor, Microsoft Pluton).
&lt;p&gt;Intel SGX (Software Guard Extensions) arrived as the first widely-available general-purpose TEE on commodity x86 silicon, with the architectural model first described in the McKeen et al. HASP 2013 paper [@mckeen-sgx-hasp] and given general availability on Skylake-era Core CPUs in late 2015. Costan and Devadas&apos;s &quot;Intel SGX Explained&quot; (IACR ePrint 2016/086) became the canonical academic systematization [@costan-sgx]. SGX let an application author carve out an &lt;em&gt;enclave&lt;/em&gt; -- a slice of address space encrypted in DRAM by a per-CPU memory-encryption engine and measured at creation time -- and have a remote party verify, through an Intel-signed attestation report, that a specific code measurement was running before any secret was released to it.&lt;/p&gt;

Per the Confidential Computing Consortium: protection of data in use through computation in a hardware-based, attested Trusted Execution Environment. The CCC explicitly extends the protection state-pair (at rest, in transit) with a third state (in use) and treats hardware TEEs as the substrate that makes the third state cryptographically enforceable. The CCC v1.3 analysis is the vendor-neutral definitional document both Apple and Microsoft cite [@ccc-technical-analysis] [@ms-cc-overview].
&lt;h3&gt;Parent two: the cloud-operator-as-adversary lineage&lt;/h3&gt;
&lt;p&gt;The other parent was the cloud. Once enterprise workloads moved into public clouds, the &lt;em&gt;cloud operator itself&lt;/em&gt; became part of the threat model. AMD &lt;strong&gt;published the first SEV API specification&lt;/strong&gt; (&quot;Secure Encrypted Virtualization&quot;) in April 2016, with silicon support shipping in the EPYC 7001 &quot;Naples&quot; family in June 2017 -- attaching a per-VM memory-encryption key to AMD EPYC processors. SEV-ES followed in February 2017, adding encrypted register state on world switches. &lt;strong&gt;SEV-SNP&lt;/strong&gt; (Secure Nested Paging), described in an AMD whitepaper in January 2020 [@amd-sev-snp-wp], added integrity protection through the Reverse Map Table. Intel&apos;s parallel response was &lt;strong&gt;TDX&lt;/strong&gt; (Trust Domain Extensions), specified in September 2020.&lt;/p&gt;
&lt;p&gt;Both AMD and Intel framed the contribution the same way: protect the guest from a hypervisor that may itself be the adversary. That framing was exactly what Russinovich&apos;s 2017 post had been pointing at, three years earlier, on the cloud side [@ms-russinovich-2017].&lt;/p&gt;
&lt;h3&gt;Convergence&lt;/h3&gt;
&lt;p&gt;The two parents started speaking a common vocabulary in the early 2020s. The Confidential Computing Consortium was founded in August 2019 as a Linux Foundation project community, with members across CPU vendors (AMD, Intel, NVIDIA, ARM), cloud providers (Microsoft, Google, Oracle), and OS / runtime vendors (Red Hat, Canonical, IBM) [@ccc-about].&lt;/p&gt;
&lt;p&gt;In January 2023 the IETF Remote ATtestation procedureS (RATS) Working Group published RFC 9334, &quot;Remote ATtestation procedureS (RATS) Architecture,&quot; giving the field a single vocabulary for the four roles in any attestation flow: the &lt;strong&gt;Attester&lt;/strong&gt; (the workload making the claim), the &lt;strong&gt;Verifier&lt;/strong&gt; (the party that checks the cryptographic evidence), the &lt;strong&gt;Relying Party&lt;/strong&gt; (the party that makes a decision based on the verified result), and the &lt;strong&gt;Endorser&lt;/strong&gt; (the party that vouches for the Attester&apos;s identity, typically the silicon vendor) [@ietf-rfc9334].&lt;/p&gt;
&lt;p&gt;Both Apple PCC and Microsoft Azure Attestation map cleanly onto RFC 9334&apos;s vocabulary. They use the same words for the same roles. The architectures that fill those roles are different.&lt;/p&gt;

timeline
    title TEE and confidential-computing milestones (2003-2024)
    section Hardware TEE lineage
        2003 : ARM TrustZone (mobile split-world)
        2007 : Intel TXT / LaGrande (measured launch)
        2013 : Apple Secure Enclave on iPhone 5s
        2015 : Intel SGX general availability (Skylake)
        2016 : Costan and Devadas SGX Explained
    section Cloud operator as adversary
        2016 : AMD SEV (memory encryption)
        2017 : AMD SEV-ES (encrypted register state)
        2017 : Azure CC introduced (Russinovich)
        2020 : AMD SEV-SNP whitepaper (integrity via RMP)
        2020 : Intel TDX specification
    section Vocabulary and standards
        2019 : Confidential Computing Consortium founded
        2022 : CCC Technical Analysis v1.3
        2023 : IETF RFC 9334 RATS Architecture
        2024 : Apple PCC and Azure H100 CC-On GA
&lt;p&gt;Apple&apos;s lineage is a third tributary the other two largely overlook. The iPhone Data Protection model, anchored in the SEP since 2013, and iCloud Private Relay&apos;s two-hop architecture from 2021 onward both fed into PCC. PCC is the only major-vendor confidential-AI substrate descended from a &lt;em&gt;device-side&lt;/em&gt; TEE origin rather than a &lt;em&gt;cloud-side&lt;/em&gt; one [@apple-sep-guide] [@apple-pcc-blog].&lt;/p&gt;
&lt;p&gt;Both parents converged on the same vocabulary by 2023. But the first attempts at putting that vocabulary into production hit walls neither parent had predicted -- starting with the 128 MB enclave that broke deep learning before it began.&lt;/p&gt;
&lt;h2&gt;3. Process Enclaves and the Operator-Honesty Assumption&lt;/h2&gt;
&lt;p&gt;August 2018, USENIX Security. Jo Van Bulck and nine co-authors publish &quot;Foreshadow: Extracting the Keys to the Intel SGX Kingdom with Transient Out-of-Order Execution&quot; [@foreshadow]. The attack reads L1-cached enclave memory transiently and -- this is the load-bearing detail -- recovers the SGX EPID attestation-signing key for the targeted CPU generation. Once an attestation key leaks, every attestation that platform produces is forgeable to the attacker until microcode is updated and the EPID group is revoked. The whole &quot;the enclave really is what it says it is&quot; property collapses for that CPU generation overnight.&lt;/p&gt;
&lt;p&gt;To understand what Foreshadow was attacking, it helps to walk SGX&apos;s enclave lifecycle. A privileged-mode application invokes &lt;code&gt;ECREATE&lt;/code&gt; to reserve an enclave address range; pages are added with &lt;code&gt;EADD&lt;/code&gt;, each call measuring the page contents into a SHA-256 chain that becomes the enclave&apos;s &lt;code&gt;MRENCLAVE&lt;/code&gt; measurement; &lt;code&gt;EINIT&lt;/code&gt; finalises the chain and locks the enclave; &lt;code&gt;EENTER&lt;/code&gt; is then the only legal entry point [@mckeen-sgx-hasp] [@costan-sgx]. When a remote party asks the enclave to prove its identity, the Quoting Enclave -- a small Intel-signed enclave on every SGX-enabled CPU -- signs a &lt;code&gt;REPORT&lt;/code&gt; structure with the EPID key. The remote party verifies the EPID signature against the Intel Attestation Service and learns &lt;em&gt;which&lt;/em&gt; code measurement the enclave is running.&lt;/p&gt;

sequenceDiagram
    participant App as Untrusted app
    participant CPU as SGX hardware
    participant QE as Quoting Enclave
    participant IAS as Intel Attestation Service
    participant RP as Relying Party
    App-&amp;gt;&amp;gt;CPU: ECREATE (reserve enclave)
    App-&amp;gt;&amp;gt;CPU: EADD pages (measured into MRENCLAVE)
    App-&amp;gt;&amp;gt;CPU: EINIT (finalise measurement)
    App-&amp;gt;&amp;gt;CPU: EENTER (transfer control)
    CPU-&amp;gt;&amp;gt;QE: produce local REPORT
    QE-&amp;gt;&amp;gt;IAS: sign REPORT with EPID key
    IAS-&amp;gt;&amp;gt;RP: verify quote, return result
    RP-&amp;gt;&amp;gt;App: release secret if measurement matches

A dedicated secure subsystem integrated into Apple Silicon, isolated from the main application processor with its own boot ROM, AES Engine, and protected memory. The SEP runs an L4-derived microkernel and was first shipped on the iPhone 5s in 2013. It is not a TPM, not the NFC Secure Element used for Apple Pay, and not architecturally related to Intel SGX. It is the per-node hardware root of trust on every Apple Private Cloud Compute server [@apple-sep-guide] [@apple-pcc-blog].
&lt;p&gt;SGX scaled to a billion CPUs in three or four years, but it never scaled to deep learning. Three killer constraints stopped it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Constraint one: the Enclave Page Cache ceiling.&lt;/strong&gt; On Skylake-class client and Xeon E-2100 / E-2200 (Coffee Lake-based) server SKUs the Enclave Page Cache (EPC) was capped at 128 MB total per socket, of which only ~96 MB was usable for application data after Intel&apos;s bookkeeping overhead. An order of magnitude too small for any modern deep-learning workload, where a single set of weights for even a small model could easily exceed the EPC by a factor of 100 or more. (Skylake-SP and Cascade Lake-SP server Xeons did not ship SGX at all; SGX at server scale only arrived with Ice Lake-SP in 2021, by which point the cloud-AI story had moved past process-scope enclaves.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Constraint two: the programming model.&lt;/strong&gt; SGX required the application author to split the codebase into a trusted (in-enclave) and untrusted (outside-enclave) half, with explicit &lt;code&gt;ECALL&lt;/code&gt; and &lt;code&gt;OCALL&lt;/code&gt; transitions and a fixed serialised data interface across the trust boundary. Production codebases written before SGX existed simply refused to be partitioned that way. The handful of teams that tried -- mainly Intel internal proof-of-concepts -- produced systems that worked but did not generalise.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Constraint three: the side-channel cascade.&lt;/strong&gt; Foreshadow / L1TF in August 2018 [@foreshadow]; SgxPectre at IEEE EuroS&amp;amp;P 2019, demonstrating Spectre-v1-style transient-execution attacks inside SGX enclaves [@sgxpectre]; Plundervolt in IEEE S&amp;amp;P 2020, a software-based fault-injection attack via Intel&apos;s privileged voltage-control interface, assigned CVE-2019-11157 [@plundervolt]. Each closed a different residual surface that Intel&apos;s threat model had not named. The principled extension -- that any TEE on shared silicon inherits a microarchitectural side-channel surface that the architectural threat model does not cover -- became the field&apos;s unspoken second axiom.&lt;/p&gt;
&lt;p&gt;SGX&apos;s attestation chain itself went through a generational turnover. The original EPID (Enhanced Privacy ID) scheme tied attestation verification to the Intel Attestation Service as a centralised relying party. By 2018 Intel had begun the transition to DCAP (Data Center Attestation Primitives), letting cloud operators host their own attestation infrastructure. The transition was exactly because EPID-pinned-to-IAS was incompatible with how cloud providers wanted to verify attestations at fleet scale.&lt;/p&gt;
&lt;p&gt;AMD&apos;s first-generation SEV and SEV-ES belong to the same era. They encrypted guest memory and (in SEV-ES) the saved register state on world switches, but they did not yet have the integrity check that would make a malicious hypervisor architecturally unable to mount remap-style attacks. That defence had to wait for SEV-SNP and a different failure that demonstrated, on the other side of the trust boundary, exactly the same lesson Foreshadow had taught on the Intel side.&lt;/p&gt;
&lt;p&gt;Process-scope enclaves were the wrong granularity. The fix had to come from somewhere else. What if you encrypted whole virtual machines instead?&lt;/p&gt;
&lt;h2&gt;4. Three Architectural Waves That Made Cloud Confidential AI Feasible&lt;/h2&gt;
&lt;p&gt;WOOT 2018. Mathias Morbitzer, Manuel Huber, Julian Horsch, and Sascha Wessel publish &quot;SEVered: Subverting AMD&apos;s Virtual Machine Encryption&quot; [@severed]. A malicious hypervisor remaps a guest&apos;s network-facing service to point at &lt;em&gt;other&lt;/em&gt; guest physical pages; the service unwittingly serves the contents of those pages -- still inside the guest, still nominally encrypted at the memory controller -- as plaintext over the network. The encryption did not break. The attack did not need it to.&lt;/p&gt;
&lt;p&gt;This is the architectural insight every Generation-3-and-later confidential VM design is built on.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Confidentiality without integrity is not isolation. A confidential VM that encrypts memory but does not bind the encryption to a specific physical page can be tricked into encrypting and then leaking other guests&apos; contents on the operator&apos;s behalf. Every TEE design from 2020 onward is haunted by the SEVered failure.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Wave 1 (~2020-2022): VM-level TEEs with hardware-enforced page ownership&lt;/h3&gt;
&lt;p&gt;AMD&apos;s response was SEV-SNP and the &lt;strong&gt;Reverse Map Table (RMP)&lt;/strong&gt;: one entry per 4 KB physical page in the system, tracking ownership, validation state, and the permitted size class for that page. Guest pages transition from &lt;code&gt;INVALID&lt;/code&gt; to &lt;code&gt;VALIDATED&lt;/code&gt; only via a guest-initiated &lt;code&gt;PVALIDATE&lt;/code&gt; instruction; subsequent hypervisor remap attempts that would violate the RMP fault out at the hardware level. Intel TDX took a parallel architectural path: a new privilege ring below the hypervisor called &lt;strong&gt;SEAM&lt;/strong&gt; mode, running the Intel-signed TDX Module, with per-VM trust-domain encryption keys managed through MK-TME (Multi-Key Total Memory Encryption).&lt;/p&gt;

A hardware-managed table maintained by AMD SEV-SNP processors with one entry per 4 KB physical page in the system. Each entry records the page&apos;s owner (which guest, if any), its validation state (`VALIDATED` or not), and the permitted size class. The hypervisor cannot remap a guest-owned page into a different guest without triggering a fault. The RMP is AMD&apos;s architectural response to SEVered: it makes the SEVered class of attacks impossible by construction.
&lt;p&gt;Azure brought the SEV-SNP substrate to general availability in 2022 with &lt;a href=&quot;https://paragmali.com/blog/inside-azure-confidential-vms-sev-snp-intel-tdx-and-the-para/&quot; rel=&quot;noopener&quot;&gt;the &lt;code&gt;DCasv5&lt;/code&gt; and &lt;code&gt;ECasv5&lt;/code&gt; confidential VM families&lt;/a&gt; (the &lt;code&gt;a&lt;/code&gt; denotes AMD silicon, the &lt;code&gt;s&lt;/code&gt; denotes premium storage) [@ms-cc-overview]. Intel TDX entered public preview on Azure in December 2023. Full general availability of the next-generation Intel TDX confidential VMs on 5th-Gen Intel Xeon Scalable Emerald Rapids -- the &lt;code&gt;DCesv6&lt;/code&gt;, &lt;code&gt;DCedsv6&lt;/code&gt;, &lt;code&gt;ECesv6&lt;/code&gt;, and &lt;code&gt;ECedsv6&lt;/code&gt; families -- followed on February 26, 2026 [@ms-tdx-v6-ga] [@ms-dcesv6].&lt;/p&gt;
&lt;p&gt;The earlier SEV and SEV-ES generations were not free of side channels either. Li, Zhang, Wang, Li, and Cheng&apos;s &quot;CipherLeaks&quot; (USENIX Security 2021) showed a deterministic-ciphertext side channel against SEV-ES: identical plaintext at the same physical address produced identical ciphertext, letting a hypervisor observe constant-time cryptographic implementations and recover keys without ever breaking the encryption [@cipherleaks]. SEV-SNP&apos;s tweakable ciphertext mode addressed this, but the architectural lesson -- that &quot;the encryption is intact&quot; is not the same as &quot;the operator learns nothing&quot; -- repeats.&lt;/p&gt;
&lt;h3&gt;Wave 2 (~2022-2024): Attestation and key release as managed services&lt;/h3&gt;
&lt;p&gt;The second wave was less spectacular but more consequential for procurement. &lt;strong&gt;Microsoft Azure Attestation&lt;/strong&gt; (MAA) is a managed verifier that consumes SEV-SNP attestation reports, TDX quotes, SGX quotes, VBS enclave reports, &lt;a href=&quot;https://paragmali.com/blog/the-tpm-in-windows-one-primitive-twenty-five-years-and-the-c/&quot; rel=&quot;noopener&quot;&gt;vTPM&lt;/a&gt; event logs, and Trusted Launch evidence and issues a JSON Web Token (JWT) with documented &lt;code&gt;x-ms-isolation-tee&lt;/code&gt;, &lt;code&gt;x-ms-compliance-status&lt;/code&gt;, &lt;code&gt;x-ms-sevsnpvm-*&lt;/code&gt;, and &lt;code&gt;x-ms-runtime&lt;/code&gt; claims [@ms-maa-overview]. Per the MAA overview verbatim: &quot;Azure Attestation supports both platform- and guest-attestation of AMD SEV-SNP based Confidential VMs (CVMs)&quot; [@ms-maa-overview]. The JWT can then drive &lt;strong&gt;Secure Key Release&lt;/strong&gt; from Azure Key Vault Premium or Azure Managed HSM: the encrypted customer key carries a &lt;em&gt;release policy&lt;/em&gt; against MAA-issued claims, and the HSM unwraps the key only when the policy is satisfied [@ms-cc-overview].&lt;/p&gt;

A managed Microsoft cloud service that acts as the Verifier (in the IETF RFC 9334 sense) for confidential workloads on Azure. MAA consumes hardware-vendor attestation evidence (SGX quotes, SEV-SNP attestation reports, Intel TDX quotes, vTPM event logs) and produces a signed JSON Web Token whose `x-ms-*` claims describe the attested TEE state. The JWT is the artefact that downstream relying parties -- including Azure Key Vault&apos;s Secure Key Release flow -- consume to decide whether to release a secret to the workload [@ms-maa-overview].

An Azure Key Vault Premium and Azure Managed HSM capability that gates release of a wrapped key on a successful attestation. The customer attaches a *release policy* to the key at creation time; the policy is evaluated against the claims of an MAA-issued JWT presented at unwrap time. The key is released to the workload only when the MAA token&apos;s claims match the policy. SKR makes customer-managed key material a first-class architectural primitive for Azure confidential workloads [@ms-cc-overview] [@ms-maa-overview].
&lt;p&gt;This is the implementation of what RFC 9334 calls the &lt;strong&gt;Passport&lt;/strong&gt; topological pattern: the Attester collects evidence once, hands it to the Verifier, gets back an Attestation Result (the MAA JWT), and then carries that Result to any Relying Party (the HSM, an external policy engine, an audit log) for the rest of the session [@ietf-rfc9334].&lt;/p&gt;

The MAA-as-managed-service shift removed a substantial per-customer engineering burden: customers no longer have to write their own attestation-report parsers, certificate-chain validators, or revocation-list checkers. This is the practical reason confidential VMs moved from research artefact to procurement category in 2022-2024. The trade-off it carries is structural: MAA itself becomes a trust anchor. If MAA&apos;s signing infrastructure or its policy-evaluation code is compromised, every relying party that consumes a MAA JWT is exposed in the same breath. The verifier is now a control point.
&lt;h3&gt;Wave 3 (June-October 2024): GPU TEEs, vendor-controlled fleets, and the public arrival of confidential AI&lt;/h3&gt;
&lt;p&gt;The third wave landed in five months in 2024 and changed what &quot;confidential AI&quot; could mean in production.&lt;/p&gt;
&lt;p&gt;The NVIDIA Hopper H100 confidential-computing whitepaper (WP-11459-001) had landed in July 2023 [@nvidia-whitepaper], and the NVIDIA Developer Blog technical post that accompanied it described the architecture in detail: an on-die hardware root of trust, secure measured boot of the GPU firmware, an SPDM (Security Protocol and Data Model) session connecting the CPU TEE driver to the GPU with mutual authentication, and encrypted bounce-buffer data movement between CPU encrypted memory and GPU encrypted HBM [@nvidia-dev-blog]. The blog states the architectural fact verbatim: &quot;The NVIDIA H100 Tensor Core GPU is the first ever GPU to introduce support for confidential computing&quot; [@nvidia-dev-blog].&lt;/p&gt;
&lt;p&gt;Apple announced Private Cloud Compute on June 10, 2024 at WWDC, with the canonical primary titled &quot;Private Cloud Compute: A new frontier for AI privacy in the cloud&quot; [@apple-pcc-blog]. Microsoft Build 2024 (May 21, 2024) announced confidential inferencing not for GPT-4 but for the Azure OpenAI &lt;strong&gt;Whisper&lt;/strong&gt; speech-to-text model [@ms-workshop-whisper].&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s &lt;code&gt;NCCads_H100_v5&lt;/code&gt; confidential GPU VM family -- 4th-Gen AMD EPYC Genoa CPU plus one NVIDIA H100 NVL GPU per VM, with the TEE spanning both [@ms-sku-nccads] -- reached general availability on September 24, 2024 [@ms-h100-ga]. The companion Microsoft Trustworthy AI post made the same architectural commitment: customer data and models remain inaccessible to Microsoft itself [@ms-trustworthy-ai] [@ms-h100-ga]. NVIDIA&apos;s parallel announcement underscored the same fact verbatim: &quot;Azure is the first cloud provider to offer confidential computing with NVIDIA H100 GPUs&quot; [@nvidia-h100-ga].&lt;/p&gt;
&lt;p&gt;Then on October 24, 2024 Apple published the supporting source code at &lt;code&gt;github.com/apple/security-pcc&lt;/code&gt;, shipped the Virtual Research Environment with macOS Sequoia 15.1 Developer Preview, and extended the Apple Security Bounty to PCC with rewards up to $1,000,000 [@apple-pcc-research] [@apple-pcc-github]. By end of October the substrate for cloud-scale confidential AI existed in two parallel forms. But &quot;shipping&quot; does not mean &quot;settling on one architecture.&quot; Two distinct breakthroughs landed within five months of each other and took the substrate in opposite directions.&lt;/p&gt;

flowchart LR
    A[Attacker&lt;br /&gt;controls hypervisor] --&amp;gt;|Remaps guest GPA tables| B[SEV guest&lt;br /&gt;network service]
    B --&amp;gt;|Reads memory under remapped pages| C[Other guest memory&lt;br /&gt;still under encryption]
    B --&amp;gt;|Serves bytes over network| D[Attacker collects&lt;br /&gt;plaintext]
    style A fill:#fee,stroke:#c33,color:#7f1d1d
    style D fill:#fee,stroke:#c33,color:#7f1d1d
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; SEVered did not recover an encryption key. It did not need to. By remapping page tables the malicious hypervisor convinced the guest to serve its own encrypted contents as plaintext. The fix -- per-page ownership tracking in hardware via the AMD Reverse Map Table and analogous mechanisms in Intel TDX -- defines what a Generation-3 confidential VM is. Earlier generations encrypted memory but did not authenticate ownership. They were not isolation; they were just encryption.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;5. Two Distinct 2024 Designs&lt;/h2&gt;
&lt;p&gt;June 10, 2024, WWDC. Apple Security Engineering and Architecture -- the institutional author block of the post, along with User Privacy, Core OS, Services Engineering, and Machine Learning and AI -- publishes &quot;Private Cloud Compute: A new frontier for AI privacy in the cloud&quot; [@apple-pcc-blog]. The post enumerates five core requirements verbatim: &lt;em&gt;stateless computation on personal user data, enforceable guarantees, no privileged runtime access, non-targetability, and verifiable transparency&lt;/em&gt; [@apple-pcc-blog]. The fifth requirement is the one nothing in the field had ever shipped at this scale.&lt;/p&gt;
&lt;h3&gt;(a) Apple&apos;s Verifiable Transparency model&lt;/h3&gt;
&lt;p&gt;Every production PCC node software image hash is published to an append-only &lt;strong&gt;Transparency Log&lt;/strong&gt;. Apple&apos;s canonical terminology is &quot;Transparency Log&quot; and &quot;Release Transparency&quot; -- both are reflected in the URL path of the Apple documentation page that defines the model [@apple-pcc-release-transparency] [@apple-pcc-doc]. The user&apos;s device cryptographically refuses to forward a request to a node whose image hash is not in the log; in Apple&apos;s words, &quot;your device won&apos;t issue requests to PCC unless the OS image running in PCC is logged for inspection&quot; [@apple-pcc-blog].&lt;/p&gt;

An append-only public log of every production Private Cloud Compute node software image hash. The log is structured along the lines of RFC 6962 Certificate Transparency -- a Merkle tree of measurement entries that can be audited end-to-end without trusting any single party. Apple&apos;s canonical primary uses the terms &quot;Transparency Log&quot; and &quot;Release Transparency&quot;; &quot;Verifiable Image Catalog&quot; is not Apple terminology. The user&apos;s device refuses to forward a request to a PCC node whose image hash is not in the log, making the log a precondition for any data flow [@apple-pcc-blog] [@apple-pcc-release-transparency].
&lt;p&gt;On October 24, 2024 Apple released the supporting source code at &lt;code&gt;github.com/apple/security-pcc&lt;/code&gt;, shipped the &lt;strong&gt;Virtual Research Environment&lt;/strong&gt; (VRE) with macOS Sequoia 15.1 Developer Preview to let researchers run the PCC software stack (including a virtual Secure Enclave Processor) inside a Mac, and extended the Apple Security Bounty to PCC with rewards up to $1,000,000 [@apple-pcc-research] [@apple-pcc-github]. The README on the source release states the scope plainly: &quot;The publication of this code is intended for security research and verification purposes only&quot; [@apple-pcc-github]. The components in the release include &lt;code&gt;CloudAttestation&lt;/code&gt; (the attestation envelope library), &lt;code&gt;Thimble&lt;/code&gt; (the on-device PCC client), &lt;code&gt;splunkloggingd&lt;/code&gt; (the audited logging path), and &lt;code&gt;srd_tools&lt;/code&gt; (security-research tooling).&lt;/p&gt;

Personal user data sent to PCC isn&apos;t accessible to anyone other than the user -- not even to Apple. -- Apple Security Engineering and Architecture, June 10, 2024 [@apple-pcc-blog]
&lt;p&gt;The network ingress path to PCC reinforces the non-targetability requirement. Client requests are routed through an &lt;strong&gt;Oblivious HTTP&lt;/strong&gt; relay, operated by an independent third party rather than by Apple, that strips the client IP address before forwarding the request to the PCC cluster. OHTTP is standardised in IETF RFC 9458 by Martin Thomson and Christopher A. Wood, January 2024, with the explicit goal of letting &quot;a client make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client&quot; [@ietf-rfc9458].&lt;/p&gt;
&lt;p&gt;Apple&apos;s Target Diffusion design layers an &lt;a href=&quot;https://paragmali.com/blog/the-age-gate-that-doesnt-know-your-age-how-anonymous-credent/&quot; rel=&quot;noopener&quot;&gt;RSA Blind Signatures&lt;/a&gt; protocol -- RFC 9474 [@ietf-rfc9474] -- on top of the OHTTP path to issue single-use credentials, so even the relay cannot link two requests as having come from the same client.&lt;/p&gt;
&lt;p&gt;The OHTTP relay is third-party operated -- not Apple-operated. This is the architectural detail that makes non-targetability work. If Apple operated both the relay and the PCC cluster, Apple would observe the client IP at the relay and the request payload at the cluster and could correlate them. By splitting the two roles across two organizations whose business interests are not aligned, Apple can argue (and the architecture can enforce) that no single organization holds both halves of the correlation.&lt;/p&gt;

sequenceDiagram
    participant Dev as User device
    participant Log as Transparency Log
    participant Relay as OHTTP relay (third party)
    participant Node as PCC node (SEP-rooted)
    Dev-&amp;gt;&amp;gt;Log: fetch current log root
    Log--&amp;gt;&amp;gt;Dev: signed root, inclusion proofs
    Dev-&amp;gt;&amp;gt;Dev: verify target image hash is in log
    Dev-&amp;gt;&amp;gt;Relay: encrypted request (no client IP at origin)
    Relay-&amp;gt;&amp;gt;Node: forwarded request (relay IP only)
    Node-&amp;gt;&amp;gt;Node: enforce stateless processing
    Node--&amp;gt;&amp;gt;Relay: response, SEP-signed attestation envelope
    Relay--&amp;gt;&amp;gt;Dev: response delivered
    Dev-&amp;gt;&amp;gt;Dev: verify SEP attestation matches logged image
&lt;h3&gt;(b) Microsoft and NVIDIA&apos;s cross-vendor CPU+GPU TEE composition&lt;/h3&gt;
&lt;p&gt;The other 2024 breakthrough was a composition. The &lt;code&gt;Standard_NCC40ads_H100_v5&lt;/code&gt; SKU is a confidential VM whose Trusted Execution Environment &quot;spans confidential VM on the CPU and attached GPU, enabling secure offload of data, models, and computation to the GPU&quot; [@ms-sku-nccads]. The substrate is an AMD SEV-SNP confidential VM on a 4th-Gen AMD EPYC Genoa CPU. The accelerator is an NVIDIA H100 NVL GPU with 94 GB of high-bandwidth memory, operating in &lt;strong&gt;CC-On mode&lt;/strong&gt; [@ms-sku-nccads] [@nvidia-dev-blog].&lt;/p&gt;
&lt;p&gt;The H100 in CC-On mode performs secure measured boot of its firmware against an on-die hardware root of trust, then establishes mutually-authenticated SPDM (Security Protocol and Data Model) sessions with the CPU TEE driver, and routes all data movement between CPU encrypted memory and GPU encrypted HBM through an encrypted bounce buffer. The NVIDIA Developer Blog states it verbatim: &quot;a chain of trust is established through ... a security protocols and data models (SPDM) session to securely connect to the driver in a CPU TEE&quot; [@nvidia-dev-blog]. The GPU&apos;s attestation report is signed against NVIDIA&apos;s on-die root of trust and consumable through NVIDIA&apos;s NRAS (NVIDIA Remote Attestation Service) and the open-source nvtrust SDK [@nvidia-nvtrust].&lt;/p&gt;

An IETF protocol for forwarding HTTP requests through an intermediary in a way that prevents either the intermediary or the target from linking requests to a single client. Per RFC 9458 verbatim: &quot;Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages&quot; [@ietf-rfc9458]. Apple Private Cloud Compute uses an OHTTP relay operated by an independent third party to enforce non-targetability.
&lt;p&gt;The CPU-to-GPU interconnect throughput in H100 CC-On is bounded by CPU encryption performance, not by raw PCIe or NVLink bandwidth. The NVIDIA Developer Blog measures it verbatim: &quot;It is limited by CPU encryption performance, which we currently measure at roughly 4 GBytes/sec&quot; [@nvidia-dev-blog]. Practitioners sizing throughput around H100 NVL&apos;s 94 GB HBM3 capacity should reason about the ~4 GB/s encryption ceiling, not the headline NVLink rate. The ceiling is what makes large-model long-sequence workloads amortise the overhead well, and what makes small-model short-prompt workloads pay a higher relative cost.&lt;/p&gt;

A DMTF standard (DSP0274) that defines a mutually-authenticated message-exchange protocol between two PCIe endpoints, used in the NVIDIA H100 CC-On architecture to establish a secure session between the host CPU TEE driver and the GPU. The session protects all subsequent control-plane and data-plane traffic and lets each endpoint verify the other&apos;s identity and measurements before any sensitive data crosses the PCIe link [@dmtf-spdm] [@nvidia-dev-blog] [@nvidia-nvtrust].
&lt;p&gt;The SPDM handshake itself is specified by &lt;strong&gt;DMTF DSP0274 v1.1.0&lt;/strong&gt; [@dmtf-spdm] and walks a precise message sequence the relying-party implementer needs to know exists: &lt;code&gt;GET_VERSION&lt;/code&gt; (§10.2) negotiates the protocol version; &lt;code&gt;GET_CAPABILITIES&lt;/code&gt; (§10.3) negotiates supported capabilities; &lt;code&gt;NEGOTIATE_ALGORITHMS&lt;/code&gt; (§10.4) negotiates the cryptographic algorithm family; &lt;code&gt;GET_DIGESTS&lt;/code&gt; (§10.7) fetches device-certificate digests; &lt;code&gt;GET_CERTIFICATE&lt;/code&gt; (§10.8) retrieves the per-die device-identity certificate; &lt;code&gt;CHALLENGE_AUTH&lt;/code&gt; (§10.9) verifies the device&apos;s signature over a host-supplied nonce; &lt;code&gt;GET_MEASUREMENTS&lt;/code&gt; (§10.11) retrieves the device&apos;s runtime measurement vector; and &lt;code&gt;KEY_EXCHANGE&lt;/code&gt; (§10.16) establishes the session key over ECDHE on P-384 [@dmtf-spdm]. The first three messages are an ordered prerequisite: per DSP0274 §10.6, no other request is valid until the three-step negotiation completes [@dmtf-spdm].&lt;/p&gt;
&lt;p&gt;The negotiated crypto family for the H100 in CC-On mode is SHA-384 / ECDSA-P384 / AES-256-GCM. The device-identity certificate is signed with a per-die ECC-384 hardware-bound key burned into H100 fuses, and revocation runs through the NVIDIA OCSP endpoint -- the GPU-side analogue of the AMD KDS CRL path described later [@nvidia-dev-blog].&lt;/p&gt;

sequenceDiagram
    participant Req as Host CVM (Requester)
    participant Resp as NVIDIA H100 (Responder)
    Req-&amp;gt;&amp;gt;Resp: GET_VERSION (DSP0274 10.2)
    Resp--&amp;gt;&amp;gt;Req: VERSION
    Req-&amp;gt;&amp;gt;Resp: GET_CAPABILITIES (10.3)
    Resp--&amp;gt;&amp;gt;Req: CAPABILITIES
    Req-&amp;gt;&amp;gt;Resp: NEGOTIATE_ALGORITHMS (10.4)
    Resp--&amp;gt;&amp;gt;Req: ALGORITHMS (SHA-384, ECDSA-P384, AES-256-GCM)
    Req-&amp;gt;&amp;gt;Resp: GET_DIGESTS (10.7)
    Resp--&amp;gt;&amp;gt;Req: DIGESTS
    Req-&amp;gt;&amp;gt;Resp: GET_CERTIFICATE (10.8)
    Resp--&amp;gt;&amp;gt;Req: CERTIFICATE (per-die ECC-384)
    Req-&amp;gt;&amp;gt;Resp: CHALLENGE (10.9)
    Resp--&amp;gt;&amp;gt;Req: CHALLENGE_AUTH (signature over nonce)
    Req-&amp;gt;&amp;gt;Resp: GET_MEASUREMENTS (10.11)
    Resp--&amp;gt;&amp;gt;Req: MEASUREMENTS
    Req-&amp;gt;&amp;gt;Resp: KEY_EXCHANGE (10.16, ECDHE P-384)
    Resp--&amp;gt;&amp;gt;Req: KEY_EXCHANGE_RSP
&lt;p&gt;The NVIDIA-side verifier reference moved generations recently: the Python SDK in &lt;code&gt;NVIDIA/nvtrust&lt;/code&gt; [@nvidia-nvtrust] is now superseded by &lt;code&gt;nv-attestation-sdk-cpp&lt;/code&gt; (also called &quot;NV Attest&quot;), which NVIDIA describes as &quot;a new and improved version of the NVIDIA nvtrust attestation SDK, redesigned to address key limitations&quot; [@nvidia-attest-sdk-cpp]. The C++ SDK is the current canonical reference; the older Python SDK still works but is deprecated. The NVIDIA CC documentation index links both [@nvidia-cc-docs].&lt;/p&gt;
&lt;p&gt;The composed attestation -- the AMD SEV-SNP attestation report from the host CVM, joined with the NVIDIA-signed GPU attestation report from the H100 -- is consumable by Microsoft Azure Attestation as a single policy decision [@ms-maa-overview]. Secure Key Release from Azure Key Vault Premium or Azure Managed HSM then gates customer key material on that composite attestation, so the model weights or the user&apos;s prompt encryption key are released to the workload only when the entire chain (AMD silicon, AMD firmware, Microsoft hypervisor, customer guest OS, NVIDIA GPU firmware, NVIDIA hardware root of trust) verifies [@ms-maa-overview] [@ms-cc-overview].&lt;/p&gt;

flowchart TD
    A[Customer workload] --&amp;gt; B[Host CVM&lt;br /&gt;AMD SEV-SNP + RMP]
    B --&amp;gt;|SPDM session, mutual auth| C[NVIDIA H100 NVL&lt;br /&gt;CC-On mode]
    C --&amp;gt;|Signed GPU attestation| D[NVIDIA NRAS]
    B --&amp;gt;|SEV-SNP attestation report| E[Microsoft Azure Attestation]
    D --&amp;gt; E
    E --&amp;gt;|MAA JWT, x-ms claims| F[Azure Key Vault Premium&lt;br /&gt;or Managed HSM]
    F --&amp;gt;|SKR release policy check| G[Customer key released&lt;br /&gt;to workload]
    style C fill:#e6f3ff,stroke:#36c,color:#1a365d
    style E fill:#fff3e6,stroke:#c63,color:#7b341e

The NVIDIA H100 Tensor Core GPU is the first ever GPU to introduce support for confidential computing. -- NVIDIA Developer Blog [@nvidia-dev-blog]
&lt;p&gt;Two breakthroughs. Two cryptographic envelopes. Both prove something about a workload. Both are signed by hardware. Both will satisfy a JWT verifier. And underneath that surface similarity sits a genuinely different epistemological model.&lt;/p&gt;
&lt;p&gt;Apple PCC commits, &lt;em&gt;publicly and in advance&lt;/em&gt;, to the exact image hash that will be served, and refuses to serve any other. Azure CC-AI does not publicly commit in advance to the bits the verifier runs against -- it produces a JWT that says &quot;I verified what I was given.&quot; Both are cryptographic; one is structurally auditable by an independent researcher, the other is a single vendor&apos;s word.&lt;/p&gt;
&lt;p&gt;This is the aha moment to mark with both hands. &quot;Verify me&quot; is architecturally different from &quot;trust me,&quot; even when both produce a JWT.&lt;/p&gt;
&lt;p&gt;To turn that distinction into something a reader can carry into procurement, we have to actually walk the six axes. On which do these architectures genuinely differ, and on which do they differ only in implementation strategy?&lt;/p&gt;
&lt;h2&gt;6. Six Axes, One Difference In Kind&lt;/h2&gt;
&lt;p&gt;Of the six architectural axes, five are differences in &lt;em&gt;degree&lt;/em&gt; -- both PCC and Azure CC-AI do similar things differently. Exactly one is a difference in &lt;em&gt;kind&lt;/em&gt;: verifiable transparency of the production fleet. Apple ships a public append-only log of every production node image hash; no other major-cloud confidential-AI substrate ships an architectural equivalent as of mid-2026. The rest of this section walks each axis with the trade-off named, the threat model spelled out, and the primary cited.&lt;/p&gt;
&lt;h3&gt;Axis 1: Silicon control&lt;/h3&gt;
&lt;p&gt;PCC is a single-vendor stack end to end. Apple controls the SoC, the SEP, the firmware, the OS, the Swift-based inference runtime, and the bug-bounty program [@apple-pcc-blog]. Apple has not publicly named the specific chip family used in PCC nodes; firmware identifiers and independent analyses point to M2-Ultra-class silicon at launch (firmware identifier &lt;code&gt;ComputeModule14,1&lt;/code&gt; [@appledb-cm14]) with a transition to M5-class silicon during 2026 (identifier &lt;code&gt;J226C&lt;/code&gt; [@nine-to-five-mac-m5] [@winbuzzer-m5]), and the Apple Machine Learning Research introduction confirms only that the cloud-side model runs on &quot;Apple silicon servers&quot; without naming a generation [@apple-foundation-models].&lt;/p&gt;
&lt;p&gt;Azure CC-AI is a multi-vendor commodity composition by design. AMD provides the EPYC CPU and the AMD Platform Security Processor; Intel provides the Xeon CPU and the TDX module on the alternate Intel SKU family; NVIDIA provides the H100 GPU and the on-die hardware root of trust; Microsoft provides the hypervisor and MAA; the customer chooses the guest OS [@ms-cc-overview] [@ms-sku-nccads] [@nvidia-dev-blog].&lt;/p&gt;
&lt;p&gt;The trade-off is direct. Apple&apos;s single-vendor stack is operationally simpler and the trust posture is internally consistent, but the trust root collapses to Apple. Azure&apos;s multi-vendor stack spreads trust across four independent signers, but no one of them sees the entire system, and the composition itself is a source of complexity.&lt;/p&gt;
&lt;h3&gt;Axis 2: Hardware root of trust&lt;/h3&gt;
&lt;p&gt;PCC anchors per-node trust in the Secure Enclave Processor on each Apple-Silicon server. The SEP is bound to an Apple-controlled certificate authority; the SEP signs the node&apos;s attestation envelope; the Apple-controlled CA&apos;s chain is the root the user&apos;s device trusts [@apple-pcc-blog] [@apple-sep-guide].&lt;/p&gt;
&lt;p&gt;Azure&apos;s hardware root of trust is structurally distributed. A vTPM exposed to the CVM provides one anchor; the AMD Platform Security Processor signs SEV-SNP attestation reports with a per-chip &lt;strong&gt;Versioned Chip Endorsement Key (VCEK)&lt;/strong&gt; [@amd-kds] [@amd-sev-snp-wp]; the NVIDIA on-die RoT signs the GPU attestation; MAA operates as the verifier-of-record that joins these into a single decision artefact [@ms-maa-overview].&lt;/p&gt;

A per-die ECDSA signing key derived inside the AMD Platform Security Processor (PSP) from a chip-specific secret fused into the silicon at manufacture. The VCEK signs SEV-SNP attestation reports; the certificate chain runs `VCEK -&amp;gt; AMD SEV signing key (ASK) -&amp;gt; AMD Root Key (ARK)`, with the ARK pinned out-of-band against AMD&apos;s published fingerprint and the per-chip VCEK fetched from the AMD Key Distribution Service (KDS) at `kdsintf.amd.com` keyed on the chip ID plus the four TCB-version-vector `*Spl` parameters (`blSpl`, `teeSpl`, `snpSpl`, `ucodeSpl`) parsed out of the 1184-byte attestation report [@amd-kds] [@amd-sev-snp-wp].
&lt;p&gt;The chain itself is short and walkable. The ARK and ASK PEMs are served as a single bundle from the KDS endpoint &lt;code&gt;/vcek/v1/&amp;lt;family&amp;gt;/cert_chain&lt;/code&gt; on host &lt;code&gt;kdsintf.amd.com&lt;/code&gt; (returning, on the Milan family, an &lt;code&gt;ARK-Milan&lt;/code&gt; and &lt;code&gt;SEV-Milan&lt;/code&gt; certificate pair issued from AMD Engineering&apos;s Santa Clara CA with 25-year validity dated 2020-10-22 [@amd-kds]). The per-die VCEK is served from &lt;code&gt;/vcek/v1/&amp;lt;family&amp;gt;/&amp;lt;chip_id&amp;gt;?blSpl=..&amp;amp;teeSpl=..&amp;amp;snpSpl=..&amp;amp;ucodeSpl=..&lt;/code&gt; on the same KDS host, where the chip ID and the four &lt;code&gt;*Spl&lt;/code&gt; TCB-version-vector query parameters are parsed out of the SEV-SNP attestation report itself.&lt;/p&gt;
&lt;p&gt;A relying party that wants to verify a SEV-SNP attestation &lt;em&gt;without&lt;/em&gt; trusting MAA fetches the chain from KDS, validates the chain against an out-of-band-pinned ARK fingerprint, and checks that the chip ID and TCB version in the report match the chain. The canonical open-source CLI for this is &lt;code&gt;virtee/snpguest&lt;/code&gt; [@virtee-snpguest], the active successor to the deprecated &lt;code&gt;AMDESE/sev-tool&lt;/code&gt; [@amd-sev-tool].&lt;/p&gt;
&lt;h3&gt;Axis 3: Attestation surface&lt;/h3&gt;
&lt;p&gt;PCC produces a per-device attestation envelope cross-checked against the public Transparency Log. The user&apos;s device does not just verify the SEP signature; it verifies that the image hash named in the envelope is included in the public log. If the hash is not in the log, the device refuses to forward the request [@apple-pcc-blog] [@apple-pcc-release-transparency].&lt;/p&gt;
&lt;p&gt;Azure produces an MAA-issued JWT. The customer&apos;s relying party parses the JWT and matches claims. The MAA overview documents the SEV-SNP-specific claims and the platform-vs-guest distinction explicitly [@ms-maa-overview]. For confidential GPU workloads, NVIDIA&apos;s NRAS claims about the H100 are joined into the same JWT.&lt;/p&gt;
&lt;p&gt;The procurement-grade payoff: a customer can verify SEV-SNP attestation &lt;em&gt;without&lt;/em&gt; trusting MAA by running the &lt;code&gt;snpguest&lt;/code&gt; workflow directly against the AMD KDS [@virtee-snpguest] [@amd-kds]. Or they can trust MAA&apos;s JWT and validate it against the MAA JWKS, trading one trust anchor (AMD&apos;s ARK fingerprint) for another (Microsoft&apos;s JWKS). Both paths are real; most production customers deploy the MAA path because it is operationally simpler, but the &lt;code&gt;snpguest&lt;/code&gt;-based path is what unlocks &quot;we do not have to trust MAA&quot; for a procurement audit.&lt;/p&gt;
&lt;p&gt;{`
// Demonstrates the structure of an MAA JWT for an AMD SEV-SNP confidential VM.
// In production the JWT would be signed by an MAA tenant key and verified
// against the tenant&apos;s JWKS endpoint. This example just decodes a sample payload.&lt;/p&gt;
&lt;p&gt;const sampleMaaJwt = [
  // header (base64url)
  &apos;eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9&apos;,
  // payload (base64url) -- sample x-ms claims
  &apos;eyJ4LW1zLWlzb2xhdGlvbi10ZWUiOiJzZXZzbnB2bSIsIngtbXMtY29tcGxpYW5jZS1zdGF0dXMiOiJhenVyZS1jb21wbGlhbnQtY3ZtIiwieC1tcy1zZXZzbnB2bS1ndWVzdHN2biI6OCwieC1tcy1zZXZzbnB2bS1sYXVuY2htZWFzdXJlbWVudCI6InhEa0...&quot;,&quot;x-ms-runtime&quot;:&quot;e30=&quot;}&apos;,
  // signature placeholder
  &apos;signature&apos;
].join(&apos;.&apos;);&lt;/p&gt;
&lt;p&gt;function decodeJwtPayload(jwt) {
  const [, payload] = jwt.split(&apos;.&apos;);
  // base64url -&amp;gt; base64
  const b64 = payload.replace(/-/g, &apos;+&apos;).replace(/_/g, &apos;/&apos;);
  return JSON.parse(atob(b64));
}&lt;/p&gt;
&lt;p&gt;const payload = decodeJwtPayload(sampleMaaJwt);
console.log(&apos;TEE family:        &apos;, payload[&apos;x-ms-isolation-tee&apos;]);
console.log(&apos;Compliance status: &apos;, payload[&apos;x-ms-compliance-status&apos;]);
console.log(&apos;Guest SVN:         &apos;, payload[&apos;x-ms-sevsnpvm-guestsvn&apos;]);
console.log(&apos;Launch measurement:&apos;, payload[&apos;x-ms-sevsnpvm-launchmeasurement&apos;]);&lt;/p&gt;
&lt;p&gt;// A Secure Key Release policy would gate key release on claims like:
//   &quot;x-ms-isolation-tee&quot; == &quot;sevsnpvm&quot;
//   &quot;x-ms-compliance-status&quot; == &quot;azure-compliant-cvm&quot;
//   &quot;x-ms-sevsnpvm-guestsvn&quot; &amp;gt;= 8
// matched against the MAA-issued JWT.
`}&lt;/p&gt;

The MAA path hides KDS fetching, certificate-chain validation, and TCB-rollback policy enforcement from the relying party by emitting a JWT whose `x-ms-attestation-type` claim is `sevsnpvm` and `x-ms-compliance-status` claim is `azure-compliant-cvm`. The relying party then validates against the MAA JWKS instead of pinning the AMD ARK fingerprint. Operationally simpler, but it trades trust in AMD for trust in MAA. A customer that wants a procurement-defensible &quot;we do not have to trust MAA&quot; posture runs the six-step `snpguest` Regular Attestation Workflow directly against the AMD KDS [@virtee-snpguest]. The `snpguest verify certs` step validates the VCEK -&amp;gt; ASK -&amp;gt; ARK chain but cannot detect a substituted ARK; the ARK fingerprint must be pinned out-of-band against AMD&apos;s published value before the chain is trusted. The other architectural delta: `snpguest verify attestation` checks the TCB version vector in the attestation report against the version baked into the VCEK certificate, surfacing TCB rollback. Once both checks pass, the relying party has cryptographic evidence the workload is running on a specific physical AMD CPU at a specific firmware level -- without ever talking to Microsoft.
&lt;p&gt;{`# The six-step Regular Attestation Workflow from the virtee/snpguest README.&lt;/p&gt;
Each step maps to a wire-level KDS GET except step 1 (which talks to the SNP
guest firmware device locally). Run this from inside an SEV-SNP guest VM on
Azure (e.g. on a DCasv5 SKU) -- not from the host.
Step 1: ask the guest firmware for a fresh attestation report bound to a
64-byte nonce. The report includes chip_id and the four *Spl TCB vector
fields the next steps will use to fetch the per-die VCEK.
&lt;p&gt;snpguest report attestation-report.bin request-data.bin --random&lt;/p&gt;
Step 2: fetch the ARK + ASK PEM bundle for this CPU family from AMD KDS.
Endpoint: GET /vcek/v1//cert_chain on host kdsintf.amd.com
&lt;p&gt;snpguest fetch ca pem milan ./certs&lt;/p&gt;
Step 3: fetch the per-die VCEK certificate from AMD KDS, keyed on chip_id
and the four *Spl values parsed out of the attestation report.
Endpoint: GET /vcek/v1//?blSpl=..&amp;amp;... on the KDS host
&lt;p&gt;snpguest fetch vcek pem milan ./certs attestation-report.bin&lt;/p&gt;
Step 4: fetch the current AMD CRL so revoked VCEKs can be rejected.
Endpoint: GET /vcek/v1//crl on the KDS host
&lt;p&gt;snpguest fetch crl pem milan ./certs&lt;/p&gt;
Step 5: validate the chain locally (VCEK -&amp;gt; ASK -&amp;gt; ARK).
IMPORTANT: snpguest cannot detect a substituted ARK. Before running this
command, pin the ARK fingerprint out-of-band against AMD&apos;s published value.
&lt;p&gt;snpguest verify certs ./certs&lt;/p&gt;
Step 6: verify the attestation signature with the validated VCEK and check
the TCB version vector in the report against the VCEK certificate.
This is the step that surfaces TCB rollback.
&lt;p&gt;snpguest verify attestation ./certs attestation-report.bin
`}&lt;/p&gt;
&lt;h3&gt;Axis 4: Key release and state model&lt;/h3&gt;
&lt;p&gt;This is where the architectural philosophies diverge most visibly. PCC nodes are &lt;em&gt;stateless by design&lt;/em&gt;. There is no customer key material on the node, no key release ceremony, no HSM gating. Apple&apos;s first core requirement names this verbatim: &quot;stateless computation on personal user data&quot; [@apple-pcc-blog]. State that needs to persist across requests does so on the user&apos;s device, not on the PCC fleet.&lt;/p&gt;
&lt;p&gt;Azure treats stateful, customer-managed keys as a first-class architectural primitive. Secure Key Release from Azure Key Vault Premium or Azure Managed HSM gates key release on an MAA-issued JWT whose claims must match the release policy attached to the encrypted key [@ms-cc-overview]. The Microsoft reference confidential-LLM tutorial walks the SKR-from-AKV-Premium flow end to end on a &lt;code&gt;Standard_NCC40ads_H100_v5&lt;/code&gt; SKU [@ms-workshop-llm]. Customer-managed keys, customer-controlled HSMs, and customer audit logs are how regulated buyers reason about confidential workloads, and Azure&apos;s design accommodates that workflow directly.&lt;/p&gt;

A minimal SKR release policy is a JSON document referencing MAA-issued claims. A simplified example for an SEV-SNP CVM target:&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;version&quot;: &quot;1.0.0&quot;,
  &quot;anyOf&quot;: [
    {
      &quot;authority&quot;: &quot;&amp;lt;your MAA tenant URL&amp;gt;&quot;,
      &quot;allOf&quot;: [
        { &quot;claim&quot;: &quot;x-ms-isolation-tee&quot;, &quot;equals&quot;: &quot;sevsnpvm&quot; },
        { &quot;claim&quot;: &quot;x-ms-compliance-status&quot;, &quot;equals&quot;: &quot;azure-compliant-cvm&quot; },
        { &quot;claim&quot;: &quot;x-ms-sevsnpvm-guestsvn&quot;, &quot;greater-than-or-equals&quot;: 8 }
      ]
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At unwrap time the HSM evaluates the policy against the JWT the workload presents. Only if every condition is met is the key material released. The policy is bound to the key at creation time and cannot be modified after the fact without rewrapping under a fresh policy.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Axis 5: GPU TEE&lt;/h3&gt;
&lt;p&gt;PCC uses Apple GPUs that are integrated on the same SoC as the CPU and SEP. By construction they sit inside the same SEP-rooted attestation envelope -- there is no separate cross-vendor PCIe attestation handshake because there is no PCIe handshake to begin with [@apple-pcc-blog].&lt;/p&gt;
&lt;p&gt;Azure uses NVIDIA H100 NVL GPUs in CC-On mode, with the architecture described above: on-die RoT, SPDM session, encrypted bounce buffer, NRAS-signed attestation report joined to the SEV-SNP CVM attestation through MAA [@ms-sku-nccads] [@nvidia-dev-blog]. The NVIDIA H100 exposes &lt;em&gt;three&lt;/em&gt; confidential-computing modes: &lt;strong&gt;CC-Off&lt;/strong&gt; (the normal non-confidential default; no isolation, no encryption); &lt;strong&gt;CC-On&lt;/strong&gt; (full confidential mode, the only mode that should be used in production); and &lt;strong&gt;CC-DevTools&lt;/strong&gt; (per NVIDIA&apos;s developer blog, &quot;a partial CC mode that will match the workflows of CC-On mode, but with security protections disabled and performance counters enabled&quot; [@nvidia-dev-blog]) [@nvidia-cc-docs]. The three modes share a bring-up surface, but only CC-On enforces the full isolation contract.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; NVIDIA&apos;s documentation is explicit that CC-DevTools weakens isolation specifically so that profiling and debugging tools that need performance-counter access can work [@nvidia-cc-docs]. Production confidential-AI workloads must run in CC-On. Verification step for relying parties: the GPU attestation report includes a mode field; the MAA JWT and the NRAS attestation that compose into it both surface this. A release policy that does not check the GPU mode field can release customer key material to a workload running on a partially-protected GPU. Treat CC-DevTools as a bring-up state, not a deployment state.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;AMD&apos;s MI300X GPU ships as compute across multiple clouds (Oracle OCI, DigitalOcean, Vultr, Crusoe, TensorWave, Hot Aisle, Seeweb [@mi300x-cloud-list]) but has &lt;em&gt;no&lt;/em&gt; production-equivalent confidential-GPU mode at GA on a major commercial cloud as of mid-2026. PCIe TDISP and SEV-TIO Linux support is landing in 2025-2026 kernels, but the GA gap is the load-bearing fact for any procurement that prefers AMD over NVIDIA at the accelerator tier. Azure&apos;s confidential GPU offering is H100-only at GA.&lt;/p&gt;
&lt;p&gt;A subtle and procurement-critical detail: Microsoft Azure Attestation does not directly attest the GPU. The MAA overview documents the SEV-SNP path and the platform-vs-guest distinction, but the GPU attestation is produced and signed by NVIDIA NRAS, not MAA [@ms-maa-overview] [@nvidia-dev-blog]. The composed MAA JWT &lt;em&gt;carries&lt;/em&gt; the NVIDIA-signed GPU attestation as a nested claim. A customer&apos;s relying party that wants to verify the GPU attestation against NVIDIA&apos;s hardware root of trust must validate the NRAS signature, not the MAA signature, on that nested portion.&lt;/p&gt;
&lt;p&gt;This is the &lt;strong&gt;double attestation&lt;/strong&gt; pattern: the SEV-SNP CVM attestation is signed by AMD VCEK; the H100 GPU attestation is signed by NVIDIA&apos;s on-die root of trust; MAA composes them into one JWT, but the two signatures must be verified against two different roots. The Azure &lt;code&gt;confidential-computing-cvm-guest-attestation&lt;/code&gt; and &lt;code&gt;az-cgpu-onboarding&lt;/code&gt; repositories provide the reference patterns for both halves of this verification [@az-cgpu-onboarding].&lt;/p&gt;
&lt;p&gt;The double attestation is one place the &quot;MAA is the verifier of record&quot; framing oversimplifies. MAA is the verifier of record for the &lt;em&gt;composition&lt;/em&gt; -- but the underlying signatures still come from AMD and NVIDIA. A relying party that wants to refuse a workload running on a TCB-rolled-back AMD CPU plus a CC-DevTools-mode H100 needs to check the AMD TCB version vector against a TCB-version policy (snpguest can do this) and the NVIDIA GPU mode field against a &quot;CC-On only&quot; policy. MAA can be configured to enforce both of these in the release policy, but the customer has to actively write the policy; the defaults will not catch a CC-DevTools-mode H100.&lt;/p&gt;
&lt;p&gt;Performance overhead is small. Zhu, Yin, Deng, Almeida, and Zhou (Phala / Fudan / io.net), in arXiv 2409.03992 (v4, November 5, 2024), benchmarked H100 CC-On on vLLM v0.5.4 with the ShareGPT dataset on Llama-3.1-8B-Instruct and report that &quot;for the majority of typical LLM queries, the overhead remains below 7%, with larger models and longer sequences experiencing nearly zero overhead&quot; [@phala-benchmark]. The dominant overhead source is the PCIe encrypted bounce buffer, capped at the ~4 GB/s CPU-encryption ceiling discussed in §5(b); large models amortise that cost across many tokens.&lt;/p&gt;
&lt;p&gt;The &quot;below 7%&quot; overhead number is benchmarked on a specific stack (vLLM v0.5.4, ShareGPT dataset, Llama-3.1-8B-Instruct) and depends on sequence length and batch size in non-trivial ways [@phala-benchmark]. Smaller models with short prompts and high batch turnover spend a larger fraction of wall-clock time on the bounce-buffer crossings; larger models with long context windows amortise that cost. Quoting &quot;below 7%&quot; without the workload qualification is misleading.&lt;/p&gt;
&lt;h3&gt;Axis 6: Network anonymization&lt;/h3&gt;
&lt;p&gt;This is the axis where the two architectures differ in kind.&lt;/p&gt;
&lt;p&gt;PCC routes client requests through a third-party-operated &lt;strong&gt;Oblivious HTTP&lt;/strong&gt; relay -- RFC 9458 [@ietf-rfc9458] -- that strips the client IP address before the request reaches the PCC cluster. This implements one of Apple&apos;s five named core requirements, non-targetability: an attacker who compromises the PCC fleet cannot single out a specific user&apos;s traffic because the fleet does not know which IP issued which request [@apple-pcc-blog]. Apple&apos;s Target Diffusion design layers RSA Blind Signatures (RFC 9474) [@ietf-rfc9474] on top to issue single-use credentials, so even the relay cannot link two requests from the same client.&lt;/p&gt;
&lt;p&gt;Azure has no equivalent operator-level anonymization layer. This is intentional in Azure&apos;s design: an enterprise customer who knows that traffic &lt;em&gt;originates from their own employees&lt;/em&gt; generally does not want to anonymize that traffic from their own audit logs. But it is an axis the two architectures differ on &lt;em&gt;in kind&lt;/em&gt; rather than in degree, and worth naming as such -- a procurement reader who needs operator-level anonymization will not get it from Azure CC-AI without building it themselves.&lt;/p&gt;
&lt;h3&gt;The six axes, side by side&lt;/h3&gt;
&lt;p&gt;The following table consolidates the comparison.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Axis&lt;/th&gt;
&lt;th&gt;Apple Private Cloud Compute&lt;/th&gt;
&lt;th&gt;Azure Confidential AI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Silicon control&lt;/td&gt;
&lt;td&gt;Single-vendor end-to-end (Apple SoC, SEP, firmware, OS, runtime) [@apple-pcc-blog]&lt;/td&gt;
&lt;td&gt;Multi-vendor commodity composition (AMD EPYC, Intel Xeon, NVIDIA H100, Microsoft hypervisor) [@ms-cc-overview] [@ms-sku-nccads]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware root of trust&lt;/td&gt;
&lt;td&gt;Per-node SEP bound to Apple-controlled CA [@apple-pcc-blog]&lt;/td&gt;
&lt;td&gt;vTPM + AMD PSP / VCEK + NVIDIA on-die RoT + MAA as verifier-of-record [@ms-maa-overview] [@amd-kds]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attestation surface&lt;/td&gt;
&lt;td&gt;Per-device envelope cross-checked against public Transparency Log [@apple-pcc-release-transparency]&lt;/td&gt;
&lt;td&gt;MAA-issued JWT with documented &lt;code&gt;x-ms-*&lt;/code&gt; claims [@ms-maa-overview]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Key release / state&lt;/td&gt;
&lt;td&gt;Stateless nodes; no customer keys; no release ceremony [@apple-pcc-blog]&lt;/td&gt;
&lt;td&gt;SKR from AKV Premium / Managed HSM gated on MAA JWT [@ms-cc-overview]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU TEE&lt;/td&gt;
&lt;td&gt;Integrated Apple GPU in same SEP-rooted envelope [@apple-pcc-blog]&lt;/td&gt;
&lt;td&gt;NVIDIA H100 CC-On + SPDM + NRAS joined to MAA [@nvidia-dev-blog] [@ms-sku-nccads]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network anonymization&lt;/td&gt;
&lt;td&gt;Third-party OHTTP relay strips client IP [@ietf-rfc9458] [@apple-pcc-blog]&lt;/td&gt;
&lt;td&gt;No equivalent operator-level anonymization layer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

flowchart LR
    subgraph PCC[&quot;Apple PCC stack&quot;]
        P1[Apple SoC + integrated GPU]
        P2[SEP per node&lt;br /&gt;Apple-controlled CA]
        P3[Transparency Log&lt;br /&gt;append-only public]
        P4[Stateless node&lt;br /&gt;no customer keys]
        P5[OHTTP relay&lt;br /&gt;third party]
    end
    subgraph AZ[&quot;Azure CC-AI stack&quot;]
        A1[AMD EPYC + NVIDIA H100&lt;br /&gt;multi-vendor]
        A2[AMD PSP + vTPM&lt;br /&gt;NVIDIA on-die RoT]
        A3[MAA JWT&lt;br /&gt;x-ms claims]
        A4[SKR from AKV Premium&lt;br /&gt;customer-managed keys]
        A5[no operator-level&lt;br /&gt;anonymization layer]
    end

An architectural property whereby every production software image actually serving customer requests is committed in advance to a public, append-only log accessible to any third party. The property requires both that the cryptographic log be publicly auditable (a Certificate-Transparency-style Merkle tree, for example) and that the system refuse to serve requests against images not present in the log. Apple Private Cloud Compute ships verifiable transparency as a first-class architectural primitive; no other major-cloud confidential-AI substrate ships an architectural equivalent as of mid-2026 [@apple-pcc-blog] [@apple-pcc-release-transparency].
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; The two architectures differ in &lt;em&gt;degree&lt;/em&gt; on five axes: silicon control, hardware root of trust, attestation surface, key release, and GPU TEE. On the sixth -- verifiable transparency of the production fleet -- they differ in &lt;em&gt;kind&lt;/em&gt;. Apple&apos;s Transparency Log is not a slightly-better MAA. It is an architectural primitive Microsoft does not ship.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; A procurement assumption that PCC and Azure differ only in vendor preference misses the real architectural point. PCC&apos;s trust root collapses to Apple alone. Azure&apos;s trust root is spread across AMD, Intel, NVIDIA, and Microsoft as four independent signers. A single-vendor compromise on Azure (a leaked AMD VCEK signing key, an NVIDIA firmware bug, an MAA outage) does not collapse the whole stack the way an Apple-CA compromise would collapse PCC. This is a different security posture, not just a different brand. Whether trust diffusion is more valuable than verifiable transparency depends on the regulatory and threat-model context.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Six axes, two architectures, one axis where the divergence is in kind. But Apple PCC and Microsoft Azure are not the only games in town. Where do AWS Nitro Enclaves and Google Cloud Confidential Space fit on the same six axes?&lt;/p&gt;
&lt;h2&gt;7. Beyond the Two Headliners&lt;/h2&gt;
&lt;p&gt;If verifiable transparency is the architectural difference, the obvious question is why AWS and Google have not just shipped a Transparency Log too. The short answer is that the three other production substrates each chose a different epistemic model, and shifting any one of them to PCC&apos;s model would require rebuilding the trust root from scratch.&lt;/p&gt;
&lt;h3&gt;AWS Nitro Enclaves&lt;/h3&gt;
&lt;p&gt;AWS Nitro Enclaves does not anchor in a CPU-vendor TEE at all. Trust is rooted in AWS-as-signer through the Nitro Hypervisor and the Nitro Security Chip [@aws-nitro-hw]. The Nitro System &quot;provides enhanced security that continuously monitors, protects, and verifies the instance hardware and firmware&quot; and offloads virtualization resources to dedicated hardware [@aws-nitro-hw]. A Nitro Enclave is created from a parent EC2 instance and is &quot;isolated from the parent EC2 instance through the Nitro Hypervisor&quot;; per the AWS documentation verbatim, &quot;the Nitro Hypervisor ensures that the parent instance has no access to the isolated vCPUs and memory of the enclave&quot; [@aws-nitro-enclave].&lt;/p&gt;
&lt;p&gt;The trust model is different in kind from SGX, SEV, or TDX. Attestation is rooted in AWS&apos;s signing key, not in a CPU-vendor key. The Nitro architecture is processor-agnostic over Intel, AMD, and AWS Graviton, which is a different posture again -- the enclave&apos;s confidentiality does not depend on a specific silicon vendor&apos;s TEE primitive. There is also no published GPU confidential-computing extension for Nitro Enclaves as of mid-2026.&lt;/p&gt;
&lt;h3&gt;Google Cloud Confidential Space&lt;/h3&gt;
&lt;p&gt;Google Cloud Confidential Space combines Intel TDX (and AMD SEV / SEV-SNP) with Google Cloud Attestation and Workload Identity Federation. Per the GCA documentation: &quot;Google Cloud Attestation provides a unified solution for remotely verifying the trustworthiness of all Google confidential environments ... The service supports attestation of confidential environments backed by a Virtual Trusted Platform Module (vTPM) for SEV and the TDX Module for Intel TDX&quot; [@gcp-gca]. The overview page describes the multi-party-collaboration use case for PII, PHI, IP, and LLM-interaction data [@gcp-cs-overview].&lt;/p&gt;
&lt;p&gt;Google added an interesting wrinkle in 2025: an Intel Trust Authority integration that lets a GCP customer use ITA as a &lt;em&gt;second&lt;/em&gt; verifier alongside Google Cloud Attestation. Per the integration documentation: &quot;GCP Confidential Space provides a method for isolating a workload and sensitive data ensuring that data is released only to authorized workloads ... Intel Trust Authority is used to validate the evidence&quot; [@ita-gcp]. A second verifier is not the same architectural primitive as a public transparency log -- it provides cross-checking but not append-only public auditability -- but it is the closest move any other major-cloud confidential platform has made toward PCC&apos;s direction as of mid-2026.&lt;/p&gt;
&lt;h3&gt;Confidential Containers and the orchestration tier&lt;/h3&gt;
&lt;p&gt;Confidential Containers (CoCo) is a CNCF Sandbox project that wraps Kubernetes pods in confidential VMs running on AMD SEV-SNP, Intel TDX, or IBM Secure Execution [@coco-gh]. Per the project: &quot;Confidential Containers is an open source community working to enable cloud native confidential computing by ... Trusted Execution Environments to protect containers and data&quot; [@coco-gh]. CoCo composes &lt;em&gt;on top of&lt;/em&gt; the same Generation-3 silicon Azure CC-AI uses; it does not compete with PCC architecturally because it is at a different layer of the stack.&lt;/p&gt;
&lt;p&gt;Around CoCo and the underlying TEEs sits a small set of orchestration-tier vendors that take responsibility for what the raw SKUs do not. The procurement-relevant distinctions between them are sharper than the marketing copy suggests.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anjuna Seaglass&lt;/strong&gt; is the cross-cloud unified confidential-deployment plane. It packages AWS Nitro Enclave, Azure CVM, and GCP Confidential Space behind a single command and a customer-supplied policy [@anjuna], with the explicit value proposition of &quot;any cloud, any region, with the only Universal Confidential Computing platform.&quot; Anjuna&apos;s Seaglass platform supplanted the older Anjuna Northstar nomenclature, but reads the same way to a procurement audit: a single control plane spanning three different silicon vendors&apos; TEE primitives, with a uniform policy DSL on top.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edgeless Systems&apos; Contrast&lt;/strong&gt; is the runtime-and-runtime-encryption layer for confidential Kubernetes. Contrast runs confidential container deployments on Kubernetes at scale, built on Kata Containers and the Confidential Containers concept, and provides PKI, mTLS, and encrypted state disks across the deployment [@edgeless-contrast]. The architecture documentation is explicit that &quot;the Contrast Coordinator is the central remote-attestation service for a Contrast deployment&quot; and verifies the Contrast components inside a confidential VM [@contrast-arch] [@contrast-docs]. Contrast is the active successor to Edgeless Constellation, which is now archived (&quot;This repository has been archived ... Edgeless Systems has shifted focus to Contrast, our solution for confidential containers, which addresses the modern needs of confidential cloud workloads&quot; [@edgeless-constellation]). The procurement signal is that customers evaluating Constellation should be redirected to Contrast in any new deployment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fortanix&lt;/strong&gt; is two distinct products that the marketing collapses into one. &lt;strong&gt;Fortanix Confidential Computing Manager (CCM)&lt;/strong&gt; is the orchestration and policy management layer that &quot;is used to securely deploy and manage confidential computing applications using Intel SGX, AMD SEV-SNP, and Intel TDX runtimes&quot; [@fortanix-ccm]. &lt;strong&gt;Fortanix Data Security Manager (DSM)&lt;/strong&gt; is the FIPS 140-2 Level 3 HSM that holds the keys; per Fortanix&apos;s DSM page, DSM &quot;delivers Cryptographic Services, Key Management Services, Secrets Management, Tokenization, Code Signing ... powered by Confidential Computing&quot; [@fortanix-dsm] and carries FIPS 140-2 Level 3 certification on the underlying platform [@fortanix-fips]. Procurement teams that need a customer-managed-keys story almost always need both: CCM to orchestrate the confidential-workload deployment, DSM to custody the keys.&lt;/p&gt;
&lt;p&gt;CCM is not DSM. CCM is the orchestration plane (which workload runs where, attested by what); DSM is the FIPS 140-2 Level 3 HSM (which holds the keys, releases them on attested workload verification, audits the access). A procurement that asks for &quot;Fortanix&quot; without specifying CCM or DSM is asking for two different products at two different price points with two different compliance postures. The two integrate but they are not the same SKU.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Vendor&lt;/th&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Pick when...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Anjuna Seaglass&lt;/td&gt;
&lt;td&gt;Cross-cloud confidential deployment control plane [@anjuna]&lt;/td&gt;
&lt;td&gt;You run the same regulated workload on more than one cloud and need one policy DSL spanning AWS Nitro + Azure CVM + GCP Confidential Space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edgeless Contrast&lt;/td&gt;
&lt;td&gt;Confidential Kubernetes runtime with mTLS and encrypted state [@contrast-arch] [@contrast-docs]&lt;/td&gt;
&lt;td&gt;You run confidential workloads as Kubernetes pods and want a remote-attestation Coordinator inside the deployment rather than an external SaaS verifier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fortanix CCM&lt;/td&gt;
&lt;td&gt;Confidential-app orchestration on SGX/SEV-SNP/TDX [@fortanix-ccm]&lt;/td&gt;
&lt;td&gt;You need centralized policy for which signed confidential workloads run on which TEEs, with audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fortanix DSM&lt;/td&gt;
&lt;td&gt;FIPS 140-2 Level 3 HSM with attested key release [@fortanix-dsm] [@fortanix-fips]&lt;/td&gt;
&lt;td&gt;You need customer-managed keys, FIPS 140-2 L3 custody, and attested-workload-gated release as a single SKU&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The third-party tier exists because the raw cloud SKUs sell the &lt;em&gt;substrate&lt;/em&gt; but not the &lt;em&gt;operational pattern&lt;/em&gt;. Procurement decisions in this category typically pair a cloud SKU with one or two of these orchestration vendors to get something workable for a regulated workload.&lt;/p&gt;
&lt;h3&gt;Where these fit on the six axes&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Substrate&lt;/th&gt;
&lt;th&gt;Silicon&lt;/th&gt;
&lt;th&gt;Root of trust&lt;/th&gt;
&lt;th&gt;Transparency&lt;/th&gt;
&lt;th&gt;GPU TEE&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Apple PCC&lt;/td&gt;
&lt;td&gt;Apple end-to-end [@apple-pcc-blog]&lt;/td&gt;
&lt;td&gt;SEP + Apple CA [@apple-sep-guide]&lt;/td&gt;
&lt;td&gt;Public Transparency Log [@apple-pcc-release-transparency]&lt;/td&gt;
&lt;td&gt;Integrated Apple GPU [@apple-pcc-blog]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Azure CC-AI&lt;/td&gt;
&lt;td&gt;AMD + Intel + NVIDIA + MS [@ms-cc-overview]&lt;/td&gt;
&lt;td&gt;AMD PSP + NVIDIA RoT + vTPM + MAA [@ms-maa-overview] [@amd-kds]&lt;/td&gt;
&lt;td&gt;None (MAA claims only) [@ms-maa-overview]&lt;/td&gt;
&lt;td&gt;NVIDIA H100 CC-On [@nvidia-dev-blog]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS Nitro Enclaves&lt;/td&gt;
&lt;td&gt;AWS-signed, CPU-agnostic [@aws-nitro-hw]&lt;/td&gt;
&lt;td&gt;Nitro Hypervisor + Security Chip [@aws-nitro-enclave]&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;None at GA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GCP Confidential Space&lt;/td&gt;
&lt;td&gt;Intel TDX + AMD SEV-SNP [@gcp-cs-overview]&lt;/td&gt;
&lt;td&gt;vTPM + TDX Module + GCA (+ optional ITA) [@gcp-gca] [@ita-gcp]&lt;/td&gt;
&lt;td&gt;None (second verifier via ITA)&lt;/td&gt;
&lt;td&gt;None at GA on Confidential Space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Third-party tier (CoCo / Contrast / Anjuna)&lt;/td&gt;
&lt;td&gt;Composes on top of cloud SKUs [@coco-gh] [@edgeless-contrast]&lt;/td&gt;
&lt;td&gt;Inherits underlying TEE root&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Inherits underlying GPU TEE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Five substrates, one rough trade-off space. But every one of them rests on silicon, and silicon has its own theoretical limits. What can no TEE-based confidential AI architecture do?&lt;/p&gt;
&lt;h2&gt;8. What No TEE Can Do&lt;/h2&gt;
&lt;p&gt;The Confidential Computing Consortium&apos;s &quot;A Technical Analysis of Confidential Computing&quot; v1.3 -- the vendor-neutral definitional document both Apple and Microsoft anchor on -- explicitly enumerates side-channels as a residual risk [@ccc-technical-analysis]. This is not a contestable empirical claim. It is the field&apos;s own lower bound on what TEE-based confidential AI can deliver. The CCC names what the architecture &lt;em&gt;does not&lt;/em&gt; close, in plain text, in the same document that defines what it &lt;em&gt;does&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;There are roughly six classes of limit, and the architectures we have walked do not close any of them by construction.&lt;/p&gt;
&lt;h3&gt;1. Side-channels on shared silicon&lt;/h3&gt;
&lt;p&gt;The Foreshadow / L1TF, SgxPectre, and Plundervolt cascade [@foreshadow] [@sgxpectre] [@plundervolt] is the historical evidence. The principled extension is direct: any TEE built on shared microarchitectural state -- shared caches, shared branch predictors, shared functional units, shared voltage / frequency control -- inherits a side-channel surface that the architectural threat model does not name. Both Apple&apos;s SEP and the AMD-Intel-NVIDIA composition rest on silicon that does not have an architectural primitive that closes this surface. Wojtczuk and Rutkowska&apos;s 2009 paper on Intel TXT made the same point fifteen years earlier in a different generation, demonstrating that SMM-based bypasses of TXT were not addressed by TXT&apos;s own threat model [@txt-attack]. The cycle keeps repeating.&lt;/p&gt;

Even Intel SGX&apos;s memory encryption/authentication technology cannot protect against Plundervolt. -- the Plundervolt project page [@plundervolt]
&lt;h3&gt;2. Trust-anchor compromise&lt;/h3&gt;
&lt;p&gt;Every vendor behind a hardware root of trust is itself a trust anchor that nothing inside the architecture can close. AMD-as-signer through the PSP and VCEK certificate chains [@amd-kds]; Intel-as-signer for the TDX Module, SEAMLDR, and Provisioning Service; NVIDIA-as-signer for the on-die RoT and NRAS; Microsoft-as-signer for the MAA service [@ms-maa-overview]; and Apple-as-signer for the SEP-bound CA and the Apple-controlled Transparency Log [@apple-pcc-blog]. If any of those signing infrastructures is compromised, the architecture cannot defend itself against the signer. PCC&apos;s trust root collapses to Apple; Azure&apos;s spreads across four vendors but each one is still a trust anchor for the workload that depends on it.&lt;/p&gt;
&lt;h3&gt;3. ROM-burned single-signer revocation&lt;/h3&gt;
&lt;p&gt;Fuse-burned silicon roots of trust are not field-revocable on a chip already deployed. If an attacker recovers a vendor-signing key that has been burned into the boot ROM of millions of chips, the recovery path is fleet rotation, not credential revocation. This is not a flaw of any specific vendor; it is a property of how hardware roots of trust are physically anchored. The recovery model for a leaked AMD ARK key, an Intel SEAM key, or an Apple SEP signing key is the same: replace the silicon. That is a multi-quarter operation at fleet scale.&lt;/p&gt;
&lt;h3&gt;4. Supply-chain compromise of the AI model&lt;/h3&gt;
&lt;p&gt;Apple binds the model into the attested image hash. The same Transparency Log that proves what &lt;em&gt;code&lt;/em&gt; is running also proves what &lt;em&gt;model weights&lt;/em&gt; are running, because the model is part of the published image [@apple-pcc-blog] [@apple-pcc-release-transparency]. PCC closes the model supply-chain question at the architecture level.&lt;/p&gt;
&lt;p&gt;Azure shifts model integrity to customer-controlled SKR of model artefacts. The model weights become encrypted blobs that the workload unwraps inside the TEE using a customer-managed key released only on a satisfying MAA JWT [@ms-cc-overview] [@ms-workshop-llm]. The customer is the trust anchor for the model&apos;s identity, not the cloud provider. This is a different trust-rooting model -- not stronger or weaker in the abstract, but routed through different organizations. It is &lt;em&gt;not&lt;/em&gt; accurate to say only Apple defends against model supply-chain compromise.&lt;/p&gt;
&lt;h3&gt;5. Prompt-output exfiltration via the model itself&lt;/h3&gt;
&lt;p&gt;The TEE protects the &lt;em&gt;input&lt;/em&gt; boundary -- it can prove the cloud operator never saw the prompt. It does not constrain what the model puts in the &lt;em&gt;output&lt;/em&gt;. A model that is fine-tuned, prompt-injected, or simply chooses to emit memorised data can exfiltrate information through its own output channel, and no architectural primitive in either PCC or Azure CC-AI prevents that. Both architectures are equally exposed on this axis. This is also why prompt-output safety, content filtering, and model-side privacy controls are unrelated work that confidential computing does not subsume.&lt;/p&gt;
&lt;h3&gt;6. Compelled vendor and lawful access&lt;/h3&gt;
&lt;p&gt;A property of the trust-rooting model, not of any one architecture. If a vendor is compelled by law to push a software update that exfiltrates user data, the architecture cannot defend itself against that vendor. PCC&apos;s compelled-vendor exposure is concentrated on Apple. Azure&apos;s is distributed across AMD, Intel, NVIDIA, and Microsoft, but a compelled Microsoft is sufficient to compromise an MAA-rooted workload; the diffusion does not multiply protections.&lt;/p&gt;
&lt;h3&gt;And one more: MAA-as-service compromise&lt;/h3&gt;
&lt;p&gt;Azure&apos;s centralised verifier is a control point Apple does not have, because Apple&apos;s verifier is the user&apos;s device itself. If MAA is compromised -- if an attacker controls the MAA signing key, or if the MAA policy-evaluation code is modified maliciously -- every relying party that trusts MAA-issued JWTs trusts the attacker.&lt;/p&gt;

The CCC&apos;s &quot;A Technical Analysis of Confidential Computing&quot; v1.3 explicitly enumerates side-channels as a residual risk that the architecture does not close by construction. This is the field&apos;s own acknowledged lower bound. Any product claim that &quot;our confidential computing stack defends against all side-channels&quot; is, in 2026, either overstated or contradicting the CCC&apos;s own technical analysis [@ccc-technical-analysis]. The honest framing is that confidential computing defends against the architecturally-named threats (memory disclosure to the operator, hypervisor-mediated remap, plaintext-in-DRAM at-rest exposure) and that side-channels remain a separate research and engineering domain.
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Threat&lt;/th&gt;
&lt;th&gt;Apple PCC&lt;/th&gt;
&lt;th&gt;Azure CC-AI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Malicious cloud operator (passive memory disclosure)&lt;/td&gt;
&lt;td&gt;Defended (SEP-rooted attestation, OHTTP relay) [@apple-pcc-blog]&lt;/td&gt;
&lt;td&gt;Defended (SEV-SNP / TDX guest measurement, MAA verifier) [@ms-maa-overview]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compromised hypervisor (active remap / Iago attacks)&lt;/td&gt;
&lt;td&gt;Defended (Apple-controlled kernel + SEP-rooted measured boot) [@apple-pcc-blog]&lt;/td&gt;
&lt;td&gt;Defended (SEV-SNP RMP enforces page ownership; TDX Module isolates) [@ms-cc-overview]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supply-chain compromise of the AI model&lt;/td&gt;
&lt;td&gt;Defended at architecture level (model bound into Transparency-Log-published image) [@apple-pcc-blog]&lt;/td&gt;
&lt;td&gt;Defended via customer-controlled SKR of model artefacts; trust shifts to customer [@ms-workshop-llm]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Side-channels on shared silicon&lt;/td&gt;
&lt;td&gt;Not closed by construction [@ccc-technical-analysis] [@plundervolt]&lt;/td&gt;
&lt;td&gt;Not closed by construction [@ccc-technical-analysis] [@cipherleaks]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compelled-vendor / lawful access&lt;/td&gt;
&lt;td&gt;Not closed by construction (trust collapses to Apple)&lt;/td&gt;
&lt;td&gt;Not closed by construction (trust spreads across four vendors; compelled MAA suffices)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verifier / signer compromise&lt;/td&gt;
&lt;td&gt;Apple SEP-CA + Transparency Log signer is a control point&lt;/td&gt;
&lt;td&gt;MAA signer + AMD / Intel / NVIDIA signers are control points&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt-output exfiltration via model&lt;/td&gt;
&lt;td&gt;Not closed by construction&lt;/td&gt;
&lt;td&gt;Not closed by construction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Neither architecture closes the gap by construction. Apple&apos;s verifier is the user&apos;s device, and the user&apos;s device trusts Apple&apos;s SEP-bound CA and the Apple-controlled Transparency Log signer. Azure&apos;s verifier is MAA, which is a Microsoft-operated service with its own signing infrastructure. Apple&apos;s single-vendor problem and Microsoft&apos;s centralised-verifier problem are two shapes of the same architectural gap: the verifier itself is a trust root the architecture cannot externally audit.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Trust diffusion (Azure&apos;s contribution) and verifiable transparency (Apple&apos;s contribution) close &lt;em&gt;different&lt;/em&gt; trust-anchor gaps. Neither closes both. No production substrate as of mid-2026 closes both gaps simultaneously. A hypothetical Generation-7 design that combined Azure-style multi-vendor TEE composition with Apple-style append-only transparency of production images would close that gap. No vendor has shipped it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Two architectures, two distinct upper bounds, neither closing the same gap. So what is the field actually working on?&lt;/p&gt;
&lt;h2&gt;9. Where Active Work Is Happening&lt;/h2&gt;
&lt;p&gt;September 5, 2024, arXiv. Ceren Kocaoğullar (University of Cambridge), Tina Marjanov (Cambridge), Ivan Petrov (Google), Ben Laurie (Google), Al Cutter (Google), Christoph Kern (Google), Alice Hutchings (Cambridge), and Alastair R. Beresford (Cambridge) post &quot;A Confidential Computing Transparency Framework for a Trust Chain&quot; [@kocaogullar-transparency]. The paper does not name MAA specifically. It generalises the question Apple PCC raises in concrete form: can the verifiable-transparency primitive be replicated on commodity multi-vendor silicon without collapsing to a single trust root? The authors propose &quot;a three-level conceptual framework providing organisations with a practical pathway to incrementally improve Confidential Computing transparency&quot; [@kocaogullar-transparency]. The inclusion of Ben Laurie -- one of the original architects of Certificate Transparency (RFC 6962) -- is not incidental. The paper is the direct architectural descendant of CT brought into the confidential-computing domain.&lt;/p&gt;
&lt;p&gt;The v2 December 5, 2024 revision of the Kocaoğullar et al. paper added an 800+ participant empirical study showing that greater transparency improves end-user trust in confidential computing services [@kocaogullar-transparency]. That empirical signal is the closest thing the field has, as of mid-2026, to a measurement of the procurement consequences of verifiable transparency vs verifier-as-a-service. The framework itself is conceptual; the empirical contribution is the part procurement teams should read.&lt;/p&gt;
&lt;p&gt;Six open problems are visible in the current production work.&lt;/p&gt;
&lt;h3&gt;9.1 Verifiable transparency of the verifier itself&lt;/h3&gt;
&lt;p&gt;No major-cloud verifier ships a public append-only log of its own code. MAA does not; Google Cloud Attestation does not; AWS Nitro&apos;s hypervisor signer does not. The Intel Trust Authority integration on GCP introduces a &lt;em&gt;second&lt;/em&gt; verifier, which is a partial cross-check, but a second verifier is not the same architectural primitive as a transparency log [@ita-gcp]. Where the work is happening: the CCC Attestation Special Interest Group on GitHub coordinates Formal Specifications of Attestation Mechanisms, an RA-TLS proof of concept, an interoperable RA-TLS effort, an IETF RATS terms cheat sheet, and a formal-spec-KBS (key broker service) project [@ccc-attestation-gh]. The IETF RATS Working Group continues to extend RFC 9334 with Entity Attestation Token (EAT) and Concise Reference Integrity Manifest (CoRIM) drafts [@ietf-rfc9334].&lt;/p&gt;
&lt;h3&gt;9.2 GPU confidential-computing parity across vendors&lt;/h3&gt;
&lt;p&gt;NVIDIA H100 CC-On is the only confidential-GPU mode at GA on a major commercial cloud as of mid-2026 [@nvidia-dev-blog] [@ms-sku-nccads]. AMD MI300X ships as compute across multiple clouds but has no production-equivalent SEV-TIO confidential-GPU mode at GA on a major commercial cloud. PCIe TDISP and SEV-TIO Linux support is landing in 2025-2026 kernels, but the GA gap is the load-bearing fact for any procurement that wants AMD silicon end-to-end. AMD&apos;s MI400X-class roadmap is forward-looking. Until a second confidential GPU is at GA, single-vendor lock-in at the accelerator tier is the unavoidable procurement reality for any cloud confidential-AI workload.&lt;/p&gt;
&lt;h3&gt;9.3 Cross-vendor attestation portability&lt;/h3&gt;
&lt;p&gt;IETF RFC 9334 standardises the vocabulary [@ietf-rfc9334]; CoRIM and EAT, in active drafting in the IETF RATS WG, aim at portable claim formats. The vocabulary work matters because a confidential workload that wants to run unchanged on Azure SEV-SNP and Azure TDX and GCP TDX needs a single attestation parser that understands all three evidence formats. The MAA approach maps onto RFC 9334&apos;s Passport pattern; the GCA approach maps onto OIDC tokens that play well with federated-identity tooling. As of mid-2026 no single relying-party library handles all three production verifiers transparently, and that is one of the things the CCC Attestation SIG is working on [@ccc-attestation-gh].&lt;/p&gt;
&lt;h3&gt;9.4 Confidential inferencing for Azure OpenAI models&lt;/h3&gt;
&lt;p&gt;Microsoft&apos;s &lt;code&gt;Azure-Samples/confidential-ai-workshop&lt;/code&gt; repository [@ms-workshop] is the cleanest procurement-grade reference for what confidential inferencing actually looks like in production on Azure today. It contains three end-to-end tutorials at three different points on the cost-versus-isolation curve, and reading them in sequence is the fastest way for a procurement team to map the abstract architecture to concrete SKU lines.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tutorial 1: ML-training on a CPU-only confidential VM (&lt;code&gt;Standard_DCasv5&lt;/code&gt;).&lt;/strong&gt; The &lt;code&gt;confidential-ml-training&lt;/code&gt; directory walks training of an XGBoost-class classical-ML model on a &lt;code&gt;Standard_DCasv5&lt;/code&gt; SKU, which is an AMD SEV-SNP confidential VM &lt;em&gt;without&lt;/em&gt; a confidential GPU [@ms-workshop-ml]. The workload posture is plaintext-data-and-model on a TEE-protected substrate, with the SEV-SNP attestation gating access to encrypted training data in Azure Storage via the standard MAA + SKR path. The deliberate choice of XGBoost over a deep-learning model is the architectural lesson: when the model and training data fit in CPU memory and TCB-sealed CPU compute is sufficient, the confidential GPU SKU is overkill. This is the lowest-cost on-ramp into the architecture.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tutorial 2: LLM inferencing on a confidential GPU (&lt;code&gt;Standard_NCC40ads_H100_v5&lt;/code&gt;).&lt;/strong&gt; The &lt;code&gt;confidential-llm-inferencing&lt;/code&gt; directory walks serving &lt;code&gt;microsoft/Phi-4-mini-reasoning&lt;/code&gt; on a &lt;code&gt;Standard_NCC40ads_H100_v5&lt;/code&gt; SKU [@ms-workshop-llm]. Phi-4-mini-reasoning is a 3.8 B-parameter dense decoder-only Transformer with a 128 K-token context window, MIT-licensed on Hugging Face [@hf-phi4-mini], chosen because it fits comfortably in the H100 NVL&apos;s 94 GB HBM3 capacity with room for activation memory. The novel architectural feature here is &lt;strong&gt;double attestation&lt;/strong&gt;: the tutorial&apos;s setup script uses &lt;code&gt;Azure/az-cgpu-onboarding&lt;/code&gt; [@az-cgpu-onboarding] to verify both the SEV-SNP CVM attestation (against AMD VCEK) &lt;em&gt;and&lt;/em&gt; the NVIDIA H100 GPU attestation (against NVIDIA&apos;s on-die root of trust via NRAS) before model weights are released from Azure Key Vault Premium via SKR. This is the architectural pattern any production GPU-confidential workload should match.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tutorial 3: Inferencing via the Confidential Whisper service (OHTTP + HPKE).&lt;/strong&gt; Whisper, the speech-to-text model, is the publicly-demoed Microsoft Build 2024 confidential inferencing reference workload. The &lt;code&gt;confidential-whisper-inferencing&lt;/code&gt; tutorial directory confirms the Azure AI Foundry Confidential Whisper service uses &lt;strong&gt;Oblivious HTTP&lt;/strong&gt; with &lt;strong&gt;HPKE&lt;/strong&gt; end-to-end encryption to keep audio encrypted until it reaches the TEE-protected Whisper model [@ms-workshop-whisper]. The reference OHTTP gateway implementation is &lt;code&gt;microsoft/attested-ohttp-client&lt;/code&gt; and its server-side counterpart, &quot;an Attested OHTTP gateway and client implementation by Microsoft&quot; that &quot;uses the Cloudflare OHTTP client/server implementation as a basis&quot; [@ms-attested-ohttp]. This is the closest architectural pattern Azure has to PCC&apos;s non-targetability requirement -- a third-party-operated OHTTP relay strips the client IP before the request reaches the confidential inferencing endpoint, the same architectural primitive Apple uses for PCC at network ingress.&lt;/p&gt;
&lt;p&gt;The three tutorials are the canonical references because they walk the wire-level flow. A procurement team that wants to know &quot;what does confidential inferencing actually look like on Azure&quot; can read the README files, the Bicep templates, the attestation-policy JSON, and the SKR-policy JSON, and answer the question without speculation. GPT-class confidential endpoints staging through 2024-2026 are forward-looking roadmap. There is no May-2024 GA for &quot;Confidential GPT-4,&quot; but the three workshop tutorials cover the architectural primitives that such a GA would compose.&lt;/p&gt;
&lt;h3&gt;9.5 The Apple PCC node-chip transition&lt;/h3&gt;
&lt;p&gt;Apple has not publicly named the chip family used in PCC nodes. Firmware identifiers and independent analyses make the transition story concrete enough to reason about. At launch in June 2024 the PCC nodes ran on M2-Ultra-class silicon, identified by the firmware string &lt;code&gt;ComputeModule14,1&lt;/code&gt; visible in independent device-identifier databases [@appledb-cm14]. During 2026 the PCC fleet transitioned to a new node generation identified as &lt;code&gt;J226C&lt;/code&gt; and reported (independently, not by Apple) as built around M5-class silicon manufactured in Houston, Texas [@nine-to-five-mac-m5] [@winbuzzer-m5]. The 9to5Mac report dated February 17, 2026 describes Apple&apos;s M5-based Private Cloud Compute servers tied to iOS 26.4 [@nine-to-five-mac-m5], and the parallel Winbuzzer coverage from the next day confirms a new &quot;Private Cloud Compute Agent Worker&quot; component running on M5-class node hardware [@winbuzzer-m5].&lt;/p&gt;
&lt;p&gt;What is architecturally interesting is not the chip identity. It is what the transition &lt;em&gt;did not&lt;/em&gt; change. The Transparency Log architecture absorbs a generational chip change as a matter of routine policy because the log&apos;s verifier policy is a list of approved image hashes and the SEP-rooted attestation envelope structure, not a list of approved chip families. New node generation, new image hashes (visible in &lt;code&gt;PrivateCloudCompute/Release.swift&lt;/code&gt; and validated by &lt;code&gt;PrivateCloudCompute/NodeValidator.swift&lt;/code&gt; [@apple-pcc-nodevalidator] [@apple-pcc-release-swift]), same envelope structure, same client-side verification. From a procurement-trust perspective, the transition was an architectural non-event in exactly the way Apple&apos;s public commitments said it should be.&lt;/p&gt;

**Two invariants held across the M2-Ultra to M5 node transition.** First, the device-side envelope check is stable: the `NodeValidator` validates SEP-signed attestation against the `SEPAttestationPolicy` it parses from the release artefact [@apple-pcc-nodevalidator] [@apple-pcc-sepattestpolicy], and the policy schema did not change. Second, the public transparency log absorbed the transition without any client-side trust ceremony because the chip family is not in the verifier policy -- only the image hash is. A device that started talking to the M2-Ultra fleet in 2024 and woke up in 2026 talking to the M5 fleet did exactly one new thing: it fetched the new approved image hashes from the log. **Three things did change.** First, the on-node software stack (firmware, kernel, OS, inference runtime) is rebuilt for the new silicon; that is why the image hashes change. Second, the routing policy may shift -- some workloads may schedule onto the new node generation preferentially. Third, the chip family itself is not publicly named by Apple; the M5 identification is inferential from independent reporting plus firmware identifiers, not from a primary Apple source. Procurement narratives should use &quot;Apple-designed silicon, not publicly named&quot; when precision matters, and reach for the inferential M5 identification only when chip-family granularity is load-bearing.
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; The architectural payoff of a public transparency log is precisely that it absorbs a generational chip transition without any client-side trust ceremony, because the chip family is not in the verifier policy -- only the image hash is. This is what &quot;verifiable transparency&quot; buys procurement teams in practice: the trust contract survives silicon turnover because the contract was never about silicon. It was about which bits the silicon ran.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;9.6 Third-party PCC equivalents&lt;/h3&gt;
&lt;p&gt;Could AWS or Google replicate Apple&apos;s Transparency-Log model on commodity multi-vendor silicon? The architectural feasibility is open. The Kocaoğullar et al. framework provides a conceptual pathway [@kocaogullar-transparency]. The CCC Attestation SIG&apos;s interoperable-ra-tls work is one of several substrates that a multi-vendor transparency log could ride on top of [@ccc-attestation-gh]. Whether any major cloud will actually ship it is the architectural bet the next generation hinges on. No GA product as of mid-2026.&lt;/p&gt;

A regulated workload that needs second-source availability has to be able to run on at least two confidential substrates. As of mid-2026 the practical cross-vendor option for a TEE-based confidential workload is &quot;AMD SEV-SNP on Azure, Intel TDX on GCP, AWS Nitro on AWS&quot; -- three different attestation evidence formats consumed by three different verifiers. CoRIM and EAT in the IETF RATS WG are trying to make those three formats parseable by one library. Until that lands, second-source confidential AI is an integration project, not a configuration change.
&lt;p&gt;The field is wide open. But the reader&apos;s procurement deadline is not. How do you actually choose between PCC and Azure today?&lt;/p&gt;
&lt;h2&gt;10. A Procurement Decision Tree&lt;/h2&gt;
&lt;p&gt;Six questions, asked in order. The first determines whether PCC is even in play; the rest sharpen the choice.&lt;/p&gt;
&lt;h3&gt;Question 1: Do you control the device that originates the request, and is it Apple-Intelligence-capable?&lt;/h3&gt;
&lt;p&gt;PCC requires Apple-Intelligence-capable client devices. The supported set as of mid-2026 is iPhone 15 Pro and later, iPads on M1 silicon or later, and Macs on M1 silicon or later [@apple-pcc-blog]. If your end users are on Windows laptops, Android phones, browsers, or any non-Apple endpoint, PCC is out of scope by construction. Azure / GCP / AWS confidential AI workloads do not have an analogous client-side requirement -- they are workload-shape-agnostic and the client can be any HTTPS-speaking device.&lt;/p&gt;
&lt;h3&gt;Question 2: Can you accept Apple-as-signer as the trust root?&lt;/h3&gt;
&lt;p&gt;PCC&apos;s trust collapses to Apple&apos;s signing infrastructure. The SEP-bound CA, the Apple-operated Transparency Log signer, the Apple bug-bounty program, and the Apple Security Engineering and Architecture team are the entire trust root [@apple-pcc-blog]. Azure spreads trust across AMD plus Intel plus NVIDIA plus Microsoft as separate signers [@ms-maa-overview] [@amd-kds] [@nvidia-dev-blog]. If your security posture explicitly requires multi-vendor trust diffusion -- for example, because your regulator does not accept single-vendor SBOMs as evidence -- Azure wins this axis (see §6 for the architectural reasoning).&lt;/p&gt;
&lt;h3&gt;Question 3: Do you need customer-managed key material?&lt;/h3&gt;
&lt;p&gt;Azure: yes, via SKR from Azure Key Vault Premium or Azure Managed HSM, with a release policy bound to MAA-issued claims [@ms-cc-overview] [@ms-maa-overview]. Apple: no by design, because PCC nodes are stateless and there is no customer key material on the node to be released [@apple-pcc-blog]. Regulated buyers whose framework requires customer-held keys -- for example, a FIPS 140-3 Level 3 customer-key-escrow requirement -- cannot map PCC into that framework, because PCC does not have the architectural primitive the framework is asking for.&lt;/p&gt;
&lt;h3&gt;Question 4: Do you need verifiable transparency of the actually-running code?&lt;/h3&gt;
&lt;p&gt;Apple: yes, via the published Transparency Log [@apple-pcc-release-transparency]. Azure: not via the architecture itself. You can build a customer-side log of the MAA tokens you have observed, or you can accept MAA&apos;s claims at face value. There is no Azure architectural primitive that proves the bits MAA verified are the same bits the workload is actually executing today, in the way that PCC&apos;s Transparency Log proves the image hash served to &lt;em&gt;you&lt;/em&gt; is the same one served to every other PCC user.&lt;/p&gt;
&lt;p&gt;This is the one axis where the architectures differ in &lt;em&gt;kind&lt;/em&gt;. If your threat model requires that &lt;em&gt;you&lt;/em&gt; be able to confirm what code the cloud is running, not just that &lt;em&gt;the cloud&lt;/em&gt; says it is running specific code, PCC is the only production answer.&lt;/p&gt;
&lt;h3&gt;Question 5: Do you need GPU-class confidential compute?&lt;/h3&gt;
&lt;p&gt;Both ship it. Pay attention to two facts. First, Azure&apos;s confidential GPU is H100 only at GA in mid-2026 [@nvidia-dev-blog] [@ms-sku-nccads]. AMD MI300X CC-On is not at GA on a major commercial cloud; NVIDIA H200 and Blackwell-class GB200 GPUs are GA on Azure as non-confidential SKUs. If you need confidential GPU compute, the only major-cloud answer is &lt;code&gt;NCCads_H100_v5&lt;/code&gt; (or its successor). Second, Apple&apos;s GPU is integrated on the SoC and is inside the SEP-rooted attestation envelope by construction; there is no separate cross-vendor GPU attestation step, which simplifies the trust analysis at the cost of being available only on the Apple stack.&lt;/p&gt;
&lt;h3&gt;Question 6: What does your auditor accept as evidence?&lt;/h3&gt;
&lt;p&gt;The MAA JWT is consumable by every off-the-shelf JWT verifier. It is also broadly accepted in regulated audits because the JWT format and the &lt;code&gt;x-ms-*&lt;/code&gt; claim names are documented in publicly-fetchable Microsoft Learn pages [@ms-maa-overview], and auditors can map MAA tokens onto NIST SP 800-53 attestation evidence requirements without exotic tooling.&lt;/p&gt;
&lt;p&gt;PCC&apos;s Transparency Log proof is newer. An audit that accepts a Merkle inclusion proof against an Apple-published log root as evidence is uncommon as of mid-2026; most regulated audit programs were designed before such a primitive existed in cloud AI. If your auditor needs PCC evidence, expect to write explainer documentation that translates &quot;your image hash is in append-only public log at Merkle position N with signed root R&quot; into the language your audit framework uses.&lt;/p&gt;
&lt;p&gt;{`
// Sketch of a Certificate-Transparency-style Merkle inclusion proof check.
// The PCC Transparency Log inherits this structural primitive from RFC 6962.
// This is educational -- a production verifier would use a maintained library.&lt;/p&gt;
&lt;p&gt;const sha256Hex = async (data) =&amp;gt; {
  const bytes = typeof data === &apos;string&apos; ? new TextEncoder().encode(data) : data;
  const buf = await crypto.subtle.digest(&apos;SHA-256&apos;, bytes);
  return [...new Uint8Array(buf)].map((b) =&amp;gt; b.toString(16).padStart(2, &apos;0&apos;)).join(&apos;&apos;);
};&lt;/p&gt;
&lt;p&gt;const concat = (a, b) =&amp;gt; {
  const out = new Uint8Array(a.length + b.length);
  out.set(a); out.set(b, a.length);
  return out;
};&lt;/p&gt;
&lt;p&gt;async function verifyInclusion(leafHashHex, leafIndex, treeSize, sibling, root) {
  // sibling is the audit path (array of sibling node hashes, leaf to root)
  let node = Uint8Array.from(leafHashHex.match(/.{2}/g).map(h =&amp;gt; parseInt(h, 16)));
  let idx = leafIndex;
  let size = treeSize;
  for (const s of sibling) {
    const sBytes = Uint8Array.from(s.match(/.{2}/g).map(h =&amp;gt; parseInt(h, 16)));
    // RFC 6962 prefixes internal hashes with 0x01
    const prefixed = (left, right) =&amp;gt; concat(new Uint8Array([0x01]), concat(left, right));
    const combined = (idx % 2 === 0)
      ? prefixed(node, sBytes)
      : prefixed(sBytes, node);
    const h = await sha256Hex(combined);
    node = Uint8Array.from(h.match(/.{2}/g).map(x =&amp;gt; parseInt(x, 16)));
    idx = Math.floor(idx / 2);
    size = Math.floor((size + 1) / 2);
  }
  const computedRoot = [...node].map((b) =&amp;gt; b.toString(16).padStart(2, &apos;0&apos;)).join(&apos;&apos;);
  return computedRoot === root;
}&lt;/p&gt;
&lt;p&gt;// In production: fetch (signed log root, audit path) from the log
// and the leaf hash from the attestation envelope&apos;s image-hash field.
// If verifyInclusion returns true AND the signed root matches what your
// device trusts, the image you are about to talk to is in the public log.
console.log(&apos;Educational sketch only; use a maintained CT library in production.&apos;);
`}&lt;/p&gt;
&lt;h3&gt;The decision tree in one diagram&lt;/h3&gt;

flowchart TD
    Q1{&quot;Apple-Intelligence-capable&lt;br /&gt;client device required?&quot;}
    Q2{&quot;Single-vendor (Apple)&lt;br /&gt;trust root acceptable?&quot;}
    Q3{&quot;Customer-managed key&lt;br /&gt;material required?&quot;}
    Q4{&quot;Need public-log&lt;br /&gt;verifiable transparency?&quot;}
    Q5{&quot;Need GPU TEE&lt;br /&gt;at fleet scale?&quot;}
    Q6{&quot;Auditor accepts&lt;br /&gt;Merkle inclusion proof?&quot;}
    Q1 --&amp;gt;|No| AZ[Azure / GCP / AWS]
    Q1 --&amp;gt;|Yes| Q2
    Q2 --&amp;gt;|No| AZ
    Q2 --&amp;gt;|Yes| Q3
    Q3 --&amp;gt;|Yes| AZ
    Q3 --&amp;gt;|No| Q4
    Q4 --&amp;gt;|Yes| Q5
    Q4 --&amp;gt;|No| AZ
    Q5 --&amp;gt;|Yes, Apple integrated GPU OK| PCC[Apple PCC]
    Q5 --&amp;gt;|Yes, need NVIDIA H100| AZ
    PCC --&amp;gt; Q6
    Q6 --&amp;gt;|Yes| PCC2[PCC fits the audit posture]
    Q6 --&amp;gt;|No| PCC3[Write explainer documentation,&lt;br /&gt;or fall back to Azure JWT-based evidence]

The MAA JWT maps cleanly onto NIST SP 800-53 SA-12 (Supply Chain Protection) and SC-12 (Cryptographic Key Establishment and Management) evidence requirements, because the JWT format and the claim semantics are publicly documented and JWT verifiers are standard library code [@ms-maa-overview]. PCC&apos;s Transparency Log evidence is newer; SA-12-style framings exist for Certificate Transparency in the web-PKI context but not yet (as of mid-2026) as a recognised confidential-AI evidence pattern. Expect explainer documentation to be required. Both architectures interact with FedRAMP, but Azure&apos;s confidential AI offerings are further along the FedRAMP path because Microsoft&apos;s broader Azure compliance suite is older.

Azure is the first cloud provider to offer confidential computing with NVIDIA H100 GPUs. -- NVIDIA Blog, September 24, 2024 [@nvidia-h100-ga]
&lt;h3&gt;What the verifier actually does, on the wire&lt;/h3&gt;
&lt;p&gt;Once procurement has chosen the architecture, an engineer somewhere has to &lt;em&gt;write the verifier&lt;/em&gt;. The two architectures end up being symmetric in this regard: each produces a cryptographic envelope, and a relying party has to parse, validate signatures, and check inclusion or claims. Three procurement-grade reference primitives anchor the choice -- two from Azure (already shown above), one from Apple PCC.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On Azure&lt;/strong&gt;, the relying party walks an MAA JWT verification flow (decode the JWT, validate signature against the MAA JWKS, match claims against an SKR release policy -- the JavaScript reference appears in §6 Axis 3 alongside the MAA JWT decode) [@ms-maa-overview]. For customers who want to &lt;em&gt;not&lt;/em&gt; trust MAA, the alternative path uses &lt;code&gt;snpguest&lt;/code&gt; to fetch the AMD VCEK chain and verify the SEV-SNP attestation directly (the bash reference also in §6 Axis 3) [@virtee-snpguest]. The two paths produce structurally equivalent confidence in the same evidence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On Apple PCC&lt;/strong&gt;, the relying-party verifier is &lt;code&gt;PrivateCloudCompute/NodeValidator.swift&lt;/code&gt; and friends [@apple-pcc-nodevalidator]. The flow is: parse the &lt;code&gt;AttestationBundle&lt;/code&gt; from the response (the bundle structure is defined in &lt;code&gt;SEPAttestation.swift&lt;/code&gt; [@apple-pcc-sepattest]); call the SEP attestation context verifier (&lt;code&gt;aks_attest_context_verify&lt;/code&gt;) on the SEP signature against the per-die Apple-rooted certificate chain; parse the &lt;code&gt;Release.swift&lt;/code&gt; &lt;code&gt;Release&lt;/code&gt; struct as ASN.1 DER and compute its SHA-256 digest [@apple-pcc-release-swift]; check the SEP attestation policy claims (&lt;code&gt;SEPAttestationPolicy.swift&lt;/code&gt; [@apple-pcc-sepattestpolicy]) constrain the release digest; then call &lt;code&gt;SWTransparencyVerifier.verifyExpiringInclusion&lt;/code&gt; to verify the release digest&apos;s inclusion proof in the public transparency log [@apple-pcc-swtrans-verifier] [@apple-pcc-transparencypolicy]. The full reference is the &lt;code&gt;apple/private-cloud-compute&lt;/code&gt; repository&apos;s &lt;code&gt;VerifiableReleasesExtension&lt;/code&gt; directory and the &lt;code&gt;VerifiableReleasesExtension&lt;/code&gt; tutorial [@apple-pcc-vre].&lt;/p&gt;
&lt;p&gt;{`# This is a procurement-grade SKETCH, not production code. It walks the four&lt;/p&gt;
verification steps a real PCC client performs (see PrivateCloudCompute/
NodeValidator.swift for the canonical reference [@apple-pcc-nodevalidator]).
Each function is a stub showing the contract the caller must satisfy.
&lt;p&gt;from hashlib import sha256
from typing import Optional
from dataclasses import dataclass&lt;/p&gt;
&lt;p&gt;@dataclass
class AttestationBundle:
    &quot;&quot;&quot;The Apple PCC AttestationBundle, parsed from the response envelope.
    Structure defined in SEPAttestation.swift [@apple-pcc-sepattest].&quot;&quot;&quot;
    sep_signature: bytes
    sep_cert_chain: list
    release_der: bytes
    sep_attestation_policy_claims: dict
    transparency_inclusion_proof: dict&lt;/p&gt;
&lt;p&gt;def aks_attest_context_verify(
    sep_signature: bytes,
    sep_cert_chain: list,
    apple_root_anchor: bytes,
) -&amp;gt; bool:
    &quot;&quot;&quot;Step 1: verify the SEP signature against the per-die Apple-rooted
    certificate chain. In the real client this calls the Security framework&apos;s
    aks_attest_context_verify; the SEP cert chain is rooted at Apple&apos;s PCC CA.
    Returns True if the signature chains to the pinned anchor.&quot;&quot;&quot;
    raise NotImplementedError(&quot;calls Security.framework in a real client&quot;)&lt;/p&gt;
&lt;p&gt;def compute_release_digest(release_der: bytes) -&amp;gt; bytes:
    &quot;&quot;&quot;Step 2: the Release struct is serialised as ASN.1 DER; the canonical
    release digest is SHA-256 over the DER bytes. See Release.swift for the
    schema [@apple-pcc-release-swift].&quot;&quot;&quot;
    return sha256(release_der).digest()&lt;/p&gt;
&lt;p&gt;def check_sep_attestation_policy(
    claims: dict,
    expected_release_digest: bytes,
) -&amp;gt; bool:
    &quot;&quot;&quot;Step 3: the SEP attestation policy claims must constrain the release
    digest. See SEPAttestationPolicy.swift for the policy schema
    [@apple-pcc-sepattestpolicy]. A real client checks the policy version,
    the claimed release digest, and the attestation freshness window.&quot;&quot;&quot;
    claimed_digest = claims.get(&quot;release_digest&quot;)
    return claimed_digest == expected_release_digest&lt;/p&gt;
&lt;p&gt;def verify_expiring_inclusion(
    release_digest: bytes,
    inclusion_proof: dict,
    log_witness_root: bytes,
) -&amp;gt; bool:
    &quot;&quot;&quot;Step 4: verify the release digest&apos;s inclusion in the public PCC
    transparency log against a witness-cosigned tree head. Reference impl:
    SWTransparencyVerifier.verifyExpiringInclusion
    [@apple-pcc-swtrans-verifier] [@apple-pcc-transparencypolicy].&quot;&quot;&quot;
    raise NotImplementedError(&quot;merkle proof + cosigned witness check&quot;)&lt;/p&gt;
&lt;p&gt;def verify_pcc_envelope(
    bundle: AttestationBundle,
    apple_root_anchor: bytes,
    log_witness_root: bytes,
) -&amp;gt; bool:
    &quot;&quot;&quot;The four-step PCC verifier flow. Returns True only if every step
    passes. A real client refuses to send the user&apos;s prompt if this returns
    False.&quot;&quot;&quot;
    if not aks_attest_context_verify(
        bundle.sep_signature, bundle.sep_cert_chain, apple_root_anchor
    ):
        return False
    release_digest = compute_release_digest(bundle.release_der)
    if not check_sep_attestation_policy(
        bundle.sep_attestation_policy_claims, release_digest
    ):
        return False
    if not verify_expiring_inclusion(
        release_digest, bundle.transparency_inclusion_proof, log_witness_root
    ):
        return False
    return True
`}&lt;/p&gt;
&lt;p&gt;The symmetry is the procurement point. &lt;strong&gt;Azure&lt;/strong&gt;: validate JWT signature against MAA JWKS, match claims against SKR policy. &lt;strong&gt;Apple PCC&lt;/strong&gt;: validate SEP signature against Apple PCC CA, validate inclusion proof against transparency log witness root. Both are cryptographic; both produce a yes/no decision against a hardware-anchored chain of trust. The architectural difference is what the relying party is allowed to know: with PCC, the relying party knows the exact image hash that ran (because the log says so); with Azure, the relying party knows the workload met an MAA policy (because the JWT says so). The two are not interchangeable evidence, but the verifier code-paths are roughly the same shape.&lt;/p&gt;
&lt;p&gt;The decision tree handles the typical questions. The atypical questions, and the misconceptions, are next.&lt;/p&gt;
&lt;h2&gt;11. Frequently Asked Questions&lt;/h2&gt;


Yes, in both architectures, against the threats the architecture names. Apple PCC&apos;s SEP-rooted attestation envelope plus the Transparency Log refusal to forward to unlogged images defends against a malicious Apple operator passively reading prompts [@apple-pcc-blog]. Azure CC-AI&apos;s SEV-SNP RMP-enforced memory plus MAA-gated SKR defends against a malicious Microsoft operator on the SEV-SNP path [@ms-maa-overview]. Neither closes side-channels on shared silicon [@ccc-technical-analysis]; neither closes compelled-vendor or lawful-access exposure; neither closes prompt-output exfiltration via the model itself. The &quot;the cloud cannot see your prompt&quot; claim is true against the named threat model and not against every conceivable threat.

Yes. The 2018-2020 cascade closed the SGX-era residuals -- Foreshadow / L1TF [@foreshadow], SgxPectre [@sgxpectre], Plundervolt (CVE-2019-11157) [@plundervolt] -- and the principled extension is that any TEE built on shared microarchitectural state inherits a similar surface. The CCC&apos;s &quot;A Technical Analysis of Confidential Computing&quot; v1.3 names this explicitly as a residual risk that the architecture does not close by construction [@ccc-technical-analysis]. CipherLeaks (USENIX Security 2021) demonstrated the same point on the AMD SEV side via a deterministic-ciphertext side channel [@cipherleaks]. Vendor microcode updates are an ongoing operational requirement, not a one-time fix.

No. Per the `apple/security-pcc` README verbatim: &quot;The publication of this code is intended for security research and verification purposes only&quot; [@apple-pcc-github]. The publication&apos;s purpose is research-grade transparency -- so that an independent researcher can inspect what is running, exercise the architecture inside the Virtual Research Environment, and submit findings to the Apple Security Bounty program with rewards up to \$1,000,000 [@apple-pcc-research]. It is not a typical open-source contribution model and the license and intended use are explicitly different. The substantive thing PCC ships is verifiable transparency of the running fleet, not community-driven development.

No. Both Linux and Windows guest OSes are supported on Azure confidential VMs, and the reference confidential-inferencing stack Microsoft publishes is Linux-based. The `microsoft/confidential-ai-workshop` repository contains three Linux-based tutorial directories: `confidential-llm-inferencing`, `confidential-whisper-inferencing`, and `confidential-ml-training`, with reusable modules for attestation, key management, key origin, model sourcing, and OS disk encryption [@ms-workshop]. The LLM inferencing tutorial deploys a `Standard_NCC40ads_H100_v5` confidential VM with a vLLM-plus-Streamlit-plus-Caddy stack [@ms-workshop-llm]. Windows is supported; Linux is the canonical reference.

Confidential Containers is an orchestration-layer abstraction that maps Kubernetes pods onto Generation-3 confidential VMs running on AMD SEV-SNP, Intel TDX, or IBM Secure Execution [@coco-gh]. It composes on top of the same substrate Azure CC-AI uses. It does not compete with Apple PCC architecturally -- they live at different layers of the stack. A CoCo deployment on Azure can use MAA and SKR for its attestation and key-release primitives, and orchestration vendors like Edgeless Systems&apos; Contrast wrap that pattern into a workload-level confidential-computing primitive on Kubernetes [@edgeless-contrast].

No. Both rest on vendor-controlled signing infrastructure. PCC&apos;s compelled-vendor exposure is concentrated on Apple, because the signer of every PCC attestation chain is Apple. Azure&apos;s is distributed across AMD, Intel, NVIDIA, and Microsoft, but a compelled Microsoft is sufficient to compromise an MAA-rooted workload because MAA is the single verifier whose JWT every downstream relying party trusts [@ms-maa-overview]. Trust diffusion across multiple vendors makes the *collapse* harder, but it does not make any one vendor&apos;s compelled-update path architecturally impossible. This is a property of the trust-rooting model, not a flaw of either architecture, and neither closes it by construction.

No. The canonical late-2024 Mark Russinovich confidential-AI session is **Microsoft Ignite 2024 BRK430**, &quot;Inside Azure Innovations with Mark Russinovich,&quot; also published on YouTube as &quot;Confidential AI and Inference -- Inside Azure Innovations.&quot; Russinovich&apos;s &quot;data in use&quot; framing for confidential computing originally appeared in his September 14, 2017 Azure blog &quot;Introducing Azure confidential computing,&quot; not in an academic OSDI venue [@ms-russinovich-2017]. Microsoft Build 2024&apos;s confidential-inferencing session was BRK227, &quot;Inside AI Security with Mark Russinovich,&quot; which announced confidential inferencing for the Azure OpenAI Whisper speech-to-text model -- not for GPT-4, and not under the title &quot;Confidential GPT&quot; [@ms-workshop-whisper].

&lt;h3&gt;What to carry into the next conversation&lt;/h3&gt;
&lt;p&gt;Two architectures. One promise. One axis on which they differ in kind. The end-user pitch -- &quot;the cloud cannot see your prompt&quot; -- is now functionally identical across Apple Private Cloud Compute and Azure Confidential AI, but the architectural machinery underneath ships two genuinely different things. PCC ships &lt;em&gt;verifiable transparency of the production fleet&lt;/em&gt; through an Apple-controlled stack and a public Transparency Log. Azure CC-AI ships &lt;em&gt;multi-vendor trust diffusion plus customer-managed keys&lt;/em&gt; through AMD SEV-SNP plus NVIDIA H100 CC-On plus MAA plus SKR. Each closes a trust-anchor gap the other leaves open. Neither closes the gap the other closes. Neither closes the side-channel, compelled-vendor, or model-output exfiltration gaps -- the CCC&apos;s own v1.3 analysis names these as residual risks for any TEE-based design [@ccc-technical-analysis].&lt;/p&gt;
&lt;p&gt;The next architectural generation -- the one that combines Azure-style multi-vendor TEE composition with Apple-style append-only transparency of production images -- would close the gap both leave open. The Kocaoğullar et al. transparency framework is the conceptual sketch [@kocaogullar-transparency]; the CCC Attestation SIG and the IETF RATS Working Group are where the production work is happening [@ccc-attestation-gh] [@ietf-rfc9334]. No vendor has shipped it.&lt;/p&gt;
&lt;p&gt;For now, the load-bearing decision is the one Question 4 in §10 asks. If your threat model requires that &lt;em&gt;you&lt;/em&gt; be able to confirm what code the cloud is actually running -- and not just that &lt;em&gt;the cloud&lt;/em&gt; says it is running specific code -- PCC is the only production answer in mid-2026. If your threat model is satisfied by multi-vendor trust diffusion and a managed-verifier JWT, Azure CC-AI gives you a richer key-management story and broader silicon optionality. The architectures are not better and worse. They are answers to different questions. The first useful step in any confidential-AI procurement is naming which question you are actually trying to answer.&lt;/p&gt;
&lt;p&gt;&amp;lt;StudyGuide slug=&quot;apple-pcc-vs-azure-confidential-ai&quot; keyTerms={[
  { term: &quot;Trusted Execution Environment (TEE)&quot;, definition: &quot;Hardware-isolated execution context that protects confidentiality and integrity of code and data even from the host OS, hypervisor, or peripheral firmware.&quot; },
  { term: &quot;Secure Enclave Processor (SEP)&quot;, definition: &quot;Apple-designed separate processor core on the same SoC as the main application processor, with its own boot ROM, AES engine, and protected memory. Per-node hardware root of trust on every Apple PCC server.&quot; },
  { term: &quot;Reverse Map Table (RMP)&quot;, definition: &quot;Hardware-maintained table in AMD SEV-SNP recording owner and validation state for every 4 KB physical page. Defends against SEVered-style hypervisor remap attacks by construction.&quot; },
  { term: &quot;Microsoft Azure Attestation (MAA)&quot;, definition: &quot;Managed Microsoft verifier service that consumes hardware attestation evidence (SEV-SNP, TDX, SGX, vTPM) and issues a signed JWT whose claims downstream relying parties consume.&quot; },
  { term: &quot;Secure Key Release (SKR)&quot;, definition: &quot;Azure Key Vault Premium / Managed HSM capability that gates release of a wrapped key on a successful MAA JWT verification against a customer-defined release policy.&quot; },
  { term: &quot;Transparency Log (Apple PCC)&quot;, definition: &quot;Append-only public log of every production PCC node software image hash. The user&apos;s device refuses to forward a request to a node whose image hash is not in the log.&quot; },
  { term: &quot;Security Protocol and Data Model (SPDM)&quot;, definition: &quot;DMTF DSP0274 standard for mutually-authenticated PCIe-endpoint sessions, used by the NVIDIA H100 CC-On architecture to bind the host CPU TEE to the GPU.&quot; },
  { term: &quot;Oblivious HTTP (OHTTP, RFC 9458)&quot;, definition: &quot;IETF protocol for forwarding HTTP requests through a third-party relay that strips the client IP, preventing the origin or any single intermediary from linking requests to a client.&quot; }
]} /&amp;gt;&lt;/p&gt;
</content:encoded><category>confidential-computing</category><category>apple-private-cloud-compute</category><category>azure-confidential-computing</category><category>attestation</category><category>trusted-execution-environment</category><category>ai-privacy</category><category>h100</category><category>transparency-log</category><author>noreply@paragmali.com (Parag Mali)</author></item><item><title>Apple Secure Enclave vs Microsoft Pluton: Two Roads to Hardware Root of Trust</title><link>https://paragmali.com/blog/apple-secure-enclave-vs-microsoft-pluton-two-roads-to-hardwa/</link><guid isPermaLink="true">https://paragmali.com/blog/apple-secure-enclave-vs-microsoft-pluton-two-roads-to-hardwa/</guid><description>How Apple SEP and Microsoft Pluton solve the same problem -- keeping your secrets safe from a compromised OS -- using two very different silicon strategies.</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate><content:encoded>
**Apple Secure Enclave and Microsoft Pluton solve the same problem -- keeping your keys, biometrics, and disk-encryption secrets safe even when the operating system is compromised -- by way of two different silicon strategies.** Apple gives the SEP its own physical CPU core, its own L4-derived microkernel (sepOS), and a mailbox API that no app can bypass. Microsoft drops Pluton onto the SoC die as a TPM 2.0-compatible subsystem patched through Windows Update. The differences shape everything downstream: who can patch the firmware, what attacks remain in scope, and which APIs developers actually call. This article walks through the architectures, the API surfaces, the published attacks (checkm8, LPC sniffing, faulTPM), and the cross-platform standards (FIDO2/WebAuthn) that paper over the divide.
&lt;h2&gt;1. The bus that taught everyone a lesson&lt;/h2&gt;
&lt;p&gt;In 2021, a researcher at Pulse Security wired a forty-dollar FPGA to the LPC bus of a Microsoft Surface Pro 3 and a Lenovo laptop, captured a handful of bytes as the machines powered on, and pulled the BitLocker Volume Master Key out of the air. Then they decrypted the drives. They wrote the whole thing up, with photos of the soldering and an open-source sniffer named &lt;code&gt;lpc_sniffer_tpm&lt;/code&gt; (Pulse Security: Sniff, there leaks my BitLocker key [@pulse-tpm-sniff]).&lt;/p&gt;
&lt;p&gt;The hardware was working exactly as designed.&lt;/p&gt;
&lt;p&gt;That is what makes the story interesting. The Trusted Platform Module released the disk-encryption key the moment the boot configuration matched its sealed policy. It then handed the key, in cleartext, to the CPU over a physical wire on the motherboard. Anyone who could touch that wire could read the key. The chip, the spec, the OS -- all of them did precisely what the standard required. The threat model just never accounted for somebody putting probes on a laptop.&lt;/p&gt;
&lt;p&gt;This is the problem hardware-rooted security has spent twenty years trying to dig itself out of. If you trust software, malware wins. If you trust software-plus-discrete-TPM, the bus wins. If you trust software-plus-firmware-TPM, the host operating system&apos;s privileged-mode bugs win. Every layer you add closes one class of attack and opens another.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Hardware roots of trust exist because no purely software-defined boundary can survive an attacker who runs code at the same privilege level you do. The only way out is to put the secrets somewhere your main CPU literally cannot read.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Apple and Microsoft both reached the same conclusion roughly a decade apart, and built almost opposite answers. Apple shipped the Secure Enclave Processor (SEP) with the A7 chip in the iPhone 5s in September 2013 [@apple-sep-chapter] -- a dedicated ARM core inside the application SoC, running its own microkernel, talking to the rest of the phone through a hardware mailbox. Microsoft announced Pluton in November 2020 [@ms-pluton-announce], but had been shipping Pluton-class silicon since the original Xbox One in 2013 [@ms-pluton-learn]; the Windows version is an on-die security subsystem that pretends to be a TPM 2.0 chip and accepts firmware updates over Windows Update.&lt;/p&gt;
&lt;p&gt;Both companies looked at the same threat -- a curious adversary with a screwdriver, an OS-level rootkit, or a $40 logic analyzer -- and decided the answer was to move the keys off the bus. They just disagreed about where to put them.&lt;/p&gt;

A piece of silicon that the rest of a system anchors its security claims to. Keys generated inside the RoT never leave; measurements taken by the RoT are signed by it; software running outside the RoT cannot rewrite the RoT&apos;s behavior. The &quot;root&quot; is the part the rest of the trust chain reduces down to.

A cryptoprocessor specified by the Trusted Computing Group. TPM 2.0 -- the current version, published in 2014 and revised since [@tcg-tpm2] -- defines Platform Configuration Registers (PCRs), an Endorsement Key burned at manufacture, key creation and sealing primitives, and the `TPM2_Quote` command for remote attestation. A TPM can be discrete (its own chip), firmware (running inside another security subsystem), or virtual.
&lt;p&gt;This article is the comparison nobody quite writes, partly because both vendors prefer to talk about themselves and partly because the technologies look superficially similar. They are not. The architectures differ. The threat models differ. The patch channels differ. The developer APIs differ enough that the same security goal -- &quot;store this key so nothing but the user&apos;s biometric can use it&quot; -- produces wildly different code on each side. By the end of this you should know which one is in your device, why it is there, what it actually defends against, and where the academic literature has already poked holes.&lt;/p&gt;

flowchart LR
    subgraph Discrete[&quot;Discrete TPM (sniffable bus)&quot;]
        CPU1[CPU] -- LPC/SPI --&amp;gt; TPM[Discrete TPM chip]
    end
    subgraph SEP[&quot;Apple SEP (separate core)&quot;]
        AP[Application Processor] -- mailbox --&amp;gt; SEPCore[SEP core + sepOS]
    end
    subgraph Pluton[&quot;Microsoft Pluton (on-die subsystem)&quot;]
        CPU2[CPU] -- on-die fabric --&amp;gt; PlutonSub[Pluton subsystem]
    end
&lt;p&gt;The journey from &quot;trust the OS&quot; to &quot;trust the silicon that even the OS cannot read&quot; is the story of the last fifteen years of platform security. The Surface Pro 3 attack is what happens when you do half of it. Apple&apos;s and Microsoft&apos;s answers are what it looks like when you do all of it -- in two opposite ways.&lt;/p&gt;
&lt;h2&gt;2. Apple&apos;s answer: a small computer inside your phone&lt;/h2&gt;
&lt;p&gt;The Apple Secure Enclave Processor is a separate physical CPU core, on the same die as the application processor, with its own memory, its own boot ROM, its own operating system, and its own random number generator. Apple&apos;s own framing in the Platform Security Guide [@apple-sep-chapter] is that the SEP &quot;provides the foundation for the secure generation and storage of the keys necessary for encrypting data at rest.&quot; That is what it does. &lt;em&gt;How&lt;/em&gt; it does it is what is interesting.&lt;/p&gt;
&lt;h3&gt;2.1 What sits on the die&lt;/h3&gt;
&lt;p&gt;Inside an A-series or M-series SoC, the SEP is a distinct cluster. According to Apple&apos;s published architecture, it includes (Apple Platform Security: Secure Enclave [@apple-sep-chapter]):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A dedicated processor core (not a SMT thread, not a shared core) running at a lower clock than the application cores.&lt;/li&gt;
&lt;li&gt;A Memory Protection Engine (MPE) that encrypts every cache line going to or from SEP-owned DRAM.&lt;/li&gt;
&lt;li&gt;A True Random Number Generator (TRNG) seeded by silicon noise.&lt;/li&gt;
&lt;li&gt;A hardware AES engine and a Public Key Accelerator (PKA) for ECC and RSA.&lt;/li&gt;
&lt;li&gt;A boot ROM masked in silicon at fabrication time.&lt;/li&gt;
&lt;li&gt;From A13 onward, a relationship with an external Secure Storage Component (SSC) [@apple-ssc] that provides monotonic counters and replay-protected non-volatile storage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The lower clock speed is not an accident. Apple explicitly notes that the SEP &quot;is designed to operate efficiently at a lower clock speed that helps to protect it against clock and power attacks&quot; (Apple Platform Security [@apple-sep-chapter]). Side-channel-resistance starts at the timing budget.&lt;/p&gt;

Apple&apos;s dedicated security coprocessor, introduced in the A7 SoC in September 2013 [@apple-a-series]. Each Apple-designed SoC since contains one SEP. It runs `sepOS`, an Apple customization of the L4 microkernel, and exposes its services only via a tightly defined mailbox interface from the application processor.

The operating system the SEP runs. Apple describes it as &quot;an Apple-customized version of the L4 microkernel&quot; (Apple Platform Security: Secure Enclave [@apple-sep-chapter]). It is independent of iOS, iPadOS, or macOS, ships in the same firmware bundle as those operating systems, and is signed by Apple. The microkernel design constrains the trusted computing base and forces cross-service communication through IPC.
&lt;h3&gt;2.2 The boot chain, in order&lt;/h3&gt;
&lt;p&gt;When you press the power button, two CPUs come up at once. The application processor begins executing its boot ROM, and the SEP begins executing its own. They are independent boot processes that meet later, after both sides have verified their own firmware.&lt;/p&gt;

sequenceDiagram
    participant AP as Application Processor
    participant SEP as Secure Enclave Processor
    participant ROM as SEP Boot ROM (mask)
    participant Flash as System Storage
    Note over AP,SEP: Reset
    AP-&amp;gt;&amp;gt;AP: Execute AP Boot ROM
    SEP-&amp;gt;&amp;gt;ROM: Execute SEP Boot ROM
    ROM-&amp;gt;&amp;gt;Flash: Load sepOS image
    ROM-&amp;gt;&amp;gt;ROM: Verify signature against Apple root key
    alt Signature valid
        ROM-&amp;gt;&amp;gt;SEP: Launch sepOS
        SEP-&amp;gt;&amp;gt;SEP: Initialize MPE, derive UID-tangled keys
    else Signature invalid
        ROM-&amp;gt;&amp;gt;SEP: Halt
    end
    AP--&amp;gt;&amp;gt;SEP: Mailbox handshake
    SEP--&amp;gt;&amp;gt;AP: Available services advertised
&lt;p&gt;The SEP boot ROM is mask ROM. That phrase carries weight. It means the bits were etched into the silicon at fabrication and cannot be rewritten. Apple cannot patch the SEP boot ROM with a software update, even if Apple wants to. This is a feature -- nobody else can patch it either -- and a liability. We will return to it when we discuss checkm8.&lt;/p&gt;
&lt;p&gt;After the SEP boot ROM verifies and launches &lt;code&gt;sepOS&lt;/code&gt;, the SEP holds two values fused into the silicon at manufacture: a Unique ID (UID) and a Group ID (GID). The UID is per-device. The GID is per-product-family. Both are kept inside the SEP and never appear outside it. Keys derived from the UID are tangled to the specific piece of silicon; you cannot lift the wrapped key, move it to another phone, and unwrap it. The chip is physically the wrap-and-unwrap oracle.The UID is also why factory-reset really does erase your data. The data-protection key hierarchy roots at a key derived from the UID and a per-file random; rotate the right intermediate and every wrapped file becomes unrecoverable noise.&lt;/p&gt;
&lt;h3&gt;2.3 The Memory Protection Engine&lt;/h3&gt;
&lt;p&gt;The SEP&apos;s RAM is, physically, in the same DRAM module as everything else. A naive design would let the application processor read it. The MPE prevents that. Every cache line bound for SEP memory is encrypted with AES in XEX mode (a tweakable mode similar to disk-encryption XTS) and authenticated with a CMAC tag. The tweak includes the physical address, so an attacker cannot relocate ciphertext to a different location and have it still verify (Apple Platform Security: Secure Enclave [@apple-sep-chapter]).&lt;/p&gt;
&lt;p&gt;Starting with the A11 SoC, the MPE added an anti-replay value per protected block, with the anti-replay tree rooted in dedicated on-die SRAM. The threat that introduces is: an attacker who can capture the encrypted DRAM contents at time &lt;code&gt;T1&lt;/code&gt; and overwrite the DRAM with that snapshot at time &lt;code&gt;T2&lt;/code&gt; -- a &quot;store, rewind, replay&quot; attack. Tree-rooted anti-replay defeats it because the root in SRAM does not match the old leaves the attacker re-injected.&lt;/p&gt;
&lt;p&gt;The tweakable XEX construction has the property that two cache lines containing the same plaintext at different addresses produce different ciphertext, which prevents the pattern-leakage you get from ECB-style encryption. CMAC adds a 128-bit integrity tag.&lt;/p&gt;
&lt;p&gt;From the A14 and M1 generation onward, the MPE handles two ephemeral keys: one for SEP-private data and one for data shared with the Secure Neural Engine (used during Face ID matching). The keys are regenerated at every reset, so even capturing the DRAM ciphertext across a reboot leaks nothing.&lt;/p&gt;
&lt;h3&gt;2.4 The Secure Storage Component&lt;/h3&gt;
&lt;p&gt;Anti-hammering -- the property that a passcode-guessing attacker is rate-limited and eventually locked out -- requires reliable monotonic state that the attacker cannot rewind. Mask ROM and on-die SRAM are not enough on their own because power loss erases SRAM. From the A13 SoC onward, Apple solves this by adding a separate chip on the logic board: the Secure Storage Component (SSC) [@apple-ssc].&lt;/p&gt;
&lt;p&gt;The SSC is small, tamper-resistant, and only the SEP can talk to it. It stores monotonic counters and entropy values that the SEP uses to bind authenticated storage to wall-clock state. If you steal the phone, dump the encrypted blobs, &quot;rewind&quot; by overwriting the flash with an earlier copy, and try to brute-force the passcode again, the SSC&apos;s counters no longer match. Anti-hammering survives the rewind.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; A monotonic counter sounds easy until you remember that an attacker with the physical device can pull power at any instant, including in the middle of an increment. The SSC has to atomically commit counter updates while also defending against deliberate transient brown-outs. This is the kind of thing that takes a dedicated tamper-resistant chip rather than a software loop.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;2.5 The mailbox API&lt;/h3&gt;
&lt;p&gt;Userspace apps never touch the SEP directly. The application processor reaches it through a hardware mailbox -- a small ring of registers and shared memory that defines the entire API surface from AP to SEP. The kernel exposes higher-level services on top: Touch ID and Face ID matching, Keychain entries flagged with &lt;code&gt;kSecAttrTokenIDSecureEnclave&lt;/code&gt; [@apple-keychain], Data Protection class keys, App Attest signing, and so on.&lt;/p&gt;
&lt;p&gt;The constraint is severe. The SEP exposes a fixed set of operations. No app, and no part of the OS, can ask the SEP to do something the firmware did not already implement. Compromise of the AP-side kernel does not produce an arbitrary-code-execution primitive on the SEP. It produces, at most, the ability to call SEP services from a hostile place -- and those services still require user authentication (FaceID, TouchID, passcode) before they release sensitive operations.This is the dual of the TPM 2.0 design philosophy. A TPM defines a wide command set in its spec; the firmware implements that command set; software calls those commands. The SEP defines a narrow service set bespoke to Apple&apos;s products; everything else is rejected.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The SEP is not a generic crypto coprocessor. It is a small fixed-purpose computer that knows how to do exactly the operations Apple&apos;s platforms need, and nothing else. Its security comes from being deliberately less programmable than a TPM.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you had to summarize what Apple built in one sentence: they put a second computer in the phone, gave it the keys, gave it a lock on its own door, and left a slot for messages to slide through. That is the design.&lt;/p&gt;
&lt;h2&gt;3. Microsoft&apos;s answer: kill the bus, keep the standard&lt;/h2&gt;
&lt;p&gt;Apple had the luxury of designing the application processor and the security processor together. Microsoft does not. Microsoft sells software that runs on AMD, Intel, and Qualcomm silicon, on chassis from Dell, HP, Lenovo, Acer, Asus, Microsoft itself, and a long tail of others. The discrete TPM 2.0 standard fixes a contract between Windows and a piece of trusted hardware that any vendor can implement. Pluton&apos;s job was to keep that contract while removing the parts that did not survive contact with reality.&lt;/p&gt;
&lt;p&gt;The first part of reality Pluton kills is the bus.&lt;/p&gt;
&lt;h3&gt;3.1 The Xbox lineage&lt;/h3&gt;
&lt;p&gt;Microsoft did not invent Pluton for Windows. The architecture started in the original Xbox One, shipping in 2013 [@ms-pluton-learn], where it served as the security subsystem that prevented modchipping and verified the boot chain. The same architecture was extended to the Azure Sphere MT3620 microcontroller in 2018 [@ms-pluton-learn], aimed at IoT devices. The Windows variant -- the one most people mean when they say &quot;Pluton&quot; -- was announced in November 2020 [@ms-pluton-announce].&lt;/p&gt;
&lt;p&gt;The first shipping Windows silicon containing Pluton was the AMD Ryzen 6000 series (&quot;Rembrandt&quot;) in January 2022. Qualcomm Snapdragon 8cx Gen 3 and the Snapdragon X family followed in 2023-2024. Intel&apos;s first Pluton-bearing CPU was Core Ultra Series 2 (&quot;Lunar Lake&quot;) in late 2024. As of the current Microsoft documentation, the supported matrix is &quot;AMD Ryzen 6000/7000/8000/9000 and Ryzen AI Series; Intel Core Ultra 200V Series, Ultra Series 3; Qualcomm Snapdragon 8cx Gen 3 and Snapdragon X Series&quot; (Microsoft Pluton Security Processor, Microsoft Learn [@ms-pluton-learn]).This is a deployment claim. Pluton&apos;s &lt;em&gt;presence&lt;/em&gt; on these CPUs is documented by the silicon vendors and Microsoft. Whether Pluton is &lt;em&gt;enabled by default&lt;/em&gt; on a given laptop varies by OEM. Practitioners verifying real fleets need to confirm via Windows&apos; Device Manager and &lt;code&gt;tpm.msc&lt;/code&gt; whether the active TPM advertises the Microsoft Pluton manufacturer ID rather than a discrete vendor.&lt;/p&gt;
&lt;h3&gt;3.2 What sits on the die&lt;/h3&gt;
&lt;p&gt;Pluton is a security subsystem placed inside the SoC, not on a separate chip on the motherboard. That single architectural decision eliminates the LPC/SPI bus that defeats discrete TPMs. Microsoft&apos;s framing in the announcement post: the design targets attacks &quot;where an attacker can steal or temporarily gain physical access to a PC ... on the communication channel between the CPU and TPM&quot; (Microsoft Security Blog [@ms-pluton-announce]).&lt;/p&gt;

Microsoft-authored security subsystem integrated into the SoC die of supported AMD, Intel, and Qualcomm processors. Pluton presents a TPM 2.0 interface to Windows but adds firmware-update via Windows Update and capsule, on-die placement (no external bus to sniff), and a Microsoft-maintained codebase that Microsoft describes as &quot;Rust-based&quot; from 2024 onward [@ms-pluton-learn] on AMD and Intel platforms.

Microsoft&apos;s name for keys that are &quot;never exposed outside the protected hardware, even to the Pluton firmware itself&quot; (Microsoft Security Blog, 2020 [@ms-pluton-announce]). Conceptually equivalent to Apple&apos;s UID-tangled keys: a hardware boundary that even the firmware running on top cannot cross.
&lt;p&gt;Inside the die, Pluton runs its own small processor (the vendors do not publish the ISA in customer-facing docs), with its own ROM, on-die RAM, hardware crypto engines, and a hardware-confined key store. It exchanges messages with the host through a mailbox interface analogous to SEP&apos;s, but the higher-level wire protocol it speaks back to the host is TPM 2.0.&lt;/p&gt;
&lt;h3&gt;3.3 TPM 2.0 as the personality, not the limit&lt;/h3&gt;
&lt;p&gt;Pluton implements the TPM 2.0 command set. That means BitLocker, Windows Hello, Credential Guard, System Guard, Measured Boot, and Device Health Attestation all work against Pluton with no modifications -- they think they are talking to a TPM 2.0 chip, and they are (Microsoft Pluton as TPM, Microsoft Learn [@ms-pluton-as-tpm]).&lt;/p&gt;
&lt;p&gt;TPM 2.0 compatibility is the compromise that buys Microsoft adoption. The entire Windows security stack was already designed against the TCG TPM 2.0 wire protocol. Forcing it onto a new API would have required years of platform engineering. Forcing it onto a new API and getting OEMs to adopt the new chip would have required forever.&lt;/p&gt;

You could read the Pluton design as &quot;TPM 2.0 with a software-update channel.&quot; That is mostly right and is how the documentation usually describes it. But Pluton also supports Pluton-specific paths beyond TPM 2.0 -- the Microsoft Learn documentation [@ms-pluton-learn] refers to Pluton-rooted credentials and attestation flows that ride alongside the TPM personality. The TPM interface is the lowest common denominator, not the ceiling.

flowchart TD
    subgraph Windows[&quot;Windows OS&quot;]
        BL[BitLocker]
        WH[Windows Hello]
        CG[Credential Guard]
        DHA[Device Health Attestation]
    end
    subgraph Pluton[&quot;Pluton subsystem on SoC&quot;]
        TPMpers[&quot;TPM 2.0 personality -- (PCRs, EK, AK, Quote, Seal)&quot;]
        MSrooted[&quot;Microsoft-rooted services -- (Pluton credentials, MS-signed firmware)&quot;]
    end
    BL --&amp;gt; TPMpers
    WH --&amp;gt; TPMpers
    CG --&amp;gt; TPMpers
    DHA --&amp;gt; TPMpers
    DHA --&amp;gt; MSrooted
    WH --&amp;gt; MSrooted
&lt;h3&gt;3.4 The patch channel&lt;/h3&gt;
&lt;p&gt;This is the design feature Microsoft most emphasizes and where the philosophical break with Apple is most visible. Pluton firmware can be updated through two paths (Microsoft Pluton Security Processor, Microsoft Learn [@ms-pluton-learn]):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;UEFI capsule update&lt;/strong&gt;. The Pluton firmware lives on the system&apos;s SPI flash and is loaded during early boot. A capsule update -- delivered via the same UEFI mechanism that updates BIOS -- can replace it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic loading via Windows Update&lt;/strong&gt;. Microsoft can ship a new Pluton firmware blob through Windows Update; the OS loader picks it up the next time the subsystem comes online.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Apple&apos;s update model is essentially the first path with a different label. The SEP firmware ships inside the iOS/macOS image bundle, signed by Apple, and is loaded at boot. There is no Windows-Update-style ambient channel separate from the OS image.&lt;/p&gt;

Patchable. By Microsoft. Through the channel users already trust. This is the single biggest practical advantage Pluton has over discrete TPMs, and the single biggest political problem.
&lt;p&gt;The structure of this difference is what makes the Apple-vs-Microsoft comparison sharp. Apple controls the entire silicon, OS, and update channel. The patch path is fast because everything is one vendor. Microsoft does not control the silicon -- AMD, Intel, and Qualcomm do -- but they wrote the firmware, signed it, and route it through Windows Update. The patch path is fast because Microsoft has been delivering OS-level updates to a billion machines for a quarter century.&lt;/p&gt;
&lt;h3&gt;3.5 Rust as the firmware base&lt;/h3&gt;
&lt;p&gt;In 2024 Microsoft began shipping Pluton firmware on AMD and Intel with what the documentation calls &quot;a Rust-based firmware foundation given the importance of memory safety&quot; (Microsoft Pluton Security Processor, Microsoft Learn [@ms-pluton-learn]). This is, as far as we can tell from primary sources, the most prominent shipping production use of Rust inside an x86 platform security subsystem. It addresses the most common class of TPM firmware bugs, which historically have been C memory-safety issues -- bounds errors, use-after-frees, integer overflows.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Rust eliminates the spatial and temporal memory-safety bugs that dominate CVE counts in C-based firmware. It does not prevent logic bugs, side-channel leaks, or fault-injection vulnerabilities. The faulTPM work, discussed in Section 7, exploits the underlying voltage rail rather than firmware bugs -- and the same physics apply whether the firmware is in C or Rust.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If the SEP&apos;s design philosophy is &quot;small fixed-purpose computer,&quot; the Pluton design philosophy is &quot;in-die TPM 2.0 we can actually patch, written carefully enough that we will not have to patch it often.&quot; Two different bets about which property mattered most.&lt;/p&gt;
&lt;h2&gt;4. The tightly-coupled vs SoC-integrated trade-off&lt;/h2&gt;
&lt;p&gt;So far we have two architectures: SEP as a separate physical core, Pluton as an on-die subsystem. They sound different. They are different. But &quot;separate core&quot; and &quot;on-die subsystem&quot; both refuse the discrete-TPM design where the security chip is &lt;em&gt;off&lt;/em&gt; the SoC and reachable over a motherboard bus. Why did both vendors converge there, and what is the trade-off between SEP-style and Pluton-style integration?&lt;/p&gt;
&lt;h3&gt;4.1 What both reject&lt;/h3&gt;
&lt;p&gt;The discrete TPM 2.0 model is the baseline. A separate chip, often a Nuvoton, Infineon, or ST device on the motherboard [@pulse-tpm-sniff], connected to the platform via LPC, SPI, or I²C. The TCG spec it implements is excellent. The physical placement is the problem.&lt;/p&gt;
&lt;p&gt;Pulse Security&apos;s attack is the canonical demonstration. With &lt;code&gt;lpc_sniffer_tpm&lt;/code&gt; on a $40 FPGA, they probed the LPC bus of a Surface Pro 3 as it booted, captured the bytes the TPM returned for the unsealed Volume Master Key, and used those bytes to decrypt the disk (Pulse Security: TPM Sniffing [@pulse-tpm-sniff]). The TPM was working correctly. The bus was the problem. There is a mitigation -- pre-boot PIN or USB key, so the VMK is bound to something not on the wire -- but the default BitLocker configuration on most enterprise hardware does not enable it.&lt;/p&gt;

The class of physical-access attacks in which an adversary attaches probes to the motherboard bus carrying TPM responses, captures the cleartext key material the TPM legitimately returns, and uses it directly. Defended against by either eliminating the external bus (Pluton, SEP) or by requiring authenticated/encrypted sessions plus pre-boot user authentication (TPM 2.0 parameter encryption, BitLocker TPM+PIN).
&lt;p&gt;Both SEP and Pluton refuse to expose that bus. The keys never appear on an external wire. That is the structural property both architectures buy by being on the SoC.&lt;/p&gt;
&lt;h3&gt;4.2 Tightly-coupled (SEP) vs subsystem-on-die (Pluton)&lt;/h3&gt;
&lt;p&gt;After agreeing on &quot;no external bus,&quot; the two diverge sharply on what &quot;on the SoC&quot; should look like.&lt;/p&gt;

flowchart TD
    subgraph SEPDie[&quot;Apple SoC (A14, M1, M2, etc.)&quot;]
        SEPCore[&quot;SEP core -- own voltage -- own clock -- own ROM&quot;]
        MPE[&quot;Memory Protection Engine&quot;]
        APCore[&quot;Application processor cores&quot;]
        SEPCore -- mailbox --&amp;gt; APCore
        SEPCore --&amp;gt; MPE
    end
    subgraph PlutonDie[&quot;AMD/Intel/Qualcomm SoC&quot;]
        PSub[&quot;Pluton subsystem -- (may share voltage rail -- with security die area)&quot;]
        PSP[&quot;Vendor security subsystem -- (AMD PSP / Intel CSME)&quot;]
        Cores[&quot;Application cores&quot;]
        PSub -- on-die fabric --&amp;gt; Cores
        PSub -.runs on top of.-&amp;gt; PSP
    end
&lt;p&gt;The SEP is a separate physical core with its own clock, its own voltage rail, and crucially no shared microarchitecture with the application processor. That last point matters because the family of cross-thread, cross-core, and frequency-scaling side channels -- Meltdown, Spectre, Foreshadow, Hertzbleed, and their cousins -- generally requires the attacker code to be co-resident on the same physical pipeline or share a microarchitectural resource. The SEP simply does not share execution resources with potentially hostile code on the application cores (Apple Platform Security: Secure Enclave Processor [@apple-sep-chapter]).&lt;/p&gt;
&lt;p&gt;Pluton-on-AMD is implemented inside the AMD Platform Security Processor environment. Pluton-on-Intel is implemented inside Intel&apos;s Converged Security and Management Engine. These are pre-existing vendor security subsystems Microsoft layered Pluton atop. The Pluton subsystem is logically separate, with its own firmware and its own key store. Whether it has a fully separate physical voltage rail and clock domain from the application cores is not something the public documentation states clearly, and the answer almost certainly varies by silicon partner.This is a place where the comparison is hardest to make crisply. Apple has a single answer because Apple makes one SoC family. Microsoft has three answers because Pluton lives inside whatever security subsystem AMD, Intel, or Qualcomm already provide. The detail-level guarantees vary.&lt;/p&gt;
&lt;h3&gt;4.3 The SGX cautionary tale&lt;/h3&gt;
&lt;p&gt;There is a third design point worth flagging because both vendors implicitly chose against it: putting the trusted execution environment &lt;em&gt;inside&lt;/em&gt; the application CPU cores themselves. Intel SGX, introduced in 2015 [@intel-sgx], did exactly that. Enclaves were memory regions with hardware access control inside the same cores running ordinary software.&lt;/p&gt;
&lt;p&gt;SGX was a beautiful idea and an academic catastrophe. Foreshadow, ZombieLoad, SgxPectre, Plundervolt, and a long sequence of related attacks reused the side-channel-rich microarchitecture of modern Intel cores to leak enclave contents. Intel deprecated SGX on most consumer processors in 2022 [@intel-sgx-deprecation], retaining it on server SKUs for confidential computing scenarios where the threat model is different.&lt;/p&gt;
&lt;p&gt;The lesson is something both Apple and Microsoft seem to have absorbed: a trusted execution environment that shares any microarchitectural state with the workloads it must protect from is structurally compromised, because microarchitecture is too rich and too leaky to perfectly isolate. The SEP rejects this by living on its own core. Pluton rejects it by living in a separate subsystem.&lt;/p&gt;

Arm TrustZone, introduced in Arm v7 around 2008 [@arm-trustzone], pioneered the &quot;secure world / normal world&quot; split inside a single core. TrustZone is closer to SGX than it is to SEP or Pluton in this respect: secure world and normal world share the same physical pipeline. TrustZone influenced both SEP and Pluton in the sense that &quot;you need a separate execution environment for security code&quot; became table stakes; both companies then moved that environment off the application core entirely.
&lt;h3&gt;4.4 The trade-off in one sentence&lt;/h3&gt;
&lt;p&gt;A dedicated core (SEP) maximises side-channel resistance and minimises attack surface, at the cost of vendor proprietary lock-in and zero portability. An on-die subsystem (Pluton) preserves the TPM 2.0 standard, ships on three silicon vendors, and inherits the security guarantees of the underlying vendor security subsystem -- whose history, as we will see, is less reassuring than Apple&apos;s monopoly on its own silicon.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; SEP wins on isolation. Pluton wins on portability. Neither wins on both. The choice you make at the SoC level constrains every API, every patch path, and every threat-model claim downstream.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;5. The APIs developers actually call&lt;/h2&gt;
&lt;p&gt;Architectures are interesting. What ships in production code is what determines whether developers use these things correctly. The API surfaces are wildly different, and the difference matters.&lt;/p&gt;
&lt;h3&gt;5.1 Apple: SecKey, App Attest, LocalAuthentication&lt;/h3&gt;
&lt;p&gt;On Apple platforms, the SEP is exposed through a handful of frameworks. The most common entry point is &lt;code&gt;SecKey&lt;/code&gt; in the Security framework, with key attributes that bind the key to the SEP:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kSecAttrTokenIDSecureEnclave&lt;/code&gt; makes the key SEP-resident.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kSecAttrAccessControl&lt;/code&gt; with &lt;code&gt;LAContext&lt;/code&gt; adds biometric or passcode gating.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kSecAttrIsPermanent&lt;/code&gt; puts it in the Keychain [@apple-keychain].&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The key itself never leaves the SEP. The application receives an opaque handle. Asking the framework to sign a message turns into a mailbox call to the SEP, which evaluates the access-control policy (e.g., &quot;the user must FaceID-authenticate within the last five seconds&quot;) and either signs or refuses.&lt;/p&gt;
&lt;p&gt;{`
// This is a conceptual model of what happens when iOS code asks the SEP
// to sign a message with a key whose private half lives inside the SEP.
// The real code is Swift + Security.framework; this JS captures the logic.&lt;/p&gt;
&lt;p&gt;function generateSEPKey(accessControl) {
  // SEP generates the keypair internally
  const priv = sepRandomBytes(32);            // never leaves SEP
  const pub  = ecP256ScalarMul(priv, BASE_G);
  const blob = aesKeyWrap(sepUIDDerivedKey, priv);
  return { publicKey: pub, handle: opaque(blob), policy: accessControl };
}&lt;/p&gt;
&lt;p&gt;function sign(handle, message) {
  const policy = lookupPolicy(handle);
  // SEP enforces the access control: must the user have authenticated recently?
  if (!policy.satisfied(LAContext.current)) {
    return { error: &quot;user authentication required&quot; };
  }
  const blob = lookup(handle);
  const priv = aesKeyUnwrap(sepUIDDerivedKey, blob);
  return ecdsaP256Sign(priv, sha256(message));
}&lt;/p&gt;
&lt;p&gt;const k = generateSEPKey({ requireBiometric: true });
console.log(&quot;Public key returned to the app:&quot;, k.publicKey);
console.log(&quot;Private key location: inside SEP, never accessible to app code&quot;);
`}&lt;/p&gt;
&lt;p&gt;Beyond &lt;code&gt;SecKey&lt;/code&gt;, the SEP underpins:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LocalAuthentication&lt;/strong&gt; -- Face ID / Touch ID matching happens inside the SEP. The biometric template never leaves the SEP, and the application is only told yes/no.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DeviceCheck and App Attest&lt;/strong&gt; -- documented in the Apple Platform Security Guide [@apple-platform-security]. App Attest gives each app installation a SEP-rooted asymmetric key whose certificate chains to Apple&apos;s CA, letting servers verify that a sign-up came from a genuine app on a genuine Apple device.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Protection / FileVault&lt;/strong&gt; -- per-file class keys are wrapped under SEP-held intermediate keys.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apple Pay&lt;/strong&gt; -- payment credentials are SEP-resident and gated on biometric/passcode authentication.&lt;/li&gt;
&lt;/ul&gt;

Apple&apos;s hardware-backed app integrity service [@apple-platform-security]. Each install of each app receives a unique SEP-resident key whose attestation certificate, signed by Apple, lets a back-end server verify that the request originates from a non-tampered installation. The closest cross-platform analogue is Google Play Integrity API; the closest discrete-TPM analogue is TPM 2.0 attestation, but App Attest is more strongly bound to the specific app installation.
&lt;h3&gt;5.2 Microsoft: TBS, NCrypt, Pluton-rooted credentials&lt;/h3&gt;
&lt;p&gt;On Windows, the TPM 2.0 personality means Pluton is reached through the same APIs as any TPM:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TPM Base Services (TBS)&lt;/strong&gt; -- the low-level Win32 API for sending TPM 2.0 commands.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CNG (Cryptography Next Generation)&lt;/strong&gt; with &lt;code&gt;NCrypt&lt;/code&gt; and the Microsoft Platform Crypto Provider -- the higher-level key API that asks &quot;store this key in the TPM, gated on the user&apos;s PIN.&quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BCryptDecrypt / BCryptSignHash&lt;/strong&gt; as the in-process crypto API on top.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The DPAPI key-protection model -- file/blob protection rooted in user logon credentials -- has a CNG variant documented as CNG DPAPI [@ms-cng-dpapi] that integrates with TPM-rooted hierarchies. Above that sit the consumer-facing systems: BitLocker for disk encryption [@ms-bitlocker], Windows Hello for credential storage, Credential Guard for isolating LSA secrets in a virtualization-based security enclave, and Microsoft Entra ID conditional access for cloud sign-in.&lt;/p&gt;

The TCG TPM 2.0 Library Specification [@tcg-tpm2] defines the command set, object hierarchy, and key-handling semantics of TPM 2.0 chips. Commands include `TPM2_CreatePrimary`, `TPM2_Create`, `TPM2_Load`, `TPM2_Seal`, `TPM2_Unseal`, `TPM2_Quote`, and `TPM2_Certify`. Both discrete TPMs and Pluton implement this command set.

flowchart LR
    subgraph Apple[&quot;Apple application stack&quot;]
        App[App] --&amp;gt; Sec[&quot;Security.framework -- (SecKey, SecAccessControl)&quot;]
        App --&amp;gt; LA[&quot;LocalAuthentication -- (LAContext)&quot;]
        App --&amp;gt; DC[&quot;DeviceCheck / App Attest&quot;]
        Sec --&amp;gt; Mailbox[SEP mailbox]
        LA --&amp;gt; Mailbox
        DC --&amp;gt; Mailbox
        Mailbox --&amp;gt; SEPSvc[SEP services]
    end
    subgraph MS[&quot;Windows application stack&quot;]
        WApp[App] --&amp;gt; NCrypt[&quot;CNG / NCrypt&quot;]
        WApp --&amp;gt; Hello[&quot;Windows Hello&quot;]
        WApp --&amp;gt; Entra[&quot;Entra ID / Health Attestation&quot;]
        NCrypt --&amp;gt; TBS[&quot;TPM Base Services&quot;]
        Hello --&amp;gt; TBS
        Entra --&amp;gt; TBS
        TBS --&amp;gt; Pluton[&quot;Pluton (TPM 2.0 personality)&quot;]
        Entra --&amp;gt; PlutonMS[&quot;Pluton MS-rooted services&quot;]
    end
&lt;h3&gt;5.3 What the API shape tells you&lt;/h3&gt;
&lt;p&gt;The SEP API forces every call into the small set of operations the SEP firmware implements. There is no &lt;code&gt;TPM2_PolicyLocality(2)&lt;/code&gt; equivalent or &lt;code&gt;TPM2_PolicyOR&lt;/code&gt; combinator on the SEP. You ask for a key, you ask for a signature, you ask for a biometric match, and that is mostly the surface. From a developer&apos;s point of view, the SEP feels like a very small set of well-defined building blocks.&lt;/p&gt;
&lt;p&gt;The TPM 2.0 API, by contrast, is enormous. There are several hundred commands. The TPM has policy expressions, sessions, hierarchies (storage, endorsement, platform, owner), and a half-dozen attestation primitives. This expressiveness was the right call for an open standard -- the TCG had to accommodate every conceivable use case across two decades. It also means that &quot;wrote TPM 2.0 code correctly&quot; is a measurable engineering skill rather than a default.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; On Apple platforms, prefer &lt;code&gt;kSecAttrTokenIDSecureEnclave&lt;/code&gt; with &lt;code&gt;kSecAccessControl&lt;/code&gt; rather than rolling your own key handling. On Windows, prefer CNG with Microsoft Platform Crypto Provider over raw TBS unless you specifically need a TPM command not exposed by CNG. Both vendors put their good defaults in the higher-level APIs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;5.4 A note on what is &lt;em&gt;not&lt;/em&gt; exposed&lt;/h3&gt;
&lt;p&gt;Neither platform exposes the device&apos;s per-silicon root key to applications. On Apple, the UID is sealed inside the SEP; on Microsoft, the Pluton Endorsement Key is unique per chip but applications interact only with the AKs (Attestation Keys) derived from it. This is deliberate: per-device permanent keys, if exposed, enable cross-service tracking. The exposed primitives are either per-app/per-installation (App Attest), per-session (TPM2_Quote with a fresh AK), or ephemeral (a freshly-generated SEP key).&lt;/p&gt;
&lt;p&gt;That choice maps to a privacy property we will pick up in the next section: how each platform answers &quot;prove this is a real device&quot; without becoming &quot;track this specific user across every service.&quot;&lt;/p&gt;
&lt;h2&gt;6. Identity, attestation, and the privacy problem&lt;/h2&gt;
&lt;p&gt;The deepest difference between Apple and Microsoft is not architectural. It is the answer each one gives to a question that sounds simple: &lt;em&gt;what does it mean to prove a device is real?&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;6.1 Why attestation is hard&lt;/h3&gt;
&lt;p&gt;A naive answer is: burn a unique identifier into every chip and have the chip sign messages with the corresponding private key. That works for proof. It also creates a per-device pseudonym that every service can recognise and correlate. The naive answer is a surveillance disaster.&lt;/p&gt;
&lt;p&gt;A better answer keeps the unforgeability of &quot;this signature came from a real device&quot; and adds an unlinkability property: the signature does not identify &lt;em&gt;which&lt;/em&gt; device, only that it is genuine. This is what cryptographers call anonymous attestation, and the canonical construction is DAA.&lt;/p&gt;

A class of cryptographic protocols that let a hardware token sign messages in a way that proves it belongs to a group of legitimate devices without revealing *which* device. Introduced by Brickell, Camenisch, and Chen in 2004 [@brickell-2004-daa] as part of the TPM 1.2 specification work, with the elliptic-curve variant ECDAA standardized for TPM 2.0. See the Wikipedia overview [@daa-wikipedia] for the protocol skeleton.
&lt;p&gt;The mathematics of DAA rests on group signatures with selective linkability. A device runs the join protocol once with a group issuer (the &quot;Privacy CA&quot; or analogous authority) and receives a credential. It can then prove, via a Camenisch-Lysyanskaya-style signature of knowledge, that it holds such a credential without revealing which one. With ECDAA, the join and signing operations are roughly the cost of a couple of elliptic-curve multiplications.&lt;/p&gt;
&lt;p&gt;The privacy property comes with caveats. Verifiers can opt into &quot;basename&quot; linkability, where signatures from the same device addressed to the same service are linkable -- letting a service recognise a returning user without letting it correlate across services. The math has been deployed in TPM 2.0 since the 2014 spec.&lt;/p&gt;
&lt;h3&gt;6.2 The Microsoft path: TPM 2.0 attestation plus Microsoft-rooted services&lt;/h3&gt;
&lt;p&gt;Pluton inherits TPM 2.0&apos;s attestation primitives. The standard flow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Generate an Attestation Key (AK) inside the TPM, with a private half that never leaves.&lt;/li&gt;
&lt;li&gt;Certify the AK to a Privacy CA (or via ECDAA) using the Endorsement Key.&lt;/li&gt;
&lt;li&gt;Hash the boot configuration into Platform Configuration Registers (PCRs) during measured boot.&lt;/li&gt;
&lt;li&gt;Have the relying party send a fresh nonce.&lt;/li&gt;
&lt;li&gt;Issue &lt;code&gt;TPM2_Quote(AK, PCR_mask, qualifying_data=nonce)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Send the quote, the AK certificate, and the boot event log to the relying party.&lt;/li&gt;
&lt;li&gt;The relying party replays the event log, checks that the replayed PCRs match the quoted ones, validates the AK certificate chain, and validates the signature.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;attest(nonce, pcr_mask):
    AK = TPM2_Create(parent=EK, type=signing)
    AK_cert = privacy_CA.certify(AK_pub, EK_cert)    # or ECDAA group sig
    quote = TPM2_Quote(AK, pcr_mask, qualifying_data=nonce)
    return (quote, AK_cert, event_log)

verify(quote, AK_cert, event_log, expected_pcrs):
    assert privacy_CA.verify(AK_cert)
    assert ECDSA_verify(AK_cert.pub, quote.sig, quote.body)
    assert quote.qualifying_data == nonce
    assert replay_log(event_log) == quote.pcrs == expected_pcrs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That covers raw TPM 2.0. Microsoft layers on top a service called &lt;strong&gt;Device Health Attestation&lt;/strong&gt; that does the verifier work as a cloud service, supplying Reference Integrity Manifests for known-good Microsoft-signed boot states. Microsoft Entra ID conditional access policies can then refuse sign-in to devices whose Pluton-signed health attestation does not match an expected baseline (Microsoft Pluton Security Processor, Microsoft Learn [@ms-pluton-learn]).The interesting privacy property here is that ECDAA-grade unlinkability is &lt;em&gt;available&lt;/em&gt; through TPM 2.0, but Microsoft&apos;s deployed services tend to use Privacy-CA-style flows where the AK certificate is well-defined and reusable. Whether a given Microsoft attestation flow is anonymous-unlinkable or pseudonymous-linkable is a per-service detail rather than a platform property.&lt;/p&gt;
&lt;h3&gt;6.3 The Apple path: rooted in Apple&apos;s CA, scoped per app&lt;/h3&gt;
&lt;p&gt;Apple&apos;s DeviceCheck and App Attest [@apple-platform-security] take a different approach. App Attest gives each &lt;em&gt;installation of each app&lt;/em&gt; a unique SEP-resident key. The corresponding attestation certificate chains to Apple&apos;s CA. Apps prove integrity to their own back-end servers by having the server send a nonce, the SEP signing the nonce with the per-install key, and Apple&apos;s CA chain validating that the key was issued on a genuine Apple device.&lt;/p&gt;
&lt;p&gt;The privacy property is scoped differently from DAA. The key is per-installation, which means uninstalling and reinstalling the app generates a new key with no link to the old one. Across different apps on the same device, the keys are independent -- so two apps cannot collude with their respective back-ends to detect they are on the same phone. The trade-off: there is no formal anonymity within a group; the key is identifiable to its single installation, but that installation is fresh each install.&lt;/p&gt;
&lt;p&gt;DeviceCheck is older and weaker. It gives an app a two-bit value the developer can set per device, retrievable on future runs. It is fraud-signal infrastructure, not cryptographic proof.&lt;/p&gt;

DAA is a group-signature scheme; Apple&apos;s App Attest is a per-installation public-key scheme certified by Apple. They are not the same primitive. DAA gives &quot;I am in this group of devices&quot; without revealing which device. App Attest gives &quot;I am this specific installation, and Apple says it is genuine.&quot; The privacy distinction matters when the threat is correlation across services rather than correlation within a single service.
&lt;h3&gt;6.4 Where the two converge: FIDO2/WebAuthn&lt;/h3&gt;
&lt;p&gt;Both platforms expose their hardware-backed credentials through a single cross-platform standard: FIDO2/WebAuthn. When a browser asks &quot;create a credential bound to this origin, hardware-resident if possible,&quot; the underlying operating system asks SEP or Pluton to generate the key. The resulting public-key credential, signed by the device&apos;s attestation key, is what the relying party verifies (FIDO Alliance [@fido-alliance]).&lt;/p&gt;

sequenceDiagram
    participant Browser
    participant OS as OS Authenticator
    participant HW as SEP or Pluton
    participant RP as Relying Party
    RP-&amp;gt;&amp;gt;Browser: Challenge nonce, RP ID
    Browser-&amp;gt;&amp;gt;OS: navigator.credentials.create()
    OS-&amp;gt;&amp;gt;HW: Generate key bound to RP ID + user gesture
    HW--&amp;gt;&amp;gt;OS: Public key + attestation
    OS--&amp;gt;&amp;gt;Browser: Public key + signed attestation
    Browser-&amp;gt;&amp;gt;RP: Registration response
    Note over RP: Stores public key
    RP-&amp;gt;&amp;gt;Browser: Authentication challenge
    Browser-&amp;gt;&amp;gt;OS: navigator.credentials.get()
    OS-&amp;gt;&amp;gt;HW: Sign challenge (user gesture)
    HW--&amp;gt;&amp;gt;OS: Signature
    OS--&amp;gt;&amp;gt;Browser: Assertion
    Browser-&amp;gt;&amp;gt;RP: Authentication response
    RP-&amp;gt;&amp;gt;RP: Verify signature with stored pubkey
&lt;p&gt;FIDO2/WebAuthn is the most boring and most important fact about modern hardware roots of trust: from the application&apos;s point of view, you no longer need to know whether you are talking to SEP or Pluton or a discrete TPM. The same JavaScript runs on all of them. We will return to FIDO2 in Section 8.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Attestation is where Apple and Microsoft diverge most sharply on privacy philosophy. Microsoft uses TPM 2.0 with anonymous-group cryptography available but not always deployed. Apple uses per-installation keys rooted at Apple&apos;s CA. FIDO2/WebAuthn is the layer where both meet the developer at the door.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;7. What has actually broken&lt;/h2&gt;
&lt;p&gt;Architecture is a story you tell about a system. Attacks are the system&apos;s reply. Both SEP and Pluton have a public attack history; reading it carefully is the fastest way to understand the real threat model rather than the marketing one.&lt;/p&gt;
&lt;h3&gt;7.1 checkm8 and the unpatchable boot ROM&lt;/h3&gt;
&lt;p&gt;In late 2019, the researcher axi0mX published &lt;code&gt;ipwndfu&lt;/code&gt; [@ipwndfu], an exploit against a use-after-free in the SecureROM USB DFU stack of Apple SoCs from A5 through A11. The advisory carries CVE-2019-8900 [@nvd-checkm8] and CERT/CC VU#941987 [@cert-checkm8]. Because SecureROM is mask ROM -- etched into the silicon, immutable -- Apple cannot patch it. The only mitigation was new silicon. A12 and later are immune; earlier devices are permanently affected.&lt;/p&gt;
&lt;p&gt;What checkm8 buys an attacker is application-processor code execution at boot time, on a device they have physical access to. That is significant. It enables forensically sound extraction tooling -- the Elcomsoft writeup walks through exactly which iPhone models and iOS versions are supported [@elcomsoft-checkm8]. It also covers the Apple T2 chip used in 2018-2020 Intel Macs [@apple-a-series], which is built on the same A10-family silicon.&lt;/p&gt;
&lt;p&gt;But checkm8 does not, by itself, break SEP secrets. The SEP is still gated by the device passcode and the data-protection class keys. An attacker with checkm8 can run code on the AP, but they still need the passcode to unlock the user&apos;s protected data (CERT/CC VU#941987 [@cert-checkm8]). The forensic value of checkm8 comes from being able to brute-force passcodes more effectively, capture keyboard state, and access classes of data not bound to a passcode -- not from extracting SEP-held keys directly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If your organization still has 2018-2020 Intel Macs (T2-bearing) in service, they remain physical-access-attackable. The exploit is mature, the tooling is public, and the silicon will never be patched. For high-value users, retire T2 hardware in favor of Apple Silicon Macs (M1 and later, which use A14-derived SoCs immune to checkm8) (Elcomsoft: using checkm8 [@elcomsoft-checkm8]).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Pangu team&apos;s &quot;Blackbird&quot; SEPROM exploit, presented at MOSEC 2019, reportedly compromised SEPROM on A10/A10X devices. Apple has not published a detailed advisory for that work and the original presentation materials are not in the verified-sources list, so we mention it only by way of acknowledging that even SEP boot ROMs have a finite security lifetime. The architectural point stands: any unpatchable ROM becomes a permanent liability when a bug is found in it.&lt;/p&gt;
&lt;h3&gt;7.2 LPC sniffing and discrete TPMs&lt;/h3&gt;
&lt;p&gt;We opened with this attack and it deserves a second pass in the context of Pluton&apos;s design. The Pulse Security writeup [@pulse-tpm-sniff] demonstrates extraction of the BitLocker Volume Master Key from a Microsoft Surface Pro 3 (TPM 2.0) and a Lenovo laptop (TPM 1.2) using a $40 FPGA on the LPC bus. The attack requires physical access for under an hour and modest soldering skill.&lt;/p&gt;
&lt;p&gt;This is the textbook case where Pluton is structurally better than discrete TPMs: there is no external bus to sniff because the security subsystem lives on the SoC die. The same attack against a Pluton-enabled CPU is not just hard, it is geometrically impossible. There is no bus to attach probes to.&lt;/p&gt;
&lt;p&gt;That is not the same as &quot;Pluton is unattackable&quot; -- it just means this specific attack class is closed.&lt;/p&gt;
&lt;h3&gt;7.3 faulTPM and the AMD PSP&lt;/h3&gt;
&lt;p&gt;The most consequential publication on Pluton-adjacent silicon is Werling, Buhren, Jacob, and Seifert&apos;s 2023 USENIX WOOT paper &quot;faulTPM&quot; [@faultpm]. The attack: voltage fault injection against AMD&apos;s Platform Security Processor (PSP), the TEE on which AMD&apos;s fTPM runs, on Zen 2 and Zen 3 CPUs. The result: full extraction of the fTPM key derivation seed. With that seed, the attackers decrypted all sealed objects regardless of PCR policy or anti-hammering, and recovered the BitLocker VMK on a Lenovo Ideapad. The reproducible attack code is PSPReverse/ftpm_attack on GitHub [@faultpm-repo].&lt;/p&gt;
&lt;p&gt;Several careful observations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The published attack targets non-Pluton AMD fTPM.&lt;/strong&gt; Pluton-on-AMD is a separate code path; faulTPM as published does not directly extract Pluton state.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pluton-on-AMD runs in the PSP environment.&lt;/strong&gt; The underlying TEE that faulTPM compromises is the same TEE Pluton-on-AMD rides on. Whether the additional hardening Pluton adds is sufficient to defeat fault injection at the PSP level is an open empirical question.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;There is no published voltage-glitch attack against Microsoft Pluton specifically as of May 2026&lt;/strong&gt; in the verified sources surveyed. Absence of evidence is not evidence of absence; serious researchers are reportedly working on it.&lt;/li&gt;
&lt;/ul&gt;

A physical attack class in which the attacker briefly reduces or perturbs the supply voltage to a target chip at a precisely timed moment, causing it to mis-execute an instruction in a controlled way. With sufficient practice, VFI can be used to skip authentication checks, leak intermediate values, or corrupt key derivation. Defenses include redundant voltage sensors, double-execution of sensitive operations, and physically separating the voltage domain of the security subsystem -- mitigations Apple alludes to for SEP and Microsoft alludes to for Pluton, but neither vendor publishes a complete defensive model.

If your adversary is a state-level laboratory with \$50K of equipment and a few hours of physical access, no commodity hardware root of trust on the market today is fully resistant to fault injection. The realistic question is &quot;how much does extracting the key cost, and is that cost above the value of what is protected?&quot; For consumer threat models, faulTPM is exotic; for high-value enterprise or dissident use cases, it is in scope.
&lt;h3&gt;7.4 What is &lt;em&gt;not&lt;/em&gt; known to be broken&lt;/h3&gt;
&lt;p&gt;Modern SEP (A14+/M-series) has no publicly disclosed extraction attack as of the May 2026 verified sources reviewed. The combination of dedicated core, MPE with anti-replay, lower clock, and SSC-backed replay protection has held up. This is consistent with -- but does not prove -- the architectural claim that the dedicated-core design closes the side-channel and co-execution attack surface.&lt;/p&gt;
&lt;p&gt;Pluton with the 2024+ Rust firmware foundation has no publicly disclosed direct extraction attack. The faulTPM family of attacks remains an open concern at the PSP layer; the LPC bus class is closed by design; firmware bugs are reduced (not eliminated) by the move to memory-safe code.&lt;/p&gt;

flowchart TD
    A[&quot;Attack class&quot;] --&amp;gt; B{&quot;Discrete TPM&quot;}
    A --&amp;gt; C{&quot;AMD fTPM&quot;}
    A --&amp;gt; D{&quot;Pluton&quot;}
    A --&amp;gt; E{&quot;Apple SEP A14+&quot;}
    B --&amp;gt; B1[&quot;LPC sniffing: yes (Pulse Security)&quot;]
    B --&amp;gt; B2[&quot;Firmware bug: rare patches&quot;]
    C --&amp;gt; C1[&quot;faulTPM: full extraction&quot;]
    C --&amp;gt; C2[&quot;Patches: BIOS only&quot;]
    D --&amp;gt; D1[&quot;LPC sniffing: not applicable&quot;]
    D --&amp;gt; D2[&quot;faulTPM-like on PSP: open&quot;]
    D --&amp;gt; D3[&quot;Patches: Windows Update + capsule&quot;]
    E --&amp;gt; E1[&quot;checkm8 on A5-A11: AP code exec&quot;]
    E --&amp;gt; E2[&quot;Direct SEP extraction A14+: none public&quot;]
    E --&amp;gt; E3[&quot;Patches: iOS/macOS update, mask ROM never&quot;]
&lt;p&gt;The honest summary is that as you move from discrete TPMs to fTPMs to Pluton to SEP, the attack surface shrinks but the residual attacks get more expensive rather than disappearing. The faulTPM line is still the academic state of the art in showing this.&lt;/p&gt;
&lt;h2&gt;8. Cross-platform standards: the layer where the divide gets papered over&lt;/h2&gt;
&lt;p&gt;If you are a web developer in 2026 and a user asks &quot;how do I sign into your site with my Touch ID or my Windows Hello fingerprint?&quot; the answer is the same in either case: WebAuthn. The standard does not care which hardware root of trust the OS happens to expose underneath.&lt;/p&gt;
&lt;h3&gt;8.1 FIDO2/WebAuthn as the lingua franca&lt;/h3&gt;
&lt;p&gt;The FIDO Alliance [@fido-alliance] defines the protocols. WebAuthn is the W3C JavaScript API; CTAP (Client to Authenticator Protocol) is the underlying transport between the browser/OS and the authenticator. The authenticator can be a USB security key, a phone, a built-in platform authenticator backed by SEP or Pluton, or something else entirely. The relying party sees the same registration and authentication ceremony in all cases.&lt;/p&gt;
&lt;p&gt;The handful of properties WebAuthn guarantees -- origin binding, user gesture, fresh signature per challenge -- are independent of the silicon underneath. The handful of properties it does &lt;em&gt;not&lt;/em&gt; try to guarantee -- &quot;is this device freshly compromised by a kernel rootkit&quot; -- are not fixable at the protocol layer either; that is what attestation extensions are for.&lt;/p&gt;
&lt;h3&gt;8.2 Where attestation extensions vary&lt;/h3&gt;
&lt;p&gt;WebAuthn defines optional attestation extensions that let a relying party request a hardware-backed proof that the authenticator is genuine. Apple&apos;s attestation through WebAuthn rides on App Attest infrastructure; Microsoft&apos;s rides on TPM 2.0 attestation. The receipts differ in format and certificate chain, but the higher-level question &quot;does the public key come from genuine hardware&quot; gets answered on both platforms.&lt;/p&gt;
&lt;p&gt;For most relying parties, the cross-platform truth is simpler than the underlying mechanics: ask for a hardware-backed credential, accept the WebAuthn response, validate the signature, and let the platform handle what kind of silicon was involved.&lt;/p&gt;

WebAuthn looks like it should be the climax of the article. From an architecture perspective, it is the anticlimax. The whole point is that, at the application layer, SEP and Pluton are interchangeable. That is what the standard is for. The differences resurface only when you care about device-class attestation or about the privacy property of the attestation key -- both of which are extension-level concerns rather than core-protocol concerns.
&lt;h3&gt;8.3 TPM 2.0 as the other lingua franca&lt;/h3&gt;
&lt;p&gt;TPM 2.0 itself plays this role in non-web contexts. Enterprise tools that need to attest a device&apos;s boot state -- Microsoft Entra ID conditional access, MDM compliance evaluators, Linux remote attestation frameworks -- speak TPM 2.0. Pluton exposes the TPM 2.0 wire protocol, so these tools work unchanged (Microsoft Pluton as TPM, Microsoft Learn [@ms-pluton-as-tpm]).&lt;/p&gt;
&lt;p&gt;Linux on Apple Silicon (Asahi) currently cannot use SEP for analogous attestation; Apple does not expose the SEP to non-Apple operating systems, and there is no TPM 2.0 emulation. This is a real gap for users who want Apple hardware with a non-Apple OS.&lt;/p&gt;
&lt;h3&gt;8.4 The Android third corner&lt;/h3&gt;
&lt;p&gt;This article is about Apple vs Microsoft, but a complete picture must mention that Android has its own hardware root of trust story rooted in Trusty/TEE-style designs on ARM TrustZone plus discrete StrongBox elements on Pixel-class hardware. Cross-platform mobile development frequently abstracts SEP and Android StrongBox under a common interface (e.g., React Native&apos;s keychain modules), and the privacy and attestation properties of the two systems are not identical but rhyme. Google Play Integrity API plays the role App Attest plays on iOS.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; At the application layer, the right question is not &quot;SEP or Pluton&quot; but &quot;are you using WebAuthn or TPM 2.0 or App Attest at the right point in the trust path.&quot; The platform-specific differences sit beneath those interfaces, and the standards are explicitly designed to be the place developers can stop caring.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;9. Deployment dynamics: who ships what, where, when&lt;/h2&gt;
&lt;p&gt;The two industries have different shapes, and that shapes the deployment story.&lt;/p&gt;
&lt;h3&gt;9.1 Apple: vertical integration, total reach&lt;/h3&gt;
&lt;p&gt;Every shipping Apple device since the iPhone 5s contains a SEP, by virtue of every shipping Apple SoC containing one. That includes (Apple Platform Security: Secure Enclave [@apple-sep-chapter]):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;iPhone 5s and later (A7+)&lt;/li&gt;
&lt;li&gt;iPad Air and later&lt;/li&gt;
&lt;li&gt;Apple Watch Series 1 and later&lt;/li&gt;
&lt;li&gt;Apple TV HD and later&lt;/li&gt;
&lt;li&gt;HomePod and HomePod mini&lt;/li&gt;
&lt;li&gt;Apple Vision Pro&lt;/li&gt;
&lt;li&gt;All Apple Silicon Macs (M1, M2, M3, M4 families)&lt;/li&gt;
&lt;li&gt;All Intel Macs from 2018 to 2020 (via the T2 chip)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is no SKU differentiation. There is no &quot;Pro vs Air&quot; split on whether security hardware is present. You buy a current-generation Apple device, you get the SEP. This is the upside of vertical integration: deployment by default.&lt;/p&gt;
&lt;p&gt;The downside is that nothing else gets the SEP. Linux on Apple Silicon -- the Asahi Linux project -- cannot use the SEP for keychain operations, FileVault wrapping, or attestation. Apple does not expose the SEP outside of macOS, iOS, iPadOS, watchOS, tvOS, and visionOS. The hardware is universal in Apple&apos;s product line and absent everywhere else.&lt;/p&gt;
&lt;h3&gt;9.2 Microsoft: open multivendor, opt-in adoption&lt;/h3&gt;
&lt;p&gt;Pluton ships in silicon Microsoft does not make. That changes the deployment story in two ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Vendor availability&lt;/strong&gt;. As of the current Microsoft documentation [@ms-pluton-learn], Pluton is present in AMD Ryzen 6000 and later, Intel Core Ultra Series 2 and later, and Qualcomm Snapdragon 8cx Gen 3 and Snapdragon X Series. Anything older still uses discrete TPM 2.0 or vendor fTPM.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OEM enablement&lt;/strong&gt;. The chip can be physically present and disabled in UEFI. Microsoft has been pushing OEMs to ship Pluton enabled by default on Copilot+ PCs, but the universe of laptops is heterogeneous, and the practitioner answer is &quot;check &lt;code&gt;tpm.msc&lt;/code&gt; to see what manufacturer ID is reported.&quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Default-enabled-on-shipping-hardware is documented for Surface Laptop 7 and Surface Pro 11 Copilot+ PCs. Various Lenovo ThinkPad Z, Dell Latitude, and HP EliteBook configurations follow (Microsoft Pluton Security Processor, Microsoft Learn [@ms-pluton-learn]). On other devices Pluton may be present but disabled in firmware, falling back to discrete TPM or vendor fTPM.This is a deployment claim that ages quickly. The shipping matrix shifts every six to twelve months as new SoCs come to market and OEMs rev their UEFI defaults. The verification workflow is the same regardless: &lt;code&gt;Get-PnpDevice&lt;/code&gt; and &lt;code&gt;tpm.msc&lt;/code&gt; on the actual hardware tell you what is active.&lt;/p&gt;
&lt;h3&gt;9.3 The patch-channel difference, made concrete&lt;/h3&gt;
&lt;p&gt;Apple ships SEP firmware inside its OS update. When the user installs iOS 19.4 or macOS 16.2, the bundle includes a new sepOS image; the device verifies and loads it during the next boot (Apple Platform Security [@apple-platform-security]).&lt;/p&gt;
&lt;p&gt;Microsoft ships Pluton firmware through Windows Update and UEFI capsules. The OS-driven path lets Microsoft push a firmware refresh to billions of machines without OEM cooperation. The capsule path covers the case where the firmware is needed during early boot before Windows itself is in control.&lt;/p&gt;
&lt;p&gt;Discrete TPMs occupy the third position: firmware updates exist but require an OEM-issued utility that few users ever run. This is why most enterprise TPMs in the field run firmware from 2020 or earlier.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; A serious bug in a discrete TPM chip is, in practice, never fully fixed because the patch never reaches the bulk of deployed devices. A serious bug in Pluton can be patched globally inside a Patch Tuesday cycle. A serious bug in SEP can be patched globally inside an iOS/macOS minor release. The same bug class produces three different incident-response time scales.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;9.4 The economic and political layer&lt;/h3&gt;
&lt;p&gt;Apple controls every step from sand to support page. The benefit is consistency. The cost is that Apple decides what the SEP can and cannot do, with no externally visible audit, and the customer cannot verify the firmware. For the Apple-customer market, that has not been a deal-breaker.&lt;/p&gt;
&lt;p&gt;Microsoft controls the Pluton firmware. The benefit is that one team&apos;s engineering effort propagates across three silicon vendors and thousands of OEM SKUs. The cost is that the OS update channel and the security update channel collapse into one Microsoft-controlled flow. Critics describe this as platform lock-in; supporters describe it as the only way to actually patch the silicon at scale. Both readings have evidence behind them.&lt;/p&gt;

The same patch channel that protects users from unpatched silicon bugs is the patch channel a hypothetical compelled-update scenario would use. There is no commodity product that gives the device owner an independent veto on root-of-trust firmware updates.
&lt;p&gt;This is a real open problem, not a fictional one. The Trusted Computing Group has a notion of &quot;owner-authorized&quot; TPM hierarchies; Azure Sphere uses a three-key model in which device owner, vendor, and Microsoft all hold signing capabilities for different scopes. Nothing in the commodity consumer space has yet shipped a model where the device owner can veto a vendor-signed firmware update on the security subsystem.&lt;/p&gt;
&lt;h2&gt;10. Where this goes next&lt;/h2&gt;
&lt;p&gt;The honest answer is that the immediate future is more of the same with three new pressures.&lt;/p&gt;
&lt;h3&gt;10.1 Post-quantum migration&lt;/h3&gt;
&lt;p&gt;The cryptographic primitives currently rooted in both platforms -- ECDSA P-256 in the SEP, RSA-2048 and ECDSA in TPM 2.0 -- are not post-quantum-safe. NIST standardized ML-KEM and ML-DSA in FIPS 203 and FIPS 204 in 2024 (the NIST publication URLs are outside our verified-source set, so this paragraph states the timeline at the policy level only). Migrating &lt;em&gt;hardware-fused&lt;/em&gt; attestation roots to post-quantum schemes is genuinely hard because the silicon-burned UID-equivalent keys are baked at fabrication time and cannot easily be replaced.&lt;/p&gt;
&lt;p&gt;The likely path: hardware retains agility at the wrapping layer (the unique chip key) while the attestation key types evolve. TPM 2.0 already supports algorithm agility in the spec, which is the kind of foresight you only appreciate a decade after it was added. SEP&apos;s key wrapping is bespoke; Apple has not published a PQC migration plan in the verified sources reviewed.&lt;/p&gt;
&lt;p&gt;This is a place where the comparison gets uncertain. Both vendors will need to migrate. Neither has shipped a primary post-quantum-rooted attestation flow in their public 2026 documentation as far as we can verify.&lt;/p&gt;
&lt;h3&gt;10.2 Confidential computing convergence&lt;/h3&gt;
&lt;p&gt;The same silicon technologies that build SEP and Pluton are now powering confidential computing -- AMD SEV-SNP, Intel TDX, ARM CCA. These extend the &quot;untrusted host kernel&quot; threat model from disk encryption and credential storage to entire virtual machines. The trust roots of confidential computing currently live in the same chips&apos; security subsystems: AMD&apos;s PSP holds SEV-SNP attestation keys; Intel&apos;s CSME, working with TDX, holds equivalent keys.&lt;/p&gt;
&lt;p&gt;Pluton-on-Intel and Pluton-on-AMD will likely inherit responsibilities here as Microsoft consolidates more of the security subsystem under the Pluton name. Apple has not publicly signaled equivalent ambitions for SEP on the server -- Apple&apos;s server presence is mostly internal.&lt;/p&gt;
&lt;h3&gt;10.3 The AI agent identity problem&lt;/h3&gt;
&lt;p&gt;This is the next decade&apos;s question. When your laptop runs an autonomous AI agent that signs cloud API requests on your behalf, what attests to &lt;em&gt;the agent&apos;s&lt;/em&gt; identity? The current architectures attest to the device and to user gestures, not to the agent. There is no shipping primitive in either SEP or Pluton that says &quot;this signature came from agent X running on device Y, gated by user policy Z that the user actually consented to.&quot;&lt;/p&gt;
&lt;p&gt;A defensible reading is that both vendors are moving slowly toward agent-bound credentials, but neither has published a clean primitive. This is an open design space. We mark it as a place to watch rather than a place where shipping products have answers.&lt;/p&gt;

There is no shipping commodity hardware root of trust with simultaneously: post-quantum attestation, owner-vetoable updates, independently audited firmware, and agent identity. There may not be one for a decade. The current architectures -- SEP and Pluton -- are the strongest commodity options available, and they are still incomplete relative to the design space.
&lt;h3&gt;10.4 The convergence that probably will not happen&lt;/h3&gt;
&lt;p&gt;People periodically suggest that Apple should expose the SEP via TPM 2.0 for cross-platform compatibility, or that Microsoft should ship a dedicated security core like SEP. Neither is likely. Apple&apos;s value proposition rests on vertical integration; opening the SEP to non-Apple operating systems would dilute it. Microsoft&apos;s value proposition rests on multi-vendor compatibility; mandating a SEP-style dedicated core would fragment their silicon partner relationships.&lt;/p&gt;
&lt;p&gt;The structural diversity is here to stay. FIDO2/WebAuthn and TPM 2.0 are how the two systems will continue to interoperate without converging on a single hardware architecture. That is fine. It is even, arguably, good -- a monoculture would be worse for security than a duopoly with different threat-model trade-offs.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; The interesting question for the next decade is not whether Apple or Microsoft picks a different silicon strategy. It is whether the cross-platform standards layer -- WebAuthn, TPM 2.0, FIDO2 -- evolves fast enough to expose new security primitives (post-quantum attestation, agent identity, owner-vetoable updates) before any one vendor ships proprietary equivalents.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;11. Frequently asked questions&lt;/h2&gt;

Pluton presents a TPM 2.0 personality to Windows -- so BitLocker, Windows Hello, Credential Guard, and TPM-aware enterprise tools work unchanged -- but it is also more than a TPM 2.0. It exposes Microsoft-rooted services beyond the TCG spec, accepts firmware updates through Windows Update rather than only OEM utilities, lives on the SoC die rather than the motherboard (closing the LPC sniffing attack class), and -- from 2024 -- runs a Rust-based firmware foundation on AMD and Intel platforms (Microsoft Pluton Security Processor, Microsoft Learn [@ms-pluton-learn]).

Two reasons. First, the SEP was designed before TPM 2.0 became the relevant cross-platform standard for Apple&apos;s product mix; SEP&apos;s API surface is bespoke to Apple&apos;s frameworks (`SecKey`, App Attest, LocalAuthentication, Keychain [@apple-keychain]). Second, exposing the SEP via TPM 2.0 would mean making the SEP usable from non-Apple operating systems on Apple hardware -- which is not how Apple ships its platforms. The SEP&apos;s lack of TPM 2.0 personality is a deliberate product decision, not a technical limitation.

No -- not directly. Checkm8 (CVE-2019-8900) [@nvd-checkm8] exploits the SecureROM USB DFU stack on A5-A11 Apple SoCs and the T2 chip in 2018-2020 Intel Macs, giving an attacker with physical access application-processor code execution at boot. The SEP itself remains gated by the device passcode and the data-protection class keys (CERT/CC VU#941987 [@cert-checkm8]). The forensic value of checkm8 is the ability to mount passcode brute-force more effectively and access classes of data not bound to a passcode, not direct SEP-key extraction.

Yes. The Pulse Security TPM-sniffing attack [@pulse-tpm-sniff] works because the discrete TPM returns the Volume Master Key over an external motherboard bus that an attacker can probe. Pluton lives on the SoC die; there is no external bus to attach probes to. The attack is structurally impossible against Pluton-rooted BitLocker. On laptops with discrete TPMs, the mitigation remains BitLocker with pre-boot PIN or USB key authentication.

The published faulTPM attack [@faultpm] targets AMD&apos;s fTPM running in the AMD Platform Security Processor (PSP) on Zen 2 and Zen 3 CPUs, not Pluton specifically. However, Pluton-on-AMD is implemented atop the same PSP environment, so the underlying TEE is fault-attackable in principle. There is no publicly disclosed Pluton-targeted voltage-glitch attack as of May 2026 in the verified sources reviewed; whether Pluton&apos;s additional hardening blocks the fault-injection class is an open empirical question.

For most purposes, no. FIDO2/WebAuthn [@fido-alliance] hides the difference at the API layer -- the same browser code talks to a SEP-backed credential on iOS/macOS and a Pluton-backed credential on Windows. You care about the difference when you need device-class attestation (Apple&apos;s App Attest vs Microsoft&apos;s Device Health Attestation), when privacy of the attestation key matters (Microsoft offers ECDAA-grade options via TPM 2.0; Apple offers per-installation keys), or when you need to support Linux on Apple Silicon (where neither path is available).

Not in any current shipping commodity product. Apple devices ship SEP and no TPM 2.0; Windows devices ship Pluton, discrete TPM, or vendor fTPM but no SEP. The closest historical case is the Apple T2 chip in 2018-2020 Intel Macs [@apple-a-series]: the Mac ran macOS rooted at the T2 SEP, but if you booted Windows on the same hardware via Boot Camp, the T2 still provided the secure-boot anchor though Windows did not interact with it as a TPM.
&lt;h2&gt;12. Closing observation&lt;/h2&gt;
&lt;p&gt;There is a temptation, when comparing two designs as deeply considered as SEP and Pluton, to declare one the winner. Resist that temptation. The two architectures answer different questions for different markets, and the differences are exactly where each one shines. SEP is what you build when you own the silicon, the OS, and the patch channel. Pluton is what you build when you control the OS and the patch channel but need to ride on three other companies&apos; silicon.&lt;/p&gt;
&lt;p&gt;The closing observation worth keeping is the one Pulse Security demonstrated by accident: most hardware security failures are not failures of the math. They are failures of the physical placement and the patch flow. SEP and Pluton both close the historical bus-sniffing attack class. They both retain a slow channel for fault-injection research to chip away at. They both depend on the device owner trusting the vendor&apos;s signing infrastructure. The next big shift -- if it comes -- will probably be in &lt;em&gt;who controls the patch channel&lt;/em&gt;, not in the silicon itself.&lt;/p&gt;
&lt;p&gt;That is the bet to watch.&lt;/p&gt;
&lt;p&gt;&amp;lt;StudyGuide slug=&quot;apple-secure-enclave-vs-microsoft-pluton&quot; keyTerms={[
  { term: &quot;SEP&quot;, definition: &quot;Apple Secure Enclave Processor, a dedicated security coprocessor with its own CPU core, sepOS, and mailbox API.&quot; },
  { term: &quot;sepOS&quot;, definition: &quot;Apple&apos;s L4-microkernel-derived OS running inside the SEP.&quot; },
  { term: &quot;MPE&quot;, definition: &quot;Memory Protection Engine: encrypts and authenticates SEP-bound DRAM cache lines with anti-replay protection.&quot; },
  { term: &quot;SSC&quot;, definition: &quot;Secure Storage Component: external tamper-resistant chip storing monotonic counters used by the SEP for anti-hammering, present from A13 onward.&quot; },
  { term: &quot;Pluton&quot;, definition: &quot;Microsoft&apos;s on-die security subsystem present on supported AMD, Intel, and Qualcomm SoCs; presents a TPM 2.0 personality and accepts firmware updates via Windows Update and UEFI capsule.&quot; },
  { term: &quot;SHACK&quot;, definition: &quot;Microsoft&apos;s name for keys that never leave the protected hardware, even to the Pluton firmware itself.&quot; },
  { term: &quot;TPM 2.0&quot;, definition: &quot;Trusted Computing Group&apos;s standard cryptoprocessor spec, defining PCRs, EK, AK, sealing, and the TPM2_Quote attestation primitive.&quot; },
  { term: &quot;Direct Anonymous Attestation (DAA)&quot;, definition: &quot;Group-signature scheme letting a device prove membership in a class of legitimate devices without revealing which one. ECDAA is the elliptic-curve variant standardized in TPM 2.0.&quot; },
  { term: &quot;App Attest&quot;, definition: &quot;Apple&apos;s per-installation SEP-rooted attestation service; produces a key chained to Apple&apos;s CA proving the running app is genuine on a genuine Apple device.&quot; },
  { term: &quot;checkm8&quot;, definition: &quot;CVE-2019-8900: unpatchable boot-ROM use-after-free affecting A5-A11 Apple SoCs and the T2 chip; gives AP code execution at boot to physical attackers.&quot; },
  { term: &quot;faulTPM&quot;, definition: &quot;USENIX WOOT 2023 voltage-fault-injection attack against AMD&apos;s PSP, extracting fTPM key derivation seed and recovering BitLocker VMK on a Lenovo Ideapad.&quot; },
  { term: &quot;WebAuthn&quot;, definition: &quot;W3C JavaScript API for hardware-backed credentials, implemented over CTAP, that hides SEP-vs-TPM differences from web developers.&quot; }
]} questions={[
  { q: &quot;Why was the Pulse Security TPM-sniffing attack possible on a Surface Pro 3 despite the TPM working correctly?&quot;, a: &quot;The TPM correctly unsealed and returned the BitLocker VMK over the LPC bus on the motherboard; the attacker could read it because the bus is physically exposed. Pluton eliminates this attack class by living on the SoC die.&quot; },
  { q: &quot;Why does Apple ship the SEP as a separate physical core rather than as an enclave inside the application CPU?&quot;, a: &quot;A separate core eliminates the microarchitectural-side-channel and co-execution attack classes (Meltdown/Spectre/Hertzbleed family) that destroyed Intel SGX. The SEP simply does not share execution resources with potentially hostile code on the application cores.&quot; },
  { q: &quot;What does Pluton&apos;s firmware update model buy that discrete TPMs do not?&quot;, a: &quot;In-field patchability via Windows Update and UEFI capsule, signed by Microsoft. Discrete TPM updates require an OEM utility most users never run, so serious TPM firmware bugs remain unpatched on most deployed devices.&quot; },
  { q: &quot;How does App Attest&apos;s privacy property differ from TPM 2.0 ECDAA?&quot;, a: &quot;App Attest is per-installation: each install of each app gets a unique key chained to Apple&apos;s CA. ECDAA is a group signature: a device proves it belongs to a set of legitimate devices without revealing which one. Different threat models against different correlation adversaries.&quot; },
  { q: &quot;What does faulTPM tell us about the security of Pluton-on-AMD?&quot;, a: &quot;It tells us the underlying AMD PSP TEE that Pluton-on-AMD rides on is fault-attackable. Whether Pluton&apos;s additional hardening blocks the fault-injection class is open; no Pluton-specific extraction attack is publicly disclosed as of May 2026 in the verified sources.&quot; }
]} /&amp;gt;&lt;/p&gt;
</content:encoded><category>hardware-security</category><category>secure-enclave</category><category>pluton</category><category>tpm</category><category>root-of-trust</category><category>attestation</category><category>platform-security</category><author>noreply@paragmali.com (Parag Mali)</author></item><item><title>Inside Azure Confidential VMs: SEV-SNP, Intel TDX, and the Paravisor that Makes Them a Cloud Product</title><link>https://paragmali.com/blog/inside-azure-confidential-vms-sev-snp-intel-tdx-and-the-para/</link><guid isPermaLink="true">https://paragmali.com/blog/inside-azure-confidential-vms-sev-snp-intel-tdx-and-the-para/</guid><description>Azure Confidential VMs combine AMD SEV-SNP and Intel TDX with the OpenHCL paravisor and MAA policy v1.2. A textbook tour from silicon to relying party.</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate><content:encoded>
**Azure Confidential VMs are Windows or Linux guests that the cloud operator&apos;s hypervisor cannot read or silently modify.** They are built on two distinct CPU primitives -- AMD SEV-SNP (Reverse Map Table + Virtual Machine Privilege Level + SNP_REPORT) and Intel TDX (Secure Arbitration Mode + the signed TDX Module + RTMR0-3) -- and wrapped on Azure by the open-source Rust paravisor OpenHCL running inside the trust boundary at VMPL0 or the L1 TD seat.&lt;p&gt;Inside that boundary the paravisor synthesises a vTPM whose quotes chain to the SEV-SNP or TDX hardware report, and Microsoft Azure Attestation runs a customer-defined policy v1.2 file (with JmesPath claim rules) against the evidence to release HSM-backed keys via Secure Key Release.&lt;/p&gt;
&lt;p&gt;The Generation-2 integrity rail closes the SEVered and SEVurity ciphertext-remapping class architecturally, but four 2024-era papers (CacheWarp, WeSee, Heckler, Ahoi) demonstrate that side-channel and notification-injection seams remain. Read this if you need to draw the Azure CVM stack from silicon to MAA, decide between SEV-SNP and TDX SKUs, and write an attestation policy that says exactly what you mean.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;1. Even the cloud operator must not see your memory&lt;/h2&gt;
&lt;p&gt;A Windows Server VM is running a SQL query on Azure right now. It is joining a million-row variant table against a patient-genome reference, building an index in RAM, and serving the answer back to a clinician&apos;s web portal. The customer who owns that VM has every reason to want the query to succeed and every reason to make sure that nobody else can ever read the index it builds: not the hypervisor it runs on, not the host firmware below it, not the Microsoft engineer holding the on-call pager, not even a court-ordered datacentre raid carried out with full physical access to the rack.&lt;/p&gt;
&lt;p&gt;As of 2026, that is not a thought experiment. It is the contract Azure signs when you provision a &lt;code&gt;DCasv5&lt;/code&gt; or &lt;code&gt;DCesv5&lt;/code&gt; confidential VM [@msdocs-overview-products]. And the contract has a shape -- an architecturally enforced shape rooted in two distinct CPU mechanisms, wrapped in an open-source Rust paravisor [@openhcl-blog], verified by a policy-driven attestation service [@msdocs-maa-overview], and dented by four published 2024 attacks that this article will name in order.&lt;/p&gt;
&lt;p&gt;The Confidential Computing Consortium defines the contract in one sentence: &quot;Confidential Computing protects data in use by performing computation in a hardware-based, attested Trusted Execution Environment&quot; [@ccc-about]. That sentence finishes a longer thought. Data at rest gets BitLocker and full-disk encryption. Data in transit gets TLS. Data in use -- the gigabytes that sit in DRAM while a process actually computes against them -- has historically been the unencrypted leg of a three-legged stool.&lt;/p&gt;

A virtual machine whose memory and CPU state are cryptographically protected from the host hypervisor and the cloud operator&apos;s infrastructure, and whose configuration is bound to a hardware-rooted attestation report a remote verifier can check. The Confidential Computing Consortium&apos;s framing is the canonical one: &quot;These secure and isolated environments prevent unauthorized access or modification of applications and data while in use&quot; [@ccc-about].

A computing environment whose confidentiality, integrity, and attestability are enforced by hardware mechanisms below the level of the operating system. A TEE may be process-scoped (Intel SGX enclaves), VM-scoped (AMD SEV-SNP, Intel TDX), or board-scoped (AWS Nitro Enclaves). The Confidential VM is the VM-scoped specialisation.
&lt;p&gt;Three concrete workloads make the contract operationally legible. A regulated clean room running joint analytics over patient genomes between an academic medical centre and a pharmaceutical sponsor, where the contract literally forbids the sponsor&apos;s staff from reading raw genotypes. A multi-party anti-money-laundering analytic between two competing banks who will share encrypted features but not raw transactions. A sovereign-cloud control plane that must not leak to the hyperscaler&apos;s host kernel under any subpoena. In each case the threat model treats the cloud operator as semi-trusted at best and adversarial at worst, and in each case the customer wants the cipher engine to live below the operator&apos;s reach.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Encryption at rest hides bytes on storage. Encryption in transit hides bytes on the wire. Encryption in use is the missing third leg -- the one that asks the cipher engine to live inline with the memory controller, so that a VM&apos;s working set never appears in plaintext to anyone but the VM itself. That is what AMD SEV-SNP and Intel TDX do at the silicon layer, and what Azure productises with the OpenHCL paravisor and Microsoft Azure Attestation [@ccc-about; @msdocs-azure-cvm].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The architecture that makes this contract real takes vocabulary from Internet standards as well as silicon. RFC 9334, published in January 2023, gives us the verifier / evidence / relying party language we will use throughout the article [@rfc9334]. An &lt;em&gt;attester&lt;/em&gt; (the guest VM plus the paravisor) generates &lt;em&gt;evidence&lt;/em&gt; (a hardware attestation report plus a vTPM quote). A &lt;em&gt;verifier&lt;/em&gt; (Microsoft Azure Attestation in Azure&apos;s case) checks the evidence against a policy and emits an &lt;em&gt;attestation result&lt;/em&gt; (a signed JWT). A &lt;em&gt;relying party&lt;/em&gt; (Azure Key Vault, or any customer service) consumes the result and decides whether to release a secret. The article you are reading is, at heart, a tour of how a SEV-SNP or TDX guest, an OpenHCL paravisor, and Microsoft Azure Attestation realise that abstract diagram on commodity silicon.&lt;/p&gt;
&lt;p&gt;That leads to the obvious question. How can a CPU enforce that even the hypervisor cannot read RAM? And once it can, why does a single mechanism turn out to be insufficient -- why does the architecture need a separate integrity rail on top? The next two sections trace the wrong answers that came first.&lt;/p&gt;
&lt;h2&gt;2. Why enclaves were not enough&lt;/h2&gt;
&lt;p&gt;In August 2016 David Kaplan stood on the USENIX Security stage in Austin and described &quot;two new x86 ISA features developed by AMD&quot; that he called &quot;the first general-purpose memory encryption features to be integrated into the x86 architecture&quot; [@usenix-kaplan-2016]. Kaplan was, in the conference biography&apos;s words, the &quot;lead architect for the AMD memory encryption features&quot; [@usenix-kaplan-2016]. His argument was deceptively simple. An enclave that lives inside a single process is the wrong unit of confidential computation for a cloud workload. The workloads customers actually run -- database engines, analytic services, language runtimes -- want gigabytes of working memory, multiple threads, and an unmodified operating system. None of that fits inside a roughly 96-MiB SGX enclave [@costan-devadas-2016].&lt;/p&gt;
&lt;p&gt;Two design ancestors set the shape of the problem before either AMD or Intel solved it.&lt;/p&gt;
&lt;p&gt;The first ancestor is the Trusted Platform Module. The TCG TPM specification dates back to 2003, when &quot;the first TPM version that was deployed was 1.1b&quot; [@wiki-tpm]. TPM 2.0 was announced on April 9, 2014 [@wiki-tpm] and standardised as ISO/IEC 11889. The TPM contributed three concepts that remain load-bearing two decades later: &lt;em&gt;platform configuration registers&lt;/em&gt; (the extend-only PCR digests that a measured-boot chain builds), &lt;em&gt;attestation identity keys&lt;/em&gt;, and a &lt;em&gt;quote&lt;/em&gt; operation that signs PCR state with a key whose origin a remote verifier can trust. The TPM is not a TEE in the modern sense -- it does not host computation -- but it is the first widely deployed device that lets a remote party gain cryptographic assurance about what a machine is running. Every confidential VM design ships a TPM-shaped attestation surface inside it.&lt;/p&gt;
&lt;p&gt;The second ancestor is Intel Software Guard Extensions. Designed at the HASP 2013 workshop and delivered on Skylake in 2015 [@costan-devadas-2016], SGX introduced the &lt;em&gt;enclave&lt;/em&gt;: a process-scoped TEE backed by the Enclave Page Cache, a CPU-managed memory region whose contents are decrypted only inside the cache. Programs enter and leave through &lt;code&gt;ENCLU&lt;/code&gt;-family instructions; cross-domain calls use a partitioned model called &lt;code&gt;ECALL&lt;/code&gt; / &lt;code&gt;OCALL&lt;/code&gt;; remote attestation is mediated by Intel through a quoting enclave. SGX worked, in the strict sense that the threat model included even a malicious operating system. But three things kept it from generalising.&lt;/p&gt;

A CPU-protected DRAM region that holds an SGX enclave&apos;s working memory in encrypted, integrity-checked form. On early Skylake / Kaby Lake parts the EPC was capped at approximately 128 MiB physical with between ~93 and 96 MiB usable depending on BIOS reservation after reserved EPCM metadata accounting [@costan-devadas-2016]. Anything beyond the cap paged through the encrypted-page-eviction path with a substantial performance cliff, which is one of the architectural reasons SGX did not generalise to whole-VM cloud workloads.
&lt;p&gt;The EPC cap was the first. A working set of ~96 MiB is fine for a key-wrapping service or a small ML model, but it is not a cloud-database VM. The second was the partitioned programming model. Real applications had to be split into trusted and untrusted halves with explicit &lt;code&gt;ECALL&lt;/code&gt; / &lt;code&gt;OCALL&lt;/code&gt; boundaries, which is a refactoring tax that few existing codebases would pay. The third was the side-channel question: Foreshadow [@foreshadow], SgxPectre [@sgxpectre], and SGAxe [@sgaxe] each demonstrated that a determined attacker with microarchitectural access could extract secrets from SGX, often without ever defeating the cipher itself.Microsoft&apos;s response was &lt;em&gt;Haven&lt;/em&gt;, an OSDI 2014 project that put a Windows library OS (Drawbridge) inside an SGX enclave to run unmodified Windows binaries. Haven worked as a proof of concept but was effectively obviated by the EPC cap and by the slow pace of SGX silicon delivery in Xeon-class CPUs. The library-OS-in-an-enclave became one of several dead ends on the road to whole-VM TEEs.&lt;/p&gt;
&lt;p&gt;Microsoft staked Azure publicly to &quot;data in use&quot; on September 14, 2017, when Mark Russinovich announced Azure confidential computing on the company blog: &quot;Microsoft Azure is the first cloud to offer new data security capabilities with a collection of features and services called Azure confidential computing&quot; [@russinovich-azure-2017]. The same post named the initial backing TEEs. &quot;Initially we support two TEEs, Virtual Secure Mode and Intel SGX. Virtual Secure Mode (VSM) is a software-based TEE that&apos;s implemented by Hyper-V in Windows 10 and Windows Server 2016&quot; [@russinovich-azure-2017]. VSM was already the substrate of Credential Guard and HVCI inside the operating system; pulling it up as a &quot;TEE the cloud customer can target&quot; was the bridge between the in-OS Secure Kernel story and the eventually-needed silicon-rooted CVM.&lt;/p&gt;
&lt;p&gt;The industry got organised two years later. The Confidential Computing Consortium formed under the Linux Foundation on October 17, 2019. The press release names the founding premiere members verbatim: &quot;Alibaba, Arm, Google Cloud, Huawei, Intel, Microsoft and Red Hat&quot; and the general members &quot;Baidu, ByteDance, decentriq, Fortanix, Kindite, Oasis Labs, Swisscom, Tencent and VMware&quot; [@lf-ccc-press]. An earlier Microsoft Open Source blog post on August 21, 2019, announced the formation with a slightly different membership list (including IBM but not Huawei) [@ms-ccc-blog]; the October press release is the formal founding roster.&lt;/p&gt;

Across three load-bearing AMD whitepapers -- SME/SEV (2016), SEV-ES (February 17, 2017), and SEV-SNP (January 9, 2020) -- the PDF cover-page metadata records &quot;David Kaplan&quot; as the named author [@amd-mem-enc-whitepaper; @amd-sev-es-whitepaper; @amd-snp-whitepaper], and the USENIX Security 2016 biography corroborates &quot;lead architect for the AMD memory encryption features&quot; [@usenix-kaplan-2016]. Across the parallel Intel artefacts -- the September 2020 TDX whitepaper and the Architecture Specification doc 344425-001 -- PDF metadata names only &quot;Intel Corporation&quot; as the institutional author and does not enumerate individual architects [@intel-tdx-spec-344425]. We name David Kaplan throughout because the documentary record names him; we deliberately do not name individual Intel architects because the documentary record does not.

flowchart TD
    Data[&quot;Customer data&quot;] --&amp;gt; Rest[&quot;At rest -- BitLocker, SED, KMS&quot;]
    Data --&amp;gt; Transit[&quot;In transit -- TLS 1.3, IPsec&quot;]
    Data --&amp;gt; Use[&quot;In use -- ?&quot;]
    Use --&amp;gt; CVM[&quot;Confidential VMs -- SEV-SNP / Intel TDX&quot;]
    CVM --&amp;gt; Para[&quot;Paravisor -- OpenHCL&quot;]
    Para --&amp;gt; MAA[&quot;MAA verifier&quot;]
&lt;p&gt;If a TEE has to be smaller than a single page cache, the unit of confidential computation is wrong. What if the unit were a whole VM, and the cipher engine lived inline with the memory controller? The next section is the first time someone tried.&lt;/p&gt;
&lt;h2&gt;3. Generation 1 and 1.5: confidentiality without integrity&lt;/h2&gt;
&lt;p&gt;April 2016. David Kaplan, Jeremy Powell, and Tom Woller publish the AMD whitepaper &lt;em&gt;AMD Memory Encryption&lt;/em&gt; [@amd-mem-enc-whitepaper]. The paper introduces two features in a single document. Secure Memory Encryption (SME) is a chassis-wide bulk cipher: a per-boot AES-128 key, managed by the on-die AMD Secure Processor, encrypts main memory transparently to the operating system. Secure Encrypted Virtualization (SEV) takes the same engine and gives each VM its own AES key tagged into an Address Space Identifier (ASID) in the cache, so two co-resident VMs cannot read each other&apos;s memory and neither can the hypervisor. The &quot;C-bit&quot; in the guest page table marks which pages are encrypted [@amd-mem-enc-whitepaper]. The first silicon to ship SEV was the first-generation EPYC &quot;Naples&quot; launched June 20, 2017 [@wiki-epyc].&lt;/p&gt;

A high physical-address bit in an AMD SEV guest&apos;s page-table entries that signals to the memory controller &quot;this page is encrypted with my VM&apos;s key.&quot; The C-bit is the per-page opt-in that lets a SEV guest mix encrypted private memory with explicitly shared bounce buffers in the same address space. Its absence means a page is cleartext to the hypervisor; its presence means the AES engine in the memory controller decrypts on every read and encrypts on every write [@amd-mem-enc-whitepaper].
&lt;p&gt;The threat model was clear and the architecture was honest about it. The hypervisor sees ciphertext on every encrypted page. What the architecture did &lt;em&gt;not&lt;/em&gt; do, and what the original whitepaper did &lt;em&gt;not&lt;/em&gt; claim, was integrity. The hypervisor remained authoritative over the nested page tables -- it could remap which host physical page a given guest physical address pointed to, and the cipher engine would happily decrypt whatever blob it found under the same key.&lt;/p&gt;
&lt;p&gt;That gap produced the architectural lesson.&lt;/p&gt;
&lt;h3&gt;SEVered (Morbitzer et al., EuroSec 2018)&lt;/h3&gt;
&lt;p&gt;In May 2018, four authors from Fraunhofer AISEC -- Mathias Morbitzer, Manuel Huber, Julian Horsch, and Sascha Wessel -- published a paper whose abstract is unambiguous: &quot;We present the design and implementation of SEVered, an attack from a malicious hypervisor capable of extracting the full contents of main memory in plaintext from SEV-encrypted virtual machines&quot; [@severed-arxiv]. The attack did not break the cipher. It exploited the fact that a malicious hypervisor could &lt;em&gt;remap&lt;/em&gt; a page known to contain a particular plaintext (say, a known string in a network response served by the guest) and observe that the same ciphertext block now appeared at the address corresponding to the secret it wanted. Because there was no architectural binding between a guest physical address and the ciphertext that should sit there, the hypervisor could read the entire VM by chaining such remappings.&lt;/p&gt;

We present the design and implementation of SEVered, an attack from a malicious hypervisor capable of extracting the full contents of main memory in plaintext from SEV-encrypted virtual machines. -- Morbitzer, Huber, Horsch, Wessel, EuroSec&apos;18 [@severed-arxiv]
&lt;p&gt;The architectural lesson, stated as bluntly as the paper deserves, is that confidentiality without integrity is not confidentiality.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Confidentiality without integrity is not confidentiality. The hypervisor that can move ciphertext between addresses is the hypervisor that can read it. The integrity of the guest-physical-to-host-physical mapping is as load-bearing as the cipher itself.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;SEV-ES (February 2017): half a fix&lt;/h3&gt;
&lt;p&gt;AMD&apos;s first response was SEV-ES, dated February 17, 2017 in the whitepaper&apos;s PDF cover page [@amd-sev-es-whitepaper]. SEV-ES introduced register-state encryption on VMEXIT. Before SEV-ES, every VM exit handed the hypervisor a complete dump of guest CPU registers, including pointers into otherwise-encrypted memory. SEV-ES encrypted the saved register state under the guest key, surfaced a new &lt;code&gt;#VC&lt;/code&gt; (VMM Communication) exception (vector 29), and required the guest to use a deliberately shared page called the Guest-Hypervisor Communication Block (GHCB) for everything that genuinely needed to cross the boundary -- emulated I/O, MMIO, time, the works.&lt;/p&gt;

A page that a SEV-ES (and later SEV-SNP) guest deliberately shares with the hypervisor for the purposes of communicating about events the hypervisor genuinely needs to handle: emulated I/O, MMIO accesses, certain control-plane operations. The GHCB is the explicit, audited &quot;side channel&quot; through the trust boundary. Everything else stays encrypted [@amd-sev-es-whitepaper].
&lt;p&gt;SEV-ES closed one channel and left the other open. The integrity of the GPA-to-HPA mapping was still the hypervisor&apos;s problem to behave on, and the cipher was still XEX-mode AES without any keyed authentication. Two more papers made the architectural pressure unbearable.&lt;/p&gt;
&lt;h3&gt;ICUP (Buhren et al., CCS 2019) and SEVurity (Wilke et al., S&amp;amp;P 2020)&lt;/h3&gt;
&lt;p&gt;In August 2019, Robert Buhren, Christian Werling, and Jean-Pierre Seifert published &lt;em&gt;Insecure Until Proven Updated&lt;/em&gt; [@icup-arxiv]. The abstract makes the operational point cleanly: &quot;We demonstrate that it is possible to extract critical CPU-specific keys that are fundamental for the security of the remote attestation protocol. This effectively renders the SEV technology on current AMD Epyc CPUs useless when confronted with an untrusted cloud provider&quot; [@icup-arxiv]. The mechanism was a firmware rollback against the AMD-SP that exposed attestation keys.&lt;/p&gt;
&lt;p&gt;In May 2020, Wilke, Wichelmann, Morbitzer, and Eisenbarth published &lt;em&gt;SEVurity: No Security Without Integrity&lt;/em&gt; at IEEE S&amp;amp;P [@sevurity-uzl]. Their two new methods, the project-page abstract records verbatim, &quot;allow us to inject arbitrary code into SEV-ES secured virtual machines. Due to the lack of proper integrity protection, it is sufficient to reuse existing ciphertext to build a high-speed encryption oracle&quot; [@sevurity-uzl]. The architectural diagnosis was now overdetermined: integrity had to enter the design, not as a side feature, but as a load-bearing rail.The same Buhren-led group escalated to physical fault injection in August 2021 with &lt;em&gt;One Glitch to Rule Them All&lt;/em&gt;, voltage-glitching the AMD Secure Processor on Zen 1 / 2 / 3 to extract custom payloads [@one-glitch-arxiv]. The PSPReverse GitHub artefact contains the supporting tooling [@pspreverse-github]. This is the &lt;em&gt;physical-fault&lt;/em&gt; lower bound on the AMD-SP: an adversary with the right glitcher can subvert the security processor itself. The SEV-SNP design assumes a logical adversary; physical-access adversaries remain a known residual that §8 will revisit.&lt;/p&gt;
&lt;h3&gt;Intel&apos;s parallel road: TME and MKTME&lt;/h3&gt;
&lt;p&gt;Intel&apos;s bottom-of-stack cipher engine ran on a parallel track. In December 2017, Intel published &lt;em&gt;Architecture Memory Encryption Technologies Specification&lt;/em&gt;, document 336907 rev 1.1 [@intel-mem-enc-spec-336907], introducing Total Memory Encryption (TME). The multi-key successor, MKTME (later TME-MK), surfaced publicly through a September 7, 2018 Linux-kernel RFC by Alison Schofield archived on LWN: &quot;Multi-Key Total Memory Encryption API (MKTME) ... allows multiple encryption domains, each having their own key. While the main use case for the feature is virtual machine isolation&quot; [@lwn-mktme]. TME-MK is the per-keyID memory cipher that the eventual Intel TDX architecture will mount its trust-domain model on top of.&lt;/p&gt;
&lt;p&gt;Three papers, two vendors, one architectural verdict: confidentiality without integrity is not confidentiality, and the architecture has to change. What did AMD and Intel actually build in response?&lt;/p&gt;

flowchart LR
    SME[&quot;SME (2016) -- Bulk memory cipher&quot;]
    SEV[&quot;SEV (Naples, 2017) -- Per-VM AES key&quot;]
    ES[&quot;SEV-ES (Feb 2017) -- + Register-state cipher&quot;]
    SNP[&quot;SEV-SNP (Jan 2020) -- + Integrity rail&quot;]
    SME --&amp;gt; SEV
    SEV -- &quot;SEVered -- (EuroSec 2018)&quot; --&amp;gt; ES
    ES -- &quot;ICUP (CCS 2019) -- SEVurity (S&amp;amp;P 2020)&quot; --&amp;gt; SNP
&lt;h2&gt;4. Generation 2: the integrity rail&lt;/h2&gt;
&lt;p&gt;January 9, 2020. AMD publishes the 20-page SEV-SNP whitepaper, sole-authored by David Kaplan, with the title &lt;em&gt;Strengthening VM Isolation with Integrity Protection and More&lt;/em&gt; [@amd-snp-whitepaper]. Eight months later, in September 2020, Intel publishes the first public TDX whitepaper (document 343961-002US, filename &lt;code&gt;tdx-whitepaper-final9-17.pdf&lt;/code&gt;, PDF creation date Thursday September 17, 2020) and the companion Architecture Specification doc 344425-001 dated September 1, 2020 [@intel-tdx-spec-344425]. Two vendors, two different architectural answers, one shared diagnosis: the hypervisor must be excluded from the GPA-to-HPA mapping, not just from the ciphertext.Wikipedia describes Intel TDX as &quot;proposed by Intel in May 2021&quot; [@wiki-tdx], but the PDF cover-page metadata extracted from both the TDX whitepaper and the Architecture Specification places the public release in September 2020. Where Wikipedia and the Intel-authored PDFs disagree, the PDFs are the primary record.&lt;/p&gt;
&lt;h3&gt;AMD SEV-SNP: four ingredients&lt;/h3&gt;
&lt;p&gt;SEV-SNP keeps the per-VM AES cipher from SEV and the register-state encryption from SEV-ES, and adds four new architectural ingredients that together close the integrity gap.&lt;/p&gt;
&lt;p&gt;The first is the &lt;em&gt;Reverse Map Table&lt;/em&gt; (RMP). The RMP is a system-wide per-page metadata table consulted on every nested page-table walk. Each entry binds a host physical page to the tuple &lt;code&gt;(assigned ASID, expected guest physical address, VMPL, immutable bit, validated bit)&lt;/code&gt;. If the hypervisor tries to remap a guest physical address to a different host page, the RMP entry will fail to match and the CPU raises an &lt;code&gt;#NPF(rmpfault)&lt;/code&gt;. The architecture&apos;s own description is verbatim: &quot;SEV-SNP adds strong memory integrity protection to help prevent malicious hypervisor-based attacks like data replay, memory re-mapping, and more to create an isolated execution environment&quot; [@amd-sev-portal]. This is the integrity rail. It is not a separate keyed MAC over memory; it is a structural binding that turns SEVered-class remappings into faults.&lt;/p&gt;

A system-wide AMD SEV-SNP data structure that records, for every host physical page, the guest ASID it belongs to, the guest physical address it is mapped at, the VMPL ACL, an immutable flag, and a validated flag. Every nested page-table walk consults the RMP; mismatches raise `#NPF(rmpfault)`. The RMP is the architectural answer to SEVered: the hypervisor remains in charge of nested page tables, but the RMP says what each host page is allowed to be used for [@amd-snp-whitepaper; @amd-sev-portal].
&lt;p&gt;The second is the &lt;code&gt;PVALIDATE&lt;/code&gt; instruction. A SEV-SNP guest must explicitly &lt;em&gt;validate&lt;/em&gt; a page before it uses it for confidential storage. The hypervisor cannot fake validation; if the page has not been validated by the guest, accesses fault. This pushes the responsibility for tracking &quot;is this page really part of my private memory&quot; into the guest, where the hypervisor cannot lie about it.&lt;/p&gt;
&lt;p&gt;The third is the Virtual Machine Privilege Level lattice.&lt;/p&gt;

A four-level privilege lattice (VMPL0 highest, VMPL3 lowest) introduced by AMD SEV-SNP. Each RMP entry includes per-VMPL access-control bits, so a single SEV-SNP guest can split itself into multiple ring-shaped partitions where a higher-VMPL component (for example, a paravisor at VMPL0) sees pages that a lower-VMPL component (the customer&apos;s kernel at VMPL2) cannot. VMPL appears as a field inside the SNP_REPORT, so a remote verifier can tell which VMPL produced a given quote [@amd-snp-whitepaper].
&lt;p&gt;The fourth is the attestation report. The SNP_REPORT is an ECDSA-P384 signed blob produced by the AMD-SP, carrying fields including the launch &lt;em&gt;measurement&lt;/em&gt;, the guest &lt;em&gt;policy&lt;/em&gt;, the user-supplied &lt;em&gt;report_data&lt;/em&gt; nonce, the issuing &lt;em&gt;vmpl&lt;/em&gt;, the unique &lt;em&gt;chip_id&lt;/em&gt;, and the &lt;em&gt;tcb_version&lt;/em&gt;. The signing key is the Versioned Chip Endorsement Key (VCEK), derived per chip per TCB version from a long-lived endorsement key, and the certificate chain runs &lt;code&gt;VCEK_cert -&amp;gt; ASK -&amp;gt; AMD root&lt;/code&gt; [@amd-sev-portal].&lt;/p&gt;

The AMD SEV-SNP attestation signing key. Derived deterministically from each chip&apos;s individual endorsement secret and the current TCB version (firmware level), so a single chip exposes one VCEK per TCB version. The certificate chain anchors back to AMD&apos;s root via the AMD Signing Key (ASK). The VCEK is what makes SEV-SNP attestation chain to silicon: the verifier checks the SNP_REPORT signature against a VCEK certificate AMD will only issue for genuine AMD-SP firmware [@amd-snp-whitepaper; @amd-sev-portal].

SEV-SNP adds strong memory integrity protection to help prevent malicious hypervisor-based attacks like data replay, memory re-mapping, and more in order to create an isolated execution environment. -- AMD SEV-SNP whitepaper, January 2020 [@amd-snp-whitepaper]

sequenceDiagram
    autonumber
    participant Guest as Guest CPU access
    participant NPT as Nested Page Walker
    participant RMP as Reverse Map Table
    participant AES as AES engine (memory ctrl)
    Guest-&amp;gt;&amp;gt;NPT: Resolve GVA -&amp;gt; GPA -&amp;gt; HPA
    NPT-&amp;gt;&amp;gt;RMP: Lookup (HPA)
    RMP--&amp;gt;&amp;gt;NPT: ASID, expected GPA, VMPL
    alt RMP entry matches request
        NPT-&amp;gt;&amp;gt;AES: Decrypt under VM key
        AES--&amp;gt;&amp;gt;Guest: Plaintext
    else Mismatch (SEVered-style remap)
        RMP--&amp;gt;&amp;gt;Guest: #NPF (rmpfault)
    end
&lt;h3&gt;Intel TDX: a different geometry, the same end-state&lt;/h3&gt;
&lt;p&gt;Intel reached the same architectural conclusion with a different mechanism. Rather than bake integrity into microcode plus the AMD-SP, Intel introduced a new CPU mode and a separately signed software module that runs in it. The Intel TDX overview is verbatim: &quot;A CPU-measured Intel TDX module enables Intel TDX. This software module runs in a new CPU Secure Arbitration Mode (SEAM) as a peer virtual machine manager (VMM) ... hosted in a reserved memory space identified by the SEAM Range Register (SEAMRR)&quot; [@intel-tdx-overview].&lt;/p&gt;
&lt;p&gt;The ingredients are seven, not four.&lt;/p&gt;

A new CPU privilege state introduced by Intel TDX. Code running in SEAM is hosted in a physical-memory range identified by the SEAM Range Register (SEAMRR) that the legacy VMM cannot inspect. Only the signed Intel TDX Module runs in SEAM, and it does so as a peer VMM that mediates every interaction between the legacy hypervisor and a Trust Domain [@intel-tdx-overview].
&lt;p&gt;The Intel &lt;strong&gt;TDX Module&lt;/strong&gt; is the second ingredient: a CPU-measured firmware binary, loaded by the SEAMLDR at boot, that mediates every entry into and exit from a Trust Domain via &lt;code&gt;SEAMCALL&lt;/code&gt; and &lt;code&gt;SEAMRET&lt;/code&gt; instructions. The Intel-signed &lt;code&gt;intel-tdx-module-1.5-base-spec-348549002.pdf&lt;/code&gt; is the canonical specification for the current generation [@intel-tdx-module-base-348549].&lt;/p&gt;
&lt;p&gt;The third is the &lt;strong&gt;Trust Domain&lt;/strong&gt;, a VM-shaped container that carries a &lt;em&gt;Shared Bit&lt;/em&gt; in the guest physical address. A clear shared bit means the page is private; a set shared bit means the page is deliberately shared with the hypervisor for I/O bounce buffers. The fourth is &lt;strong&gt;TME-MK&lt;/strong&gt; memory encryption, derived from the December 2017 TME spec [@intel-mem-enc-spec-336907] and the September 2018 MKTME Linux-kernel RFC [@lwn-mktme]: AES-128 in XTS mode, with the keyID embedded in the upper physical-address bits, gives one key per Trust Domain.&lt;/p&gt;
&lt;p&gt;The fifth ingredient is the structural analogue of AMD&apos;s RMP, the &lt;strong&gt;Physical-Address-Metadata table&lt;/strong&gt; (PAMT). The Intel TDX overview enumerates the architectural elements precisely: &quot;Intel TDX uses architectural elements such as SEAM, a shared bit in Guest Physical Address (GPA), secure Extended Page Table (EPT), physical-address-metadata table, Intel Total Memory Encryption -- Multi-Key (Intel TME-MK), and remote attestation&quot; [@intel-tdx-overview].&lt;/p&gt;
&lt;p&gt;The sixth ingredient is the measurement registers. The &lt;strong&gt;MRTD&lt;/strong&gt; is the build-time measurement of the initial TD image, similar to a TPM PCR fixed at launch. &lt;strong&gt;RTMR0 through RTMR3&lt;/strong&gt; are the runtime measurement registers, four PCR-equivalents the TDX Module exposes for runtime measured-boot extensions. These four registers are what a TDX-aware Trusted Boot chain extends.&lt;/p&gt;

The build-time and runtime measurement registers exposed by an Intel TDX Trust Domain. MRTD is hashed by the TDX Module over the initial TD launch image and is the SEAM analogue of an immutable launch PCR. RTMR0-3 are four extendable runtime registers, the SEAM analogue of the runtime-extension TPM PCRs (the same conceptual role as PCRs 8-15 in the canonical static-OS measurement chain), that hold a measured-boot chain of subsequent components (loaders, kernel, initrd, paravisor pages). The canonical TDX-vTPM event-log convention used by Linux IMA and systemd-stub maps RTMR[0] to PCR[1, 7]; RTMR[1] to PCR[2-6]; RTMR[2] to PCR[8-9]; and RTMR[3] to PCR[14, 17-22]. A TD Quote carries all five values; a verifier evaluates them against a customer-defined policy [@intel-tdx-overview; @intel-tdx-spec-344425].
&lt;p&gt;The seventh is the &lt;strong&gt;TD Quote&lt;/strong&gt;. A TD Quote is produced in two stages. The TD guest first issues &lt;code&gt;TDCALL[TDG.MR.REPORT]&lt;/code&gt;, which lands in the TDX Module (the VMM-to-Module entry is the separate &lt;code&gt;SEAMCALL&lt;/code&gt; interface defined in the comparison table below); the TDX Module returns an in-SEAM &lt;code&gt;SEAMREPORT&lt;/code&gt; structure, a Report MAC-signed with a key bound to the platform. A host-side SGX Quoting Enclave then converts that Report into a Quote signed with the SGX-resident QE attestation key. The Quote carries MRTD, RTMR0-3, the TD&apos;s TCB SVN (a per-component firmware version vector), and a caller nonce. The Intel Trust Authority (or Microsoft Azure Attestation, or Google&apos;s verifier) checks the quote [@intel-tdx-overview; @intel-tdx-module-base-348549].&lt;/p&gt;

flowchart TB
    HW[&quot;Silicon: TME-MK + SEAMRR -- + Secure EPT + PAMT&quot;]
    SEAM[&quot;Intel TDX Module -- (SEAM mode)&quot;]
    VMM[&quot;Legacy VMM -- (Hyper-V / KVM)&quot;]
    TD1[&quot;Trust Domain 1&quot;]
    TD2[&quot;Trust Domain 2&quot;]
    HW --&amp;gt; SEAM
    HW --&amp;gt; VMM
    VMM -- &quot;SEAMCALL&quot; --&amp;gt; SEAM
    SEAM -- &quot;SEAMRET&quot; --&amp;gt; VMM
    SEAM -- &quot;TDENTER / TDEXIT&quot; --&amp;gt; TD1
    SEAM -- &quot;TDENTER / TDEXIT&quot; --&amp;gt; TD2
&lt;h3&gt;Side by side&lt;/h3&gt;
&lt;p&gt;The two architectures answer the same question and arrive at the same end-state contract through fundamentally different trust geometries.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ingredient&lt;/th&gt;
&lt;th&gt;AMD SEV-SNP&lt;/th&gt;
&lt;th&gt;Intel TDX&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Memory cipher&lt;/td&gt;
&lt;td&gt;AES-128, per-VM key in memory controller&lt;/td&gt;
&lt;td&gt;AES-128-XTS, per-TD key by keyID (TME-MK)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integrity binding&lt;/td&gt;
&lt;td&gt;Reverse Map Table per host page&lt;/td&gt;
&lt;td&gt;Physical-Address-Metadata table + Secure EPT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mediating component&lt;/td&gt;
&lt;td&gt;AMD-SP firmware (microcode + on-die security processor)&lt;/td&gt;
&lt;td&gt;Signed Intel TDX Module in SEAM mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Privilege lattice&lt;/td&gt;
&lt;td&gt;VMPL0-VMPL3 (four levels)&lt;/td&gt;
&lt;td&gt;TD Partitioning L1/L2 (TDX Module 1.5)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build-time measurement&lt;/td&gt;
&lt;td&gt;Launch measurement in SNP_REPORT&lt;/td&gt;
&lt;td&gt;MRTD inside the TDX Module&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runtime measurement&lt;/td&gt;
&lt;td&gt;None at module level (vTPM provides it)&lt;/td&gt;
&lt;td&gt;RTMR0-RTMR3 inside the TDX Module&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attestation signing key&lt;/td&gt;
&lt;td&gt;VCEK (ECDSA-P384), per chip per TCB version&lt;/td&gt;
&lt;td&gt;SGX-resident Quoting Enclave key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Certificate chain&lt;/td&gt;
&lt;td&gt;VCEK -&amp;gt; ASK -&amp;gt; AMD root&lt;/td&gt;
&lt;td&gt;Quoting Enclave -&amp;gt; Intel root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Page-validation primitive&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PVALIDATE&lt;/code&gt; (guest-driven)&lt;/td&gt;
&lt;td&gt;TDX Module-mediated page acceptance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shared-page indicator&lt;/td&gt;
&lt;td&gt;C-bit (clear = shared, set = encrypted)&lt;/td&gt;
&lt;td&gt;Shared bit in GPA (set = shared)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hypervisor-to-trust-component call&lt;/td&gt;
&lt;td&gt;Mediated VMRUN&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SEAMCALL&lt;/code&gt; / &lt;code&gt;SEAMRET&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;{`
// Pseudo-code sketch of how a SEV-SNP guest assembles an SNP_REPORT
// via SNP_GUEST_REQUEST. Not runnable against silicon; the point is
// the shape of the evidence the verifier receives.&lt;/p&gt;
&lt;p&gt;function buildSnpReport(nonce32) {
  // Guest builds a request structure with a 32-byte user nonce.
  const request = { reportData: nonce32, vmpl: 0 };&lt;/p&gt;
&lt;p&gt;  // Hypercall lands in the AMD-SP, which signs with the VCEK.
  const report = sp_guest_request(request);&lt;/p&gt;
&lt;p&gt;  return {
    version:        report.version,        // structure version
    guestSvn:       report.guestSvn,       // guest firmware SVN
    policy:         report.policy,         // SEV policy bits at launch
    familyId:       report.familyId,       // 16-byte ID set by launch
    measurement:    report.measurement,    // 48-byte launch measurement
    reportData:     report.reportData,     // echoes user nonce
    vmpl:           report.vmpl,           // VMPL of issuing component
    chipId:         report.chipId,         // 64-byte unique chip ID
    tcbVersion:     report.tcbVersion,     // boot loader / TEE / SNP / microcode SVNs
    signature:      report.signature,      // ECDSA P-384 over the report
  };
}&lt;/p&gt;
&lt;p&gt;// The verifier walks the certificate chain VCEK -&amp;gt; ASK -&amp;gt; AMD root,
// re-checks the signature, and then evaluates policy on the claims.
console.log(JSON.stringify(buildSnpReport(&apos;nonce_from_relying_party&apos;), null, 2));
`}&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; SEV-SNP and TDX answer the same question differently. AMD bakes integrity into microcode plus the AMD-SP, signs with a per-chip per-TCB VCEK, and exposes a four-level VMPL lattice. Intel puts integrity into a separately loaded, separately signed software module running in a new CPU mode, signs with an SGX-resident Quoting Enclave, and exposes L1/L2 partitioning. The trust roots, the breaking surfaces, and the supply chains are different even when the end-state contract is the same.&lt;/p&gt;
&lt;/blockquote&gt;

flowchart LR
    subgraph AMD[&quot;AMD SEV-SNP&quot;]
        A1[&quot;AMD-SP firmware&quot;]
        A2[&quot;Reverse Map Table&quot;]
        A3[&quot;VMPL0-3 lattice&quot;]
        A4[&quot;SNP_REPORT -- VCEK signed&quot;]
    end
    subgraph INTEL[&quot;Intel TDX&quot;]
        I1[&quot;Signed TDX Module&quot;]
        I2[&quot;PAMT + Secure EPT&quot;]
        I3[&quot;L1 / L2 partitioning&quot;]
        I4[&quot;TD Quote -- Quoting Enclave&quot;]
    end
    A1 --- I1
    A2 --- I2
    A3 --- I3
    A4 --- I4
&lt;p&gt;Generation 2 makes a confidential VM architecturally possible. But a SEV-SNP guest is not yet a Windows Server VM you can lift and shift onto Azure -- there is a whole productisation problem still to solve. How does Microsoft put a paravisor inside that trust boundary, and what does it deliver?&lt;/p&gt;
&lt;h2&gt;5. The contract: a cloud-shaped TEE&lt;/h2&gt;
&lt;p&gt;A confidential VM is two rails, not one. Rail 1 is &lt;strong&gt;confidentiality plus integrity&lt;/strong&gt; of memory and CPU state. Rail 2 is &lt;strong&gt;measurement plus attestation&lt;/strong&gt;. SEV-SNP and TDX each deliver both rails. Anyone who has read the equivalent Secure Boot / Trusted Boot story will recognise the shape: a measurement chain anchored in silicon, terminated in a remote verifier, with a signed result that a relying party can act on.&lt;/p&gt;
&lt;p&gt;The Confidential Computing Consortium&apos;s framing, repeated here as a contract the architectures actually realise: &quot;Confidential Computing protects data in use by performing computation in a hardware-based, attested Trusted Execution Environment&quot; [@ccc-about]. &lt;em&gt;Hardware-based&lt;/em&gt; is rail 1. &lt;em&gt;Attested&lt;/em&gt; is rail 2. The two words together are why a TPM-only system, however well-measured, is not a CVM, and why a SEV-only system, however well-encrypted, is not a CVM either.&lt;/p&gt;
&lt;p&gt;RFC 9334 names the actors. The &lt;em&gt;attester&lt;/em&gt; is the guest plus the paravisor producing evidence. The &lt;em&gt;evidence&lt;/em&gt; is the SNP_REPORT or TD Quote, plus optionally a vTPM quote chained to it. The &lt;em&gt;verifier&lt;/em&gt; is the entity that checks the evidence against a policy and emits an attestation result. The &lt;em&gt;relying party&lt;/em&gt; is the consumer who acts on the result -- typically a key vault releasing a wrapped secret [@rfc9334].&lt;/p&gt;

The IETF Remote ATtestation procedureS working group&apos;s RFC 9334 (January 2023) fixes the vocabulary the rest of the confidential-computing industry uses: an *attester* produces *evidence*; a *verifier* checks it against reference values from an *endorser* and a *reference value provider* and emits an *attestation result*; a *relying party* acts on the result. RFC 9334 §5 names two topologies. In the *Passport* model (§5.1), the attester sends evidence directly to the verifier, collects a signed result, and presents that result to the relying party. In the *Background-Check* model (§5.2), the attester sends evidence to the relying party, which forwards it to the verifier and receives the result on the attester&apos;s behalf. Microsoft Azure Attestation, Intel Trust Authority, Google&apos;s verifier, and AWS KMS attestation all implement variants of this model [@rfc9334].
&lt;p&gt;Microsoft Azure Attestation implements the &lt;em&gt;Passport&lt;/em&gt; model. The attester -- the CVM, through its in-guest agent -- sends evidence (an SNP_REPORT or TD Quote, plus a vTPM quote) directly to MAA. MAA validates the evidence against the customer-authored policy and returns a signed JWT. The attester then presents that JWT to the relying party. Azure Key Vault authorises Secure Key Release against the MAA-issued claim set, not against raw SNP evidence. The relying party never sees the SNP_REPORT and never calls MAA on the attester&apos;s behalf, which is the design signature of Passport rather than Background-Check [@rfc9334; @msdocs-maa-overview].&lt;/p&gt;

flowchart LR
    Rail1[&quot;Rail 1 -- Confidentiality + Integrity&quot;] --&amp;gt; Mem[&quot;Encrypted DRAM -- + RMP / PAMT -- + encrypted register state&quot;]
    Rail2[&quot;Rail 2 -- Measurement + Attestation&quot;] --&amp;gt; Ev[&quot;Evidence: -- SNP_REPORT / TD Quote -- + vTPM quote&quot;]
    Ev --&amp;gt; Ver[&quot;Verifier: -- MAA / Intel Trust Authority&quot;]
    Ver --&amp;gt; Tok[&quot;Attestation Result -- (signed JWT)&quot;]
    Tok --&amp;gt; RP[&quot;Relying Party -- (Azure Key Vault)&quot;]
    RP --&amp;gt; Secret[&quot;Wrapped secret release&quot;]
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; A Confidential VM is not a memory-encryption product. It is a contract: confidentiality with integrity, plus an evidence-bearing attestation chain that a relying party can verify before it releases a secret. Anyone who sells you &quot;confidential&quot; infrastructure without rail 2 is selling you half the product.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If this is the contract, how does Azure actually build a usable Windows-guest CVM on top of it? What lives where, and who signs what?&lt;/p&gt;
&lt;h2&gt;6. State of the art on Azure: from silicon to MAA&lt;/h2&gt;
&lt;p&gt;July 20, 2022. Microsoft Azure announces general availability of the DCasv5 and ECasv5 confidential VM SKUs on AMD third-generation EPYC silicon. The Register&apos;s coverage captures the framing: &quot;Microsoft is expanding its Azure confidential computing portfolio with virtual machines that use the encryption and memory protection features of AMD&apos;s third-gen Epyc processors. ... Customers using them can also use the free Microsoft Azure Attestation (MAA) service to remotely verify the operating environment and integrity of the software binaries running on it&quot; [@theregister-azure-cvm]. That is the moment a confidential VM stops being a research paper and starts being a product the customer can pay for by the hour.&lt;/p&gt;
&lt;p&gt;This section walks the Azure stack bottom-up. It is the longest section because it is the article&apos;s reason to exist.&lt;/p&gt;
&lt;h3&gt;The Azure CVM SKU family&lt;/h3&gt;
&lt;p&gt;Microsoft Learn&apos;s confidential-computing products page enumerates the current Azure CVM SKU map. On AMD SEV-SNP: &quot;DCasv5 and ECasv5 enable rehosting of existing workloads&quot; [@msdocs-overview-products]. These are the third-generation EPYC Milan SKUs that went GA in July 2022. The Learn page continues: &quot;DCasv6 and ECasv6 confidential VMs based on fourth-generation AMD EPYC processors are currently in gated preview&quot; [@msdocs-overview-products]. Lenovo Press corroborates that &quot;SEV-SNP is supported on AMD EPYC processors starting with the AMD EPYC 7003 series processors&quot; -- i.e., Milan -- with the third-generation 7003 series being the first SEV-SNP silicon [@lenovo-lp1893].&lt;/p&gt;
&lt;p&gt;On Intel TDX: &quot;DCesv5 and ECesv5&quot; are the fourth-generation Xeon Sapphire Rapids SKUs, generally available. SecurityWeek&apos;s coverage anchors the Sapphire Rapids launch: &quot;Intel announced on Tuesday that it has added Intel Trust Domain Extensions (TDX) to its confidential computing portfolio with the launch of its new 4th Gen Xeon enterprise processors. ... The feature will be available through cloud providers such as Microsoft, Google, IBM and Alibaba&quot; [@securityweek-tdx]. Wikipedia notes that &quot;TDX is available for 5th generation Intel Xeon processors (codename Emerald Rapids) and Edge Enhanced Compute variants of 4th generation Xeon processors (codename Sapphire Rapids)&quot; [@wiki-tdx]. The fifth-generation Emerald Rapids SKUs DCesv6 and ECesv6 are in preview at the time of writing, per the Learn products page [@msdocs-overview-products].&lt;/p&gt;
&lt;p&gt;GPU CVMs anchor on the same CPU-side TEEs and add a GPU TEE. The Learn page describes the NCCadsH100v5 SKU: &quot;NCCadsH100v5 confidential VMs come with a GPU ... use linked CPU and GPU Trusted Execution Environments (TEEs)&quot; [@msdocs-overview-products]. This is the linked-attestation product for confidential AI -- a SEV-SNP host CVM bound by attestation to an NVIDIA H100 in Confidential Compute mode.March 30, 2026 brings a pricing change customers should plan for. Microsoft Learn states: &quot;From March 30 2026, encrypted OS disks will incur higher costs&quot; [@msdocs-azure-cvm]. Confidential OS-disk encryption remains the recommended configuration where the workload requires it; the change is to the billing line, not to the architecture.&lt;/p&gt;
&lt;h3&gt;The paravisor: OpenHCL on OpenVMM&lt;/h3&gt;
&lt;p&gt;The single most important productisation move Azure made is what Microsoft calls a &lt;em&gt;paravisor&lt;/em&gt;. The framing from the October 17, 2024 Tech Community announcement is verbatim: &quot;Microsoft developed the first paravisor in the industry, and for years, we have been enhancing the paravisor offered to Azure customers. This effort now culminates in the release of a new, open source paravisor, called OpenHCL&quot; [@openhcl-blog].&lt;/p&gt;

A thin operating system running inside the trust boundary of a confidential VM, between the host hypervisor and the customer guest. The paravisor exposes the synthetic devices, the vTPM, and the GPA partitioning that a Windows or Linux guest expects from a Hyper-V environment -- without trusting any of those services to the host below the trust boundary. The paravisor is itself part of the TCB, but on Azure the paravisor binary is open source [@openhcl-blog; @openvmm-repo].

Microsoft&apos;s open-source paravisor, released on October 17, 2024. OpenHCL is built on top of OpenVMM, &quot;a modular, cross-platform Virtual Machine Monitor (VMM), written in Rust&quot; [@openvmm-repo]. On Azure SEV-SNP CVMs OpenHCL runs at VMPL0; on TDX CVMs it runs in the L1 partition seat under TD Partitioning [@openhcl-blog; @openvmm-dev]. It mediates virtual devices, brokers the vTPM, manages GPA partitioning between private and shared pages, and handles diagnostics, all inside the trust boundary.

Microsoft developed the first paravisor in the industry, and for years, we have been enhancing the paravisor offered to Azure customers. This effort now culminates in the release of a new, open source paravisor, called OpenHCL. -- Microsoft Tech Community, OpenHCL announcement, October 17, 2024 [@openhcl-blog]
&lt;p&gt;The OpenVMM repository README puts the focus crisply: &quot;OpenVMM is a modular, cross-platform Virtual Machine Monitor (VMM), written in Rust. Although it can function as a traditional VMM, OpenVMM&apos;s development is currently focused on its role in the OpenHCL paravisor&quot; [@openvmm-repo]. The OpenVMM Guide lists the virtualisation APIs OpenVMM supports, including &quot;MSHV (using VSM / TDX / SEV-SNP)&quot; for paravisor mode, WHP for a Windows host, and KVM for a Linux host [@openvmm-dev]. The use cases listed include Azure Boost, Trusted Launch, and Confidential VMs.&lt;/p&gt;
&lt;p&gt;Because OpenHCL is in the TCB, customers do not avoid trusting Microsoft by running it -- but they can now &lt;em&gt;read the source&lt;/em&gt;. That is a categorical change from earlier closed paravisors. The point about a TCB is not its size but its auditability and reviewability.&lt;/p&gt;
&lt;p&gt;The canonical Linux-side analogue is AMD&apos;s &lt;strong&gt;Secure VM Service Module (SVSM)&lt;/strong&gt;, which runs at VMPL0 inside an SEV-SNP guest and provides the same kind of in-trust-boundary services (virtual TPM, paravirtualised I/O brokering, attestation surface) that OpenHCL provides on Azure [@amd-svsm]. SVSM and OpenHCL solve the same problem with different implementations and different signing chains. The Linux community&apos;s reference SVSM is the COCONUT-SVSM open-source project [@coconut-svsm]. A reader who needs a confidential-VM paravisor on a non-Azure Linux host should look at SVSM; a reader who needs it on Azure gets OpenHCL.&lt;/p&gt;
&lt;h3&gt;The vTPM&lt;/h3&gt;
&lt;p&gt;Inside the paravisor&apos;s protected memory, OpenHCL synthesises a per-VM virtual TPM. Microsoft Learn is verbatim: &quot;Azure confidential VMs feature a virtual TPM (vTPM) for Azure VMs. ... Confidential VMs have their own dedicated vTPM instance, which runs in a secure environment outside the reach of any VM&quot; [@msdocs-azure-cvm]. The architectural significance of this single sentence cannot be overstated. The vTPM&apos;s endorsement key is bound at provision time to the SEV-SNP or TDX hardware attestation report, so a vTPM quote can be transitively chained back to silicon: &lt;code&gt;vTPM quote -&amp;gt; EK certificate -&amp;gt; SNP_REPORT or TD Quote -&amp;gt; VCEK or Intel signing root&lt;/code&gt; [@msdocs-azure-cvm].&lt;/p&gt;
&lt;p&gt;The practical consequence is that a Windows Server CVM runs an unmodified Trusted Boot chain inside the guest. PCR-7 still indexes the Secure Boot signer. Code Integrity policies still extend their own PCRs. BitLocker still seals the Volume Master Key to the TPM. None of those operating-system features need to know that the TPM they are talking to is synthesised by OpenHCL inside an SEV-SNP guest -- and yet every one of those features is now anchored, transitively, to AMD or Intel silicon rather than to a discrete TPM chip on a motherboard the cloud customer cannot inspect.&lt;/p&gt;
&lt;h3&gt;Microsoft Azure Attestation&lt;/h3&gt;
&lt;p&gt;The verifier in Azure&apos;s confidential-computing stack is Microsoft Azure Attestation. The Learn overview describes it: &quot;Microsoft Azure Attestation is a unified solution for remotely verifying the trustworthiness of a platform and integrity of the binaries running inside it. The service supports attestation of the platforms backed by Trusted Platform Modules (TPMs) alongside the ability to attest to the state of Trusted Execution Environments (TEEs) such as Intel Software Guard Extensions (SGX) enclaves, Virtualization-based Security (VBS) enclaves ... and Azure confidential VMs&quot; [@msdocs-maa-overview].&lt;/p&gt;

Azure&apos;s unified verifier service for confidential platforms. MAA accepts evidence -- an SNP_REPORT or TD Quote, plus a vTPM quote, plus boot measurements -- evaluates it against a customer-defined attestation policy, and returns a signed JWT carrying the issued claims. MAA&apos;s role in the RATS architecture is the *verifier*, in *Passport* topology: the attester collects MAA&apos;s signed result and presents it to the relying party (Azure Key Vault) [@msdocs-maa-overview; @rfc9334].
&lt;p&gt;The SKR loop is documented verbatim. &quot;When a CVM boots up, SNP report containing the guest VM firmware measurements are sent to Azure Attestation. The service validates the measurements and issues an attestation token that is used to release keys from Managed-HSM or Azure Key Vault. These keys are used to decrypt the vTPM state of the guest VM, unlock the OS disk and start the CVM&quot; [@msdocs-maa-overview].&lt;/p&gt;

The Azure Key Vault / Managed HSM operation that releases a wrapped key only after the requesting party presents a valid Microsoft Azure Attestation token that satisfies the key&apos;s release policy. SKR is what closes the loop between rail 1 (memory protection) and rail 2 (attestation) at the customer&apos;s perimeter: a key never leaves the HSM unless the attesting CVM has been verified [@msdocs-maa-overview; @msdocs-azure-cvm].
&lt;h3&gt;MAA policy v1.2&lt;/h3&gt;
&lt;p&gt;The policy language is the operational surface customers actually interact with. The MAA policy v1.2 grammar has four segments, verbatim from the Microsoft Learn page: &quot;Policy version 1.2 has four segments: version, configurationrules, authorizationrules, issuancerules&quot; [@maa-policy-v12]. The critical operational distinction is between the last two. Authorization rules can fail attestation; issuance rules cannot. The docs are explicit: &quot;&lt;strong&gt;authorizationrules&lt;/strong&gt;: ... These rules can be used to fail attestation. &lt;strong&gt;issuancerules&lt;/strong&gt;: ... These rules can be used to add to the outgoing claim set and the response token. These rules can&apos;t be used to fail attestation&quot; [@maa-policy-v12].&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The most common bug in hand-authored MAA policies is writing a security gate as an issuance rule. If you want a missing SecureBoot value to &lt;em&gt;reject&lt;/em&gt; the attestation, the predicate must live in &lt;code&gt;authorizationrules&lt;/code&gt;. Putting it in &lt;code&gt;issuancerules&lt;/code&gt; only adds a claim to the resulting JWT; the relying party then has to enforce the gate. The verifier will mint the token either way [@maa-policy-v12].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The configuration-rule defaults give you sane behaviour out of the box: &lt;code&gt;require_valid_aik_cert&lt;/code&gt; defaults to &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;required_pcr_mask&lt;/code&gt; defaults to &lt;code&gt;0xFFFFFF&lt;/code&gt; (the first twenty-four PCRs must appear in the quote) [@maa-policy-v12].&lt;/p&gt;
&lt;p&gt;Claim extraction uses JmesPath. The Learn page reproduces a Secure Boot detection rule that the verifier can use to flip a &lt;code&gt;secureBootEnabled&lt;/code&gt; claim:&lt;/p&gt;
&lt;p&gt;{`
// Verbatim from Microsoft Learn (MAA policy v1.2 Secure Boot detection).
// This is JS-style pseudo-code that walks the rule structure, not
// runnable MAA syntax.&lt;/p&gt;
&lt;p&gt;const policyRule = {
  segment: &apos;issuancerules&apos;,
  // &quot;Claim rules&quot; use JmesPath queries against parsed event data.
  step1: {
    when: &apos;type == &quot;events&quot; &amp;amp;&amp;amp; issuer == &quot;AttestationService&quot;&apos;,
    add:  &apos;efiConfigVariables&apos;,
    via:  &quot;Events[?EventTypeString == &apos;EV_EFI_VARIABLE_DRIVER_CONFIG&apos; &quot; +
          &quot;&amp;amp;&amp;amp; ProcessedData.VariableGuid == &apos;8BE4DF61-93CA-11D2-AA0D-00E098032B8C&apos;]&quot;
  },
  // GUID 8BE4DF61-93CA-11D2-AA0D-00E098032B8C is the EFI Global Variable
  // namespace, which is where &apos;SecureBoot&apos; lives.
  step2: {
    issue: &apos;secureBootEnabled&apos;,
    via: &quot;[?ProcessedData.UnicodeName == &apos;SecureBoot&apos;] &quot; +
         &quot;| length(@) == 1 &amp;amp;&amp;amp; @[0].ProcessedData.VariableData == &apos;AQ&apos;&quot;
  },
  // &apos;AQ&apos; is base64(&apos;\x01&apos;), i.e. SecureBoot==1.
  fallback: { issue: &apos;secureBootEnabled&apos;, value: false }
};&lt;/p&gt;
&lt;p&gt;console.log(&apos;Segment :&apos;, policyRule.segment);                 // issuancerules
console.log(&apos;Yields  :&apos;, &apos;secureBootEnabled claim in JWT&apos;);
console.log(&apos;Lesson  :&apos;, &apos;Add this to authorizationrules to actually fail!&apos;);
`}&lt;/p&gt;

sequenceDiagram
    participant E as Evidence (SNP_REPORT + vTPM)
    participant C as configurationrules
    participant A as authorizationrules
    participant I as issuancerules
    participant J as Signed JWT
    E-&amp;gt;&amp;gt;C: parse + defaults -- (require_valid_aik_cert, PCR mask)
    C-&amp;gt;&amp;gt;A: typed claim set
    A--&amp;gt;&amp;gt;A: predicate checks
    alt All authorization rules pass
        A-&amp;gt;&amp;gt;I: continue
        I-&amp;gt;&amp;gt;J: mint claims (secureBootEnabled, x-ms-isolation-tee, ...)
        J--&amp;gt;&amp;gt;E: signed attestation token
    else Any authorization rule fails
        A--&amp;gt;&amp;gt;E: attestation rejected
    end
&lt;h3&gt;The two-axis privilege model: VMPL crossed with VTL&lt;/h3&gt;
&lt;p&gt;A common misconception is that a SEV-SNP CVM makes Virtualization-Based Security inside the guest redundant. The argument goes: &quot;the whole VM is in a TEE, so why do I still need a Secure Kernel?&quot; The architecture answers the question by saying that VMPL and VTL are orthogonal axes.&lt;/p&gt;
&lt;p&gt;The VMPL axis is &lt;em&gt;cloud-operator threat model&lt;/em&gt;. VMPL0 (the OpenHCL paravisor) sees pages that the customer&apos;s kernel at VMPL2 does not, and the host hypervisor below VMPL0 sees none of the encrypted memory at all. VMPL keeps the operator out.&lt;/p&gt;
&lt;p&gt;The VTL axis is &lt;em&gt;intra-guest threat model&lt;/em&gt;. Inside the guest, VTL1 hosts the Secure Kernel, IUM (Isolated User Mode) trustlets like LSAIso for Credential Guard, and the HVCI code-integrity verifier. VTL0 hosts the normal Windows kernel and user mode. VTL keeps a kernel-mode attacker out of LSA secrets and credential blobs. Without VTL, the customer&apos;s own kernel can read its own LSAIso heap; without VMPL, the hypervisor can read the customer&apos;s RAM.&lt;/p&gt;
&lt;p&gt;VBS-inside-CVM is therefore not a duplication. It closes two different attack classes.&lt;/p&gt;

flowchart TB
    subgraph Host[&quot;Host below trust boundary&quot;]
        H[&quot;Hyper-V host kernel -- (no access to encrypted RAM)&quot;]
    end
    subgraph Boundary[&quot;Inside SEV-SNP / TDX trust boundary&quot;]
        subgraph V0[&quot;VMPL0 / L1 TD partition&quot;]
            P[&quot;OpenHCL paravisor -- (synthetic devices, vTPM)&quot;]
        end
        subgraph V2[&quot;VMPL2 / L2 TD partition (customer guest)&quot;]
            subgraph T1[&quot;VTL1 (Secure Kernel)&quot;]
                SK[&quot;Secure Kernel -- + IUM trustlets: -- LSAIso, Credential Guard&quot;]
            end
            subgraph T0[&quot;VTL0 (normal OS)&quot;]
                W[&quot;Windows Server kernel -- + user mode&quot;]
            end
        end
    end
    H -. &quot;blocked by VMPL + -- RMP / PAMT&quot; .-&amp;gt; P
    W -. &quot;blocked by VTL 1 -- VBS / HVCI&quot; .-&amp;gt; SK
    P --&amp;gt; V2
&lt;h3&gt;Confidential Containers: three Azure surfaces&lt;/h3&gt;
&lt;p&gt;Confidential VMs are not the only Azure surface where SEV-SNP attestation can land. There are three more.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Confidential Containers on Azure Container Instances (ACI), GA.&lt;/strong&gt; Microsoft Learn: &quot;Confidential containers on Azure Container Instances are deployed in a container group with a Hyper-V isolated TEE, which includes a memory encryption key generated and managed by an AMD SEV-SNP capable processor&quot; [@msdocs-aci-confidential]. ACI Confidential Containers use &lt;em&gt;confidential computing enforcement&lt;/em&gt; (CCE) policies generated by the &lt;code&gt;confcom&lt;/code&gt; Azure CLI extension, and they expose SNP attestation reports for the SKR sidecar pattern.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Confidential Containers on AKS, preview, sunsetting.&lt;/strong&gt; The Learn AKS page is explicit: &quot;The Confidential Containers preview is set to sunset in March 2026. After this date, customers with existing Confidential Container node pools should expect to see reduced functionality, and you won&apos;t be able to spin up any new nodes with the &lt;code&gt;KataCcIsolation&lt;/code&gt; runtime&quot; [@msdocs-aks-confidential-containers]. Microsoft routes customers to four alternatives: Confidential VM AKS node pools, ACI Confidential Containers, ARO Confidential Containers, and the upstream Confidential Containers project [@msdocs-aks-confidential-containers].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Confidential VM AKS worker nodes, GA.&lt;/strong&gt; A different model -- node-granularity CVM rather than per-pod CVM. Learn: &quot;AKS now supports confidential VM node pools with Azure confidential VMs. These confidential VMs are the generally available DCasv5 and ECasv5 confidential VM-series using 3rd Gen AMD EPYC processors with Secure Encrypted Virtualization-Secure Nested Paging (SEV-SNP) security features&quot; [@msdocs-aks-cvm-nodes]. This is a lift-and-shift path for existing AKS workloads.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Confidential Containers on ARO&lt;/strong&gt; is the Red Hat OpenShift equivalent, with Kata-isolated per-container SEV-SNP enforcement.&lt;/p&gt;
&lt;p&gt;The cross-cloud parallel is the CNCF Confidential Containers project, accepted to CNCF on March 8, 2022 at the Sandbox maturity level [@cncf-coco]. The project documentation describes it as &quot;an open source project that brings confidential computing to Cloud Native environments, using hardware technology to protect complex workloads&quot; [@coco-docs]. Trustee is the canonical attestation broker on the CNCF side. CoCo&apos;s substrate is Kata Containers&apos; MicroVM model; the TEE backing is currently Linux-only. The open-source community floor under all of this includes Edgeless&apos;s Constellation (historically the canonical confidential-Kubernetes distribution; the upstream repo was archived in 2025-2026 and Edgeless&apos;s successor project Contrast [@contrast] now carries the work forward at the workload-confidential-container layer rather than the whole-cluster layer) [@constellation], COCONUT-SVSM (the AMD-side reference SVSM running at VMPL0) [@coconut-svsm], and the CoCo Trustee attestation broker.&lt;/p&gt;
&lt;h3&gt;NVIDIA H100 CC on NCCadsH100v5&lt;/h3&gt;
&lt;p&gt;The Azure NCCadsH100v5 SKU pairs an SEV-SNP CVM with an NVIDIA H100 in Confidential Compute mode and links the two attestations together. CPU-side rail 1 is SEV-SNP. GPU-side rail 1 is H100 CC. Rail 2 must compose both: the relying party only releases the workload&apos;s key if both attestations check out. Cross-vendor attestation composition is one of the open standards problems §9 will revisit.&lt;/p&gt;

flowchart TB
    subgraph S[&quot;Silicon&quot;]
        AMD[&quot;AMD-SP firmware -- + SEV-SNP RMP&quot;]
        INTEL[&quot;Intel TDX Module -- (SEAM, SEAMRR)&quot;]
    end
    subgraph H[&quot;Host&quot;]
        HV[&quot;Azure Hyper-V -- (below trust boundary)&quot;]
    end
    subgraph P[&quot;Paravisor (in TCB)&quot;]
        OH[&quot;OpenHCL on OpenVMM -- VMPL0 / L1 TD seat&quot;]
        VT[&quot;vTPM synthesised -- by paravisor&quot;]
    end
    subgraph G[&quot;Customer guest&quot;]
        WS[&quot;Windows Server CVM -- (VTL0 + VTL1, VBS / HVCI)&quot;]
    end
    subgraph V[&quot;Verifier&quot;]
        MAA[&quot;Microsoft Azure Attestation -- (policy v1.2)&quot;]
    end
    subgraph R[&quot;Relying party&quot;]
        AKV[&quot;Azure Key Vault / -- Managed HSM (SKR)&quot;]
        APP[&quot;Customer application&quot;]
    end
    AMD --&amp;gt; HV
    INTEL --&amp;gt; HV
    HV --&amp;gt; OH
    OH --&amp;gt; VT
    OH --&amp;gt; WS
    WS -- &quot;SNP_REPORT -- or TD Quote -- + vTPM quote&quot; --&amp;gt; MAA
    MAA -- &quot;Signed JWT&quot; --&amp;gt; AKV
    AKV --&amp;gt; APP
&lt;p&gt;That is the Azure stack. But Azure is not the only design point -- Google and AWS chose different glue, and one of them is on a fundamentally different threat model. How do they compare?&lt;/p&gt;
&lt;h2&gt;7. Competing approaches&lt;/h2&gt;
&lt;p&gt;Three competitors share the design space with very different choices. Two are near-peers to Azure; one is a fundamentally different model that customers routinely confuse for the same product.&lt;/p&gt;
&lt;h3&gt;Google Cloud Confidential VMs&lt;/h3&gt;
&lt;p&gt;Google Cloud supports the same two CPU TEEs. The GCP Confidential VM docs are explicit: &quot;AMD Secure Encrypted Virtualization-Secure Nested Paging (SEV-SNP) expands on SEV, adding hardware-based security to help prevent malicious hypervisor-based attacks like data replay and memory remapping. Attestation reports can be requested at any time directly from the AMD Secure Processor&quot; [@gcp-cvm-overview]. And on the Intel side: &quot;Intel Trust Domain Extensions (TDX) creates an isolated trust domain (TD) within a VM, and uses hardware extensions for managing and encrypting memory&quot; [@gcp-cvm-overview].&lt;/p&gt;
&lt;p&gt;GCP&apos;s machine-type mapping is direct. AMD SEV / SEV-SNP runs on N2D and C3D; Intel TDX runs on C3 Confidential VMs. The Confidential Computing product hub lists &quot;Confidential VMs on the C3 machine series brings hardware-level protection to your AI models and data&quot; and &quot;Confidential VMs on the accelerator-optimized A3 machine series with NVIDIA H100 GPUs&quot; as the parallel GPU-CC product [@gcp-confidential-overview]. There is a Confidential Space product on top for multi-party analytics, plus Confidential GKE Nodes and Confidential Dataflow.&lt;/p&gt;
&lt;p&gt;The verifier-of-record is Google&apos;s own attestation service, with the guest&apos;s vTPM as the default trust root. Intel Trust Authority is supported as a plug-in alternative for TDX evidence.&lt;/p&gt;

The GCP Confidential VM docs make a claim Azure does not match: &quot;AMD SEV machines that use the N2D and C3D machine types support live migration&quot; [@gcp-cvm-overview]. Live migration of a confidential VM is genuinely hard: the encrypted state has to be re-keyed under the destination host&apos;s per-VM key, and the integrity-rail structures (RMP entries) have to be coherently re-established without ever exposing the plaintext to either host. AMD&apos;s SEV migration helper is the underlying mechanism. Azure does not currently expose live migration on its confidential VM SKUs. This is the most operationally consequential cross-cloud difference today.
&lt;p&gt;A small correction to a widely repeated framing. It is sometimes said that GCP&apos;s confidential offerings are &quot;also SEV-SNP&quot; -- the Stage 0 input to this article said exactly that. Per the GCP docs, GCP supports &lt;strong&gt;both&lt;/strong&gt; SEV-SNP and TDX [@gcp-cvm-overview]. If you are picking a CVM cloud for a multi-vendor strategy, treat GCP as a near-peer to Azure on the CPU dimension and differentiate on the verifier, the SKU mapping, and the live-migration story instead.&lt;/p&gt;
&lt;h3&gt;AWS Nitro Enclaves: a genuinely different model&lt;/h3&gt;
&lt;p&gt;The most common confusion in this design space is the assumption that AWS Nitro Enclaves is &quot;AWS&apos;s confidential VM product.&quot; It is not. It is a different model on a different threat boundary.&lt;/p&gt;
&lt;p&gt;The Nitro Enclaves user guide is unambiguous about the threat model. &quot;AWS Nitro Enclaves is an Amazon EC2 feature that allows you to create isolated execution environments ... Enclaves are separate, hardened, and highly-constrained virtual machines. They provide only secure local socket connectivity with their parent instance. They have no persistent storage, interactive access, or external networking&quot; [@aws-nitro-enclaves]. The same page continues: &quot;Nitro Enclaves is processor agnostic and it is supported on most Intel, AMD, and AWS Graviton-based Amazon EC2 instance types built on the AWS Nitro System&quot; [@aws-nitro-enclaves]. And: &quot;Nitro Enclaves use the same Nitro Hypervisor technology that provides CPU and memory isolation for Amazon EC2 instances&quot; [@aws-nitro-enclaves].&lt;/p&gt;
&lt;p&gt;Three differences matter.&lt;/p&gt;
&lt;p&gt;First, there is no CPU memory cipher. Isolation is enforced by the Nitro hypervisor on a dedicated Nitro System card, not by SEV-SNP or TDX. Memory is in the clear in DRAM, just architecturally walled off by the hypervisor and the hardware root of trust below it.&lt;/p&gt;
&lt;p&gt;Second, attestation signs through the Nitro hypervisor and integrates with AWS KMS. There is no VCEK or TDX Quoting Enclave.&lt;/p&gt;
&lt;p&gt;Third, the threat model is parent-instance and co-tenant isolation, not cloud-operator isolation. Amazon is in the TCB by design. A subpoena or a compromised AWS operator are within the threat model of Azure / GCP CVMs and outside the threat model of Nitro Enclaves.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If your threat model includes a malicious or compelled cloud operator, AWS Nitro Enclaves does not protect you. The Nitro hypervisor enforces the enclave boundary; it is software AWS owns and operates. Use Nitro Enclaves for what it is good at -- a hardened compartment for key material against your own parent instance and your own application bugs. Use SEV-SNP / TDX on Azure or GCP if you need cryptographic protection against the operator&apos;s hypervisor [@aws-nitro-enclaves].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nitro Enclaves still has a role: it is excellent at isolating a long-lived signing service from a more loosely audited application instance, and four enclaves per parent EC2 host is a generous concurrency budget for that pattern.&lt;/p&gt;
&lt;h3&gt;Confidential Containers and NVIDIA H100 CC&lt;/h3&gt;
&lt;p&gt;The Confidential Containers project crosses cloud boundaries. CNCF accepted it in March 2022 [@cncf-coco]. The project docs describe it as &quot;an open source project that brings confidential computing to Cloud Native environments, using hardware technology to protect complex workloads&quot; [@coco-docs]. The Azure surfaces (ACI, AKS, ARO) were covered in §6; the equivalent on AWS is the Kata Containers + Confidential Containers combination on top of bare-metal Nitro hosts, and on GCP it lands on Confidential GKE Nodes.&lt;/p&gt;
&lt;p&gt;The NVIDIA H100 CC story is roughly cross-cloud parity. Azure NCCadsH100v5 pairs SEV-SNP with H100 CC; Google&apos;s A3 series pairs SEV-SNP and TDX with H100 CC. Cross-vendor attestation composition is the open standards problem on which the relying party experience still depends. On the silicon side, ARM&apos;s Confidential Compute Architecture (CCA, with Area Management Extension) is the ARM-side analogue of SEV-SNP/TDX, and Apple&apos;s Secure Enclave Processor is a board-scoped TEE with a different form factor; both are adjacent VM-scoped or board-scoped TEE designs but out of scope for the cloud-CVM body of this article.&lt;/p&gt;
&lt;h3&gt;The head-to-head matrix&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Azure CVM&lt;/th&gt;
&lt;th&gt;GCP CVM&lt;/th&gt;
&lt;th&gt;AWS Nitro Enclaves&lt;/th&gt;
&lt;th&gt;Confidential Containers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;CPU TEE&lt;/td&gt;
&lt;td&gt;SEV-SNP, Intel TDX&lt;/td&gt;
&lt;td&gt;SEV / SEV-SNP, Intel TDX&lt;/td&gt;
&lt;td&gt;None (Nitro hypervisor)&lt;/td&gt;
&lt;td&gt;SEV-SNP, TDX (varies by host)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory cipher&lt;/td&gt;
&lt;td&gt;AES (per-VM, per-TD)&lt;/td&gt;
&lt;td&gt;AES (per-VM, per-TD)&lt;/td&gt;
&lt;td&gt;None (host RAM)&lt;/td&gt;
&lt;td&gt;Inherited from host TEE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integrity rail&lt;/td&gt;
&lt;td&gt;RMP (AMD), PAMT (Intel)&lt;/td&gt;
&lt;td&gt;RMP, PAMT&lt;/td&gt;
&lt;td&gt;Nitro hypervisor isolation&lt;/td&gt;
&lt;td&gt;Inherited from host TEE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attestation evidence&lt;/td&gt;
&lt;td&gt;SNP_REPORT, TD Quote, vTPM quote&lt;/td&gt;
&lt;td&gt;SNP_REPORT, TD Quote, vTPM&lt;/td&gt;
&lt;td&gt;Nitro attestation document&lt;/td&gt;
&lt;td&gt;TEE evidence + container measurement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verifier&lt;/td&gt;
&lt;td&gt;Microsoft Azure Attestation&lt;/td&gt;
&lt;td&gt;Google attestation, Intel Trust Authority&lt;/td&gt;
&lt;td&gt;AWS KMS&lt;/td&gt;
&lt;td&gt;Trustee (CNCF)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operator threat model&lt;/td&gt;
&lt;td&gt;Yes (operator excluded)&lt;/td&gt;
&lt;td&gt;Yes (operator excluded)&lt;/td&gt;
&lt;td&gt;No (Nitro in TCB)&lt;/td&gt;
&lt;td&gt;Yes (operator excluded)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lift-and-shift Windows&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No (custom enclave format)&lt;/td&gt;
&lt;td&gt;Linux containers only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live migration of CVM&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes (SEV on N2D / C3D)&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024-era CVE exposure&lt;/td&gt;
&lt;td&gt;CacheWarp, WeSee, Heckler (SEV-SNP); Heckler (TDX)&lt;/td&gt;
&lt;td&gt;Same upstream CVEs&lt;/td&gt;
&lt;td&gt;Distinct (Nitro hypervisor)&lt;/td&gt;
&lt;td&gt;Inherited from host TEE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Granularity&lt;/td&gt;
&lt;td&gt;Whole VM, container&lt;/td&gt;
&lt;td&gt;Whole VM&lt;/td&gt;
&lt;td&gt;Per enclave (up to 4 per host)&lt;/td&gt;
&lt;td&gt;Per pod / per container&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

flowchart LR
    Nitro[&quot;AWS Nitro Enclaves -- (parent-instance threat model)&quot;]
    Azure[&quot;Azure / GCP CVMs -- (cloud-operator threat model, -- whole VM)&quot;]
    CoCo[&quot;Confidential Containers -- (per pod / per container)&quot;]
    H100[&quot;NVIDIA H100 CC -- (CPU + GPU linked TEE)&quot;]
    Nitro --- Azure
    Azure --- CoCo
    CoCo --- H100
&lt;p&gt;If the contract is settled and the products ship, what is still wrong with this picture? Why do four published papers in 2024 demonstrate extracting secrets from a fully-patched SEV-SNP CVM?&lt;/p&gt;
&lt;h2&gt;8. Theoretical limits and the 2024 attack class&lt;/h2&gt;
&lt;p&gt;May 2, 2024. ETH Zurich&apos;s ZISC group publishes the Ahoi family of attacks. The lab&apos;s announcement is brisk: &quot;Researchers from the SECTRS group have now discovered a new class of attacks, dubbed Ahoi attacks, that exploit vulnerabilities in the notification framework in Intel TDX and AMD SEV-SNP. ... the vulnerabilities are tracked under 2 CVEs: CVE-2024-25744, CVE-2024-25743&quot; [@eth-ahoi-news] (with CVE-2024-25742 covering WeSee). WeSee won the Distinguished Paper Award at IEEE S&amp;amp;P 2024 [@ahoi-wesee]. Heckler appeared at USENIX Security 2024 [@heckler-usenix]. CISPA&apos;s CacheWarp, also at USENIX Security 2024, cross-cut both [@cachewarp-usenix].&lt;/p&gt;
&lt;p&gt;Four 2024-era papers attacking shipping confidential VMs, and a key observation: none of them broke the Generation-2 integrity rail itself. They all exploit seams &lt;em&gt;around&lt;/em&gt; it.&lt;/p&gt;
&lt;h3&gt;Trusted Computing Base accounting&lt;/h3&gt;
&lt;p&gt;The irreducible silicon-vendor trust root is non-zero by design. On SEV-SNP the customer must trust AMD-SP firmware and the ECDSA-P384 VCEK chain rooted at AMD. On TDX the customer must trust the signed TDX Module binary and the SGX-resident Quoting Enclave&apos;s signing root rooted at Intel. On Azure the customer additionally trusts Microsoft&apos;s signed OpenHCL binary -- with the consolation that OpenHCL is open source and reviewable [@openhcl-blog; @openvmm-repo]. The verifier (MAA, Intel Trust Authority, Google&apos;s verifier) is a separate trust component the relying party must extend.&lt;/p&gt;

The set of hardware, firmware, and software components whose correct operation is necessary for a system to enforce its security properties. For an Azure SEV-SNP CVM the TCB is the AMD silicon, the AMD-SP firmware, the OpenHCL paravisor binary, and Microsoft Azure Attestation acting as the verifier. The TCB cannot be empty; the goal is to make it small, auditable, and named [@amd-snp-whitepaper; @openhcl-blog].
&lt;p&gt;The lower bound on TCB is at least one signing root the customer cannot independently rebuild from public artefacts. Reproducible-build transparency over the AMD-SP firmware and the Intel TDX Module is one of the open standards problems on the 2026 frontier. The Google-Intel joint TDX security review from April 2023 is the best public substitute for a reproducible build of the TDX Module today [@gcp-tdx-review].&lt;/p&gt;
&lt;h3&gt;The 2024 attack class, in order of architectural depth&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;CacheWarp (USENIX Security 2024; CVE-2023-20592; AMD-SB-3005).&lt;/strong&gt; A software fault injection. The mechanism, in NVD&apos;s verbatim language: &quot;Improper or unexpected behavior of the INVD instruction in some AMD CPUs may allow an attacker with a malicious hypervisor to affect cache line write-back behavior of the CPU leading to a potential loss of guest virtual machine (VM) memory integrity&quot; [@nvd-cve-2023-20592]. The project page is plain: &quot;CacheWarp is a new software fault attack on AMD SEV-ES and SEV-SNP. It allows attackers to hijack control flow, break into encrypted VMs, and perform privilege escalation inside the VM&quot; [@cachewarp-site]. The CacheWarp authors -- Ruiyi Zhang, Lukas Gerlach, Daniel Weber, Lorenz Hetterich (CISPA), Youheng Lü (Independent), Andreas Kogler (Graz), Michael Schwarz (CISPA) -- demonstrated full RSA key recovery from Intel IPP, passwordless OpenSSH login, and &lt;code&gt;sudo&lt;/code&gt;-to-&lt;code&gt;root&lt;/code&gt; escalation [@cachewarp-usenix]. SEV-SNP is affected; the fix is the AMD microcode update tracked by AMD-SB-3005 [@amd-sb-3005].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WeSee (IEEE S&amp;amp;P 2024 Distinguished Paper; CVE-2024-25742).&lt;/strong&gt; A malicious &lt;code&gt;#VC&lt;/code&gt; injection. The hypervisor coerces the guest&apos;s &lt;code&gt;#VC&lt;/code&gt; handler into doing the wrong thing by injecting a &lt;code&gt;#VC&lt;/code&gt; at a moment the guest does not expect one. The arXiv abstract is verbatim: &quot;We present WeSee attack, where the hypervisor injects malicious #VC into a victim VM&apos;s CPU to compromise the security guarantees of AMD SEV-SNP. ... WeSee can leak sensitive VM information (kTLS keys for NGINX), corrupt kernel data (firewall rules), and inject arbitrary code (launch a root shell from the kernel space)&quot; [@wesee-arxiv]. SEV-SNP only.The arXiv &lt;code&gt;citation_author&lt;/code&gt; metadata for 2404.03526 enumerates the WeSee co-authors as Schlueter, Sridhara, Bertschi, Shinde [@wesee-arxiv]. Earlier writeups, including some upstream pipeline stages of this article, listed the third co-author as &quot;Wilke.&quot; This was an inadvertent crossover from the SEVurity author list. The canonical author list, retrieved by querying the arXiv abstract page&apos;s &lt;code&gt;citation_author&lt;/code&gt; meta tags, names Andrin Bertschi (ETH Zurich), which matches the project page on &lt;code&gt;ahoi-attacks.github.io/wesee/&lt;/code&gt; [@ahoi-wesee]. This article reflects the corrected attribution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Heckler (USENIX Security 2024; CVE-2024-25743, CVE-2024-25744).&lt;/strong&gt; A malicious non-timer interrupt injection. The hypervisor injects &lt;code&gt;int 0x80&lt;/code&gt; or a signal-mapped exception into the guest at a moment that breaks an invariant. The Ahoi Heckler page captures the scope: &quot;All Intel TDX and AMD SEV-SNP processors are vulnerable to Heckler&quot; [@ahoi-heckler]. The arXiv extended version demonstrates &quot;Heckler on OpenSSH and sudo to bypass authentication. On AMD SEV-SNP we break execution integrity of C, Java, and Julia applications that perform statistical and text analysis&quot; [@heckler-arxiv]. Mitigations are kernel-side interrupt filtering plus AMD&apos;s protected interrupt delivery feature.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ahoi Attacks (umbrella).&lt;/strong&gt; The family page describes scope: &quot;Ahoi Attacks is a family of attacks on Hardware-based Trusted Execution Environments (TEEs) to break AMD SEV-SNP, Intel TDX and Intel SGX&quot; [@ahoi-site]. The ZISC news framing names the SECTRS group at ETH Zurich (Shweta Shinde&apos;s lab) as the locus [@eth-ahoi-news].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One Glitch to Rule Them All (CCS 2021).&lt;/strong&gt; The physical-fault lower bound established in §3, included here for completeness. Buhren et al. voltage-glitched the AMD-SP on Zen 1 / 2 / 3 to execute custom payloads and to &quot;reverse-engineer the Versioned Chip Endorsement Key (VCEK) mechanism introduced with SEV Secure Nested Paging (SEV-SNP)&quot; [@one-glitch-arxiv]. With supplemental tooling on the PSPReverse GitHub artefact [@pspreverse-github]. With physical access and the right glitcher, the AMD-SP is breakable.&lt;/p&gt;

SEV cannot adequately protect confidential data in cloud environments from insider attackers, such as rogue administrators, on currently available CPUs. -- Buhren, Jacob, Krachenfels, Seifert, *One Glitch to Rule Them All*, 2021 [@one-glitch-arxiv]

flowchart TB
    INTG[&quot;Generation-2 integrity rail -- (RMP / PAMT)&quot;]
    INVD[&quot;CacheWarp -- CVE-2023-20592 -- INVD seam -- (SEV-ES, SEV-SNP)&quot;]
    VC[&quot;WeSee -- CVE-2024-25742 -- #VC handler seam -- (SEV-SNP)&quot;]
    INT[&quot;Heckler -- CVE-2024-25743/4 -- Interrupt-injection seam -- (SEV-SNP, TDX)&quot;]
    GLITCH[&quot;One Glitch -- Physical voltage-fault -- (AMD-SP firmware)&quot;]
    INTG -. &quot;intact&quot; .-&amp;gt; INVD
    INTG -. &quot;intact&quot; .-&amp;gt; VC
    INTG -. &quot;intact&quot; .-&amp;gt; INT
    INTG -. &quot;intact&quot; .-&amp;gt; GLITCH
&lt;h3&gt;Composition limits and operational corollaries&lt;/h3&gt;
&lt;p&gt;Can the verifier itself be a CVM? Can SKR survive a verifier compromise? These are open standards questions; the Confidential Computing Consortium is iterating on them and there is no settled answer. What there &lt;em&gt;is&lt;/em&gt; is operational guidance.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Every 2024-era SEV-SNP and TDX attack has a corresponding microcode or firmware update with a higher TCB SVN. Policies that accept &quot;any TCB SVN at or above the floor of last year&apos;s launch&quot; leave the door open to CacheWarp-class CPUs. Bind your MAA policy to &lt;code&gt;tcb_version &amp;gt;= latest_advisory&lt;/code&gt; and update the floor when AMD or Intel publishes a new security bulletin [@amd-sb-3005; @nvd-cve-2023-20592].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Confidential VMs do not promise side-channel resistance. They promise that the hypervisor cannot &lt;em&gt;directly read&lt;/em&gt; memory and that an integrity-broken page cannot be silently substituted. The current equilibrium against the 2024 attack class is patch-after-disclosure plus attestation-policy hygiene. That equilibrium is itself an architectural statement.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; The 2024 attacks do not break the SEV-SNP or TDX integrity rail. They exploit seams &lt;em&gt;around&lt;/em&gt; the rail: the INVD instruction, the &lt;code&gt;#VC&lt;/code&gt; handler, the interrupt-injection path, and the physical AMD-SP. The architecture is settled. The residuals are the work.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The architecture is settled; the residuals are open. What is the 2026 research frontier actually working on?&lt;/p&gt;
&lt;h2&gt;9. Open problems&lt;/h2&gt;
&lt;p&gt;Six open problems shape the 2026 confidential-VM research frontier.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OP1. Nested CVMs.&lt;/strong&gt; Intel TDX Module 1.5 ships TD Partitioning, where an L1 TD can host L2 TDs of its own [@intel-tdx-td-partitioning-354807]. AMD&apos;s analogue is the VMPL0 / VMPL2 layout that Azure OpenHCL already exploits. The portable cross-vendor formulation -- nested-CVM evidence that composes both vendors&apos; attestation reports into a single relying-party-checkable artefact -- is not yet standardised. Customers who want a verifier-inside-a-CVM design must build the composition themselves.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OP2. Cross-vendor attestation composition for CPU+GPU CVMs.&lt;/strong&gt; Azure NCCadsH100v5 and GCP A3 already compose AMD or Intel CPU attestation with NVIDIA H100 GPU attestation in production. The relying party today consumes two separate evidence packages and runs two separate policy evaluations. The RATS working group&apos;s RFC 9711 (The Entity Attestation Token, EAT) [@rfc9711] is the canonical wire-format vocabulary -- a JWT- or CWT-encoded attested claims set -- that a Passport-topology verifier such as Microsoft Azure Attestation produces, and is the path to a single composed evidence package, but the cross-vendor standards work is unsettled.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OP3. Transparency and reproducible builds of the AMD-SP firmware and the Intel TDX Module.&lt;/strong&gt; Both are signed binaries customers trust but do not build. Google&apos;s April 2023 joint security review of TDX, authored by Erdem Aktas, Cfir Cohen, Josh Eads (Google Cloud Security), James Forshaw, and Felix Wilhelm (Google Project Zero), enumerated specific vulnerabilities including &quot;Non-Persistent SEAM Loader, Exit Path Interrupt Hijacking, Unsafe Performance Monitoring VMCS Configuration&quot; [@gcp-tdx-review]. That review is the closest thing to public auditability the TDX Module has today. A reproducible build with binary transparency log (rekor-style) would close the residual auditability gap that even open-source OpenHCL leaves on the table for the silicon vendor&apos;s firmware.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OP4. Post-quantum attestation signatures.&lt;/strong&gt; SNP_REPORT signs with ECDSA-P384. TD Quotes are Intel-signed with RSA / ECDSA. The NIST FIPS 204 (ML-DSA) and FIPS 205 (SLH-DSA) standards are final, but vendor-side migration of the CVM signing roots has not been announced for either AMD or Intel. The deployment-feasible path is dual-signing: the SNP_REPORT or TD Quote carries both an ECDSA signature and an ML-DSA signature, the verifier accepts either, and the relying party gates on whichever signing root it trusts most. The transition is non-trivial because the VCEK derivation itself uses a classical KDF chain rooted in classical entropy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OP5. Side-channel-resistant CVMs at deployment scale.&lt;/strong&gt; The CacheWarp, WeSee, Heckler, and Ahoi family is the &lt;em&gt;active&lt;/em&gt; frontier. The current operational equilibrium is policy-pinning to the latest TCB SVN plus microcode-update discipline. There is no production CVM architecture that promises constant-time execution across the integrity rail or that closes the cache-side and notification-injection seams at the silicon layer. The 2026 frontier is what &lt;em&gt;architectural&lt;/em&gt; mitigations look like, not what microcode patches catch up to.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OP6. Confidential container portability after AKS KataCcIsolation sunset (March 2026).&lt;/strong&gt; The Azure CoCo surface fragments into ACI per-pod CVM, ARO per-container CVM, AKS Confidential VM node pools at node granularity, and the upstream CoCo project [@msdocs-aks-confidential-containers]. Customers picking a confidential-containers strategy today need to plan for one of those four routes; the CoCo project itself is Linux-only as of 2026-05. Windows confidential containers remain out of scope on every shipping cloud.&lt;/p&gt;

This article does not deep-cover Intel SGX (the sibling enclave article handles that), ARM Confidential Compute Architecture (CCA) or Apple&apos;s Secure Enclave Processor (different threat models and form factors), the full text of the TDX Module Architecture Specification (it is 285 pages [@intel-tdx-spec-344425]; this article cites the load-bearing parts), the regulatory and sovereign-cloud framing of CVMs (a separate topic), or the application-level patterns for designing a customer service to be SKR-aware (an operations topic for a future post).

flowchart LR
    OP1[&quot;OP1 -- Nested CVMs -- (TD Part. / VMPL)&quot;]
    OP2[&quot;OP2 -- Cross-vendor -- attestation composition&quot;]
    OP3[&quot;OP3 -- Firmware transparency -- + reproducible build&quot;]
    OP4[&quot;OP4 -- PQ signatures -- (ML-DSA / SLH-DSA)&quot;]
    OP5[&quot;OP5 -- Side-channel- -- resistant CVMs&quot;]
    OP6[&quot;OP6 -- CoCo portability -- (post-March-2026)&quot;]
    OP1 --- OP2
    OP3 --- OP4
    OP5 --- OP6
&lt;p&gt;If you are deploying today, what should you do this quarter? The next section is a practical walk-through that ties the architecture to a runnable workflow.&lt;/p&gt;
&lt;h2&gt;10. Practical guide: VBS-inside-CVM end-to-end&lt;/h2&gt;
&lt;p&gt;Six steps move you from a credit-card swipe to a Windows Server CVM that runs an attested workload with HSM-backed key release. Treat the list as a checklist; each step is a place where the architecture from the previous sections becomes operational.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1. Provision the CVM.&lt;/strong&gt; Pick a SEV-SNP SKU (DCasv5 or DCasv6 preview), a supported Windows Server image (2019, 2022, or 2025), and turn on Confidential OS-disk encryption with a customer-managed key in Azure Key Vault or Managed HSM. Bind the key to an MAA-aware release policy. The Learn CVM overview describes the SKU family and the OS-image support [@msdocs-azure-cvm]. Plan for the March 30, 2026 encrypted-OS-disk pricing change [@msdocs-azure-cvm].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2. Confirm VBS inside the CVM.&lt;/strong&gt; A common misconception is that turning on SEV-SNP makes Virtualization-Based Security redundant. It does not -- VMPL and VTL are orthogonal. From an elevated PowerShell session:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;code&gt;Get-CimInstance -Namespace Root\Microsoft\Windows\DeviceGuard -ClassName Win32_DeviceGuard&lt;/code&gt; should return &lt;code&gt;VirtualizationBasedSecurityStatus = 2&lt;/code&gt; (running) and a non-empty &lt;code&gt;SecurityServicesRunning&lt;/code&gt; array that includes Credential Guard and HVCI. This proves that VTL1 / VTL0 separation is intact inside the SEV-SNP trust boundary -- the cloud operator is excluded by VMPL, and the customer&apos;s own user mode and ring-0 are excluded from the Secure Kernel by VTL.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Step 3. Capture an attestation token and walk it by hand.&lt;/strong&gt; Use the Azure Attestation client (&lt;code&gt;Microsoft.Azure.Attestation&lt;/code&gt;) to send the guest&apos;s SNP_REPORT and vTPM quote to the regional MAA endpoint. Inspect the returned JWT. The decoded claim set will include &lt;code&gt;x-ms-isolation-tee&lt;/code&gt; describing the TEE (SEV-SNP or TDX), &lt;code&gt;x-ms-runtime&lt;/code&gt; describing the guest configuration, the boot measurements, and any custom claims your policy mints. Verify the JWT signature against the region&apos;s MAA signing certificate -- not against an arbitrary trusted root; this is the verifier-identity hygiene that closes the SKR loop.&lt;/p&gt;

A valid MAA JWT will contain `x-ms-attestation-type = sevsnpvm` (or `tdxvm`) and a `x-ms-compliance-status = azure-compliant-cvm` claim. If either is missing or has a different value, the policy did not gate on the TEE and the relying party is about to release a key against unattested evidence.
&lt;p&gt;&lt;strong&gt;Step 4. Author the policy.&lt;/strong&gt; Write an MAA policy v1.2 file with four pieces. A configuration-rules block that keeps the defaults: &lt;code&gt;require_valid_aik_cert=true&lt;/code&gt; and &lt;code&gt;required_pcr_mask=0xFFFFFF&lt;/code&gt; [@maa-policy-v12]. An authorization-rules block that requires (a) &lt;code&gt;x-ms-attestation-type == &quot;sevsnpvm&quot;&lt;/code&gt;, (b) the SNP_REPORT measurement matches a known reference value for the customer&apos;s golden image, (c) the vTPM PCR-7 matches a known Secure Boot signer baseline, and (d) the VBS-enabled claim is &lt;code&gt;true&lt;/code&gt;. An issuance-rules block that mints a &lt;code&gt;customer-workload-tier&lt;/code&gt; claim from the SNP_REPORT&apos;s &lt;code&gt;tcb_version&lt;/code&gt;. And version &lt;code&gt;1.2&lt;/code&gt;. Bind your HSM key&apos;s release policy to require the issuance-rule claim plus the authorization-rule pass.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Use &lt;code&gt;az attestation policy set&lt;/code&gt; to upload the policy to a non-production attestation provider and replay captured evidence through &lt;code&gt;attestationProvider&lt;/code&gt; REST endpoints. This lets you iterate on JmesPath claim rules without rebooting CVMs. Pre-production failures here are cheap; failures after SKR binding are expensive [@maa-policy-v12].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Step 5. Repeat on a TDX SKU.&lt;/strong&gt; Provision a DCesv5 or DCesv6 (preview) CVM. The attestation evidence shape changes: TDX evidence carries &lt;code&gt;MRTD&lt;/code&gt; plus &lt;code&gt;RTMR0-3&lt;/code&gt; instead of a single SNP measurement, and the claims JSON shape differs. The JmesPath rules in your policy must be parameterised on &lt;code&gt;productId&lt;/code&gt; to handle both TEEs from one policy file, or split into two policy files keyed by attestation provider region and TEE type [@intel-tdx-overview; @maa-policy-v12].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 6. Plan TCB SVN hygiene.&lt;/strong&gt; Treat the TCB SVN floor in your policy as a moving target, not a one-time configuration. Subscribe to the AMD security bulletins and the Intel TDX security advisories. When CacheWarp&apos;s microcode shipped via AMD-SB-3005 [@amd-sb-3005], the appropriate operational response was to raise the policy&apos;s TCB SVN floor to the new microcode level, not to leave the floor at the launch baseline. This is the single most important operational habit a CVM customer can adopt.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; A policy that accepts the launch-baseline TCB SVN forever is a policy that grandfathers in every known CVE the silicon vendor has shipped a microcode patch for. The 2024 attack class makes this a load-bearing operational discipline, not a footnote [@nvd-cve-2023-20592; @amd-sb-3005].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You can build it today. The FAQ below answers the questions readers most often ask after they have built it.&lt;/p&gt;
&lt;h2&gt;11. FAQ and closing&lt;/h2&gt;


Architecturally, the host hypervisor cannot read your encrypted RAM and cannot silently remap pages without triggering an RMP or PAMT fault [@amd-sev-portal; @intel-tdx-overview]. Operationally, the verifier (Microsoft Azure Attestation) is run by Microsoft, the paravisor (OpenHCL) is built by Microsoft, and the silicon is signed by AMD or Intel. You must still trust those components. The lower bound on TCB is at least the silicon vendor&apos;s signing root plus at least one verifier; you can shrink the *verifier* trust by using a third party (Intel Trust Authority for TDX, or your own deployment of an attestation broker), but you cannot shrink the silicon-vendor root [@msdocs-maa-overview].


No. VMPL (the SEV-SNP privilege axis) and VTL (the in-guest Virtualization-Based Security axis) are orthogonal -- VMPL gates the *operator*; VTL gates the *guest kernel*. See §6 for the full two-axis treatment; a Windows Server CVM should run with VBS, HVCI, and Credential Guard enabled inside the guest exactly as it would outside a CVM [@msdocs-azure-cvm].


No. The Nitro hypervisor enforces the enclave boundary in software AWS owns and operates; there is no CPU-level memory cipher, and the threat model is parent-instance isolation rather than cloud-operator isolation. See §7 for the three architectural differences and the operator-trustless callout [@aws-nitro-enclaves].


Yes, with limits. The attestation surface changes: the SNP_REPORT measurement (or MRTD plus RTMR extensions on TDX) now reflects your custom image. Your MAA policy must whitelist the new measurement values or use issuance-rule projection to bind to attributes you control. You cannot bypass the paravisor without abandoning the OpenHCL-mediated vTPM, which removes the chained vTPM-quote to silicon path most customers depend on [@msdocs-azure-cvm; @openhcl-blog].


Yes -- transitively, through the paravisor. See §6 for the full `vTPM quote -&amp;gt; EK certificate -&amp;gt; SNP_REPORT or TD Quote -&amp;gt; VCEK or Intel signing root` chain, and read it end-to-end before you accept a vTPM quote as silicon-bound [@msdocs-azure-cvm].


Node-granularity CVM versus per-pod CVM. Confidential VM AKS node pools put each worker node inside an SEV-SNP CVM; all pods on that node share the trust boundary [@msdocs-aks-cvm-nodes]. Confidential Containers on AKS used the `KataCcIsolation` runtime to put each pod inside its own SEV-SNP-backed Kata MicroVM; that preview is sunsetting in March 2026 [@msdocs-aks-confidential-containers]. Different SKUs, different runtimes, different sunset timelines. Pick node-granularity for lift-and-shift; pick per-pod when you need stricter blast-radius isolation between pods on the same hardware.


No. See §8 for the architectural finding (the Generation-2 integrity rail remains intact under all four 2024 papers; each attack exploits a seam *around* the rail) and §10 Step 6 for the TCB-SVN-pinning operational habit that translates the finding into deployment policy [@cachewarp-site; @ahoi-heckler; @amd-sb-3005].

&lt;p&gt;Imagine drawing the architecture from memory. Start at the bottom with AMD silicon plus the AMD-SP firmware, or Intel silicon plus the SEAM Range Register and the signed TDX Module. Above that, the Azure Hyper-V host -- below the trust boundary, blind to encrypted RAM. Above that, the OpenHCL paravisor at VMPL0 or the L1 TD seat, mediating synthetic devices and the vTPM. Above that, the Windows Server guest at VMPL2 or the L2 TD, still running VBS, HVCI, and Credential Guard inside. Then evidence flows up: SNP_REPORT or TD Quote plus vTPM quote into Microsoft Azure Attestation, which evaluates policy v1.2 against the evidence and emits a signed JWT, which Azure Key Vault checks before releasing the wrapped OS-disk key. If you can draw it on a napkin in two minutes, you have understood the article. If you can write the MAA policy that says exactly what you mean by &quot;this VM is one of mine,&quot; you can build with it.&lt;/p&gt;
&lt;p&gt;&amp;lt;StudyGuide slug=&quot;confidential-vms-on-azure&quot; keyTerms={[
  { term: &quot;Reverse Map Table (RMP)&quot;, definition: &quot;AMD SEV-SNP per-page metadata table enforcing GPA-to-HPA binding; mismatched mappings raise #NPF(rmpfault).&quot; },
  { term: &quot;Virtual Machine Privilege Level (VMPL)&quot;, definition: &quot;AMD SEV-SNP four-level privilege lattice; OpenHCL paravisor at VMPL0, customer kernel at VMPL2.&quot; },
  { term: &quot;SNP_REPORT&quot;, definition: &quot;ECDSA-P384 signed attestation report from the AMD-SP, carrying measurement, policy, report_data, vmpl, chip_id, tcb_version.&quot; },
  { term: &quot;Secure Arbitration Mode (SEAM)&quot;, definition: &quot;Intel CPU privilege state in which the signed TDX Module executes, hosted in the SEAMRR memory range.&quot; },
  { term: &quot;Intel TDX Module&quot;, definition: &quot;Signed Intel firmware running in SEAM that mediates entry, exit, and measurement for Trust Domains.&quot; },
  { term: &quot;MRTD&quot;, definition: &quot;Build-time TDX measurement of the initial TD image; SEAM analogue of an immutable launch PCR.&quot; },
  { term: &quot;RTMR0-3&quot;, definition: &quot;Runtime extendable measurement registers exposed by the TDX Module; SEAM analogue of the runtime-extension TPM PCRs. Canonical TDX-vTPM mapping: RTMR[0]&amp;lt;-&amp;gt;PCR[1,7], RTMR[1]&amp;lt;-&amp;gt;PCR[2-6], RTMR[2]&amp;lt;-&amp;gt;PCR[8-9], RTMR[3]&amp;lt;-&amp;gt;PCR[14,17-22].&quot; },
  { term: &quot;OpenHCL paravisor&quot;, definition: &quot;Microsoft&apos;s open-source Rust paravisor on OpenVMM, running inside the CVM trust boundary at VMPL0 or the L1 TD seat.&quot; },
  { term: &quot;Microsoft Azure Attestation (MAA)&quot;, definition: &quot;Azure&apos;s RATS verifier; evaluates customer policy v1.2 against SNP_REPORT or TD Quote plus vTPM evidence and returns a signed JWT.&quot; },
  { term: &quot;Secure Key Release (SKR)&quot;, definition: &quot;Azure Key Vault / Managed HSM operation gating wrapped-key release on a valid MAA attestation token.&quot; },
  { term: &quot;Versioned Chip Endorsement Key (VCEK)&quot;, definition: &quot;AMD per-chip per-TCB-version ECDSA-P384 signing key for SNP_REPORTs; certificate chain anchors to AMD root via the ASK.&quot; }
]} /&amp;gt;&lt;/p&gt;
</content:encoded><category>confidential-computing</category><category>sev-snp</category><category>intel-tdx</category><category>azure</category><category>attestation</category><category>paravisor</category><category>windows-security</category><category>tee</category><author>noreply@paragmali.com (Parag Mali)</author></item><item><title>Direct Anonymous Attestation: The Zero-Knowledge Proof Already in Every TPM</title><link>https://paragmali.com/blog/direct-anonymous-attestation-the-zero-knowledge-proof-alread/</link><guid isPermaLink="true">https://paragmali.com/blog/direct-anonymous-attestation-the-zero-knowledge-proof-alread/</guid><description>TPM 2.0 names a zero-knowledge group-signature primitive in its spec. A billion chips ship it. Almost nobody verifies it. The story of why DAA won every standardization fight and lost every deployment one.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><content:encoded>
**Direct Anonymous Attestation is the zero-knowledge proof your laptop already has -- and never uses.** Every TPM 2.0 specification since 2014 names a group-signature primitive called `TPM_ALG_ECDAA`, with a normative command pair (`TPM2_Commit`, `TPM2_Sign`) and a mandatory curve (`TPM_ECC_BN_P256`). A TPM with ECDAA enabled can prove &quot;I am a genuine TPM whose endorsement key was certified by a known issuer&quot; without revealing *which* TPM and without an online third party in the verification path. ISO/IEC 20008-2:2013 Mechanism 4 standardizes it. FIDO Alliance bound it to authenticator attestation in 2018. WebAuthn Level 1 registered ECDAA as an attestation type carried inside the `packed` and `tpm` attestation statement formats in March 2019. Three years later, WebAuthn Level 2 removed it entirely. The TCG PC Client Platform TPM Profile made `TPM_ALG_ECDAA` optional in February 2020. Microsoft Azure Attestation, Windows Health Attestation, AWS Nitro, Apple App Attest, and Google Play Integrity all use Privacy-CA-shaped broker flows instead. This article walks the thirty-year cryptographic lineage, the TPM 2.0 normative surface, the FIDO ECDAA failure, and the structural reasons Microsoft chose brokers over math.
&lt;h2&gt;1. A Billion Chips, Zero Verifiers&lt;/h2&gt;
&lt;p&gt;Every TPM 2.0 Library Specification published since 2014 names a zero-knowledge proof of knowledge. The algorithm identifier &lt;code&gt;TPM_ALG_ECDAA&lt;/code&gt; (value &lt;code&gt;0x001A&lt;/code&gt;) appears in Part 2 (Structures). The command pair &lt;code&gt;TPM2_Commit&lt;/code&gt; and &lt;code&gt;TPM2_Sign&lt;/code&gt; appears in Part 3 (Commands). The mathematical construction appears in Part 1 Annex C.5. The mandatory curve is &lt;code&gt;TPM_ECC_BN_P256&lt;/code&gt; (&lt;code&gt;0x0010&lt;/code&gt;), a 256-bit Barreto-Naehrig curve picked specifically because it admits the asymmetric pairings the protocol needs [@tpm-library-spec]. A conforming &lt;a href=&quot;https://paragmali.com/blog/the-tpm-in-windows-one-primitive-twenty-five-years-and-the-c/&quot; rel=&quot;noopener&quot;&gt;TPM 2.0 chip&lt;/a&gt; with ECDAA enabled can produce a signature that proves the chip is a genuine TPM whose endorsement key was certified by a known issuer -- without revealing &lt;em&gt;which&lt;/em&gt; TPM, and without an online certificate authority sitting in the verification path. The cryptography is called Direct Anonymous Attestation, and the Wikipedia article notes that the construction is &quot;implemented by both EPID 2.0 and the TPM 2.0 standard&quot; [@wiki-daa].&lt;/p&gt;
&lt;p&gt;Almost nobody uses it.&lt;/p&gt;
&lt;p&gt;Microsoft Azure Attestation does not. Its public architecture document describes a certificate authority that ingests endorsement-key certificates and issues per-key JWTs with a special issuance policy [@azure-attestation]. The Windows Health Attestation Service does not. AWS Nitro Enclaves does not [@aws-nitro-attestation]. Apple App Attest does not [@apple-app-attest]. Google Play Integrity does not [@google-play-integrity]. WebAuthn Level 1 registered ECDAA as an attestation type carried inside the &lt;code&gt;packed&lt;/code&gt; and &lt;code&gt;tpm&lt;/code&gt; formats in March 2019; WebAuthn Level 2 in April 2021 removed it entirely [@webauthn-2]. The TCG PC Client Platform TPM Profile, the document that governs which TPM 2.0 algorithms an OEM must support to ship a Windows-class platform, made &lt;code&gt;TPM_ALG_ECDAA&lt;/code&gt; and &lt;code&gt;TPM_ALG_ECSCHNORR&lt;/code&gt; optional in v1.04 (February 2020) and has carried that designation through v1.07 RC1 (December 2025) [@tcg-ptp]. &lt;a href=&quot;https://paragmali.com/blog/pluton-a-tpm-on-silicon-microsoft-can-patch/&quot; rel=&quot;noopener&quot;&gt;Microsoft Pluton&lt;/a&gt;&apos;s published surface, which enumerates the algorithms the security processor exposes through its TPM 2.0 personality, does not advertise ECDAA at all [@pluton].&lt;/p&gt;
&lt;p&gt;The most thoroughly standardized hardware-anchored group-signature primitive in the history of platform security sits in firmware on a billion-plus machines and runs on almost none.&lt;/p&gt;
&lt;p&gt;Why?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Direct Anonymous Attestation solves the same problem as a Privacy-CA -- prove the TPM is genuine without disclosing &lt;em&gt;which&lt;/em&gt; TPM -- by moving the trust assumption from operational (the broker promises not to log) to cryptographic (the math forbids the issuer from learning). The interesting question is not whether the cryptography works. It is why an industry that spent thirty years building the math chose, in production, the architecture the math was meant to replace.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This article walks the answer in four moves. Sections 2 through 5 reconstruct the cryptographic lineage: the Privacy-CA architecture DAA was invented against (TPM 1.1, 2003), the group-signature pre-history that made the construction possible (Chaum-van Heyst 1991 through Camenisch-Lysyanskaya 2004), the Brickell-Camenisch-Chen breakthrough at ACM CCS 2004, and the seven-year evolution to the elliptic-curve scheme TPM 2.0 actually ships (Chen-Page-Smart, CARDIS 2010). Sections 6 and 7 walk the normative surfaces: the TPM 2.0 ECDAA command surface and the ISO/IEC 20008-2 / 20009-2 standards. Sections 8 and 9 are case studies in non-deployment: FIDO&apos;s three-year experiment with ECDAA-in-WebAuthn, and Microsoft&apos;s two-decade commitment to broker-mediated attestation. Section 10 names the open problems -- post-quantum DAA, confidential computing, the One-TPM-to-Bind-Them-All fix that has not made it into TCG text. Section 11 closes with a role-keyed practical guide and an FAQ.&lt;/p&gt;

timeline
    title Direct Anonymous Attestation, 1991-2024
    1991 : Chaum-van Heyst (EUROCRYPT)
         : Group signature defined
    1997 : Camenisch-Stadler (CRYPTO)
         : Constant-size signatures
    2000 : ACJT (CRYPTO)
         : Coalition resistance
    2004 : Brickell-Camenisch-Chen (CCS)
         : Boneh-Boyen-Shacham short groupsigs
    2005 : DAA-RSA added to TPM 1.2 rev 94
    2007 : Brickell-Li EPID (WPES)
         : Signature-based revocation
    2008 : Brickell-Chen-Li (TRUST)
         : First pairing DAA
         : CMS asymmetric DAA proposed
    2010 : Chen-Li (IPL)
         : CMS proof flaw
         : Chen-Page-Smart (CARDIS)
         : The scheme TPM 2.0 ships
    2013 : BFGSW (IJIS)
         : User-controlled linkability model
         : ISO/IEC 20008-2 / 20009-2
    2014 : TPM 2.0 Library Spec
         : ECDAA in firmware
    2015 : Smyth-Ryan-Chen
         : Retroactive BCC privacy bug
    2018 : FIDO ECDAA v2.0
    2019 : WebAuthn Level 1
         : ecdaa attestation format
    2020 : TCG PTP v1.04
         : ECDAA made optional
    2021 : WebAuthn Level 2
         : ecdaa format removed
    2024 : CoSNIZK
         : Lattice DAA at 38 kB
&lt;p&gt;To answer the question of why, we have to start where every TPM attestation story does -- with the architecture DAA was invented to replace.&lt;/p&gt;
&lt;h2&gt;2. The Privacy-CA Trap (1999-2003)&lt;/h2&gt;
&lt;p&gt;TPM 1.1, originally published by the Trusted Computing Platform Alliance in 2002 and taken over in April 2003 by the Trusted Computing Group that replaced it [@wiki-tcg], had a privacy story. The story was a broker called the Privacy Certificate Authority. The story had a single load-bearing flaw, and the field spent the next two decades writing papers about it.&lt;/p&gt;
&lt;p&gt;The mechanism, paraphrased from the Wikipedia summary that itself paraphrases the TCG spec, is five steps [@wiki-daa]:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A TPM manufacturer embeds a 2048-bit RSA Endorsement Key (EK) at the time the chip is provisioned, along with a certificate &lt;code&gt;EKCert&lt;/code&gt; signed by the manufacturer [@wiki-tpm].&lt;/li&gt;
&lt;li&gt;The platform generates a fresh Attestation Identity Key (AIK) inside the TPM.&lt;/li&gt;
&lt;li&gt;The platform sends &lt;code&gt;(EKCert, AIKpub, proof-of-binding)&lt;/code&gt; to a Privacy-CA.&lt;/li&gt;
&lt;li&gt;The Privacy-CA validates the EK certificate, confirms the binding proof, and issues &lt;code&gt;Cert(AIKpub)&lt;/code&gt; signed by the CA.&lt;/li&gt;
&lt;li&gt;The platform uses the AIK to sign actual attestations -- platform configuration register quotes, boot logs, key-attestation certificates -- and presents &lt;code&gt;Cert(AIKpub)&lt;/code&gt; to relying parties as proof that the AIK is TPM-resident.&lt;/li&gt;
&lt;/ol&gt;

The Endorsement Key is the long-lived, manufacturer-certified asymmetric key burned into the TPM at provisioning. Its public half is the chip&apos;s permanent cryptographic identity; its certificate, signed by the manufacturer, is the platform&apos;s proof that the chip is a real TPM. The Attestation Identity Key is a short-lived TPM-resident key generated for signing attestation outputs. Because the EK is uniquely identifying, the AIK exists to absorb attestation traffic on the EK&apos;s behalf: the EK certifies the AIK once (or once per Privacy-CA), and the AIK does the signing thereafter [@azure-attestation].

The broker introduced by the TCG in TPM 1.1 to separate the unique-by-design Endorsement Key from the per-attestation Attestation Identity Key. The Privacy-CA verifies the EK certificate, attests that the AIK is bound to a real TPM, and issues a certificate on the AIK that the platform then uses to sign quotes. The privacy property is operational, not cryptographic: the CA promises not to log the linkage between EK and AIK [@wiki-daa].
&lt;p&gt;The architecture has three structural problems, and the Wikipedia summary of the original TPM 1.1 design makes the most uncomfortable one explicit: &quot;privacy requirements may be violated if the privacy CA and verifier collude&quot; [@wiki-daa]. The Privacy-CA &lt;em&gt;can&lt;/em&gt; link AIKs to EKs. It promises not to. That promise is enforceable by audit, by legal contract, by reputation, and by the threat of a regulator finding out. It is not enforceable by mathematics.&lt;/p&gt;
&lt;p&gt;The other two problems are availability and concentration. Wikipedia again, on the TPM 1.1 design: &quot;the privacy CA must take part in every transaction&quot; [@wiki-daa]. Every AIK certification is a synchronous network round-trip to a single CA. The CA is therefore a high-availability target, a high-value attack target, and a high-throughput service obligation for whoever decides to operate one. The FIDO Alliance, fifteen years later, wrote down the operational consequences of that obligation with surprising frankness in its ECDAA Algorithm v2.0 specification [@fido-ecdaa-v2]:&lt;/p&gt;

An alternative approach to &apos;group&apos; keys is the use of individual keys combined with a Privacy-CA [TPMv1-2-Part1]. Translated to FIDO, this approach would require one Privacy-CA interaction for each Uauth key. This means relatively high load and high availability requirements for the Privacy-CA. Additionally the Privacy-CA aggregates sensitive information (i.e. knowing the relying parties the user interacts with). This might make the Privacy-CA an interesting attack target. -- FIDO ECDAA Algorithm v2.0 Implementation Draft, 2018
&lt;p&gt;The FIDO document was written in 2018, but it is operating on a problem that was current in 2003. The Privacy-CA model concentrates the very identifiers it is supposed to anonymize. A regulator with a subpoena, an insider with a database query, or a successful attacker with persistent access can recover the linkage the CA promised to forget. In 2003 the TCG named the missing primitive -- a &lt;em&gt;direct&lt;/em&gt; attestation scheme whose anonymity was guaranteed by math rather than a CA&apos;s promise -- and the cryptographic literature went to work on it.The privacy-advocate criticism of the TPM in the 2003-2005 window came from a small but well-placed group. Ross Anderson at Cambridge had been writing critical surveys of trusted computing since 2002, both in a continuously updated TCPA FAQ [@anderson-tcpa-faq] and in a PODC 2003 paper &quot;Cryptography and Competition Policy -- Issues with Trusted Computing&quot; [@anderson-tcpa-paper]. Seth Schoen and the Electronic Frontier Foundation published a 2003 white paper, &quot;Trusted Computing: Promise and Risk,&quot; on the privacy implications of trusted-computing-class identifiers [@eff-schoen-2003]. European data-protection authorities had begun studying TCPA in the same window [@anderson-tcpa-faq]. The DAA construction was, by 2004, a research community answer to these criticisms more than it was a TCG product requirement.&lt;/p&gt;
&lt;p&gt;The Privacy-CA architecture is still production architecture in 2026. Microsoft Azure Attestation runs a Privacy-CA in everything but name. Its public documentation describes a CA-mediated flow whose five-step shape mirrors the TPM 1.1 Privacy-CA almost line for line: &quot;A certification authority (CA) establishes trust in the TPM either via EKPub or EKCert... The CA issues a certificate with a special issuance policy to denote that the key is now attested as protected by a TPM&quot; [@azure-attestation]. The full verbatim Microsoft Learn quote is reproduced in §9, where it anchors the Windows case study.&lt;/p&gt;
&lt;p&gt;The same pattern repeats across every hyperscaler. AWS Nitro Enclaves issues PKIX certificates rooted in AWS-operated CAs that bind enclave measurements to instance identifiers [@aws-nitro-attestation]. Apple App Attest issues per-app device identifiers from Apple-operated infrastructure [@apple-app-attest]. Google Play Integrity ships integrity verdicts signed by Google-operated infrastructure [@google-play-integrity]. In 2026 the operational descendants of TPM 1.1&apos;s Privacy-CA broker run the production attestation surface of every consumer-grade cloud platform.&lt;/p&gt;

flowchart TD
    M[&quot;TPM manufacturer&quot;] --&amp;gt;|&quot;signs EK with EKCert&quot;| EK[&quot;EK in TPM&quot;]
    EK --&amp;gt; AIK[&quot;TPM generates AIK&quot;]
    AIK --&amp;gt;|&quot;(EKCert, AIKpub, proof)&quot;| CA[&quot;Privacy-CA&quot;]
    CA --&amp;gt;|&quot;issues Cert(AIKpub)&quot;| Plat[&quot;Platform&quot;]
    Plat --&amp;gt;|&quot;AIK signs quote&quot;| V[&quot;Verifier / Relying Party&quot;]
    CA -.-&amp;gt;|&quot;can link AIK to EK&lt;br /&gt;(promises not to)&quot;| AIK
&lt;p&gt;By 2003 the field had a name for the missing primitive: a direct attestation scheme that delivered the Privacy-CA&apos;s anonymity property cryptographically rather than operationally. What followed was an academic lineage that had been quietly building, for a decade and a half, the primitives that lineage required.&lt;/p&gt;
&lt;h2&gt;3. The Pre-History: Group Signatures Before DAA (1991-2003)&lt;/h2&gt;
&lt;p&gt;Direct Anonymous Attestation was invented in 2004. The primitive it was built from was invented in 1991, in a paper that had nothing to do with TPMs.&lt;/p&gt;
&lt;p&gt;David Chaum and Eugene van Heyst presented &quot;Group Signatures&quot; at EUROCRYPT 1991 [@chaum-vh-1991]. The construction was a curiosity: a digital signature scheme in which any one of &lt;code&gt;n&lt;/code&gt; group members could sign on behalf of the group, the verifier could check that &lt;em&gt;some&lt;/em&gt; member of the group signed, and a designated &lt;em&gt;group manager&lt;/em&gt; could, given a signature, recover the identity of the signer. The use case Chaum and van Heyst had in mind was organizational: a company spokesperson signs press releases on behalf of the company; the CEO can, if necessary, recover which spokesperson signed which release.&lt;/p&gt;

A digital signature scheme in which any one of `n` group members can sign on behalf of the group such that (i) verifiers can confirm &quot;some member of the group signed this message&quot; using a single group public key, (ii) verifiers cannot determine which member signed, and (iii) a designated group manager, holding a trapdoor, can *open* any signature to recover the original signer. Chaum and van Heyst introduced the primitive in 1991; the next decade was about making the construction efficient enough to deploy [@wiki-group].
&lt;p&gt;The 1991 construction had a fatal practical property: signature size was linear in the size of the group. A 10,000-member group meant a 10,000-component signature. For a primitive intended to handle organizational use cases at organizational scale, this was a non-starter. The next decade is a sequence of papers, each adding one property to the previous, each addressing the issue that made the previous unfit for deployment.&lt;/p&gt;
&lt;p&gt;Jan Camenisch and Markus Stadler, at CRYPTO 1997, gave the field its first constant-size group signature -- signature length independent of the number of group members, suitable for groups of arbitrary size [@camenisch-stadler-1997]. Their construction relied on a particular kind of zero-knowledge proof of knowledge of a discrete logarithm whose form would, six years later, become the structural template for DAA&apos;s Sign protocol. The CS97 scheme had its own problems -- the security proof made strong assumptions, and the construction was vulnerable to &quot;framing&quot; attacks where a malicious group manager could forge signatures attributable to other members -- but the size barrier was broken.&lt;/p&gt;
&lt;p&gt;Three years later, at CRYPTO 2000, Giuseppe Ateniese, Jan Camenisch, Marc Joye, and Gene Tsudik introduced what the field now calls the ACJT scheme [@acjt-2000]. The Springer abstract is unusually direct about what ACJT contributed: the paper &quot;introduces a new provably secure group signature... proven secure and coalition-resistant under the strong RSA and the decisional Diffie-Hellman assumptions.&quot; The property that made ACJT important was &lt;em&gt;coalition resistance&lt;/em&gt; -- a formal guarantee that no subset of &lt;code&gt;k&lt;/code&gt; group members, no matter how large, could collude to produce a valid signature that did not open to one of them. ACJT&apos;s security proofs were the first in the group-signature literature to treat coalitions as a first-class threat model.Coalition resistance as a property predated ACJT, but coalition resistance as a &lt;em&gt;formal&lt;/em&gt; property -- something proven against an adversary defined in a complexity-theoretic model -- did not. Camenisch and Michels in 1998, and several authors in between, had given coalition-resistance arguments that depended on heuristic assumptions about the underlying hash function or signature scheme [@camenisch-michels-1998]. ACJT 2000 gave the proof under the strong RSA assumption, which by 2000 was a well-understood number-theoretic conjecture that the cryptographic community treated as a load-bearing security primitive.&lt;/p&gt;
&lt;p&gt;ACJT was the construction the DAA designers built on. The reason is in its protocol structure. The ACJT signer holds a &lt;em&gt;signed credential&lt;/em&gt; on a secret membership value &lt;code&gt;f&lt;/code&gt;. Signing a message means producing a non-interactive zero-knowledge proof of knowledge of &lt;code&gt;(f, signature)&lt;/code&gt; satisfying the group manager&apos;s verification equation, bound to the message. The proof is constant-size; the verifier checks it against the group public key and learns only that &lt;em&gt;some&lt;/em&gt; member signed.&lt;/p&gt;
&lt;p&gt;Jan Camenisch and Anna Lysyanskaya, working in parallel, were building the other primitive DAA would need. Their EUROCRYPT 2001 paper introduced what the field now calls CL credentials -- a digital signature scheme with two unusual properties [@cl-2001]. First, a signer can issue a signature on a &lt;em&gt;committed&lt;/em&gt; value &lt;code&gt;Commit(f)&lt;/code&gt; without seeing &lt;code&gt;f&lt;/code&gt; itself, so the holder of &lt;code&gt;f&lt;/code&gt; ends up with a signature on something the signer never learned. Second, a holder of &lt;code&gt;(f, signature)&lt;/code&gt; can prove possession of that pair in zero knowledge, revealing neither &lt;code&gt;f&lt;/code&gt; nor the signature itself.&lt;/p&gt;

A digital signature scheme with two algorithmic protocols on top of the standard sign-and-verify pair. A *blind issuance* protocol lets a signer issue a signature on a value the signer cannot see (the holder commits to a value `f` and proves the commitment well-formed; the signer signs the commitment without learning `f`). A *proof-of-possession* protocol lets a holder of `(f, signature)` prove &quot;I have a CL signature from this signer on some value&quot; without revealing either the value or the signature. CL signatures are the primitive a DAA Issuer uses to issue the long-lived attestation credential the TPM keeps after the Join protocol [@cl-2001] [@cl-2004].
&lt;p&gt;CL signatures gave the field a clean way to issue a member credential without the issuer ever learning the member&apos;s secret -- exactly the property a TPM needs when receiving a long-lived DAA credential from an issuer who, by design, must remain unable to recognize the TPM later. Camenisch and Lysyanskaya&apos;s CRYPTO 2004 paper extended the construction to bilinear pairings [@cl-2004], a generalization that would matter for the elliptic-curve DAA schemes of the next decade.&lt;/p&gt;

flowchart LR
    A[&quot;Chaum-van Heyst 1991&lt;br /&gt;Primitive defined&lt;br /&gt;Linear-size signatures&quot;] --&amp;gt; B[&quot;Camenisch-Stadler 1997&lt;br /&gt;Constant-size signatures&quot;]
    B --&amp;gt; C[&quot;ACJT 2000&lt;br /&gt;Coalition resistance&lt;br /&gt;Strong RSA + DDH&quot;]
    C --&amp;gt; D[&quot;Brickell-Camenisch-Chen 2004&lt;br /&gt;DAA-RSA&quot;]
    A --&amp;gt; E[&quot;Camenisch-Lysyanskaya 2001&lt;br /&gt;Blind issuance&lt;br /&gt;Proof of possession&quot;]
    E --&amp;gt; D
    E --&amp;gt; F[&quot;Camenisch-Lysyanskaya 2004&lt;br /&gt;CL on bilinear pairings&quot;]
    F --&amp;gt; G[&quot;Chen-Page-Smart 2010&lt;br /&gt;EC-DAA&quot;]
&lt;p&gt;A sibling lineage was building in parallel. Dan Boneh, Xavier Boyen, and Hovav Shacham presented &quot;Short Group Signatures&quot; at CRYPTO 2004 [@bbs-2004]. The BBS scheme used bilinear pairings to compress group signatures to a few hundred bytes -- signatures, in the abstract&apos;s words, &quot;approximately the size of a standard RSA signature with the same security.&quot; BBS gave the W3C Verifiable Credentials community a primitive that descendants like BBS+ would later use for selective-disclosure credentials. BBS itself did not become the TPM construction. The DAA designers, working from ACJT and CL, took a different path.&lt;/p&gt;
&lt;p&gt;By 2003 the primitives existed. The TPM community had the use case. The two communities had not yet met. In 2004, three authors at three different industrial labs made the introduction.&lt;/p&gt;
&lt;h2&gt;4. The Breakthrough: DAA-RSA (Brickell-Camenisch-Chen, CCS 2004)&lt;/h2&gt;
&lt;p&gt;The introduction happened at ACM CCS 2004. Ernie Brickell at Intel, Jan Camenisch at IBM Zurich, and Liqun Chen at HP Labs Bristol published &quot;Direct Anonymous Attestation&quot; [@bcc-2004]. The IACR ePrint abstract makes the structural contribution explicit:&lt;/p&gt;

Direct anonymous attestation can be seen as a group signature without the feature that a signature can be opened, i.e., the anonymity is not revocable. Moreover, DAA allows for pseudonyms, i.e., for each signature a user (in agreement with the recipient of the signature) can decide whether or not the signature should be linkable to another signature. DAA furthermore allows for detection of &apos;known&apos; keys: if the DAA secret keys are extracted from a TPM and published, a verifier can detect that a signature was produced using these secret keys. -- BCC 2004 (IACR ePrint 2004/205)
&lt;p&gt;Two design moves did the work, and naming them clearly is the first step in understanding why DAA solved the Privacy-CA problem.&lt;/p&gt;
&lt;p&gt;The first move is a &lt;em&gt;subtraction&lt;/em&gt;. Every prior group-signature scheme -- Chaum-van Heyst, Camenisch-Stadler, ACJT, BBS -- gave a designated group manager the power to &lt;em&gt;open&lt;/em&gt; a signature and recover its signer. For a TPM attestation primitive, the opening capability is undesirable. An issuer who can open is morally a Privacy-CA: it has the linkage information the architecture is supposed to forget. BCC 2004 removes the opening capability entirely. No party can de-anonymize a signature -- not the issuer, not the verifier, not a coalition of either. The IACR ePrint 2004/205 abstract captures the consequence: DAA &quot;can be seen as a group signature without the feature that a signature can be opened, i.e., the anonymity is not revocable&quot; [@bcc-2004]. Once the credential is issued, the issuer has no cryptographic handle left to break the user&apos;s privacy.&lt;/p&gt;

A zero-knowledge attestation primitive in which a TPM holds a long-lived membership credential (the output of a one-time Join protocol with an Issuer) and can subsequently produce signatures that prove &quot;the signing TPM holds a credential certified by this Issuer&quot; without revealing which TPM signed and without an online third party in the verification path. No party -- not the Issuer, not the Verifier, not a coalition of either -- can de-anonymize a DAA signature. The construction first appeared in Brickell-Camenisch-Chen 2004 [@bcc-2004].
&lt;p&gt;The second move is a &lt;em&gt;substitution&lt;/em&gt;. Where prior schemes traced misbehaving signers by manager-controlled opening, DAA introduces a &lt;em&gt;user-controlled&lt;/em&gt; linkability mechanism through what the BCC paper calls a basename-keyed pseudonym. The signing TPM holds a secret membership value &lt;code&gt;f&lt;/code&gt;. The verifier supplies a &lt;em&gt;basename&lt;/em&gt; &lt;code&gt;bsn&lt;/code&gt; (a string the verifier picks per session, per relying party, or per global epoch). The TPM derives a pseudonym&lt;/p&gt;
&lt;p&gt;$$N_V = \zeta^f \pmod \Gamma, \qquad \zeta = H_\Gamma(\text{bsn})$$&lt;/p&gt;
&lt;p&gt;where &lt;code&gt;H_Γ&lt;/code&gt; hashes the basename into a generator of a multiplicative group &lt;code&gt;Γ&lt;/code&gt;. The pseudonym &lt;code&gt;N_V&lt;/code&gt; has two structural properties. If the same verifier reuses the same &lt;code&gt;bsn&lt;/code&gt; across sessions, signatures from the same TPM produce the same &lt;code&gt;N_V&lt;/code&gt;, so the verifier can link them (and blacklist them if needed). If the verifier randomizes &lt;code&gt;bsn&lt;/code&gt; per session, or sets &lt;code&gt;bsn&lt;/code&gt; to the special value &lt;code&gt;⊥&lt;/code&gt; indicating &quot;no linkability,&quot; signatures from the same TPM produce different &lt;code&gt;N_V&lt;/code&gt; values that are indistinguishable from random.&lt;/p&gt;

A DAA property in which the *verifier* chooses a basename `bsn` per session or per relying party. Signatures from the same TPM under the same basename produce the same pseudonym; signatures under different basenames produce pseudonyms indistinguishable from random. The TPM, not a group manager, controls which signatures are linkable to which others. The Bernhard-Fuchsbauer-Ghadafi-Smart-Warinschi 2013 paper gives the canonical formal model [@bfgsw-2013].
&lt;p&gt;Together the subtraction and the substitution define the DAA contract. The Issuer issues a CL signature on the TPM&apos;s secret &lt;code&gt;f&lt;/code&gt; during a one-time Join. The TPM thereafter holds the credential &lt;code&gt;(f, A, e, v)&lt;/code&gt; -- the secret membership value plus the CL signature components. To sign a message &lt;code&gt;m&lt;/code&gt; against a verifier-supplied basename &lt;code&gt;bsn&lt;/code&gt;, the TPM:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Computes the pseudonym &lt;code&gt;N_V = ζ^f mod Γ&lt;/code&gt; where &lt;code&gt;ζ = H_Γ(bsn)&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Randomizes the CL signature: picks a fresh &lt;code&gt;w&lt;/code&gt;, computes &lt;code&gt;T_1 = A · S^w mod n&lt;/code&gt; and &lt;code&gt;T_2 = g^e · h^w mod n&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Produces a Fiat-Shamir non-interactive zero-knowledge proof of knowledge of &lt;code&gt;(f, A, e, v, w)&lt;/code&gt; satisfying the CL verification equation&lt;/p&gt;
&lt;p&gt;$$A^e \equiv Z / (R^f \cdot S^{v&apos; + v&apos;&apos;}) \pmod n,$$&lt;/p&gt;
&lt;p&gt;binding the proof to the tuple &lt;code&gt;(m, T_1, T_2, N_V)&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A verifier checks the proof against the Issuer&apos;s public key. The verifier learns nothing about &lt;code&gt;f&lt;/code&gt;, nothing about the TPM&apos;s identity, nothing about which CL signature was randomized -- and either gains a linkable pseudonym (if &lt;code&gt;bsn&lt;/code&gt; was reused) or no linkability at all (if &lt;code&gt;bsn&lt;/code&gt; was fresh).&lt;/p&gt;
&lt;p&gt;The architectural picture, set against §2&apos;s Privacy-CA flow, makes the contrast vivid.&lt;/p&gt;

flowchart TD
    I[&quot;Issuer&lt;br /&gt;(holds CL signing key)&quot;]
    T[&quot;TPM&lt;br /&gt;(holds secret f)&quot;]
    V[&quot;Verifier&lt;br /&gt;(holds Issuer pub key)&quot;]
    I -.-&amp;gt;|&quot;one-time Join&lt;br /&gt;CL signature on f&lt;br /&gt;(blind, issuer never sees f)&quot;| T
    T --&amp;gt;|&quot;credential (f, A, e, v)&lt;br /&gt;stored in TPM forever&quot;| T
    T --&amp;gt;|&quot;DAA-Sign(m, bsn)&lt;br /&gt;= randomized credential + NIZK + N_V&quot;| V
    V --&amp;gt;|&quot;Verify against Issuer pub key&lt;br /&gt;(no online interaction)&quot;| V
&lt;p&gt;This is the first aha. The reader entered §3 thinking &quot;anonymity with manager-controlled traceability&quot; was the goal of group signatures. They exit §4 understanding that for TPM attestation the goal is &lt;em&gt;anonymity without any opener&lt;/em&gt; plus &lt;em&gt;user-controlled, per-verifier linkability&lt;/em&gt;. The breakthrough is structurally a subtraction (remove the opener) plus a substitution (per-verifier basename pseudonyms in place of manager-controlled opening). It is not an addition.Eleven years after BCC 2004, Ben Smyth, Mark Ryan, and Liqun Chen ran a formal analysis of the original BCC construction and found a retroactive privacy bug [@smyth-ryan-chen-2015]. The bug allowed certain Issuer-coalition adversaries to link signatures across basenames in ways the original security argument had not anticipated. The bug was fixed in the 2008-2010 redesigns (specifically the BCL 2009 simplified-security-notions paper [@bcl-2009] and the CDL 2016 strong-Diffie-Hellman revisitation). The reader interested in why &quot;we proved this in 2004&quot; is not the same as &quot;this is provably secure in 2026&quot; should read SRC 2015 alongside the original BCC abstract.&lt;/p&gt;
&lt;p&gt;On paper, the BCC 2004 construction solved the Privacy-CA trap. In practice, DAA-RSA was hard to ship. The CL signature in the original scheme used strong RSA moduli at 2048 bits. A single Sign operation took several seconds on the TPM 1.2 hardware of the time. The signature itself was approximately 2.5 kilobytes -- larger than the entire AIK signature output a Privacy-CA-mediated attestation produced. TPM 1.2 shipped DAA-RSA as an optional capability when revision 94 of the spec added it in 2005 [@tpm-library-spec]. Almost no platform integrator turned it on. The cryptography worked. The implementation budget did not.&lt;/p&gt;
&lt;p&gt;The next decade was about making the construction small enough to deploy. The path was anything but straight.&lt;/p&gt;
&lt;h2&gt;5. The Evolution: From RSA-DAA to EC-DAA (2007-2013)&lt;/h2&gt;
&lt;p&gt;Six papers in seven years, two industrial branches, one dead end, one production scheme. Why was the EC-DAA story so much harder than it should have been?&lt;/p&gt;
&lt;p&gt;The honest answer: the entire toolkit of pairing-based cryptography arrived at the same time the TPM industry needed it, and the field discovered in real time that not every choice of pairing was safe. The path from BCC 2004 to the construction the TPM 2.0 spec actually shipped runs through five waypoints, each addressing the problem the previous one created.&lt;/p&gt;
&lt;h3&gt;5.1 Brickell-Li 2007: EPID and signature-based revocation&lt;/h3&gt;
&lt;p&gt;In 2007 Ernie Brickell, now leading Intel&apos;s trusted-computing work, and Jiangtao Li published &quot;Enhanced Privacy ID: A Direct Anonymous Attestation Scheme with Enhanced Revocation Capabilities&quot; at WPES 2007 [@brickell-li-epid-2007]. The journal version appeared at IEEE TDSC in 2012 [@brickell-li-tdsc-2012]. The single feature EPID added was a revocation list called Sig-RL: a list of &lt;em&gt;signatures&lt;/em&gt; the issuer wished to disavow. A verifier, given a signature &lt;code&gt;σ&lt;/code&gt; and a Sig-RL containing entries &lt;code&gt;σ_1, ..., σ_k&lt;/code&gt;, could prove that &lt;code&gt;σ&lt;/code&gt; was not produced by the same TPM as any &lt;code&gt;σ_i&lt;/code&gt; -- without learning the linking information itself.&lt;/p&gt;
&lt;p&gt;EPID became Intel&apos;s production attestation primitive. Wikipedia records the deployment scale: &quot;It has been incorporated in several Intel chipsets since 2008,&quot; and &quot;at RSAC 2016 Intel disclosed that it has shipped over 2.4B EPID keys since 2008&quot; [@wiki-epid]. EPID is what Intel SGX enclaves used to attest, before SGX attestation migrated to the vendor-CA DCAP architecture. EPID is what certain Intel-platform Widevine L1 implementations use to attest content-decryption modules. The Intel EPID SDK (the reference implementation) was eventually marked public-archive on GitHub [@epid-sdk]. The Wikipedia entry notes that the original EPID 2.0 specification was contributed by Intel into ISO/IEC 20008 and 20009 under royalty-free terms [@wiki-epid].&lt;/p&gt;
&lt;p&gt;EPID is not exactly DAA. EPID is a DAA variant with the Sig-RL revocation layer added. The Chen-Page-Smart construction that TPM 2.0 actually ships is closer to BCC 2004 plus an elliptic-curve substrate; EPID 2.0 is closer to BCC 2004 plus EC plus Sig-RL plus Intel&apos;s specific basename and key-management conventions. The two converge at the cryptographic core and diverge at the deployment surface.&lt;/p&gt;
&lt;h3&gt;5.2 Brickell-Chen-Li 2008: the first pairing-based DAA&lt;/h3&gt;
&lt;p&gt;At the TRUST 2008 conference, Ernie Brickell, Liqun Chen, and Jiangtao Li published &quot;A New Direct Anonymous Attestation Scheme from Bilinear Maps&quot; -- the first DAA scheme constructed over bilinear pairings instead of strong RSA [@bcl-2008]. Signature size dropped by an order of magnitude relative to BCC 2004, from roughly 2.5 kilobytes to a few hundred bytes [@bcl-2008]. TPM-side sign time, on hardware that supported elliptic-curve arithmetic, came down from seconds to fractions of a second [@bcl-2008]. The construction used symmetric (Type-1) pairings -- pairings where the two input groups &lt;code&gt;G_1&lt;/code&gt; and &lt;code&gt;G_2&lt;/code&gt; are the same -- which the implementation community would, two or three years later, decide were too inefficient for production TPM hardware.&lt;/p&gt;

A function `e : G_1 × G_2 -&amp;gt; G_T` on three elliptic-curve subgroups satisfying *bilinearity* (for all integers `a, b` and points `P ∈ G_1, Q ∈ G_2`, `e(aP, bQ) = e(P, Q)^(ab)`) and *non-degeneracy*. Type-3 (asymmetric) pairings, in which `G_1 ≠ G_2` and no efficient homomorphism is known between them, are the production pairing for TPM 2.0 ECDAA because they admit faster implementations and tighter security reductions than Type-1 (symmetric) pairings. The Chen-Page-Smart 2010 construction is built on Type-3 pairings over Barreto-Naehrig curves [@cps-2010].
&lt;h3&gt;5.3 Chen-Morrissey-Smart 2008: the asymmetric proposal and its proof flaw&lt;/h3&gt;
&lt;p&gt;Pairing 2008 hosted the next move. Liqun Chen, Paul Morrissey, and Nigel Smart published &quot;Pairings in Trusted Computing&quot; [@cms-pairing-2008], proposing a DAA scheme on asymmetric Type-3 pairings -- the kind that admit Barreto-Naehrig curves and the speed-ups TPM hardware needed. The same authors published a companion ProvSec 2008 paper &quot;On Proofs of Security for DAA Schemes&quot; providing the security argument [@cms-provsec-2008].&lt;/p&gt;
&lt;p&gt;Two years later, in Information Processing Letters, Liqun Chen and Jiangtao Li published &quot;A note on the Chen-Morrissey-Smart Direct Anonymous Attestation scheme&quot; [@chen-li-2010] showing that the CMS asymmetric-pairing construction had a flawed proof. The cryptographic intuition was correct; the proof technique used an assumption that did not hold in the asymmetric-pairing setting the construction relied on.The Chen-Morrissey-Smart episode is, in 2026, one of the most cited proof-flaw stories in pairing-based cryptography precisely because the construction was simple and the flaw was subtle. The mathematical content of the scheme was salvageable. The security argument was not. The lesson the field took away -- a proof in the symmetric-pairing model does not transfer to the asymmetric-pairing model without a separate argument -- has been a load-bearing convention in cryptographic publishing since.&lt;/p&gt;
&lt;h3&gt;5.4 Chen-Page-Smart 2010: the scheme TPM 2.0 actually ships&lt;/h3&gt;
&lt;p&gt;The fix arrived at CARDIS 2010 in Passau in April 2010 [@cardis-book]. Liqun Chen, Dan Page, and Nigel Smart published &quot;On the Design and Implementation of an Efficient DAA Scheme&quot; [@cps-2010] [@cps-2010-eprint], proposing an asymmetric-pairing DAA over Barreto-Naehrig curves with a Sign protocol &lt;em&gt;split&lt;/em&gt; between the TPM and the host. The TPM, in the new design, performed only the cryptographic operations that absolutely required custody of the secret &lt;code&gt;f&lt;/code&gt;: it produced commitment points and computed a Schnorr-style response over those commitments. The host -- a comparatively powerful general-purpose CPU sitting in front of the TPM -- composed the Fiat-Shamir challenge, performed the pairing computations, and assembled the final signature.&lt;/p&gt;
&lt;p&gt;The Chen-Page-Smart construction is the scheme TPM 2.0 actually ships. The Wikipedia DAA article makes the attribution direct, in a sentence that is itself the most-cited single primary-source extract in this article:&lt;/p&gt;

Chen, Page, and Smart proposed a new elliptic curve cryptography scheme using Barreto-Naehrig curves. This scheme is implemented by both EPID 2.0 and the TPM 2.0 standard. -- Wikipedia, *Direct Anonymous Attestation* [@wiki-daa]

A family of pairing-friendly elliptic curves with embedding degree 12, parameterized by an integer `u` to admit Type-3 pairings whose arithmetic is fast enough for resource-constrained devices [@bn-2006]. The curve identifier `TPM_ECC_BN_P256` (`0x0010`) is the specific 256-bit instance the TPM 2.0 Library Specification mandates for ECDAA, picked because of its pairing-friendly structure rather than as a NIST P-256 equivalent.
&lt;p&gt;Six years after CPS 2010, Taechan Kim and Razvan Barbulescu (CRYPTO 2016) published &quot;Extended Tower Number Field Sieve: A New Complexity for the Medium Prime Case,&quot; giving an improved sieve attack against pairing-friendly elliptic curves at the 256-bit BN level. The improvement dropped the practical security of BN-256 from roughly 128 bits to roughly 100 bits [@kim-barbulescu-2016]. The TCG normative text for TPM 2.0 ECDAA did not, as of late 2025, change the mandatory curve in response. This is the kind of cryptographic technical debt that lives quietly in deployed systems for a decade -- specs do not migrate on the same calendar as research moves.&lt;/p&gt;
&lt;h3&gt;5.5 BFGSW 2013 and SRC 2015: the formal closure&lt;/h3&gt;
&lt;p&gt;The cryptographic engineering of EC-DAA was done by 2010. What the field still owed itself was a clean security model: one definition of &quot;secure DAA&quot; that captured the user-controlled-linkability property and the TPM/host split, against which any candidate scheme could be evaluated.&lt;/p&gt;
&lt;p&gt;In 2013 David Bernhard, Georg Fuchsbauer, Essam Ghadafi, Nigel Smart, and Bogdan Warinschi published &quot;Anonymous attestation with user-controlled linkability&quot; in the &lt;em&gt;International Journal of Information Security&lt;/em&gt; [@bfgsw-2013] [@bfgsw-2013-eprint]. The BFGSW paper formalized the user-controlled-linkability property the BCC 2004 abstract had described in prose, introduced a clean separation of &quot;pre-DAA signing&quot; (TPM-side operations) from &quot;DAA signing&quot; (TPM + host composition), and proved the security of a representative construction in the resulting model.&lt;/p&gt;
&lt;p&gt;In 2015, Ben Smyth, Mark Ryan, and Liqun Chen published the retroactive analysis that closed the BCC 2004 privacy bug [@smyth-ryan-chen-2015]. By 2015 the cryptography was, formally, settled.&lt;/p&gt;
&lt;p&gt;In 2016 Jan Camenisch, Manu Drijvers, and Anja Lehmann revisited the construction at TRUST 2016 in &quot;Anonymous Attestation Using the Strong Diffie Hellman Assumption Revisited&quot; [@cdl-2016] [@cdl-2016-eprint], giving a tighter security argument under the q-SDH assumption and providing a fix for a Diffie-Hellman-oracle issue in the TPM 2.0 ECDAA interface that &quot;One TPM to Bind Them All&quot; would document in 2017 [@one-tpm-2017]. The CDL16 scheme is what most modern DAA library code references as the canonical construction.&lt;/p&gt;

flowchart LR
    BCC[&quot;BCC 2004&lt;br /&gt;RSA-DAA&lt;br /&gt;TPM 1.2&quot;] --&amp;gt; BL[&quot;Brickell-Li 2007&lt;br /&gt;EPID + Sig-RL&lt;br /&gt;Intel SGX / Widevine&quot;]
    BCC --&amp;gt; BCL[&quot;BCL 2008&lt;br /&gt;Type-1 pairing DAA&quot;]
    BCL --&amp;gt; CMS[&quot;CMS 2008&lt;br /&gt;Asymmetric pairing&lt;br /&gt;(broken by CL 2010)&quot;]
    BCL --&amp;gt; CPS[&quot;CPS 2010&lt;br /&gt;Type-3 BN-curve DAA&lt;br /&gt;TPM 2.0 ECDAA&quot;]
    CPS --&amp;gt; BFGSW[&quot;BFGSW 2013&lt;br /&gt;Formal user-controlled&lt;br /&gt;linkability model&quot;]
    BFGSW --&amp;gt; CDL[&quot;CDL 2016&lt;br /&gt;q-SDH revisitation&lt;br /&gt;Canonical modern DAA&quot;]
    BCC --&amp;gt; SRC[&quot;SRC 2015&lt;br /&gt;Retroactive BCC&lt;br /&gt;privacy bug&quot;]
&lt;p&gt;By 2013 the cryptography was complete. The standards organizations took the construction and made it official -- in two different specifications, on two parallel tracks.&lt;/p&gt;
&lt;h2&gt;6. The TPM 2.0 ECDAA Surface (2014-Present)&lt;/h2&gt;
&lt;p&gt;If you own a Windows laptop with a TPM 2.0, this section is the part of the chip you have never used. What does the spec actually say?&lt;/p&gt;
&lt;p&gt;The TPM 2.0 Library Specification, the canonical document published by the Trusted Computing Group, is a four-part normative reference [@tpm-library-spec]. Part 1 (Architecture) describes the threat model and the mathematical primitives. Part 2 (Structures) defines the data types every TPM command accepts and returns. Part 3 (Commands) defines the commands themselves. Part 4 (Supporting Routines) gives a reference C implementation. The ECDAA surface lives across all four parts.&lt;/p&gt;

An algorithm identifier defined in TPM 2.0 Library Specification Part 2 and selectable from any `TPMT_SIG_SCHEME` field. A signing key tagged with `TPM_ALG_ECDAA` produces signatures using the Chen-Page-Smart 2010 elliptic-curve DAA construction. The same algorithm identifier appears in any signature-scheme negotiation point in the TPM 2.0 command surface [@tpm-library-spec].

The 256-bit Barreto-Naehrig curve identifier the TPM 2.0 Library Specification mandates for any ECDAA-capable signing key. BN-P256 is *not* NIST P-256: it is a pairing-friendly curve with embedding degree 12 whose group structure admits the Type-3 pairings the DAA verification equation requires. Implementations that confuse the two will produce signatures that verify against the wrong group.

The command pair defined in TPM 2.0 Library Specification Part 3 that implements the Chen-Page-Smart 2010 split-protocol structure. `TPM2_Commit(keyHandle, P1, s2, y2)` returns commitment points `(K, L, E)` plus a `counter`. The host then computes the Fiat-Shamir challenge `c` over the message and the commitment points. `TPM2_Sign(keyHandle, digest, scheme=TPM_ALG_ECDAA, validation)` returns the Schnorr-style response `s = r + c·f mod p`. The host assembles the final signature from the commitment points, the challenge, and the response [@tpm-library-spec].
&lt;p&gt;The protocol split matters. The TPM, in the CPS 2010 construction, holds the secret &lt;code&gt;f&lt;/code&gt; and must perform exactly two cryptographic operations on it: produce a freshly randomized commitment to &lt;code&gt;f&lt;/code&gt; (via &lt;code&gt;TPM2_Commit&lt;/code&gt;), and produce a Schnorr response that proves knowledge of &lt;code&gt;f&lt;/code&gt; modulo the verifier&apos;s challenge (via &lt;code&gt;TPM2_Sign&lt;/code&gt;). Everything else -- the pairing computations, the curve arithmetic in &lt;code&gt;G_T&lt;/code&gt;, the Fiat-Shamir hash, the final signature assembly -- happens on the host CPU. This is the &lt;em&gt;only&lt;/em&gt; reason the construction is practical on a TPM. A monolithic Sign that did pairing arithmetic inside the chip would be unshippable; the split offloads the expensive operations onto silicon that has them for free.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The most common implementer mistake when working with TPM 2.0 ECDAA for the first time is to reuse the NIST P-256 ECDSA code path with the curve identifier swapped. The two curves share a bit length and a hash function and otherwise nothing. BN-P256 has a pairing-friendly group structure with embedding degree 12; NIST P-256 does not admit efficient pairings at all. Signatures produced by ECDSA over NIST P-256 will not verify against an ECDAA verifier expecting BN-P256, and the converse is true. The pairing requirement is what forces the BN curve choice; treat BN-P256 as a separate primitive with a separate code path.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Join protocol -- the one-time exchange between the Issuer and the TPM that produces the long-lived credential -- piggybacks on a TPM 2.0 command pair already present in every Windows attestation flow: &lt;code&gt;TPM2_MakeCredential&lt;/code&gt; and &lt;code&gt;TPM2_ActivateCredential&lt;/code&gt; [@tpm-library-spec]. The Issuer wraps the DAA credential under an encryption key derived from the TPM&apos;s Endorsement Key, ensuring that only the legitimate TPM (the one that holds the EK private key) can decrypt the credential and bind it to its internal &lt;code&gt;f&lt;/code&gt;.The choice of &lt;code&gt;TPM2_ActivateCredential&lt;/code&gt; as the Join anchor is convenient. The same primitive that TPM 2.0 attestation-key certification flows use for AIK-binding gets reused for DAA-credential binding. An OEM that supports &lt;code&gt;TPM2_ActivateCredential&lt;/code&gt; for ordinary AIK enrollment already has 80% of the firmware path the Join protocol needs. The difference is in what the Issuer ships back -- a per-TPM AIK certificate in the AIK case, an Issuer-randomized CL credential in the DAA case.&lt;/p&gt;
&lt;p&gt;Part 1 Annex C.5 contains the informative mathematical description -- the actual ECDAA verification equation, the basename-pseudonym derivation, the proof-of-knowledge template. Part 3 contains the normative command definitions. An implementer who reads only the Part 3 command definitions without reading Annex C.5 will have correct byte-buffer-level semantics and no idea what the protocol is computing; an implementer who reads only Annex C.5 without the normative command definitions will have correct math and the wrong API.&lt;/p&gt;
&lt;p&gt;The implementation surface, gathered into one place:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Artifact&lt;/th&gt;
&lt;th&gt;Identifier / location&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Algorithm selector&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TPM_ALG_ECDAA = 0x001A&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TPM 2.0 Library Specification Part 2 [@tpm-library-spec]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mandatory curve&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TPM_ECC_BN_P256 = 0x0010&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Part 2 [@tpm-library-spec]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;First-round command&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TPM2_Commit(keyHandle, P1, s2, y2) -&amp;gt; (K, L, E, counter)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Part 3 [@tpm-library-spec]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second-round command&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TPM2_Sign(keyHandle, digest, scheme=TPM_ALG_ECDAA, validation) -&amp;gt; signature&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Part 3 [@tpm-library-spec]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Join anchor&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TPM2_MakeCredential&lt;/code&gt; / &lt;code&gt;TPM2_ActivateCredential&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Part 3 [@tpm-library-spec]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Math description&lt;/td&gt;
&lt;td&gt;Part 1 Annex C.5 (informative)&lt;/td&gt;
&lt;td&gt;Part 1 [@tpm-library-spec]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optionality status&lt;/td&gt;
&lt;td&gt;Optional since PTP v1.04 (Feb 2020); carried through v1.07 RC1 (Dec 2025)&lt;/td&gt;
&lt;td&gt;TCG PC Client Platform TPM Profile changelog [@tcg-ptp]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

sequenceDiagram
    participant V as Verifier
    participant H as Host (CPU)
    participant T as TPM
    V-&amp;gt;&amp;gt;H: send basename bsn
    H-&amp;gt;&amp;gt;T: TPM2_Commit(keyHandle, P1, s2, y2)
    T--&amp;gt;&amp;gt;H: (K, L, E, counter)
    H-&amp;gt;&amp;gt;H: compute c = H(K, L, E, message, bsn)
    H-&amp;gt;&amp;gt;T: TPM2_Sign(keyHandle, digest=c, scheme=ECDAA)
    T--&amp;gt;&amp;gt;H: response s = r + c*f mod p
    H-&amp;gt;&amp;gt;H: assemble signature (K, L, E, c, s)
    H-&amp;gt;&amp;gt;V: ECDAA signature
    V-&amp;gt;&amp;gt;V: verify pairing equation
&lt;p&gt;The TCG published the TPM 2.0 Library Specification in 2014. From 2014 through early 2020, the PC Client Platform TPM Profile -- the document that says &quot;to ship a TPM 2.0 in a PC-class device, these algorithms must be present&quot; -- listed &lt;code&gt;TPM_ALG_ECDAA&lt;/code&gt; as mandatory-if-the-platform-supports-elliptic-curve-cryptography. In v1.04 (released February 2020) the TCG PTP working group made a quiet but consequential change. The changelog records the line verbatim: &quot;Made TPM_ALG_ECDAA and TPM_ALG_ECSCHNORR optional.&quot; The same designation has carried through v1.06 RC1 (January 2025) and v1.07 RC1 (December 2025) [@tcg-ptp]. After February 2020, an OEM can ship a Windows-class TPM 2.0 platform that does not implement ECDAA at all and remain conformant.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The Trusted Computing Group&apos;s resource pages (&lt;code&gt;trustedcomputinggroup.org/resource/tpm-library-specification/&lt;/code&gt; and &lt;code&gt;trustedcomputinggroup.org/resource/pc-client-platform-tpm-profile-ptp-specification/&lt;/code&gt;) reject non-browser User-Agents at the HTTP layer. This is a long-standing anti-bot policy. Citations in this article to the TPM 2.0 Library Specification and to the PC Client Platform TPM Profile point to the canonical URLs but are flagged in the verified-source registry as UNVERIFIED_FETCH; the verbatim changelog text was extracted under primary-source rules during the Stage 0a focus-premise audit and is the audit-of-record for the optionality claim. The downstream accuracy and fact-check stages of this pipeline carry the same caveat forward.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Pluton question is the second hedge. Microsoft Pluton is the security processor Microsoft has been shipping in successive Windows-class platforms since AMD&apos;s Ryzen 6000 in 2022, in AMD Ryzen 7040 (Phoenix) in 2023, in Qualcomm Snapdragon X Elite in 2024, and in Intel Core Ultra (Meteor Lake, December 2023; Lunar Lake, September 2024) and successive Intel Core Ultra generations. Pluton exposes a TPM 2.0 personality. The Microsoft Learn documentation page enumerates the cryptographic algorithms the processor exposes and the platform-security primitives it implements [@pluton].&lt;/p&gt;
&lt;p&gt;The page contains zero occurrences of &lt;code&gt;ECDAA&lt;/code&gt; or &lt;code&gt;TPM_ALG_ECDAA&lt;/code&gt;. The honest framing here is &lt;em&gt;not&lt;/em&gt; &quot;Pluton does not implement ECDAA&quot; -- the documentation neither confirms nor denies it -- but &quot;Pluton&apos;s published surface does not advertise ECDAA.&quot; That is the hedged statement this article carries from its opening to its FAQ.&lt;/p&gt;
&lt;p&gt;The runnable demonstration below is &lt;em&gt;educational&lt;/em&gt; -- Microsoft ships no &lt;code&gt;BCryptDirectAnonymousAttestation&lt;/code&gt;, no &lt;code&gt;NCryptDaaSign&lt;/code&gt;, no Windows API at all that exposes ECDAA from a user-mode application. The code shows the &lt;em&gt;logic&lt;/em&gt; an admin or platform engineer would follow when probing a TPM&apos;s reported algorithm set, not a working call against any shipping Windows API.&lt;/p&gt;
&lt;p&gt;{`
// Logic only. Microsoft ships no Windows API that surfaces TPM_ALG_ECDAA.
// In practice an admin would parse the output of Get-TpmEndorsementKeyInfo
// or use a vendor-specific tool to inspect the TPM&apos;s algorithm capability table.
const TPM_ALG_ECDAA = 0x001A;
const TPM_ECC_BN_P256 = 0x0010;&lt;/p&gt;
&lt;p&gt;function probeECDAA(tpmAlgList, tpmEccCurveList) {
  const hasECDAA = tpmAlgList.includes(TPM_ALG_ECDAA);
  const hasBN256 = tpmEccCurveList.includes(TPM_ECC_BN_P256);
  if (!hasECDAA) return &apos;no ECDAA: chip omits algorithm 0x001A&apos;;
  if (!hasBN256) return &apos;ECDAA without BN-P256: nominally compliant, practically unusable&apos;;
  return &apos;ECDAA + BN-P256 present (Join still requires Issuer infrastructure)&apos;;
}&lt;/p&gt;
&lt;p&gt;// Example: a Pluton-class chip whose published surface does not advertise ECDAA.
const plutonLike = [0x0001 /* RSA &lt;em&gt;/, 0x0008 /&lt;/em&gt; SHA-256 &lt;em&gt;/, 0x0023 /&lt;/em&gt; ECDSA &lt;em&gt;/];
console.log(probeECDAA(plutonLike, [0x0003 /&lt;/em&gt; NIST P-256 */]));
// -&amp;gt; &quot;no ECDAA: chip omits algorithm 0x001A&quot;&lt;/p&gt;
&lt;p&gt;// Example: a discrete Infineon SLB9670 TPM 2.0 (vendor docs list ECDAA + BN-P256).
const discreteTpm = [0x0001, 0x0008, 0x0023, TPM_ALG_ECDAA];
console.log(probeECDAA(discreteTpm, [0x0003, TPM_ECC_BN_P256]));
// -&amp;gt; &quot;ECDAA + BN-P256 present (Join still requires Issuer infrastructure)&quot;
`}&lt;/p&gt;
&lt;p&gt;The spec was written. The chips shipped. The TCG was satisfied. So why does no one verify ECDAA signatures?&lt;/p&gt;
&lt;h2&gt;7. The Standards Bridge: ISO/IEC 20008 and 20009&lt;/h2&gt;
&lt;p&gt;There is a difference between a TCG specification section number and an ISO/IEC mechanism identifier. The difference is the price of admission to a Common Criteria protection profile and to most government procurement contracts.&lt;/p&gt;
&lt;p&gt;ISO/IEC 20008 is the international-standards anchor for anonymous digital signatures. It comes in three parts. Part 1 (&quot;General&quot;) sets the framework and terminology [@iso-20008-1]. Part 2 (&quot;Mechanisms using a group public key&quot;) catalogues the specific anonymous-signature schemes the international community has standardized -- and Mechanism 4 is the EPID-derived elliptic-curve DAA construction that aligns with the TPM 2.0 ECDAA surface [@iso-20008-2]. Part 3 (&quot;Mechanisms using multiple public keys&quot;) catalogues a different family of schemes that is not the focus of this article.&lt;/p&gt;

The international-standards series titled &quot;Information technology -- Security techniques -- Anonymous digital signatures.&quot; Part 1 (general framework) and Part 2 (mechanisms using a group public key) were both published in 2013. Mechanism 4 in Part 2 standardizes EPID-derived elliptic-curve DAA. ISO/IEC 20008 is the bibliographic anchor cited by Common Criteria protection profiles, FIPS 140-3 module-validation evidence, and government procurement specifications that need to reference a *named, internationally agreed* anonymous-signature mechanism rather than a vendor-specific construction [@iso-20008-2].
&lt;p&gt;A note on the title. Earlier drafts of this article carried the title of ISO/IEC 20008-2 as &quot;anonymous signatures with message recovery.&quot; That phrasing belongs to a different standard, ISO/IEC 9796. The verified ISO catalogue title for 20008-2 is, verbatim, &quot;Information technology -- Security techniques -- Anonymous digital signatures -- Part 2: Mechanisms using a group public key&quot; [@iso-20008-2].&lt;/p&gt;
&lt;p&gt;ISO/IEC 20009 is the companion standard for authentication. Where 20008 standardizes signatures, 20009 standardizes the challenge-response protocols that wrap signatures into entity-authentication exchanges. Part 2 (&quot;Mechanisms based on signatures using a group public key&quot;) is where TPM-style attestation lives in ISO terminology [@iso-20009-2]. A FIDO authenticator or a TPM-backed Kerberos client that performs an attested authentication is, in ISO-speak, executing a 20009-2 mechanism that wraps a 20008-2 signature.&lt;/p&gt;

Intel held patents on the EPID construction. In contributing the EPID 2.0 algorithm to ISO/IEC 20008 and 20009, Intel made the underlying intellectual property available under royalty-free (RAND-Z) terms. The Wikipedia EPID article records the contribution and notes that EPID &quot;complies with international standards ISO/IEC 20008 / 20009&quot; [@wiki-epid]. The licensing structure mattered: it is what made the construction acceptable to the FIDO Alliance, to the TCG for the TPM 2.0 ECDAA surface, and to the European procurement community whose conformance regimes treat royalty-bearing cryptographic primitives differently from royalty-free ones. Exact licensing-event dates are not directly indexed in publicly fetchable Intel materials; this paragraph is inference-grade reconstruction from the Wikipedia citation chain.
&lt;p&gt;The procurement reason ISO standardization mattered is structural. A Common Criteria Protection Profile cannot, in the general case, reference a TCG specification section number. It can reference an ISO mechanism identifier. The Federal Information Processing Standards 140-3 evidence package for a cryptographic module must, in many cases, demonstrate that the cryptographic primitives the module implements are members of an internationally recognized standard family. The European Cyber Resilience Act, drafted in 2024 and applicable in stages from 2027 onward, treats compliance with a recognized international standard as one of the routes to a presumption of conformity. ISO/IEC 20008-2 Mechanism 4 is the door TPM 2.0 ECDAA walks through to be admissible in those regimes.&lt;/p&gt;
&lt;p&gt;Standardization was complete by 2014. Cryptographic primitive: CPS 2010. Security model: BFGSW 2013. ISO mechanism: 20008-2 Mechanism 4. TPM normative surface: &lt;code&gt;TPM_ALG_ECDAA&lt;/code&gt;, &lt;code&gt;TPM_ECC_BN_P256&lt;/code&gt;, &lt;code&gt;TPM2_Commit&lt;/code&gt;, &lt;code&gt;TPM2_Sign&lt;/code&gt;. Every box was checked. The next question -- the one the standardization community could not answer on its own -- was whether anyone would write a verifier.&lt;/p&gt;
&lt;h2&gt;8. The FIDO Bet That Failed (2017-2021)&lt;/h2&gt;
&lt;p&gt;In 2018, the FIDO Alliance bet that ECDAA was the missing privacy story for &lt;a href=&quot;https://paragmali.com/blog/webauthn-and-passkeys-on-windows-from-ctap-to-the-credential/&quot; rel=&quot;noopener&quot;&gt;WebAuthn&lt;/a&gt;. Three years later, W3C took the bet off the table.&lt;/p&gt;
&lt;p&gt;The bet was not casual. FIDO had a real problem. WebAuthn authenticators -- the YubiKey hardware tokens, the &lt;a href=&quot;https://paragmali.com/blog/your-face-is-not-your-password-inside-windows-hellos-hardwar/&quot; rel=&quot;noopener&quot;&gt;Microsoft Hello&lt;/a&gt; platform authenticators, the Touch ID and Face ID modules -- need to attest that they are genuine hardware. The attestation surface FIDO Alliance had inherited from U2F was &lt;em&gt;Basic Attestation&lt;/em&gt;: every authenticator in a manufacturing batch of 100,000 or more units shared one attestation key [@fido-cert-levels], so a relying party that checked the attestation learned only &quot;this is one of 100,000-plus YubiKey 5 NFCs,&quot; not which device specifically. The cohort-size rule gave Basic Attestation a workable operational privacy property. But there was an architectural fork in the road for an organization that wanted &lt;em&gt;cryptographic&lt;/em&gt; attestation privacy without the cohort-key fan-out problem.&lt;/p&gt;
&lt;p&gt;FIDO Alliance picked the cryptographic fork. The FIDO ECDAA Algorithm v2.0 specification was published as an Implementation Draft on February 27, 2018 [@fido-ecdaa-v2]. The document is the most carefully written specification of the DAA contract from a deployment perspective; the editor was Rolf Lindemann at Nok Nok Labs. The motivation section we have already quoted in §2 names the Privacy-CA failure mode in unusually direct terms.&lt;/p&gt;
&lt;p&gt;WebAuthn Level 1 reached W3C Recommendation status on March 4, 2019 [@webauthn-1]. Section 8 defined six attestation statement formats by &lt;code&gt;fmt&lt;/code&gt; identifier: &lt;code&gt;packed&lt;/code&gt;, &lt;code&gt;tpm&lt;/code&gt;, &lt;code&gt;android-key&lt;/code&gt;, &lt;code&gt;android-safetynet&lt;/code&gt;, &lt;code&gt;fido-u2f&lt;/code&gt;, and &lt;code&gt;none&lt;/code&gt;. ECDAA was not a separate format; the WebAuthn-1 §6.4.4 attestation-type list (Basic, Self, AttCA, ECDAA, None) carried ECDAA as an attestation &lt;em&gt;type&lt;/em&gt; supported &lt;em&gt;within&lt;/em&gt; the &lt;code&gt;packed&lt;/code&gt; and &lt;code&gt;tpm&lt;/code&gt; formats. An independent verification of the live HTML returns 63 occurrences of the string &quot;ecdaa&quot; in the Level 1 Recommendation -- ECDAA had its own type identifier, its own signing logic, and its own verification procedure embedded inside the two formats that mattered [@webauthn-1].&lt;/p&gt;
&lt;p&gt;WebAuthn Level 2 reached W3C Recommendation status on April 8, 2021 [@webauthn-2] [@wiki-webauthn]. The same independent verification against the live Level 2 HTML returns zero occurrences of &quot;ecdaa.&quot; Every reference -- the type identifier, the signing rules, the verifier procedure that the &lt;code&gt;packed&lt;/code&gt; and &lt;code&gt;tpm&lt;/code&gt; formats invoked -- was removed in a single editorial pass. The Yubico migration guide for its Java WebAuthn server library makes the vendor view explicit: &quot;This attestation type was removed from WebAuthn Level 2. ECDAA support has not been implemented in this library, so this value could in practice never be returned&quot; [@yubico-migration].&lt;/p&gt;
&lt;p&gt;Why did the bet fail? Four reasons, each visible from the public record.&lt;/p&gt;
&lt;p&gt;First, no major browser ever shipped an ECDAA verifier inside the &lt;code&gt;packed&lt;/code&gt; or &lt;code&gt;tpm&lt;/code&gt; statement format paths. Chromium, Firefox, and Safari implemented WebAuthn with &lt;code&gt;packed&lt;/code&gt;, &lt;code&gt;tpm&lt;/code&gt;, &lt;code&gt;fido-u2f&lt;/code&gt;, and &lt;code&gt;android-safetynet&lt;/code&gt; attestation, but the ECDAA branch within &lt;code&gt;packed&lt;/code&gt; and &lt;code&gt;tpm&lt;/code&gt; stayed unimplemented. The Yubico migration guide quoted above is the vendor-side confirmation of an industry-wide outcome [@yubico-migration].&lt;/p&gt;
&lt;p&gt;Second, the largest authenticator vendors picked the Basic and AttCA attestation types instead of ECDAA. YubiKey 5 series ships with the &lt;code&gt;packed&lt;/code&gt; format using a Basic Attestation key shared across a 100,000+-unit cohort [@yubico-yk5-attestation] [@fido-cert-levels]. Feitian, Google Titan, and other major FIDO2 authenticator vendors ship Basic Attestation under the same FIDO certification-policy cohort rule [@fido-cert-levels]. Microsoft Hello platform authenticators on Windows TPM-backed devices use the &lt;code&gt;tpm&lt;/code&gt; attestation statement format with an AIK that a Microsoft-operated CA certifies -- the AttCA type, functionally a Privacy-CA [@ms-hello-doc] [@azure-attestation]. The vendor base from which a WebAuthn relying party would actually see an attestation statement, in practice, never produced an ECDAA one.&lt;/p&gt;
&lt;p&gt;Third, FIDO ECDAA v2.0 never advanced beyond Implementation Draft. The URL slug for the document literally encodes its status: &lt;code&gt;fido-v2.0-id-20180227&lt;/code&gt; -- the &lt;code&gt;id-20180227&lt;/code&gt; segment names the format &lt;code&gt;&amp;lt;status&amp;gt;-&amp;lt;date&amp;gt;&lt;/code&gt;, and &quot;id&quot; is &quot;Implementation Draft.&quot; It never reached &quot;Proposed Standard&quot; or &quot;Approved Specification&quot; in FIDO&apos;s process [@fido-ecdaa-v2]. A relying party making a long-term technology bet on an attestation statement format that has never advanced past Implementation Draft has no reason to invest in a verifier library.&lt;/p&gt;
&lt;p&gt;Fourth, FIDO Basic Attestation&apos;s cohort-size rule (100,000+ authenticators per attestation group key, enforced contractually on the certified-authenticator side) gave the underlying privacy concern an &lt;em&gt;operational&lt;/em&gt; answer [@fido-cert-levels]. A WebAuthn relying party that sees a Basic Attestation signature learns &quot;this is one of at least 100,000 identical authenticators&quot; -- a cohort large enough that the relying party cannot, in practice, recover individual identifying information from the attestation alone. The cohort rule does not require pairing arithmetic, does not need a verifier library, and works with the same &lt;code&gt;packed&lt;/code&gt; and &lt;code&gt;tpm&lt;/code&gt; attestation formats every relying party already implements.&lt;/p&gt;

The FIDO Basic Attestation cohort minimum is a particularly clean example of how operational rules can compete directly with cryptographic primitives. The privacy property a relying party wants -- &quot;I cannot single out this device from its peers&quot; -- can be obtained by (a) hardware-anchored zero-knowledge proofs that mathematically forbid linkage (cryptographic DAA), or (b) a contractual obligation that every batch of attestation keys covers at least 100,000 devices (FIDO Basic Attestation) [@fido-cert-levels]. The cryptographic answer is mathematically stronger. The operational answer is dramatically easier to debug, audit, and revoke. Production has consistently chosen the latter.
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; ECDAA shipped chips. It never shipped verifiers. Standardization is necessary but not sufficient for production deployment: production cryptography needs verifier libraries, and verifier libraries are &lt;em&gt;social&lt;/em&gt; phenomena -- they emerge from relying-party demand, SDK presence, incident-response tooling, and library-maintainer attention, none of which the cryptography itself produces. Cryptographic excellence does not predict deployment; library availability does.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is the second aha. The reader entered §8 believing that a standardized cryptographic primitive backed by FIDO, three browser vendors, and a publicly authored attestation format would deploy. They exit understanding that ECDAA standardized everything except the social machinery -- and the social machinery is where production attestation actually lives.&lt;/p&gt;
&lt;p&gt;If a consortium with FIDO&apos;s privacy mandate, browser-vendor coalition, and authenticator-vendor base could not generate enough relying-party momentum to keep ECDAA in WebAuthn, what chance did the silent option in TPM 2.0 ever have? The answer requires walking the Microsoft attestation stack.&lt;/p&gt;
&lt;h2&gt;9. Windows: A Billion Chips, Zero Production Use (2014-Present)&lt;/h2&gt;
&lt;p&gt;Microsoft has shipped over a billion Windows TPM 2.0 platforms [@ms-pluton-blog] [@wiki-windows-11]. Microsoft has not shipped a Windows DAA API. The two facts are not in tension. They are the story.&lt;/p&gt;
&lt;p&gt;The shipping Windows attestation stack is documented and unambiguous. Microsoft Azure Attestation is the production-grade attestation service. Its public architecture document describes the protocol in five paragraphs that read, line for line, like TPM 1.1 from 2003 [@azure-attestation]:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;Every TPM ships with a unique asymmetric key called the endorsement key (EK)... A certification authority (CA) establishes trust in the TPM either via EKPub or EKCert... A device proves to the CA that the key for which the certificate is being requested is cryptographically bound to the EKPub and that the TPM owns the EKPriv. The CA issues a certificate with a special issuance policy to denote that the key is now attested as protected by a TPM.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The architecture is the Privacy-CA architecture. The Microsoft-operated CA inputs an EK certificate and outputs a JWT that downstream Microsoft services (Defender for Endpoint device-compliance, Intune Conditional Access policies, Entra ID conditional access, customer-defined Azure Attestation policies) consume. The Windows Health Attestation Service, the older Microsoft surface that predated Azure Attestation, used the same broker model with different deployment shape. The Defender for Endpoint device-compliance flow that gates Conditional Access on attested TPM boot state consumes WHAS or Azure Attestation JWTs, not raw DAA quotes.&lt;/p&gt;
&lt;p&gt;Microsoft Pluton&apos;s published surface tells the same story from the silicon side. Pluton is the security processor Microsoft has been shipping in successive Windows-class platforms. Its Microsoft Learn page enumerates the cryptographic algorithms and platform-security primitives the processor exposes [@pluton]. The page is exhaustive about TPM 2.0 baseline algorithms (RSA-2048, ECDSA over NIST P-256, SHA-2 family). It contains zero occurrences of &lt;code&gt;ECDAA&lt;/code&gt;, of &lt;code&gt;TPM_ALG_ECDAA&lt;/code&gt;, or of any phrase like &quot;anonymous attestation.&quot; Insufficient public evidence to assert that Pluton implements ECDAA; sufficient evidence to assert that Pluton&apos;s published surface does not advertise it.&lt;/p&gt;
&lt;p&gt;The Windows API surface gap is the third piece of evidence. The TPM Base Services (&lt;code&gt;Tbsi_*&lt;/code&gt; functions in &lt;code&gt;Tbs.dll&lt;/code&gt;) expose &lt;code&gt;TPM2_Commit&lt;/code&gt; and &lt;code&gt;TPM2_Sign&lt;/code&gt; to user-mode applications -- but only as raw command-buffer submissions. There is no &lt;code&gt;BCryptDirectAnonymousAttestation&lt;/code&gt;. There is no &lt;code&gt;NCryptDaaSign&lt;/code&gt;. There is no Web Authentication API wrapper that surfaces ECDAA.&lt;/p&gt;
&lt;p&gt;The TPM Platform Crypto Provider (PCP) that Windows ships as part of the Cryptography Next Generation (CNG) framework supports RSA and ECDSA TPM-backed keys but does not surface ECDAA. The TSS.MSR open-source TPM stack from Microsoft Research does not ship a DAA wrapper. An application developer who wants ECDAA on Windows today writes raw &lt;code&gt;TBS_SUBMIT_COMMAND&lt;/code&gt; byte buffers against the documented TPM 2.0 command numbering, manages the Join protocol against an Issuer of their own provisioning, and verifies the resulting signatures with a library they wrote themselves or pulled from a research-grade implementation.&lt;/p&gt;
&lt;p&gt;The interesting question is why. Microsoft has never published a &quot;we considered DAA and chose the broker model because...&quot; statement. Treating that absence honestly, the four reasons below are &lt;em&gt;inferences&lt;/em&gt; from observable architecture decisions, not Microsoft-engineer-published rationales. The article labels them as such.&lt;/p&gt;
&lt;p&gt;First, &lt;em&gt;operational simplicity&lt;/em&gt;. A hosted CA with audit logs is more debuggable than a per-relying-party DAA verifier with no central audit point. When a device fails attestation in production, the on-call engineer reading the Azure Attestation logs can answer &quot;why did this device fail?&quot; in seconds; the same question against a DAA verifier requires reasoning about pairing arithmetic, basename derivation, and Issuer-credential validity. Engineering organizations choose architectures whose failure modes they can debug.&lt;/p&gt;
&lt;p&gt;Second, &lt;em&gt;revocation economics&lt;/em&gt;. A Privacy-CA can revoke an AIK by removing one certificate from its issued-certificate store. Revoking a DAA credential, in the construction TPM 2.0 ships, requires either EPID-style signature-based revocation -- which the TPM 2.0 ECDAA scheme does not provide -- or a private-key list distributed to every relying party (extracting the private key from the misbehaving TPM is presumed possible after compromise, and verifiers then check that the signing key is not on the list). The CA&apos;s revocation primitive is a database delete. The DAA revocation primitive is an SDK rollout to every consumer of the verification library.&lt;/p&gt;
&lt;p&gt;Third, &lt;em&gt;the relying-party stack&lt;/em&gt;. DAA verifier libraries are not present in any mainstream cloud platform&apos;s SDK. The .NET CryptoNG surface, the Java JCA, the Python &lt;code&gt;cryptography&lt;/code&gt; library, the Go &lt;code&gt;crypto&lt;/code&gt; standard library, the Rust &lt;code&gt;ring&lt;/code&gt; and &lt;code&gt;dalek&lt;/code&gt; ecosystems -- none ship an ECDAA verifier. X.509 / PKI verifier libraries, by contrast, are everywhere. A relying party building on top of mainstream SDKs gets PKI verification for free; gets DAA verification for nothing close to free.&lt;/p&gt;
&lt;p&gt;Fourth, &lt;em&gt;the Windows API surface gap is itself the obstacle&lt;/em&gt;. Adding a &lt;code&gt;BCrypt&lt;/code&gt; / &lt;code&gt;NCrypt&lt;/code&gt; / WebAuthn DAA wrapper to Windows requires designing a new key-storage provider contract, defining the JOIN-protocol service interface, writing the conformance test suite, drafting the security documentation, and rolling it out on the Windows release calendar. That is a project the size of Windows Hello&apos;s. Microsoft has not, to public knowledge, prioritized it.&lt;/p&gt;

flowchart TD
    HW[&quot;TPM 2.0 hardware&lt;br /&gt;(discrete or Pluton)&lt;br /&gt;TPM_ALG_ECDAA may be present&quot;]
    TBS[&quot;TPM Base Services&lt;br /&gt;(Tbs.dll, kernel)&quot;]
    PCP[&quot;TPM Platform Crypto Provider&lt;br /&gt;(BCrypt / NCrypt)&lt;br /&gt;RSA and ECDSA only&quot;]
    AZ[&quot;Microsoft Azure Attestation&lt;br /&gt;(Privacy-CA architecture)&quot;]
    WHAS[&quot;Windows Health Attestation Service&lt;br /&gt;(Privacy-CA architecture)&quot;]
    RP[&quot;Intune / Defender / Entra&lt;br /&gt;Conditional Access enforcement&quot;]
    HW --&amp;gt; TBS
    TBS --&amp;gt; PCP
    PCP --&amp;gt; AZ
    PCP --&amp;gt; WHAS
    AZ --&amp;gt; RP
    WHAS --&amp;gt; RP
    HW -.-&amp;gt;|&quot;ECDAA path exists&lt;br /&gt;no Windows API&quot;| HW
&lt;p&gt;The deeper reading -- the one that makes Microsoft&apos;s choice look structural rather than accidental -- starts from a comparison the four inferences above already pointed toward.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Privacy-CA brokers and DAA solve the same problem -- prove the TPM is genuine without disclosing which TPM. They differ only in &lt;em&gt;where the trust assumption lives&lt;/em&gt;. The broker treats privacy as an operational policy (the CA promises not to log, audit logs prove it kept the promise, regulators enforce the promise). DAA treats privacy as a mathematical property (the issuer cannot link, period, no audit needed). The architecture that wins in production is the one with the &lt;em&gt;smaller operational surface&lt;/em&gt;, not the one with the &lt;em&gt;better cryptographic guarantee&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is the third aha. The reader entered §9 believing that cryptographic superiority should eventually win in production, and that Microsoft&apos;s non-adoption of DAA must be an oversight or a missed product opportunity. They exit understanding that the deployment-economics asymmetry is structural: a broker-mediated attestation flow reduces, end-to-end, to standard X.509 plumbing every cloud SDK already ships, while a DAA-mediated flow requires bespoke verifier libraries, bespoke revocation infrastructure, bespoke debugging tooling, and bespoke incident-response runbooks. Cloud-platform organizations have spent the last ten years building world-class operational machinery for X.509 attestation. They will not throw it away for a cryptographic property no compliance regime currently demands.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The four reasons compound. The broker model gives a single audit point, a database-delete revocation primitive, an SDK that ships in every major language, and a debugging story the on-call engineer can walk through at 3 a.m. DAA gives mathematical privacy and requires every one of those operational properties to be rebuilt from scratch. Cloud platforms have, repeatedly and consistently, picked the architecture whose operational properties are easier to ship -- not because they do not understand the cryptographic alternative, but because the cryptographic alternative would require them to discard the operational machinery they already have. This is the structural reason DAA has stayed in firmware on a billion chips and out of production attestation flows on all of them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If the broker calculus is this durable, is there any future world in which DAA wins? Two, and both are research-stage with decade-long horizons.&lt;/p&gt;
&lt;h2&gt;10. Theoretical Limits and Open Problems&lt;/h2&gt;
&lt;p&gt;What can DAA never do? Where does the next decade of research go? Three open problems organize the active research community in 2026.&lt;/p&gt;
&lt;h3&gt;10.1 What DAA cannot do&lt;/h3&gt;
&lt;p&gt;The first honest statement is the negative one. A correctly implemented DAA scheme does not prevent a &lt;em&gt;compromised TPM&lt;/em&gt; from signing for the cohort it belongs to. The EK certificate attestation must be honest at manufacture time; if a TPM&apos;s secret membership value &lt;code&gt;f&lt;/code&gt; leaks to an attacker (through fault injection, through side-channel extraction, through a firmware backdoor), the attacker can produce ECDAA signatures indistinguishable from legitimate ones until the TPM&apos;s &lt;code&gt;f&lt;/code&gt; is added to a revocation list. The same constraint applies to every group-signature scheme.&lt;/p&gt;
&lt;p&gt;A second hard limit is per-basename linkability. The user-controlled-linkability property gives a TPM the choice of linkable or unlinkable signing -- but once a verifier has seen the pseudonym &lt;code&gt;N_V = ζ^f mod Γ&lt;/code&gt; for a particular &lt;code&gt;(TPM, bsn)&lt;/code&gt; pair, the linkage for that basename is permanent. A misbehaving TPM that wants its history with a particular relying party forgotten cannot, by signing under a different basename, retroactively unlink past sessions.&lt;/p&gt;
&lt;p&gt;A third limit is rogue-key scalability. The TPM 2.0 ECDAA scheme detects rogue keys by checking each signature against a list of compromised-&lt;code&gt;f&lt;/code&gt; values the verifier maintains. For small lists this is cheap. For very large lists -- imagine a deployment where 1% of the chip population leaks &lt;code&gt;f&lt;/code&gt; to attackers and the verifier must check every signature against ten million revoked values -- the constant factor matters. EPID&apos;s Sig-RL mechanism uses signature-based revocation that scales better; the TPM 2.0 ECDAA scheme does not include it.&lt;/p&gt;
&lt;h3&gt;10.2 The One-TPM-to-Bind-Them-All fix&lt;/h3&gt;
&lt;p&gt;In 2017 a team consisting of Jan Camenisch, Liqun Chen, Manu Drijvers, Anja Lehmann, David Novick, and Rainer Urian published &quot;One TPM to Bind Them All: Fixing TPM 2.0 for Provably Secure Anonymous Attestation&quot; at IEEE S&amp;amp;P 2017 [@one-tpm-2017]. The paper demonstrated a Diffie-Hellman-oracle attack against the TPM 2.0 ECDAA interface as shipped: a malicious host could query the TPM in a way that gave the host a DH-oracle relative to the TPM&apos;s secret &lt;code&gt;f&lt;/code&gt;, effectively breaking the unlinkability property. The proposed fix had been published the previous year by Camenisch, Drijvers, and Lehmann at TRUST 2016 [@cdl-2016] [@cdl-2016-eprint]; library implementations of DAA published from 2017 onward incorporate the fix.The CDL16 fix is library-level, not silicon-level. The TPM 2.0 ECDAA command surface in the chip remains as shipped; the &lt;em&gt;software&lt;/em&gt; that drives it must use the corrected protocol sequence to avoid presenting the host-controlled DH oracle. As of late 2025, the TCG normative TPM 2.0 Library Specification text has not been amended to require the corrected sequence. Implementations of DAA on top of TPM 2.0 -- the FIDO ECDAA v2.0 library, the Camenisch-Drijvers-Lehmann reference code, modern academic ECDAA implementations -- follow CDL16. Implementations written against the bare TPM 2.0 Library Specification without reading CDL16 are vulnerable.&lt;/p&gt;
&lt;h3&gt;10.3 Post-quantum DAA&lt;/h3&gt;
&lt;p&gt;Shor&apos;s algorithm is fatal to DAA. Every classical DAA construction -- BCC 2004, BCL 2008, CPS 2010, CDL 2016 -- relies on the hardness of discrete logarithms in elliptic-curve groups, the hardness of strong-RSA factoring, or both. A cryptographically relevant quantum computer breaks all of them. &lt;a href=&quot;https://paragmali.com/blog/post-quantum-cryptography-on-windows-the-thirty-year-migrati/&quot; rel=&quot;noopener&quot;&gt;Post-quantum&lt;/a&gt; DAA is therefore active research, with no production deployment as of 2026. Three candidate families are being actively explored:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Symmetric-primitive DAA.&lt;/strong&gt; Dan Boneh, Saba Eskandarian, and Ben Fisch presented &quot;Post-quantum EPID Signatures from Symmetric Primitives&quot; at CT-RSA 2019 [@bef-2019], building a post-quantum group signature from one-way functions and Merkle trees. The construction has classical post-quantum security guarantees but pays a steep size cost.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lattice-based DAA.&lt;/strong&gt; Rachid El Bansarkhani and Ali El Kaafarani published &quot;Direct Anonymous Attestation from Lattices&quot; as IACR ePrint 2017/1022 [@bk-2017-eprint], the earliest such proposal in the literature. The state-of-the-art lattice DAA construction is the 2024 Collaborative Segregated NIZK (&quot;CoSNIZK&quot;) work by Liqun Chen, Patrick Hough, and Nada El Kassem [@cosnizk-2024], achieving signatures of approximately 38 kilobytes -- an order of magnitude smaller than the earliest lattice proposals but still two orders of magnitude larger than CPS 2010 ECDAA.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hash-based DAA.&lt;/strong&gt; Liqun Chen, Changyu Dong, Nada El Kassem, Christopher Newton, and Yalan Wang published &quot;Hash-Based Direct Anonymous Attestation&quot; at PQCrypto 2023 [@hashdaa-2023], building DAA from SPHINCS+-style stateless hash-based signatures. Size and speed remain unfavorable for TPM 2.0 firmware budgets.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The blocker for any of these reaching production TPM firmware is not academic. The TPM 2.0 normative algorithm set does not include lattice primitives. A post-quantum DAA in TPM 2.0 would require introducing &lt;code&gt;TPM_ALG_DILITHIUM&lt;/code&gt;, &lt;code&gt;TPM_ALG_FALCON&lt;/code&gt;, &lt;code&gt;TPM_ALG_KYBER&lt;/code&gt;, or some equivalent into the spec, mandating support in the PC Client Platform TPM Profile, and rolling out across the OEM TPM-vendor base. That is, at minimum, a three-to-five-year standards effort that the TCG has not, as of late 2025, publicly committed to. CoSNIZK at 38 kilobytes is also two to three times larger than the largest signature any deployed TPM 2.0 firmware budgets for; the TPM-side compute time at quantum-safe parameter sets is currently measured in seconds rather than tens of milliseconds.&lt;/p&gt;
&lt;h3&gt;10.4 DAA for confidential computing&lt;/h3&gt;
&lt;p&gt;The other future-world thread is confidential computing -- the family of CPU-anchored isolated-execution primitives (Intel SGX, Intel TDX, AMD SEV-SNP, ARM CCA) that need their own attestation surfaces. Intel SGX attestation initially used EPID and has since migrated to DCAP, a vendor-CA broker similar in shape to Microsoft Azure Attestation. AMD SEV-SNP and Intel TDX use vendor-rooted PKI from the start.&lt;/p&gt;
&lt;p&gt;Whether DAA-style group-signature schemes are appropriate for VM-level attestation -- where cohorts are small (per-region TDX hosts in a given hyperscaler datacenter), where the verifier is often a small set of well-known cloud-platform endpoints, and where traffic-analysis leakage between confidential VMs and Privacy-CA-like services is itself a threat -- is an open architectural question. The 2026 default is &quot;vendor-CA broker&quot;; the academic community continues to argue that cryptographic DAA would be a better match for the threat model. Production has not, so far, agreed.&lt;/p&gt;
&lt;p&gt;A note on Java Card DAA prototypes. A small number of academic implementations of DAA on Java Card secure elements appeared between 2014 and 2017 -- Camenisch and others published smartcard-class implementations as proofs of concept. None reached production deployment. The reasons appear to be the same operational-economics asymmetry that limits TPM 2.0 ECDAA adoption: Java Card environments lack the relying-party verifier libraries that would consume the output. This is inference; no Java Card vendor has, to public knowledge, published a &quot;we evaluated DAA and chose not to ship it&quot; statement.&lt;/p&gt;
&lt;p&gt;These are the open problems for researchers. What about the rest of us, on Monday morning?&lt;/p&gt;
&lt;h2&gt;11. Practical Guide and Frequently Asked Questions&lt;/h2&gt;
&lt;p&gt;Five roles, one Monday morning. Where does this leave you?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For a Windows platform engineer.&lt;/strong&gt; The minimum viable Windows DAA API surface is approximately a &lt;code&gt;BCryptCreateDaaContext&lt;/code&gt;, &lt;code&gt;BCryptDaaJoin&lt;/code&gt;, &lt;code&gt;BCryptDaaSign&lt;/code&gt;, and &lt;code&gt;BCryptDaaVerify&lt;/code&gt; set, plus an &lt;code&gt;NCryptDaaKeyHandle&lt;/code&gt; for key-storage-provider lifecycle, plus a Web Authentication API surface that consumes ECDAA attestation. Shipping all of that costs a Hello-sized engineering investment. If Pluton&apos;s published surface ever advertises ECDAA, an OEM-side integration becomes possible. Today the answer is that DAA is not available through any supported Windows API.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For an attestation-provider product engineer.&lt;/strong&gt; Pick a Privacy-CA broker architecture for production. The comparison table below makes the trade-offs explicit. Cryptographic DAA does not pay for the architectural switch unless the relying-party privacy threat is specifically the broker itself -- a threat model that, in 2026, no shipping production attestation product publicly assumes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For a FIDO authenticator vendor.&lt;/strong&gt; ECDAA attestation is not a viable production choice in 2026. The path to it becoming viable runs through verifier libraries in Chromium, Firefox, and Safari; relying-party SDK support across Auth0, Okta, Microsoft Entra, and Google Identity Platform; and a non-deprecated WebAuthn Level N specification that re-adds the format. None of those preconditions are visibly in progress.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For an academic zero-knowledge-proof researcher.&lt;/strong&gt; Four open problems map onto production needs: post-quantum DAA at TPM-firmware-shippable signature sizes (the current state-of-the-art at 38 kilobytes is too large), threshold-issuer DAA (no single party can issue a credential), confidential-computing DAA (for small-cohort VM attestation), and IoT DAA (for milliwatt-class energy budgets). Each is publishable; none yet has a deployment path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For a privacy-tech advocate or policymaker.&lt;/strong&gt; The framing that helps Microsoft, Google, and AWS engineering teams hear the request is &quot;the broker can be compelled by a subpoena; the math cannot.&quot; The framing that does not help is &quot;your cryptography is worse than the academic alternative.&quot; The first is a threat-model conversation that engineering organizations can engage with; the second is a technology conversation they have already had and decided.&lt;/p&gt;
&lt;h3&gt;Comparison: four production architectures for attested privacy&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Privacy-CA broker&lt;/th&gt;
&lt;th&gt;TPM 2.0 ECDAA&lt;/th&gt;
&lt;th&gt;EPID 2.0&lt;/th&gt;
&lt;th&gt;Vendor-CA (Apple, AWS Nitro, Google)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Trust assumption&lt;/td&gt;
&lt;td&gt;Operational (CA promises not to log)&lt;/td&gt;
&lt;td&gt;Cryptographic (issuer cannot link)&lt;/td&gt;
&lt;td&gt;Cryptographic (issuer cannot link)&lt;/td&gt;
&lt;td&gt;Operational (vendor CA promises not to log)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anonymity from verifier?&lt;/td&gt;
&lt;td&gt;If CA does not log&lt;/td&gt;
&lt;td&gt;Yes (per-basename)&lt;/td&gt;
&lt;td&gt;Yes (per-basename)&lt;/td&gt;
&lt;td&gt;If vendor does not log&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TPM-side sign time&lt;/td&gt;
&lt;td&gt;Milliseconds (AIK signing)&lt;/td&gt;
&lt;td&gt;Tens of milliseconds&lt;/td&gt;
&lt;td&gt;Tens of milliseconds&lt;/td&gt;
&lt;td&gt;N/A (signing on vendor silicon)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signature size&lt;/td&gt;
&lt;td&gt;Hundreds of bytes (AIK)&lt;/td&gt;
&lt;td&gt;Hundreds of bytes&lt;/td&gt;
&lt;td&gt;Hundreds of bytes&lt;/td&gt;
&lt;td&gt;Hundreds of bytes (X.509 over signed JWT)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revocation&lt;/td&gt;
&lt;td&gt;CA database delete&lt;/td&gt;
&lt;td&gt;Private-key list (TPM 2.0)&lt;/td&gt;
&lt;td&gt;Sig-RL (signature-based)&lt;/td&gt;
&lt;td&gt;Vendor revocation list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implementer complexity&lt;/td&gt;
&lt;td&gt;Low (X.509 PKI everywhere)&lt;/td&gt;
&lt;td&gt;High (BN-P256 pairing libraries)&lt;/td&gt;
&lt;td&gt;High (vendor SDK required)&lt;/td&gt;
&lt;td&gt;Low (vendor SDK ships it)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standardization&lt;/td&gt;
&lt;td&gt;TCG (2003)&lt;/td&gt;
&lt;td&gt;TPM 2.0 + ISO 20008-2 Mech 4&lt;/td&gt;
&lt;td&gt;ISO 20008-2 Mech 4&lt;/td&gt;
&lt;td&gt;Vendor-proprietary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best suited for&lt;/td&gt;
&lt;td&gt;Cloud attestation at hyperscaler scale&lt;/td&gt;
&lt;td&gt;Hardware-anchored attestation where broker is the threat&lt;/td&gt;
&lt;td&gt;Intel-deployed enclave attestation&lt;/td&gt;
&lt;td&gt;Vendor-platform attestation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026 deployment scale&lt;/td&gt;
&lt;td&gt;Billions of attestations per day&lt;/td&gt;
&lt;td&gt;Essentially zero production verifiers&lt;/td&gt;
&lt;td&gt;2.4B+ EPID keys per RSAC 2016&lt;/td&gt;
&lt;td&gt;Billions of attestations per day&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The &quot;essentially zero production verifiers&quot; entry for TPM 2.0 ECDAA is the deployment story this article exists to explain. The cryptography is in firmware on hundreds of millions of devices; the verifier side, in 2026, is research-grade libraries and the FIDO ECDAA-Verify reference code. No production cloud-platform SDK ships an ECDAA verifier.&lt;/p&gt;

Four things, in order. First, Pluton&apos;s published surface advertises `TPM_ALG_ECDAA` and an Issuer key-management story (a Microsoft-operated DAA Issuer for Windows devices, with documented enrollment and revocation flows). Second, a Cryptography Next Generation API surface (`BCryptDaaSign`, `NCryptDaaKey*`) that exposes the TPM2_Commit / TPM2_Sign sequence behind a single managed-language call. Third, a Web Authentication API extension that surfaces ECDAA attestation as a first-class statement format the same way the `tpm` format is today. Fourth, an Azure Attestation policy mode that consumes ECDAA signatures and produces JWT outputs downstream Microsoft services already understand. None of these are technically blocking; all four require a multi-year roadmap commitment that, as of late 2025, Microsoft has not publicly made. This is a thought experiment about technical feasibility, not a forecast about Microsoft strategy.
&lt;p&gt;The companion piece to this article is the &lt;a href=&quot;https://paragmali.com/blog/the-tpm-in-windows-one-primitive-twenty-five-years-and-the-c/&quot; rel=&quot;noopener&quot;&gt;TPM in Windows&lt;/a&gt; article, which walks the broader TPM 2.0 command surface ECDAA sits inside.&lt;/p&gt;


It depends on what the laptop ships. The TPM 2.0 Library Specification names `TPM_ALG_ECDAA`. The TCG PC Client Platform TPM Profile made the algorithm optional in v1.04 (February 2020) and has carried that designation through v1.07 RC1 (December 2025), so a conformant Windows-class platform is allowed to omit it. Many discrete TPM 2.0 modules (Infineon, STMicroelectronics, Nuvoton) do implement the algorithm; Microsoft Pluton&apos;s published documentation does not advertise it. The honest answer is &quot;look at your specific TPM vendor&apos;s algorithm capability table&quot; -- and that even if your TPM does support the algorithm, Windows ships no API to use it [@tpm-library-spec] [@tcg-ptp] [@pluton] [@wiki-daa].


Microsoft has not published an explicit rationale. Four inferable reasons are visible from the architecture: (1) operational simplicity -- a hosted CA is easier to debug than a per-relying-party DAA verifier; (2) revocation economics -- a CA can revoke an AIK by deleting a certificate, while DAA revocation requires a private-key list distributed to every verifier; (3) a missing relying-party verifier-library stack; (4) no Windows API surface for ECDAA. All four are inferences. The shipped architecture is the Privacy-CA-shaped flow documented at the Microsoft Learn attestation page [@azure-attestation].


WebAuthn Level 1 (March 2019) registered ECDAA as an attestation *type* (Basic, Self, AttCA, ECDAA, None) carried inside the `packed` and `tpm` attestation statement formats. The Level 1 specification text contains 63 references to &quot;ecdaa.&quot; WebAuthn Level 2 (April 2021) removed the type entirely; an independent grep of the Level 2 Recommendation HTML returns zero occurrences of &quot;ecdaa.&quot; The Yubico migration guide for its WebAuthn server library states verbatim that &quot;this attestation type was removed from WebAuthn Level 2&quot; and that &quot;ECDAA support has not been implemented in this library.&quot; The format has not been resurrected as of 2026 [@webauthn-1] [@webauthn-2] [@yubico-migration].


EPID is a DAA variant with one cryptographic addition: signature-based revocation (Sig-RL), which lets a verifier prove that a candidate signature was not produced by the same signer as any signature on a revocation list. The TPM 2.0 ECDAA scheme is the Chen-Page-Smart 2010 construction; EPID 2.0 is essentially the same construction with Sig-RL added. Intel positions EPID separately because of its production deployment (2.4 billion-plus keys shipped per Intel&apos;s RSAC 2016 disclosure, used for SGX attestation, Widevine, and several Intel chipsets), its specific licensing structure (royalty-free under Intel&apos;s contribution to ISO/IEC 20008 / 20009), and its open-source SDK that Intel maintained until archiving in 2023 [@brickell-li-epid-2007] [@brickell-li-tdsc-2012] [@wiki-epid] [@epid-sdk].


Active research, no production deployment as of 2026. The leading constructions are lattice-based (CoSNIZK 2024 at approximately 38 kilobytes per signature [@cosnizk-2024]), hash-based (the 2023 PQCrypto paper from SPHINCS+ [@hashdaa-2023]), and symmetric-primitive-based (Boneh-Eskandarian-Fisch CT-RSA 2019 [@bef-2019]). The barriers to shipping any of them in a TPM are fundamental: TPM 2.0 firmware does not implement lattice primitives, signature sizes at 30+ kilobytes are incompatible with current attestation-latency budgets, and no relying-party verifier library exists. A post-quantum DAA TPM is a 2030s project at the earliest.


No. The Stage 0a focus-premise audit of this article demoted that framing as not supported by evidence. The accurate claim is &quot;standardized in the TPM 2.0 Library Specification (2014); optional in the TCG PC Client Platform TPM Profile since February 2020; present on many discrete TPMs (vendor documentation confirms); absent from Microsoft Pluton&apos;s published algorithm surface; supported by no Windows API.&quot; That hedged statement is the one the article carries from its first 200 words through to this FAQ [@tpm-library-spec] [@tcg-ptp] [@pluton].

&lt;p&gt;The cryptography is finished. The standardization is finished. The hardware is in the field. What is missing is the social machinery -- the verifier libraries, the SDK presence, the operational tooling, the incident-response runbooks, the regulator demand -- that turns cryptography into deployment. Direct Anonymous Attestation is the cleanest example in platform security of a primitive that won every standardization fight and lost every deployment one. The lesson is not that the cryptography is wrong. The lesson is that cryptography is necessary but never sufficient. Production systems are social systems whose mathematical components, however elegant, must compete with operational alternatives whose properties are easier to ship.&lt;/p&gt;
&lt;p&gt;The companion pieces in this series are &lt;a href=&quot;https://paragmali.com/blog/the-tpm-in-windows-one-primitive-twenty-five-years-and-the-c/&quot; rel=&quot;noopener&quot;&gt;The TPM in Windows&lt;/a&gt; (the cryptographic primitive plumbing TPM 2.0 ECDAA sits inside) and the Microsoft Pluton continuation article (Pluton&apos;s published capability surface and the negative claim this article rests its §9 hedge on). The Measured Boot piece -- forthcoming -- walks the data that a hypothetical DAA quote would attest. If those three articles arrive together, the picture of Windows attestation as a &lt;em&gt;system&lt;/em&gt; rather than a primitive becomes complete.&lt;/p&gt;
</content:encoded><category>tpm</category><category>attestation</category><category>zero-knowledge-proofs</category><category>cryptography</category><category>windows-security</category><category>pluton</category><category>webauthn</category><category>fido</category><author>noreply@paragmali.com (Parag Mali)</author></item></channel></rss>