<?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: pluton</title><description>Posts tagged pluton.</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/pluton/rss.xml" rel="self" type="application/rss+xml"/><item><title>Below the OS: The Pre-Boot Trust Chain Where Secure Boot Inherits Its Trust From</title><link>https://paragmali.com/blog/below-the-os-the-pre-boot-trust-chain-where-secure-boot-inhe/</link><guid isPermaLink="true">https://paragmali.com/blog/below-the-os-the-pre-boot-trust-chain-where-secure-boot-inhe/</guid><description>Walk the eleven rungs from CPU reset to winload.efi -- Intel Boot Guard, AMD PSB, CSME, the PSP, KB5025885, and why the April 2023 MSI OEM-key leak is structurally permanent.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><content:encoded>
**Secure Boot is not where trust begins on a modern PC.** It is the fifth rung in an eleven-rung pre-OS chain that starts with a one-time-programmable fuse inside the chipset and travels through Intel Boot Guard or AMD Platform Secure Boot, through an on-die security processor (Intel CSME on MINIX 3, or AMD&apos;s ARM Cortex-A5 Secure Processor), through UEFI and Measured Boot, before it ever loads `winload.efi`. Every rung&apos;s verifier inherits the trust of the rung below it -- and the chain&apos;s revocation surface narrows monotonically as you descend. The April 2023 MSI / Money Message OEM-key leak [@binarly-msi] and the May 9, 2023 KB5025885 boot-manager revocation programme [@kb5025885] are the two worked examples that make the asymmetric-revocation argument concrete: at the fuse layer, there is no revocation primitive at all.

flowchart TD
    R0[&quot;Rung 0: CPU reset vector at 0xFFFFFFF0&quot;]
    subgraph IL[&quot;Intel path&quot;]
        I1[&quot;Rung 1: Microcode loads from SPI patch area&quot;]
        I2[&quot;Rung 2: Authenticated Code Module verified vs silicon-fused Intel key&quot;]
        I3[&quot;Rung 3: ACM reads Field Programmable Fuse, verifies KM and BPM&quot;]
        I4[&quot;Rung 4: Initial Boot Block hashed and compared to BPM&quot;]
    end
    subgraph AL[&quot;AMD path&quot;]
        A1[&quot;Rung 1: ARM Cortex-A5 PSP comes out of reset before x86 cores&quot;]
        A2[&quot;Rung 2: PSP boot ROM verifies PSP firmware vs AMD root key hash&quot;]
        A3[&quot;Rung 3: PSP reads OEM-key fuse, verifies signed BIOS image&quot;]
        A4[&quot;Rung 4: PSP releases x86 BSP from reset&quot;]
    end
    R5[&quot;Rung 5: SEC and PEI phases, memory init, cache as RAM&quot;]
    R6[&quot;Rung 6: DXE drivers loaded, UEFI variable services online&quot;]
    R7[&quot;Rung 7: Secure Boot evaluates Authenticode against PK, KEK, db, dbx&quot;]
    R8[&quot;Rung 8: Boot Device Selection picks bootmgfw.efi&quot;]
    R9[&quot;Rung 9: Boot Manager loads, Measured Boot extends PCR 4 through 7&quot;]
    R10[&quot;Rung 10: bootmgfw.efi verifies winload.efi&quot;]
    R11[&quot;Rung 11: Hand-off to winload.efi&quot;]
    R0 --&amp;gt; I1
    R0 --&amp;gt; A1
    I1 --&amp;gt; I2 --&amp;gt; I3 --&amp;gt; I4 --&amp;gt; R5
    A1 --&amp;gt; A2 --&amp;gt; A3 --&amp;gt; A4 --&amp;gt; R5
    R5 --&amp;gt; R6 --&amp;gt; R7 --&amp;gt; R8 --&amp;gt; R9 --&amp;gt; R10 --&amp;gt; R11
&lt;h2&gt;1. Permanently Downgraded to a Weaker Trust Model&lt;/h2&gt;
&lt;p&gt;On April 6, 2023, the Money Message ransomware actor published roughly 1.5 TB of MSI source code to a TOR-hosted leak site after MSI declined to pay a reported $4M ransom [@helpnet-msi-leak]. A month later, on May 5, Binarly&apos;s efiXplorer team opened the archive. Inside, they found something worse than source code. They found the Intel Boot Guard Key Manifest and Boot Policy Manifest private keys covering roughly 116 MSI systems, plus image-signing keys for 57 more products, with cross-OEM contamination across HP, Lenovo, AOPEN, CompuLab, and Star Labs [@binarly-msi] [@helpnet-msi-leak] [@register-msi-alt]. The affected platform generations spanned Tiger Lake, Alder Lake, and Raptor Lake [@register-msi-alt]. Binarly published a per-device impact catalogue in their &lt;code&gt;SupplyChainAttacks&lt;/code&gt; repository for triage by the affected vendors [@binarly-supply-chain].&lt;/p&gt;
&lt;p&gt;Those private keys correspond to public-key hashes that have already been burned, one-time-programmably, into a fuse inside the chipset of every affected machine. There is no revocation primitive at that fuse layer. Intel cannot patch this. MSI cannot patch this. Microsoft cannot patch this.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Every Intel system whose Field Programmable Fuse holds the hash of a leaked MSI OEM public key is now in a permanent state of reduced assurance against firmware tampering. The leak does not require a successful in-the-wild exploit to count as damage. The capability transfer happened the moment Money Message published the archive [@binarly-msi].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This story matters because most public writing about &quot;the boot security chain on a Windows PC&quot; stops at Secure Boot. The popular framing -- that the Platform Key (PK) is the trust anchor and the rest of the chain hangs from it -- is not just incomplete. It is upside down. Secure Boot&apos;s PK is a tenant of UEFI authenticated NVRAM stored in the SPI flash chip soldered next to the chipset [@uefi-specs]. PK&apos;s integrity depends on the SPI flash being unwritable to attackers. That property is what the rung below Secure Boot enforces. Without the lower-rung silicon-fused verifier, PK is just bytes in flash.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;bootkit&lt;/strong&gt; is malware that survives in the pre-OS firmware boot path. It runs before the kernel exists and outlives both reboots and clean OS installs. Two recent ones bracket the operational threat.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BlackLotus&lt;/strong&gt; [@eset-blacklotus]. Analysed by ESET researcher Martin Smolar on March 1, 2023, sold on hacking forums since October 2022. It was the first public UEFI bootkit observed bypassing Secure Boot on fully-patched Windows 11, via CVE-2022-21894 [@cve-2022-21894-nvd].&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bootkitty&lt;/strong&gt; [@bootkitty] [@helpnet-bootkitty]. Disclosed by ESET on November 27, 2024. It was the first analogue for Linux.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are the threats the pre-boot chain exists to defeat. And the pre-boot chain works only as well as the layer below it.&lt;/p&gt;

Why is the most permanent layer of the trust chain also the layer with no recovery surface?
&lt;p&gt;To answer that question, we have to walk down from the rung you know -- Secure Boot -- to the rung you probably do not: the fuse.&lt;/p&gt;
&lt;p&gt;That walk is the article. The eleven-rung diagram in the TLDR is the map. Along the way we will visit Intel Boot Guard, AMD Platform Secure Boot, the Intel Converged Security and Management Engine, and the AMD Platform Security Processor. We will see what gets verified, by what, and against what trust anchor. And we will see, three times at three increasing levels of compression, why the chain&apos;s revocation surface narrows monotonically as you descend, until at the bottom there is no revocation at all. Companion articles on &lt;a href=&quot;https://paragmali.com/blog/secure-boot-in-windows-the-chain-from-sector-zero-to-userini/&quot; rel=&quot;noopener&quot;&gt;Secure Boot&lt;/a&gt;, &lt;a href=&quot;https://paragmali.com/blog/measured-boot-the-tcg-event-log-from-srtm-to-pcr-bound-bitlo/&quot; rel=&quot;noopener&quot;&gt;Measured Boot&lt;/a&gt;, &lt;a href=&quot;https://paragmali.com/blog/pluton-a-tpm-on-silicon-microsoft-can-patch/&quot; rel=&quot;noopener&quot;&gt;Pluton&lt;/a&gt;, &lt;a href=&quot;https://paragmali.com/blog/the-acpi-tables-that-quietly-secure-your-windows-machine/&quot; rel=&quot;noopener&quot;&gt;ACPI Tables&lt;/a&gt;, and Secured-core PCs cover the rungs &lt;em&gt;above&lt;/em&gt; this one. This article&apos;s lane is everything below them.&lt;/p&gt;
&lt;h2&gt;2. From &quot;BIOS Is Trusted Because Nobody Can Write to It&quot; to &quot;BIOS Has Its Own SoC&quot;&lt;/h2&gt;
&lt;p&gt;On September 13, 2011, Symantec analyst Liam Ge published an early analysis of Trojan.Mebromi on Symantec Connect [@symantec-bios-threat]; Liam O&apos;Murchu&apos;s contemporaneous Symantec Threat Intelligence writeup is the source MITRE catalogues at ATT&amp;amp;CK ID S0001 as the canonical primary [@mitre-mebromi-s0001]. Mebromi was the first in-the-wild BIOS rootkit observed on shipping consumer PCs. It rewrote the Award BIOS Master Boot Record code so that it reinjected itself into the OS on every boot. The Wikipedia BIOS security section preserves the same provenance [@wiki-bios-security].&lt;/p&gt;
&lt;p&gt;Four months earlier, in April 2011, NIST had published SP 800-147 (&quot;BIOS Protection Guidelines&quot;) attempting to mandate the cure: signed BIOS updates with an authenticated update mechanism rooted in immutable code [@nist-sp-800-147]. The cure arrived just as the disease made its in-the-wild debut. That four-month gap captures the entire history of pre-boot security on the PC platform: the defensive architecture always lags the attacker by roughly one generation, and each generation moves the trust anchor one layer closer to the silicon.&lt;/p&gt;
&lt;h3&gt;Generation 1 -- Trust by physical inaccessibility (pre-2011)&lt;/h3&gt;
&lt;p&gt;The implicit model from the IBM PC through the late 2000s was that nobody could write to the BIOS ROM, so the BIOS was trusted because it was unreachable. That model held only as long as nobody bothered. By 2011 the protections that had compensated for writable flash (the &lt;strong&gt;BIOSWE&lt;/strong&gt;, &lt;strong&gt;BLE&lt;/strong&gt;, &lt;strong&gt;SMM_BWP&lt;/strong&gt;, and &lt;strong&gt;FLOCKDN&lt;/strong&gt; chipset configuration bits described in the contemporary CHIPSEC literature [@c7zero-chipsec]) were widely misconfigured on shipping platforms. Academic SPI-rewrite research predated Mebromi by nearly a decade. Mebromi simply demonstrated that the field had caught up.&lt;/p&gt;
&lt;h3&gt;Generation 2 -- Signed BIOS updates anchored in BIOS (2011-2013)&lt;/h3&gt;
&lt;p&gt;NIST SP 800-147 [@nist-sp-800-147] and OEM responses to Mebromi produced a generation of platforms that signed BIOS updates and verified the signature before flashing. The structural flaw was immediate: the verifier lived in the region it was verifying. Burn the verifier with the update payload and you owned the next boot. Seven years later NIST SP 800-193 (&quot;Platform Firmware Resiliency Guidelines&quot;) explicitly raised the bar from Protection alone to Protection plus Detection plus Recovery [@nist-sp-800-193], implicitly conceding that Gen 2 had not closed the loop.&lt;/p&gt;
&lt;h3&gt;Generation 3 -- The trust anchor moves into silicon (2013-2015)&lt;/h3&gt;
&lt;p&gt;In the second quarter of 2013, Intel shipped Boot Guard alongside the Haswell CPU family. In the first half of 2014, AMD shipped the Platform Security Processor with the Family 16h &quot;Beema&quot; and &quot;Mullins&quot; mobile parts [@wiki-amd-psp]. The Wikipedia entry for AMD PSP records the architecture cleanly: &quot;The PSP itself represents an ARM core (ARM Cortex-A5) with the TrustZone extension ... inserted into the main CPU die as a coprocessor&quot; [@wiki-amd-psp]. With Gen 3, the trust anchor moved out of mutable storage entirely. The verifier was no longer a region of flash; it was a piece of silicon that could not be rewritten without replacing the chip.&lt;/p&gt;
&lt;p&gt;In 2015, the Skylake CPU family shipped with ME 11, the first ME generation built on the Intel Quark x86 core (replacing the ARC-based predecessors) and running a modified MINIX 3 microkernel as its on-die runtime [@wiki-ime] [@wiki-ime-history]. The Converged Security and Management Engine (CSME) brand name folded ME, TXE, and SPS into a single architectural label.&lt;/p&gt;

In November 2017, Andrew S. Tanenbaum -- the creator of MINIX 3 -- published an open letter to Intel that read in part: *&quot;Thanks for putting a version of MINIX inside the ME-11 management engine chip used on almost all recent desktop and laptop computers in the world&quot;* [@tanenbaum-letter]. The hosted letter at cs.vu.nl carries no explicit publication date; the early-November dating derives from contemporaneous press coverage. Intel had never consulted him; he learned about MINIX&apos;s role only when independent researchers reverse-engineered the ME runtime.&lt;p&gt;The cultural moment mattered because it surfaced something the architecture had hidden: every modern Intel PC ships a second operating system, on a second processor, that boots before yours does. The trust chain you are reading about exists in part because that second OS exists.&lt;/p&gt;
&lt;p&gt;ME 11 ran MINIX. Earlier ME generations (ME 1 through ME 10) ran ThreadX on ARC cores. Later CSME generations from Ice Lake forward moved to a Tremont-class x86 core but kept the MINIX 3 runtime [@wiki-ime] [@wiki-ime-history].
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;

Thanks for putting a version of MINIX inside the ME-11 management engine chip used on almost all recent desktop and laptop computers in the world. -- Andrew S. Tanenbaum, November 2017 [@tanenbaum-letter]
&lt;p&gt;A month after Tanenbaum&apos;s letter, on December 7, 2017, Mark Ermolov and Maxim Goryachy presented &quot;How to Hack a Turned-Off Computer&quot; at Black Hat Europe 2017 [@ermolov-goryachy-2017]. The talk demonstrated unsigned-code execution in the CSME via the JTAG / Direct Connect Interface chain that became Intel security advisory INTEL-SA-00086 [@intel-sa-00086]. Intel&apos;s CSME security white paper postdates the disclosure and treats the same architecture from the vendor side [@intel-csme-whitepaper]. A year later, in 2018, Yuriy Bulygin presented &quot;A Tale of Disappearing SPI and the Intel Boot Guard Enchanted Dance&quot; at Black Hat Europe 2018 [@eclypsium-publications], the canonical reverse engineering of the Boot Guard IBB-verification flow.&lt;/p&gt;

flowchart LR
    G1[&quot;Gen 1: Trust by physical inaccessibility, pre-2011&quot;]
    G2[&quot;Gen 2: Signed BIOS update anchored in BIOS, 2011 to 2013&quot;]
    G3[&quot;Gen 3: Silicon root of trust via Boot Guard and PSP, 2013 onward&quot;]
    G4[&quot;Gen 4: Secure Boot and discrete TPM, 2012 onward&quot;]
    G5[&quot;Gen 5: fTPM on CSME and PSP, 2015 onward&quot;]
    G6[&quot;Gen 6: Microsoft Pluton, 2020 onward&quot;]
    G7[&quot;Gen 7: Open multi-signer root of trust via Caliptra, prospective&quot;]
    G1 --&amp;gt; G2 --&amp;gt; G3 --&amp;gt; G4 --&amp;gt; G5 --&amp;gt; G6 --&amp;gt; G7
&lt;p&gt;The genealogy is a chain of trades, not a chain of unambiguous improvements. Gen 2 added a revocation surface and unanchored it. Gen 3 anchored the chain in silicon and removed the revocation surface. Gen 4 (Secure Boot, parallel to Gen 3) restored revocation above the firmware layer via the &lt;code&gt;dbx&lt;/code&gt; deny-list but did not extend revocation to the fuse. Every move from one generation to the next migrated the failure surface to a different layer. The chain that ships in 2026 is the live composition of Gens 3 through 7, not a clean replacement.&lt;/p&gt;
&lt;p&gt;If the trust anchor is now a silicon fuse, what exactly does the silicon do at boot -- and why does Intel&apos;s path differ from AMD&apos;s?&lt;/p&gt;
&lt;h2&gt;3. The Two-Vendor Stack: Intel Boot Guard plus CSME, AMD PSP plus PSB&lt;/h2&gt;
&lt;p&gt;Here is a fact that surprises most x86 engineers the first time they read it carefully. On a modern AMD desktop, an ARM Cortex-A5 with TrustZone boots &lt;em&gt;before&lt;/em&gt; the x86 cores are released from reset. The x86 bootstrap processor (BSP) only comes out of reset after the on-die ARM core has verified the BIOS image in SPI flash and decided the platform is allowed to start [@wiki-amd-psp] [@amd-psb-whitepaper]. The &quot;x86 PC&quot; is, at boot, an ARM system-on-chip pretending to be an x86 PC for the first few hundred milliseconds.&lt;/p&gt;
&lt;p&gt;Intel takes the opposite architectural shape. On an Intel system the BSP comes out of reset first, but the very first instructions it executes are an Intel-signed binary called the Authenticated Code Module (ACM) which runs inside the CPU package itself, gated by microcode that verifies the ACM signature against a public-key hash that has been fused into the silicon at manufacturing time [@eclypsium-publications]. The first thing your CPU does is verify a manifest signed by Intel that tells it where the OEM&apos;s keys live.&lt;/p&gt;

A small, Intel-signed binary that the CPU loads from a known SPI region into the CPU cache as private memory and executes before any unsigned code can run. The ACM is verified against a public key whose hash is fused into the chipset Field Programmable Fuse at silicon manufacturing time. The Boot Guard ACM is the verifier that walks the OEM-signed Key Manifest and Boot Policy Manifest. The TXT SINIT ACM is a separate, later-stage ACM used by Intel TXT for dynamic root-of-trust measurement.

An array of one-time-programmable polysilicon fuses inside Intel&apos;s PCH (or, on Skylake and later, integrated into the CPU package) that the OEM blows during board manufacturing to record the hash of the OEM&apos;s Boot Guard public key, the chosen Boot Guard profile (verified-only, measured-only, or both), and the lock state. Once blown, the FPF cannot be unblown. The FPF is the bottom of the OEM-controlled portion of the Intel trust chain; below it sits the silicon-fused Intel public key that authenticates the ACM itself.

An OEM-signed manifest that tells the Boot Guard ACM which SPI regions form the Initial Boot Block, what cryptographic hash to expect over those regions, which Boot Guard profile to enforce, and (on profile 4 or 5) what to do on verification failure. The BPM is signed with the OEM Boot Policy Key, which is itself authenticated against the Key Manifest, which is itself authenticated against the FPF.

An ARM Cortex-A5 with TrustZone, integrated as a coprocessor on the AMD CPU die from Family 16h forward, that boots before the x86 cores are released from reset [@wiki-amd-psp]. The PSP runs its own boot ROM (immutable silicon), loads PSP firmware from a known SPI directory, verifies that firmware against the AMD root-key hash, and (on platforms with PSB enforced) verifies the OEM-signed BIOS image before releasing the x86 BSP from reset.

The AMD architectural feature that has the PSP measure and verify the BIOS image against an OEM-key fuse before releasing the x86 cores [@amd-psb-whitepaper]. PSB ships in two activation states: PSB-capable (PSP runs but does not enforce verification) and PSB-enforced (the OEM has burned the OEM-key hash into the PSP fuse, and the PSP will halt the platform on verification failure). PSB-enforced on EPYC is widely deployed; on Ryzen it has historically been opt-in per platform.
&lt;h3&gt;Intel: Boot Guard, CSME, and the manifest chain&lt;/h3&gt;
&lt;p&gt;Inside an Intel platform the verifier walk is precise enough to render as a list:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The Boot Guard ACM loads into a protected region of CPU cache and executes inside the CPU package.&lt;/li&gt;
&lt;li&gt;It reads the FPF for the OEM key hash and the active profile bits.&lt;/li&gt;
&lt;li&gt;It pulls the Key Manifest (KM) from SPI and verifies the KM signature against the FPF-stored hash.&lt;/li&gt;
&lt;li&gt;It pulls the Boot Policy Manifest (BPM) and verifies the BPM signature against the KM public key.&lt;/li&gt;
&lt;li&gt;It hashes the SPI regions declared by the BPM as the Initial Boot Block (IBB) and compares the hash against the BPM-declared expected value.&lt;/li&gt;
&lt;li&gt;On a match, it transfers control to the IBB and the chain proceeds.&lt;/li&gt;
&lt;li&gt;On a mismatch, it halts (profile 4 and profile 5) or extends PCR 0 with the measurement and continues (profile 3) [@eclypsium-publications].&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The Bulygin BH EU 2018 reverse engineering remains the most readable primary on the actual code path [@eclypsium-publications].&lt;/p&gt;
&lt;p&gt;Separately, while the CPU is doing the Boot Guard walk, the CSME runs its own startup sequence on its own core, with its own MINIX 3 runtime [@intel-csme-whitepaper]. Once stable, it exposes three optional services [@intel-csme-whitepaper]:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Intel Active Management Technology (AMT).&lt;/strong&gt; Out-of-band management; only on systems where the OEM has enabled it in firmware.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intel Platform Trust Technology (PTT).&lt;/strong&gt; A TPM 2.0 endpoint implemented in CSME firmware, so the platform does not need a discrete TPM chip.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intel Identity Protection Technology (IPT).&lt;/strong&gt; Hardware-rooted one-time-password generation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each service depends on CSME being trustworthy. And CSME&apos;s own runtime is verified, at boot, by the chain we have just walked.&lt;/p&gt;
&lt;h3&gt;AMD: PSP boot ROM, PSP firmware, and the OEM-key fuse&lt;/h3&gt;
&lt;p&gt;The AMD walk is structurally simpler and architecturally cleaner. The PSP boot ROM is silicon -- it cannot be modified after fabrication. It reads the PSP directory from a known SPI offset, validates the directory header, loads the PSP firmware image, and verifies that image against the AMD root-key hash that is part of the PSP boot ROM itself [@amd-psb-whitepaper]. On a PSB-enforced platform, the PSP then loads the OEM PSB key, verifies it against the OEM-key hash fused in the PSP, and uses the OEM PSB key to verify the OEM-signed BIOS image before releasing the x86 BSP from reset.&lt;/p&gt;
&lt;p&gt;The &quot;separate core boots first&quot; architectural primitive is a different kind of isolation than Intel&apos;s &quot;microcode plus signed ACM.&quot; Intel&apos;s verifier runs in the CPU package but inside a protected cache region. AMD&apos;s verifier runs on a physically separate core with its own memory map. Neither is obviously better. Both shift the trust anchor out of writable storage and into silicon.&lt;/p&gt;
&lt;p&gt;The ARM Cortex-A5 implements ARMv7-A and ships TrustZone. TrustZone partitions execution into a Non-Secure World (the Rich Execution Environment, REE) and a Secure World (the Trusted Execution Environment, TEE) with hardware-enforced isolation. The PSP runs its boot ROM and firmware in the Secure World [@wiki-amd-psp].&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CSME generation&lt;/th&gt;
&lt;th&gt;Core&lt;/th&gt;
&lt;th&gt;Runtime&lt;/th&gt;
&lt;th&gt;Era&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;ME 1 -- ME 10&lt;/td&gt;
&lt;td&gt;ARC&lt;/td&gt;
&lt;td&gt;ThreadX&lt;/td&gt;
&lt;td&gt;2006 -- 2014&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ME 11 (Skylake)&lt;/td&gt;
&lt;td&gt;Intel Quark x86&lt;/td&gt;
&lt;td&gt;MINIX 3&lt;/td&gt;
&lt;td&gt;2015 -- 2018&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSME (Ice Lake+)&lt;/td&gt;
&lt;td&gt;Tremont-class x86&lt;/td&gt;
&lt;td&gt;MINIX 3&lt;/td&gt;
&lt;td&gt;2019 -- present&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Sources: [@wiki-ime] [@wiki-ime-history].&lt;/p&gt;
&lt;p&gt;The generational table for the Intel side has been the source of several recurring errors in secondary literature: claims that &quot;every CSME runs MINIX&quot; are wrong (the ARC-based ME 1 through ME 10 ran ThreadX), and claims that &quot;CSME still runs on Quark&quot; are equally wrong (Ice Lake and later moved to a Tremont-class x86 core but kept the MINIX 3 runtime) [@wiki-ime] [@wiki-ime-history].&lt;/p&gt;
&lt;p&gt;AMD has not published a complete PSP architectural document. The PSB whitepaper [@amd-psb-whitepaper] covers the PSB-flow at a marketing-architecture level; the PRO security whitepaper [@amd-pro-whitepaper] is the broadest vendor primary. Everything else about the PSP -- the runtime, the directory layout, the soft-fuses, the glitch surface -- flows through community reverse engineering. The most useful primaries are Buhren and Werling&apos;s voltage-glitching corpus at TU Berlin (now indexed via the Fraunhofer publication record) [@fraunhofer-amd], the Buhren / Jacob / Krachenfels / Seifert &quot;One Glitch to Rule Them All&quot; CCS 2021 paper [@one-glitch-2021], the Jacob / Werling / Buhren / Seifert &quot;faulTPM&quot; USENIX Security 2024 paper (arXiv v1 submitted April 28, 2023) [@faultpm-2023], the open &lt;code&gt;PSPReverse&lt;/code&gt; toolchain on GitHub [@pspreverse-org] [@psp-glitch-repo], and Matthew Garrett&apos;s 2022 reverse engineering of the PSP directory entry 0xB BIT36 &quot;soft fuse&quot; that gates Pluton on Ryzen 6000 [@garrett-pluton-2022]. The &quot;AMD has not published&quot; caveat travels with every architectural claim about the PSP in this article.&lt;/p&gt;
&lt;p&gt;The hedge matters for one specific premise: the ARM Cortex-A5 + TrustZone architectural claim is well-attested for Family 15h and Family 17h via the Buhren / Werling / Jacob / Seifert reverse-engineering corpus [@one-glitch-2021] [@faultpm-2023] [@wiki-amd-psp]. The specific core in Family 19h+ is not publicly documented. The widely-repeated &quot;Cortex-A7&quot; claim is unsupported by any vendor primary I could verify. This article uses &quot;Cortex-A5 with TrustZone&quot; only where Family 15h / 17h is in scope and says &quot;the PSP&quot; generically elsewhere.&lt;/p&gt;
&lt;p&gt;Now that we know who the verifiers are, let us watch them work -- one rung at a time -- from CPU reset to &lt;code&gt;winload.efi&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;4. The Chain Walk: From CPU Reset to winload.efi&lt;/h2&gt;
&lt;p&gt;Eleven rungs. We will walk each one in order. By the end you will know exactly what gets verified, by what, against what trust anchor, and what happens when that verification fails.&lt;/p&gt;

flowchart TD
    R[&quot;CPU reset, vector at 0xFFFFFFF0&quot;]
    subgraph IB[&quot;Intel Boot Guard&quot;]
        I1[&quot;Microcode loads ACM from SPI&quot;]
        I2[&quot;ACM verified vs silicon-fused Intel key&quot;]
        I3[&quot;ACM reads FPF: OEM key hash plus profile bits&quot;]
        I4[&quot;KM signature verified vs FPF hash&quot;]
        I5[&quot;BPM signature verified vs KM public key&quot;]
        I6[&quot;IBB regions hashed and compared to BPM&quot;]
        I7[&quot;Profile 4 or 5 halts on mismatch, Profile 3 extends PCR 0&quot;]
        I1 --&amp;gt; I2 --&amp;gt; I3 --&amp;gt; I4 --&amp;gt; I5 --&amp;gt; I6 --&amp;gt; I7
    end
    subgraph AP[&quot;AMD PSP plus PSB&quot;]
        A1[&quot;PSP boot ROM (silicon, immutable) executes&quot;]
        A2[&quot;PSP firmware loaded from SPI PSP directory&quot;]
        A3[&quot;PSP firmware verified vs AMD root key hash&quot;]
        A4[&quot;OEM PSB key loaded from SPI&quot;]
        A5[&quot;OEM PSB key verified vs OEM-key fuse&quot;]
        A6[&quot;BIOS image verified vs OEM PSB key&quot;]
        A7[&quot;x86 BSP released from reset&quot;]
        A1 --&amp;gt; A2 --&amp;gt; A3 --&amp;gt; A4 --&amp;gt; A5 --&amp;gt; A6 --&amp;gt; A7
    end
    R --&amp;gt; I1
    R --&amp;gt; A1
    I7 --&amp;gt; H[&quot;Hand-off to IBB and SEC phase&quot;]
    A7 --&amp;gt; H
&lt;h3&gt;4.1 Reset and microcode bootstrap&lt;/h3&gt;
&lt;p&gt;The x86 CPU starts executing at physical address &lt;code&gt;0xFFFFFFF0&lt;/code&gt; per the Intel SDM Volume 3A §9.1.4 (&quot;First Instruction Executed&quot;) specification [@intel-sdm-vol3a], which the chipset aliases into the SPI flash region containing the reset vector.That address is sixteen bytes below the top of 32-bit physical memory; the first instruction is typically a near jump down into the bulk of the firmware. The very first action is a microcode load: the CPU executes its built-in microcode, which then loads any microcode patches from a known SPI region. On Intel platforms the microcode patch is itself signed against an Intel public key burned into silicon. On AMD platforms the equivalent step is the PSP boot ROM execution, which happens slightly earlier in wall-clock time because the PSP starts before the x86 BSP is released [@wiki-amd-psp].&lt;/p&gt;
&lt;h3&gt;4.2 Intel ACM execution and AMD PSP first-stage boot&lt;/h3&gt;
&lt;p&gt;The Intel ACM is signed by Intel and stored in SPI. The microcode loader verifies the ACM signature against the silicon-fused Intel public key and runs the ACM inside a protected region of cache. The AMD analogue is the PSP boot ROM, which is silicon and therefore cannot be modified after fabrication. Both architectures share the invariant: the first executable code path is anchored in silicon, not flash.&lt;/p&gt;
&lt;h3&gt;4.3 FPF and OEM-fuse policy read&lt;/h3&gt;
&lt;p&gt;On Intel, the ACM reads the FPF to learn the hash of the OEM Boot Guard public key and the active Boot Guard profile. It then verifies the Key Manifest (KM) signature against the FPF hash, and the Boot Policy Manifest (BPM) signature against the KM public key. The KM and BPM together form a two-level OEM signing structure: the KM authenticates a set of permitted Boot Policy signing keys, and the BPM names the IBB regions and their expected hash.&lt;/p&gt;
&lt;p&gt;On AMD, the PSP reads the PSP directory from a known SPI offset, authenticates the directory entries against the AMD root key, and (on PSB-enforced platforms) authenticates the OEM PSB public key against the PSP-fused OEM-key hash before validating the BIOS image [@amd-psb-whitepaper].&lt;/p&gt;
&lt;h3&gt;4.4 IBB verification and SEC phase&lt;/h3&gt;

The first chunk of UEFI firmware that the lower-rung silicon verifier cryptographically covers. On Intel platforms with Boot Guard, the IBB regions are declared by the BPM and hashed by the ACM. On AMD platforms with PSB, the equivalent role is played by the PSP-verified BIOS image as a whole. The IBB is where UEFI&apos;s own code path begins.
&lt;p&gt;After IBB verification succeeds, control transfers to the IBB itself. The IBB executes the &lt;strong&gt;SEC&lt;/strong&gt; (Security) phase of the EDK II firmware lifecycle: it sets up the cache as RAM, enables initial CPU features, and prepares to hand off to PEI.&lt;/p&gt;

Intel&apos;s umbrella term, introduced with Skylake (ME 11) in 2015, for the on-die security processor that runs alongside the x86 cores and provides services to the platform: firmware TPM (PTT), AMT, identity protection, secure storage, and the runtime verifier for some pre-OS measurements [@intel-csme-whitepaper] [@wiki-ime]. CSME runs its own RTOS on its own core and is the single most complex piece of pre-OS firmware on a modern Intel platform.
&lt;h3&gt;4.5 PEI and DXE phases&lt;/h3&gt;
&lt;p&gt;The PEI (Pre-EFI Initialization) phase completes memory controller initialisation and discovers the platform&apos;s DRAM. The DXE (Driver eXecution Environment) phase then loads UEFI drivers (storage, USB, network, video, and platform-specific drivers) and brings the UEFI services online. The TianoCore EDK II reference UEFI implementation [@edk2-repo] is the canonical open-source codebase for studying PEI and DXE in detail, and every commercial vendor BIOS is structurally a fork of EDK II with proprietary platform code.&lt;/p&gt;
&lt;p&gt;&quot;SPI flash&quot; on a modern platform is not one trust domain. The main BIOS SPI region is what Boot Guard / PSB verify. But a modern PC may also have separate SPI or NVRAM regions for the Embedded Controller (keyboard, battery, lid sensor), the Thunderbolt controller, the fingerprint reader, and on servers the baseboard management controller (BMC). Each of those has its own update mechanism, its own verifier (if any), and its own attack surface. The article will revisit this in section 8.&lt;/p&gt;
&lt;h3&gt;4.6 DXE Secure Boot variable evaluation&lt;/h3&gt;
&lt;p&gt;During DXE the UEFI runtime brings the Secure Boot variable services online. The Platform Key (PK), Key Exchange Keys (KEK), Authorized Signature Database (db), and Forbidden Signature Database (dbx) are stored as UEFI authenticated variables in NVRAM, per UEFI Specification §8 [@uefi-specs]. When DXE loads a UEFI binary, the verifier compares the binary&apos;s Authenticode signature against db entries, refuses to load binaries whose hash appears in dbx, and (in the default policy) refuses to load binaries that do not match any db entry.&lt;/p&gt;
&lt;p&gt;The companion article on Secure Boot covers the PK / KEK / db / dbx model and the SBAT generation-number deny-list in detail. The point for this chain walk is that Secure Boot itself does not start until DXE has set up the UEFI variable services, and DXE itself only runs because the IBB verified by Boot Guard / PSB executed correctly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is rung 5 of 11. The rungs above this one -- Secure Boot policy, TPM PCR semantics, Pluton silicon enumeration, ACPI table integrity, Secured-core PC configuration -- are covered in the companion articles. The lane of this article is the rungs &lt;em&gt;below&lt;/em&gt; Secure Boot. From here forward we summarise the upper rungs only enough to show where the trust chain hands off.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;4.7 Boot Device Selection and bootmgfw.efi&lt;/h3&gt;
&lt;p&gt;After DXE completes, the BDS (Boot Device Selection) phase enumerates the boot variables stored in NVRAM, finds the first valid &lt;code&gt;EFI_LOAD_OPTION&lt;/code&gt;, and loads the EFI binary it points to. On Windows that is &lt;code&gt;\EFI\Microsoft\Boot\bootmgfw.efi&lt;/code&gt;. On Linux estates running shim it is &lt;code&gt;\EFI\&amp;lt;distro&amp;gt;\shimx64.efi&lt;/code&gt;, which is the first non-Microsoft binary the chain consents to load and which then verifies a distro-signed second-stage loader (GRUB2 in most cases) [@garrett-shim-19448].&lt;/p&gt;
&lt;h3&gt;4.8 Boot Manager verifies winload.efi; Measured Boot extends PCR 0 through 7&lt;/h3&gt;
&lt;p&gt;The Windows Boot Manager (&lt;code&gt;bootmgfw.efi&lt;/code&gt;) verifies &lt;code&gt;winload.efi&lt;/code&gt; against its built-in trust anchor, then asks &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&lt;/a&gt; to extend a sequence of PCR measurements covering the chain it has just walked. Per the TCG PC Client Platform Firmware Profile, PCRs 0 through 7 cover (0) the platform SRTM and firmware, (1) host platform configuration, (2) UEFI drivers and option ROMs, (3) UEFI driver and application configuration, (4) the boot manager code and boot attempts, (5) boot manager configuration and the GPT, (6) host-platform-manufacturer-specific events, and (7) the Secure Boot policy [@tcg-tpm-lib]. The companion article on Measured Boot covers the PCR semantics in detail.&lt;/p&gt;
&lt;h3&gt;4.9 Hand-off to winload.efi&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;winload.efi&lt;/code&gt; loads the NT kernel, the early-launch antimalware drivers, and the Code Integrity policy. The Windows OS-side trust chain takes over from here. This article ends its lane at the hand-off.&lt;/p&gt;
&lt;p&gt;{&lt;code&gt;// Toy SHA-256 substitute (NOT cryptographically real -- demonstrates the extend chain only). function hashHex(s) {   let h = 2166136261;   for (const c of s) h = ((h ^ c.charCodeAt(0)) * 16777619) &amp;gt;&amp;gt;&amp;gt; 0;   return h.toString(16).padStart(8, &apos;0&apos;).repeat(8); } function extend(pcr, measurement) {   return hashHex(pcr + measurement); } const pcr0 = &apos;00&apos;.repeat(32); const afterAcm   = extend(pcr0, &apos;ACM-binary@SPI:0x10000&apos;); const afterIbb   = extend(afterAcm, &apos;IBB-region@SPI:0x100000&apos;); const afterDxe   = extend(afterIbb, &apos;DXE-driver-set-vendor-A&apos;); const afterSb    = extend(afterDxe, &apos;SecureBoot-policy:PK=hashA,KEK=hashB,db=hashC,dbx=hashD&apos;); const afterBm    = extend(afterSb, &apos;bootmgfw.efi:authenticode=hashE&apos;); const afterLoad  = extend(afterBm, &apos;winload.efi:authenticode=hashF&apos;); console.log(&apos;PCR0 after ACM    -&amp;gt;&apos;, afterAcm.slice(0, 32) + &apos;...&apos;); console.log(&apos;PCR0 after IBB    -&amp;gt;&apos;, afterIbb.slice(0, 32) + &apos;...&apos;); console.log(&apos;PCR0 after DXE    -&amp;gt;&apos;, afterDxe.slice(0, 32) + &apos;...&apos;); console.log(&apos;PCR7 after PolicyB-&amp;gt;&apos;, afterSb.slice(0, 32) + &apos;...&apos;); console.log(&apos;PCR4 after BootMgr-&amp;gt;&apos;, afterBm.slice(0, 32) + &apos;...&apos;); console.log(&apos;PCR4 after WinLoad-&amp;gt;&apos;, afterLoad.slice(0, 32) + &apos;...&apos;); console.log(); console.log(&apos;Change ANY measurement and the chain hash diverges from quote-expected value.&apos;);&lt;/code&gt;}&lt;/p&gt;
&lt;p&gt;Eleven rungs. Each rung&apos;s verifier inherits the trust of the rung below it. That single property -- inheritance -- is what makes the next section&apos;s argument inevitable.&lt;/p&gt;
&lt;h2&gt;5. The Breakthrough: The Hardware Fuse as Root of Trust, and the Asymmetric Revocation Surface&lt;/h2&gt;
&lt;p&gt;The strongest layer in the chain is the layer you cannot fix. That is not a bug. It is the definition of a hardware root of trust -- and it is also why the MSI 2023 leak is permanent.&lt;/p&gt;
&lt;p&gt;The architectural insight is structural. Trust must be anchored somewhere, and the only place that survives an OS reinstall, a BIOS reflash, an SPI chip swap, and a malicious bootloader is a piece of silicon that the attacker cannot rewrite without replacing the chip. One-time-programmable polysilicon fuses give exactly that property. Burn the OEM key hash into the FPF at manufacturing time, and from that point forward only OEM-signed firmware will run on that board. The fuse is &quot;the bottom&quot; by construction.&lt;/p&gt;
&lt;p&gt;The cost is symmetric. One-time programmable means one-way trust. Once an OEM&apos;s public key hash is burned, it cannot be removed without replacing the chip. If the OEM later loses control of the corresponding private key, the public-key hash that authenticates everything signed by that private key is still in the fuse. The fuse layer has no revocation primitive.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Trust strength and revocation expressiveness move in opposite directions as you descend the pre-boot trust chain. The fuse layer is the strongest because nothing can change it -- which is exactly why nothing can revoke it. Permanence is the source of both properties, not a side effect of one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is the article&apos;s load-bearing observation, and it is worth making concrete. Going &lt;em&gt;up&lt;/em&gt; the chain from the fuse, the revocation surface gets progressively more expressive.&lt;/p&gt;

A monotonically increasing version number embedded in a signed firmware artifact (boot manager, ACM, microcode patch). When the platform&apos;s stored SVN floor is bumped, the platform refuses to load any artifact whose embedded SVN is below the floor. SVN bumps are an alternative to per-hash revocation that scales better as the number of bad artifacts grows, but they require the firmware vendor to maintain an SVN namespace and to bump it on every revocation event.

A generation-number revocation model introduced by the rhboot shim project to replace per-hash dbx revocation for shim and downstream components [@sbat-md]. Each shim, GRUB2 build, and second-stage component embeds a vendor-specific SBAT generation. When a vulnerability is found, the vendor publishes a new shim with an incremented generation. The shim verifier on the running platform refuses to load any component with a generation lower than the platform&apos;s stored floor. As the SBAT documentation notes, &quot;This single revocation event consumes 10kB of the 32kB, or roughly one third, of revocation storage typically available on UEFI platforms&quot; [@sbat-md], which is exactly the dbx exhaustion problem SBAT is designed to solve.
&lt;p&gt;At the top of the chain, on a Pluton-equipped platform, Microsoft can ship Pluton firmware updates through Windows Update [@pluton-learn]. That is the most expressive revocation surface on the chain: software cadence, OS-mediated delivery, no OEM gating on the runtime channel after initial enrolment. (The SPI-resident Pluton firmware loaded at every boot is still updated through the OEM&apos;s UEFI capsule pipeline; the OS-mediated runtime channel sits on top of it [@pluton-learn].)&lt;/p&gt;
&lt;p&gt;Below Pluton, SBAT denies entire classes of vulnerable shim binaries with one generation bump [@sbat-md]. Below SBAT, &lt;code&gt;dbx&lt;/code&gt; denies individual bootloader hashes (with the ~32 KB capacity constraint that SBAT exists to relieve). Below &lt;code&gt;dbx&lt;/code&gt;, KEK and PK are progressively more permanent because they sit at the root of UEFI&apos;s variable-authentication structure, and any change requires a Platform Key signature. Below the UEFI variables, the OEM Boot Policy Manifest is replaced only by an OEM-signed firmware update. And below the BPM, the FPF / OEM-key fuse is unrecoverable.&lt;/p&gt;

flowchart TD
    L0[&quot;Pluton firmware via Windows Update: software cadence&quot;]
    L1[&quot;SBAT generation bump: revoke an entire class with one entry&quot;]
    L2[&quot;dbx hash list: revoke per-binary, capped at roughly 32 KB&quot;]
    L3[&quot;KEK and PK: revoke only via Platform Key signature&quot;]
    L4[&quot;OEM Boot Policy Manifest: replaced by OEM-signed firmware update&quot;]
    L5[&quot;FPF / OEM-key fuse: NO REVOCATION PRIMITIVE&quot;]
    L0 --&amp;gt; L1 --&amp;gt; L2 --&amp;gt; L3 --&amp;gt; L4 --&amp;gt; L5
&lt;h3&gt;MSI 2023 as the worked example&lt;/h3&gt;
&lt;p&gt;The April 2023 MSI leak is the existence proof. The FPF on every affected Intel platform stores the SHA-256 hash of the OEM Boot Guard public key. The corresponding private key is now public. There is no operational path to revoke that hash at the fuse layer without physical chip replacement. The only &quot;revocation&quot; surfaces available to a platform owner are upper-layer compensations, and each one has a structural limit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An OS-level driver block list does not apply at boot, because the OS does not exist yet.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;dbx&lt;/code&gt; update can deny specific malicious firmware images by hash, but the attacker can sign a new image with the leaked key and rotate around the deny-list, exactly the way per-hash deny-lists always fail against an attacker who controls the signing oracle.&lt;/li&gt;
&lt;li&gt;An Intel BIOS Guard SVN bump can raise the SVN floor, but the OEM has to sign the updated firmware -- using the same Boot Guard signing infrastructure that has been compromised. The leaked key signs the SVN bump too.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Help Net Security&apos;s contemporaneous reporting captured the counts that make the impact concrete: &quot;private code signing keys for firmware images used on 57 MSI products, and private signing keys for Intel Boot Guard used on 116 MSI products ... one of the leaked keys has been detected on devices from HP, Lenovo, AOPEN, CompuLab, and Star Labs&quot; [@helpnet-msi-leak]. The Register confirmed the affected platform generations as Tiger Lake, Alder Lake, and Raptor Lake [@register-msi-alt]. Binarly&apos;s per-device catalogue lists the affected SKUs in detail [@binarly-supply-chain].&lt;/p&gt;

Every Intel chip with the leaked OEM key hash burned in is permanently downgraded to a weaker trust model -- and nothing in the layers above can recover what the fuse layer lost.
&lt;p&gt;SBAT exists for exactly the kind of revocation expressiveness the fuse layer lacks [@sbat-md]. SBAT is the negative-space comparator: this is what fuse-layer revocation could look like if it existed. It does not exist. That is the breakthrough -- and the limit -- of Gen 3 silicon roots of trust on commodity client platforms in 2026.&lt;/p&gt;
&lt;p&gt;If the fuse is unrecoverable, what does the rest of the modern stack do to compensate?&lt;/p&gt;
&lt;h2&gt;6. State of the Art: What a Modern Pre-Boot Trust Chain Looks Like in 2026&lt;/h2&gt;
&lt;p&gt;In 2026 the chain has settled into a recognisable shape on Secured-core PCs and EPYC servers. Here is what is shipping, and what each piece is for.&lt;/p&gt;
&lt;p&gt;The current best-practice configuration is roughly: Boot Guard or PSB enforced at the silicon verifier rung; BIOS Guard for runtime SPI write protection; SMM locked down via Intel TXT or AMD SKINIT; Measured Boot extending PCRs into a TPM 2.0 endpoint (discrete TPM, Intel PTT, AMD fTPM, or Microsoft Pluton); Windows DRTM enabled (extending PCR 17 through PCR 22); and the KB5025885 boot-manager revocation programme applied as it rolls out across 2025 and 2026 [@kb5025885].&lt;/p&gt;
&lt;h3&gt;KB5025885: db plus dbx plus SVN, not &quot;PK rotation&quot;&lt;/h3&gt;

A late-launch primitive (Intel TXT via the SINIT ACM, or AMD SKINIT via the SLB) that re-anchors the trust chain after the static root has done its work. DRTM allows the OS to enter a measured launch environment in which a small, trusted hypervisor or secure kernel is loaded and measured into PCRs 17 through 22, independent of the firmware boot chain. Windows DRTM uses TXT or SKINIT to bring the Secure Kernel and Hypervisor Code Integrity online with a fresh chain of measurements.
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Press coverage frequently described KB5025885 as a &quot;PK rotation&quot; or &quot;Microsoft rotating the Platform Key.&quot; It is neither. The Microsoft support article spells out the actual mechanism: KB5025885 adds the Windows UEFI CA 2023 certificate (PCA2023) to the Database Key (DB) and adds the hashes of vulnerable boot manager binaries to the Forbidden Signature Key (DBX) [@kb5025885]. The Platform Key itself is not modified by KB5025885. The MSRC blog framing is consistent: KB5025885 is a staged-rollout programme for managing the revocation of vulnerable Windows boot manager binaries associated with CVE-2023-24932 [@msrc-blog-2023-24932] [@msrc-cve-2023-24932].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;KB5025885 was originally published on May 9, 2023 as part of May 2023 Patch Tuesday, in response to CVE-2023-24932 (a Secure Boot Security Feature Bypass) [@cve-2023-24932-nvd] [@kb5025885]. The CVE was the underlying vulnerability that the BlackLotus bootkit had exploited via CVE-2022-21894 several months earlier [@eset-blacklotus] [@cve-2022-21894-nvd]. Microsoft&apos;s response was structurally cautious: a multi-year staged rollout, rather than an immediate forced revocation, because forcing a &lt;code&gt;dbx&lt;/code&gt; update that would brick any unpatched Windows install or any third-party EFI loader still in distribution would have been operationally catastrophic.&lt;/p&gt;

gantt
    dateFormat YYYY-MM-DD
    title KB5025885 boot manager revocation programme
    section Disclosure
    CVE-2023-24932 published         :2023-05-09, 7d
    KB5025885 initial publication    :2023-05-09, 7d
    section Deployment
    Manual deployment phase          :2023-07-11, 270d
    Evaluation phase                 :2024-04-09, 90d
    Automatic enrollment phase       :2024-07-09, 540d
    section Cutover
    Automatic certificate replacement :2026-01-01, 150d
    PCA2011 expiration window         :2026-06-01, 30d
&lt;p&gt;The rollout dates above follow the Microsoft KB5025885 article timeline [@kb5025885]: manual deployment beginning July 11, 2023; evaluation phase beginning April 9, 2024; automatic enrolment of mitigations beginning July 9, 2024; automatic certificate replacement on Windows 11 beginning January 2026; and the PCA2011 / UEFI CA 2011 / KEK CA 2011 expiration window in June 2026. The mechanism throughout is &lt;code&gt;db&lt;/code&gt; + &lt;code&gt;dbx&lt;/code&gt; + SVN, not Platform Key rotation.&lt;/p&gt;
&lt;h3&gt;Pluton&apos;s structural role in the modern chain&lt;/h3&gt;
&lt;p&gt;Microsoft Pluton was announced on November 17, 2020 as a &quot;chip-to-cloud&quot; security processor co-designed with AMD, Intel, and Qualcomm Technologies [@pluton-blog]. The current Microsoft Learn enumeration of Pluton silicon as of 2024 reads: &quot;AMD: Ryzen 6000, 7000, 8000, 9000 and Ryzen AI Series processors; Intel: Core Ultra 200V Series, Ultra Series 3 and Series 3 processors; Qualcomm: Snapdragon 8cx Gen 3 and Snapdragon X Series processors. ... Pluton platforms in 2024 AMD and Intel systems will start to use a Rust-based firmware foundation&quot; [@pluton-learn].&lt;/p&gt;
&lt;p&gt;Pluton&apos;s structural contribution to the chain is the firmware-update channel. Discrete TPMs cannot be patched after manufacturing in any meaningful way. CSME PTT firmware ships through OEM BIOS updates with all the latency that implies. Pluton firmware reaches devices through two channels: the traditional OEM UEFI capsule that updates the SPI-resident Pluton image at boot, and an OS-mediated runtime channel through which Microsoft can ship new firmware via Windows Update [@pluton-learn] [@garrett-pluton-2022-update]. The second channel is the one no other shipping silicon root-of-trust has, and the one that closes the patch-latency gap.&lt;/p&gt;
&lt;h3&gt;Silicon comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Intel Boot Guard&lt;/th&gt;
&lt;th&gt;AMD PSB&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;https://paragmali.com/blog/apple-secure-enclave-vs-microsoft-pluton-two-roads-to-hardwa/&quot; rel=&quot;noopener&quot;&gt;Apple Silicon Boot ROM&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;Google Titan-M2&lt;/th&gt;
&lt;th&gt;Microsoft Pluton&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Trust anchor&lt;/td&gt;
&lt;td&gt;FPF in PCH or package&lt;/td&gt;
&lt;td&gt;OEM-key fuse in PSP / FCH&lt;/td&gt;
&lt;td&gt;Mask ROM on the AP&lt;/td&gt;
&lt;td&gt;On-die in Titan-M2 chip&lt;/td&gt;
&lt;td&gt;On-die in SoC fabric&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revocation surface&lt;/td&gt;
&lt;td&gt;None at fuse layer&lt;/td&gt;
&lt;td&gt;None at fuse layer&lt;/td&gt;
&lt;td&gt;Vendor seed (Apple)&lt;/td&gt;
&lt;td&gt;Vendor seed (Google)&lt;/td&gt;
&lt;td&gt;Microsoft via Windows Update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FW update channel&lt;/td&gt;
&lt;td&gt;OEM BIOS&lt;/td&gt;
&lt;td&gt;OEM BIOS&lt;/td&gt;
&lt;td&gt;macOS updates&lt;/td&gt;
&lt;td&gt;Android updates&lt;/td&gt;
&lt;td&gt;Windows Update [@pluton-learn]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OS attestation API&lt;/td&gt;
&lt;td&gt;TPM 2.0 quote (PTT)&lt;/td&gt;
&lt;td&gt;TPM 2.0 quote (fTPM)&lt;/td&gt;
&lt;td&gt;DeviceAttestationKey&lt;/td&gt;
&lt;td&gt;KeyMint attestation&lt;/td&gt;
&lt;td&gt;TPM 2.0 + Pluton-specific&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment posture&lt;/td&gt;
&lt;td&gt;Widespread, OEM-gated&lt;/td&gt;
&lt;td&gt;EPYC widespread, Ryzen opt-in&lt;/td&gt;
&lt;td&gt;All Apple Silicon Macs&lt;/td&gt;
&lt;td&gt;All Pixel 6 and later&lt;/td&gt;
&lt;td&gt;Ryzen 6000+, Core Ultra, X-series&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The asymmetry that matters for the article&apos;s argument is the third row. Apple, Google, and Microsoft control the firmware update channel for their respective trust anchors. Intel and AMD do not -- the OEM does, and the OEM&apos;s release cadence varies by vendor, by product line, and (for end-of-life models) drops to zero.&lt;/p&gt;
&lt;h3&gt;Bootkit comparison: same invariant, different break&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bootkit / vuln class&lt;/th&gt;
&lt;th&gt;CVE&lt;/th&gt;
&lt;th&gt;Vulnerable layer&lt;/th&gt;
&lt;th&gt;Primitive&lt;/th&gt;
&lt;th&gt;dbx state at disclosure&lt;/th&gt;
&lt;th&gt;Fix mechanism&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;BlackLotus&lt;/td&gt;
&lt;td&gt;CVE-2022-21894&lt;/td&gt;
&lt;td&gt;Windows Boot Manager&lt;/td&gt;
&lt;td&gt;baton drop on unpatched bootmgfw [@eset-blacklotus]&lt;/td&gt;
&lt;td&gt;unpatched bootmgfw hashes not yet in dbx&lt;/td&gt;
&lt;td&gt;KB5025885 dbx + db + SVN programme [@kb5025885]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BootHole&lt;/td&gt;
&lt;td&gt;CVE-2020-10713 [@cve-2020-10713-nvd]&lt;/td&gt;
&lt;td&gt;GRUB2 BootHole buffer overflow&lt;/td&gt;
&lt;td&gt;GRUB2 cfg parser overflow [@eclypsium-boothole]&lt;/td&gt;
&lt;td&gt;initial dbx update exhausted 10 KB of capacity&lt;/td&gt;
&lt;td&gt;dbx hash list bump (SBAT later introduced to solve scale) [@sbat-md]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LogoFAIL&lt;/td&gt;
&lt;td&gt;multiple in 2023&lt;/td&gt;
&lt;td&gt;UEFI DXE image-parsing libraries&lt;/td&gt;
&lt;td&gt;malicious BMP / PNG / JPEG in boot logo region&lt;/td&gt;
&lt;td&gt;Boot Guard verifier passed; DXE parser exploited&lt;/td&gt;
&lt;td&gt;per-OEM firmware update + library fixes [@binarly-logofail]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bootkitty&lt;/td&gt;
&lt;td&gt;(PoC, 2024)&lt;/td&gt;
&lt;td&gt;User-controlled trust posture&lt;/td&gt;
&lt;td&gt;Self-signed bootkit plus in-memory GRUB integrity-check patches before kernel hand-off [@bootkitty]&lt;/td&gt;
&lt;td&gt;dbx unchanged for Bootkitty PoC&lt;/td&gt;
&lt;td&gt;Keep Secure Boot enabled; audit MOK enrolments; SBAT is not the corrective surface for this class [@bootkitty]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The common pattern is the same invariant -- &quot;the chain is only as strong as the rung that was broken&quot; -- with four different break points:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BlackLotus&lt;/strong&gt; broke at rung 9 (Boot Manager); the fix lived at rung 7 (Secure Boot policy via dbx).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BootHole&lt;/strong&gt; broke at rung 10 (the chain-loaded GRUB2); the fix lived at rung 7 again (dbx, until SBAT replaced the per-hash approach).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LogoFAIL&lt;/strong&gt; broke at rung 6 (a DXE image-parsing library); the fix had to live at rung 6 as well, because the verifier at rung 7 had already approved the binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bootkitty&lt;/strong&gt; did not break at shim or GRUB2; it operated alongside them, under the assumption Secure Boot was either disabled or the attacker&apos;s certificate had been pre-enrolled into MOK. ESET&apos;s primary disclosure confirms it is self-signed and patches GRUB integrity-check functions in memory after being loaded [@bootkitty].&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The LogoFAIL story is especially instructive. Binarly&apos;s December 6, 2023 disclosure showed that Boot Guard validates the firmware image, but the image then parses attacker-controlled logo data through CVE-laden image parsers, executing attacker code in DXE without crossing any signature boundary [@binarly-logofail] [@binarly-logofail-slides] [@hackernews-logofail] [@darkreading-logofail].&lt;/p&gt;
&lt;p&gt;Pluton is the most aggressive structural answer to the asymmetric-revocation problem on shipping silicon. But Pluton is not the only structural answer -- and even Pluton inherits one rung of OEM trust. The next section is the competing-approaches map.&lt;/p&gt;
&lt;h2&gt;7. Competing Approaches: Microsoft Pluton vs the Chipset Fuse Model&lt;/h2&gt;
&lt;p&gt;Pluton and Boot Guard are not competing for the same rung. They compose. Pluton sits in the SoC fabric on supported silicon and provides a TPM 2.0 service plus a Microsoft-controlled firmware-update channel; Boot Guard and PSB continue to verify the BIOS image at the silicon-verifier rung [@pluton-learn]. The interesting design fight is not Pluton-versus-Boot-Guard, it is Pluton-versus-the-OEM-controlled-fuse for the role of &lt;em&gt;trust anchor of last resort&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Pluton&apos;s value proposition&lt;/h3&gt;
&lt;p&gt;Pluton&apos;s pitch, as Microsoft has articulated it since the November 2020 announcement, is to cycle the trust anchor from the OEM&apos;s fuse to a Microsoft-controlled root of trust that also lives in silicon but whose firmware can ship through Windows Update [@pluton-blog].&lt;/p&gt;
&lt;p&gt;The trade is explicit: trust goes from &quot;OEM, with no Microsoft visibility into key-management hygiene&quot; to &quot;Microsoft, with the platform integrated into Microsoft&apos;s signing infrastructure and update cadence.&quot;&lt;/p&gt;
&lt;p&gt;The shift cuts two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For organisations whose threat model treats OEM-key-management hygiene as the weakest link (and the MSI 2023 leak makes a strong empirical case for that view), Pluton is a structural improvement.&lt;/li&gt;
&lt;li&gt;For organisations whose threat model treats Microsoft as a higher-risk root than the OEM, Pluton makes things worse on net.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;The Pluton-present-is-not-Pluton-enabled trap&lt;/h3&gt;

On April 11, 2022, Matthew Garrett published a reverse engineering of the ROG Zephyrus G14, an AMD Ryzen 6000 laptop, showing that &quot;PSP directory entry 0xB BIT36 have the highest priority... If bit 36 is set, the PSP tells Pluton to turn itself off&quot; [@garrett-pluton-2022].&lt;p&gt;The procurement consequence is easy to miss. Pluton-equipped silicon ships from AMD with Pluton present in the die, but the OEM can flip a single bit in the PSP firmware directory at manufacturing time that gates Pluton entirely. The platform passes &quot;Pluton-equipped&quot; advertising checks while Pluton is functionally disabled.&lt;/p&gt;
&lt;p&gt;Garrett&apos;s December 2022 follow-up documented that Lenovo&apos;s ThinkPad Z13 shipped with Pluton default-disabled and exposed two ACPI device IDs (MSFT0101 and MSFT0200) that platform tooling could use to detect the configuration [@garrett-pluton-2022-update]. The operational lesson: &quot;Has Pluton&quot; is not the same question as &quot;Pluton is enabled and acting as the TPM 2.0 endpoint.&quot;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; On Windows, &lt;code&gt;Get-Tpm | Select-Object ManufacturerIdTxt, ManufacturerVersion&lt;/code&gt; returns the TPM 2.0 endpoint vendor and version. A Pluton-active platform reports &lt;code&gt;MSFT&lt;/code&gt; as the manufacturer; a CSME PTT platform reports &lt;code&gt;INTC&lt;/code&gt;; an AMD fTPM platform reports &lt;code&gt;AMD&lt;/code&gt;; a discrete TPM reports the dTPM vendor (Infineon, Nuvoton, STMicroelectronics, etc.). This is the simplest field-confirmable check for which endpoint is actually serving as the TPM.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;AMD PSB on EPYC versus Ryzen&lt;/h3&gt;
&lt;p&gt;AMD Platform Secure Boot has a deployment split that maps onto the consumer-versus-datacenter market structure. On EPYC, PSB-enforced is widely deployed: the datacenter customer wants the silicon-rooted verifier and is willing to accept the cost.&lt;/p&gt;
&lt;p&gt;The cost on EPYC is sharp. Once an OEM has burned its key hash into the PSP fuse on a given CPU, that CPU is irreversibly locked to that OEM. The chip cannot be resold into another OEM&apos;s platform that uses a different OEM key. Secondary-market liquidity for fused EPYC parts is essentially zero. This is not a hypothetical liability. Datacenter operators who refresh hardware on a 3-5 year cycle find that PSB-fused EPYC parts have markedly lower resale value than equivalent non-fused parts. The &quot;right answer&quot; depends on the customer&apos;s threat model, but the trade is real.&lt;/p&gt;
&lt;p&gt;On Ryzen client parts, PSB has historically been opt-in per platform; many consumer Ryzen systems ship with PSB unfused and Pluton (where present) gated by the soft-fuse [@amd-psb-whitepaper] [@garrett-pluton-2022].&lt;/p&gt;
&lt;h3&gt;Caliptra: the open multi-signer answer&lt;/h3&gt;
&lt;p&gt;The most ambitious structural answer to the MSI-leak problem currently in active development is Caliptra, a CHIPS Alliance project announced on December 13, 2022 [@chipsalliance-caliptra]. Caliptra is &quot;the specification, silicon logic, ROM and firmware for implementing a Root of Trust for Measurement (RTM) block inside an SoC&quot; [@caliptra-repo]. The full RTL is open at &lt;code&gt;chipsalliance/caliptra-rtl&lt;/code&gt; [@caliptra-rtl] and the firmware at &lt;code&gt;chipsalliance/caliptra-sw&lt;/code&gt; [@caliptra-sw], both under Apache 2.0. The founding members include AMD, Google, Microsoft, and NVIDIA.&lt;/p&gt;
&lt;p&gt;The structural properties Caliptra targets, which neither Boot Guard, PSB, nor Pluton currently provide on commodity client silicon, are: (1) open RTL so the trust anchor&apos;s silicon implementation is auditable gate-by-gate; (2) multi-signer support so a single OEM key compromise does not unilaterally compromise the trust chain; (3) datacenter-class scope first, with the design choices that follow from that target. Caliptra is not yet on shipping client silicon. It is the negative-space answer to the MSI leak: the structural fix that the chipset-fuse model does not have, but that the architecture community has now spent four years designing in the open.&lt;/p&gt;
&lt;p&gt;Pluton closes the patch-latency gap. Caliptra closes the single-signer gap. Neither closes the supply-chain-of-silicon gap. That is the next section.&lt;/p&gt;
&lt;h2&gt;8. Theoretical Limits: Where the Chain Cannot Reach&lt;/h2&gt;
&lt;p&gt;Every defensive chain has a payload at the bottom -- the thing the chain ultimately protects against. The pre-boot trust chain protects against five attack classes. Here are the five it does not.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; The chain closes three threat classes well (OS-level rootkit persistence; signed-but-revoked bootloader chain-loading; remote firmware reflash without physical access) and structurally cannot close two others (physical-SPI-access before the platform is fused and locked; leaked OEM key on already-shipped silicon). Naming both sets is the precondition for any honest threat-model claim.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Limit 1 -- Physical SPI access bypasses everything above it&lt;/h3&gt;
&lt;p&gt;Even with Boot Guard or PSB enforced, an attacker who can write to SPI flash before the platform is fused and locked can overwrite the IBB and the BPM and own the next boot. Access vectors: manufacturing, repair, or certain integrated circuits that expose SPI on a debug header.&lt;/p&gt;
&lt;p&gt;CHIPSEC [@chipsec-repo] [@chipsec-page] -- originated by Bulygin and colleagues at CanSecWest 2014 [@c7zero-chipsec] -- is the canonical pre-deployment audit framework for verifying the chipset write-protect bits on shipping platforms. Trammell Hudson&apos;s Thunderstrike, presented at 31C3 in December 2014 [@thunderstrike] [@ccc-31c3], is the canonical real-world demonstration: SPI substitution via a Thunderbolt Option ROM on Apple Mac EFI. It is the existence proof that &quot;physical access plus the right bus&quot; can bypass the silicon-rooted verifier when the platform&apos;s write-protections are not fully engaged.&lt;/p&gt;
&lt;h3&gt;Limit 2 -- A leaked OEM key cannot be revoked at the fuse layer&lt;/h3&gt;
&lt;p&gt;The MSI 2023 incident, recompressed: the FPF stores the &lt;em&gt;hash&lt;/em&gt; of the OEM Boot Guard public key, not a revocation list against that hash. There is no fuse-layer primitive for marking the hash as &quot;revoked.&quot; Once the corresponding private key leaks, every chip carrying that hash is permanently downgraded to a model in which the attacker can sign new Boot Guard firmware that the platform will accept [@binarly-msi] [@helpnet-msi-leak] [@register-msi-alt].&lt;/p&gt;
&lt;p&gt;The structural fix is per-batch key derivation or multi-signer trust anchors; on commodity client silicon in 2026 this fix exists only as a design specification (Caliptra) and not as a shipped product [@caliptra-repo] [@chipsalliance-caliptra]. Eclypsium&apos;s &quot;Vulnerable Boot Guard implementations&quot; series [@eclypsium-blog] documents that the MSI leak is the third or fourth such incident across the Boot Guard vendor space. Lenovo, HP, Compal, and Quanta have all experienced similar leaks; MSI is simply the most extensively catalogued.&lt;/p&gt;
&lt;h3&gt;Limit 3 -- The trust chain cannot defend against malicious silicon&lt;/h3&gt;
&lt;p&gt;If the verifier chip itself is malicious -- substituted upstream of the customer&apos;s supply chain -- the chain&apos;s invariants do not hold, because the bottom of the chain is what defines the trust model. Defending against this class is the supply-chain-of-silicon problem and is out of scope for this article. The open-RTL property of Caliptra is partial mitigation in the sense that the customer can at least verify that the silicon matches the specification, but verifying that a fabricated die corresponds to its RTL is an entirely separate research programme.&lt;/p&gt;
&lt;h3&gt;Limit 4 -- Thunderbolt SPI is a separate SPI region&lt;/h3&gt;

Bjorn Ruytenberg&apos;s Thunderspy disclosure on May 10, 2020 [@thunderspy-report] [@thunderspy-site] targeted firmware vulnerabilities in the Thunderbolt controller chip on PCs with Thunderbolt 1 / 2 / 3 ports. The controller has its own firmware in its own SPI region, distinct from the main BIOS SPI region that Boot Guard / PSB verify.&lt;p&gt;Thunderspy let an attacker with physical access to the port flash modified Thunderbolt controller firmware, weakening the DMA isolation Thunderbolt 3 was supposed to provide. Thunderspy did &lt;em&gt;not&lt;/em&gt; bypass Boot Guard, PSB, or Secure Boot. It bypassed a different verifier in a different SPI region for a different protocol.&lt;/p&gt;
&lt;p&gt;The conflation -- &quot;Thunderspy broke Secure Boot&quot; -- appeared in early press coverage and persists in some secondary writing. The primary report is unambiguous that the target was Thunderbolt controller firmware [@thunderspy-report].
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The structural lesson generalises beyond Thunderbolt: &quot;SPI&quot; on a modern PC is not a single trust domain. The main BIOS region, the Thunderbolt controller, the Embedded Controller, the fingerprint reader, and (on servers) the BMC each have their own SPI regions, their own update mechanisms, and their own verifier (if any). A vulnerability in one does not necessarily affect the others; but inventorying which regions are independently verified is a non-trivial procurement exercise.&lt;/p&gt;
&lt;h3&gt;Limit 5 -- The ME and PSP are themselves attack surface&lt;/h3&gt;
&lt;p&gt;The CSME and PSP exist to verify the platform&apos;s trust chain, but they are themselves programs running on processors. They have bugs. The disclosure record is sobering:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;INTEL-SA-00086 (November 2017).&lt;/strong&gt; Remote code execution in CSME via CVE-2017-5705, CVE-2017-5706, CVE-2017-5708, and CVE-2017-5712, pre-disclosed by the Ermolov / Goryachy BH EU 2017 work [@intel-sa-00086] [@ermolov-goryachy-2017].&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CVE-2020-8705.&lt;/strong&gt; A Boot Guard ACM vulnerability in the S3-resume code path that Trammell Hudson wrote up [@cve-2020-8705-nvd] [@trmm-sleep].&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One Glitch to Rule Them All (CCS 2021).&lt;/strong&gt; Buhren, Jacob, Krachenfels, and Seifert demonstrated voltage-glitching attacks against the AMD PSP on Zen 1, Zen 2, and Zen 3 [@one-glitch-2021], with open tooling at &lt;code&gt;PSPReverse/amd-sp-glitch&lt;/code&gt; [@psp-glitch-repo].&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;faulTPM (USENIX Security 2024).&lt;/strong&gt; The follow-up paper (arXiv v1 April 28, 2023) showed the same primitive could extract sealed TPM blobs from AMD fTPM, enabling &lt;a href=&quot;https://paragmali.com/blog/bitlocker-on-windows-architecture-attacks-and-the-limits-of-/&quot; rel=&quot;noopener&quot;&gt;BitLocker&lt;/a&gt; key recovery on devices using AMD fTPM-as-TPM [@faultpm-2023].&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The faulTPM hardware cost is in the low hundreds of US dollars (commodity microcontroller plus voltage-glitching circuit). The capability the cost buys is full extraction of fTPM-sealed blobs. The &quot;expensive nation-state-grade attack&quot; framing does not apply here.&lt;/p&gt;
&lt;p&gt;These attacks do not break the &lt;em&gt;concept&lt;/em&gt; of a silicon-rooted trust chain. They break specific implementations of it. The conceptual chain is sound; the engineering surface inside each implementation has bugs that, once disclosed, get patched and shifted up the cadence. The pattern is structurally similar to OS kernel CVE disclosures. The existence of bugs does not mean the kernel concept fails; it means kernels need patch cadence. The difference at the firmware layer is that patch cadence at the CSME or PSP runs through the OEM BIOS update pipeline, which is slower than the OS pipeline by a factor of roughly ten.&lt;/p&gt;
&lt;p&gt;Five limits. The first three are deep. The last two are open research.&lt;/p&gt;
&lt;h2&gt;9. Open Problems: What Is Still Being Researched&lt;/h2&gt;
&lt;p&gt;Five open problems. Three are about the chain. Two are about who gets to see inside it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OEM key-management hygiene at industry scale.&lt;/strong&gt; The Eclypsium series on leaked Boot Guard keys covers Compal, Quanta, Lenovo, and MSI across multiple disclosures [@eclypsium-blog]. The structural fix -- per-batch keys, multi-signer trust anchors, hardware-bound signing services -- exists as Caliptra in specification [@caliptra-repo] but not in shipping client silicon. The 2026 research question is not &quot;do we know how to solve this&quot; but &quot;when and on which silicon families does Caliptra (or an equivalent) actually ship to consumer platforms.&quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pluton firmware-runtime transparency.&lt;/strong&gt; Microsoft has committed to a &quot;Rust-based firmware foundation&quot; for Pluton on 2024+ AMD and Intel systems [@pluton-learn] but has not publicly named the specific runtime. Community speculation around Tock OS [@tockos] (an embedded Rust kernel designed for security-critical microcontrollers) remains speculation; the connection has not been confirmed by Microsoft. Microsoft also has not published gate-level documentation of the Pluton silicon. The accountability gap -- &quot;we asked you to trust this runtime; what is it&quot; -- is itself an open problem and is the single most-cited objection to Pluton in the open-firmware community.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Linux side of the KB5025885 transition.&lt;/strong&gt; Shim distributions must coordinate with the PCA2011 to PCA2023 cutover or face boot failures on enforced-Secure-Boot multi-OS estates [@garrett-shim-19448] [@garrett-shim-17872] [@sbat-md]. Matthew Garrett&apos;s 2012 first-hand description of shim remains the cross-vendor architectural reference, and his 2022 / 2023 follow-ups document the operational hazards. The risk is not theoretical: a distribution that ships a shim signed only by PCA2011 and does not coordinate the migration to PCA2023 will not boot on Windows 11 systems that have completed the KB5025885 cutover.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vendor-level attestation incompatibility.&lt;/strong&gt; TCG TPM 2.0 quotes [@tcg-tpm-lib] are widely supported, but vendor-level attestation (Intel SGX DCAP [@sgx-dca], AMD SEV-SNP attestation, Pluton attestation) remain three incompatible schemes with three sets of root certificates, three quote formats, and three verifier libraries. A relying party that wants to attest a &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;Confidential VM&lt;/a&gt; running on a mixed-vendor fleet must integrate against all three. The TPM 2.0 quote covers only the rungs visible to the TPM; it does not attest the CSME runtime, the PSP runtime, or the Pluton runtime in a vendor-neutral way.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DRTM deployment and revocation maturity.&lt;/strong&gt; Windows 11 Secured-core requires DRTM via Intel TXT or AMD SKINIT, but mature revocation for DRTM-measured payloads is nascent. AMD fTPM glitch resistance on Zen 4+ is not yet publicly gate-level documented; the faulTPM team explicitly left Zen 4+ for future work [@faultpm-2023], and the absence of vendor disclosure leaves the question open at the level of public knowledge.&lt;/p&gt;
&lt;p&gt;That is the research frontier. What follows is the practitioner&apos;s manual.&lt;/p&gt;
&lt;h2&gt;10. Practical Guide: How to Audit, Configure, and Reason About the Chain&lt;/h2&gt;
&lt;p&gt;Three audiences. Three checklists. One decision tree.&lt;/p&gt;
&lt;h3&gt;For the procurement architect: the seven-question silicon checklist&lt;/h3&gt;

flowchart TD
    Q1{&quot;Boot Guard enforced (profile 4 or 5) on Intel, or PSB-enforced on AMD?&quot;}
    Q2{&quot;PSB-fused to the correct OEM (not another OEM&apos;s key)?&quot;}
    Q3{&quot;Pluton present AND not gated by the OEM soft fuse?&quot;}
    Q4{&quot;DRTM-capable, Intel TXT or AMD SKINIT?&quot;}
    Q5{&quot;KB5025885 cumulative update applied?&quot;}
    Q6{&quot;PCA2023 present in db?&quot;}
    Q7{&quot;dbx SVN current per Microsoft January 2026 baseline?&quot;}
    OK[Procurement-grade Secured-core posture]
    BAD[Reject or remediate before deployment]
    Q1 -- yes --&amp;gt; Q2
    Q1 -- no --&amp;gt; BAD
    Q2 -- yes --&amp;gt; Q3
    Q2 -- no --&amp;gt; BAD
    Q3 -- yes --&amp;gt; Q4
    Q3 -- no --&amp;gt; BAD
    Q4 -- yes --&amp;gt; Q5
    Q4 -- no --&amp;gt; BAD
    Q5 -- yes --&amp;gt; Q6
    Q5 -- no --&amp;gt; BAD
    Q6 -- yes --&amp;gt; Q7
    Q6 -- no --&amp;gt; BAD
    Q7 -- yes --&amp;gt; OK
    Q7 -- no --&amp;gt; BAD
&lt;h3&gt;For the firmware engineer: SBAT versus dbx revocation capacity&lt;/h3&gt;
&lt;p&gt;The asymmetric-revocation point gets sharper when you run it as code. The shim SBAT documentation makes the capacity claim concrete: &quot;This single revocation event consumes 10kB of the 32kB, or roughly one third, of revocation storage typically available on UEFI platforms&quot; [@sbat-md]. The block below shows what a single SBAT generation bump replaces in dbx storage.&lt;/p&gt;
&lt;p&gt;{&lt;code&gt;const DBX_CAPACITY_BYTES = 32 * 1024; const SHA256_HASH_BYTES  = 32; const SBAT_ENTRY_BYTES   = 40; const dbxCapacityHashes  = Math.floor(DBX_CAPACITY_BYTES / SHA256_HASH_BYTES); const sbatCapacityEntries = Math.floor(DBX_CAPACITY_BYTES / SBAT_ENTRY_BYTES); console.log(&apos;dbx capacity in SHA-256 hashes  :&apos;, dbxCapacityHashes); console.log(&apos;Equivalent SBAT generation rows :&apos;, sbatCapacityEntries); console.log(); const vulnerableShimBuilds = 256; const dbxBytesForShim  = vulnerableShimBuilds * SHA256_HASH_BYTES; const dbxFractionUsed  = (dbxBytesForShim / DBX_CAPACITY_BYTES * 100).toFixed(1); const sbatBytesForShim = 1 * SBAT_ENTRY_BYTES; const sbatFractionUsed = (sbatBytesForShim / DBX_CAPACITY_BYTES * 100).toFixed(1); console.log(&apos;Revoking&apos;, vulnerableShimBuilds, &apos;distinct vulnerable shim builds:&apos;); console.log(&apos;  via dbx hashes :&apos;, dbxBytesForShim, &apos;bytes -&apos;, dbxFractionUsed + &apos;% of capacity&apos;); console.log(&apos;  via SBAT bump  :&apos;, sbatBytesForShim, &apos;bytes -&apos;, sbatFractionUsed + &apos;% of capacity&apos;); console.log(); console.log(&apos;SBAT is roughly 256x more capacity-efficient at revoking entire vulnerability classes.&apos;);&lt;/code&gt;}&lt;/p&gt;
&lt;h3&gt;For the detection engineer: CHIPSEC modules per chain rung&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chain rung&lt;/th&gt;
&lt;th&gt;CHIPSEC module&lt;/th&gt;
&lt;th&gt;What it audits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;SPI access policy (rung 1-2)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;common.spi_access&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SPI controller access permissions and region descriptors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SPI descriptor lockdown&lt;/td&gt;
&lt;td&gt;&lt;code&gt;common.spi_desc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SPI flash descriptor lock bit (FLOCKDN)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BIOS write-protect&lt;/td&gt;
&lt;td&gt;&lt;code&gt;common.bios_wp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BIOSWE / BLE / SMM_BWP configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BIOS timestamp&lt;/td&gt;
&lt;td&gt;&lt;code&gt;common.bios_ts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BIOS update timestamp consistency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMM lockdown&lt;/td&gt;
&lt;td&gt;&lt;code&gt;common.smm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;System Management Mode protections including SMM_BWP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SPI controller lockdown&lt;/td&gt;
&lt;td&gt;&lt;code&gt;spi.spi_lock&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Per-region SPI write-protect and SPI controller lock&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The full CHIPSEC module catalogue is in the &lt;code&gt;chipsec/modules&lt;/code&gt; directory of the project repository [@chipsec-repo] [@chipsec-page]. A typical pre-deployment audit runs &lt;code&gt;chipsec_main&lt;/code&gt; with the platform-specific module set and produces a per-module pass / fail report; any FAIL on the modules above maps directly to a known CVE class.&lt;/p&gt;

On a CHIPSEC-supported platform (Linux or Windows, with the kernel driver installed), `sudo chipsec_main` runs the full default module set against the current platform and prints a per-module PASS / FAIL summary. To restrict to the SPI / BIOS protection subset above, use `sudo chipsec_main -m common.bios_wp -m common.spi_desc -m common.spi_access -m spi.spi_lock -m common.smm -m common.bios_ts`. Read the CHIPSEC manual at [@chipsec-page] before running on production hardware; some modules touch SMI handlers and can wedge a misconfigured platform.
&lt;h3&gt;For the threat-model architect: three closed, three open&lt;/h3&gt;
&lt;p&gt;The chain closes three threat classes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OS-level rootkit persistence below the kernel&lt;/strong&gt; (Mebromi-class attacks against unprotected SPI).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Signed-but-revoked bootloader chain-loading&lt;/strong&gt; (BlackLotus-class attacks against bootmgfw + Secure Boot).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remote firmware reflash without physical access&lt;/strong&gt; (driver-class attacks against poorly-locked SPI controllers).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The chain does &lt;em&gt;not&lt;/em&gt; close three other classes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Physical-SPI-access before the platform is fused and locked&lt;/strong&gt; (Thunderstrike-class attacks via debug headers or controller ports).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leaked OEM key on already-shipped silicon&lt;/strong&gt; (MSI 2023-class capability transfers).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Supply-chain compromise of the silicon itself&lt;/strong&gt; (the most-cited but operationally rarest class).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Practitioner alternative stacks&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If the OEM trust chain does not meet your threat model, the open-firmware community has an alternative for many platforms. - &lt;strong&gt;coreboot&lt;/strong&gt; [@coreboot-org] [@wiki-coreboot] (originated as LinuxBIOS at Los Alamos National Laboratory in 1999) is the most widely deployed open firmware, shipping by default on every Chromebook. - &lt;strong&gt;Heads&lt;/strong&gt; [@heads-repo] (Trammell Hudson&apos;s payload) runs on top of coreboot to provide TPM-measured boot with second-factor attestation (typically a YubiKey). It is the high-assurance Linux deployment baseline of choice for several investigative-journalism shops. - &lt;strong&gt;EDK II&lt;/strong&gt; [@edk2-repo] is the reference open-source UEFI implementation if you need UEFI semantics rather than coreboot semantics. None of these magically restore revocation at the fuse layer, but they remove the OEM signing infrastructure as a single point of failure for everything above the fuse.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You now have the chain, the limits, and the controls. The FAQ kills the recurring misconceptions.&lt;/p&gt;
&lt;h2&gt;11. Frequently Asked Questions&lt;/h2&gt;

Secure Boot in the abstract protects against unsigned-bootloader execution; it does not by itself protect against signed-but-vulnerable bootloader execution. BlackLotus exploited CVE-2022-21894 against a Microsoft-signed boot manager [@cve-2022-21894-nvd] [@eset-blacklotus]. The vulnerable binary was still signed -- and &quot;patched&quot; is not the same as &quot;revoked.&quot; Until Microsoft adds the vulnerable binary&apos;s hash to dbx (which is what KB5025885 does, on a multi-year staged rollout to avoid bricking unpatched systems [@kb5025885]), Secure Boot will continue to load and execute the vulnerable binary.

No -- see §6 Callout. KB5025885 modifies DB (PCA2023 added) and DBX (vulnerable bootmgfw hashes added); the Platform Key is untouched [@kb5025885].

This is a threat-model question, not a factual one. The Intel ME (now CSME on Skylake and later) runs MINIX 3 [@wiki-ime] [@tanenbaum-letter] and provides a set of services that the OEM may or may not have enabled: Active Management Technology, PTT firmware TPM, and Identity Protection Technology, among others [@intel-csme-whitepaper]. Whether you call that &quot;a backdoor&quot; depends on whether you consider remote attestation, hardware-rooted identity, and out-of-band management to be services or threats. The factual content is that the CSME runs, has its own runtime, has had CVEs (INTEL-SA-00086 [@intel-sa-00086] [@ermolov-goryachy-2017]), and ships on essentially every consumer Intel platform since Skylake.

No. The name appears to be a confabulation that does not correspond to any verifiable primary research. The real SPI-write research bases for the pre-boot chain are Thunderstrike (Trammell Hudson, 31C3, December 2014 [@thunderstrike] [@ccc-31c3]), CHIPSEC (Bulygin et al., CanSecWest 2014 [@c7zero-chipsec]), and LogoFAIL post-exploitation (Binarly, December 2023 [@binarly-logofail]). If you see &quot;Hudson Hammer&quot; cited, treat it as a hallucinated reference.

No -- Thunderspy targets a separate SPI region for the Thunderbolt controller. See §8 Limit 4 for the full mechanism [@thunderspy-report].

Cortex-A5 with TrustZone is the well-attested answer for Family 15h and Family 17h (see §3 hedge for the reverse-engineering corpus). Cortex-A7 is unsupported by any vendor primary or community reverse engineering. Family 19h and later is not publicly documented.

No -- pre-Skylake ME (1 through 10) ran ThreadX on ARC; ME 11 (Skylake) introduced MINIX 3 on Intel Quark; Ice Lake and later CSME moved to Tremont-class x86 but kept MINIX 3. See the §3 generational table [@wiki-ime].

Because capability transfer is permanent regardless of when it gets operationalised. The leaked keys correspond to public-key hashes that have already been burned into the FPF on every affected chip [@binarly-msi] [@helpnet-msi-leak]. There is no fuse-layer revocation primitive [@register-msi-alt]. The chips are permanently downgraded to a model in which an attacker who has the leaked keys can sign new Boot Guard firmware that the platform will accept. The waiting time between disclosure and operationalisation is the only variable; the structural condition is not recoverable.
&lt;h3&gt;Closing thought&lt;/h3&gt;
&lt;p&gt;You came in believing Secure Boot was the trust anchor. You leave knowing it is the fifth rung. The four rungs below it -- microcode, ACM or PSP boot ROM, FPF or OEM-key fuse policy read, IBB verification -- are the ones that actually anchor the chain. The most permanent of those is the bottom rung, and the most permanent rung is also the one with no revocation surface. Read those two sentences together and you have the whole article in a paragraph. Read them with the MSI 2023 leak in mind and you have the reason this article needed to exist.&lt;/p&gt;
&lt;p&gt;&amp;lt;StudyGuide slug=&quot;below-the-os-pre-boot-trust-chain&quot; keyTerms={[
  { term: &quot;ACM&quot;, definition: &quot;Authenticated Code Module -- the Intel-signed binary that the CPU verifies against a silicon-fused public key and runs inside the CPU package as the first stage of Boot Guard.&quot; },
  { term: &quot;FPF&quot;, definition: &quot;Field Programmable Fuse -- the one-time-programmable polysilicon fuse array inside Intel&apos;s PCH or CPU package that stores the OEM Boot Guard public-key hash and profile bits.&quot; },
  { term: &quot;BPM&quot;, definition: &quot;Boot Policy Manifest -- the OEM-signed manifest that names the Initial Boot Block regions, the expected hash, and the active Boot Guard profile.&quot; },
  { term: &quot;PSP&quot;, definition: &quot;AMD Platform Security Processor -- an ARM Cortex-A5 with TrustZone, on-die coprocessor that boots before the x86 cores and runs the PSP boot ROM.&quot; },
  { term: &quot;PSB&quot;, definition: &quot;AMD Platform Secure Boot -- the AMD architectural feature in which the PSP verifies the OEM-signed BIOS image against an OEM-key fuse before releasing the x86 cores from reset.&quot; },
  { term: &quot;IBB&quot;, definition: &quot;Initial Boot Block -- the first chunk of UEFI firmware cryptographically covered by the lower-rung silicon verifier (ACM on Intel, PSP on AMD).&quot; },
  { term: &quot;CSME&quot;, definition: &quot;Converged Security and Management Engine -- Intel&apos;s on-die security processor running MINIX 3 from ME 11 / Skylake forward.&quot; },
  { term: &quot;SVN&quot;, definition: &quot;Secure Version Number -- a monotonically increasing version number used as a revocation primitive when the platform refuses to load any artifact below its stored SVN floor.&quot; },
  { term: &quot;SBAT&quot;, definition: &quot;Secure Boot Advanced Targeting -- a generation-number revocation model for shim and downstream components, replacing per-hash dbx revocation for entire vulnerability classes.&quot; },
  { term: &quot;DRTM&quot;, definition: &quot;Dynamic Root of Trust for Measurement -- a late-launch primitive (Intel TXT or AMD SKINIT) that re-anchors the trust chain after the static root has done its work.&quot; }
]} questions={[
  { q: &quot;Why is the FPF the bottom of the Intel pre-boot trust chain?&quot;, a: &quot;Because it is the only layer that cannot be rewritten without replacing the chip, so it must be the layer that anchors all other verifications.&quot; },
  { q: &quot;What is the load-bearing structural difference between the fuse layer and the SBAT layer?&quot;, a: &quot;The SBAT layer has an expressive revocation primitive (generation-number deny-list); the fuse layer has none, because the fuse stores the hash of an OEM public key and cannot be modified.&quot; },
  { q: &quot;Why is KB5025885 not a Platform Key rotation?&quot;, a: &quot;Because the mechanism is db (PCA2023 added) plus dbx (vulnerable bootmgfw hashes added) plus SVN, not Platform Key modification. The Platform Key itself is unchanged.&quot; },
  { q: &quot;What does the MSI 2023 OEM-key leak demonstrate about the chain&apos;s structural properties?&quot;, a: &quot;That a leaked OEM Boot Guard private key cannot be revoked at the fuse layer because the FPF stores the public-key hash, not a revocation list, so every chip carrying that hash is permanently downgraded.&quot; },
  { q: &quot;Does Thunderspy bypass Boot Guard?&quot;, a: &quot;No. Thunderspy targets Thunderbolt controller firmware in a separate SPI region. The main BIOS SPI region verified by Boot Guard / PSB is not affected.&quot; }
]} /&amp;gt;&lt;/p&gt;
</content:encoded><category>firmware-security</category><category>uefi</category><category>secure-boot</category><category>intel-boot-guard</category><category>amd-psp</category><category>csme</category><category>pluton</category><category>trusted-computing</category><author>noreply@paragmali.com (Parag Mali)</author></item><item><title>&quot;The Vault is Solid. The Delivery Truck is Not.&quot; -- Microsoft Recall&apos;s Two-Year Re-Architecture from Plaintext SQLite to VBS Enclaves</title><link>https://paragmali.com/blog/microsoft-recall-2024-2026-re-architecture/</link><guid isPermaLink="true">https://paragmali.com/blog/microsoft-recall-2024-2026-re-architecture/</guid><description>How Microsoft Recall went from a plaintext SQLite database broken in four weeks to a VBS-Enclave + TPM-sealed + Hello-gated architecture, and what TotalRecall Reloaded still extracts. (Article title borrows Alexander Hagenah&apos;s framing, attributed in §8.1.)</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><content:encoded>
In May 2024 Microsoft shipped Recall as a plaintext SQLite database guarded only by a SYSTEM-only filesystem ACL. Three independent researchers -- Kevin Beaumont, James Forshaw, and Alexander Hagenah -- broke it in four weeks. The September 27, 2024 re-architecture moved every sensitive operation into a VBS Enclave, sealed the master key with TPM 2.0, gated each access on a fresh Windows Hello biometric, and filtered credentials with Microsoft Purview Exact Data Match before persistence. It is the cleanest available case study of Pluton, VBS, the Secure Kernel, Hello ESS, and Purview composing into one feature. One seam remains: the non-enclave UI host that Hagenah&apos;s April 2026 TotalRecall Reloaded exploits, restating the original threat-model limit at a different layer.
&lt;h2&gt;1. The Script That Did Not Ship&lt;/h2&gt;
&lt;p&gt;On June 5, 2024 -- thirteen days before Microsoft Recall was scheduled to ship on Copilot+ PCs -- a Swiss security researcher named Alexander Hagenah pointed a fifty-line Python tool at the directory &lt;code&gt;C:\Users\&amp;lt;user&amp;gt;\AppData\Local\CoreAIPlatform.00\UKP\&lt;/code&gt; and pulled every screenshot Windows had taken of his desktop for the previous day in two seconds [@rec-19] [@rec-20]. The database was a plaintext SQLite file. The screenshots were plaintext PNGs. &lt;a href=&quot;https://paragmali.com/blog/from-cmdexe-to-a-kusto-row-in-90-seconds-how-sysmon-and-defe/&quot; rel=&quot;noopener&quot;&gt;Microsoft Defender for Endpoint&lt;/a&gt;, monitoring an off-the-shelf information-stealer running in the same user context, took roughly ten minutes to react -- by which time the Recall data was gone [@rec-19] [@rec-15].&lt;/p&gt;
&lt;p&gt;Hagenah called the tool &lt;em&gt;TotalRecall&lt;/em&gt; and committed it to GitHub the same day [@rec-13]. His own description of what it did, as quoted by Malwarebytes Labs: &quot;The database is unencrypted. It&apos;s all plain text. Pulling one day of snapshots took two seconds at most&quot; [@rec-20]. His description of why he released it, as quoted by Help Net Security: &quot;They should know it can be dangerous&quot; [@rec-19].&lt;/p&gt;
&lt;p&gt;This is the script that did not ship. Why it did not ship is the entire rest of this article.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The code in the snippet below is the &lt;em&gt;logic&lt;/em&gt; of a TotalRecall-style extractor against the May 20, 2024 Recall preview. It is a JavaScript transcription of a PowerShell or Python operation that would have worked against an unencrypted SQLite file in a known directory. The June 7, 2024 delay-and-recommit announcement [@rec-02] withdrew that design before broad release; the September 27, 2024 re-architecture [@rec-03] replaced it. The block exists to teach the historical failure, not to provide a runnable attack against the shipping product.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;{`
// Simulated extraction logic. Models the May 2024 Recall preview behaviour:
// plaintext SQLite at a known user-profile path, plaintext PNGs alongside it.
// The September 2024 re-architecture replaced both the storage format
// and the trust model. This is a teaching example only.&lt;/p&gt;
&lt;p&gt;const recallDir = String.raw`C:\Users\\AppData\Local\CoreAIPlatform.00\UKP`;
const databaseFile = `${recallDir}\\ukg.db`;
const imageStore   = `${recallDir}\\ImageStore`;&lt;/p&gt;
&lt;p&gt;// Step 1: Copy the SQLite file and the PNG cache out of the profile.
// In the original preview, a same-user process could read both without
// elevation, because the only protection was a SYSTEM-context filesystem ACL
// that Forshaw demonstrated was bypassable from the user&apos;s own context.
function exfiltrate() {
  copyRecurse(recallDir, &apos;/tmp/recall_dump&apos;);
  // Step 2: open the SQLite file with any client and select the OCR&apos;d text.
  const ocr = openSqlite(databaseFile);
  return ocr.query(&apos;SELECT c1, c2 FROM WindowCaptureTextIndex_content&apos;);
}&lt;/p&gt;
&lt;p&gt;// Step 3: every PNG in ImageStore is a snapshot of the desktop, named by
// the integer key the SQLite row uses to join. No decryption needed in
// the May 2024 preview.
console.log(&apos;Recall data size:&apos;, exfiltrate().length, &apos;rows&apos;);
console.log(&apos;Time elapsed (Hagenah measurement): ~2 seconds&apos;);
console.log(&apos;Defender remediation latency (Beaumont measurement): ~10 minutes&apos;);
`}&lt;/p&gt;
&lt;p&gt;The audit cast that turned the May 20 announcement into the June 7 retreat had three named protagonists. Kevin Beaumont, writing on his DoublePulsar blog on May 30, framed the threat model: Recall was a high-value secret store on a live, logged-on system, and the dominant live-system adversary was user-context malware, not offline disk theft [@rec-15] [@rec-19] [@rec-16]. James Forshaw, an active Google Project Zero researcher, published &lt;em&gt;Working your way Around an ACL&lt;/em&gt; on June 3, demonstrating that the SYSTEM-only filesystem ACL Microsoft had relied on as a same-user isolation boundary was not in fact a boundary [@rec-14]. Hagenah&apos;s &lt;em&gt;TotalRecall&lt;/em&gt;, posted June 5, turned Beaumont&apos;s framing and Forshaw&apos;s filesystem-ACL bypass into a runnable artifact [@rec-13] [@rec-19].&lt;/p&gt;
&lt;p&gt;Each was load-bearing. Without any one of them, Microsoft&apos;s June 7 delay-and-recommit blog [@rec-02] could not have landed where it did, when it did.&lt;/p&gt;
&lt;p&gt;What was Microsoft trying to do, that this script could undo?&lt;/p&gt;
&lt;h2&gt;2. The Four-Week Public Security Audit&lt;/h2&gt;
&lt;p&gt;Recall was supposed to be the marquee Copilot+ PC feature. Satya Nadella and Yusuf Mehdi previewed it at the Microsoft campus event on May 20, 2024, as one of three launch-exclusive AI experiences alongside Live Captions and Cocreator [@rec-01]. The hardware story was unusual: every Copilot+ PC would ship with &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; enabled by default, on Snapdragon X Elite or X Plus silicon, starting at $999, with broad GA scheduled for June 18 [@rec-01]. Recall would not appear on Intel or AMD Copilot+ PCs at launch, only on the Snapdragon silicon that defined the category.&lt;/p&gt;
&lt;p&gt;Twenty-eight days later, the June 18 GA target was gone. Here is what happened in those four weeks.&lt;/p&gt;

An information-stealer is a class of malware whose purpose is to enumerate and exfiltrate browser-saved credentials, session cookies, password manager databases, cryptocurrency wallets, and other user-accessible secret stores from a logged-on Windows session. Modern variants (RedLine, Vidar, LummaC2) ship as commodity components in malware-as-a-service marketplaces. Beaumont&apos;s structural point about Recall was that adding a new high-value local store to the InfoStealer target list trivially extends an existing economic market; no novel attack capability is required.
&lt;h3&gt;May 30, 2024 -- Beaumont names the threat model&lt;/h3&gt;
&lt;p&gt;Kevin Beaumont&apos;s post on DoublePulsar opened with a sentence Microsoft never fully recovered from: &quot;Recall enables threat actors to automate scraping everything you&apos;ve ever looked at within seconds&quot; [@rec-15] [@rec-19]. His structural point was that &lt;a href=&quot;https://paragmali.com/blog/bitlocker-on-windows-architecture-attacks-and-the-limits-of-/&quot; rel=&quot;noopener&quot;&gt;BitLocker&lt;/a&gt; addresses the wrong half of the threat model for a feature like Recall. BitLocker protects data at rest against an offline adversary who picks up a powered-off laptop; it does nothing against a logged-on user whose machine is running an information-stealer in the same session. Recall, by storing months of OCR&apos;d screenshots in a user-readable directory, was not a target &lt;em&gt;adjacent&lt;/em&gt; to the InfoStealer marketplace -- it was the new high-value target &lt;em&gt;inside&lt;/em&gt; it.&lt;/p&gt;
&lt;p&gt;Beaumont also published a measurement: in his test against Defender for Endpoint, the InfoStealer was detected, but automated remediation took roughly ten minutes to fire. By then his Recall extraction script had already finished [@rec-19] [@rec-15]. The asymmetry mattered. Defender&apos;s behavioural rules were calibrated against years of stealing browser cookies, not against the sudden appearance of a brand-new bulk-capture corpus that an attacker would race to exfiltrate first.&lt;/p&gt;

Recall enables threat actors to automate scraping everything you&apos;ve ever looked at within seconds. -- Kevin Beaumont, DoublePulsar, May 30, 2024 [@rec-15] [@rec-19]
&lt;h3&gt;June 3, 2024 -- Forshaw publishes the ACL bypass&lt;/h3&gt;
&lt;p&gt;Three days later, James Forshaw of Google Project Zero published &lt;em&gt;Working your way Around an ACL&lt;/em&gt; on Tyranid&apos;s Lair [@rec-14]. The post was not nominally about Recall; it was a methodological piece on how a same-user, non-elevated process could escalate to SYSTEM-context file access by impersonating SYSTEM-context services that handle user-supplied input. The worked example was &lt;code&gt;C:\Program Files\WindowsApps&lt;/code&gt;, with a footnote linking to a Mastodon thread by Albacore noting that the Recall database directory had a structurally similar ACL.&lt;/p&gt;
&lt;p&gt;Forshaw&apos;s epigrammatic conclusion -- &quot;any privilege escalation (or non-security boundary &lt;em&gt;cough&lt;/em&gt;) is sufficient to leak the information&quot; -- captured the structural critique [@rec-14]. The asterisks around &lt;em&gt;non-security boundary&lt;/em&gt; pointed at the MSRC servicing criteria [@rec-11]: Microsoft&apos;s own published policy says that UAC and admin-to-kernel transitions are not security boundaries. If those are not boundaries, and the SYSTEM-only filesystem ACL on the Recall directory was the only thing standing between a same-user process and the database, then there was no boundary at all.&lt;/p&gt;
&lt;h3&gt;June 5, 2024 -- Hagenah commits TotalRecall&lt;/h3&gt;
&lt;p&gt;Hagenah&apos;s tool turned the framing into an artifact [@rec-13] [@rec-19] [@rec-20]. The first README, preserved on the Wayback Machine, characterised Recall as &quot;a &apos;privacy nightmare&apos;&quot; and noted matter-of-factly that the database was an unencrypted SQLite file readable in two seconds [@rec-13] [@rec-20]. Hagenah&apos;s stated motive, via Help Net Security: &quot;They should know it can be dangerous&quot; [@rec-19]. The &quot;they&quot; in that sentence was both the Microsoft engineering team that built the original design and the broader user base about to receive it.&lt;/p&gt;

flowchart LR
    A[&quot;May 20&lt;br /&gt;Nadella + Mehdi&lt;br /&gt;Copilot+ launch&lt;br /&gt;Recall previewed&quot;] --&amp;gt; B[&quot;May 30&lt;br /&gt;Beaumont&lt;br /&gt;threat-model framing&quot;]
    B --&amp;gt; C[&quot;June 3&lt;br /&gt;Forshaw&lt;br /&gt;SYSTEM ACL bypass&quot;]
    C --&amp;gt; D[&quot;June 5&lt;br /&gt;Hagenah&lt;br /&gt;TotalRecall PoC&quot;]
    D --&amp;gt; E[&quot;June 7&lt;br /&gt;Davuluri&lt;br /&gt;delay + recommit&quot;]
    E --&amp;gt; F[&quot;June 13&lt;br /&gt;Recall removed&lt;br /&gt;from June 18 GA&quot;]
&lt;h3&gt;June 7, 2024 -- Davuluri retreats and recommits&lt;/h3&gt;
&lt;p&gt;Pavan Davuluri -- promoted to President of Windows + Devices on March 26, 2024 -- published the delay-and-recommit blog on June 7 [@rec-02].Wired&apos;s coverage of the same announcement referred to Davuluri as &quot;Microsoft&apos;s corporate vice president for Windows and devices&quot; [@rec-16]. That was his prior title; the President of Windows + Devices appointment had been announced ten weeks earlier. Most outlets had not yet updated their style sheets, which is the small reason you may have seen two different titles in the same week&apos;s coverage. Three commitments anchored the post: Recall would be opt-in at setup rather than on by default (&quot;If you don&apos;t proactively choose to turn it on, it will be off by default&quot;); &lt;a href=&quot;https://paragmali.com/blog/your-face-is-not-your-password-inside-windows-hellos-hardwar/&quot; rel=&quot;noopener&quot;&gt;Hello Enhanced Sign-in Security&lt;/a&gt; would gate access to stored snapshots; and decryption would happen &quot;just in time,&quot; only when the user authenticated [@rec-02].&lt;/p&gt;
&lt;p&gt;The Insider rollout was promised, then slipped on August 21 and again on October 31, before finally landing in November. These three properties did not yet have a mechanism. The mechanism would arrive on September 27. But the commitment came first, in plain English, on June 7 -- and it was the commitment that bought the engineering team the time to design the architecture that would honour it.&lt;/p&gt;
&lt;p&gt;Three commitments without a mechanism. What was the mechanism going to be?&lt;/p&gt;
&lt;h2&gt;3. What the Original Recall Design Was Trying&lt;/h2&gt;
&lt;p&gt;Microsoft did not ship Recall in May 2024 because they thought encryption was unnecessary. They shipped it because they thought the protections they already had were sufficient. Four assumptions. Each one was load-bearing, and each one was wrong.&lt;/p&gt;
&lt;p&gt;Before naming them, it is worth crediting what the original design got &lt;em&gt;right&lt;/em&gt;, because that commitment survived the re-architecture intact. The data flow was on-device only. Snapshots, OCR&apos;d text, and the local semantic index never traversed the Microsoft Diagnostic Data telemetry pipeline; nothing left the device by design [@rec-01]. That property is preserved in the Generation 3 architecture [@rec-03] and is reiterated in the IT administrator documentation [@rec-08]. The original engineering team did not get the privacy framing wrong as a category. They got the &lt;em&gt;isolation&lt;/em&gt; framing wrong.&lt;/p&gt;

BitLocker is the Windows full-volume encryption feature. Its threat model is offline disk theft: an adversary who removes a powered-off laptop&apos;s storage and tries to read its contents on another machine encounters AES-XTS-encrypted blocks instead of plaintext files. BitLocker is transparent when the device is powered on and the user is logged in; it does not authenticate any individual file access against the running operating system. Beaumont&apos;s structural point in §2 was that BitLocker&apos;s threat model and Recall&apos;s threat model do not overlap: Recall&apos;s adversary is a process running in the live, logged-on session.

The Data Protection API is the Windows user-mode interface for protecting per-user secrets with a key derived from the user&apos;s logon credentials. Browsers historically used DPAPI to protect saved-credential databases; the well-known weakness is that any process running as the user can call `CryptUnprotectData` against the same files and get plaintext back. DPAPI did *not* appear in the original Recall design -- the pre-audit framing that imagined Recall as &quot;DPAPI used incorrectly&quot; was a misreading. The actual original Recall stored a plaintext SQLite file under filesystem ACLs alone, as Hagenah&apos;s tool demonstrated [@rec-20] [@rec-19]. The September 2024 re-architecture also does not use DPAPI; it uses TPM-sealed master keys released to a VBS Enclave on Hello ESS authentication [@rec-03].
&lt;h3&gt;Assumption 1: The SYSTEM-only filesystem ACL is a same-user isolation boundary&lt;/h3&gt;
&lt;p&gt;The directory &lt;code&gt;C:\Users\&amp;lt;user&amp;gt;\AppData\Local\CoreAIPlatform.00\UKP\&lt;/code&gt; was protected by an ACL that permitted SYSTEM to read and write, and denied the logged-on user direct access. The original design treated this as an isolation boundary between user-context code and the Recall database. Forshaw&apos;s June 3 post refuted this directly [@rec-14]: a same-user process can obtain SYSTEM-context file access by impersonating a SYSTEM-context service that handles user-supplied input. The technique is generic, well documented in the Tyranid&apos;s Lair archive, and predates Recall by years. Once Forshaw published the worked example, the original ACL stopped looking like a boundary and started looking like a speed bump.&lt;/p&gt;
&lt;h3&gt;Assumption 2: BitLocker-at-rest is sufficient because the live system is trusted for the logged-on user&lt;/h3&gt;
&lt;p&gt;The original team assumed that an attacker against Recall data would necessarily be either (a) an offline adversary with physical possession of the powered-off disk -- defeated by BitLocker -- or (b) an attacker with administrator access -- out of scope per the MSRC servicing criteria [@rec-11]. Beaumont demolished this by pointing at a third class: an in-session, user-context InfoStealer that is already common, already on the InfoStealer-as-a-service price list, and trivially extensible to dump a new SQLite file [@rec-15] [@rec-19]. BitLocker&apos;s threat model and Recall&apos;s threat model did not overlap; assuming they did was the mistake.&lt;/p&gt;
&lt;h3&gt;Assumption 3: Defender&apos;s automated remediation will outrun InfoStealer exfiltration&lt;/h3&gt;
&lt;p&gt;Even granting the existence of in-session adversaries, the original assumption was that Defender for Endpoint&apos;s behavioural detection would catch them before they finished. Beaumont&apos;s measurement said otherwise: the InfoStealer was detected, but automated remediation took roughly ten minutes to land, by which point the exfiltration of a Recall snapshot directory had finished in two seconds [@rec-19] [@rec-15]. The asymmetry was not a Defender bug; it was a category problem. Defender&apos;s response is calibrated for the historical InfoStealer corpus (browser cookies, credential databases); a new bulk corpus introduces a race the existing rules were not tuned for.&lt;/p&gt;
&lt;h3&gt;Assumption 4: Same-user, administrator-level access is not a security boundary anyway&lt;/h3&gt;
&lt;p&gt;This last assumption is technically correct, per the MSRC servicing criteria [@rec-11]. UAC, admin-to-kernel, and same-user post-authentication are documented non-boundaries. The argument goes: if a feature is &quot;in the user&apos;s trust boundary&quot; -- any code running as the user can access it -- then any attacker who is already running as the user has by definition already won. The feature has nothing further to defend.&lt;/p&gt;
&lt;p&gt;The trouble is that the demonstrated Recall attacks did &lt;em&gt;not&lt;/em&gt; require admin. Beaumont&apos;s testing and Forshaw&apos;s ACL impersonation both operated from standard-user context [@rec-15] [@rec-14]. &quot;Same-user attacks are out of scope&quot; is a different statement from &quot;attacks that succeed without elevation are out of scope,&quot; and the original Recall design conflated the two.The Malwarebytes coverage of Hagenah&apos;s tool described the attack as requiring &quot;administrator rights&quot; [@rec-20]. This was an overstatement -- Beaumont and Forshaw both established that admin was not required. Subsequent coverage in Help Net Security used the stricter framing [@rec-19].&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Same-user code is in the user&apos;s trust boundary unless the architecture explicitly authenticates per-access. A SYSTEM-only filesystem ACL is not authentication; it is access control under an assumption (no impersonation) that the Windows DACL model does not enforce in the user&apos;s favour. BitLocker is not authentication either; it is data-at-rest encryption with a key already released by the time the user is logged on. The original Recall design relied on both of these to act like per-access authentication, and neither one was built to do that.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If &quot;same-user code is in the user&apos;s trust boundary&quot; was the bug, what does an architecture look like that authenticates per-access?&lt;/p&gt;
&lt;h2&gt;4. From the June 7 Commitment to the September 27 Architecture&lt;/h2&gt;
&lt;p&gt;The June 7 retreat named three properties: opt-in, Hello-gated, just-in-time decrypted. The architecture that enforces those properties did not exist on June 7. It existed by September 27, was previewable on November 22, and shipped across Snapdragon, Intel, and AMD between April 25 and May 13, 2025. Here is the path between the commitment and the architecture.&lt;/p&gt;
&lt;h3&gt;Generation 0: The substrate that already existed&lt;/h3&gt;
&lt;p&gt;Before Recall, the VBS Enclave primitive was already running in production -- but in a corner of the Windows-server stack that desktop engineers rarely visited. SQL Server 2019 introduced &lt;em&gt;Always Encrypted with secure enclaves&lt;/em&gt; on November 4, 2019, almost five years before the Recall preview [@rec-10]. The feature lets a database hold client-encrypted columns and still answer equality and range queries inside an enclave that is part of the &lt;code&gt;sqlservr.exe&lt;/code&gt; process but isolated from the rest of it. The Microsoft Learn page for VBS Enclaves cross-links Always Encrypted as a sibling consumer of the primitive [@rec-06].&lt;/p&gt;
&lt;p&gt;This matters for two reasons. First, the September 27 architecture did not require Microsoft to invent VBS Enclaves -- the primitive shipped in 2019 and had been stable in production for half a decade by the time Recall reached for it. Second, the original input to this article incorrectly imagined Recall as &quot;the first VBS-enclave product outside the credential set&quot;; the correct claim is narrower. Recall is the first VBS-enclave deployment &lt;em&gt;in the Windows desktop shell&lt;/em&gt; to receive sustained adversarial review. SQL Server 2019 is the substrate precedent; Recall is the desktop-shell debut.&lt;/p&gt;

Microsoft Pluton is a security processor design that integrates root-of-trust functionality, including TPM 2.0 services, directly into the main system-on-chip rather than on a separate discrete chip on the motherboard. The integration matters because the LPC or SPI bus between a discrete TPM and the CPU is the attack surface used by bus-sniffing attacks; on a Pluton-equipped device that bus does not exist for the security-processor traffic. Microsoft publishes the chipset availability list: AMD Ryzen 6000, 7000, 8000, 9000 and Ryzen AI; Intel Core Ultra 200V, Series 3, Series 3 processors; Qualcomm Snapdragon 8cx Gen 3 and Snapdragon X Series [@rec-24]. Pluton firmware updates ship through Windows Update.

A TPM is a tamper-resistant cryptographic processor that holds keys which can be released to the operating system only when a set of preconditions (the values of platform configuration registers, the presence of an authenticated user, the result of an attestation) is met. TPM 2.0 is the version family in current shipment. Recall uses the TPM for *sealing* -- binding the Recall master key to the boot state of the machine and to the identity of the user, so the key cannot be released to a different OS instance or a different user even with full disk access.
&lt;h3&gt;Generation 1: The May 20, 2024 design&lt;/h3&gt;
&lt;p&gt;Already covered in §3. Four assumptions, all wrong; one runnable counter-example (Hagenah&apos;s &lt;em&gt;TotalRecall&lt;/em&gt;); zero mechanism to make the assumptions right.&lt;/p&gt;
&lt;h3&gt;Generation 2: The June 7 commitment&lt;/h3&gt;
&lt;p&gt;The Davuluri blog of June 7 [@rec-02] was not an architecture; it was a set of properties the next architecture would have to enforce. &lt;em&gt;Opt-in&lt;/em&gt; is a UX commitment; &lt;em&gt;Hello-gated&lt;/em&gt; is a credential commitment; &lt;em&gt;just-in-time decryption&lt;/em&gt; is a key-management commitment. Each one rules out a class of approach -- opt-in rules out silent default-on; Hello-gated rules out a key that can be read without biometric attestation; just-in-time rules out a long-lived plaintext cache. None of them, taken alone, prescribes a specific design.&lt;/p&gt;
&lt;h3&gt;Generation 3: The September 27, 2024 architecture&lt;/h3&gt;
&lt;p&gt;This is the load-bearing announcement. Davuluri&apos;s blog [@rec-03] and David Weston&apos;s companion SecurityWeek interview [@rec-17] together describe four security and privacy design principles and five architectural components.&lt;/p&gt;
&lt;p&gt;The four principles, drawn from Davuluri&apos;s blog [@rec-03]:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;The user is always in control.&lt;/em&gt; Recall is opt-in at setup, with Hello enrolment required before any snapshot capture.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Sensitive data in Recall is always encrypted, and keys are protected.&lt;/em&gt; The blog specifies that encryption keys are bound to the TPM, tied to the user&apos;s Hello Enhanced Sign-in Security identity, and can only be used by operations inside a VBS Enclave.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Recall services that operate on snapshots and associated data are isolated.&lt;/em&gt; Snapshot processing, OCR, semantic embedding, and the sensitive-content filter all run inside the enclave; the on-disk database holds only ciphertext.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Users are present and intentional about the use of Recall.&lt;/em&gt; Hello ESS with anti-hammering and rate-limiting governs each authorisation; PIN fallback is permitted only after Hello has been set up.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The five components: &lt;em&gt;Secure Settings&lt;/em&gt;, &lt;em&gt;Semantic Index&lt;/em&gt;, &lt;em&gt;Snapshot Store&lt;/em&gt;, &lt;em&gt;Recall UI&lt;/em&gt;, and &lt;em&gt;Snapshot Service&lt;/em&gt; [@rec-03]. Davuluri&apos;s architecture diagram labels four of them as inside the trust boundary and one of them -- &lt;em&gt;Recall UI&lt;/em&gt; -- as explicitly outside it. The line is verbatim: &quot;Recall components such as the Recall UI operate outside the VBS Enclaves and are untrusted in this architecture.&quot; That line is the seam §8 will return to.&lt;/p&gt;

It&apos;s now fully encrypted, and tied to the user&apos;s physical presence. -- David Weston, CVP Enterprise and OS Security, in conversation with Ryan Naraine [@rec-17]
&lt;p&gt;The composition is not novel cryptography. The novelty is the &lt;em&gt;layering&lt;/em&gt;: VBS Enclaves (Generation 0 substrate), &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 key sealing&lt;/a&gt; (a primitive Windows has shipped since 2012), Hello ESS (an attestation primitive cataloged on Microsoft Learn since the Windows 11 launch [@rec-25]), and Microsoft Purview Exact Data Match filtering (a content-classification primitive previously seen in the Microsoft Purview enterprise product) compose into a single user-facing feature. Each layer was already production-stable; the September 27 design wires them together.&lt;/p&gt;
&lt;h3&gt;First observable build and broad rollout&lt;/h3&gt;
&lt;p&gt;The first observable build of Generation 3 was Insider Dev Channel Build 26120.2415 on Snapdragon Copilot+ PCs, KB5046723, released November 22, 2024 [@rec-04] [@rec-18]. The first-run experience in that build asks the user to opt in to saving snapshots and to enrol Windows Hello [@rec-04]. Build 26120.2510 (December 6, 2024) extended Insider preview to AMD and Intel Copilot+ PCs. GA across all three silicon vendors landed in the April 25, 2025 Windows Experience Blog announcement [@rec-05], with broad rollout in the May 13, 2025 Patch Tuesday cycle [@rec-21]. The IT-admin manageability surface -- &lt;code&gt;AllowRecallEnablement&lt;/code&gt;, &lt;code&gt;DisableAIDataAnalysis&lt;/code&gt;, snapshot-retention policy, disk-allocation policy, per-app exclusion list -- is documented in &lt;em&gt;Manage Recall&lt;/em&gt; on Microsoft Learn [@rec-08].&lt;/p&gt;

flowchart TD
    G0[&quot;Gen 0 (Nov 4, 2019)&lt;br /&gt;SQL Server 2019&lt;br /&gt;Always Encrypted with secure enclaves&lt;br /&gt;(VBS Enclave substrate precedent)&quot;]
    G1[&quot;Gen 1 (May 20, 2024)&lt;br /&gt;Plaintext SQLite&lt;br /&gt;SYSTEM-only filesystem ACL&lt;br /&gt;(Did not ship)&quot;]
    G2[&quot;Gen 2 (June 7, 2024)&lt;br /&gt;Opt-in commitment&lt;br /&gt;Hello-gated commitment&lt;br /&gt;Just-in-time decryption&lt;br /&gt;(Commitment, no architecture)&quot;]
    G3[&quot;Gen 3 (Sept 27, 2024)&lt;br /&gt;VBS Enclave + TPM-sealed&lt;br /&gt;Hello ESS + Purview EDM&lt;br /&gt;(Architecture)&quot;]
    G4[&quot;Gen 4 (Apr 25 - May 13, 2025)&lt;br /&gt;GA on Snapdragon, Intel, AMD&lt;br /&gt;Intune surface matured&quot;]
    G5[&quot;Gen 5 (April 2026)&lt;br /&gt;TotalRecall Reloaded&lt;br /&gt;AIXHost.exe DLL injection&lt;br /&gt;(UI seam disclosed)&quot;]
    G0 --&amp;gt; G1
    G1 -- &quot;Plaintext SQLite + filesystem ACL broken in 4 weeks&quot; --&amp;gt; G2
    G2 -- &quot;Commitment needs a mechanism&quot; --&amp;gt; G3
    G3 -- &quot;Cryptographic chain holds; shipped to GA&quot; --&amp;gt; G4
    G4 -- &quot;UI host outside enclave by design&quot; --&amp;gt; G5
&lt;p&gt;The structural takeaway is this. Composing three primitives Microsoft had already shipped -- VBS Enclaves, TPM 2.0 sealing, and Hello ESS -- plus a fourth (Purview EDM filtering) yielded the September 27 architecture that enforces the three June 7 properties. None of the four primitives is new in 2024; the &lt;em&gt;application&lt;/em&gt; of all four to a personal-context store running in the desktop shell is.&lt;/p&gt;
&lt;p&gt;If &quot;VBS Enclave + TPM-sealed key + Hello ESS&quot; is the answer, what does the inside of the enclave actually do?&lt;/p&gt;
&lt;h2&gt;5. Inside the Enclave: VBS as the Load-Bearing Primitive&lt;/h2&gt;
&lt;p&gt;Microsoft&apos;s own September 27 architecture diagram draws five boxes. One of them is labelled &lt;em&gt;untrusted&lt;/em&gt;. Here is what the other four do, and why the untrusted one matters.&lt;/p&gt;

A Virtualization-based Security (VBS) Enclave is, in Microsoft&apos;s own words on the Learn page that defines the primitive, &quot;a software-based trusted execution environment inside the address space of a host application&quot; [@rec-06]. Concretely, it is a sub-region of a normal user-mode (VTL0) process that is promoted to VTL1 by the Secure Kernel. Code inside the enclave can see its own memory and the bytes the host explicitly passes in across the enclave boundary; the host process cannot see plaintext inside the enclave, and neither can the rest of the operating system, including the kernel and any administrator. The primitive requires VBS and HVCI to be enabled, and Windows 11 Build 26100.2314 or later [@rec-06].

The Windows hypervisor partition that hosts VBS divides each running guest into two virtual trust levels: VTL0 (normal user mode and kernel) and VTL1 (Isolated User Mode and the Secure Kernel). The Secure Kernel is a minimal, signed component that runs in VTL1; it is what enforces the isolation guarantee between VTL0 and VTL1. Code in VTL0 cannot read VTL1 memory; the hypervisor enforces this at the second-level page table. The VBS Enclave primitive uses VTL1 as the substrate for the enclave sub-region.

Enhanced Sign-in Security, per the canonical Microsoft Learn definition, &quot;provides an additional level of security to biometric data with the use of specialized hardware and software components. Virtualization Based Security (VBS) and Trusted Platform Module 2.0 are used to isolate and protect user&apos;s authentication data, and to secure the data communication channel&quot; [@rec-25]. The face-matching algorithm runs in VBS; the sensor-to-algorithm path is an isolated, certificate-authenticated channel. ESS-capable IR cameras and presence sensors are a hardware prerequisite; absent ESS hardware, Recall degrades to a PIN/password fallback.
&lt;h3&gt;The five components&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Snapshot Service&lt;/strong&gt; is a &lt;a href=&quot;https://paragmali.com/blog/protected-process-light-when-the-administrator-isnt-enough/&quot; rel=&quot;noopener&quot;&gt;Protected Process Light (PPL)&lt;/a&gt; that captures the screen at approximately 5-second intervals and feeds the raw frames into the enclave. PPL means the Snapshot Service is signed at a level the rest of user mode cannot inject into. Plaintext frames and per-snapshot keys do not live in the Snapshot Service&apos;s address space; they cross into the enclave immediately on capture.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VBS Enclave&lt;/strong&gt; is the trust boundary. Inside it: OCR over the raw frame; semantic vector embedding for search; sensitive-content filtering via the Microsoft Purview Exact Data Match libraries; per-snapshot key derivation from a TPM-sealed master; AES-256-GCM authenticated encryption of the snapshot and the embedding. Plaintext OCR output never crosses the enclave boundary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Snapshot Store&lt;/strong&gt; is the on-disk database of AES-256-GCM-encrypted per-snapshot blobs and encrypted embeddings. No process -- not even the Snapshot Service that wrote the file, not the kernel, not an administrator -- can decrypt the blobs without going back through the enclave with a Hello-authenticated session grant [@rec-03].&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Semantic Index&lt;/strong&gt; is the query path over the encrypted embeddings. A user query traverses the enclave so that the plaintext embedding (and the plaintext OCR text it points at) never leaves the trust boundary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recall User Experience (UI)&lt;/strong&gt; runs &lt;em&gt;outside&lt;/em&gt; the enclave. Microsoft&apos;s architecture diagram labels it untrusted. The UI receives only data the enclave has authorised for the current session, after Hello ESS, with a timeout, with anti-hammering and rate-limiting on the authorisation window [@rec-03].&lt;/li&gt;
&lt;/ol&gt;

AES-256-GCM is the Galois/Counter Mode of operation for AES with a 256-bit key, specified by NIST SP 800-38D [@rec-26]. It is an authenticated encryption with associated data (AEAD) primitive: each ciphertext carries an authentication tag computed over the ciphertext and the associated data, and decryption fails if the tag does not verify. Recall uses AES-256-GCM per snapshot, with a per-snapshot key derived inside the enclave. The published architecture identifies AES-256-GCM as the primitive but does not document the key derivation function or the per-snapshot nonce scheme.

Purview EDM is a content-classification primitive from the Microsoft Purview enterprise data-loss-prevention product family. It matches text against high-precision patterns: structured credentials, national-identifier formats (US Social Security Numbers, EU identifier formats), payment card numbers under Luhn checksum. In Recall, the EDM library runs inside the enclave on the OCR output, *before* the per-snapshot encryption step. Matches are excluded from the persistent record; the screenshot of a credit-card form has the card number stripped from the OCR text and (per Weston&apos;s framing in SecurityWeek) is treated as a sensitive class that does not enter the snapshot store [@rec-17].

flowchart TD
    SS[&quot;Snapshot Service&lt;br /&gt;PPL, VTL0&lt;br /&gt;captures every ~5s&quot;]
    ENC[&quot;VBS Enclave (VTL1 sub-region)&lt;br /&gt;OCR + embedding&lt;br /&gt;Purview EDM filter&lt;br /&gt;per-snapshot key derivation&lt;br /&gt;AES-256-GCM encrypt&quot;]
    STORE[&quot;Snapshot Store&lt;br /&gt;on-disk&lt;br /&gt;AES-256-GCM ciphertext only&quot;]
    IDX[&quot;Semantic Index&lt;br /&gt;encrypted embeddings&quot;]
    UI[&quot;Recall UI&lt;br /&gt;(VTL0, UNTRUSTED in architecture)&quot;]
    HELLO[&quot;Hello ESS&lt;br /&gt;per-access biometric&quot;]
    TPM[&quot;TPM 2.0&lt;br /&gt;sealed master key&quot;]
    SS --&amp;gt; ENC
    TPM --&amp;gt; ENC
    HELLO --&amp;gt; ENC
    ENC --&amp;gt; STORE
    ENC --&amp;gt; IDX
    STORE --&amp;gt; ENC
    IDX --&amp;gt; ENC
    ENC -- &quot;post-auth release&quot; --&amp;gt; UI
&lt;h3&gt;The per-snapshot key chain&lt;/h3&gt;
&lt;p&gt;Davuluri&apos;s blog specifies the chain but does not publish either the key derivation function used to expand the TPM-sealed master into a per-snapshot key, or the per-snapshot nonce scheme fed into AES-256-GCM. The pseudocode below reconstructs the structure from the published primitives. &lt;em&gt;Microsoft has not published the literal KDF or nonce scheme&lt;/em&gt;; this is the shape of the computation, not the verbatim source.&lt;/p&gt;
&lt;p&gt;{`&lt;/p&gt;
Reconstructed sketch of the enclave-side write path.
Microsoft has published the primitives (TPM 2.0 sealing, Hello ESS gating,
VBS Enclave isolation, AES-256-GCM per snapshot, Purview EDM filtering)
but has NOT published the literal KDF or nonce scheme.
This is a structural reconstruction for teaching purposes.
&lt;p&gt;def enclave_write_snapshot(raw_frame, snapshot_id):
    # Step 1: in-enclave OCR over the raw screen capture.
    ocr_text = enclave_ocr(raw_frame)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Step 2: Purview EDM filter strips known-sensitive patterns
# (credentials, national IDs, PAN) BEFORE persistence.
filtered_text = purview_edm_filter(ocr_text)

# Step 3: semantic embedding for the search index.
embedding = enclave_embed(filtered_text)

# Step 4: derive a per-snapshot key from the TPM-sealed master.
# The master was released into the enclave on Hello ESS authentication.
snapshot_key = kdf(master_key_in_enclave,
                   context=b&quot;recall-snapshot&quot;,
                   salt=snapshot_id)

# Step 5: AES-256-GCM authenticated encryption with a fresh nonce.
nonce = derive_nonce(snapshot_id)
aad   = serialize_metadata(snapshot_id, timestamp=now())
ciphertext, tag = aes_256_gcm_encrypt(
    snapshot_key,
    nonce,
    plaintext=concat(raw_frame, filtered_text, embedding),
    aad=aad,
)

# Step 6: persistent write. Nothing plaintext crosses the enclave boundary.
snapshot_store.put(snapshot_id, ciphertext, tag, nonce, aad)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;`}&lt;/p&gt;
&lt;p&gt;The Hello ESS layer plugs in at step 4: the TPM-sealed master is released into the enclave only on a fresh, ESS-attested authentication, and the release path uses the certificate-authenticated sensor-to-VBS channel described on the Hello ESS Learn page [@rec-25]. Failed authentication trips the standard TPM anti-hammer lockout. PIN fallback is permitted only after Hello has been set up.&lt;/p&gt;

sequenceDiagram
    participant User
    participant Sensor as Hello ESS sensor
    participant SK as Secure Kernel (VTL1)
    participant TPM as TPM 2.0
    participant Encl as Recall VBS Enclave (VTL1)
    participant Store as Snapshot Store
    User-&amp;gt;&amp;gt;Sensor: present face / fingerprint
    Sensor-&amp;gt;&amp;gt;SK: ESS-authenticated biometric attestation
    SK-&amp;gt;&amp;gt;TPM: request key release on attested context
    TPM-&amp;gt;&amp;gt;SK: sealed master key (released to VTL1 only)
    SK-&amp;gt;&amp;gt;Encl: hand master key into enclave
    Encl-&amp;gt;&amp;gt;Encl: derive per-snapshot key, AES-256-GCM encrypt
    Encl-&amp;gt;&amp;gt;Store: ciphertext + AEAD tag + nonce

Microsoft&apos;s documentation distinguishes two patterns that share the same VTL1 substrate. A *VBS Enclave* is a sub-region of a VTL0 host process that is promoted to VTL1 by the Secure Kernel [@rec-06]. An *[IUM Trustlet](/blog/vbs-trustlets-what-actually-runs-in-the-secure-kernel/)* (like LsaIso, the Credential Guard worker) is a full Isolated User Mode process that runs wholly in VTL1. Both rely on the same hypervisor partition and the same Secure Kernel. The terminology matters because the September 27 architecture blog [@rec-03] and the developer-facing Tech Community explainer [@rec-07] both use *VBS Enclave* throughout for Recall, distinct from LsaIso. The pre-audit framing that called Recall &quot;a new IUM trustlet&quot; was a category mistake; the architecture is a sub-region-of-host-process enclave, not a full trustlet process. Both patterns are governed by the MSRC security boundary policy [@rec-11], which lists VBS as a boundary against the kernel and against administrative users.

VBS Enclaves are not new -- SQL Server 2019 *Always Encrypted with secure enclaves* established the substrate roughly five years before Recall (see §4 Generation 0). What Recall contributes is not the substrate but the deployment context: a personal-context store on the desktop shell, with a UX that puts the trust boundary in front of consumers and an adversarial review history (Hagenah, Beaumont, Forshaw) that no SQL Server feature has attracted.

flowchart LR
    subgraph VBS_Encl[&quot;VBS Enclave pattern (Recall)&quot;]
        H[&quot;Host process&lt;br /&gt;(VTL0, e.g. Snapshot Service)&quot;] --- E[&quot;Enclave sub-region&lt;br /&gt;(VTL1)&quot;]
    end
    subgraph IUM[&quot;IUM Trustlet pattern (LsaIso / Credential Guard)&quot;]
        L[&quot;Trustlet process&lt;br /&gt;(entirely in VTL1)&quot;]
    end
    SK[&quot;Secure Kernel (VTL1)&quot;]
    HV[&quot;Hypervisor partition&quot;]
    VBS_Encl --&amp;gt; SK
    IUM --&amp;gt; SK
    SK --&amp;gt; HV
&lt;p&gt;Davuluri&apos;s September 27 blog adds two transparency commitments that bear on how much of this architecture an outside reviewer can verify. First, Microsoft&apos;s internal MORSE team (Microsoft Offensive Research and Security Engineering) ran a penetration test of the Generation 3 design before disclosure [@rec-03]. Second, an unnamed third-party security vendor performed an independent review. Neither report is public. §9 will return to this transparency gap.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; The cryptographic boundary in Generation 3 is &lt;em&gt;above&lt;/em&gt; the filesystem. A process with full filesystem access reads only AES-256-GCM ciphertext. A kernel-mode caller reads only ciphertext. An administrator reads only ciphertext. The boundary is at the enclave, not at the file. This is qualitatively different from &quot;add encryption to the SQLite file&quot; and is the reason the Generation 3 design closes the four Generation 1 failures rather than merely patching them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If the cryptographic chain holds against the kernel and against administrators, where can it ship?&lt;/p&gt;
&lt;h2&gt;6. Where Recall Ships in May 2026&lt;/h2&gt;
&lt;p&gt;The post-September-2024 Recall is no longer a preview. Here is the silicon it runs on, the policies an IT admin sees, and the exclusion surfaces a user can configure.&lt;/p&gt;
&lt;h3&gt;Shipping silicon&lt;/h3&gt;
&lt;p&gt;The chipset matrix is documented on the Microsoft Pluton Learn page [@rec-24] and corroborated by the GA announcement [@rec-05]. The pattern is consistent: every Copilot+ PC carries TPM 2.0 services, but the &lt;em&gt;attachment&lt;/em&gt; of those services varies by silicon vendor.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Silicon family&lt;/th&gt;
&lt;th&gt;Security processor&lt;/th&gt;
&lt;th&gt;Typical TPM attachment&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Qualcomm Snapdragon X Elite / X Plus&lt;/td&gt;
&lt;td&gt;Pluton (integrated)&lt;/td&gt;
&lt;td&gt;TPM 2.0 services delivered by Pluton on-die&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intel Core Ultra 200V (Lunar Lake), Series 3, Series 3&lt;/td&gt;
&lt;td&gt;Pluton (integrated, where present) and discrete TPM 2.0&lt;/td&gt;
&lt;td&gt;Discrete TPM 2.0 plus Pluton-equivalent integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD Ryzen AI 300 series and Ryzen 6000-9000&lt;/td&gt;
&lt;td&gt;AMD Pluton Security Processor&lt;/td&gt;
&lt;td&gt;Pluton-equipped SKUs; some retain discrete TPM 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

PPL is the Windows process-protection level that gates which processes are permitted to inject code into, debug, or read the memory of a given target process. A PPL process is signed at a specific signer level; only processes signed at an equal-or-higher level can interact with its address space using the privileged debug or memory-access APIs. The Recall *Snapshot Service* is a PPL at a signer level the rest of user mode cannot reach. The *Recall UI* (covered in §8) is not a PPL, and that distinction is the architectural seam Hagenah&apos;s April 2026 disclosure exploits.
&lt;p&gt;The Pluton-versus-discrete-TPM trade-off is small but real. A Pluton-integrated TPM has no off-die bus carrying the security-processor traffic that an attacker can sniff with a logic analyser; the integration is in-package. A discrete TPM has a documented bus-sniffing attack surface that the Secured-core PC requirement set (HVCI, System Guard Secure Launch, Kernel DMA Protection) is designed to mitigate but does not eliminate.The bus-sniffing attack is not specific to Recall; it is a general TPM-attachment concern that applies to BitLocker, Credential Guard, and any other TPM-sealed key. Recall inherits both the threat and the mitigation set from the platform.&lt;/p&gt;
&lt;p&gt;For most Copilot+ PCs in 2026, the practical difference is small. The architectural correctness of the September 27 design does not depend on the choice.&lt;/p&gt;
&lt;h3&gt;The management surface&lt;/h3&gt;
&lt;p&gt;The IT-admin management surface is documented in &lt;em&gt;Manage Recall&lt;/em&gt; on Microsoft Learn [@rec-08]. The defaults differ between consumer and managed devices: on a managed device, &quot;Recall is disabled and removed&quot; by default, and an explicit Intune policy is required to allow enrolment. The relevant Intune Settings Catalog entries are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AllowRecallEnablement&lt;/code&gt; -- the explicit consent gate for any organisation that wants Recall to be available on its managed fleet. &lt;em&gt;Threat model addressed:&lt;/em&gt; unintended consumer-default opt-in on managed devices; without this policy explicitly set to &quot;allowed,&quot; the &lt;em&gt;Manage Recall&lt;/em&gt; page&apos;s managed-device default (&quot;disabled and removed&quot;) stands.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DisableAIDataAnalysis&lt;/code&gt; -- the Group Policy gating surface for Copilot+ AI features. &lt;em&gt;Threat model addressed:&lt;/em&gt; organisations that want a single switch to keep all on-device AI processing (Recall, Click to Do, future shell features) off the fleet, rather than enumerating each feature individually.&lt;/li&gt;
&lt;li&gt;Snapshot-retention and storage-allocation policies -- data-minimisation controls for the per-device snapshot corpus. &lt;em&gt;Threat model addressed:&lt;/em&gt; bounding the maximum size of any single exfiltration window in the event a future UI-host weakness is found; fewer snapshots and shorter retention reduce the corpus exposed to a successful post-authentication extraction.&lt;/li&gt;
&lt;li&gt;Per-app exclusion list -- per-window snapshot exclusion for applications the operator designates. &lt;em&gt;Threat model addressed:&lt;/em&gt; high-value secrets surfaced by the password manager, the corporate VPN client, and similar sensitive UIs that should never enter the snapshot corpus regardless of how strong the storage encryption is.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Microsoft Purview Endpoint DLP adds a parallel policy surface for window-level snapshot exclusion of any application handling regulated data [@rec-08]. Group Policy parity exists for the same surfaces, for organisations that have not yet adopted Intune.Intune management of Recall was not a 2026 debut. The &lt;em&gt;Manage Recall&lt;/em&gt; documentation was published alongside the Insider preview in late 2024 and matured through the April-May 2025 GA cycle. The 2026 work is stabilisation, not introduction.&lt;/p&gt;
&lt;h3&gt;User-facing surfaces&lt;/h3&gt;
&lt;p&gt;End users encounter Recall through a small number of touchpoints documented in the Insider preview blog [@rec-04] and the developer integration page [@rec-09]. The keyboard shortcut Win+J launches the Recall UI. The Out-Of-Box Experience asks the user to opt in to saving snapshots and to enrol Windows Hello before any capture begins. The per-app exclusion list is reachable from Settings. Storage allocation defaults are configurable, with a documented audit path through the &lt;em&gt;Manage Recall&lt;/em&gt; policy reference.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; On a managed-device pilot, deploy the &lt;code&gt;AllowRecallEnablement&lt;/code&gt; Intune policy &lt;em&gt;before&lt;/em&gt; the OOBE flow begins on the device. If the policy lands after the user has completed OOBE, you leave a small window in which the user could opt in under the consumer default. Pre-deploying the policy makes the managed-device default (Recall disabled) authoritative from first boot.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Recall is the on-device-only Copilot+ feature, on a defined silicon set, with a defined management surface. Who else ships in this space, and how do their architectures compare?&lt;/p&gt;
&lt;h2&gt;7. Competing Approaches Under the Same UX Label&lt;/h2&gt;
&lt;p&gt;Three other architectures ship a search-your-past-screen or near-adjacent UX in the 2024-2026 window. Each made a different choice about where the trust boundary lives.&lt;/p&gt;
&lt;h3&gt;Rewind.ai (macOS, 2022 to present)&lt;/h3&gt;
&lt;p&gt;Rewind.ai is the closest architectural predecessor to the May 2024 Recall design. It captures the user&apos;s macOS screen, OCRs the captures, and stores them locally in an SQLCipher-encrypted SQLite database, with the database key held in the macOS Keychain [@rec-28] [@rec-29] [@rec-30]. There is no per-query biometric prompt; there is no Secure Enclave gating on each access. Architecturally, Rewind relies on macOS sandboxing and FileVault for the surrounding protection.The vendor security page at rewind.ai/security resolves to a domain-parking template as of May 2026, so this architectural description is &lt;em&gt;INFERRED_DETAIL&lt;/em&gt; drawn from the Nudge Security third-party profile [@rec-28] and the SQLCipher canonical pages [@rec-29] [@rec-30] rather than a vendor-published spec.&lt;/p&gt;
&lt;p&gt;SQLCipher uses AES-256-CBC per page with a per-page random IV and HMAC-SHA512, deriving the key from a passphrase via PBKDF2-HMAC-SHA512 with 256,000 default iterations [@rec-30]. That is reasonable file-encryption; it is &lt;em&gt;not&lt;/em&gt; per-access authentication. A same-user process that can read the SQLCipher key out of Keychain has plaintext access to every screen capture the user has ever taken -- structurally the same condition that broke the May 2024 Recall design, on a different operating system with a different sandbox model.&lt;/p&gt;
&lt;h3&gt;Apple Intelligence Personal Context + Private Cloud Compute (2024 to present)&lt;/h3&gt;
&lt;p&gt;Apple&apos;s Personal Context personalisation is &lt;em&gt;not&lt;/em&gt; a search-your-past-screen product. It is structured-app-data personalisation: messages, mail, calendar, photo metadata, and similar surfaces. The on-device tier runs in the Apple Silicon Secure Enclave. The off-device tier -- &lt;em&gt;Private Cloud Compute&lt;/em&gt; -- carries a binary-transparency-style commitment that the cloud nodes process personal data only inside a hardened OS image whose source code Apple publishes for outside review [@rec-27]. The PCC architecture is included in this comparison not because it is a Recall analogue (it isn&apos;t), but because it shows what Apple has chosen to ship at the adjacent problem class: structured data personalisation, not screen-history.&lt;/p&gt;
&lt;h3&gt;Consumer cloud-capture devices (Limitless, Plaud, and similar)&lt;/h3&gt;
&lt;p&gt;Consumer cloud-capture devices invert the trust model. The capture happens on a dedicated wearable or microphone; the processing happens on a vendor&apos;s cloud tier; the storage lives in the vendor&apos;s account model with end-to-end encrypted upload and vendor-side AES-256-GCM at rest. This is architecturally the opposite of Recall: on-device-only is replaced by on-vendor-cloud, and the trust boundary is at the vendor&apos;s perimeter rather than at the user&apos;s silicon. The internals of any specific vendor&apos;s stack are not in the scope-mandated source set; the entry exists to establish the &lt;em&gt;existence&lt;/em&gt; of the cloud-tier alternative, not to certify any specific vendor&apos;s claim.&lt;/p&gt;
&lt;h3&gt;The eight-dimension matrix&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Architecture&lt;/th&gt;
&lt;th&gt;On-device only&lt;/th&gt;
&lt;th&gt;Hardware-rooted master&lt;/th&gt;
&lt;th&gt;TEE-isolated compute&lt;/th&gt;
&lt;th&gt;Per-access biometric&lt;/th&gt;
&lt;th&gt;Pre-persistence filter&lt;/th&gt;
&lt;th&gt;TEE-isolated UI plane&lt;/th&gt;
&lt;th&gt;KDF/nonce documented&lt;/th&gt;
&lt;th&gt;CVE record&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recall Gen 1&lt;/strong&gt; (May 2024, did not ship)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Pre-release&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recall Gen 3+4&lt;/strong&gt; (Sept 2024 - May 2026)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes (TPM 2.0, Pluton where available)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes (VBS Enclave)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes (Hello ESS)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes (Purview EDM)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No (UI explicitly untrusted)&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;No CVE through May 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rewind.ai (macOS)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Keychain-rooted&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apple Personal Context + PCC&lt;/td&gt;
&lt;td&gt;Hybrid&lt;/td&gt;
&lt;td&gt;Yes (Secure Enclave)&lt;/td&gt;
&lt;td&gt;Yes (Secure Enclave / PCC)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Apple-managed&lt;/td&gt;
&lt;td&gt;Apple-managed&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consumer cloud-capture&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Vendor cloud&lt;/td&gt;
&lt;td&gt;Vendor cloud&lt;/td&gt;
&lt;td&gt;Vendor flow&lt;/td&gt;
&lt;td&gt;Vendor flow&lt;/td&gt;
&lt;td&gt;Vendor flow&lt;/td&gt;
&lt;td&gt;Not public&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQL Server 2019 AE w/ enclaves&lt;/td&gt;
&lt;td&gt;Server-side&lt;/td&gt;
&lt;td&gt;Yes (TPM-attested)&lt;/td&gt;
&lt;td&gt;Yes (VBS Enclave)&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Yes (documented)&lt;/td&gt;
&lt;td&gt;Patched as needed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Recall Generation 3+4 is the only design in the surveyed set that checks five of the six &quot;ideal&quot; properties: on-device-only data flow, hardware-rooted master key, TEE-isolated sensitive compute, per-access biometric authentication, and pre-persistence sensitive-content filtering. The sixth ideal property -- TEE-isolated plaintext delivery to the UI plane -- is the architectural seam §8 explores.&lt;/p&gt;

flowchart LR
    A[&quot;On-device only&lt;br /&gt;YES&quot;]
    B[&quot;Hardware-rooted master&lt;br /&gt;YES&quot;]
    C[&quot;TEE-isolated compute&lt;br /&gt;YES&quot;]
    D[&quot;Per-access biometric&lt;br /&gt;YES&quot;]
    E[&quot;Pre-persistence filter&lt;br /&gt;YES&quot;]
    F[&quot;TEE-isolated UI plane&lt;br /&gt;NO -- UI is explicitly untrusted&quot;]
    A --&amp;gt; G((Recall Gen 3+4))
    B --&amp;gt; G
    C --&amp;gt; G
    D --&amp;gt; G
    E --&amp;gt; G
    F -. &quot;the seam&quot; .-&amp;gt; G
&lt;p&gt;Five of six properties. What does the missing sixth cost?&lt;/p&gt;
&lt;h2&gt;8. What the VBS Enclave Model Cannot Do&lt;/h2&gt;
&lt;p&gt;Microsoft&apos;s September 27, 2024 architecture is the strongest design Windows has shipped for an on-device personal-context store. It is not the strongest design that is theoretically possible -- and it is honest about which classes of attack it does not address. Here are five.&lt;/p&gt;
&lt;h3&gt;8.1 The UI host runs outside the enclave&lt;/h3&gt;
&lt;p&gt;This is the load-bearing limit. Davuluri&apos;s blog states it directly: &quot;Recall components such as the Recall UI operate outside the VBS Enclaves and are untrusted in this architecture&quot; [@rec-03]. The architecture diagram labels the UI box untrusted. The blog says this in September 2024, eighteen months before anyone publishes an exploit for it. The seam is documented.&lt;/p&gt;
&lt;p&gt;In April 2026, Alexander Hagenah released TotalRecall Reloaded against the Generation 3+4 design [@rec-12]. The tool has two files: &lt;code&gt;totalrecall.exe&lt;/code&gt;, an injector, and &lt;code&gt;totalrecall_payload.dll&lt;/code&gt;, the payload. The injector locates the &lt;code&gt;AIXHost.exe&lt;/code&gt; UI host via &lt;code&gt;CreateToolhelp32Snapshot&lt;/code&gt;, allocates memory in the target with &lt;code&gt;VirtualAllocEx&lt;/code&gt;, writes the path of the payload DLL with &lt;code&gt;WriteProcessMemory&lt;/code&gt;, and spawns a remote thread pointing at &lt;code&gt;LoadLibraryW&lt;/code&gt;. Once loaded, the payload reads decrypted Recall data out of the &lt;code&gt;AIXHost.exe&lt;/code&gt; address space, where the enclave has just delivered it after the user&apos;s legitimate Hello authentication [@rec-12] [@rec-22].&lt;/p&gt;
&lt;p&gt;Hagenah&apos;s verbatim characterisation, from the README: &quot;&lt;strong&gt;No admin required. Standard user. No kernel exploit. No crypto bypass. Just COM calls.&lt;/strong&gt;&quot; [@rec-12]. The tool ships three execution modes -- &lt;code&gt;--launch&lt;/code&gt; (start AIXHost.exe and inject), &lt;code&gt;--stealth&lt;/code&gt; (operate without UI signals), and &lt;code&gt;--wait&lt;/code&gt; (attach to a future legitimate AIXHost.exe instance) [@rec-12]. The &lt;code&gt;--stealth&lt;/code&gt; mode patches a function called &lt;code&gt;DiscardDataAccess&lt;/code&gt; inside a DLL referred to as Baker.dll, which would otherwise discard the decrypted snapshot data on UI dismissal.The Baker.dll &lt;code&gt;DiscardDataAccess&lt;/code&gt; patch is a reverse-engineering detail rather than a load-bearing architectural point, but it illustrates the surface area available to an injected payload inside the UI host&apos;s address space. Anything the UI process can do to a memory region, an injected DLL can do too.&lt;/p&gt;

The vault is solid. The delivery truck is not. -- Alexander Hagenah, TotalRecall Reloaded README, April 2026 [@rec-12]
&lt;p&gt;The disclosure timeline is in the public record. Hagenah submitted a full disclosure to the Microsoft Security Response Center on March 6, 2026, including source code and build instructions [@rec-23]. Microsoft opened a case nine days later and closed it on April 3, 2026 with the determination that the behaviour &quot;operates within the current, documented security design of Recall&quot; [@rec-23]. The public release of the tool followed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Per iTnews&apos;s coverage of the disclosure, Microsoft&apos;s MSRC response after a month of review was that the demonstrated behaviour &quot;operates within the current, documented security design of Recall&quot; [@rec-23]. The phrasing is precise. The September 27, 2024 architecture blog [@rec-03] &lt;em&gt;publishes&lt;/em&gt; that the UI host is outside the enclave; the MSRC servicing criteria [@rec-11] &lt;em&gt;publish&lt;/em&gt; that same-user post-authentication code is not a security boundary. Hagenah demonstrated what &quot;untrusted in this architecture&quot; means in practice; MSRC confirmed the demonstration is consistent with the published model. Reasonable readers may disagree on whether the published model is the right model; the present article does not take a side and leaves that judgment to the reader.&lt;/p&gt;
&lt;/blockquote&gt;

sequenceDiagram
    participant User
    participant Inj as totalrecall.exe (standard user)
    participant AIX as AIXHost.exe (UI host, VTL0)
    participant Hello as Hello ESS / VBS Enclave
    participant Pay as totalrecall_payload.dll
    User-&amp;gt;&amp;gt;AIX: Win+J launches Recall UI
    AIX-&amp;gt;&amp;gt;Hello: request snapshot data
    User-&amp;gt;&amp;gt;Hello: present biometric
    Hello-&amp;gt;&amp;gt;AIX: deliver decrypted snapshot to address space
    Inj-&amp;gt;&amp;gt;AIX: CreateToolhelp32Snapshot, locate process
    Inj-&amp;gt;&amp;gt;AIX: VirtualAllocEx, write payload path
    Inj-&amp;gt;&amp;gt;AIX: WriteProcessMemory with payload DLL path
    Inj-&amp;gt;&amp;gt;AIX: CreateRemoteThread targeting LoadLibraryW
    AIX-&amp;gt;&amp;gt;Pay: LoadLibraryW loads the payload DLL
    Pay-&amp;gt;&amp;gt;AIX: read decrypted data from same address space
    Pay--&amp;gt;&amp;gt;Inj: exfiltrate plaintext snapshots

AppContainer is the Windows process-isolation primitive that restricts a process&apos;s access to filesystem, registry, network, and inter-process surfaces to an explicit capability list declared at process launch. Universal Windows Platform applications and modern packaged applications launch inside an AppContainer by default; the kernel enforces the capability set on every access to a securable object. A Generation 6 Recall UI launched inside an AppContainer would not be able to load arbitrary user-supplied DLLs into its address space, because the AppContainer&apos;s capability set would not include the broad inter-process token-and-memory-access capabilities that Hagenah&apos;s injector relies on (`OpenProcess` for `PROCESS_VM_WRITE` and `PROCESS_CREATE_THREAD` against an out-of-container target are gated by the AppContainer&apos;s integrity level and capability set).
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; The Generation 3 cryptographic chain holds -- as §5 established, a process with full filesystem access, a kernel-mode caller, and an administrator all read only ciphertext. The architectural seam is at the plaintext-delivery boundary -- the UI host, by Microsoft&apos;s own published architecture, is explicitly outside the enclave. Closing this seam would require a Generation 6 design that combines a high-signer Protected Process Light for the UI host, AppContainer with capability-restricted code-loading, and WDAC-enforced code integrity for the UI process tree. No such Microsoft commitment exists as of May 2026.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The deeper observation is one of recurrence. The Generation 1 failure was &quot;same-user code is in the user&apos;s trust boundary, and the architecture relied on a filesystem ACL rather than per-access authentication.&quot; The Generation 5 disclosure is &quot;same-user code is in the user&apos;s trust boundary, and the architecture relied on the UI host being a normal user-mode process.&quot; Different layer; same threat-model limit, restated.&lt;/p&gt;
&lt;h3&gt;8.2 Rubber-hose against an authenticated user&lt;/h3&gt;
&lt;p&gt;No per-access authentication scheme can defeat a coerced legitimate user. If the user is physically compelled to authenticate with Hello and then operate the UI, the architecture authorises a release into the UI plane that the coercer can read off the screen, off a screenshot, or off a redirected output device. The September 27 design explicitly does not address this threat class, and no plausible Generation N design within the same UX category can. The control here is procedural -- duress codes, panic gestures, or a separate &quot;do not authorise&quot; PIN -- rather than cryptographic.&lt;/p&gt;
&lt;h3&gt;8.3 NPU and GPU side channels&lt;/h3&gt;
&lt;p&gt;The VBS Enclave is the trust boundary for CPU-side computation. The Neural Processing Unit that drives Recall&apos;s semantic embedding is &lt;em&gt;not&lt;/em&gt; in the enclave; neither is the integrated GPU. Side-channel attacks on AI accelerator memory hierarchies are unstudied territory in the published Copilot+ PC literature as of May 2026. There is no public proof of a Recall-specific NPU side channel; there is also no published assurance that one does not exist. This is &quot;unknown unknown&quot; territory, which is honest to state and dangerous to pretend has been ruled out.&lt;/p&gt;
&lt;h3&gt;8.4 OCR model integrity&lt;/h3&gt;
&lt;p&gt;The local OCR model loads from disk; the code inside the enclave reads and uses the weights. Microsoft has not publicly committed to a signed-weights verification step for the OCR model at enclave load. An attacker with administrator access could in principle substitute poisoned weights -- weights that deliberately mis-OCR specific credential formats so that the Purview EDM filter does not catch them, thereby smuggling sensitive plaintext through the filter and into the persistent store. Admin compromise is an out-of-scope class per the MSRC servicing criteria [@rec-11], but the OCR-integrity story would be more legible if the enclave verified a signature on the model file at load time.&lt;/p&gt;
&lt;h3&gt;8.5 Substrate compromise&lt;/h3&gt;
&lt;p&gt;A Secure Boot bypass, a Secure Kernel vulnerability, or a hypervisor escape takes down VBS itself, not Recall specifically. Saar Amar and Daniel King&apos;s Black Hat USA 2020 &lt;em&gt;Breaking VSM by Attacking SecureKernel&lt;/em&gt; [@rec-32] remains the canonical historical treatment of the SK attack surface; the substrate has been hardened in response and is not &lt;em&gt;proven secure&lt;/em&gt;. Recall inherits whatever the substrate&apos;s residual risk is in any given month. Patching is by way of the normal Windows servicing cadence.&lt;/p&gt;
&lt;p&gt;Microsoft, by its own published servicing criteria, accepts each of these limits as architectural choices, not defects. What does the public record &lt;em&gt;not&lt;/em&gt; tell us, that an independent reviewer would need to know?&lt;/p&gt;
&lt;h2&gt;9. Where the Public Record Runs Out&lt;/h2&gt;
&lt;p&gt;Five things the September 27 blog does not say, and one structural question it raises that the next five years of Windows shell features will answer.&lt;/p&gt;
&lt;h3&gt;9.1 The KDF and nonce scheme are not public&lt;/h3&gt;
&lt;p&gt;Davuluri&apos;s blog [@rec-03] specifies that each snapshot is encrypted with a per-snapshot key derived from a TPM-sealed master, and that the AEAD primitive is AES-256-GCM. It does not publish the key derivation function, the per-snapshot nonce derivation, or the associated-data inputs to GCM. The §5 pseudocode is a structural reconstruction; the literal source is in &lt;code&gt;aeon.dll&lt;/code&gt; (or equivalent) and is not documented. The practical consequence is that third-party formal cryptographic review of the per-snapshot construction is foreclosed. MORSE&apos;s internal penetration test and the unnamed third-party security vendor&apos;s review [@rec-03] were performed against the literal implementation; both reports are non-public.&lt;/p&gt;
&lt;h3&gt;9.2 On-device OCR model integrity&lt;/h3&gt;
&lt;p&gt;The OCR model loads from disk and runs inside the enclave. There is no public Microsoft commitment that the enclave verifies a signature on the model weights at load time. The §8 OCR-integrity attack -- admin substitutes poisoned weights to defeat Purview EDM -- is bounded by the admin-is-out-of-scope MSRC policy [@rec-11], but a verified-load step would tighten the story.&lt;/p&gt;
&lt;h3&gt;9.3 InPrivate / password-field pause signal forgery&lt;/h3&gt;
&lt;p&gt;Davuluri&apos;s blog mentions that Recall pauses snapshot capture during InPrivate browsing and in password fields [@rec-03]. The signalling API by which the browser or the credential UI tells the Snapshot Service to pause is not fully documented. Whether a malicious browser extension can suppress legitimate pauses (forcing a snapshot of an InPrivate page) or spuriously trigger them (denial-of-service against legitimate snapshot capture) is unstudied in the public record.&lt;/p&gt;
&lt;h3&gt;9.4 The authorisation-window timeout is not exposed by policy&lt;/h3&gt;
&lt;p&gt;The Intune ADMX template documented in &lt;em&gt;Manage Recall&lt;/em&gt; [@rec-08] exposes &lt;code&gt;AllowRecallEnablement&lt;/code&gt;, &lt;code&gt;DisableAIDataAnalysis&lt;/code&gt;, snapshot retention, storage allocation, and the per-app exclusion list. It does not, as of May 2026, expose the authorisation-window timeout as a configurable policy. An enterprise that wants to require re-authentication every N minutes during a Recall session does not have a Microsoft-supported knob for it.&lt;/p&gt;
&lt;h3&gt;9.5 The pattern question&lt;/h3&gt;
&lt;p&gt;This is the structural one. Microsoft has now shipped a VBS-enclave-backed feature in the desktop shell &lt;em&gt;and&lt;/em&gt; has open-sourced the developer-facing SDK at &lt;code&gt;microsoft/VbsEnclaveTooling&lt;/code&gt; [@rec-31]. The repository ships a code generator and a NuGet SDK, requires Windows 11 24H2 Build 26100.3916 or later, and supports C++17 and C++20 in the host with C++20 and Rust 1.88+ in the enclave [@rec-31].The SDK lowers the barrier to building a VBS Enclave dramatically. A developer who wants to put a small piece of sensitive computation (credential handling, secrets storage, on-device LLM context) inside an enclave no longer has to reverse-engineer Recall&apos;s implementation; they can write against a documented API.&lt;/p&gt;
&lt;p&gt;The forward question is whether other desktop-shell features adopt the same pattern. Encrypted clipboard history, encrypted recent-files, on-device LLM context windows, the password manager Edge currently keeps in user-mode RAM -- each is a candidate. Hagenah&apos;s &lt;code&gt;AIXHost.exe&lt;/code&gt; class suggests the pattern, naively applied, repeats the same UI-host weakness for every consumer. A VBS-Enclave-backed clipboard with a normal user-mode UI host inherits the same seam.&lt;/p&gt;

Microsoft&apos;s internal Offensive Research and Security Engineering team ran a penetration test against the Generation 3 architecture before the September 27 announcement [@rec-03]. An unnamed third-party security vendor performed an independent review. Neither report is public. The September 27 blog cites their existence to establish that adversarial review happened; it does not cite findings, methodology, or scope. This is not a criticism so much as a public-trust framing: the residual confidence a reader can place in the architecture is gated on the credibility of two reports they cannot read. Hagenah&apos;s April 2026 disclosure is the first publicly verifiable adversarial review of the UI surface; it found exactly what the architecture diagram already warned about. That coincidence is reassuring about the *honesty* of the published model; it does not by itself certify any property the published model does not cover.
&lt;p&gt;Microsoft is not going to fix the AIXHost.exe class in 2026. What can a Copilot+ PC operator actually &lt;em&gt;do&lt;/em&gt; with the shipping Recall today?&lt;/p&gt;
&lt;h2&gt;10. Deploying Recall Safely&lt;/h2&gt;
&lt;p&gt;Six knobs, in order. Setting them in this order turns the September 2024 architecture into a deployable enterprise posture.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Procurement.&lt;/strong&gt; Pluton-or-discrete-TPM-2.0 hardware plus ESS-capable biometric sensor (IR camera plus presence sensor, or equivalent). Without ESS-capable biometrics, the Hello-gated architecture degrades to a PIN or password fallback, which is weaker than the architecture intends [@rec-25] [@rec-24].&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Policy enablement.&lt;/strong&gt; Deploy the Intune &lt;code&gt;AllowRecallEnablement&lt;/code&gt; policy explicitly. The Microsoft Learn &lt;em&gt;Manage Recall&lt;/em&gt; page states that &quot;By default, Recall is disabled and removed on managed devices&quot; [@rec-08]; the consumer OOBE default is opt-in but applies only to unmanaged devices. The managed-device default is authoritative once policy is in force, so deploy first, then provision.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data minimisation.&lt;/strong&gt; Deploy the snapshot-retention and disk-allocation policies from the &lt;em&gt;Manage Recall&lt;/em&gt; policy reference [@rec-08]. Fewer snapshots and shorter retention reduce the maximum size of any single exfiltration window.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sensitive-app exclusion.&lt;/strong&gt; Enable the Microsoft Purview Endpoint DLP integration for window-level snapshot exclusion of any application handling regulated data (PHI, PCI, PII), and populate the per-app exclusion list with the local password manager, the corporate VPN client, and any other surfaces with high-value secrets [@rec-08]. This is the operator-controlled complement to the in-enclave Purview EDM content filter.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Defence-in-depth for the AIXHost.exe class.&lt;/strong&gt; Deploy Smart App Control plus a &lt;a href=&quot;https://paragmali.com/blog/wdac--hvci-code-integrity-at-every-layer-in-windows/&quot; rel=&quot;noopener&quot;&gt;Windows Defender Application Control (WDAC)&lt;/a&gt; policy to deny untrusted DLL loading on the device. DLL injection requires a process to load the payload; a WDAC policy with User-Mode Code Integrity (UMCI) enabled blocks the load of any DLL -- including Hagenah&apos;s payload -- that does not match a signer or hash allow-list in the policy. The &lt;code&gt;LoadLibraryW&lt;/code&gt; call still executes; the load fails because the code-integrity check rejects the unsigned payload. None of these are &lt;em&gt;in&lt;/em&gt; the Recall architecture; they are platform-level controls the operator must enable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Audit and monitoring.&lt;/strong&gt; Existing InfoStealer behaviour rules in Microsoft Defender for Endpoint will flag bulk reads of the Recall directory as high-confidence indicators. The point worth being precise about here: these are the &lt;em&gt;pre-existing&lt;/em&gt; InfoStealer behaviour rules, not a Recall-specific signature; they fire on the access pattern (rapid enumeration of a personal-data directory) rather than on the file format. Configure Defender and your SIEM to alert on the directory.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; A tempting deployment &quot;fix&quot; is to disable VBS entirely as a way to prevent the Snapshot Service from running. This is a net security regression. VBS is the substrate for Credential Guard, HVCI, the Hello ESS algorithm isolation, and the Recall enclave itself. Disabling VBS eliminates the protection the Generation 3 architecture provides while leaving the desktop attack surface open. If the goal is to prevent Recall from running, use &lt;code&gt;AllowRecallEnablement&lt;/code&gt; or &lt;code&gt;DisableAIDataAnalysis&lt;/code&gt; instead.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The list of things &lt;em&gt;not&lt;/em&gt; to bother doing: manual AES-256-GCM on the SQLite file (the enclave already does this); manual scrubbing of the Recall directory on a schedule (the retention policy already does this); writing a custom Defender signature for the Recall directory (existing InfoStealer behaviour rules already cover the access pattern); relying on the OOBE opt-in default for an enterprise pilot (that default applies to unmanaged devices only).&lt;/p&gt;
&lt;p&gt;{`
// Conceptual audit. The real script needs PowerShell on Windows;
// this is the logic an operator&apos;s audit cmdlet would implement.&lt;/p&gt;
&lt;p&gt;type DevicePosture = {
  pluton_present: boolean;
  tpm_2_0_present: boolean;
  hello_ess_enrolled: boolean;
  smart_app_control: &quot;on&quot; | &quot;off&quot; | &quot;evaluation&quot;;
  wdac_policy: &quot;enforced&quot; | &quot;audit&quot; | &quot;none&quot;;
  allow_recall_enablement: &quot;allowed&quot; | &quot;disabled&quot; | &quot;not-set&quot;;
  retention_days: number;
  defender_directory_alert: boolean;
};&lt;/p&gt;
&lt;p&gt;function auditRecallPosture(d: DevicePosture): string[] {
  const findings: string[] = [];&lt;/p&gt;
&lt;p&gt;  if (!d.tpm_2_0_present) findings.push(&quot;FAIL: no TPM 2.0; sealing path unavailable.&quot;);
  if (!d.pluton_present)
    findings.push(&quot;INFO: discrete TPM 2.0; bus-sniffing residual risk.&quot;);
  if (!d.hello_ess_enrolled)
    findings.push(&quot;FAIL: Hello ESS not enrolled; per-access biometric degraded to PIN.&quot;);
  if (d.smart_app_control === &quot;off&quot;)
    findings.push(&quot;WARN: Smart App Control off; AIXHost.exe injection class wide open.&quot;);
  if (d.wdac_policy !== &quot;enforced&quot;)
    findings.push(&quot;WARN: WDAC not in enforcement mode; LoadLibraryW gating absent.&quot;);
  if (d.allow_recall_enablement === &quot;not-set&quot;)
    findings.push(&quot;WARN: AllowRecallEnablement not set; OOBE default may apply.&quot;);
  if (d.retention_days &amp;gt; 30)
    findings.push(&quot;INFO: retention &amp;gt;30 days; consider tightening for high-risk roles.&quot;);
  if (!d.defender_directory_alert)
    findings.push(&quot;WARN: Defender directory-enumeration alert not configured.&quot;);&lt;/p&gt;
&lt;p&gt;  return findings.length ? findings : [&quot;OK: posture matches Gen 3+4 deployment guide.&quot;];
}
`}&lt;/p&gt;
&lt;p&gt;If you have gotten this far, you have the questions a reader walks in with answered. Here are the questions a reader walks out with.&lt;/p&gt;
&lt;h2&gt;11. Frequently Asked Questions&lt;/h2&gt;

No. The September 27, 2024 architecture blog [@rec-03] and the IT-admin *Manage Recall* documentation [@rec-08] both state that snapshots, OCR text, and the semantic index are processed and stored entirely on-device. The Microsoft Diagnostic Data telemetry pipeline does not carry snapshot data. This is the one property the original May 2024 design got right, and it survived the re-architecture intact.

No. Session-replay tools record interactive sessions for product analytics and ship the recording to a vendor cloud. Screen recording for accessibility (e.g., screen readers, magnification) operates on the live frame and does not persist a corpus. Compliance archiving (e.g., legal-hold mailbox archives) is a server-side, vendor-managed retention surface. Recall is on-device, personal, search-indexed over OCR text and embeddings, and gated on Hello biometric. The architectural lineage and the threat model differ for each.

Yes, on a discrete TPM 2.0 SKU. The Microsoft Pluton chipset list [@rec-24] enumerates the Pluton-equipped silicon; Copilot+ PCs that are not on that list satisfy the Recall hardware requirements via a discrete TPM 2.0. The trade-off is the bus-sniffing surface discussed in §6: a Pluton-integrated TPM has no off-die bus to sniff for the security-processor traffic. The architectural correctness of the September 27 design does not depend on the choice; only the bus-sniffing residual risk does.

Different threat models. BitLocker&apos;s threat model is offline disk theft: an adversary with the powered-off laptop in hand. The May 2024 Recall design borrowed BitLocker&apos;s &quot;data at rest is encrypted&quot; framing without absorbing that the dominant Recall adversary is a logged-on session adversary (an InfoStealer running as the user), against which BitLocker has nothing to say. Microsoft did not delay BitLocker because the original 2007 BitLocker matched the threat model it claimed to address; they delayed Recall because the original 2024 Recall did not.

No, as of May 2026. The Hagenah AIXHost.exe class disclosed in April 2026 [@rec-12] [@rec-22] [@rec-23] was reported to MSRC on March 6, 2026; Microsoft closed the case on April 3, 2026 with the determination that the behaviour &quot;operates within the current, documented security design of Recall&quot; [@rec-23]. That determination is consistent with the published MSRC servicing criteria [@rec-11], which do not list same-user post-authentication as a security boundary. No CVE was assigned.

No. The on-device NPU is required for the semantic-embedding step, and the Copilot+ hardware baseline (Pluton or discrete TPM 2.0 plus an NPU at a minimum throughput tier plus an ESS-capable biometric sensor) is a hard prerequisite [@rec-09] [@rec-04]. There is no CPU-only fallback for the embedding pipeline, and the on-device-only data flow forecloses a cloud fallback by design.

No. As covered in §5, a VBS Enclave is a sub-region of a VTL0 host process that is promoted to VTL1 by the Secure Kernel [@rec-06]. An IUM trustlet (e.g., LsaIso, which backs Credential Guard) is a full Isolated User Mode process that runs wholly in VTL1. Both rely on the same hypervisor partition and Secure Kernel substrate, and the MSRC servicing criteria treat both under the VBS boundary policy [@rec-11], but the patterns are architecturally distinct. Microsoft&apos;s own documentation uses &quot;VBS Enclave&quot; terminology for the Recall case throughout [@rec-03] [@rec-06] [@rec-07].

Click to Do is a separate Copilot+ feature with a separate but partially overlapping privacy story; the November 22, 2024 Insider blog [@rec-04] bundles the two opt-in flows in the same first-run experience. Click to Do operates on the *current* screen rather than a history of past screens, and it does not maintain a persistent corpus. The bundling is a UX choice, not an architectural sharing of the snapshot store.

No, even as administrator. The Snapshot Store holds AES-256-GCM ciphertext; the per-snapshot keys are derivable only inside the enclave; the master is sealed by the TPM and released to the enclave only on a fresh Hello attestation. An administrator with full filesystem access to the snapshot directory reads ciphertext [@rec-03] [@rec-11]. The Hagenah AIXHost.exe class [@rec-12] is *post-authentication* extraction from the UI host&apos;s address space, not an administrator-side read of the encrypted data. The cryptographic chain holds against admin; the seam is at the UI plane.
&lt;p&gt;The arc this article walks -- a vendor ships, an audit lands, the vendor re-architects, an audit finds a seam, the vendor confirms the seam was in the published model -- is what the security feedback loop looks like when it works as designed. Naming each phase is what lets a reader recognise the same loop the next time a major Windows feature ships. The architecture diagram that ships with the &lt;em&gt;next&lt;/em&gt; personal-data feature out of Redmond will, if the pattern holds, label its UI host the way Davuluri&apos;s labels the Recall UI: as untrusted, in writing, in advance. The reader who has walked this far should know to look for that label, and to evaluate the feature on whether the architecture &lt;em&gt;names&lt;/em&gt; its seam rather than hiding it.&lt;/p&gt;

On a Copilot+ PC, the following PowerShell cmdlets (run as administrator) give you the device-side view: `Get-Tpm` for TPM 2.0 presence and Pluton attestation; `Get-CimInstance -Namespace root\cimv2\Security\MicrosoftTpm -ClassName Win32_Tpm` for detailed TPM state; `Get-LocalUser | Where-Object Enabled` plus the Hello enrolment surface in Settings for Hello ESS state; `Get-MpComputerStatus` for Defender status; and the Intune device-status portal for `AllowRecallEnablement` and related policies [@rec-08]. The §10 audit-script logic above describes the cross-check structure.
&lt;p&gt;&amp;lt;StudyGuide slug=&quot;microsoft-recall-vbs-enclave-re-architecture&quot; keyTerms={[
  { term: &quot;VBS Enclave&quot;, definition: &quot;A software-based trusted execution environment inside the address space of a host application, isolated from the host and from the rest of the OS via VTL1 promotion by the Secure Kernel.&quot; },
  { term: &quot;VTL1 / Secure Kernel&quot;, definition: &quot;Virtual Trust Level 1, the hypervisor-partitioned trust domain that hosts Isolated User Mode trustlets and VBS Enclaves; the Secure Kernel is the signed component that enforces the boundary.&quot; },
  { term: &quot;TPM 2.0 sealing&quot;, definition: &quot;Binding a key to platform state and user identity such that the TPM releases it only when the bound preconditions are met; the Recall master key is TPM-sealed.&quot; },
  { term: &quot;Hello ESS&quot;, definition: &quot;Windows Hello Enhanced Sign-in Security; runs the biometric matching algorithm in VBS and authenticates the sensor-to-VBS path with a certificate-authenticated channel.&quot; },
  { term: &quot;Purview EDM&quot;, definition: &quot;Microsoft Purview Exact Data Match; the in-enclave classifier that strips credentials, national IDs, and payment-card numbers from OCR output before persistence.&quot; },
  { term: &quot;AES-256-GCM&quot;, definition: &quot;NIST SP 800-38D authenticated encryption with associated data; the per-snapshot AEAD primitive Recall uses inside the enclave.&quot; },
  { term: &quot;Pluton&quot;, definition: &quot;Microsoft&apos;s integrated security processor; replaces the off-die LPC/SPI bus path of a discrete TPM with in-package TPM 2.0 services on the system-on-chip.&quot; },
  { term: &quot;PPL (Protected Process Light)&quot;, definition: &quot;Windows process-protection level governing which signers may inject into or read the memory of a target; the Recall Snapshot Service is a PPL, the Recall UI host (AIXHost.exe) is not.&quot; },
  { term: &quot;AIXHost.exe&quot;, definition: &quot;The Recall UI host process; runs in VTL0 outside the enclave and is the target of the April 2026 TotalRecall Reloaded DLL injection.&quot; },
  { term: &quot;AppContainer&quot;, definition: &quot;Windows process-isolation primitive that restricts a process to an explicit capability list at launch; a UI host running inside an AppContainer could not load arbitrary DLLs because the capability set would not include the inter-process token-and-memory-access capabilities the TotalRecall Reloaded injector relies on.&quot; },
  { term: &quot;TotalRecall / TotalRecall Reloaded&quot;, definition: &quot;Alexander Hagenah&apos;s open-source extraction tools against, respectively, the May 2024 Recall preview (plaintext SQLite) and the April 2026 Recall GA (UI-host DLL injection).&quot; }
]} questions={[
  { q: &quot;Why did the SYSTEM-only filesystem ACL on the original Recall directory fail to act as an isolation boundary?&quot;, a: &quot;Because a same-user process can impersonate a SYSTEM-context service that handles user-supplied input and obtain SYSTEM-context file access without elevation, as Forshaw demonstrated in &apos;Working your way Around an ACL&apos; on June 3, 2024.&quot; },
  { q: &quot;What four primitives compose into the September 27, 2024 architecture, and which one was new in 2024?&quot;, a: &quot;VBS Enclaves (shipped in SQL Server 2019), TPM 2.0 sealing (shipped since 2012), Hello ESS (shipped at the Windows 11 launch), and Purview EDM (shipped with the Microsoft Purview enterprise product). None was new in 2024; the composition was.&quot; },
  { q: &quot;Why is the AIXHost.exe DLL injection &apos;not a vulnerability&apos; by MSRC&apos;s published servicing criteria?&quot;, a: &quot;Because same-user post-authentication code is not listed as a security boundary in the MSRC criteria, and the September 27 architecture explicitly labels the UI host as untrusted. The behaviour operates within the published model, which is the test MSRC applies.&quot; },
  { q: &quot;What single property would Recall need to add to check all six of the &apos;ideal&apos; on-device-personal-context properties?&quot;, a: &quot;TEE-isolated plaintext delivery to the UI plane. The current architecture isolates compute and storage but releases plaintext into a VTL0 user-mode UI host (AIXHost.exe); a Generation 6 design that ran the UI in a high-signer PPL with AppContainer-restricted code loading and WDAC enforcement would close the seam.&quot; },
  { q: &quot;What does the &apos;cryptographic boundary above the filesystem&apos; phrase mean in concrete terms?&quot;, a: &quot;Even a process with full filesystem access to the Snapshot Store finds only AES-256-GCM ciphertext. The per-snapshot keys exist only inside the VBS Enclave; the master is sealed by the TPM and released only on a fresh Hello attestation. The boundary is at the enclave, not at the file.&quot; }
]} /&amp;gt;&lt;/p&gt;
</content:encoded><category>windows-security</category><category>recall</category><category>vbs-enclaves</category><category>pluton</category><category>tpm</category><category>windows-hello</category><category>copilot-plus-pcs</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>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><item><title>Pluton: A TPM On Silicon Microsoft Can Patch</title><link>https://paragmali.com/blog/pluton-a-tpm-on-silicon-microsoft-can-patch/</link><guid isPermaLink="true">https://paragmali.com/blog/pluton-a-tpm-on-silicon-microsoft-can-patch/</guid><description>How Microsoft moved the TPM onto the SoC die, ran it on Rust firmware, and patched it through Windows Update -- and what that cost in trust centralisation.</description><pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate><content:encoded>
**Microsoft Pluton is the architectural answer to a TPM threat model that broke between 2019 and 2024.** It moves the TPM onto the application SoC die, runs Microsoft-authored Rust firmware on a dedicated TEE, and ships updates through Windows Update -- closing every attack surface that defeated discrete TPM (Andzakovic 2019), Intel PTT (TPM-Fail 2019), and AMD fTPM (faulTPM 2023). Each design choice retires a 2014-2024 attack class and places a new trust in Microsoft: silicon supply chain, firmware compiler, signing key, update channel. The chip is the cheapest part of the system; the cost is a single Microsoft signing key as the trust anchor for every Pluton-equipped Windows 11 client.
&lt;h2&gt;1. The question Microsoft answered architecturally before the prior article posed it&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&quot;The TPM was supposed to be the part of the system you didn&apos;t have to trust anyone for. Twenty-five years later, the trust question is back -- and the answer is now political.&quot;&lt;/em&gt; That was the closing line of the previous article in this series [@prior-tpm-in-windows]. The counterintuitive fact: by the time that question was asked, Microsoft had been shipping its architectural answer to it for twelve years already, inside an Xbox.&lt;/p&gt;
&lt;p&gt;The Xbox One launched in November 2013 with an on-die, Microsoft-signed security processor and a Microsoft-controlled firmware update path. Microsoft&apos;s own announcement seven years later named the lineage explicitly: &lt;em&gt;&quot;the Pluton design was introduced as part of the integrated hardware and OS security capabilities in the Xbox One console released in 2013 by Microsoft in partnership with AMD&quot;&lt;/em&gt; [@ms-pluton-blog-2020]. The November 17, 2020 announcement that Pluton would ship on Windows PCs was not the introduction of a new design. It was a decision to apply a console design pattern to the general-purpose PC, with all the political and supply-chain consequences that come with that decision.&lt;/p&gt;
&lt;p&gt;The prior article ended with three sets of broken engineering. A NZ$40 iCE40 FPGA on an LPC bus defeats discrete TPM in the time it takes a laptop to finish Trusted Boot [@andzakovic-2019-tpm-sniffing]. A network packet defeats Intel PTT through a 5-hour timing side channel against the ECDSA implementation in CSME [@tpmfail-microsite]. A few hours of physical access defeats AMD fTPM via a voltage glitch on the SVI2 power-management bus, walking out with the entire fTPM internal state [@jacob-2023-faultpm]. All three are documented in the prior article&apos;s section 5 and will not be re-derived here.&lt;/p&gt;
&lt;p&gt;This article is what those three results forced into shape. Microsoft&apos;s reply is structural: move the TPM onto the SoC die so the bus disappears; run it on a dedicated TEE so a faulTPM-class glitch cannot drop everything; rewrite the firmware in a memory-safe language so the next decade of TPM-Fail-class CVEs has somewhere shorter to live; and route updates through Windows Update so the patch latency stops being measured in OEM-capsule quarters and starts being measured in Patch Tuesday weeks. Each design choice closes a specific 2014-2024 attack class. Each design choice also names a new trust. &lt;em&gt;The bus is closed by trusting the silicon supply chain. The TEE is dedicated by trusting Microsoft&apos;s chip-level isolation. The firmware is memory-safe by trusting Microsoft&apos;s compiler and SDLC. The update path is fast by trusting Microsoft&apos;s signing key and Windows Update infrastructure.&lt;/em&gt; That is the article in five sentences.&lt;/p&gt;
&lt;p&gt;The route from here is historical, then technical, then practical. Section 2 traces the design pattern from Xbox One (2013) through Project Sopris (2015), the &lt;em&gt;Seven Properties of Highly Secure Devices&lt;/em&gt; paper (2017), Project Cerberus (2017), and Azure Sphere (2018). Section 3 shows why every other architectural option for &quot;where the TPM lives&quot; was systematically broken in public between 2019 and 2024. Section 4 walks the five generations of Microsoft security silicon side by side. Section 5 takes the four design choices in the November 17, 2020 announcement one at a time. Section 6 lists what is shipping in 2026, who has it on by default, and how to verify. Section 7 puts Pluton next to Apple&apos;s Secure Enclave Processor, Google&apos;s Titan M2 / OpenTitan, Caliptra, and the still-shipping Project Cerberus. Section 8 is what Pluton still cannot do, including the worked example of CVE-2025-2884. Section 9 is the open problems Pluton has named but not solved. Section 10 is the Monday-morning checklist. Section 11 is the FAQ and the closing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; A single design pattern -- on-die security processor, Microsoft-signed firmware, online firmware updates -- migrating across product domains for thirteen years until it lands on the general-purpose PC. That migration is the subject of this article. Its cost is the subject of its closing.&lt;/p&gt;
&lt;/blockquote&gt;

gantt
    title Microsoft on-die security silicon 2013-2025
    dateFormat YYYY-MM
    axisFormat %Y
    section Lineage
    Xbox One on-die security processor :2013-11, 2018-12
    Project Sopris (Codename 4x4) :2015-01, 2017-04
    Seven Properties paper (MSR-TR-2017-16) :2017-03, 2017-12
    Project Cerberus (OCP) :2017-11, 2025-12
    Azure Sphere (MT3620, Pluton MCU) :milestone, 2018-04, 1d
    section Pluton on PC
    November 17 2020 announcement :milestone, 2020-11, 1d
    AMD Ryzen 6000 first silicon :milestone, 2022-01, 1d
    Linux 6.3 tpm_crb merged :milestone, 2023-02, 1d
    Caliptra 1.0 (parallel path) :milestone, 2024-04, 1d
    Rust-based firmware foundation :2024-01, 2026-12
    section Stress test
    CVE-2025-2884 (TCG ref code OOB) :milestone, 2025-06, 1d
&lt;p&gt;Where did the design pattern come from, and why was it ready for the PC in 2020 and not earlier?&lt;/p&gt;
&lt;h2&gt;2. Origins -- Xbox One (2013), Sopris (2015), Seven Properties (2017), Cerberus (2017), Azure Sphere (2018)&lt;/h2&gt;
&lt;p&gt;The November 2020 announcement is retroactive. The &lt;em&gt;design&lt;/em&gt; dates to Xbox One in 2013; the &lt;em&gt;name&lt;/em&gt; &quot;Pluton&quot; first appears publicly in April 2018, in an Azure Blog post on the Azure Sphere MCU [@azure-blog-anatomy-secured-mcu]. The five-year gap is the architecture maturing from &quot;console-only thing the SoC team built&quot; to &quot;thing Microsoft Research thinks every device should have.&quot;&lt;/p&gt;
&lt;h3&gt;2013 -- Xbox One&lt;/h3&gt;
&lt;p&gt;A console adversary has full physical access, unlimited time, and an economic incentive measured in hundreds of thousands of pirated units. Microsoft and AMD co-designed the Xbox One SoC with an on-die security subsystem, Microsoft-signed firmware, and a hardware-enforced separation between the Game OS and the System OS. The 2020 Pluton announcement [@ms-pluton-blog-2020] names the lineage explicitly. The architectural shape that the Pluton-on-PC program would later put under TCG TPM 2.0 wire compatibility was already running in production at consumer-console scale by 2014. The motivation matters because it is the &lt;em&gt;only&lt;/em&gt; domain where Microsoft had hands-on experience deploying an on-die security processor against an adversary who owned the hardware. (Note: that the design was driven specifically by RGH-class console-modding adversaries is architectural inference, not a Microsoft statement.)&lt;/p&gt;
&lt;h3&gt;2015 -- Codename 4x4 / Project Sopris&lt;/h3&gt;
&lt;p&gt;In 2015, a small team in Microsoft AI+Research NExT, led by Galen Hunt, began exploring whether the same architectural shape could secure a $4 microcontroller [@msr-blog-azure-sphere]. The internal codename was &lt;em&gt;Codename 4x4&lt;/em&gt; -- a reference to the technical requirements that the chip would have at least 4 MB of RAM and 4 MB of Flash [@msr-blog-azure-sphere]. The Microsoft Research blog post is the surviving primary source on Sopris [@msr-blog-azure-sphere].The &quot;Codename 4x4&quot; name was internal team shorthand. Hunt&apos;s MSR Blog post records both the meaning and the constraint: &lt;em&gt;&quot;This was the origin of the project, internally called &apos;Codename 4x4&apos;, referring to the technical requirements that the chip will have at least 4 MB of RAM and 4 MB of Flash&quot;&lt;/em&gt; [@msr-blog-azure-sphere]. The point was not the storage budget; the point was that a $4 MCU must afford the same architectural properties as a console SoC.&lt;/p&gt;
&lt;h3&gt;March 2017 -- Seven Properties of Highly Secure Devices&lt;/h3&gt;
&lt;p&gt;Hunt, George Letey, and Edmund Nightingale published &lt;em&gt;The Seven Properties of Highly Secure Devices&lt;/em&gt; as Microsoft Research Technical Report MSR-TR-2017-16 in March 2017 [@msr-2017-seven-properties]. The paper makes a single normative claim: &lt;em&gt;&quot;This paper makes two contributions to the field of device security. First, we identify seven properties we assert are required in all highly secure devices&quot;&lt;/em&gt; [@msr-2017-seven-properties]. The seven are: hardware-based root of trust, small trusted computing base, defense in depth, compartmentalisation, certificate-based authentication, &lt;em&gt;renewable security&lt;/em&gt;, and failure reporting. Property #6 is the one the rest of this article turns on. &lt;em&gt;Renewable security via online firmware updates&lt;/em&gt; is precisely the property that distinguishes Pluton-on-PC from a 2014 dTPM. The chip is allowed to be wrong, as long as the chip can be made right again, fast.&lt;/p&gt;

A 2017 Microsoft Research framework (Hunt, Letey, Nightingale; MSR-TR-2017-16) listing the architectural properties any &quot;highly secure device&quot; must satisfy: hardware-based root of trust, small TCB, defense in depth, compartmentalisation, certificate-based authentication, *renewable security via online updates*, and failure reporting [@msr-2017-seven-properties]. Renewable security is the property the Pluton-on-PC update path operationalises; it also names the new trust the program places in Microsoft.
&lt;h3&gt;November 9, 2017 -- Project Cerberus&lt;/h3&gt;
&lt;p&gt;Microsoft announced Project Cerberus at the OCP Summit on November 9, 2017 [@siliconangle-2017-cerberus]. Kushagra Vaid, then Microsoft Azure GM, described the architecture as &lt;em&gt;&quot;a cryptographic microcontroller running secure code which intercepts accesses from the host to flash over the SPI bus (where firmware is stored), so it can continuously measure and attest these accesses to ensure firmware integrity&quot;&lt;/em&gt; [@siliconangle-2017-cerberus]. Microsoft contributed a five-PDF specification set to OCP under Project Olympus [@ocp-cerberus]: Architecture Overview, Challenge Protocol, Firmware Update, Host Processor Firmware Requirements, and Processor Cryptography. The reference implementation lives at &lt;code&gt;Azure/Project-Cerberus&lt;/code&gt; on GitHub [@azure-cerberus-github] -- platform-agnostic core, FreeRTOS and Linux ports, &lt;em&gt;&quot;designed to be a hardware root of trust (RoT) for server platforms&quot;&lt;/em&gt; [@azure-cerberus-github]. Microsoft Learn describes Cerberus as &lt;em&gt;&quot;a NIST 800-193 compliant hardware root-of-trust with an identity that cannot be cloned&quot;&lt;/em&gt; [@ms-learn-cerberus] [@nist-sp-800-193]. This was Microsoft&apos;s first public commitment to publishing a hardware-RoT design and to running it in production at fleet scale.&lt;/p&gt;
&lt;p&gt;Cerberus matters here for what it &lt;em&gt;cannot&lt;/em&gt; do, not what it can. It is a discrete chip. It needs board area, a BOM line, and per-OEM design-in cost. It works on a $20,000 server motherboard. It does not work on a $700 ultrabook -- and putting it on one would reintroduce the very external-bus surface that Andzakovic 2019 showed to be sniffable [@andzakovic-2019-tpm-sniffing]. Cerberus solves the server problem definitively. It does not solve the PC problem, and its existence makes the PC-side need explicit.&lt;/p&gt;
&lt;h3&gt;April 16, 2018 -- Azure Sphere preview at RSA 2018&lt;/h3&gt;
&lt;p&gt;Hunt&apos;s announcement of Azure Sphere at the 2018 RSA Conference is the first public, named appearance of &quot;Pluton.&quot; The Azure Blog launch post promised &lt;em&gt;&quot;custom silicon security technology from Microsoft, inspired by 15 years of experience and learnings from Xbox, to secure this new class of MCUs and the devices they power&quot;&lt;/em&gt; [@azure-blog-2018-azure-sphere]. The companion &lt;em&gt;Anatomy of a Secured MCU&lt;/em&gt; post is the first technical description: &lt;em&gt;&quot;our Pluton Security Subsystem is the heart of our security story&quot;&lt;/em&gt; [@azure-blog-anatomy-secured-mcu]. Three components, one trust anchor: the MediaTek MT3620 MCU with the Pluton subsystem on die; the Microsoft-managed Linux-based Azure Sphere OS; and the Azure Sphere Security Service (AS3) cloud, which signed firmware updates and consumed device attestations. Wikipedia records the general-availability date as February 24, 2020 [@wikipedia-azure-sphere], also describing Pluton as &lt;em&gt;&quot;a Microsoft-designed security subsystem that implements a hardware-based root of trust for Azure Sphere&quot;&lt;/em&gt; [@wikipedia-azure-sphere].&lt;/p&gt;

Each chip includes custom silicon security technology from Microsoft, inspired by 15 years of experience and learnings from Xbox, to secure this new class of MCUs and the devices they power. -- Galen Hunt, Azure Blog, April 16, 2018 [@azure-blog-2018-azure-sphere]
&lt;p&gt;By April 2018, Microsoft had three architectural pieces in production. Xbox One proved the on-die security processor. Project Cerberus proved that Microsoft could publish an open RoT design and operate the back end at hyperscale. Azure Sphere proved that the Pluton block could be licensed onto a third-party SoC, attested to a Microsoft-operated cloud service, and serviced over the air. &lt;em&gt;None of those three pieces was on a Windows PC.&lt;/em&gt;&lt;/p&gt;

flowchart LR
    Xbox[Xbox One 2013&lt;br /&gt;on-die security processor&lt;br /&gt;console form factor]
    Sopris[Project Sopris 2015&lt;br /&gt;4 MB RAM + 4 MB Flash&lt;br /&gt;research prototype]
    Seven[Seven Properties 2017&lt;br /&gt;MSR-TR-2017-16&lt;br /&gt;renewable security]
    Cerberus[Project Cerberus 2017&lt;br /&gt;discrete RoT&lt;br /&gt;server BMC]
    Sphere[Azure Sphere 2018&lt;br /&gt;Pluton-on-MCU&lt;br /&gt;MediaTek MT3620]
    PC[Pluton-on-PC 2020&lt;br /&gt;general-purpose Windows PC]
    Xbox --&amp;gt; Seven
    Sopris --&amp;gt; Seven
    Seven --&amp;gt; Sphere
    Xbox --&amp;gt; Sphere
    Cerberus --&amp;gt; PC
    Sphere --&amp;gt; PC
&lt;p&gt;Microsoft had a working architecture by 2018. Why did it take until November 17, 2020 to put it on a PC, and what changed between 2018 and 2020 that made the PC mandatory?&lt;/p&gt;
&lt;h2&gt;3. The threat model that closed every other door (2019-2024)&lt;/h2&gt;
&lt;p&gt;The answer to &quot;what changed between 2018 and 2020&quot; is that, between 2019 and 2024, every alternative architecture for &lt;em&gt;where the TPM lives&lt;/em&gt; was systematically broken in public. Not by intention. By research. By the time Microsoft made the November 17, 2020 announcement, Pluton-on-PC was the only architectural option that simultaneously closed the bus, contained the TEE blast radius, and gave Microsoft a fast firmware-patch path. This section is the prior article&apos;s section 5, recast as the story Microsoft was watching unfold while the Pluton design was being prepared for PC.&lt;/p&gt;
&lt;h3&gt;March 13, 2019 -- Andzakovic&apos;s $40 LPC sniffer&lt;/h3&gt;
&lt;p&gt;Denis Andzakovic, working at Pulse Security, published an end-to-end attack on the Trusted Boot path of an HP business laptop [@andzakovic-2019-tpm-sniffing]. A NZ$40 iCE40 FPGA, seven wires (LFRAME, LAD0-LAD3, LCLK, GND) soldered to the LPC bus between the CPU and the discrete TPM, the BitLocker Volume Master Key falling off the wire in plaintext during boot. The prior article walks the bit-level details. What matters here is that the November 17, 2020 Pluton announcement names this attack class as motivation: &lt;em&gt;&quot;attackers have begun to innovate ways to attack [the TPM], particularly in situations where an attacker can ... gain physical access to a PC ... target[ing] the communication channel between the CPU and TPM&quot;&lt;/em&gt; [@ms-pluton-blog-2020]. Discrete TPM as a class is broken against a determined adversary with physical access. The bus is the surface.&lt;/p&gt;
&lt;h3&gt;November 12, 2019 -- TPM-Fail&lt;/h3&gt;
&lt;p&gt;Daniel Moghimi and colleagues published &lt;em&gt;TPM-Fail&lt;/em&gt; later in 2019 [@tpmfail-microsite]: timing side channels in the ECDSA implementation in Intel PTT (CVE-2019-11090) and the STMicro ST33 dTPM (CVE-2019-16863). Local key recovery in 4-20 minutes; remote, over the network, in approximately 5 hours. The fixes shipped as firmware patches. The lesson Microsoft took from TPM-Fail is not in the bug, it is in the &lt;em&gt;deploy mechanism&lt;/em&gt;. PTT lives in CSME; CSME ships through the OEM&apos;s UEFI capsule path. ST33 lives behind the TPM vendor&apos;s signed flash and ships through the OEM&apos;s UEFI capsule path. The OEM UEFI capsule path is measured in quarters to years for high-volume client OEMs. &lt;em&gt;A fix existed but the deploy mechanism was insufficient.&lt;/em&gt; This is the architectural lesson that the next generation has to internalise: the patch path is part of the security property.The deploy-mechanism lesson is the one that gets quietly swallowed into Pluton&apos;s design. The bug count in firmware-TPM territory is not zero; it is steady. What changes is whether a fix can reach the fleet before its dwell time becomes a procurement problem. TPM-Fail&apos;s structural lesson is therefore not &quot;ECDSA timing leaks&quot; -- it is &quot;the channel that delivers the fix is the security property that matters.&quot;&lt;/p&gt;
&lt;h3&gt;April 28, 2023 -- faulTPM&lt;/h3&gt;
&lt;p&gt;Hans Niklas Jacob, Christian Werling, Robert Buhren, and Jean-Pierre Seifert published &lt;em&gt;faulTPM: Exposing AMD fTPMs Deepest Secrets&lt;/em&gt; at IEEE EuroS&amp;amp;P 2023 [@jacob-2023-faultpm]. &lt;em&gt;&quot;In this paper, we analyze a new class of attacks against fTPMs: Attacking their Trusted Execution Environment can lead to a full TPM state compromise. We experimentally verify this attack by compromising the AMD Secure Processor&quot;&lt;/em&gt; [@jacob-2023-faultpm]. The mechanism: a voltage glitch on the SVI2 power-management bus, against the AMD PSP (an ARM TrustZone Cortex-A5 inside modern Ryzen SoCs [@wikipedia-amd-psp]), in 2-3 hours of physical access. The output: the entire fTPM internal state, including the EK and any sealed material.&lt;/p&gt;
&lt;p&gt;The structural failure in faulTPM is not the glitch. It is that the PSP is a &lt;em&gt;shared&lt;/em&gt; TEE. The same coprocessor that runs the fTPM service also runs SEV memory-encryption setup, secure-boot enforcement, and platform initialisation. One fault drops everything. &lt;em&gt;Shared-TEE fTPM is broken because the TEE is shared.&lt;/em&gt; The architectural conclusion that this forces is hard: a fTPM that lives next to memory-encryption services, alongside boot-policy enforcement, in a coprocessor that also handles fuse provisioning, is not separable in failure. To restore TEE isolation, you need a &lt;em&gt;dedicated&lt;/em&gt; TEE.&lt;/p&gt;
&lt;h3&gt;The architecture cascade&lt;/h3&gt;
&lt;p&gt;Three results in five years close every architectural option Microsoft had on the PC.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Realization&lt;/th&gt;
&lt;th&gt;Structural failure&lt;/th&gt;
&lt;th&gt;First public proof&lt;/th&gt;
&lt;th&gt;What survives the failure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Discrete TPM (LPC / SPI)&lt;/td&gt;
&lt;td&gt;External bus is sniffable&lt;/td&gt;
&lt;td&gt;Andzakovic 2019 [@andzakovic-2019-tpm-sniffing]&lt;/td&gt;
&lt;td&gt;Hardened dTPM with encrypted bus (TPM 2.0 ENC sessions); not retrofittable to existing fleets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intel PTT in CSME&lt;/td&gt;
&lt;td&gt;Slow OEM UEFI capsule patch path&lt;/td&gt;
&lt;td&gt;TPM-Fail 2019 [@tpmfail-microsite]&lt;/td&gt;
&lt;td&gt;The cryptographic primitive; not the deploy channel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD fTPM in PSP&lt;/td&gt;
&lt;td&gt;Shared TEE -- one fault drops everything&lt;/td&gt;
&lt;td&gt;faulTPM 2023 [@jacob-2023-faultpm]&lt;/td&gt;
&lt;td&gt;The compatibility surface; not the secrets the chip held&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pluton on the SoC die&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;(subject of sections 5-8)&lt;/td&gt;
&lt;td&gt;--&lt;/td&gt;
&lt;td&gt;--&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The reasoning chain that lands the design is short. dTPM is broken because the bus is sniffable. Shared-TEE fTPM is broken because the TEE is shared. Therefore: dedicated TEE on the SoC die, with a deploy channel that is not the OEM UEFI capsule. That is Pluton-on-PC. &lt;em&gt;On-die&lt;/em&gt; is not a Microsoft engineering preference. It is the only shape left after every other architecture has been broken in public.&lt;/p&gt;

flowchart TD
    dTPM[Discrete TPM&lt;br /&gt;external LPC/SPI bus]
    PTT[Intel PTT&lt;br /&gt;fTPM inside CSME]
    fTPM[AMD fTPM&lt;br /&gt;fTPM inside PSP]
    AND[Andzakovic 2019&lt;br /&gt;\$40 FPGA bus sniff]
    TF[TPM-Fail 2019&lt;br /&gt;5-hour ECDSA recovery]
    FT[faulTPM 2023&lt;br /&gt;SVI2 voltage glitch]
    Forced[On-die dedicated TEE&lt;br /&gt;OS-channel update path&lt;br /&gt;= Pluton-on-PC]
    dTPM --&amp;gt; AND
    PTT --&amp;gt; TF
    fTPM --&amp;gt; FT
    AND --&amp;gt; Forced
    TF --&amp;gt; Forced
    FT --&amp;gt; Forced
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; By 2024, all three production options for the TPM realization had been defeated by public research. dTPM by the bus surface (Andzakovic 2019). Intel PTT by the patch latency of CSME (TPM-Fail 2019). AMD fTPM by the shared-TEE blast radius (faulTPM 2023). On-die is not an aesthetic choice; it is the only architectural shape left after every other option has been demonstrably broken. The &quot;Pluton design&quot; is the negative space these three results leave behind.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If Microsoft had a working on-die-RoT architecture as early as 2013, and the threat model demanded it on PC by 2020, why did Microsoft go through Cerberus and Azure Sphere first? What did each generation contribute that the previous one could not?&lt;/p&gt;
&lt;h2&gt;4. Five generations of Microsoft security silicon&lt;/h2&gt;
&lt;p&gt;Microsoft&apos;s path to Pluton-on-PC was not linear. The architecture took shape across five generations of Microsoft security silicon -- three direct predecessors, the PC deployment itself, and one parallel path. Each generation contributed a piece the next one needed. The shape of Pluton-on-PC was determined by what Xbox One &lt;em&gt;was&lt;/em&gt;, what Cerberus &lt;em&gt;could not be on a client&lt;/em&gt;, what Azure Sphere &lt;em&gt;proved at scale&lt;/em&gt;, and what Caliptra &lt;em&gt;would later make visible as a choice rather than a technical necessity&lt;/em&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This article counts Microsoft on-die security-silicon programs (Generations 3-7 = Xbox One, Cerberus, Azure Sphere Pluton, Pluton-on-PC, Caliptra). The prior article counts TPM realisations (Generations 1-3 = standalone hardware TPM, firmware TPM, on-die TPM) [@prior-tpm-in-windows]. The two schemes share an index space but count different things. Project Cerberus appears as Generation 4 here even though it is &lt;em&gt;discrete&lt;/em&gt; (not on-die), because the count is over Microsoft security-silicon programs, not over TPM realisations.&lt;/p&gt;
&lt;/blockquote&gt;

A hardware element that anchors three separable services: Root of Trust for Storage (the chip can hold private keys that never leave it), Root of Trust for Reporting (the chip can sign attestations of its own state and of code it measured), and Root of Trust for Measurement (the chip records integrity hashes of code as it loads). The TPM 2.0 specification names all three; Pluton, Apple SEP, Caliptra, and OpenTitan implement subsets and combinations of them.
&lt;h3&gt;Generation 3 -- Xbox One on-die security processor (2013)&lt;/h3&gt;
&lt;p&gt;Existence proof. Microsoft and AMD co-designed the Xbox One SoC with an on-die security subsystem [@ms-pluton-blog-2020]. Console signing key. Hardware-enforced separation between Game OS and System OS. The Xbox One demonstrated, at consumer-console scale, that Microsoft and a chip vendor could ship an on-die security processor that survived a determined adversary with full physical access. Limitation: console-only. No TCG TPM 2.0 wire surface. Microsoft did not commit publicly that this design would ever leave the Xbox.&lt;/p&gt;
&lt;h3&gt;Generation 4 -- Project Cerberus (November 9, 2017)&lt;/h3&gt;
&lt;p&gt;Discrete RoT chip on the server BMC. NIST SP 800-193 alignment [@ms-learn-cerberus] [@nist-sp-800-193]. Open spec at OCP [@ocp-cerberus]; reference implementation on GitHub [@azure-cerberus-github]. Architecturally the inverse of Pluton: external chip, separate flash interception, dedicated authority. &lt;em&gt;That&lt;/em&gt; shape is right for a server motherboard. &lt;em&gt;That&lt;/em&gt; shape is wrong for a $700 ultrabook -- BOM cost, board area, and per-OEM design-in cost rule it out, and reintroducing an external bus would re-expose the very Andzakovic-class surface the program is trying to close. Cerberus is not a rejected design; it is the &lt;em&gt;server-side&lt;/em&gt; answer that runs alongside the client-side answer Pluton would later be. The two coexist in the November 17, 2020 announcement, which describes Cerberus as &lt;em&gt;&quot;providing a secure identity for the CPU that can be attested by Cerberus&quot;&lt;/em&gt; [@ms-pluton-blog-2020]. Server-side RoT and client-side RoT compose; they do not compete.&lt;/p&gt;
&lt;h3&gt;Generation 5 -- Azure Sphere Pluton MCU (April 2018)&lt;/h3&gt;
&lt;p&gt;The first public, named appearance of &quot;Pluton.&quot; MediaTek MT3620 SoC; Linux-based MCU OS; Azure Sphere Security Service in the cloud [@azure-blog-2018-azure-sphere] [@azure-blog-anatomy-secured-mcu]. &lt;em&gt;&quot;Our Pluton Security Subsystem is the heart of our security story&quot;&lt;/em&gt; [@azure-blog-anatomy-secured-mcu]. Three things became operationally proven in this generation. First, Microsoft-designed on-die security IP could be licensed to a third-party SoC and taped out under another vendor&apos;s process. Second, Microsoft-operated cloud-side firmware servicing was viable at MCU scale. Third, the &lt;em&gt;Seven Properties&lt;/em&gt; mapped cleanly onto the silicon-plus-firmware-plus-cloud triple. Limitation: MCU-class power and instruction set; not Windows; product retiring in 2027.The precision matters. The &lt;em&gt;design pattern&lt;/em&gt; -- on-die security processor, Microsoft-signed firmware, cloud or OS-channel updates -- dates to Xbox One in 2013. The &lt;em&gt;name&lt;/em&gt; &quot;Pluton&quot; first appears publicly in the April 2018 &lt;em&gt;Anatomy of a Secured MCU&lt;/em&gt; Azure Blog post [@azure-blog-anatomy-secured-mcu]. The 2020 PC announcement uses the name retroactively for the 2013 design. When narrating: the design is Xbox-era, the name is Azure-Sphere-era.&lt;/p&gt;
&lt;h3&gt;Generation 6 -- Pluton on Windows-PC SoCs (November 17, 2020)&lt;/h3&gt;
&lt;p&gt;The subject of section 5. Brief hand-off here. Microsoft, AMD, Intel, and Qualcomm announced that the Pluton design would ship on Windows-PC SoCs [@ms-pluton-blog-2020]. AMD Ryzen 6000 was the first silicon to actually ship, at CES 2022 [@phoronix-2022-amd-ryzen-pluton]. Microsoft Learn currently lists AMD Ryzen 6000 / 7000 / 8000 / 9000 / Ryzen AI; Intel Core Ultra 200V Series, Ultra Series 3, and Series 3; and Qualcomm Snapdragon 8cx Gen 3 and Snapdragon X Series [@ms-learn-pluton]. This is the generation the rest of the article lives in.&lt;/p&gt;
&lt;h3&gt;Generation 7 -- Caliptra 1.0 (April 2024)&lt;/h3&gt;
&lt;p&gt;Open-source datacenter Root of Trust. Co-designed by Microsoft, Google, AMD, and NVIDIA. Specification, RTL, ROM, and runtime all public on CHIPS Alliance [@caliptra-github] [@caliptra-spec]. &lt;em&gt;&quot;Caliptra targets datacenter-class SoCs like CPUs, GPUs, DPUs, TPUs. It is the specification, silicon logic, ROM and firmware for implementing a Root of Trust for Measurement (RTM) block inside an SoC&quot;&lt;/em&gt; [@caliptra-github]. Caliptra is not a successor to Pluton. It is a &lt;em&gt;parallel path&lt;/em&gt;, and that distinction is what makes Caliptra structurally important for this article: it makes the single-signer choice in Pluton visible as a choice, not a technical necessity. Caliptra exists. The single-signer property of Pluton-on-PC is therefore not the only design that 2024 hardware can support; it is the one Microsoft chose for the client.&lt;/p&gt;
&lt;p&gt;The five generations side by side:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Generation&lt;/th&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;On-die?&lt;/th&gt;
&lt;th&gt;Discrete?&lt;/th&gt;
&lt;th&gt;Open RTL?&lt;/th&gt;
&lt;th&gt;Multi-signer?&lt;/th&gt;
&lt;th&gt;Trust anchor&lt;/th&gt;
&lt;th&gt;Where it ships&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;3 -- Xbox One sec proc&lt;/td&gt;
&lt;td&gt;2013&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Microsoft (Xbox CA)&lt;/td&gt;
&lt;td&gt;Xbox One console&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4 -- Project Cerberus&lt;/td&gt;
&lt;td&gt;2017&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (spec/RI)&lt;/td&gt;
&lt;td&gt;No (per-deployment signer)&lt;/td&gt;
&lt;td&gt;Microsoft Azure CA (operator)&lt;/td&gt;
&lt;td&gt;Server BMC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5 -- Azure Sphere Pluton&lt;/td&gt;
&lt;td&gt;2018&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Microsoft (AS3)&lt;/td&gt;
&lt;td&gt;MCU (MediaTek MT3620)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6 -- Pluton-on-PC&lt;/td&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Microsoft (Windows Update)&lt;/td&gt;
&lt;td&gt;Windows 11 client SoCs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7 -- Caliptra 1.0&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Multi-vendor by deployment&lt;/td&gt;
&lt;td&gt;Per-chip integrator&lt;/td&gt;
&lt;td&gt;Datacenter SoCs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

flowchart TD
    Gen3[Gen 3: Xbox One 2013&lt;br /&gt;existence proof at scale]
    Gen4[Gen 4: Cerberus 2017&lt;br /&gt;open spec + NIST 800-193]
    Gen5[Gen 5: Azure Sphere 2018&lt;br /&gt;Pluton-on-MCU + cloud servicing]
    Gen6[Gen 6: Pluton-on-PC 2020&lt;br /&gt;TCG TPM 2.0 surface + Windows Update]
    Gen7[Gen 7: Caliptra 2024&lt;br /&gt;open-source datacenter RoT]
    Gen3 --&amp;gt;|console-only existence| Gen5
    Gen3 --&amp;gt;|client-side&lt;br /&gt;architecture| Gen6
    Gen4 --&amp;gt;|server-side&lt;br /&gt;composes with Gen 6| Gen6
    Gen4 --&amp;gt;|open governance&lt;br /&gt;refined into| Gen7
    Gen5 --&amp;gt;|MCU-scale to PC-scale| Gen6
    Gen6 -.parallel path.-&amp;gt; Gen7
&lt;p&gt;What, exactly, makes Generation 6 different from the four generations that came before it -- and what new trust does each of its design choices ask the reader to place in Microsoft?&lt;/p&gt;
&lt;h2&gt;5. The breakthrough -- on-die plus dedicated TEE plus Rust plus Windows Update&lt;/h2&gt;
&lt;p&gt;The November 17, 2020 announcement [@ms-pluton-blog-2020] is shorter than its consequences suggest. It makes four design choices explicit. Each one closes a specific architectural gap that 2014-2024 had opened. Each one also names a new trust that is now placed in Microsoft. This section walks the four choices, the gap each one closes, and the trust each one creates.&lt;/p&gt;
&lt;h3&gt;Design choice 1 -- on-die SoC integration&lt;/h3&gt;
&lt;p&gt;There is no off-package bus between the CPU and the Pluton block. The November 2020 announcement names this property as the structural answer to the bus-sniffing class: &lt;em&gt;&quot;attackers have begun to innovate ways to attack [the TPM], particularly in situations where an attacker can ... gain physical access to a PC ... target[ing] the communication channel between the CPU and TPM&quot;&lt;/em&gt; [@ms-pluton-blog-2020]. With Pluton, that communication channel is silicon, not a board trace. Andzakovic-class attacks have nothing to attack [@andzakovic-2019-tpm-sniffing].&lt;/p&gt;
&lt;p&gt;The new trust: the silicon supply chain. Microsoft licenses the IP block; AMD, Intel, and Qualcomm tape it out on TSMC or another foundry; the OEM integrates the resulting SoC into a finished product. None of those steps is on the public record at the bit level. (See open problem 5 in section 9 -- supply-chain integrity beyond firmware signing.)&lt;/p&gt;
&lt;h3&gt;Design choice 2 -- dedicated TEE, not shared&lt;/h3&gt;
&lt;p&gt;Pluton is &lt;em&gt;not&lt;/em&gt; the same coprocessor that runs SEV memory encryption (AMD) or CSME runtime services (Intel). It is a separate block on the SoC die, with its own ROM, its own firmware, and its own boundary. faulTPM-class attacks on the AMD PSP do not transitively drop Pluton secrets [@jacob-2023-faultpm], because Pluton is not running inside the PSP. The structural failure that defeated AMD fTPM -- one fault drops everything because the TEE is shared -- does not apply to Pluton-as-Pluton. (AMD-Ryzen-6000-class chips can ship Pluton silicon next to the existing PSP-based fTPM; the OEM picks which the host advertises as the system TPM via the Pluton (HSP) BIOS toggle and PSP-directory 0xB BIT36 soft fuse Garrett 2022 documents [@garrett-2022-pluton-rev]. Windows TBS exposes one TPM at a time. On systems the OEM exposes as fTPM, faulTPM-class attacks remain valid; on systems exposed as Pluton-as-TPM they no longer reach the chip&apos;s secret state.)&lt;/p&gt;
&lt;p&gt;The new trust: Microsoft&apos;s chip-level isolation engineering. The TEE is dedicated only because Microsoft and the chip vendor agreed to dedicate it. There is no public peer-reviewed audit demonstrating that the Pluton boundary is bit-for-bit non-shared with PSP / CSME on shipping silicon. The independent CHES 2024 study TPMScan [@tpmscan-2024] [@tpmscan-iacr] sampled 78 TPM 2.0 versions across 6 vendors, and the IACR TCHES record states explicitly that the corpus &lt;em&gt;&quot;include[s] recent Pluton-based iTPMs&quot;&lt;/em&gt; alongside dTPM, fTPM, and earlier iTPM variants from Microsoft, AMD, Intel, Infineon, ST, and Nuvoton [@tpmscan-iacr]. The paper&apos;s per-vendor findings centre on RSA / ECDSA nonce-leakage and command-timing observability across the corpus; the paper does not single Pluton out for a per-implementation audit, and it does not characterise Pluton&apos;s specific timing surface as worse or better than the iTPM cohort it sits in. The TPMScan study therefore &lt;em&gt;places&lt;/em&gt; Pluton inside the audited iTPM population without singling it out -- a useful baseline, not a Pluton-specific clean bill of health.&lt;/p&gt;
&lt;h3&gt;Design choice 3 -- Microsoft-authored Rust firmware&lt;/h3&gt;
&lt;p&gt;Microsoft Learn states it explicitly: &lt;em&gt;&quot;Pluton platforms in 2024 AMD and Intel systems will start to use a Rust-based firmware foundation given the importance of memory safety&quot;&lt;/em&gt; [@ms-learn-pluton]. Memory-safe firmware is a direct response to the firmware-CVE history -- TPM-Fail [@tpmfail-microsite], the long Intel ME / AMD PSP CVE backlog, and CVE-2025-2884 (worked example in section 8 below). The class of bug that a memory-safe runtime structurally rules out is large; it is not the entirety of the bug surface (logic bugs survive Rust), but it is the part that has driven the CVE economy in firmware-TPM territory for a decade.&lt;/p&gt;

Microsoft Learn commits to *&quot;a Rust-based firmware foundation&quot;* on 2024+ AMD and Intel platforms [@ms-learn-pluton]. Secondary technology press has named the runtime as Tock OS, the memory-safe embedded operating system maintained by an open community [@tock-github]. Tock is a plausible candidate -- it is the most mature publicly reviewed memory-safe embedded RTOS for the kind of constraints Pluton operates under. But Microsoft has not made the Tock attribution publicly. The honest reading is: Rust on the PC firmware path is committed; the specific runtime has not been named by Microsoft as of 2026. The reader who wants to track this should watch the Microsoft Learn Pluton page for an explicit runtime name.&lt;p&gt;The reason this hedge matters: &quot;Pluton runs Tock&quot; is widely repeated in tech press, and the difference between &quot;memory-safe Rust embedded OS&quot; and &quot;specifically Tock&quot; is the difference between an architectural commitment and a procurement choice. Both are interesting, but they are not the same statement.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Garrett&apos;s April 2022 reverse-engineering [@garrett-2022-pluton-rev] documented that the Pluton firmware blob on the 2022 AMD Ryzen 6000 BIOS he disassembled was an ARM image derived from the TCG TPM 2.0 reference code (section 6 carries the verbatim quote and section 8 carries the CVE-2025-2884 connection). That is the 2022 firmware on a 2022-vintage chip; it is not the 2024+ Rust runtime. Both observations are consistent: the 2022 ARM blob is what existed on the first silicon, and the 2024+ Rust runtime is what Microsoft Learn now commits to. CVE-2025-2884 (section 8) reaches this firmware exactly through the TPM 2.0 reference-code derivation Garrett identified.&lt;/p&gt;
&lt;p&gt;The new trust: Microsoft&apos;s compiler and SDLC. The chip ships running code that Microsoft authored. Whatever the compiler optimised away, whatever the test suite did not catch, whatever subtle un-&lt;code&gt;unsafe&lt;/code&gt;-block reasoning passed code review -- that becomes the property of the chip&apos;s trust anchor.&lt;/p&gt;
&lt;h3&gt;Design choice 4 -- Windows Update servicing path&lt;/h3&gt;
&lt;p&gt;Microsoft Learn: &lt;em&gt;&quot;Pluton platform supports loading new firmware delivered through operating system updates&quot;&lt;/em&gt; [@ms-learn-pluton]. The change in shape is this: from quarters-to-years (the OEM UEFI capsule rollout that TPM-Fail had to crawl through) to days-to-weeks (the Patch Tuesday cadence that already delivers Windows kernel updates to roughly 1.4 billion endpoints, the deployment scale Microsoft itself reports for Windows monthly active devices). Microsoft has not published a numerical SLA for Pluton firmware delivery; this article will not assert one. The change in &lt;em&gt;channel&lt;/em&gt; is the architectural fact.&lt;/p&gt;
&lt;p&gt;The new trust: Microsoft&apos;s signing key and Windows Update infrastructure. Whoever can sign for the Windows Update channel can, in principle, push firmware to every Pluton chip the channel reaches. This is the same trust that already underwrites the rest of Windows; Pluton extends it to the chip itself.&lt;/p&gt;
&lt;h3&gt;The trust shift, named explicitly&lt;/h3&gt;
&lt;p&gt;Pull the four choices together. Each closes a specific 2014-2024 attack class -- bus, shared-TEE, firmware-CVE, OEM-capsule patch latency. Each names a new trust placed in Microsoft -- silicon supply chain, chip-level isolation engineering, compiler and SDLC, signing key and Windows Update infrastructure. &lt;em&gt;On-die alone is not the breakthrough. The breakthrough is the combination.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The November 2020 announcement also commits to a property beyond TCG TPM 2.0: SHACK. &lt;em&gt;&quot;Pluton also provides the unique Secure Hardware Cryptography Key (SHACK) technology that helps ensure keys are never exposed outside of the protected hardware, even to the Pluton firmware itself&quot;&lt;/em&gt; [@ms-pluton-blog-2020]. The TCG TPM 2.0 specification requires that keys be non-exportable from the chip; SHACK extends the boundary one ring inward, naming a class of keys that the firmware running on Pluton itself cannot read. This is Microsoft&apos;s claim that Pluton offers a &lt;em&gt;stronger&lt;/em&gt; property than the TCG TPM 2.0 spec requires. Verifying that claim from outside Microsoft requires source access Microsoft has not published.&lt;/p&gt;

A Pluton property named in the November 17, 2020 announcement [@ms-pluton-blog-2020]; Microsoft&apos;s claim that Pluton&apos;s non-exportability boundary extends one ring inside the TCG TPM 2.0 boundary, so keys are unreadable even by Pluton firmware. See the §5 prose paragraph above for the verbatim Microsoft quote and the article&apos;s hedge that no external peer-reviewed validation of SHACK exists as of 2026.
&lt;h3&gt;How the chip boots and how the chip gets patched&lt;/h3&gt;
&lt;p&gt;The boot-and-attest sequence below is the public shape of how Pluton starts and how new firmware reaches it. The exact ROM-to-FMC-to-runtime chain is generic to on-die RoT designs (Caliptra exposes this shape openly in its source [@caliptra-github]); Pluton&apos;s specific protocol details are not all on the public record, so the diagram captures the architectural shape rather than a Microsoft-internal protocol.&lt;/p&gt;

sequenceDiagram
    participant SoC as SoC reset
    participant ROM as Pluton ROM
    participant FMC as Pluton FMC
    participant RT as Pluton runtime
    participant Win as Windows + WU
    SoC-&amp;gt;&amp;gt;ROM: power-on, Pluton enters ROM
    ROM-&amp;gt;&amp;gt;ROM: verify FMC signature against on-die public key
    ROM-&amp;gt;&amp;gt;FMC: hand off after measurement
    FMC-&amp;gt;&amp;gt;FMC: verify runtime signature
    FMC-&amp;gt;&amp;gt;RT: hand off, runtime exposes TPM 2.0 CRB
    RT--&amp;gt;&amp;gt;Win: TPM 2.0 commands over CRB
    Win-&amp;gt;&amp;gt;Win: Patch Tuesday delivers signed Pluton blob
    Win-&amp;gt;&amp;gt;RT: stage new firmware via OS update channel
    RT-&amp;gt;&amp;gt;FMC: queue new runtime, reboot to apply
    FMC-&amp;gt;&amp;gt;FMC: verify new runtime signature, commit
&lt;p&gt;The detection logic that follows is the structural shape of the &lt;code&gt;Get-Tpm&lt;/code&gt; PowerShell query that section 10 will revisit. It is mocked here to make the four-letter &lt;code&gt;MSFT&lt;/code&gt; check explicit.&lt;/p&gt;
&lt;p&gt;{&lt;code&gt;// Mock of the Windows TPM Base Services (TBS) manufacturer query. // Real Get-Tpm reads ManufacturerIdTxt from the TPM 2.0 capability // response and matches the four-character ASCII manufacturer. const manufacturers = {   &apos;MSFT&apos;: &apos;Microsoft Pluton&apos;,   &apos;INTC&apos;: &apos;Intel PTT (firmware TPM in CSME)&apos;,   &apos;AMD &apos;: &apos;AMD fTPM (firmware TPM in PSP)&apos;,   &apos;IFX&apos;:  &apos;Infineon discrete TPM&apos;,   &apos;STM&apos;:  &apos;STMicro discrete TPM&apos;,   &apos;NTC&apos;:  &apos;Nuvoton discrete TPM&apos;, }; function classify(mfr) {   return manufacturers[mfr] || &apos;Unknown / non-TCG TPM&apos;; } console.log(&apos;MSFT  =&amp;gt;&apos;, classify(&apos;MSFT&apos;)); console.log(&apos;INTC  =&amp;gt;&apos;, classify(&apos;INTC&apos;)); console.log(&apos;AMD   =&amp;gt;&apos;, classify(&apos;AMD &apos;)); console.log(&apos;IFX   =&amp;gt;&apos;, classify(&apos;IFX&apos;));&lt;/code&gt;}&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; The Pluton breakthrough is the &lt;em&gt;combination&lt;/em&gt;, not on-die alone. On-die plus dedicated TEE plus memory-safe firmware plus OS-channel updates -- four design choices, each closing a different 2014-2024 attack class, each placing a new trust in Microsoft. The chip is the cheapest part of the system. The cost is what those four trusts add up to.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What is actually shipping in 2026? Hardware lists, default-on / default-off behavior, vendor pushback that survived from 2022 into 2026 -- the gap between marketing claim and shipping reality.&lt;/p&gt;
&lt;h2&gt;6. Pluton in 2026 -- what is shipping, where, and how to verify&lt;/h2&gt;
&lt;p&gt;The 2020 announcement is now five and a half years old. The 2022 first-silicon shipment is four. What is the actual fleet shape in 2026?&lt;/p&gt;
&lt;h3&gt;The Microsoft-published hardware list&lt;/h3&gt;
&lt;p&gt;The current Microsoft Learn Pluton page enumerates the supported silicon: AMD Ryzen 6000, 7000, 8000, 9000, and Ryzen AI; Intel Core Ultra 200V Series, Ultra Series 3, and Series 3; and Qualcomm Snapdragon 8cx Gen 3 and Snapdragon X Series [@ms-learn-pluton]. Every chip on that list ships with Pluton silicon present on the die. &lt;em&gt;Present&lt;/em&gt; and &lt;em&gt;enabled by default&lt;/em&gt; are not the same property, which is the point of the next subsection.&lt;/p&gt;
&lt;h3&gt;Default-on versus default-off varies by OEM SKU&lt;/h3&gt;
&lt;p&gt;The first x86 silicon to ship with Pluton was AMD Ryzen 6000 &quot;Rembrandt&quot;, at CES 2022. Phoronix&apos;s launch coverage [@phoronix-2022-amd-ryzen-pluton] confirms that the CES 2022 keynote disclosed the integration. The vendor responses that followed in March 2022 set the OEM-by-OEM posture that the fleet still reflects in 2026. The Register obtained vendor statements [@register-2022-pluton]. Lenovo deployed the chip on AMD Ryzen 6000 ThinkPads but disabled it: &lt;em&gt;&quot;AMD Ryzen 6000 ThinkPads will include Pluton as it&apos;s present in those AMD chips, though the feature will be disabled by default&quot;&lt;/em&gt;; Intel-powered ThinkPads &lt;em&gt;&quot;will not support Microsoft Pluton at launch&quot;&lt;/em&gt;; the Snapdragon 8cx Gen 3 Lenovo X13s did include Pluton [@register-2022-pluton]. Dell&apos;s reply was the most direct: &lt;em&gt;&quot;Pluton does not align with Dell&apos;s approach to hardware security and our most secure commercial PC requirements&quot;&lt;/em&gt; [@register-2022-pluton] [@pcworld-2022-pluton]. HP declined to comment.&lt;/p&gt;
&lt;p&gt;The 2024 inflection is the Copilot+ PC program. Microsoft Surface and Qualcomm Snapdragon X Elite / Snapdragon X Series Copilot+ devices ship Pluton enabled by default [@ms-learn-pluton]. This is the first product class where retail-bought Windows 11 hardware turns Pluton on at the factory.The 2024 Copilot+ inflection is the first time a high-volume consumer Windows-PC SKU ships Pluton on by default. Prior to Copilot+, Pluton was either off (Lenovo AMD Ryzen 6000 ThinkPads), absent (Dell), or behind a BIOS toggle the user had to find. Copilot+ collapses the discoverability problem because Windows 11 itself depends on the secure-boot and credential-protection primitives that Pluton hosts when the OEM has enabled it.&lt;/p&gt;
&lt;h3&gt;Linux 6.3 -- February 20, 2023&lt;/h3&gt;
&lt;p&gt;The standard TCG Command Response Buffer (CRB) interface that Pluton exposes is reachable from Linux. Phoronix records the merge: &lt;em&gt;&quot;Linus Torvalds merged to Linux 6.3 Git the TPM CRB support for Microsoft&apos;s controversial Pluton security co-processor&quot;&lt;/em&gt; [@phoronix-2023-pluton-linux63] [@kernel-org-pluton-merge]. The driver author was Matthew Garrett [@kernel-org-pluton-merge]. Pluton-as-TPM is now reachable from non-Windows operating systems via the standard TCG CRB transport. This constrains -- although it does not eliminate -- the &quot;Microsoft-only black box&quot; narrative. The chip speaks the open TCG wire protocol that any operating system can talk to.&lt;/p&gt;
&lt;h3&gt;Garrett&apos;s reverse-engineering -- April 2022&lt;/h3&gt;
&lt;p&gt;Matthew Garrett&apos;s April 2022 disassembly of the Asus ROG Zephyrus G14 BIOS [@garrett-2022-pluton-rev] yielded two facts that matter for the rest of this article. First, the user-controllable BIOS Pluton (HSP) toggle on AMD Ryzen 6000 may not be a hardware power-down. Garrett&apos;s reading: &lt;em&gt;&quot;PSP directory entry 0xB BIT36 ... if bit 36 is set, the PSP tells Pluton to turn itself off and will no longer send any commands to it&quot;&lt;/em&gt; [@garrett-2022-pluton-rev]. The toggle is a soft fuse. Inventory queries that report &quot;Pluton present&quot; do not always distinguish enabled from soft-disabled. Second, &lt;em&gt;&quot;there&apos;s a blob starting at 0x0069b610 that appears to be firmware for Pluton -- it contains chunks that appear to be the reference TPM2 implementation, and it broadly decompiles as valid ARM code&quot;&lt;/em&gt; [@garrett-2022-pluton-rev]. The Pluton firmware blob is, on the silicon Garrett looked at, an ARM image derived from the TCG TPM 2.0 reference code. That is the observation that makes CVE-2025-2884 (section 8) reachable inside Pluton firmware too.&lt;/p&gt;

On AMD Ryzen 6000 / 7000 / 8000 platforms, the OEM can set PSP directory entry 0xB bit 36 in the AMD-firmware part of the BIOS to instruct the PSP to *&quot;tell Pluton to turn itself off&quot;* [@garrett-2022-pluton-rev]. This is a soft fuse, not a hardware power-down. The host&apos;s TPM advertisement (`Get-Tpm`) does not always distinguish enabled-Pluton from soft-disabled-Pluton; verification requires inspecting the BIOS-level Pluton (HSP) toggle directly, or correlating against the Plug-and-Play device list.
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Garrett&apos;s PSP-directory soft-fuse documentation [@garrett-2022-pluton-rev] is the practical pitfall of any 2026 Pluton procurement audit. An OEM can ship AMD Ryzen 6000 / 7000 / 8000 silicon with Pluton soft-disabled at boot. Inventory queries that count &quot;Pluton-present&quot; SKUs without correlating against the BIOS-level Pluton (HSP) toggle will overcount by an unknown margin. Section 10 walks the practical detection path.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The fleet shape, in one comparison table:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;First shipped&lt;/th&gt;
&lt;th&gt;Default state at launch&lt;/th&gt;
&lt;th&gt;Vendor posture today&lt;/th&gt;
&lt;th&gt;Linux support&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;AMD Ryzen 6000 mobile&lt;/td&gt;
&lt;td&gt;January 2022 [@phoronix-2022-amd-ryzen-pluton]&lt;/td&gt;
&lt;td&gt;Off on Lenovo ThinkPad [@register-2022-pluton]; Dell declined [@pcworld-2022-pluton]&lt;/td&gt;
&lt;td&gt;Per-OEM; soft-fuse trap on Lenovo&lt;/td&gt;
&lt;td&gt;Linux 6.3 CRB driver [@phoronix-2023-pluton-linux63]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD Ryzen 7000 / 8000 / 9000 / Ryzen AI&lt;/td&gt;
&lt;td&gt;2023-2025&lt;/td&gt;
&lt;td&gt;Per-OEM SKU&lt;/td&gt;
&lt;td&gt;Microsoft Learn lists as supported [@ms-learn-pluton]&lt;/td&gt;
&lt;td&gt;Same CRB driver&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intel Core Ultra 200V / Series 3&lt;/td&gt;
&lt;td&gt;2024-2025&lt;/td&gt;
&lt;td&gt;Per-OEM SKU&lt;/td&gt;
&lt;td&gt;Microsoft Learn lists as supported [@ms-learn-pluton]&lt;/td&gt;
&lt;td&gt;Same CRB driver&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Snapdragon 8cx Gen 3 (Lenovo X13s)&lt;/td&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;On at launch [@register-2022-pluton]&lt;/td&gt;
&lt;td&gt;Shipping&lt;/td&gt;
&lt;td&gt;Same CRB driver&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Snapdragon X Series Copilot+ PCs&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;On by default [@ms-learn-pluton]&lt;/td&gt;
&lt;td&gt;Microsoft + Qualcomm core program&lt;/td&gt;
&lt;td&gt;Same CRB driver&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft Surface Copilot+&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;On by default [@ms-learn-pluton]&lt;/td&gt;
&lt;td&gt;First-party Microsoft hardware&lt;/td&gt;
&lt;td&gt;Same CRB driver&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

flowchart LR
    AMD[AMD Ryzen 6000-9000&lt;br /&gt;+ Ryzen AI]
    Intel[Intel Core Ultra 200V&lt;br /&gt;Series 3]
    Qualcomm[Qualcomm Snapdragon&lt;br /&gt;8cx Gen 3 + X Series]
    Lenovo[Lenovo&lt;br /&gt;ThinkPad / X13s]
    Dell[Dell&lt;br /&gt;commercial]
    HP[HP&lt;br /&gt;commercial]
    Surface[Microsoft Surface&lt;br /&gt;Copilot+]
    OEMx[Snapdragon X&lt;br /&gt;Copilot+ OEMs]
    Off[Default off&lt;br /&gt;at launch]
    Vendor[Vendor declined&lt;br /&gt;to ship]
    On[Default on&lt;br /&gt;at retail]
    AMD --&amp;gt; Lenovo
    AMD --&amp;gt; Dell
    AMD --&amp;gt; HP
    Intel --&amp;gt; Lenovo
    Qualcomm --&amp;gt; Lenovo
    Qualcomm --&amp;gt; Surface
    Qualcomm --&amp;gt; OEMx
    Lenovo --&amp;gt;|2022 Ryzen 6000| Off
    Dell --&amp;gt;|&quot;does not align&quot;| Vendor
    HP --&amp;gt;|declined comment| Vendor
    Lenovo --&amp;gt;|X13s 8cx Gen 3| On
    Surface --&amp;gt; On
    OEMx --&amp;gt; On
&lt;p&gt;The detection logic for the Garrett soft-fuse trap, mocked here so the structural shape is explicit:&lt;/p&gt;
&lt;p&gt;{&lt;code&gt;// Mock of the PSP directory entry 0xB inspection that Garrett 2022 // documented. Real verification reads the AMD-firmware bytes off the // SPI flash; this demonstrates the bit-36 check that decides // &quot;enabled&quot; vs &quot;soft-disabled&quot;. function plutonState(plutonPresent, pspDir0xB_BIT36) {   if (!plutonPresent) return &apos;absent&apos;;   if (pspDir0xB_BIT36 === 1) return &apos;soft-disabled&apos;;  // PSP told to silence Pluton   return &apos;enabled&apos;; } console.log(&apos;Pluton present, BIT36=0 =&amp;gt;&apos;, plutonState(true, 0)); console.log(&apos;Pluton present, BIT36=1 =&amp;gt;&apos;, plutonState(true, 1)); console.log(&apos;No Pluton silicon       =&amp;gt;&apos;, plutonState(false, 0));&lt;/code&gt;}&lt;/p&gt;
&lt;p&gt;Pluton is not the only on-die security processor in 2026. Apple has the Secure Enclave Processor. Google has Titan M2. The OCP coalition has Caliptra. How does Pluton compare, and what does the comparison reveal about Microsoft&apos;s design choices?&lt;/p&gt;
&lt;h2&gt;7. Competing approaches -- Apple SEP, Google Titan M2, OpenTitan, Caliptra, Cerberus&lt;/h2&gt;
&lt;p&gt;Pluton is not alone. The platforms below are its nearest analogues -- the strongest evidence that Microsoft&apos;s design choices were &lt;em&gt;choices&lt;/em&gt;, not technical necessities.&lt;/p&gt;
&lt;h3&gt;Apple Secure Enclave Processor&lt;/h3&gt;
&lt;p&gt;Apple&apos;s &lt;em&gt;Apple Platform Security&lt;/em&gt; documentation describes SEP as &lt;em&gt;&quot;a dedicated secure subsystem integrated into Apple [SoC] ... isolated from the main processor to provide an extra layer of security&quot;&lt;/em&gt; [@apple-sep]. By deployment count it is the most mature single-vendor on-die security processor on the planet -- shipping in every iPhone since the iPhone 5s (2013), every iPad since iPad Air, and every Apple-silicon Mac [@apple-sep] [@wikipedia-apple-silicon]. The architecture has matured generation by generation: a Boot ROM as the hardware root of trust; an Apple-customised L4 microkernel; a Memory Protection Engine that combines AES-XEX with CMAC and an anti-replay tree on A11 / S4 and later; a Boot Monitor on A13 and later that hashes the loaded image and updates the SCIP (System Coprocessor Integrity Protection) settings before transferring control; and on A14 / M1 and later, the Memory Protection Engine &lt;em&gt;&quot;supports two ephemeral memory protection keys&quot;&lt;/em&gt; -- one for SEP-private data and a second one shared with the Secure Neural Engine [@apple-sep].&lt;/p&gt;
&lt;p&gt;The trade-off versus Pluton is not the architecture -- it is the &lt;em&gt;governance model&lt;/em&gt;. Apple owns the silicon, the operating system, the signing key, and the device. The multi-signer political question never arises because there is only one signer for every layer of the stack. The cost: complete lock-in. The Apple T2 line, which shipped in 2017-2020 Intel Macs as a discrete A10-derived security chip running bridgeOS, inherited the A10 Boot ROM [@wikipedia-apple-t2]. The A10 Boot ROM has the structurally important property that no Boot-ROM-resident bug can be patched without silicon respin -- which the &lt;em&gt;checkm8&lt;/em&gt; / &lt;em&gt;blackbird&lt;/em&gt; class of jailbreaks demonstrated end-to-end. T2 was discontinued June 5, 2023 [@wikipedia-apple-t2]. The lesson is direct: &lt;em&gt;renewable security&lt;/em&gt; (Seven Properties #6) is not optional. Even Apple&apos;s vertically integrated stack pays the price when a generation ships without it.&lt;/p&gt;

A dedicated secure subsystem integrated into Apple [SoC] ... isolated from the main processor to provide an extra layer of security. -- Apple, *Apple Platform Security* [@apple-sep]
&lt;h3&gt;Google Titan M / Titan M2 and OpenTitan&lt;/h3&gt;
&lt;p&gt;Google announced Titan M with the Pixel 3 launch in October 2018 [@pixel-3-titan-m]: &lt;em&gt;&quot;This year, with Pixel 3, we&apos;re advancing our investment in secure hardware with Titan M, an enterprise-grade security chip custom built for Pixel 3...&quot;&lt;/em&gt; [@pixel-3-titan-m]. Titan M2 followed with Pixel 6 in October 2021 [@pixel-6-titan-m2]. Both are discrete or in-package security chips on Pixel for Android Verified Boot, StrongBox-grade key storage, anti-rollback, and lock-screen verification. Both are Google-vertical: Google designs the chip, Google operates the cloud back end, Google ships the OS.&lt;/p&gt;
&lt;p&gt;OpenTitan is the open-source descendant. Hosted by lowRISC, it is &lt;em&gt;&quot;the first open source project building a transparent, high-quality reference design and integration guidelines for silicon root of trust (RoT) chips&quot;&lt;/em&gt; [@opentitan-home]. RISC-V Ibex core; hardware AES, HMAC, KMAC, and OTBN big-number engines; full RTL, ROM, and verification stack public; Apache 2.0 license. OpenTitan reached commercial availability on February 13, 2024 [@opentitan-commercial] -- the first open-source silicon project to do so. The press release names the nine coalition members verbatim: &lt;em&gt;&quot;Google, Winbond, Nuvoton, zeroRISC, Rivos, Western Digital, Seagate, ETH Zurich and Giesecke+Devrient, hosted by the non-profit lowRISC CIC&quot;&lt;/em&gt; [@opentitan-commercial]. OpenTitan is the closest existing answer to &quot;what would an open-source Pluton look like?&quot; -- but as of 2026 it is discrete or in-package, not on-die in an application SoC.The lowRISC press release is precise on a point that secondary press has frequently flubbed. lowRISC is the &lt;em&gt;host&lt;/em&gt; organisation for OpenTitan; it is not a member of the nine. The nine commercially announced coalition members on February 13, 2024 are Google, Winbond, Nuvoton, zeroRISC, Rivos, Western Digital, Seagate, ETH Zurich, and Giesecke+Devrient [@opentitan-commercial]. The distinction matters because lowRISC&apos;s role is governance, not deployment.&lt;/p&gt;
&lt;h3&gt;Caliptra&lt;/h3&gt;
&lt;p&gt;The OCP coalition&apos;s open-source datacenter Root of Trust. Specification, RTL, ROM, FMC, and runtime are public on CHIPS Alliance [@caliptra-github] [@caliptra-spec]. Founders: Microsoft, Google, AMD, NVIDIA. Google Cloud&apos;s Caliptra-1.0 announcement reports: &lt;em&gt;&quot;the Caliptra specification and open-source hardware and software implementation is complete, reaching the revision 1.0 milestone.&quot;&lt;/em&gt; The Google Cloud post adds that the Caliptra IP block is being integrated by member companies into chips expected in the market in 2026. Caliptra targets &lt;em&gt;&quot;datacenter-class SoCs like CPUs, GPUs, DPUs, TPUs&quot;&lt;/em&gt; [@caliptra-github]. It is not a Pluton substitute on Windows clients -- the form factor is different and the threat model assumes server-side operators.&lt;/p&gt;

The instinct, on reading that Caliptra is open-source and multi-vendor, is to ask why Microsoft does not just put Caliptra into the next Surface. Three reasons. First, form factor: Caliptra is a datacenter-SoC IP block; the integration target is a CPU / GPU / DPU / TPU package on a \$20,000 server motherboard, not a \$700 ultrabook. Second, signer model: Caliptra is multi-vendor *by deployment*, but each Caliptra-equipped chip still has *one* signer -- the integrating chip vendor (AMD signs AMD&apos;s Caliptra firmware; NVIDIA signs NVIDIA&apos;s). The choice of signer moved; the count of signers per chip did not. Third, threat model: Caliptra&apos;s RTM serves a server attestation flow ending at a fleet operator (Google, Microsoft, NVIDIA, the rack owner), not a client BitLocker flow that has to survive a powered-off laptop on an airport conveyor belt.&lt;p&gt;Caliptra is the right counter-design to the &lt;em&gt;governance&lt;/em&gt; of Pluton, not its &lt;em&gt;form factor&lt;/em&gt;. It is what makes the single-signer-per-chip choice in Pluton-on-PC visible as a choice, not a technical necessity. That visibility is the whole reason this section exists.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Project Cerberus -- still in production&lt;/h3&gt;
&lt;p&gt;Cerberus has not been retired. Microsoft Learn describes it as &lt;em&gt;&quot;a NIST 800-193 compliant hardware root-of-trust with an identity that cannot be cloned&quot;&lt;/em&gt; [@ms-learn-cerberus] [@nist-sp-800-193] running in Azure datacenters; the GitHub reference implementation [@azure-cerberus-github] is actively maintained. In the November 2020 Pluton announcement, Microsoft framed Cerberus as the &lt;em&gt;server-side&lt;/em&gt; counterpart to Pluton&apos;s client-side root of trust [@ms-pluton-blog-2020] -- the two are designed to compose, with Pluton providing the per-CPU identity that an upstream Cerberus chip (or Caliptra-equipped server) can attest. The distinction between Pluton-as-client-RoT and Cerberus-as-server-RoT is operational, not architectural rivalry.&lt;/p&gt;
&lt;h3&gt;The cross-design comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Pluton-on-PC&lt;/th&gt;
&lt;th&gt;Apple SEP&lt;/th&gt;
&lt;th&gt;Google Titan M2&lt;/th&gt;
&lt;th&gt;Caliptra&lt;/th&gt;
&lt;th&gt;Cerberus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Physical location&lt;/td&gt;
&lt;td&gt;On-die in application SoC&lt;/td&gt;
&lt;td&gt;On-die in Apple SoC&lt;/td&gt;
&lt;td&gt;Discrete or in-package on Pixel&lt;/td&gt;
&lt;td&gt;On-die in datacenter SoC&lt;/td&gt;
&lt;td&gt;Discrete on server BMC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trust anchor&lt;/td&gt;
&lt;td&gt;Microsoft (chip-firmware signer)&lt;/td&gt;
&lt;td&gt;Apple (vertical)&lt;/td&gt;
&lt;td&gt;Google (vertical)&lt;/td&gt;
&lt;td&gt;Per-chip integrator&lt;/td&gt;
&lt;td&gt;Operator (Microsoft on Azure)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update channel&lt;/td&gt;
&lt;td&gt;Windows Update [@ms-learn-pluton]&lt;/td&gt;
&lt;td&gt;iOS / macOS update&lt;/td&gt;
&lt;td&gt;Android / Pixel update&lt;/td&gt;
&lt;td&gt;Server-side platform update&lt;/td&gt;
&lt;td&gt;OEM / operator update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firmware language&lt;/td&gt;
&lt;td&gt;Rust (2024+) [@ms-learn-pluton]&lt;/td&gt;
&lt;td&gt;Apple-customised L4 [@apple-sep]&lt;/td&gt;
&lt;td&gt;Not publicly disclosed&lt;/td&gt;
&lt;td&gt;Open-source firmware [@caliptra-github]&lt;/td&gt;
&lt;td&gt;C / C++ (open) [@azure-cerberus-github]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open source&lt;/td&gt;
&lt;td&gt;Closed&lt;/td&gt;
&lt;td&gt;Closed&lt;/td&gt;
&lt;td&gt;Closed (driver public)&lt;/td&gt;
&lt;td&gt;Open (RTL + firmware)&lt;/td&gt;
&lt;td&gt;Open (RI on GitHub)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-signer&lt;/td&gt;
&lt;td&gt;Single&lt;/td&gt;
&lt;td&gt;Single&lt;/td&gt;
&lt;td&gt;Single&lt;/td&gt;
&lt;td&gt;Multi-vendor by deployment&lt;/td&gt;
&lt;td&gt;Per-deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standards exposure&lt;/td&gt;
&lt;td&gt;TCG TPM 2.0 over CRB&lt;/td&gt;
&lt;td&gt;Apple-private&lt;/td&gt;
&lt;td&gt;Android Verified Boot, StrongBox&lt;/td&gt;
&lt;td&gt;Caliptra spec; SPDM 1.3 in 2.0&lt;/td&gt;
&lt;td&gt;NIST SP 800-193&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best-known structural attack&lt;/td&gt;
&lt;td&gt;None peer-reviewed Pluton-specific (TPMScan corpus only [@tpmscan-2024])&lt;/td&gt;
&lt;td&gt;T2 inherits A10 Boot ROM (checkm8) [@wikipedia-apple-t2]&lt;/td&gt;
&lt;td&gt;None public on Titan M2&lt;/td&gt;
&lt;td&gt;Reviewed open-source RTL&lt;/td&gt;
&lt;td&gt;Mature; deployed since 2017&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best suited for&lt;/td&gt;
&lt;td&gt;Windows 11 client procurement&lt;/td&gt;
&lt;td&gt;Apple devices&lt;/td&gt;
&lt;td&gt;Pixel devices&lt;/td&gt;
&lt;td&gt;Datacenter SoC integration&lt;/td&gt;
&lt;td&gt;Server BMC RoT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Form factor&lt;/td&gt;
&lt;td&gt;General-purpose PC&lt;/td&gt;
&lt;td&gt;Apple devices&lt;/td&gt;
&lt;td&gt;Pixel phones&lt;/td&gt;
&lt;td&gt;Datacenter SoCs&lt;/td&gt;
&lt;td&gt;Server motherboards&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The political question made architectural. Caliptra and OpenTitan answer &quot;what would multi-signer / open-source look like?&quot; in the &lt;em&gt;datacenter&lt;/em&gt;. Apple SEP demonstrates that the single-vendor / single-signer model is operationally durable at consumer scale -- but only when the vendor owns the entire stack. Pluton sits in the awkward middle: single-signer but multi-OEM, closed-firmware but open-Linux-driver, on-die but the chip vendor is not the firmware vendor. That middle position is what makes the procurement debate hard, and it is what makes the open problems in section 9 unresolved.&lt;/p&gt;
&lt;p&gt;Pluton is the strongest on-die RoT for Windows clients in 2026, with the fastest patch cadence, the broadest hardware list, and the most mature design pedigree. What can it still not do?&lt;/p&gt;
&lt;h2&gt;8. What Pluton still cannot do&lt;/h2&gt;
&lt;p&gt;Two structural limits inherited from the prior article, and a third that is specific to single-signer on-die firmware. The first two say what &lt;em&gt;no&lt;/em&gt; on-die RoT can do. The third says what no &lt;em&gt;Microsoft-only-signer&lt;/em&gt; RoT can do. The worked example is CVE-2025-2884.&lt;/p&gt;
&lt;h3&gt;Limit 1 -- RTS+RTR, not RTE&lt;/h3&gt;
&lt;p&gt;A passive cryptoprocessor -- including Pluton -- cannot detect that the &lt;em&gt;wrong code&lt;/em&gt; measured itself. It can only refuse to release sealed material when PCRs do not match the stored policy. The prior article&apos;s section 7.1 [@prior-tpm-in-windows] walks the bit-level reasoning. On-die does not change this. Pluton implements Root of Trust for Storage and Root of Trust for Reporting; it does not implement a Root of Trust for Execution that runs the code outside the chip on the reader&apos;s behalf.&lt;/p&gt;
&lt;h3&gt;Limit 2 -- The VMK transits OS RAM at unseal&lt;/h3&gt;
&lt;p&gt;The Volume Master Key must enter RAM during Trusted Boot, and once unsealed it lives in OS-controlled memory. An attacker who reads OS RAM at the release moment, or any time after, defeats TPM-only BitLocker regardless of TPM strength (prior article sections 7.2 and 7.3 [@prior-tpm-in-windows]). Pluton&apos;s on-die location eliminates the dTPM &lt;em&gt;bus&lt;/em&gt; surface; it does not change which side of the unseal boundary the VMK lives on. This is why Virtualization-Based Security, Credential Guard, DRTM, and System Guard Secure Launch exist as &lt;em&gt;complements&lt;/em&gt;, not substitutes, to the TPM/Pluton primitive.&lt;/p&gt;
&lt;h3&gt;Limit 3 -- Single-signer revocation impossibility&lt;/h3&gt;
&lt;p&gt;This is the new one. State the result precisely: &lt;em&gt;if the on-die RoT firmware can only be authenticated by a single signer S, then the chip&apos;s trust anchor cannot be retired without bricking the chip&apos;s firmware-update path, regardless of whether S is compromised, coerced, or jurisdictionally constrained.&lt;/em&gt; This is not a cryptographic impossibility. It is a key-management impossibility. Revocation requires either (a) a second trust anchor provisioned at chip manufacture and held outside S&apos;s control -- i.e., multi-signer at the &lt;em&gt;chip&lt;/em&gt; level, not just at the &lt;em&gt;deployment&lt;/em&gt; level -- or (b) physical replacement of the silicon. Caliptra and Cerberus weaken the failure mode by &lt;em&gt;moving&lt;/em&gt; the signer to the integrating chip vendor or to the operator, but they do not eliminate it; each chip still has one signing root.&lt;/p&gt;

A key-management (not cryptographic) impossibility: a chip whose firmware-authentication root has one signer in ROM cannot have that signer retired without bricking the firmware-update path or replacing the silicon. Pluton-on-PC silicon shipping today bakes a Microsoft-rooted public key into ROM. See the §8 prose paragraph above and the Callout below for the precise statement of conditions and the operational reasoning (FIDO2 / threshold-signature analogues; §5 trust-shift cross-anchor).
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; There is no cryptographic objection to multi-signer RoT firmware. The math has been understood since the FIDO2 multi-credential work, and threshold signatures have been a primitive for decades. The objection is operational: replacing public keys after the chip is in the field requires either fab-time multi-signer or hardware replacement. Section 5 named the choice; this Callout names what makes it hard to undo.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Worked example -- CVE-2025-2884&lt;/h3&gt;
&lt;p&gt;On June 10, 2025, NVD published CVE-2025-2884 [@cve-2025-2884]. The CERT/CC coordination ticket is VU#282450 [@cert-cc-vu-282450]. The vulnerability is an out-of-bounds read in the &lt;code&gt;CryptHmacSign&lt;/code&gt; function of the TCG TPM 2.0 reference implementation, Level 00, Revision 01.83 (March 2024). The CERT/CC document describes the impact: &lt;em&gt;&quot;An authenticated local attacker can send malicious commands to a vulnerable TPM interface, resulting in information disclosure or denial of service of the TPM&quot;&lt;/em&gt; [@cert-cc-vu-282450].&lt;/p&gt;
&lt;p&gt;Crucially for attribution, the CERT/CC ticket is explicit about who reported it and who wrote it up: &lt;em&gt;&quot;Thanks to the reporter, who wishes to remain anonymous. This document was written by Vijay Sarvepalli&quot;&lt;/em&gt; [@cert-cc-vu-282450]. The reporter is anonymous; the CERT/CC document author is Vijay Sarvepalli. Tech press accounts that have attributed the disclosure to Quarkslab are incorrect; the primary CERT/CC record is dispositive.The Quarkslab attribution that some 2025 tech-press accounts use for CVE-2025-2884 is contradicted by the primary CERT/CC record VU#282450, which says verbatim: &lt;em&gt;&quot;Thanks to the reporter, who wishes to remain anonymous. This document was written by Vijay Sarvepalli&quot;&lt;/em&gt; [@cert-cc-vu-282450]. The reporter is anonymous. The document author is Vijay Sarvepalli. This article uses that attribution and only that attribution.&lt;/p&gt;
&lt;p&gt;Multiple downstream products are affected. Intel published Security Advisory SA-01209 [@intel-sa-01209]. Siemens published SSA-628843 [@siemens-ssa-628843]. The libtpms project assigned CVE-2025-49133 [@cve-2025-49133] for its own derivative; the upstream fix landed in libtpms commit &lt;code&gt;04b2d8e9&lt;/code&gt; [@libtpms-commit-04b2d8e9]. The TCG itself coordinated VRT0009 [@tcg-vrt0009-advisory] and a TPM 2.0 Library Specification v1.83 errata (cited via NVD as the verifiable mirror -- the TCG site returns 403 to non-browser User-Agents).&lt;/p&gt;
&lt;p&gt;Why this is the right worked example for Pluton. Garrett&apos;s April 2022 reverse-engineering [@garrett-2022-pluton-rev] documented that the Pluton firmware blob in the AMD Ryzen 6000 BIOS is &lt;em&gt;&quot;firmware for Pluton -- it contains chunks that appear to be the reference TPM2 implementation, and it broadly decompiles as valid ARM code.&quot;&lt;/em&gt; The Pluton firmware blob &lt;em&gt;is&lt;/em&gt; an ARM image derived from the TCG TPM 2.0 reference code. So a &lt;code&gt;CryptHmacSign&lt;/code&gt; OOB read in the TCG reference code &lt;em&gt;was&lt;/em&gt; present in Pluton firmware too, on the silicon Garrett looked at, until the firmware was rebuilt against the patched reference implementation. &lt;em&gt;On-die location did not stop the bug from existing.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;What did matter for outcomes was the &lt;em&gt;dwell time&lt;/em&gt; before the vulnerable code was replaced. The structural change that distinguishes Pluton from a 2014 dTPM is not &quot;where the chip is&quot; but &quot;who can patch it, and how fast.&quot; A discrete TPM with the same bug would wait for the dTPM vendor to push a firmware build, the OEM to package a UEFI capsule, the OEM to test it across its product lines, and the user to install it. Microsoft&apos;s Pluton patch path is the Windows Update channel -- the same channel that already delivers kernel updates to roughly 1.4 billion endpoints on a Patch Tuesday cadence. Section 5 design choice 4 walked the channel-shape change and the no-SLA hedge; this is what makes the channel the security property that matters here.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Realization&lt;/th&gt;
&lt;th&gt;Patch path&lt;/th&gt;
&lt;th&gt;Approximate latency&lt;/th&gt;
&lt;th&gt;Bottleneck&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Discrete TPM&lt;/td&gt;
&lt;td&gt;dTPM vendor build -&amp;gt; OEM UEFI capsule&lt;/td&gt;
&lt;td&gt;Quarters to years&lt;/td&gt;
&lt;td&gt;OEM fleet test + per-OEM rollout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intel PTT (CSME)&lt;/td&gt;
&lt;td&gt;Intel ME firmware -&amp;gt; OEM UEFI capsule&lt;/td&gt;
&lt;td&gt;Months to quarters&lt;/td&gt;
&lt;td&gt;OEM UEFI capsule path (TPM-Fail lesson)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD fTPM (PSP)&lt;/td&gt;
&lt;td&gt;AMD AGESA -&amp;gt; OEM UEFI capsule&lt;/td&gt;
&lt;td&gt;Months to quarters&lt;/td&gt;
&lt;td&gt;Same OEM UEFI capsule path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pluton-on-PC&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Microsoft signs -&amp;gt; Windows Update&lt;/td&gt;
&lt;td&gt;Days to weeks (no published SLA)&lt;/td&gt;
&lt;td&gt;Microsoft signing key + WU infrastructure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

flowchart TD
    Ref[TCG TPM 2.0 reference&lt;br /&gt;Level 00 Rev 01.83&lt;br /&gt;March 2024]
    CVE[CVE-2025-2884&lt;br /&gt;CryptHmacSign OOB read&lt;br /&gt;NVD published 2025-06-10]
    Pluton[Pluton firmware&lt;br /&gt;ARM blob&lt;br /&gt;per Garrett 2022]
    Intel[Intel SA-01209]
    Siemens[Siemens SSA-628843]
    Libtpms[libtpms&lt;br /&gt;CVE-2025-49133&lt;br /&gt;commit 04b2d8e9]
    TCG[TCG VRT0009&lt;br /&gt;+ TPM 2.0 v1.83 errata]
    Ref --&amp;gt; CVE
    CVE --&amp;gt; Pluton
    CVE --&amp;gt; Intel
    CVE --&amp;gt; Siemens
    CVE --&amp;gt; Libtpms
    CVE --&amp;gt; TCG
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Pluton&apos;s structural advantage is the patch path, not the silicon location. CVE-2025-2884 demonstrates that on-die location does not stop a TCG-reference-code bug from existing on a Pluton chip. What changes between a 2014 dTPM and a 2025 Pluton is not &quot;where the chip is&quot; but &quot;who can patch it, and how fast.&quot; On-die is necessary but not sufficient. The breakthrough is the update path. The cost of the update path is the political question section 1 promised.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If single-signer revocation is impossible, what would multi-signer Pluton look like? And what other open problems does this design choice leave unsolved?&lt;/p&gt;
&lt;h2&gt;9. Open problems Pluton has named but not solved&lt;/h2&gt;
&lt;p&gt;Five concrete open problems sit in front of any 2026 reader of the Pluton design. Each is mapped below to the closest existing partial result. None has a public solution.&lt;/p&gt;
&lt;h3&gt;Open problem 1 -- Multi-signer firmware for on-die client RoTs&lt;/h3&gt;
&lt;p&gt;No public proposal exists for multi-signer Pluton on a Windows client. Caliptra moves the signer to the integrating chip vendor [@caliptra-github], so the count of signers per &lt;em&gt;chip&lt;/em&gt; remains one even when the count per &lt;em&gt;deployment&lt;/em&gt; is many. There is no public proposal for two simultaneous signers on a single client RoT (e.g., Microsoft &lt;em&gt;and&lt;/em&gt; a sovereign signer; or AMD &lt;em&gt;and&lt;/em&gt; Microsoft for a Pluton-on-AMD chip). The closest existing analogues live elsewhere -- IETF KEYTRANS for transparency-logged keys [@ietf-keytrans-wg], HSM-cluster split-signing for operational continuity -- but none has a hardware-RoT counterpart that has shipped. The unresolved engineering question, named in the prior article&apos;s section 8, is whether multi-signer can be added without losing the timely-update property that motivated Pluton in the first place.The IETF KEYTRANS working group [@ietf-keytrans-wg] is the closest active venue for the multi-signer thread, although KEYTRANS is concerned with end-user identity-key transparency rather than firmware-signing keys. The transparency-log primitive is the same (a Merkle tree of signed claims, auditable by independent verifiers); the hardware-RoT integration is missing. A reader interested in the multi-signer thread should track KEYTRANS and the OpenTitan / Caliptra governance discussions in parallel.&lt;/p&gt;
&lt;h3&gt;Open problem 2 -- Regulatory jurisdiction of single-signer firmware&lt;/h3&gt;
&lt;p&gt;Pluton&apos;s signing key is, in effect, a US export-controlled artifact. The EU Cyber Resilience Act entered into force on December 10, 2024, with the bulk of its security obligations applying from December 11, 2027 and reporting obligations applying from September 11, 2026 [@eu-commission-cra]; from the 2027 date it will require demonstrable security properties for products with digital elements, without specifying &lt;em&gt;who&lt;/em&gt; the signer must be. Sovereign fleets -- the German Federal Office for Information Security (BSI), Singapore, Switzerland -- have varying postures on whether a non-domestic RoT is acceptable. Read in 2026, the Dell and Lenovo statements of March 2022 [@register-2022-pluton] [@pcworld-2022-pluton] are the first public push-back along this axis. The procurement debate is not technical; it is jurisdictional. There is no current proposal for a Pluton variant that satisfies a non-US sovereign procurement requirement.&lt;/p&gt;

The EU Cyber Resilience Act entered into force on December 10, 2024 [@eu-commission-cra]. Reporting obligations apply from September 11, 2026; the main security obligations apply from December 11, 2027 [@eu-commission-cra]. CRA does not name signers; it requires demonstrable security properties, vulnerability handling, and update channels for products sold into the EU. A single-signer foreign-rooted RoT can satisfy CRA. Whether it satisfies *sovereign* procurement requirements is a separate question.&lt;p&gt;The German BSI&apos;s Common Criteria PP-0084 protection profile [@bsi-pp-0084] (used historically for Infineon SLB 9670 / 9672 dTPMs) bakes in expectations of the chip-supplier governance that a US-rooted Pluton does not satisfy without a parallel certification path. Switzerland&apos;s federal IT procurement, Singapore&apos;s CSA, and a number of EU member-state ministries take comparable positions. None of these is a formal ban on Pluton; all of them are formal preferences that procurement officers must navigate.&lt;/p&gt;
&lt;p&gt;The architectural fix -- a sovereign signing-root variant of Pluton -- has not been publicly proposed by Microsoft. The economic incentives for such a variant are not obviously favourable: every additional signer adds operational cost to the Windows Update path that Pluton&apos;s design specifically optimises. The procurement market is, as of 2026, deciding both ways, and the 2022 Dell statement is the most-cited public datapoint of a vendor declining to take the bet.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Open problem 3 -- SPDM 1.3 component attestation on PC&lt;/h3&gt;
&lt;p&gt;Pluton attests the host SoC. It does not yet attest individual components -- NICs, NVMe SSDs, PCIe accelerators -- on Windows clients. The DMTF&apos;s Security Protocol and Data Model (DSP0274) is the wire protocol for component-to-component attestation: a publication cadence of 1.3.0 in June 2023, 1.3.2 in September 2024, and 1.3.3 in December 2025 [@dmtf-dsp0274]. The Caliptra MCU project&apos;s Rust SPDM responder design page is the most explicit public reference for what an SPDM 1.3 endpoint looks like inside an on-die RoT: SPDM is &lt;em&gt;&quot;a protocol designed to ensure secure communication between hardware components by focusing on mutual authentication and the establishment of secure channels over potentially insecure media... using X.509v3 certificates&quot;&lt;/em&gt; [@caliptra-mcu-spdm], with a fixed message inventory (&lt;code&gt;GetVersion&lt;/code&gt;, &lt;code&gt;GetCapabilities&lt;/code&gt;, &lt;code&gt;NegotiateAlgorithms&lt;/code&gt;, &lt;code&gt;GetDigests&lt;/code&gt;, &lt;code&gt;GetCertificate&lt;/code&gt;, &lt;code&gt;Challenge&lt;/code&gt;, &lt;code&gt;GetMeasurements&lt;/code&gt;, &lt;code&gt;KeyExchange&lt;/code&gt;, &lt;code&gt;Finish&lt;/code&gt;) carried over an MCTP transport binding. Caliptra 2.0&apos;s RTL design freeze in October 2024 [@caliptra-ocp-2024-news] commits SPDM as part of the Caliptra Subsystem reference stack: &lt;em&gt;&quot;Reference Stack: MCTP PLDM, SPDM&quot;&lt;/em&gt; [@caliptra-ocp-2024-news]. That is the server-side commitment.&lt;/p&gt;
&lt;p&gt;The PC-client equivalent is not on the public record as of May 2026. Microsoft Learn&apos;s Pluton page does not mention SPDM, DSP0274, MCTP, or component attestation [@ms-learn-pluton]. There is no Microsoft-published Windows feature or Pluton-firmware milestone that names &quot;SPDM responder&quot; or &quot;component attestation on PC&quot; as a roadmap deliverable. The architectural question -- whether Pluton becomes the platform&apos;s SPDM responder, whether each component (NVMe controller, Wi-Fi card) is its own responder and Pluton aggregates the evidence, or whether Windows Defender System Guard owns the Windows-side appraiser -- is not answered by any published Microsoft document on the public record as of May 2026. The closest existing reference design lives in &lt;code&gt;chipsalliance/caliptra-mcu-sw&lt;/code&gt; (Rust SPDM responder, X.509-anchored mutual auth), and the most likely standards venues for a PC-client profile are the DMTF SPDM WG (the wire protocol owner) and the OCP Security WG (the appraisal-framework owner). Until Microsoft publishes a Windows-feature surface that owns the SPDM responder on PC, &quot;Pluton attests the host SoC, period&quot; is the article&apos;s honest description of the 2026 state.&lt;/p&gt;
&lt;h3&gt;Open problem 4 -- Pluton-Caliptra interoperation&lt;/h3&gt;
&lt;p&gt;A Pluton-rooted client should, in principle, be able to attest to a Caliptra-rooted server in a single end-to-end protocol with both roots of trust visible in the resulting evidence chain. The wire-protocol candidates exist and are largely standardised. What is missing is the &lt;em&gt;composite-attestation profile&lt;/em&gt; that wires them into a single client-to-server flow.&lt;/p&gt;
&lt;p&gt;The candidate stack as of May 2026 lives across three SDOs and one OCP project. The DMTF owns SPDM 1.3 for component-to-component attestation [@dmtf-dsp0274] [@caliptra-mcu-spdm]. The IETF Remote Attestation Procedures (RATS) Working Group owns the architectural primitives for what an evidence-and-results message &lt;em&gt;contains&lt;/em&gt;: RFC 9711 (April 2025, Standards Track) is the Entity Attestation Token (EAT), a CBOR Web Token (CWT) or JSON Web Token (JWT) form for &lt;em&gt;&quot;an attested claims set that describes the state and characteristics of an entity&quot;&lt;/em&gt; [@ietf-rfc9711]; &lt;code&gt;draft-ietf-rats-corim-10&lt;/code&gt; (in WG Last Call as of March 2026) is the Concise Reference Integrity Manifest, the appraisal-time profile for &lt;em&gt;&quot;Endorsements and Reference Values in CBOR format&quot;&lt;/em&gt; [@ietf-corim]; &lt;code&gt;draft-ietf-rats-msg-wrap-23&lt;/code&gt; (in the RFC Editor queue since December 2025) is the Conceptual Message Wrapper, a CBOR-tag / JWT / CWT / X.509-extension envelope for &lt;em&gt;composing&lt;/em&gt; evidence, attestation results, endorsements, and reference values across protocols [@ietf-msg-wrap]. The full RATS WG document inventory at &lt;code&gt;datatracker.ietf.org/wg/rats/documents/&lt;/code&gt; shows additional active drafts on multi-verifier composition, posture-assessment, EAR (an evidence-appraisal-results profile), and PKIX key attestation [@ietf-rats-wg-docs]. The OCP Security WG owns the third-party appraisal framework: OCP S.A.F.E. v2.0 (March 2026) added explicit CoRIM SFR support and is the public mechanism by which a fleet operator certifies that a vendor&apos;s firmware-appraisal evidence has been independently audited [@ocp-safe-framework]. Caliptra 2.0&apos;s reference stack already wires SPDM, MCTP, and PLDM [@caliptra-ocp-2024-news]; the Caliptra MCU Rust responder shows the SPDM endpoint shape [@caliptra-mcu-spdm].&lt;/p&gt;
&lt;p&gt;What is &lt;em&gt;missing&lt;/em&gt; is a single published profile that walks the chain end to end: a Pluton-rooted Windows client emits a &lt;code&gt;Get-Tpm&lt;/code&gt;-derived attestation (Pluton acting as evidence producer); the network carries CMW-wrapped evidence with a CoRIM endorsement set the verifier consumes; the verifier emits an EAT-formatted attestation result; a Caliptra-rooted server consumes the result and gates fleet membership. Each leg has a draft. No public SDO document binds them into a single Pluton-Caliptra composite-attestation profile with reference implementations on both ends. The natural venue is a joint DMTF SPDM WG and OCP Security WG profile, with IETF RATS as the architectural reference; the natural reference implementation pair is &lt;code&gt;chipsalliance/caliptra-mcu-sw&lt;/code&gt; on the responder side and a Windows-feature surface (which Microsoft has not named publicly) on the client side. Until that joint profile exists and ships reference implementations, Pluton-Caliptra interoperation in 2026 is two roots-of-trust deployed, with no published end-to-end protocol that visibly carries both signatures into a single evidence chain.&lt;/p&gt;
&lt;h3&gt;Open problem 5 -- Supply-chain integrity beyond firmware signing&lt;/h3&gt;
&lt;p&gt;The Pluton signing root protects firmware integrity &lt;em&gt;after&lt;/em&gt; the chip ships. Listing the supply-chain steps in chronological order makes the residual trust gap concrete: (1) the IP-licensing handshake from Microsoft to AMD / Intel / Qualcomm; (2) tape-out and process-design-kit integration at TSMC; (3) wafer fabrication; (4) per-vendor package assembly; (5) OEM motherboard integration; (6) OEM firmware integration (BIOS / UEFI vendor code that surrounds the Pluton block); (7) retail distribution. None of these steps is presently attested by Pluton itself; the on-die signing root is &lt;em&gt;applied&lt;/em&gt; at step 6 and &lt;em&gt;exercised&lt;/em&gt; from step 7 onward, but steps 1-5 are out of band of the chip&apos;s RoT.&lt;/p&gt;
&lt;p&gt;The closest existing partial answer is a layered combination of three primitives. First, DICE -- TCG&apos;s Device Identifier Composition Engine -- gives every component a &lt;em&gt;Hardware Root of Trust (HRoT) which uniquely identifies the component and attests component firmware&lt;/em&gt; [@tcg-dice], anchored by a per-die Unique Device Secret (UDS) that derives a Compound Device Identifier (CDI) per layer; the Open Profile for DICE v2.6 [@open-dice] is the reference profile and explicitly cites the TCG normative parent. DICE answers step 4-5 (per-package and per-board identity) provided the integrator provisions a UDS on the die. Second, SPDM 1.3 [@dmtf-dsp0274] [@caliptra-mcu-spdm] is the wire protocol that surfaces those DICE identities to a verifier at runtime: a per-component SPDM responder (carried over MCTP / PLDM in Caliptra 2.0&apos;s stack [@caliptra-ocp-2024-news]) emits a measurement set tied to its CDI. Third, OCP S.A.F.E. (Security Appraisal Framework and Enablement) v2.0 [@ocp-safe-framework] is the third-party-audit framework that lets a fleet operator certify that a Device Vendor&apos;s firmware was assessed by a Security Review Provider; the v2.0 March 2026 revision explicitly added CoRIM SFR support, wiring S.A.F.E. into the IETF RATS appraisal stack [@ietf-corim]. Together, DICE + SPDM + S.A.F.E. answer &quot;is each component what its vendor said it was, and has the firmware been independently appraised?&quot;&lt;/p&gt;
&lt;p&gt;What is &lt;em&gt;not&lt;/em&gt; built is the verifier infrastructure that consumes that evidence end to end. There is no public per-component-EK transparency log analogous to Certificate Transparency for the web PKI; there is no Pluton-rooted client-side appraiser that consumes per-component SPDM evidence and gates Windows boot on it; there is no shipping fleet-side hardware-bill-of-materials (HBOM) audit pipeline that ingests S.A.F.E. reports and Caliptra-rooted server attestations together. The supply-chain trust is &lt;em&gt;named&lt;/em&gt; by DICE + SPDM + S.A.F.E.; it is not &lt;em&gt;operationalised&lt;/em&gt; end to end on a 2026 Windows 11 client. The honest framing is: Pluton&apos;s signing root closes step 6 and step 7; DICE + SPDM + S.A.F.E. are the public standards that, if implemented in the Windows feature stack, would close steps 4-5; steps 1-3 (IP licensing, tape-out, wafer) remain out of band of any of the public standards above.&lt;/p&gt;
&lt;h3&gt;The 10-property scoreboard for an ideal client-PC on-die RoT&lt;/h3&gt;
&lt;p&gt;Five open problems converge onto a single scoreboard. This article&apos;s SOTA review enumerates ten properties an ideal client-PC on-die Root of Trust in 2026 would satisfy (expanding the prior article&apos;s six TPM-ideal properties [@prior-tpm-in-windows] with multi-signer governance, public RTL, native PQC, and component attestation): (1) on-die location with no off-package bus; (2) an isolated TEE shared with nothing else; (3) memory-protected DRAM with AES + authenticated + anti-replay protection; (4) OS-channel firmware updates; (5) memory-safe firmware language; (6) multi-signer firmware authentication; (7) public RTL and verification flow; (8) native post-quantum primitives (ML-DSA, ML-KEM); (9) component attestation across PCIe / NVMe / NIC via SPDM 1.3; (10) high-assurance certification depth (Common Criteria EAL4+ and FIPS 140-3). No shipping method satisfies all ten; the matrix below shows where each design sits.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Pluton-on-PC 2026&lt;/th&gt;
&lt;th&gt;Apple SEP (A14/M1+)&lt;/th&gt;
&lt;th&gt;OpenTitan (Earl Grey / Darjeeling)&lt;/th&gt;
&lt;th&gt;Caliptra 2.0 (RTL freeze Oct 2024)&lt;/th&gt;
&lt;th&gt;Cerberus (current production)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;1. On-die, no bus&lt;/td&gt;
&lt;td&gt;Yes [@ms-pluton-blog-2020]&lt;/td&gt;
&lt;td&gt;Yes [@apple-sep]&lt;/td&gt;
&lt;td&gt;Discrete or in-package&lt;/td&gt;
&lt;td&gt;Yes [@caliptra-github]&lt;/td&gt;
&lt;td&gt;No (discrete on BMC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Isolated TEE&lt;/td&gt;
&lt;td&gt;Yes (dedicated)&lt;/td&gt;
&lt;td&gt;Yes [@apple-sep]&lt;/td&gt;
&lt;td&gt;Yes (whole chip)&lt;/td&gt;
&lt;td&gt;Yes (RTM block)&lt;/td&gt;
&lt;td&gt;Yes (whole chip)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. AES + authenticated + anti-replay DRAM&lt;/td&gt;
&lt;td&gt;Not on public record&lt;/td&gt;
&lt;td&gt;Yes (A14/M1+) [@apple-sep]&lt;/td&gt;
&lt;td&gt;Limited (chip-internal SRAM)&lt;/td&gt;
&lt;td&gt;N/A (no DRAM responder role)&lt;/td&gt;
&lt;td&gt;N/A (server BMC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. OS-channel firmware updates&lt;/td&gt;
&lt;td&gt;Yes (Windows Update) [@ms-learn-pluton]&lt;/td&gt;
&lt;td&gt;Yes (iOS / macOS) [@apple-sep]&lt;/td&gt;
&lt;td&gt;Project-managed&lt;/td&gt;
&lt;td&gt;Server platform updates&lt;/td&gt;
&lt;td&gt;OEM / operator updates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5. Memory-safe firmware&lt;/td&gt;
&lt;td&gt;Yes (Rust 2024+) [@ms-learn-pluton]&lt;/td&gt;
&lt;td&gt;Apple-customised L4 [@apple-sep]&lt;/td&gt;
&lt;td&gt;Rust runtime in OpenTitan codebase&lt;/td&gt;
&lt;td&gt;Rust [@caliptra-github] [@caliptra-mcu-spdm]&lt;/td&gt;
&lt;td&gt;C / C++ [@azure-cerberus-github]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6. Multi-signer&lt;/td&gt;
&lt;td&gt;No (Microsoft only)&lt;/td&gt;
&lt;td&gt;No (Apple only)&lt;/td&gt;
&lt;td&gt;No (per-deployment)&lt;/td&gt;
&lt;td&gt;Multi-vendor by deployment, single per chip [@caliptra-github]&lt;/td&gt;
&lt;td&gt;Per-deployment signer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7. Public RTL and verification&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes [@opentitan-home] [@opentitan-commercial]&lt;/td&gt;
&lt;td&gt;Yes [@caliptra-github]&lt;/td&gt;
&lt;td&gt;Yes (reference impl) [@azure-cerberus-github]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8. Native PQC (ML-DSA, ML-KEM)&lt;/td&gt;
&lt;td&gt;No public commitment date&lt;/td&gt;
&lt;td&gt;No public commitment date&lt;/td&gt;
&lt;td&gt;On roadmap [@opentitan-home]&lt;/td&gt;
&lt;td&gt;Yes (RTL freeze incl. Dilithium + Kyber) [@caliptra-ocp-2024-news]&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9. Component attestation (SPDM 1.3)&lt;/td&gt;
&lt;td&gt;No (open problem 3)&lt;/td&gt;
&lt;td&gt;Apple-private equivalents&lt;/td&gt;
&lt;td&gt;Not yet&lt;/td&gt;
&lt;td&gt;Yes (Reference Stack: MCTP PLDM, SPDM) [@caliptra-ocp-2024-news] [@caliptra-mcu-spdm]&lt;/td&gt;
&lt;td&gt;NIST SP 800-193 framing [@ms-learn-cerberus]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10. EAL4+ and FIPS 140-3&lt;/td&gt;
&lt;td&gt;No equivalent posture in 2026 [@bsi-slb-9670-cc]&lt;/td&gt;
&lt;td&gt;Not pursued for SEP&lt;/td&gt;
&lt;td&gt;In assessment&lt;/td&gt;
&lt;td&gt;Not pursued&lt;/td&gt;
&lt;td&gt;Some certifications via OEM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Properties satisfied&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4 (1, 2, 4, 5)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4 (1, 2, 3, 4)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2 (5, 7)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3 (5, 7, 8) -- on track for 9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1-2 (7 + partial 9)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The matrix says two things at once. First, no shipping on-die RoT in 2026 satisfies more than four of the ten properties; the scoreboard is sparse on purpose. Second, the closest &lt;em&gt;trajectory&lt;/em&gt; to the ten-property ideal is not any single design; it is the union of Pluton&apos;s properties (1, 2, 4, 5), Caliptra&apos;s open RTL and PQC commitments (7, 8, 9), and OpenTitan&apos;s open RTL (7). A hypothetical Pluton variant that adopted Caliptra-style multi-signer governance, OpenTitan-style RTL transparency, and the Caliptra 2.0 SPDM responder reference stack would satisfy 1, 2, 4, 5, 6, 7, 8, 9 -- eight of the ten -- with high-assurance certification (10) the residual procurement question. That hypothetical Pluton has not been publicly proposed by Microsoft. It is, however, the design the matrix names as the destination if all five open problems above were closed.&lt;/p&gt;
&lt;h3&gt;The shape of the unanswered question&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Open problem&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;th&gt;Closest existing partial result&lt;/th&gt;
&lt;th&gt;Outstanding gap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Multi-signer client RoT&lt;/td&gt;
&lt;td&gt;Single-signer revocation impossibility&lt;/td&gt;
&lt;td&gt;Caliptra (multi-vendor by deployment, single-signer per chip) [@caliptra-github]&lt;/td&gt;
&lt;td&gt;No two-signer-per-chip proposal for client&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regulatory jurisdiction&lt;/td&gt;
&lt;td&gt;Sovereign procurement, EU CRA (in force Dec 10 2024, reporting from Sep 11 2026, main obligations from Dec 11 2027) [@eu-commission-cra]&lt;/td&gt;
&lt;td&gt;March 2022 Dell / Lenovo posture [@register-2022-pluton] [@pcworld-2022-pluton]&lt;/td&gt;
&lt;td&gt;No sovereign Pluton variant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SPDM 1.3 on PC&lt;/td&gt;
&lt;td&gt;Component attestation beyond the SoC&lt;/td&gt;
&lt;td&gt;Caliptra 2.0 reference stack with SPDM [@caliptra-ocp-2024-news] [@caliptra-mcu-spdm]&lt;/td&gt;
&lt;td&gt;No PC-client SPDM responder named on Microsoft Learn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pluton-Caliptra interop&lt;/td&gt;
&lt;td&gt;Composite client-to-server attestation&lt;/td&gt;
&lt;td&gt;RATS EAT [@ietf-rfc9711] + CoRIM [@ietf-corim] + CMW [@ietf-msg-wrap] + S.A.F.E. [@ocp-safe-framework]&lt;/td&gt;
&lt;td&gt;No joint DMTF / OCP / RATS profile binding the chain end to end&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supply-chain integrity beyond firmware signing&lt;/td&gt;
&lt;td&gt;Pre-ship trust (steps 1-5 of the chain)&lt;/td&gt;
&lt;td&gt;DICE [@tcg-dice] [@open-dice] + SPDM [@dmtf-dsp0274] + S.A.F.E. [@ocp-safe-framework]&lt;/td&gt;
&lt;td&gt;Verifier infrastructure (per-component-EK transparency, HBOM appraiser) not built&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;All five share the same shape. Pluton has &lt;em&gt;narrowed&lt;/em&gt; but not eliminated structural classes of trust. On-die narrowed but did not eliminate the silicon supply chain trust. Microsoft-rooted firmware servicing narrowed but did not eliminate the firmware-signing trust. Component attestation, when it ships on PC, will narrow but not eliminate the per-component supply-chain trust. Each Pluton design choice trades one trust for another; the residual trusts are the ones the article cannot answer technically and must label politically.&lt;/p&gt;
&lt;p&gt;On Monday morning, what does the Windows engineer reading this actually do?&lt;/p&gt;
&lt;h2&gt;10. The Pluton checklist for 2026&lt;/h2&gt;
&lt;p&gt;Five questions. Each has a one-paragraph answer and a verifiable command or check. The reader who skipped sections 6 and 8 will still avoid the most expensive mistake -- counting &quot;Pluton present&quot; as &quot;Pluton enabled.&quot;&lt;/p&gt;
&lt;h3&gt;Q1 -- Is Pluton present on this device?&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Get-Tpm&lt;/code&gt; in PowerShell reports &lt;code&gt;ManufacturerIdTxt&lt;/code&gt;. The four-character ASCII manufacturer string distinguishes the realisation. &lt;code&gt;MSFT&lt;/code&gt; is Pluton; &lt;code&gt;INTC&lt;/code&gt; is Intel PTT; &lt;code&gt;AMD &lt;/code&gt; (with trailing space) is AMD fTPM; &lt;code&gt;IFX&lt;/code&gt;, &lt;code&gt;STM&lt;/code&gt;, and &lt;code&gt;NTC&lt;/code&gt; cover Infineon, STMicro, and Nuvoton discrete TPMs respectively. The prior article&apos;s section 9 [@prior-tpm-in-windows] documents the broader manufacturer-string discovery path. The new Pluton-specific check is the four-letter &lt;code&gt;MSFT&lt;/code&gt; value.&lt;/p&gt;

Open PowerShell as administrator and run:&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;Get-Tpm | Select-Object ManufacturerIdTxt, ManufacturerVersion, TpmPresent, TpmReady
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A &lt;code&gt;ManufacturerIdTxt&lt;/code&gt; of &lt;code&gt;MSFT&lt;/code&gt; indicates Microsoft Pluton. &lt;code&gt;INTC&lt;/code&gt; is Intel PTT (the firmware TPM in CSME). &lt;code&gt;AMD &lt;/code&gt; (with the trailing space) is AMD fTPM (the firmware TPM in the PSP). The same logic is captured in the JavaScript &lt;code&gt;&amp;lt;RunnableCode&amp;gt;&lt;/code&gt; mock in section 5 above. For richer detail, run &lt;code&gt;tpm.msc&lt;/code&gt; -- the Microsoft Management Console snap-in shows the full TPM identity.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Q2 -- Is Pluton &lt;em&gt;enabled&lt;/em&gt;, not just &lt;em&gt;present&lt;/em&gt;?&lt;/h3&gt;
&lt;p&gt;This is the §6 soft-fuse trap. On AMD Ryzen 6000 / 7000 / 8000 silicon, &lt;code&gt;Get-Tpm&lt;/code&gt; returning &lt;code&gt;MSFT&lt;/code&gt; proves Pluton is &lt;em&gt;exposed&lt;/em&gt; as the TPM but does not, on its own, prove Pluton is &lt;em&gt;enabled&lt;/em&gt; in firmware (§6&apos;s Definition + Callout walk the PSP directory 0xB BIT36 mechanism Garrett 2022 documents [@garrett-2022-pluton-rev]). The procurement-relevant action is to audit BIOS-level Pluton (HSP) toggles and correlate &lt;code&gt;Get-Tpm&lt;/code&gt;&apos;s manufacturer string with &lt;code&gt;Get-PnpDevice&lt;/code&gt; / Device Manager before counting an AMD-Ryzen-6000-class device as Pluton-protected. On Lenovo AMD Ryzen 6000 ThinkPads specifically, the launch posture was Pluton present but disabled by default [@register-2022-pluton] -- so a 2022 ThinkPad inventory query that finds Ryzen 6000 silicon will not, on its own, tell the operator whether Pluton is doing any work.&lt;/p&gt;
&lt;h3&gt;Q3 -- Is Pluton firmware current?&lt;/h3&gt;
&lt;p&gt;Microsoft publishes Pluton firmware via Windows Update [@ms-learn-pluton]. Microsoft does not publish a per-release notes feed for Pluton firmware, so the operator must rely on the general Windows Update history and the chip vendor&apos;s advisory feed (Intel SA-* for Intel-Pluton silicon; AMD&apos;s security bulletins for AMD-Pluton silicon). The procurement-relevant property is that the channel exists and ships. The procurement-relevant &lt;em&gt;question&lt;/em&gt; is whether the operator&apos;s organisation is willing to depend on that channel.&lt;/p&gt;
&lt;h3&gt;Q4 -- When to &lt;em&gt;prefer&lt;/em&gt; Pluton over dTPM, PTT, or AMD fTPM&lt;/h3&gt;
&lt;p&gt;Three procurement scenarios where Pluton is the right answer in 2026.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default Windows 11 client procurement.&lt;/strong&gt; Pluton on AMD Ryzen 6000 and later, Intel Core Ultra 200V Series and Series 3, and Snapdragon X Series [@ms-learn-pluton]. The Microsoft-supported configuration; the path of least administrative resistance; the only realisation that ships memory-safe firmware on the Patch Tuesday cadence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adversary model includes physical access.&lt;/strong&gt; Andzakovic-class bus sniffing [@andzakovic-2019-tpm-sniffing], faulTPM-class voltage glitching [@jacob-2023-faultpm]. Pluton (on-die, dedicated TEE) closes both surfaces structurally.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Need fast firmware updates for security responses to TCG-reference-code bugs.&lt;/strong&gt; CVE-2025-2884 is the worked example [@cve-2025-2884]. Pluton&apos;s Windows Update servicing is the only realisation in 2026 that does not depend on the OEM UEFI capsule path.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Q5 -- When to &lt;em&gt;not&lt;/em&gt; prefer it&lt;/h3&gt;
&lt;p&gt;Three procurement scenarios where Pluton is not the right answer.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Regulated fleets requiring a non-US trust anchor.&lt;/strong&gt; German BSI PP-0084-class procurement [@bsi-pp-0084], EU sovereign workloads. Hardened dTPM (Infineon SLB 9670 / 9672, STMicro ST33TPHF) has the certified posture [@bsi-slb-9670-cc]; Pluton has no equivalent EAL4+ certification path on the public record as of 2026 [@bsi-slb-9670-cc].&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Air-gapped fleets that cannot accept Windows-Update-delivered firmware.&lt;/strong&gt; Offline UEFI capsule servicing remains the only operationally feasible patch path; dTPM is the mechanically right choice for that fleet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-vendor sourcing requirements.&lt;/strong&gt; dTPM has multiple silicon vendors (Infineon, STMicro, Nuvoton). Pluton has one signer per chip and only the AMD / Intel / Qualcomm silicon paths Microsoft has licensed. Datacenter operators who need multi-vendor sourcing should look at Caliptra [@caliptra-github] -- not a Pluton substitute on Windows clients, but the right answer for datacenter SoC procurement.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Choose Pluton when...&lt;/th&gt;
&lt;th&gt;Choose dTPM (or Caliptra) when...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Default Windows 11 client procurement [@ms-learn-pluton]&lt;/td&gt;
&lt;td&gt;Sovereign procurement (German BSI, EU sovereign)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adversary model includes physical access&lt;/td&gt;
&lt;td&gt;Air-gapped fleet, no Windows Update channel acceptable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need Patch Tuesday firmware response cadence&lt;/td&gt;
&lt;td&gt;Need EAL4+ / FIPS 140-3 certification posture today&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Want memory-safe Rust firmware (2024+ silicon)&lt;/td&gt;
&lt;td&gt;Need multi-vendor silicon sourcing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Want on-die dedicated TEE versus shared PSP/CSME&lt;/td&gt;
&lt;td&gt;Datacenter SoC integration (Caliptra)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

flowchart TD
    Start[Need a TPM/RoT in 2026?]
    Q1{Datacenter SoC?}
    Q2{Sovereign / non-US RoT required?}
    Q3{Air-gapped fleet?}
    Q4{Default Windows 11 enterprise?}
    Caliptra[Caliptra 1.0]
    DTPM[Hardened dTPM&lt;br /&gt;Infineon SLB 9670/9672&lt;br /&gt;or STMicro ST33TPHF]
    DTPMcap[Hardened dTPM&lt;br /&gt;offline UEFI capsule path]
    Pluton[Pluton on AMD Ryzen 6000+&lt;br /&gt;or Intel Core Ultra 200V+&lt;br /&gt;or Snapdragon X Series]
    Start --&amp;gt; Q1
    Q1 --&amp;gt;|Yes| Caliptra
    Q1 --&amp;gt;|No| Q2
    Q2 --&amp;gt;|Yes| DTPM
    Q2 --&amp;gt;|No| Q3
    Q3 --&amp;gt;|Yes| DTPMcap
    Q3 --&amp;gt;|No| Q4
    Q4 --&amp;gt;|Yes| Pluton
    Q4 --&amp;gt;|No| DTPM
&lt;p&gt;We started with the question Microsoft answered architecturally before the prior article posed it. Where does that leave the political question that even the architectural answer cannot resolve?&lt;/p&gt;
&lt;h2&gt;11. Frequently asked questions, and one more political question&lt;/h2&gt;
&lt;p&gt;The architectural answer to &quot;what is the cost of letting Microsoft sign the chip&apos;s firmware?&quot; is partial and has been answered by every section above. The remaining piece is a set of common misconceptions, then a closing tied to the prior article.&lt;/p&gt;

No. fTPM is a TPM 2.0 task running inside an existing TEE -- Intel CSME (PTT) or AMD PSP. Pluton is a *dedicated* IP block on the SoC die that does not share a TEE with anything else. The threat-model gap that faulTPM exposed [@jacob-2023-faultpm] only closes for Pluton-as-Pluton, not for fTPM running on Pluton-equipped silicon. AMD-Ryzen-6000-class chips can ship Pluton silicon next to the existing PSP-based fTPM; §5 documents the OEM-picks-one mechanism via the Pluton (HSP) BIOS toggle [@garrett-2022-pluton-rev], and faulTPM-class attacks remain valid only on systems the OEM exposes as fTPM.

No. Pluton implements the TCG TPM 2.0 specification plus Microsoft-specific extensions like SHACK [@ms-pluton-blog-2020]. From Windows&apos;s perspective, Pluton *is* a TPM, with a different update story (Windows Update versus OEM UEFI capsule) and a different trust anchor (Microsoft as firmware signer). Whether the OEM exposes Pluton &quot;as the TPM&quot; or alongside a discrete TPM is an OEM choice [@ms-learn-pluton-as-tpm]: *&quot;Microsoft Pluton can be used as a TPM, or with a TPM. Although Pluton builds security directly into the CPU, device manufacturers might choose to use discrete TPM as the default TPM, while having Pluton available to the system as a security processor for use cases beyond the TPM&quot;* [@ms-learn-pluton-as-tpm].

No. Pluton firmware is Microsoft-authored and Microsoft-signed [@ms-learn-pluton]. Caliptra is Microsoft-co-contributed and open source [@caliptra-github] -- but Caliptra is datacenter-class, not a Pluton substitute on Windows clients. The closest open-source on-die RoT for clients is OpenTitan [@opentitan-home] [@opentitan-commercial], which as of 2026 is discrete or in-package, not on-die in an application SoC. Tock OS [@tock-github] is the most mature publicly reviewed memory-safe embedded RTOS that *could* host Pluton-class workloads; whether it is the actual runtime on Pluton-on-PC is not on the public record.

No. Pluton centralises firmware *signing*, not key access. The November 17, 2020 announcement specifies SHACK -- Secure Hardware Cryptography Key -- which states that keys *&quot;are never exposed outside of the protected hardware, even to the Pluton firmware itself&quot;* [@ms-pluton-blog-2020]. Microsoft signs the firmware that runs on Pluton; the keys Pluton creates and seals stay inside Pluton. (The prior article&apos;s FAQ entry on this point [@prior-tpm-in-windows] makes the same observation about the underlying TPM 2.0 non-exportability property.)

Three things, in order. First, no off-package bus to sniff -- Andzakovic-class attacks [@andzakovic-2019-tpm-sniffing] have nothing to attack on Pluton silicon. Second, Patch Tuesday-cadence firmware fixes for TCG-reference-code bugs -- CVE-2025-2884 [@cve-2025-2884] is the worked example; the Pluton Windows Update path collapses the dwell time that a discrete-TPM fix would otherwise spend in OEM UEFI capsule queues. Third, Microsoft-authored Rust firmware on 2024+ AMD and Intel silicon [@ms-learn-pluton]; the bug class that memory-safe firmware structurally rules out is large. The cost of all three is a Microsoft signing key as the chip&apos;s trust anchor.

Pluton inherits the TCG TPM 2.0 algorithm-agility property the prior article documented in section 8.1 [@prior-tpm-in-windows]. Caliptra 2.0 has a stated commitment to ML-DSA and ML-KEM [@caliptra-github]; Pluton-firmware post-quantum migration tracks similar primitives, but no Microsoft public commitment to a specific date for a post-quantum Pluton firmware release exists in 2026. The point of the algorithm-agility property is that the migration is a firmware change, not a silicon respin -- which is precisely the property the Pluton update path is designed to operationalise.

Generally no. Disabling Pluton on AMD Ryzen 6000+ via the BIOS toggle does not return the system to a *stronger* security posture; it returns it to AMD fTPM (or no TPM at all, depending on the OEM&apos;s BIOS design). The faulTPM-class attack surface that motivated the move to Pluton in the first place re-opens [@jacob-2023-faultpm]. The procurement scenarios in section 10 list the narrow cases where dTPM is the right answer; in those cases the right action is to procure dTPM-equipped silicon, not to disable Pluton on Pluton-equipped silicon.
&lt;h3&gt;A closing tied to the prior article&lt;/h3&gt;
&lt;p&gt;Return to the line that opened this article. &lt;em&gt;&quot;The TPM was supposed to be the part of the system you didn&apos;t have to trust anyone for. Twenty-five years later, the trust question is back -- and the answer is now political&quot;&lt;/em&gt; [@prior-tpm-in-windows]. The architectural answer to that question existed inside an Xbox before the question was asked. Twelve years of Microsoft security silicon -- Xbox One in 2013, Project Sopris in 2015, the &lt;em&gt;Seven Properties&lt;/em&gt; paper in 2017, Project Cerberus in 2017, Azure Sphere in 2018, Pluton-on-PC in 2020, AMD Ryzen 6000 silicon in 2022, Linux 6.3 driver in 2023, Caliptra 1.0 in 2024, the CVE-2025-2884 dwell-time test in 2025 -- have shaped the on-die security processor on the modern Windows 11 client.&lt;/p&gt;
&lt;p&gt;The article&apos;s own answer is direct. Pluton makes the political question concrete and unavoidable, but it does not resolve it. On-die closes the bus surface. Dedicated TEE closes the shared-TEE blast radius that defeated AMD fTPM. Memory-safe Rust firmware narrows the bug class that has driven the firmware-CVE economy for a decade. Windows Update collapses the patch latency from OEM-capsule quarters to Patch Tuesday weeks. &lt;em&gt;Each design choice retires a 2014-2024 attack class. Each design choice places a new trust in Microsoft.&lt;/em&gt; The trust question is now visible at every level of the stack: silicon supply chain, firmware language, signing key, update channel, regulatory jurisdiction. It does not go away because Microsoft engineered the chip well. It goes from being a technical question to being a procurement question.&lt;/p&gt;

Pluton makes the political question concrete and unavoidable, but it does not resolve it.
&lt;p&gt;The closing image is operational. An engineer running &lt;code&gt;Get-Tpm&lt;/code&gt; on a Windows 11 laptop in 2026 reads a four-letter token in the manufacturer string. &lt;code&gt;MSFT&lt;/code&gt; is what twelve years of Microsoft security silicon buys you. It is what closed the bus surface that the prior article&apos;s $40 FPGA exploited. It is what closed the shared-TEE surface that faulTPM extracted state from. It is what gives the Patch Tuesday channel something to deliver. It is also what places a single Microsoft signing key as the trust anchor for every Pluton-equipped Windows 11 client. That four-letter token is the article&apos;s subject, the prior article&apos;s epilogue, and the next decade&apos;s procurement question.&lt;/p&gt;
&lt;p&gt;&amp;lt;StudyGuide slug=&quot;microsoft-pluton-continuation&quot; keyTerms={[
  { term: &quot;Pluton&quot;, definition: &quot;Microsoft-designed on-die security processor; named publicly first in April 2018 (Azure Sphere); shipped on Windows-PC SoCs from November 17, 2020 (announcement) and CES 2022 (AMD Ryzen 6000 first silicon). Implements TCG TPM 2.0 plus Microsoft-specific extensions including SHACK.&quot; },
  { term: &quot;On-die Root of Trust (RoT)&quot;, definition: &quot;A hardware Root of Trust integrated as an IP block on the same silicon die as the application processor, with no off-package bus between the CPU and the RoT. Eliminates the bus-sniffing attack surface that defeats discrete TPMs.&quot; },
  { term: &quot;SHACK (Secure Hardware Cryptography Key)&quot;, definition: &quot;Pluton property named in the November 17, 2020 announcement: keys are &apos;never exposed outside of the protected hardware, even to the Pluton firmware itself.&apos; Extends the TCG TPM 2.0 non-exportability boundary inward by one ring.&quot; },
  { term: &quot;Soft-fuse Pluton disable (PSP directory 0xB BIT36)&quot;, definition: &quot;On AMD Ryzen 6000+ platforms, an OEM-controlled bit in the PSP directory that instructs the PSP to silence Pluton without a hardware power-down. Inventory queries that report &apos;Pluton present&apos; may not distinguish enabled from soft-disabled.&quot; },
  { term: &quot;Single-signer revocation impossibility&quot;, definition: &quot;If an on-die RoT firmware can only be authenticated by a single signer S, the chip&apos;s trust anchor cannot be retired without bricking the chip&apos;s firmware-update path, regardless of whether S is compromised, coerced, or jurisdictionally constrained. A key-management impossibility, not a cryptographic one.&quot; },
  { term: &quot;Caliptra&quot;, definition: &quot;Open-source datacenter-class on-die Root of Trust IP, hosted at CHIPS Alliance and co-contributed by Microsoft, Google, AMD, and NVIDIA. Reached 1.0 in April 2024. Multi-vendor by deployment; single-signer per chip.&quot; },
  { term: &quot;OpenTitan&quot;, definition: &quot;Open-source silicon Root of Trust descendant of Google Titan M; commercially available February 13, 2024 with nine coalition members hosted by lowRISC. RISC-V Ibex core with hardware AES, HMAC, KMAC, and OTBN engines.&quot; },
  { term: &quot;SPDM 1.3&quot;, definition: &quot;DMTF DSP0274 wire protocol for component attestation. Caliptra 2.0 commits to it on the server side; the PC-client equivalent is not yet shipping.&quot; },
  { term: &quot;Tock OS&quot;, definition: &quot;Memory-safe Rust embedded operating system for Cortex-M and RISC-V platforms. The most mature publicly reviewed Rust embedded RTOS; whether it is the actual runtime on Pluton-on-PC is not on the public record.&quot; },
  { term: &quot;Seven Properties of Highly Secure Devices&quot;, definition: &quot;Hunt, Letey, Nightingale 2017 framework (MSR-TR-2017-16): hardware-based root of trust, small TCB, defense in depth, compartmentalisation, certificate-based authentication, renewable security via online updates, and failure reporting. Property #6 is the property that distinguishes Pluton-on-PC from a 2014 dTPM.&quot; }
]} /&amp;gt;&lt;/p&gt;
</content:encoded><category>pluton</category><category>tpm</category><category>windows-security</category><category>hardware-security</category><category>caliptra</category><category>on-die-rot</category><category>firmware-security</category><author>noreply@paragmali.com (Parag Mali)</author></item><item><title>Secure Boot in Windows: The Chain From Sector Zero to Userinit, and Every Place It Has Broken</title><link>https://paragmali.com/blog/secure-boot-in-windows-the-chain-from-sector-zero-to-userini/</link><guid isPermaLink="true">https://paragmali.com/blog/secure-boot-in-windows-the-chain-from-sector-zero-to-userini/</guid><description>How Windows verifies and measures itself from CPU reset to logon, every rung of the boot chain, every public break, and what Pluton is being built to fix.</description><pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate><content:encoded>
Windows boots through a chain of verifications and measurements that runs from CPU reset to your desktop. UEFI Secure Boot signs the boot manager; Trusted Boot extends the signature check to every kernel-mode component; Measured Boot extends a parallel hash of every step into the TPM&apos;s PCR 0-7 and PCR 11, with DRTM later seeding PCR 17-22 from a CPU-vendor-signed late-launch anchor. After fifteen years of BIOS rootkits, MBR bootkits, and ESP-resident bootkits, that chain holds -- but every public Secure Boot break since 2022 (BlackLotus, Bitpixie, Bootkitty, LogoFAIL) has exploited the same gap: between patching a vulnerable Microsoft-signed binary and revoking it in dbx. Pluton-rooted firmware on Microsoft&apos;s update cadence is the planned escape.
&lt;h2&gt;1. Eight seconds in 2010, and everything that could already be wrong&lt;/h2&gt;
&lt;p&gt;Picture a small business owner in December 2010. She unplugs her three-year-old Dell, drives it home, and powers it on. The fan spins. The BIOS chimes. The Windows 7 logo appears. By the time she types her password and the desktop loads, eight seconds have passed.&lt;/p&gt;
&lt;p&gt;In those eight seconds, a TDL-4 bootkit that has been on disk for two weeks has already done its work. The infected master boot record patched the operating system loader in memory before the kernel finished initialising. Driver Signature Enforcement, the policy that was supposed to keep unsigned kernel drivers out, was disabled before the kernel checked for it. A ring-0 rootkit is now staged inside &lt;code&gt;ntoskrnl.exe&lt;/code&gt;. Kaspersky&apos;s June 2011 analysis counted 4,524,488 infected machines in the first three months of 2011 alone [@kaspersky-tdl4]. The owner notices nothing. By the time she authenticates, the operating system that authenticates her is loading code the operating system never agreed to load.&lt;/p&gt;
&lt;p&gt;The structural question raised by that scene is the question this article exists to answer: &lt;em&gt;what would it take for Windows to know, by the time the user types a password, that the machine has not been tampered with since power-on?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The answer Microsoft began designing in 2011-2012 is a chain. UEFI Platform Initialization brings up the firmware. UEFI Secure Boot verifies the boot manager. Trusted Boot extends the signature check through &lt;code&gt;winload.efi&lt;/code&gt;, the kernel, and every boot-start driver. Early Launch Anti-Malware classifies subsequent drivers. The Secure Kernel comes up in a hardware-isolated execution mode. Through every one of those rungs, a parallel rail -- Measured Boot -- writes a tamper-evident hash log into the TPM&apos;s Platform Configuration Registers, so that what was loaded can be proven later, even if the verifier itself was bypassed.&lt;/p&gt;
&lt;p&gt;That chain is the spine of this article. We will walk it rung by rung. We will see where it has been broken in the wild. And we will see why every successful break since 2022 has exploited the same operational invariant -- the gap between &lt;em&gt;patched&lt;/em&gt; and &lt;em&gt;revoked&lt;/em&gt; -- rather than any flaw in the cryptography.&lt;/p&gt;

flowchart TD
    SEC[&quot;SEC -- CPU reset, immutable ROM&quot;] --&amp;gt; PEI[&quot;PEI -- platform init&quot;]
    PEI --&amp;gt; DXE[&quot;DXE -- Secure Boot verifier lives here&quot;]
    DXE --&amp;gt; BDS[&quot;BDS -- pick boot variable&quot;]
    BDS --&amp;gt; BMGR[&quot;bootmgfw.efi (Microsoft-signed)&quot;]
    BMGR --&amp;gt; WLOAD[&quot;winload.efi (Microsoft-signed)&quot;]
    WLOAD --&amp;gt; NT[&quot;ntoskrnl.exe + boot-start drivers&quot;]
    NT --&amp;gt; ELAM[&quot;ELAM (Defender, signed AM)&quot;]
    NT --&amp;gt; SK[&quot;securekernel.exe (VTL1) + Trustlets&quot;]
    ELAM --&amp;gt; SMSS[&quot;smss.exe -&amp;gt; wininit -&amp;gt; winlogon&quot;]
    SK --&amp;gt; SMSS
    SMSS --&amp;gt; USR[&quot;userinit.exe -&amp;gt; explorer.exe&quot;]
    TPM[(&quot;TPM PCR 0-7, PCR 11&quot;)]
    DXE -. extend .-&amp;gt; TPM
    BMGR -. extend .-&amp;gt; TPM
    WLOAD -. extend .-&amp;gt; TPM
    NT -. extend .-&amp;gt; TPM
    ELAM -. extend .-&amp;gt; TPM
&lt;p&gt;Before there was a chain to walk, there was no chain at all.&lt;/p&gt;
&lt;h2&gt;2. Before Secure Boot: sector zero and the fiction of OS-level security&lt;/h2&gt;
&lt;p&gt;Ask what was actually verified during a 2011 PC boot, and the answer is: one byte pair. The &lt;code&gt;0x55AA&lt;/code&gt; magic at the end of the 512-byte master boot record. That is a format check, not an authenticity check. The 16-bit BIOS power-on self test loaded sector zero of the boot device into memory at &lt;code&gt;0000:7C00&lt;/code&gt; and jumped [@wp-mbr]. No signature. No measurement. Whatever was at sector zero, ran.&lt;/p&gt;
&lt;p&gt;That architectural fact had been the structural lesson of computer-security history for a quarter century. Stoned, the boot sector virus written by an unknown student in Wellington, New Zealand in 1987, demonstrated it without malicious intent: the virus was a prank that displayed &quot;Your PC is now Stoned!&quot; and propagated by writing itself to the boot sector of every disk a victim machine touched [@wp-stoned]. Brain (Pakistan, 1986) [@wp-brain] and Michelangelo (1991) [@wp-michelangelo] were the same lesson at scale. The lesson was not that those particular authors were dangerous. It was that any code reaching sector zero ran with implicit privilege.&lt;/p&gt;

A class of malware that survives operating-system reinstallation and antivirus scanning by infecting code that runs *before* the operating system loads -- traditionally the master boot record or the partition&apos;s volume boot record, more recently the EFI System Partition or the firmware itself. A bootkit&apos;s defining property is that the operating system it boots is one the bootkit itself chooses to load.
&lt;p&gt;The modern bootkit family arrived in 2005 and ran undefended for the next seven years. Derek Soeder and Ryan Permeh of eEye published &lt;em&gt;BootRoot&lt;/em&gt; at Black Hat USA 2005 [@bhusa05-bootroot], a proof of concept that hooked the BIOS interrupt 13h disk-read service before any operating system loaded and intercepted Windows kernel images on the way to memory. Vbootkit (Vipin and Nitin Kumar) followed in 2007, demonstrating the same primitive on Vista [@vbootkit-archive]. Mebroot (the malware family Sinowal/Torpig used) compiled in November 2007 according to early infection telemetry, weaponised the technique against actual victim populations [@wp-mebroot]. By 2011, TDL-3 and TDL-4 had pushed the lineage into the millions of infected hosts [@kaspersky-tdl4].&lt;/p&gt;
&lt;p&gt;The category took its final structural step on 13 September 2011, when Marco Giuliani at Webroot&apos;s threat lab disclosed &lt;em&gt;Mebromi&lt;/em&gt;, the first BIOS rootkit found in the wild. Mebromi targeted Award BIOS firmware. It used the legitimate Phoenix &lt;code&gt;CBROM.EXE&lt;/code&gt; utility -- a tool the BIOS vendor itself shipped for assembling firmware images -- to splice malicious code into the firmware ROM image, then flashed the modified ROM through System Management Mode. On every subsequent boot, the firmware itself reinstalled the rootkit&apos;s MBR before any operating system existed to scan for it.The Mebromi reuse of the legitimate &lt;code&gt;CBROM.EXE&lt;/code&gt; firmware-assembly utility is the canonical illustration of the architectural problem. The defender&apos;s tools and the attacker&apos;s tools were the same tools. The firmware-update path had no signature, no measurement, and no policy gate; CBROM was just an executable that knew the Award ROM image format. The fix was not better antivirus. The fix was a hardware root that the OS itself could not rewrite.&lt;/p&gt;
&lt;p&gt;The structural argument that Mebromi made unanswerable: there was no measurement endpoint and no signature verifier &lt;em&gt;anywhere below&lt;/em&gt; the operating system. Every operating-system-level defence was rhetorical against this layer. Kernel-Mode Code Signing, the policy Windows Vista x64 had introduced in 2006 [@app-identity-sibling], was enforced by code that the bootkit could rewrite before the kernel started checking. Driver Signature Enforcement was a setting the operating system wrote into a memory location the operating system could not yet defend.&lt;/p&gt;
&lt;p&gt;Trust must be rooted in something the operating system cannot rewrite. That means the chain has to start before the operating system exists. The next rung is firmware itself.&lt;/p&gt;
&lt;h2&gt;3. UEFI Platform Initialization: SEC, PEI, DXE, BDS, and where Secure Boot actually lives&lt;/h2&gt;
&lt;p&gt;If Secure Boot starts at the operating-system loader, which exact piece of firmware decides whether the operating-system loader is allowed to run, and what verifies &lt;em&gt;that&lt;/em&gt; piece? The answer is a four-phase pipeline that almost no Windows engineer ever writes about. It is also where every modern firmware attack lands.&lt;/p&gt;

The Unified Extensible Firmware Interface Platform Initialization specification defines the internal architecture firmware uses to bring a system up. It splits boot into four phases: Security (SEC), Pre-EFI Initialization (PEI), Driver Execution Environment (DXE), and Boot Device Selection (BDS). Standard Windows usage of &quot;UEFI&quot; almost always means the externally-visible behaviour exposed by BDS and the EFI runtime services, not the multi-phase internal pipeline the firmware uses to get there.
&lt;p&gt;The four phases, per the TianoCore reference flow [@tianocore-pi-flow]:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SEC.&lt;/strong&gt; The Security phase begins at processor reset. Code runs from immutable on-die ROM or a locked region of SPI flash before main memory is even initialised. SEC&apos;s job is to establish the root of trust in the firmware -- before any flexible code path can be taken, the firmware has committed to an instruction stream the operating system cannot influence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PEI.&lt;/strong&gt; Pre-EFI Initialization brings up DRAM, configures the memory controller, populates Hand-Off Blocks (HOBs) the later phases consume, and dispatches the small drivers needed to reach a state where general firmware code can run. SEC and PEI together are the part of firmware that fits in the few hundred kilobytes of cache-as-RAM the CPU offers before main memory is up.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DXE.&lt;/strong&gt; The Driver Execution Environment hosts most of what we think of as firmware: the disk drivers, the network stack, the human-interface drivers, the USB stack, and Secure Boot&apos;s image verifier. &lt;em&gt;This is where &lt;code&gt;LoadImage()&lt;/code&gt; runs db/dbx checks against incoming PE/COFF binaries.&lt;/em&gt; DXE phase code is several megabytes on a modern x86 platform.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BDS.&lt;/strong&gt; Boot Device Selection reads the &lt;code&gt;BootOrder&lt;/code&gt; UEFI variable, picks a boot entry, hands the platform off to the operating system loader, and -- in normal operation -- never runs again until the next reboot.&lt;/li&gt;
&lt;/ul&gt;

flowchart LR
    BG[&quot;Boot Guard / AMD PSB&lt;br /&gt;(microcode, OTP fuses)&quot;] --&amp;gt; SEC[&quot;SEC&lt;br /&gt;immutable ROM&quot;]
    SEC --&amp;gt; PEI[&quot;PEI&lt;br /&gt;DRAM init&quot;]
    PEI --&amp;gt; DXE[&quot;DXE&lt;br /&gt;Secure Boot LoadImage()&quot;]
    DXE --&amp;gt; BDS[&quot;BDS&lt;br /&gt;read BootOrder&quot;]
    BDS --&amp;gt; OS[&quot;bootmgfw.efi&quot;]
&lt;p&gt;There is one rung &lt;em&gt;below&lt;/em&gt; SEC. Intel Boot Guard verifies the firmware via a CPU-microcode-loaded Authenticated Code Module signed by Intel [@wp-txt]; AMD Platform Secure Boot performs the same role from the AMD Platform Security Processor (PSP), an ARM-based co-processor embedded on the SoC [@ioactive-psb, @wp-amd-psp]. Both run before SEC can begin. Intel introduced Boot Guard on platforms based on the Haswell processor family (4th-generation Core, Lynx Point PCH) in 2013 [@eset-lojax, @wp-txt]; the actual root-of-trust fuses live in the PCH (on Haswell through Skylake-era platforms; from Ice Lake (2019+) onward, Intel placed the fuses on the CPU die itself) [@eset-lojax], and the OEM commits the verification key at provisioning, so Boot Guard support is a chipset-and-OEM property rather than a bare CPU-model property [@eset-lojax, @ioactive-psb]. AMD&apos;s PSB followed on EPYC server parts and was rolled out to Ryzen Pro platforms over the next several years; the PSP itself has been present on AMD client and server parts since around 2013 [@wp-amd-psp], but PSB is a distinct firmware-signing flow that uses it [@ioactive-psb].The Windows Hardware Compatibility Program codified UEFI 2.3.1 as the firmware floor for Windows 10 security features [@ms-oem-uefi]. Anything below 2.3.1 cannot host a Secure Boot configuration that Microsoft will certify. The keys that anchor those verifications are burned into one-time-programmable fuses inside the package, so the OEM commits to a public key when the part ships and cannot rotate it later [@eset-lojax, @ioactive-psb]. ESET&apos;s 2018 LoJax disclosure recommended Boot Guard explicitly: &quot;if possible, have a processor with a hardware root of trust as is the case with Intel processors supporting Intel Boot Guard (from the Haswell family of Intel processors onwards)&quot; [@eset-lojax].Boot Guard&apos;s OTP fuses are the canonical example of why hardware-rooted verification cannot have a software-only escape hatch [@eset-lojax, @ioactive-psb]. If the OEM&apos;s signing key leaks, the fuses cannot be reprogrammed in the field; an attacker with the leaked key can produce firmware that the silicon will accept. This is the structural argument behind moving the root one more rung down -- into Pluton, where Microsoft, not the OEM, owns the update cadence.&lt;/p&gt;
&lt;p&gt;The conclusion is the part most engineers skip. By the time &lt;code&gt;bootmgfw.efi&lt;/code&gt; is verified, several megabytes of DXE-phase code have already executed. Anything that compromises the DXE compromises Secure Boot from below: the verifier itself is now the attacker&apos;s code. That is the precondition that LogoFAIL exploits, and it is the reason &quot;Secure Boot starts at the OS loader&quot; is the wrong mental model.&lt;/p&gt;
&lt;p&gt;NIST recognised the structural problem early. NIST Special Publication 800-147 &lt;em&gt;BIOS Protection Guidelines&lt;/em&gt; (April 2011) [@nist-sp-800-147] articulated the BIOS-update-signing baseline two years before Boot Guard shipped a hardware-rooted answer. SP 800-147 said only that firmware updates must be signed; it did not say &lt;em&gt;who&lt;/em&gt; must verify the signing key. Boot Guard and PSB were the hardware-rooted answer to that gap, with the OEM holding the verification key in OTP fuses.&lt;/p&gt;
&lt;p&gt;Now we have a place to put a verifier. The next question is &lt;em&gt;what&lt;/em&gt; it verifies, and &lt;em&gt;who&lt;/em&gt; signed the allowlist.&lt;/p&gt;
&lt;h2&gt;4. Secure Boot itself: PK, KEK, db, dbx, and the Microsoft monoculture&lt;/h2&gt;
&lt;p&gt;Secure Boot is four UEFI variables, one Authenticode hash per binary, and one centralised root of trust. The technical content of this section is not the hard part. The social and operational content -- &lt;em&gt;who&lt;/em&gt; holds which key, and &lt;em&gt;what happens when a signed binary becomes vulnerable&lt;/em&gt; -- is the rest of the article.&lt;/p&gt;
&lt;p&gt;The four authenticated UEFI variables, defined in UEFI 2.3.1 (April 2011) and refined through the current 2.11 specification (December 16, 2024) [@oem-secure-boot]:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PK&lt;/strong&gt; -- the Platform Key. The OEM holds the private half. Whoever holds PK can rewrite KEK, db, and dbx; whoever holds PK can &lt;em&gt;turn Secure Boot off&lt;/em&gt; by replacing PK with a key it does not actually own.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KEK&lt;/strong&gt; -- the Key Exchange Key. Both the OEM and Microsoft hold KEKs. KEK is the trust anchor for db and dbx updates. A KEK-signed update can add or remove entries in db and dbx without touching PK.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;db&lt;/strong&gt; -- the signature database. This is the allowlist: hashes the firmware will accept, plus certificates whose signers it will accept. db typically contains a small handful of entries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dbx&lt;/strong&gt; -- the forbidden signatures database. The denylist: hashes and certs the firmware must refuse, even if they would otherwise pass db.&lt;/li&gt;
&lt;/ul&gt;

Four EFI variables defined by the UEFI specification that together form Secure Boot&apos;s trust hierarchy. Each variable is *authenticated*: any update must be signed by a key one rung up the hierarchy. PK signs updates to KEK, db, and dbx; KEK signs updates to db and dbx. Microsoft requires the Microsoft Corporation KEK CA to be present in KEK on every Windows-certified PC, so that Microsoft can push db and dbx updates without OEM cooperation per device.
&lt;p&gt;The verification algorithm runs every time UEFI calls &lt;code&gt;LoadImage()&lt;/code&gt; on a PE/COFF binary, in this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hash the PE/COFF image. The Authenticode digest excludes the signature directory and the checksum field, so the hash is computed over the parts of the image that should not change between signing and loading [@ms-pe-format].&lt;/li&gt;
&lt;li&gt;If the hash matches a hash in dbx, reject.&lt;/li&gt;
&lt;li&gt;Else if the signer&apos;s certificate chains to a certificate in dbx, reject.&lt;/li&gt;
&lt;li&gt;Else if the hash matches an entry in db, accept. Else if the signer chains to a certificate in db, accept.&lt;/li&gt;
&lt;li&gt;Else, reject.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Microsoft&apos;s WHCP requires firmware components to be signed with at least RSA-2048 and SHA-256 [@oem-secure-boot]. That floor is generous by 2026 standards but has held without serious controversy since the original UEFI 2.3.1 release.&lt;/p&gt;

flowchart TD
    L[&quot;LoadImage(image)&quot;] --&amp;gt; H[&quot;Compute Authenticode hash&quot;]
    H --&amp;gt; D1{&quot;Hash in dbx?&quot;}
    D1 -- yes --&amp;gt; R[&quot;REJECT&quot;]
    D1 -- no --&amp;gt; D2{&quot;Signer chains to dbx cert?&quot;}
    D2 -- yes --&amp;gt; R
    D2 -- no --&amp;gt; D3{&quot;Hash in db, OR signer chains to db cert?&quot;}
    D3 -- yes --&amp;gt; A[&quot;ACCEPT (load image)&quot;]
    D3 -- no --&amp;gt; R
&lt;p&gt;The de facto roots for x86 PCs are &lt;em&gt;two&lt;/em&gt; Microsoft-rooted certificate authorities, both pre-trusted in db on essentially every certified Windows-class system: the &lt;strong&gt;Microsoft Windows Production PCA 2011&lt;/strong&gt;, which signs Microsoft&apos;s own Windows boot binaries (&lt;code&gt;bootmgfw.efi&lt;/code&gt;, &lt;code&gt;bootmgr.efi&lt;/code&gt;, &lt;code&gt;winload.efi&lt;/code&gt;), and the &lt;strong&gt;Microsoft Corporation UEFI CA 2011&lt;/strong&gt;, which signs third-party UEFI binaries -- Linux&apos;s &lt;code&gt;shim&lt;/code&gt;, option ROMs, and third-party firmware drivers [@sbat-shim, @oem-secure-boot]. The rhboot/shim project documents the arrangement: every certified PC is &quot;typically configured to trust 2 authorities for signing UEFI boot code, the Microsoft UEFI Certificate Authority (CA) and Windows CA&quot; [@sbat-shim]. The fact that &lt;em&gt;both&lt;/em&gt; are Microsoft-rooted is the reason Secure Boot, as deployed, and &quot;Microsoft is the gatekeeper of which operating systems may boot&quot; are operationally the same thing. The UEFI Forum&apos;s specification did not require that monoculture. The economics did. There are exactly two certificate authorities every OEM is willing to trust by default, and both belong to the operating-system vendor whose installer media every OEM ships.&lt;/p&gt;

The X.509 certificate authorities Microsoft uses for Secure Boot. Two CAs from the 2011 family ship pre-installed in db on essentially every Windows-certified PC: the **Microsoft Windows Production PCA 2011** signs Microsoft&apos;s own Windows boot binaries, and the **Microsoft Corporation UEFI CA 2011** signs third-party UEFI binaries (Linux&apos;s `shim`, option ROMs, third-party firmware drivers). Both 2011 certificates begin expiring in late June 2026. The **Windows UEFI CA 2023** is their successor; its industry-wide enrolment began in May 2023 with the KB5025885 program responding to CVE-2023-24932 and is still rolling out under phased automatic enrolment via monthly Windows Updates as of 2026.

Linux&apos;s path through Secure Boot runs through `shim.efi`, a small bootloader Matthew Garrett released on November 30, 2012 -- his last day at Red Hat. The trick is structural: Microsoft signs `shim` itself; `shim` is shipped on the install media of every major Linux distribution; once running, `shim` validates a distribution-signed `grubx64.efi` (or kernel) using a key the distribution embeds, *or* a Machine Owner Key (MOK) the user has enrolled at install time. Garrett credits the MOK design to engineers at SUSE. The arrangement is the open-source community&apos;s pressure valve against the Microsoft monoculture: Linux still boots on Secure Boot hardware because Microsoft signs one bootloader that delegates trust to a community-managed key store. It also explains why Linux dual-boot installs began breaking after May 2023 -- the certificates that signed older copies of `shim` are being rotated out.
&lt;p&gt;The dbx variable carries the operational weight of the system. If a signed bootloader is found to be vulnerable, the only blocking remedy is to add its hash to dbx. dbx lives in NV-RAM; on commodity Windows PCs the storage budget is roughly 32 KB total [@sbat-shim].The 32 KB figure comes from the rhboot/shim project&apos;s SBAT documentation, which notes that the BootHole disclosure of July 2020 -- a single GRUB vulnerability requiring revocation of three certificates and roughly 150 image hashes -- consumed approximately 10 KB of dbx in one event. That is one third of the available capacity, used up by one CVE. Linux distributions and Windows share the same dbx region. A botched update can refuse to validate a bootloader that the platform actually needs, and there is no remote rollback for a brick-on-write to dbx. Section 9 will show what happens when dbx revocation lags behind a CVE.&lt;/p&gt;
&lt;p&gt;The CA-2023 transition is therefore not a routine certificate rotation. The original 2011 certificates begin expiring in late June 2026. Microsoft&apos;s industry-wide Windows UEFI CA 2023 rollout started May 2023 with KB5025885, the patch advisory that paired with CVE-2023-24932, and is on track to be, in Microsoft&apos;s own framing, one of the largest coordinated security maintenance efforts the Windows install base has ever seen [@kb5025885]. The phasing, as published: enrol the new CA in db; sign new bootloaders with it; enrol new dbx entries to revoke older signed-but-vulnerable binaries; finally, revoke the 2011 CA. The published cautionary text is unambiguous: once the irreversible mitigation step is enabled on a device, &quot;it cannot be reverted if you continue to use Secure Boot on that device. Even reformatting of the disk will not remove the revocations if they have already been applied&quot; [@kb5025885].&lt;/p&gt;
&lt;p&gt;{`
// Sketch of what UEFI does for every PE/COFF binary it loads.
function loadImage(image, db, dbx) {
  const hash = authenticodeHash(image);
  const signerCert = parseSignerCert(image);&lt;/p&gt;
&lt;p&gt;  if (dbx.hashes.includes(hash)) return { ok: false, reason: &quot;dbx hash&quot; };
  if (signerCert &amp;amp;&amp;amp; chainsTo(signerCert, dbx.certs)) {
    return { ok: false, reason: &quot;dbx cert&quot; };
  }
  if (db.hashes.includes(hash)) return { ok: true, reason: &quot;db hash&quot; };
  if (signerCert &amp;amp;&amp;amp; chainsTo(signerCert, db.certs)) {
    return { ok: true, reason: &quot;db cert&quot; };
  }
  return { ok: false, reason: &quot;not in db&quot; };
}&lt;/p&gt;
&lt;p&gt;const decision = loadImage(
  { hash: &quot;abc&quot;, signer: &quot;Microsoft Windows Production PCA 2011&quot; },
  { hashes: [], certs: [&quot;Microsoft Windows Production PCA 2011&quot;, &quot;Microsoft Corporation UEFI CA 2011&quot;] },
  { hashes: [], certs: [] }
);
console.log(decision);
`}&lt;/p&gt;
&lt;p&gt;Verification is a one-shot signature check at firmware boundaries. The chain still has to extend all the way to userland. Microsoft&apos;s name for what comes next is &lt;em&gt;Trusted Boot&lt;/em&gt;. And here is the thing the patch-cadence narrative fails to convey: &lt;em&gt;patched is not revoked&lt;/em&gt;. Microsoft can ship a fixed &lt;code&gt;bootmgfw.efi&lt;/code&gt; next month. It cannot delete the old, vulnerable, validly-signed copy from every machine in the world. As long as the old binary&apos;s hash is not in dbx, Secure Boot will load it.&lt;/p&gt;
&lt;h2&gt;5. Trusted Boot: bootmgfw.efi, winload.efi, and the Windows-specific chain&lt;/h2&gt;
&lt;p&gt;Secure Boot can answer &quot;is this &lt;code&gt;.efi&lt;/code&gt; file in our allowlist?&quot; It cannot answer &quot;is every kernel-mode driver loaded after this &lt;code&gt;.efi&lt;/code&gt; file in our allowlist?&quot; That second question is what Trusted Boot exists to answer.&lt;/p&gt;

Microsoft&apos;s term for the post-firmware portion of the verified boot chain. UEFI Secure Boot validates `bootmgfw.efi`. `bootmgfw.efi` validates `winload.efi`. `winload.efi` validates `ntoskrnl.exe`, the Hardware Abstraction Layer, every boot-start driver, and the ELAM driver. `ntoskrnl.exe` validates every driver loaded thereafter against the active code-integrity policy. Trusted Boot is therefore the Microsoft policy enforcement chain layered *on top of* Secure Boot&apos;s firmware-side verifier; it is what extends the signature check past the operating-system loader into kernel mode.
&lt;p&gt;The mechanics, after the firmware hands control to &lt;code&gt;bootmgfw.efi&lt;/code&gt;: the boot manager reads the Boot Configuration Data store, locates &lt;code&gt;winload.efi&lt;/code&gt; (or &lt;code&gt;winresume.efi&lt;/code&gt; for resuming from hibernation), and enforces the boot-time integrity policy on every component it loads [@ms-trusted-boot]. The verifier handoff, however, is more interesting than the Microsoft Learn paragraph suggests. It runs in three stages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stage A: &lt;code&gt;winload&lt;/code&gt;&apos;s in-image &lt;code&gt;bootlib&lt;/code&gt; verifier.&lt;/strong&gt; &lt;code&gt;winload.efi&lt;/code&gt; does not call kernel-mode &lt;code&gt;ci.dll&lt;/code&gt; to validate boot images. It carries its own boot-time code-integrity verifier inside the &lt;code&gt;bootlib&lt;/code&gt; boot library shared with &lt;code&gt;bootmgr&lt;/code&gt;. Reverse-engineering work on the Elysium bootkit research framework reconstructed the call chain inside &lt;code&gt;winload.efi&lt;/code&gt;: &lt;code&gt;OslLoadDrivers&lt;/code&gt; -&amp;gt; &lt;code&gt;OslLoadImage&lt;/code&gt; -&amp;gt; &lt;code&gt;LdrpLoadImage&lt;/code&gt; -&amp;gt; &lt;code&gt;BlImgLoadPEImageEx&lt;/code&gt; -&amp;gt; &lt;code&gt;ImgpLoadPEImage&lt;/code&gt;, with &lt;code&gt;ImgpValidateImageHash&lt;/code&gt; performing the Authenticode digest check against the trusted boot policy embedded in &lt;code&gt;winload&lt;/code&gt; itself [@elysium-bootkit]. Boot-start drivers, &lt;code&gt;ntoskrnl.exe&lt;/code&gt;, the Hardware Abstraction Layer, and the ELAM driver all flow through this chain before kernel mode is alive to do anything about it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stage B: handoff via &lt;code&gt;LOADER_PARAMETER_EXTENSION&lt;/code&gt;.&lt;/strong&gt; When &lt;code&gt;winload.efi&lt;/code&gt; is done validating, it has to hand the validated state across the loader-kernel boundary. The mechanism is &lt;code&gt;LOADER_PARAMETER_EXTENSION&lt;/code&gt; (LPE), the under-documented structure that hangs off the &lt;code&gt;LOADER_PARAMETER_BLOCK&lt;/code&gt; whose address the loader passes to the kernel.The LPE structure has been Microsoft-internal in every shipping Windows release; the public reference Geoff Chappell maintains is the canonical third-party reverse-engineering of its layout across Windows builds. New fields are added at the tail of the structure when shipping features need to communicate state across the loader/kernel boundary. The fact that Smart App Control&apos;s CI state needed two new LPE fields is a small but telling indicator of how much policy state Trusted Boot now carries. Geoff Chappell&apos;s reference describes the LPE as &quot;part of the mechanism through which the kernel and HAL learn the initialisation data that was gathered by the loader&quot; [@geoffchappell-lpe]. The structure has grown across Windows builds; with Smart App Control on Windows 11 22H2, two new fields -- &lt;code&gt;CodeIntegrityData&lt;/code&gt; and &lt;code&gt;CodeIntegrityDataSize&lt;/code&gt; -- were added so that the loader-validated CI state, including the active SiPolicy and the pre-validated boot-start driver list, would survive the handoff intact [@n4r1b-sac].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stage C: kernel-mode &lt;code&gt;ci.dll&lt;/code&gt; continuation.&lt;/strong&gt; Only after &lt;code&gt;ntoskrnl.exe&lt;/code&gt; is itself running does the kernel-mode &lt;code&gt;ci.dll&lt;/code&gt; come into play. It picks up the SiPolicy state from the LPE and continues the same code-integrity policy enforcement on every kernel-mode image loaded after the loader&apos;s window closes -- principally via the &lt;code&gt;Se&lt;/code&gt;-prefixed validation routines that the kernel&apos;s image-load notification routines call into. From that point, every subsequent driver load goes through the same code-integrity gate. The &lt;code&gt;bootlib&lt;/code&gt; -&amp;gt; LPE -&amp;gt; kernel-mode &lt;code&gt;ci.dll&lt;/code&gt; decomposition is the underlying mechanism Microsoft&apos;s high-level documentation collapses into a single sentence:&lt;/p&gt;

The Windows bootloader verifies the digital signature of the Windows kernel before loading it. The Windows kernel, in turn, verifies every other component of the Windows startup process, including boot drivers, startup files, and your anti-malware product&apos;s early-launch anti-malware (ELAM) driver. -- Microsoft Learn [@ms-trusted-boot]
&lt;p&gt;Trusted Boot is therefore the &lt;em&gt;Windows-specific&lt;/em&gt; extension of the verifier into kernel mode. UEFI Secure Boot is platform-agnostic; it ships in db on every certified PC. Trusted Boot is the policy engine that reuses the firmware-side trust anchor and walks it forward into &lt;code&gt;ntoskrnl.exe&lt;/code&gt;. The mechanism for &lt;em&gt;how&lt;/em&gt; SiPolicy is parsed, how publisher rules are evaluated, and how the kernel&apos;s code-integrity state machine handles attempts to load binaries outside policy, lives in this article&apos;s App Identity sibling and is not redefined here [@app-identity-sibling].&lt;/p&gt;
&lt;p&gt;There is a failure mode you can see coming. If the trusted boot manager itself is signed but vulnerable, the chain still validates, the policy still enforces, and the entire defence is bypassed. The signature is correct; the code path is what is wrong. Section 9 will show what happens when an older &lt;code&gt;bootmgfw.efi&lt;/code&gt; revision contains a memory-map manipulation flaw that lets attacker-controlled data flow before the SiPolicy enforcement engine is up. That is the BlackLotus failure. For now, hold the framing: Trusted Boot&apos;s guarantee is &quot;every kernel-mode component has a valid Microsoft signature.&quot; It is not &quot;every Microsoft signature in this chain corresponds to a binary that is itself secure.&quot;&lt;/p&gt;
&lt;p&gt;Verification can stop loading bad code. It cannot prove that good code was loaded. For that we need a parallel rail.&lt;/p&gt;
&lt;h2&gt;6. Measured Boot: SRTM, the TPM event log, and PCR 0-7+11 in order&lt;/h2&gt;
&lt;p&gt;Verification stops bad code from running. &lt;em&gt;Measurement&lt;/em&gt; makes sure you can prove, after the fact, what code did run. The two rails do not protect against the same thing. This is the article&apos;s mechanism-densest section, and the place a few key terms have to be exactly right.&lt;/p&gt;

A boot-time chain of cryptographic measurements anchored in a Core Root of Trust for Measurement (CRTM): a code segment in the platform&apos;s flash that is implicitly trusted because it is immutable and is *measured by construction* into the TPM before any flexible code runs. SRTM extends one PCR per component as the chain unfolds, producing a tamper-evident log of exactly which firmware, boot manager, and kernel the platform launched. The measurement does not stop bad code; it records what code ran so a verifier can decide later.
&lt;p&gt;The TPM extend primitive is the cryptographic core. The TPM never overwrites a PCR. When the platform asks the TPM to extend PCR &lt;code&gt;N&lt;/code&gt; with a measurement &lt;code&gt;m&lt;/code&gt;, the TPM does:&lt;/p&gt;
&lt;p&gt;$$\mathrm{PCR}[N] := H\bigl(\mathrm{PCR}[N] ,\Vert, m\bigr)$$&lt;/p&gt;
&lt;p&gt;where &lt;code&gt;H&lt;/code&gt; is the bank&apos;s hash algorithm (SHA-1 on TPM 1.2; SHA-1 and SHA-256 banks both required by the TCG PC Client Platform Firmware Profile on TPM 2.0; SHA-384 and SHA3 banks optional and present on some newer parts) and &lt;code&gt;||&lt;/code&gt; is byte concatenation [@syss-bitpixie]. The TPM 2.0 specification was finalised by the Trusted Computing Group on 9 April 2014 [@wp-tpm]. The mechanism guarantees that any later PCR value is a function of every prior measurement in the order it was extended -- you cannot rewind, and you cannot reorder. The TPM 2.0 PC Client profile specifies at least 24 PCRs, the first 16 of which are append-only and non-resettable until the platform itself is reset [@syss-bitpixie]. The full TPM &lt;code&gt;extend&lt;/code&gt; mechanics are covered in this article&apos;s TPM sibling; we do not redefine them here [@tpm-sibling].&lt;/p&gt;
&lt;p&gt;The PCR allocation, per the TCG PC Client Platform Firmware Profile, corroborated against the SySS Bitpixie writeup [@syss-bitpixie] and Microsoft Learn [@ms-secure-boot-process]:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PCR&lt;/th&gt;
&lt;th&gt;Extended by&lt;/th&gt;
&lt;th&gt;What it measures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;CRTM, SEC, PEI&lt;/td&gt;
&lt;td&gt;SRTM core firmware code (BIOS/UEFI)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;PEI / DXE&lt;/td&gt;
&lt;td&gt;Host platform configuration (CPU microcode, NVRAM settings)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;DXE&lt;/td&gt;
&lt;td&gt;UEFI driver and application code (option ROMs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;DXE&lt;/td&gt;
&lt;td&gt;UEFI driver and application configuration / data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;DXE / BDS&lt;/td&gt;
&lt;td&gt;Hashes of all boot managers in the boot path; &lt;code&gt;bootmgfw.efi&lt;/code&gt; lands here&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;BDS&lt;/td&gt;
&lt;td&gt;Boot manager code config and data; GPT; boot attempts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;DXE / OEM&lt;/td&gt;
&lt;td&gt;Host platform manufacturer specific&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;DXE&lt;/td&gt;
&lt;td&gt;State of Secure Boot: PK, KEK, db, dbx hashes; the &lt;code&gt;SecureBoot&lt;/code&gt; variable; signing certificate of every loaded image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bootmgfw.efi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BitLocker access control: locked after VMK is obtained&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

sequenceDiagram
    participant CRTM
    participant SEC
    participant DXE
    participant BMGR as bootmgfw.efi
    participant TPM as TPM PCRs
    CRTM-&amp;gt;&amp;gt;TPM: extend PCR[0] with SRTM hash
    SEC-&amp;gt;&amp;gt;TPM: extend PCR[1] with platform config
    DXE-&amp;gt;&amp;gt;TPM: extend PCR[2] with option-ROM code
    DXE-&amp;gt;&amp;gt;TPM: extend PCR[7] with Secure Boot state
    DXE-&amp;gt;&amp;gt;TPM: extend PCR[4] with bootmgfw.efi hash
    BMGR-&amp;gt;&amp;gt;TPM: extend PCR[4] with winload.efi hash
    BMGR-&amp;gt;&amp;gt;TPM: extend PCR[7] with signer cert of winload
    BMGR-&amp;gt;&amp;gt;TPM: extend PCR[11] with BitLocker access flag
&lt;p&gt;PCR[7] deserves a section of its own. On modern Windows, &lt;em&gt;PCR[7] is the canonical seal target&lt;/em&gt; for BitLocker. A protector sealed to PCR[7] unwraps cleanly across firmware updates, microcode revisions, and option-ROM changes, because PCR[7] reflects only the Secure Boot state -- the keys in PK, KEK, db, dbx, the &lt;code&gt;SecureBoot&lt;/code&gt; variable, and the signing certificates of loaded images. PCR[0..4] are too volatile for sealing on a real fleet because every BIOS update changes them. PCR[7] changes only when Secure Boot policy itself changes [@syss-bitpixie, @ms-system-guard]. The full BitLocker key hierarchy is covered in this article&apos;s BitLocker sibling [@bitlocker-sibling]; here we are placing PCR[7] in the chain.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Verification stops bad code. Measurement records what code ran. Neither rail is sufficient alone. Modern Windows boot integrity needs both rails reaching the same place -- the kernel and the Secure Kernel -- before user-mode runtime defences take over.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The TCG event log makes the measurement chain useful for more than sealing. Every &lt;code&gt;extend&lt;/code&gt; is logged through the TCG2 EFI Protocol with the hash, the algorithm, and a description of what was measured. A verifier (BitLocker locally; an attestation service remotely) can replay the log to recover &lt;em&gt;which binary hashed to which PCR value&lt;/em&gt;, and -- if the replay does not match the live PCRs -- detect tampering. Microsoft Learn describes exactly that path: &quot;the PC&apos;s firmware logs the boot process, and Windows can send it to a trusted server that can objectively assess the PC&apos;s health&quot; [@ms-secure-boot-process].&lt;/p&gt;
&lt;p&gt;There is a second root of measurement that sidesteps the firmware-trust regress entirely. DRTM -- Dynamic Root of Trust for Measurement -- is late-launched after firmware boot, via Intel TXT&apos;s &lt;code&gt;GETSEC[SENTER]&lt;/code&gt; instruction or AMD&apos;s &lt;code&gt;SKINIT&lt;/code&gt;. It resets PCR[17..22] at locality 4 and re-anchors a measurement chain in a vendor-controlled allowlistable module that does not depend on the DXE phase having been clean [@wp-txt, @ms-system-guard]. Microsoft documents the motivation in plain language:&lt;/p&gt;

There are thousands of PC vendors that produce many models with different UEFI BIOS versions. This creates an incredibly large number of SRTM measurements upon bootup. [@ms-system-guard]
&lt;p&gt;The argument: SRTM measurements are platform-specific. An attestation service that wants to know whether a given device booted clean must hold an allowlist of SRTM measurements covering N OEMs * M models * K firmware revisions. The allowlist explodes; the blocklist is asymmetric in the attacker&apos;s favour. DRTM collapses the allowlist by defining one small, well-known late-launched measurement chain that the attestation service can recognise across every Secured-core PC.&lt;/p&gt;

A late-launched measurement chain that re-anchors trust *after* firmware boot, by using a CPU instruction (`GETSEC[SENTER]` on Intel, `SKINIT` on AMD) to reset a designated set of PCRs and execute a small, vendor-controlled measured launch module. DRTM is Microsoft&apos;s answer to the SRTM allowlist explosion. It powers System Guard Secure Launch, which Windows 10 1809 introduced; on supported hardware, the late-launched module brings up the hypervisor and Secure Kernel from a trust anchor that the firmware cannot influence.
&lt;p&gt;The DRTM PCR allocation is parallel to SRTM but lives in a separate range, PCR[17..22], reset only by the late-launch event. Per the TCG PC Client Platform Firmware Profile (corroborated against the Wikipedia Trusted Execution Technology mirror, since TCG returns HTTP 403 to non-browser fetches) and Microsoft&apos;s System Guard documentation [@wp-txt, @ms-system-guard]:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PCR&lt;/th&gt;
&lt;th&gt;Reset by&lt;/th&gt;
&lt;th&gt;What it measures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GETSEC[SENTER]&lt;/code&gt; / &lt;code&gt;SKINIT&lt;/code&gt; at locality 4&lt;/td&gt;
&lt;td&gt;DRTM-event measurement and Launch Control Policy hash extended by the SINIT ACM (Intel TXT) or the Secure Loader block hash (&lt;code&gt;SKINIT&lt;/code&gt; on AMD)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;locality 4&lt;/td&gt;
&lt;td&gt;Trusted-OS start-up code (the Measured Launch Environment itself)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;locality 4&lt;/td&gt;
&lt;td&gt;Trusted-OS measurement, e.g., OS configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;locality 4&lt;/td&gt;
&lt;td&gt;Trusted-OS measurement, e.g., OS kernel and other code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;locality 4&lt;/td&gt;
&lt;td&gt;Reserved for and defined by the Trusted OS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;locality 4&lt;/td&gt;
&lt;td&gt;Reserved for and defined by the Trusted OS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The reset semantics are the load-bearing detail. PCR[0..16] are append-only after platform reset; they cannot be cleared without rebooting the box. PCR[17..22] are different: they can be reset &lt;em&gt;during runtime&lt;/em&gt;, but only by an atomic late-launch event. That asymmetry is what makes DRTM&apos;s anchor verifiable [@wp-txt, @syss-bitpixie].&lt;/p&gt;
&lt;p&gt;The mechanism that enforces it is &lt;em&gt;TPM locality&lt;/em&gt;. Locality is a side-channel attribute on every TPM command identifying which entity issued the request. Locality 0 is general OS and application traffic. &lt;strong&gt;Locality 4 is assertable only by the CPU itself&lt;/strong&gt;, during the atomic &lt;code&gt;GETSEC[SENTER]&lt;/code&gt; (Intel TXT) or &lt;code&gt;SKINIT&lt;/code&gt; (AMD) sequence. The TPM accepts a &lt;code&gt;Reset&lt;/code&gt; of PCR[17..22] only when the request arrives tagged with locality 4. No software running outside the late-launch instruction can forge that tag. That is the structural reason DRTM&apos;s late-launch is verifiable rather than forgeable [@wp-txt].&lt;/p&gt;
&lt;p&gt;The asymmetry pays off for an attestation service. If a remote verifier reads PCR[17] and finds it equal to zero, DRTM did not happen on this boot. If it reads PCR[17] and finds it equal to the iterated extend $\mathrm{PCR}[17] := H\bigl(0 ,\Vert, H(\text{SINIT_ACM_hash} ,\Vert, \text{LCP_hash})\bigr)$ (or, more accurately, the chain of extends the SINIT ACM logged), a CPU-vendor-signed SINIT Authenticated Code Module seeded the chain, and the value is recomputable by the verifier from the published, signed SINIT ACM and the platform&apos;s Launch Control Policy [@wp-txt, @ms-system-guard]. The verifier&apos;s allowlist for DRTM measurements is bounded by the small set of CPU-vendor-signed measured-launch modules in circulation (SINIT ACMs on Intel TXT; the Secure Loader block measured directly by &lt;code&gt;SKINIT&lt;/code&gt; on AMD) -- not by the cross-product of OEMs, models, and firmware revisions.&lt;/p&gt;
&lt;p&gt;{`
// Demonstrates the PCR extend formula:
//   PCR[N] := H( PCR[N] || measurement )
// Run it to see how PCR[4] would evolve as bootmgfw, winload, and ntoskrnl
// hashes are extended one after another.&lt;/p&gt;
&lt;p&gt;const sha256 = (buf) =&amp;gt; createHash(&apos;sha256&apos;).update(buf).digest();&lt;/p&gt;
&lt;p&gt;function extend(pcrHex, measurementHex) {
  const pcr = Buffer.from(pcrHex, &apos;hex&apos;);
  const m = Buffer.from(measurementHex, &apos;hex&apos;);
  return sha256(Buffer.concat([pcr, m])).toString(&apos;hex&apos;);
}&lt;/p&gt;
&lt;p&gt;// Real PCRs start as 32 bytes of zero on a TPM 2.0 reset.
let pcr4 = &apos;00&apos;.repeat(32);&lt;/p&gt;
&lt;p&gt;const measurements = [
  { name: &apos;bootmgfw.efi&apos;, hash: &apos;aa&apos;.repeat(32) },
  { name: &apos;winload.efi&apos;,  hash: &apos;bb&apos;.repeat(32) },
  { name: &apos;ntoskrnl.exe&apos;, hash: &apos;cc&apos;.repeat(32) },
];&lt;/p&gt;
&lt;p&gt;for (const m of measurements) {
  pcr4 = extend(pcr4, m.hash);
  console.log(`after ${m.name}: PCR[4] = ${pcr4.slice(0, 16)}...`);
}
`}&lt;/p&gt;
&lt;p&gt;We now have two rails of trust ready to converge in the kernel. The next thing the kernel has to do is hand control to defenders that can keep the chain alive into runtime.&lt;/p&gt;
&lt;h2&gt;7. ELAM, the kernel, and the Secure Kernel bring-up: where the chain ends&lt;/h2&gt;
&lt;p&gt;Trusted Boot has signed every kernel-mode binary along the path. Then what? The chain still has to outlive the boot.&lt;/p&gt;

A specially-signed driver class introduced in Windows 8 (2012) that loads as the *first* boot-start driver -- ahead of every other boot-start driver -- and classifies each subsequent boot-start driver as *Good*, *Bad*, *Unknown*, or *BadButCritical* before the operating-system loader allows it to load [@ms-elam, @ms-elam-driver-requirements]. ELAM&apos;s classification influences whether Windows loads the driver. The ELAM driver itself is a Microsoft-signed binary in the `Early-Launch` service-start group and is itself measured into the SRTM chain; the user-mode anti-malware service that consumes its classification events runs as a Protected Process Light (PPL).
&lt;p&gt;ELAM exists for a specific reason. The boot-start group includes anti-malware, device, and disk drivers that have to load before the rest of the operating system. Before Windows 8, those drivers all loaded in an undefined order, with no anti-malware product running yet. A bootkit that survived the kernel&apos;s signature check (or a driver that was signed but malicious) had a window in which nothing was watching. ELAM closed that window by ordering one driver -- a Microsoft-signed AM driver -- as the first boot-start driver, and giving it the right to classify those drivers as they loaded [@ms-elam]. ELAM is itself a boot-start driver; the Microsoft documentation specifies the INF requirement plainly: &quot;An ELAM Driver advertises its group as &apos;Early-Launch&apos;&quot; [@ms-elam-driver-requirements]. The associated user-mode anti-malware service runs as a Protected Process Light (PPL), so even SYSTEM-privileged user-mode code cannot inject into it [@ms-elam, @app-identity-sibling].The classification surface ELAM exposes is the four-element set Good / Bad / Unknown / BadButCritical, enumerated in Microsoft&apos;s &lt;code&gt;BDCB_CLASSIFICATION&lt;/code&gt; reference (ntddk.h) as &lt;code&gt;BdCbClassificationKnownGoodImage&lt;/code&gt;, &lt;code&gt;BdCbClassificationKnownBadImage&lt;/code&gt;, &lt;code&gt;BdCbClassificationUnknownImage&lt;/code&gt;, and &lt;code&gt;BdCbClassificationKnownBadImageBootCritical&lt;/code&gt; (the ELAM driver requirements page itself only enumerates three classes in prose; the fourth lives in the enum reference) [@ms-elam-driver-requirements]. The fourth category exists because some drivers are required for the system to boot; the AM driver&apos;s verdict on those is advisory rather than blocking. Defender ships the ELAM driver in Windows; Microsoft&apos;s interface allows third-party AM products to ship their own [@ms-elam].&lt;/p&gt;
&lt;p&gt;The kernel itself does the next set of jobs. &lt;code&gt;ntoskrnl.exe&lt;/code&gt; initialises memory protections and DMA defences. Kernel DMA Protection enables the IOMMU (Intel VT-d or AMD-Vi) so that PCIe peripherals either DMA only to memory their compatible driver has assigned (DMA-Remapping-compatible drivers, enumerated and started normally) or are blocked from starting and performing DMA entirely until an authorised user signs in or unlocks the screen (DMA-Remapping-incompatible drivers, the user-presence-gated default); both regimes block the drive-by-DMA pattern that targets arbitrary kernel memory and defend against malicious Thunderbolt peripherals [@ms-kernel-dma-protection]. The Driver Block List, enforced at code-integrity load time, refuses to load a recognised set of vulnerable signed drivers (the canonical example is &lt;em&gt;gdrv2.sys&lt;/em&gt;); details in this article&apos;s App Identity sibling [@app-identity-sibling]. HVCI (Hypervisor-Enforced Code Integrity, also called Memory Integrity) is loaded inside the Secure Kernel and enforces W^X on all kernel-mode memory; details in the Secure Kernel sibling [@secure-kernel-sibling].&lt;/p&gt;
&lt;p&gt;Then the Secure Kernel comes up. &lt;code&gt;securekernel.exe&lt;/code&gt; and &lt;code&gt;skci.dll&lt;/code&gt; initialise in Virtual Trust Level 1 -- a Hyper-V-managed isolation domain that the normal Windows kernel in VTL0 cannot read or write. The first Trustlet is LSAIso, the isolated process Credential Guard uses to hold NTLM hashes and Kerberos tickets out of reach of any kernel-mode attacker [@secure-kernel-sibling]. Control returns to the normal kernel; the user-mode tail begins.&lt;/p&gt;

flowchart TD
    WL[&quot;winload.efi&quot;] --&amp;gt; NT[&quot;ntoskrnl.exe (VTL0)&quot;]
    NT --&amp;gt; SK[&quot;securekernel.exe (VTL1)&quot;]
    SK --&amp;gt; LSA[&quot;LSAIso (Credential Guard Trustlet)&quot;]
    NT --&amp;gt; ELAM[&quot;ELAM driver&quot;]
    ELAM --&amp;gt; BS[&quot;boot-start drivers (classified by ELAM)&quot;]
    BS --&amp;gt; SMSS[&quot;smss.exe&quot;]
    SMSS --&amp;gt; WI[&quot;wininit.exe&quot;]
    WI --&amp;gt; WL2[&quot;winlogon.exe&quot;]
    WL2 --&amp;gt; UI[&quot;userinit.exe -&amp;gt; explorer.exe&quot;]
&lt;p&gt;The user-mode tail is not security-cryptographic per se. SMSS (the Session Manager) loads system DLLs and starts the first Win32 subsystem session. &lt;code&gt;wininit.exe&lt;/code&gt; initialises the LSA, the Service Control Manager, and the Local Session Manager. &lt;code&gt;winlogon.exe&lt;/code&gt; paints the credential UI, calls into Windows Hello [@no-secrets-to-steal-sibling] if applicable, and authenticates the user. &lt;code&gt;userinit.exe&lt;/code&gt; runs the logon scripts and launches &lt;code&gt;explorer.exe&lt;/code&gt; [@ms-trusted-boot]. From the boot-integrity perspective, &lt;code&gt;userinit&lt;/code&gt; is the moment the static-time guarantees of Trusted Boot end and the runtime defences -- Defender, EDR, attestation -- take over.&lt;/p&gt;
&lt;p&gt;We have walked the chain end to end. The next question is: when did this chain &lt;em&gt;actually start working&lt;/em&gt;?&lt;/p&gt;
&lt;h2&gt;8. The breakthroughs that made the chain land (2014-2024)&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Secure Boot existed&lt;/em&gt; in 2012. &lt;em&gt;Secure Boot worked&lt;/em&gt; (in the sense of defending most of what it claims to defend) only after roughly a decade of operational fixes that almost nobody outside Microsoft and a handful of OEMs ever wrote about. Four breakthroughs deserve naming. The matrix below collates them by &lt;em&gt;layer fixed&lt;/em&gt; and &lt;em&gt;fix-delivery vehicle&lt;/em&gt; before the prose treatments that follow.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Breakthrough&lt;/th&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Layer it fixed&lt;/th&gt;
&lt;th&gt;Fix-delivery vehicle&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;B1&lt;/td&gt;
&lt;td&gt;PCR[7] becomes the canonical BitLocker seal target&lt;/td&gt;
&lt;td&gt;~2014-2016&lt;/td&gt;
&lt;td&gt;Sealing brittleness; PCR[0..4] churn vs. firmware-revision cadence&lt;/td&gt;
&lt;td&gt;Windows servicing + BitLocker policy default change [@syss-bitpixie, @ms-system-guard]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B2&lt;/td&gt;
&lt;td&gt;Forced retirement of the Microsoft UEFI CA 2011&lt;/td&gt;
&lt;td&gt;May 2023 - June 2026&lt;/td&gt;
&lt;td&gt;Revocation gap (BlackLotus / Baton Drop)&lt;/td&gt;
&lt;td&gt;KB5025885 / CVE-2023-24932 multi-year, opt-in dbx push and CA-2023 enrolment [@kb5025885]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B3&lt;/td&gt;
&lt;td&gt;Secure Kernel becomes the launch destination&lt;/td&gt;
&lt;td&gt;Win10 2015 - Win11 2021&lt;/td&gt;
&lt;td&gt;&quot;Kernel signed&quot; is insufficient (TDL-4 lesson)&lt;/td&gt;
&lt;td&gt;OS feature ship and WHCP requirement; HVCI / Driver Block List default-on by 2024 [@ms-trusted-boot, @secure-kernel-sibling]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B4&lt;/td&gt;
&lt;td&gt;Pluton arrives as a Microsoft-firmware-authored RoT&lt;/td&gt;
&lt;td&gt;Nov 2020 announcement; Q1 2022 first silicon&lt;/td&gt;
&lt;td&gt;LPC/SPI bus-sniffing class against discrete TPMs; OEM patch-cadence latency for fTPM/PTT firmware&lt;/td&gt;
&lt;td&gt;Windows-Update-delivered Pluton firmware (alongside UEFI capsule), Rust-based on 2024+ AMD/Intel parts [@ms-pluton]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The first row is operational, not architectural: PCR[7] becoming the canonical BitLocker seal target, somewhere between Windows 8.1 and Windows 10 1607 [@syss-bitpixie, @ms-system-guard]. Before PCR[7], BitLocker sealed against PCR[0..4]: firmware code, platform configuration, option ROMs, option-ROM configuration, and boot-manager hashes. Every UEFI update -- and on real fleets they happen monthly -- changed PCR[0..4] and forced BitLocker into recovery, which forced an IT staffer to find the recovery key, which was annoying enough to make people turn BitLocker off. PCR[7] sealing decoupled the BitLocker protector from the firmware-revision churn and made Measured Boot durable in practice. This is the operational fix that made Measured Boot actually worth running on a fleet of thousands of laptops with monthly UEFI capsule updates.&lt;/p&gt;
&lt;p&gt;The second row is the forced retirement of the Microsoft UEFI CA 2011, which began in May 2023 with KB5025885 and CVE-2023-24932 and is on track to complete in late 2026 [@kb5025885]. This was the first serious dbx housekeeping in a decade. The relevant point: the fix had to be a &lt;em&gt;programme&lt;/em&gt;, not a hotfix, because dbx is too small to handle a one-shot revocation of a CA-rooted set without bricking either some Linux dual-boots or some Windows machines. The CA-2023 rollout phases the work across four years.&lt;/p&gt;
&lt;p&gt;The third was VBS and the Secure Kernel becoming the launch target the boot chain was actually defending. Without the Secure Kernel as a destination, Trusted Boot&apos;s guarantee ended at &quot;the kernel is signed&quot;, which TDL-4 had already shown was insufficient -- a signed kernel is of limited use if the SYSTEM-privileged user-mode code that follows can rewrite kernel memory through a vulnerable signed driver. The Secure Kernel arrived in Windows 10 1507 (2015) and matured into its enforced-by-default form in Windows 11 (2021), at which point the chain had a hardware-isolated destination that even a SYSTEM-level attacker could not reach without a hypervisor exploit [@secure-kernel-sibling].&lt;/p&gt;
&lt;p&gt;The fourth is still landing. Pluton, the cryptoprocessor whose firmware Microsoft (not the OEM) ships and updates, was announced in November 2020 and reached its first silicon -- AMD Ryzen 6000 -- in Q1 2022 [@ms-pluton]. Pluton is not yet ubiquitous, and its Secure Boot story is pending: as of 2026, Pluton ships as a TPM 2.0 implementation [@ms-pluton-as-tpm], not as a replacement verifier. Section 10 unpacks why the Microsoft-firmware-on-silicon-Microsoft-doesnt-own model matters more than the part numbers do.&lt;/p&gt;
&lt;p&gt;These were the operational fixes. The architectural breaks they were responding to are the next section.&lt;/p&gt;
&lt;h2&gt;9. The boot-chain attacks that actually worked&lt;/h2&gt;
&lt;p&gt;There has never been a public Secure Boot attack that broke the cryptographic primitive. Every successful attack has exploited the same gap: between fixing a vulnerability and revoking the signed binaries that carried it. The CVE numbers change. The structure does not.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Scope note: LoJax (ESET, September 2018) was the first real-world UEFI rootkit deployed in the wild, but it operates at the SPI flash layer -- below Secure Boot&apos;s signature verification chain -- and is therefore outside the scope of this table. The table focuses on attacks on the Secure Boot signature-enforcement chain itself.&lt;/em&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attack&lt;/th&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Rung broken&lt;/th&gt;
&lt;th&gt;Prerequisite&lt;/th&gt;
&lt;th&gt;dbx state at disclosure&lt;/th&gt;
&lt;th&gt;Fix path&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;ESPecter&lt;/td&gt;
&lt;td&gt;2021&lt;/td&gt;
&lt;td&gt;ESP-resident bootmgr replacement&lt;/td&gt;
&lt;td&gt;Secure Boot disabled&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;Enable Secure Boot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FinSpy UEFI&lt;/td&gt;
&lt;td&gt;2021&lt;/td&gt;
&lt;td&gt;bootmgfw.efi replaced on ESP&lt;/td&gt;
&lt;td&gt;Secure Boot disabled&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;Enable Secure Boot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BlackLotus / CVE-2022-21894 (Baton Drop)&lt;/td&gt;
&lt;td&gt;2022-23&lt;/td&gt;
&lt;td&gt;Signed-but-vulnerable older bootmgfw&lt;/td&gt;
&lt;td&gt;Patched but unrevoked old binaries&lt;/td&gt;
&lt;td&gt;Old binaries not revoked&lt;/td&gt;
&lt;td&gt;dbx update via KB5025885&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bitpixie / CVE-2023-21563&lt;/td&gt;
&lt;td&gt;2022-24&lt;/td&gt;
&lt;td&gt;PXE soft-reboot leaks BitLocker VMK&lt;/td&gt;
&lt;td&gt;TPM-only BitLocker; LAN + keyboard&lt;/td&gt;
&lt;td&gt;n/a (no signature break)&lt;/td&gt;
&lt;td&gt;Pre-boot PIN; KB5025885&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LogoFAIL / CVE-2023-39539 et al.&lt;/td&gt;
&lt;td&gt;2023&lt;/td&gt;
&lt;td&gt;DXE-phase image-parser RCE&lt;/td&gt;
&lt;td&gt;UEFI logo customisation accepting attacker BMP&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;OEM UEFI updates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bootkitty&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;Self-signed PoC; Secure Boot disabled or LogoFAIL&lt;/td&gt;
&lt;td&gt;Linux target&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;Enable Secure Boot; patch LogoFAIL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WinRE / CVE-2024-20666 family&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;Recovery Environment downgrade&lt;/td&gt;
&lt;td&gt;TPM-only BitLocker; reachable WinRE&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;Servicing stack updates&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;ESPecter (ESET, October 2021) [@eset-especter] is the simplest case. It is an ESP-resident bootkit that bypasses Driver Signature Enforcement to load its own unsigned kernel driver -- but only on systems with Secure Boot disabled. ESPecter is in the table to make the category visible: the ESP is a writable FAT partition with no signature on the contents, and any malware that can write to the ESP and persuade the firmware to boot from a different &lt;code&gt;bootmgfw&lt;/code&gt; path can win on a non-Secure-Boot system. The fix is to turn Secure Boot on.&lt;/p&gt;
&lt;p&gt;FinSpy (Kaspersky, September 2021) [@kaspersky-finspy] is the same attack family carrying an actual nation-state-grade payload. Kaspersky&apos;s GReAT analysis names the mechanism plainly: &quot;All machines infected with the UEFI bootkit had the Windows Boot Manager (&lt;code&gt;bootmgfw.efi&lt;/code&gt;) replaced with a malicious one.&quot; The malicious &lt;code&gt;bootmgfw&lt;/code&gt; injected code into &lt;code&gt;winlogon.exe&lt;/code&gt; for persistence. Again, Secure Boot disabled was the precondition. FinSpy was the proof that the ESP-resident category had real-world tradecraft attached, not just academic interest.&lt;/p&gt;
&lt;p&gt;BlackLotus (advertised on hacking forums from at least October 2022 [@eset-blacklotus]; ESET writeup 1 March 2023) is the case that defines the modern era [@eset-blacklotus, @wack0-batondrop]. BlackLotus does not disable Secure Boot. It chain-loads a legitimately-signed but vulnerable older &lt;code&gt;bootmgfw.efi&lt;/code&gt; revision. The vulnerability is CVE-2022-21894, nicknamed &lt;em&gt;Baton Drop&lt;/em&gt;: an older boot manager honoured a &lt;code&gt;truncatememory&lt;/code&gt; setting that removed blocks of memory containing serialised data structures from the memory map. The Wack0 PoC repository describes the primitive: &quot;Windows Boot Applications allow the truncatememory setting to remove blocks of memory containing &apos;persistent&apos; ranges of serialised data from the memory map, leading to Secure Boot bypass&quot; [@wack0-batondrop]. The chain: boot the legitimately-signed older bootmgfw; trigger Baton Drop; install a malicious SiPolicy that disables further checks; load an unsigned kernel driver; persistently disable HVCI, BitLocker, and Defender from below the trusted-boot horizon. Microsoft&apos;s incident-response guide for BlackLotus enumerates six classes of detection artefact: recently-written ESP files, staging directories, registry entries, event-log evidence of policy changes, network indicators, and BCD-log modifications [@ms-blacklotus-guidance]. The NSA and CISA published a joint mitigation guide on 22 June 2023 [@nsa-blacklotus]. ESET&apos;s epitaph is the article&apos;s recurring quote:&lt;/p&gt;

Exploitation is still possible as the affected, validly signed binaries have still not been added to the [UEFI revocation list]. -- Martin Smolar, ESET, March 2023 [@eset-blacklotus]

sequenceDiagram
    participant Attacker
    participant ESP as EFI System Partition
    participant FW as UEFI firmware
    participant BMGR as bootmgfw (older signed)
    participant OS as Windows kernel
    Attacker-&amp;gt;&amp;gt;ESP: drop legit but old signed bootmgfw
    FW-&amp;gt;&amp;gt;BMGR: LoadImage() -- signature OK, hash NOT in dbx
    Attacker-&amp;gt;&amp;gt;BMGR: trigger CVE-2022-21894 (truncatememory)
    BMGR-&amp;gt;&amp;gt;BMGR: install malicious SiPolicy
    BMGR-&amp;gt;&amp;gt;OS: load unsigned driver
    OS-&amp;gt;&amp;gt;OS: disable HVCI, BitLocker, Defender
&lt;p&gt;The &quot;disables HVCI / BitLocker / Defender from below the trusted-boot horizon&quot; framing in the caption is verbatim from the ESET disclosure and is reinforced by Microsoft&apos;s own incident-response guide [@eset-blacklotus, @ms-blacklotus-guidance].&lt;/p&gt;
&lt;p&gt;Bitpixie / CVE-2023-21563 [@neodyme-bitpixie, @syss-bitpixie] is BlackLotus&apos; twin in BitLocker space. The vulnerability was discovered by &lt;code&gt;Rairii&lt;/code&gt; in August 2022; Thomas Lambertz of Neodyme published a public PoC at 38C3 in December 2024. The mechanism is a downgrade. The attacker boots the target machine into Windows&apos; PXE network-recovery soft-reboot path, which loads a Microsoft-signed but older &lt;code&gt;bootmgfw.efi&lt;/code&gt; revision. That older revision does not erase the BitLocker VMK from physical memory before the PXE soft-reboot hands off, leaving the VMK in RAM where the chained payload (a signed Linux PE or downgraded WinPE) can dump it. The combination of TPM-only BitLocker (no pre-boot PIN), a Microsoft-Account-defaulted Windows 11 install (which biases toward TPM-only encryption), and physical access to a network port and keyboard, decrypts the disk in minutes. Lambertz&apos; framing: &quot;All an attacker needs is the ability to plug in a LAN cable and keyboard to decrypt the disk&quot; [@neodyme-bitpixie]. Bitpixie does not break Secure Boot. It exploits the same operational invariant -- old-but-signed binaries still validate -- in a different protection domain.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; TPM-only BitLocker is no longer a defensible default on Windows 11 once Bitpixie&apos;s PoC is public; the attack reduces to a LAN cable and a keyboard. See Section 11&apos;s &lt;code&gt;Replace TPM-only BitLocker&lt;/code&gt; bullet for the pre-boot-factor fix list [@neodyme-bitpixie, @kb5025885].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bootkitty (ESET, 27 November 2024) [@eset-bootkitty] closes a symmetry. Twelve years after Andrea Allievi&apos;s September 2012 PoC -- the first UEFI bootkit designed for Windows 8 [@theregister-allievi] -- Bootkitty is the first UEFI bootkit aimed at Linux. Bootkitty was uploaded as a self-signed PoC, so on systems with Secure Boot enabled, it does not load unless the attacker&apos;s certificate has been enrolled in the Machine Owner Key (MOK) list -- either by a user via &lt;code&gt;mokutil&lt;/code&gt; (the ordinary Linux path), by a prior compromise enrolling the cert, or by chaining LogoFAIL (CVE-2023-40238) to inject a rogue MOK certificate from a malicious BMP, as Binarly demonstrated [@binarly-logofail-bootkitty]. Bootkitty patches kernel-image-integrity functions and pre-loads ELF binaries via &lt;code&gt;init&lt;/code&gt;. ESET later updated the attribution: an analysis posted in early December 2024 traced the build to a Korean Best of the Best (BoB) student project. The structural lesson is platform-orthogonal -- Secure Boot&apos;s gaps live in the firmware and revocation surfaces, not in any one operating system.&lt;/p&gt;

The Allievi 2012 ITSEC PoC was *the first UEFI bootkit*, full stop -- a research artefact that demonstrated, on Windows 8, the same trick BootRoot had demonstrated on the Windows NT/2000/XP MBR seven years earlier. Twelve years later, Bootkitty is the first UEFI bootkit *for Linux*, also a research artefact. The arc closes a symmetry: UEFI&apos;s verifier is platform-agnostic, so its weaknesses are too. A LogoFAIL-style image-parser bug in DXE compromises Secure Boot whether the operating system above it is Windows or Ubuntu. The attacker community needed twelve years to apply the technique to the second platform, but only because the second platform&apos;s market share for boot-chain attacks was smaller, not because the verifier was structurally any safer.
&lt;p&gt;LogoFAIL (Binarly REsearch, Black Hat EU 2023; CVE-2023-39539, CVE-2023-40238, CVE-2023-5058; advisory BRLY-2023-006) is the most architectural of the breaks because it compromises the verifier itself. The DXE phase parses a customisable boot logo image -- the OEM splash screen displayed on power-on -- and the parser is a piece of firmware code accepting an attacker-controlled input. Binarly demonstrated parser bugs in the BMP, GIF, JPEG, PCX, and TGA decoders shipped in reference code by all three major Independent BIOS Vendors -- AMI, Insyde, and Phoenix -- across roughly six hundred enterprise device models. A successful exploit gives the attacker code execution at the DXE phase, which is &lt;em&gt;below&lt;/em&gt; Secure Boot&apos;s &lt;code&gt;LoadImage()&lt;/code&gt; verifier. From DXE, the attacker can do whatever they want before the operating-system loader runs. Bootkitty later carried a LogoFAIL exploit (CVE-2023-40238) to inject a rogue MOK certificate from a malicious BMP, demonstrating the chain end to end [@binarly-logofail-bootkitty].&lt;/p&gt;
&lt;p&gt;Finally, the WinRE / &lt;code&gt;ReAgent.xml&lt;/code&gt; downgrade family (CVE-2024-20666 and successors) is the smaller cousin of the bigger story [@nvd-cve-2024-20666]. The Recovery Environment is a Windows partition with its own boot path; older WinRE images that contain unrevoked vulnerable &lt;code&gt;bootmgr.efi&lt;/code&gt; revisions can be persuaded to mount the encrypted volume under attacker control. The attack does not break the Secure Boot chain; it routes around it. The point of including it in this catalogue: it is another instance of the dbx-revocation-by-hash limit. As long as an older signed binary exists and is reachable, Secure Boot&apos;s verifier will validate it.&lt;/p&gt;
&lt;p&gt;Every attack here exploits the same operational invariant: the gap between &lt;em&gt;patched&lt;/em&gt; and &lt;em&gt;revoked&lt;/em&gt; is wide, and dbx is too small to close it. The next section examines whether anything can.&lt;/p&gt;
&lt;h2&gt;10. Theoretical limits, open problems, and the Pluton pivot&lt;/h2&gt;
&lt;p&gt;If every break has been operational, why has nobody fixed the operations? Because the operational bounds are themselves theoretical.&lt;/p&gt;
&lt;p&gt;Six structural limits.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The verifier-of-verifiers regress.&lt;/strong&gt; Secure Boot&apos;s verifier is firmware code that itself must be trusted. Boot Guard and AMD PSB push that root one rung deeper, into silicon ROM and OTP fuses [@ioactive-psb, @wp-txt]. Pluton arguably pushes it one rung deeper still, into silicon Microsoft directly updates. There is no software-only bottom turtle. Every architecture in the field has &lt;em&gt;some&lt;/em&gt; layer that is trusted because there is no further layer to which trust can be deferred. The engineering question is &lt;em&gt;which party&lt;/em&gt; owns that layer -- OEM, Intel, AMD, or Microsoft via Pluton -- and &lt;em&gt;on whose update cadence&lt;/em&gt; the layer can be patched. IOActive&apos;s 2024 review of AMD PSB found that &quot;various major vendors fail to&quot; configure PSB correctly [@ioactive-psb], which is the kind of operational failure mode no cryptographic primitive can fix.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why dbx revocation is hard.&lt;/strong&gt; dbx is small, shared with Linux, vendor-implemented, and a brick-risk if mismanaged. The list stayed nearly empty for a decade until BlackLotus forced KB5025885&apos;s multi-year program [@nvd-cve-2023-24932]. SBAT (Secure Boot Advanced Targeting), the partial answer in the rhboot/shim project [@sbat-shim], revokes by &lt;em&gt;generation number&lt;/em&gt; rather than by image hash. SBAT works by embedding a CSV-formatted vendor-and-component-version table in every shim-signed binary; when the firmware-side SBAT policy variable says &quot;minimum acceptable shim generation is 4&quot;, every older shim hashes correctly but is refused for being too old. SBAT collapses tens of revocation events that would each consume hundreds of bytes of dbx into a single small metadata bump. The UEFI Forum has, since 2024, deferred to the canonical Microsoft-managed &lt;code&gt;secureboot_objects&lt;/code&gt; GitHub repository [@ms-secureboot-objects] as the source of truth for KEK, db, and dbx contents.&lt;/p&gt;

A revocation scheme designed by the rhboot/shim project to address dbx capacity exhaustion. Instead of revoking each vulnerable signed binary by Authenticode hash (which consumes ~32 bytes of dbx per binary), SBAT revokes by *generation number*: each signed component carries a CSV-formatted version table; a small SBAT policy variable in firmware specifies the minimum generation accepted; older builds are refused without consuming dbx capacity. SBAT is the project&apos;s structural answer to the cohort-revocation problem the §4 Sidenote quantifies.
&lt;p&gt;The SBAT generation-number scheme is also the model the Microsoft UEFI CA 2023 rollout extends across the wider Windows install base. KB5025885&apos;s mitigation strategy combines a small set of dbx hash revocations with a CA rotation, because no single mechanism by itself can revoke a decade&apos;s worth of signed bootloaders within the dbx storage budget [@kb5025885, @sbat-shim].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The signed-but-vulnerable problem.&lt;/strong&gt; As long as Microsoft-signed bootloaders with known flaws exist on the install media of any production Windows installation, Secure Boot must revoke by hash, by SVN, by SiPolicy, or by certificate -- each with collateral damage. Hash revocation does not cover binaries the attacker has not yet seen. SVN revocation forces a rebuild of every signed binary across the install base. SiPolicy revocation depends on the SiPolicy update reaching every machine. CA rotation breaks PXE recovery, recovery USBs, dual-boot Linux, and custom WinPE images.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Supply chain at the firmware level.&lt;/strong&gt; LogoFAIL, BMC-resident attacks against rack servers, Boot Guard key leaks (which OTP fuses cannot recover from), and OEM ME/PSP fuse misconfiguration are the categories Secure Boot cannot, by construction, defend against. The verifier sits above these layers; if these layers are compromised, the verifier is running on a base it cannot trust.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SRTM allowlist explosion.&lt;/strong&gt; N OEMs, M models, K firmware revisions; the allowlist of &quot;good SRTM measurements&quot; explodes; the blocklist is asymmetric in the attacker&apos;s favour. DRTM late-launch is the only known way to collapse the allowlist. As Microsoft puts it, &quot;DRTM lets the system freely boot into untrusted code initially, but shortly after launches the system into a trusted state&quot; [@ms-system-guard].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bus interception of discrete TPMs.&lt;/strong&gt; A discrete TPM on the LPC or SPI bus can be sniffed by a physical attacker. This is what motivates the move to Pluton: the TPM moves on-die, the bus disappears, and the BitLocker VMK no longer crosses a sniffable wire [@tpm-sibling].&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Every public Secure Boot break has exploited the gap between &lt;em&gt;patched&lt;/em&gt; and &lt;em&gt;revoked&lt;/em&gt;, not the cryptographic primitive. The dbx revocation half-life is the article&apos;s invariant. Pluton closes the cadence gap on the verifier-update side. It does not close the gap between patched and revoked.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;The Pluton pivot.&lt;/strong&gt; Pluton&apos;s pitch, for the boot chain, is to re-anchor both the verification root (long term) and the measurement endpoint (today) in silicon Microsoft can patch [@ms-pluton, @ms-pluton-as-tpm]. Pluton implements TPM 2.0 on the CPU die, so the existing measurement chain plugs in unchanged. What changes is the &lt;em&gt;firmware update cadence&lt;/em&gt; -- Pluton firmware ships through Windows Update as an additional channel alongside existing UEFI capsule updates; the key difference is that Microsoft authors and controls the firmware, and the Windows Update path enables Microsoft to deliver fixes independent of OEM release scheduling. The bus disappears: Pluton&apos;s interface is on-die--there is no external LPC or SPI bus crossing a package boundary that can be physically tapped, eliminating bus-sniffing as an attack class. And on 2024+ AMD and Intel parts, the Pluton firmware itself is written in Rust, addressing the memory-safety class of bugs that has historically dominated firmware CVEs [@ms-pluton].&lt;/p&gt;

flowchart LR
    subgraph Discrete[&quot;Discrete TPM&quot;]
        CPU1[&quot;CPU&quot;] -- LPC/SPI bus&lt;br /&gt;(sniffable) --&amp;gt; dTPM[&quot;dTPM (Infineon, STM)&quot;]
    end
    subgraph PlutonTopo[&quot;Pluton&quot;]
        CPU2[&quot;CPU&quot;] -- on-die mailbox --&amp;gt; PL[&quot;Pluton&quot;]
    end

The first reaction to &quot;dbx is too small&quot; is always: make it bigger. Three constraints stop that. First, dbx is implemented by hundreds of OEM firmware vendors against a UEFI specification floor; raising the floor would invalidate every shipped UEFI implementation. Second, dbx is shared between Windows, Linux, ESXi, and other operating systems, so growing it requires coordination across vendors with different incentives. Third -- and the real blocker -- the variable lives in NV-RAM with limited write cycles; a runaway revocation update can brick a board if the write fails partway through. The realistic fix is SBAT for image-version bumps and CA rotation for cohort-scale revocation. Both are partial.

Pluton&apos;s design only makes sense against the contrast with the two endpoints of the design space.&lt;p&gt;At one endpoint sits Apple. Apple authors the silicon, the Boot ROM, the iBoot bootloader, the kernel, and the Secure Enclave Processor&apos;s sepOS firmware. The Apple Boot ROM holds the Apple Root certificate authority public key directly; it verifies iBoot before iBoot loads anything else; on older A-series parts an additional Low-Level Bootloader stage is verified by the Boot ROM and in turn loads and verifies iBoot [@apple-boot]. The Secure Enclave Processor is &quot;a dedicated secure subsystem integrated into Apple SoC&quot;, isolated from the main processor and reachable only over a mailbox interface; sepOS is an L4 microkernel Apple ships and updates [@apple-sep]. Every stage of secure boot is signed by the same vendor that ships the operating system, and &quot;secure boot begins in silicon and builds a chain of trust through software&quot; [@apple-system]. The cadence is the iOS / iPadOS / macOS update cadence -- Apple-cadence -- because the same release pipeline ships everything from the Boot ROM update vehicle to the user-facing apps.&lt;/p&gt;
&lt;p&gt;At the other endpoint sits Trusted Firmware-A on Armv7-A and Armv8-A platforms. TF-A is the reference secure-world software stack with a Secure Monitor at Exception Level 3 [@tfa-home]. The Trusted Board Boot feature implements Arm&apos;s TBBR-CLIENT specification (DEN0006D): &quot;The Trusted Board Boot (TBB) feature prevents malicious firmware from running on the platform by authenticating all firmware images up to and including the normal world bootloader&quot; [@tfa-tbb]. The chain runs BL1 -&amp;gt; BL2 -&amp;gt; BL31 / BL32 -&amp;gt; BL33, anchored on a ROTPK (Root of Trust Public Key) fused per silicon family. Because TBBR is a specification rather than a single shipping product, the actual signing keys and update cadence are the OEM&apos;s choice. The silicon vendor sets the fuse policy; the platform vendor signs the boot images; the operating-system vendor sees a verified BL33 handoff and trusts whatever ROTPK the silicon was fused with. There is no monoculture, and there is no single update cadence -- which is exactly what makes the security guarantees uneven across Arm devices in practice.&lt;/p&gt;
&lt;p&gt;Pluton sits between Apple and TF-A. Microsoft authors the firmware (vendor-monopoly trust anchor) on silicon Microsoft does not own (AMD, Intel, Qualcomm fabricate it) [@ms-pluton]. The contrast is sharpest at the firmware-update cadence. Apple-cadence ships everything as one. OEM-UEFI-capsule-cadence is what discrete TPMs and PCH-isolated fTPM/PTT firmware are stuck with -- which is why a known-bad fTPM firmware can take months to land on every customer device after Microsoft posts a fix. Windows-Update-cadence is what Pluton offers: a Microsoft-authored firmware update riding the same channel that ships kernel patches. The same axis -- &lt;em&gt;who&lt;/em&gt; owns the trust anchor and &lt;em&gt;on whose schedule&lt;/em&gt; it ships -- is the axis on which the article&apos;s main Pluton argument turns.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;There are honest residual limits. Pluton is a TPM, not a verification chain; the rest of Secure Boot still runs in DXE-phase firmware that LogoFAIL can compromise. Adoption is non-universal -- as of 2026, Pluton ships on Microsoft Surface, AMD Ryzen 6000-9000/AI series, a subset of Intel Core Ultra (200V / Series 3) parts, and Qualcomm Snapdragon 8cx Gen 3 / X parts powering Copilot+ PCs, with many enterprise PCs still on discrete TPMs [@ms-pluton]. The OEM still owns PK and the firmware update path &lt;em&gt;outside&lt;/em&gt; Pluton, so the dbx-revocation problem and the OEM-key-leak problem are unaddressed by Pluton alone. Attestation infrastructure -- Device Health Attestation, Intune device-health Conditional Access -- is still maturing, and the policies that consume attestation outcomes are still hand-rolled per organisation.&lt;/p&gt;
&lt;p&gt;Pluton closes the cadence gap. It does not close the gap between &lt;em&gt;patched&lt;/em&gt; and &lt;em&gt;revoked&lt;/em&gt; -- nothing yet does, and that is the next decade&apos;s problem.&lt;/p&gt;
&lt;h2&gt;11. Practical guide, FAQ, and where the chain goes next&lt;/h2&gt;
&lt;p&gt;This is the part you do today, on whatever Windows machine is in front of you, before this article ages another year.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verify Secure Boot state.&lt;/strong&gt; Open an elevated PowerShell prompt and run &lt;code&gt;Confirm-SecureBootUEFI&lt;/code&gt;. The cmdlet returns &lt;code&gt;True&lt;/code&gt; only if Secure Boot is currently enforcing. &lt;code&gt;msinfo32&lt;/code&gt; shows BIOS Mode (UEFI vs Legacy) and Secure Boot State on its System Summary page. &lt;code&gt;Get-SecureBootPolicy&lt;/code&gt; reveals which Secure Boot policy GUID is in force; the default Microsoft policy on a healthy modern install is &lt;code&gt;{77fa9abd-0359-4d32-bd60-28f4e78f784b}&lt;/code&gt; (the Microsoft owner GUID for the canonical KEK/db/dbx variables) [@ms-secureboot-objects]. &lt;code&gt;Get-Tpm&lt;/code&gt; and &lt;code&gt;tpmtool getdeviceinformation&lt;/code&gt; confirm that the TPM is present, owned, and ready [@ms-trusted-boot, @ms-secure-boot-process].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Read the TPM event log.&lt;/strong&gt; &lt;code&gt;tpmtool gatherlogs&lt;/code&gt; collects the WBCL files into a working folder you can inspect; &lt;code&gt;Get-WinEvent -LogName Microsoft-Windows-TPM-WMI&lt;/code&gt; exposes the boot and provisioning events. On a healthy boot, the WBCL and the live PCR state replay to the same digest; mismatch is the attestation signal a remote verifier looks for.&lt;/p&gt;

The following one-liner gathers the basic state in elevated PowerShell:&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;&quot;&quot; |
  Select-Object @{n=&apos;SecureBoot&apos;; e={ Confirm-SecureBootUEFI }},
                @{n=&apos;SBPolicy&apos;;  e={ (Get-SecureBootPolicy).Publisher }},
                @{n=&apos;TPMReady&apos;;  e={ (Get-Tpm).TpmReady }},
                @{n=&apos;UEFI/BIOS&apos;; e={ (Get-CimInstance Win32_BIOS).SMBIOSBIOSVersion }} |
  Format-List
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If &lt;code&gt;SecureBoot&lt;/code&gt; is &lt;code&gt;False&lt;/code&gt;, your boot chain has no firmware-side allowlist. If &lt;code&gt;TPMReady&lt;/code&gt; is &lt;code&gt;False&lt;/code&gt;, BitLocker is sealing to nothing -- recovery-key escrow is your only protector.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verify your Windows UEFI CA 2023 enrolment.&lt;/strong&gt; KB5025885 is a phased deployment; the relevant deployment phase is recorded in the registry under &lt;code&gt;HKLM\SYSTEM\CurrentControlSet\Control\Secureboot\AvailableUpdates&lt;/code&gt; (or the equivalent CSV in the support article) [@kb5025885]. The current UEFI db can be inspected with &lt;code&gt;Get-SecureBootUEFI db&lt;/code&gt; and &lt;code&gt;Format-SecureBootUEFI&lt;/code&gt;. The 2023 CA&apos;s certificate has subject CN &lt;code&gt;Windows UEFI CA 2023&lt;/code&gt;. If you do not see it in db and you are running a Windows install that has been online during 2025-2026, the deployment programme has not reached your device; consult the KB article for the next steps.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The 2011 CA expires in late June 2026. After that, signed-but-old bootloaders that depend on the 2011 CA will not validate without explicit dbx housekeeping. If your install media is older than May 2023 and you have not run a full set of cumulative updates, you may end up with a machine that boots today but cannot boot a future Windows recovery image. The fix is to apply the KB5025885 updates and verify the 2023 CA is enrolled before that deadline [@kb5025885].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Enable DRTM / System Guard Secure Launch where the silicon supports it.&lt;/strong&gt; The control surfaces are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MDM CSP: &lt;code&gt;DeviceGuard/ConfigureSystemGuardLaunch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Group Policy: &lt;em&gt;Computer Configuration &amp;gt; Administrative Templates &amp;gt; System &amp;gt; Device Guard &amp;gt; Turn On Virtualization Based Security &amp;gt; Secure Launch Configuration&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Registry: &lt;code&gt;HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\SystemGuard\Enabled = 1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Verify via &lt;code&gt;msinfo32&lt;/code&gt;: under &lt;em&gt;System Summary&lt;/em&gt; the &lt;em&gt;Virtualization-based Security Services Configured / Running&lt;/em&gt; line should include &lt;em&gt;Secure Launch&lt;/em&gt; [@ms-system-guard].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Replace TPM-only BitLocker.&lt;/strong&gt; After Bitpixie, TPM-only BitLocker is no longer a defensible default. Add a pre-boot PIN (&lt;code&gt;manage-bde -protectors -add C: -tpmAndPin&lt;/code&gt;), a USB key, or use device encryption with pre-boot authentication [@neodyme-bitpixie, @syss-bitpixie].&lt;/p&gt;
&lt;p&gt;{`
// JavaScript analogue of the PowerShell one-liner above. The real cmdlets
// query NV variables and the TPM driver directly; this just shows the shape
// of what a remote attestation collector would assemble.&lt;/p&gt;
&lt;p&gt;function healthCheck(state) {
  return {
    secureBoot:  state.secureBoot === true,
    sbPolicyGuid: state.policyGuid ?? &apos;unknown&apos;,
    tpmReady:    state.tpmReady === true,
    pcr7:        state.pcr7,
    caEnrolled:  state.dbCerts.includes(&apos;Windows UEFI CA 2023&apos;),
    notes:       []
  };
}&lt;/p&gt;
&lt;p&gt;const live = healthCheck({
  secureBoot:  true,
  policyGuid:  &apos;{77fa9abd-0359-4d32-bd60-28f4e78f784b}&apos;,
  tpmReady:    true,
  pcr7:        &apos;0xab4c...&apos;,
  dbCerts:     [&apos;Microsoft Windows Production PCA 2011&apos;, &apos;Microsoft Corporation UEFI CA 2011&apos;, &apos;Windows UEFI CA 2023&apos;]
});&lt;/p&gt;
&lt;p&gt;console.log(live);
`}&lt;/p&gt;

No. Secure Boot defends the boot chain. Ransomware targets user data after the operating system is up and the user is logged in, so it sees a signed Windows kernel exactly as it should. The defences against ransomware are runtime: Defender, EDR, Controlled Folder Access, and offline backups. Secure Boot is a precondition for trusting the operating system that hosts those runtime defences, but it is not a runtime defence itself.

Yes, via the Microsoft-signed `shim`. The maintenance burden: keep `shim` current under the Windows UEFI CA 2023 rollout (`shim-signed`, `shim-x64`, `mokutil` packages on most distributions) or your Linux install will lose its boot path when older `shim` builds are revoked. See `The shim escape hatch` Aside in §4 for the underlying mechanism [@sbat-shim].

Yes. Pluton replaces the TPM, not the signature-verification chain. Pluton is a cryptoprocessor: it implements TPM 2.0 on the CPU die, holds keys, performs `extend` operations, and signs attestations [@ms-pluton-as-tpm]. Secure Boot is the firmware-side `LoadImage()` allowlist check. The two rails are complementary, not substitutes -- Pluton makes Measured Boot&apos;s endpoint better; it does not replace Secure Boot&apos;s verifier.

The 2011 CA is being revoked. You need a `shim` signed by the 2023 CA. Update from your distribution&apos;s secure-boot package (the canonical names are `shim-signed`, `shim-x64`, or `mokutil`). If your installation media is older than May 2023 and you have not run distribution updates, expect breakage somewhere between your next dbx update and the June 2026 expiry [@kb5025885, @sbat-shim].

Not as a default. After Bitpixie / CVE-2023-21563, TPM-only BitLocker can be defeated with a LAN cable and a keyboard on a Windows 11 install with Microsoft Account defaults. See `Replace TPM-only BitLocker` in Section 11 for the fix list [@neodyme-bitpixie].

Trusted Boot is *signature-policy enforcement*: `bootmgfw.efi` and `winload.efi` refuse to load any kernel-mode binary whose Authenticode hash or signer is not in the trusted-boot policy, and the kernel-mode `ci.dll` continues that enforcement after handoff. Measured Boot is *hash-into-PCR recording*: every binary that loads is also extended into a TPM PCR so a verifier (BitLocker locally, an attestation service remotely) can later prove what code ran. Trusted Boot stops bad code; Measured Boot records what code ran. They run in parallel, not in sequence [@ms-trusted-boot, @ms-secure-boot-process].
&lt;p&gt;The chain is longer than it has ever been. It is not yet long enough.&lt;/p&gt;
&lt;p&gt;The next article in this series picks up where &lt;code&gt;userinit&lt;/code&gt; ends. Once Windows is running, the question shifts from &lt;em&gt;which code loaded?&lt;/em&gt; to &lt;em&gt;what does this device look like to a remote verifier right now?&lt;/em&gt; Device Health Attestation, runtime measurement of the running kernel and Secure Kernel, and Conditional Access decisions tied to attestation outcomes are the runtime continuation of everything we walked through here. Pluton on the boot chain feeds Pluton-rooted attestation at runtime. Secure Boot ends at the desktop. The runtime chain begins there.&lt;/p&gt;
&lt;p&gt;&amp;lt;StudyGuide slug=&quot;secure-boot-in-windows&quot; keyTerms={[
  { term: &quot;Bootkit&quot;, definition: &quot;Malware that survives operating-system reinstallation by infecting code that runs before the operating system loads -- MBR, ESP, firmware, or below.&quot; },
  { term: &quot;UEFI Platform Initialization (PI)&quot;, definition: &quot;Four-phase firmware pipeline (SEC, PEI, DXE, BDS); Secure Boot&apos;s verifier lives in DXE.&quot; },
  { term: &quot;PK / KEK / db / dbx&quot;, definition: &quot;Authenticated UEFI variables: Platform Key, Key Exchange Key, allowlist, denylist.&quot; },
  { term: &quot;Trusted Boot&quot;, definition: &quot;Microsoft&apos;s policy enforcement chain from bootmgfw.efi through winload.efi, ntoskrnl.exe, ELAM, and every boot-start driver.&quot; },
  { term: &quot;SRTM&quot;, definition: &quot;Static Root of Trust for Measurement: the boot-time chain of TPM extends anchored in the immutable CRTM.&quot; },
  { term: &quot;DRTM&quot;, definition: &quot;Dynamic Root of Trust for Measurement: late-launched via GETSEC[SENTER] or SKINIT to re-anchor measurement after firmware boot.&quot; },
  { term: &quot;ELAM&quot;, definition: &quot;Early Launch Anti-Malware: a specially-signed driver class that loads as the first boot-start driver, ahead of every other boot-start driver, and classifies them Good/Bad/Unknown/BadButCritical.&quot; },
  { term: &quot;PCR[7]&quot;, definition: &quot;Platform Configuration Register holding the state of Secure Boot; the canonical BitLocker seal target on modern Windows.&quot; },
  { term: &quot;Baton Drop&quot;, definition: &quot;CVE-2022-21894: a memory-map manipulation primitive in older signed bootmgfw.efi revisions that BlackLotus used to bypass Secure Boot.&quot; },
  { term: &quot;Bitpixie&quot;, definition: &quot;CVE-2023-21563: older signed bootmgfw.efi revisions do not erase the BitLocker VMK from physical memory before the PXE soft-reboot handoff, leaving the VMK in RAM where a downgraded payload chain-loaded over PXE can dump it.&quot; },
  { term: &quot;SBAT&quot;, definition: &quot;Secure Boot Advanced Targeting: rhboot/shim&apos;s generation-number revocation scheme, the partial answer to dbx capacity exhaustion.&quot; },
  { term: &quot;Pluton&quot;, definition: &quot;Microsoft&apos;s cryptoprocessor on the CPU die, implementing TPM 2.0, with firmware delivered by Microsoft via Windows Update.&quot; }
]} /&amp;gt;&lt;/p&gt;
</content:encoded><category>secure-boot</category><category>windows-security</category><category>uefi</category><category>measured-boot</category><category>tpm</category><category>pluton</category><category>bootkit</category><author>noreply@paragmali.com (Parag Mali)</author></item><item><title>The TPM in Windows: One Primitive, Twenty-Five Years, and the Chip Microsoft Bet On Twice</title><link>https://paragmali.com/blog/the-tpm-in-windows-one-primitive-twenty-five-years-and-the-c/</link><guid isPermaLink="true">https://paragmali.com/blog/the-tpm-in-windows-one-primitive-twenty-five-years-and-the-c/</guid><description>How a passive 1999 cryptoprocessor became the load-bearing pillar of Windows security, and what twenty-five years of attacks taught us about its limits.</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate><content:encoded>
The TPM (1.2 since 2007, 2.0 since 2014) is the hardware root of trust under almost every Windows security feature shipped since Vista -- BitLocker, Measured Boot, Credential Guard, Windows Hello, device attestation. Twenty-five years of engineering refined a single primitive (measure, extend, seal, quote) into something one chip could underwrite. Twenty-five years of attacks (Andzakovic 2019, TPM-Fail 2020, faulTPM 2023) have argued empirically about how passive that chip can be. The current state of the art -- Microsoft Pluton on the CPU die, Microsoft-signed Rust firmware (on 2024 AMD and Intel platforms) delivered via Windows Update -- closes the bus and the TEE attack surfaces, but centralizes firmware trust on Microsoft. Post-quantum migration is the next frontier.
&lt;h2&gt;1. The chip nobody asked for&lt;/h2&gt;
&lt;p&gt;On June 24, 2021, Microsoft announced Windows 11 [@ms-windows-experience-blog-2021] -- and told hundreds of millions of working PCs they were no longer eligible to upgrade. Not because they were too slow. Because they did not have a small chip most users had never thought about: a TPM 2.0. The PR backlash was immediate; the technical rationale was almost invisible. &lt;em&gt;Why was Microsoft willing to take that much heat over a piece of silicon?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The next morning, Microsoft&apos;s security team tried to explain [@ms-security-blog-windows11-2021]. The argument was four words long: hardware root of trust.&lt;/p&gt;

All certified Windows 11 systems will come with a TPM 2.0 chip to help ensure customers benefit from security backed by a hardware root-of-trust.
&lt;p&gt;That sentence sat awkwardly against the user experience: a green checkmark in the PC Health Check tool, or a red X telling you to buy a new computer. The deeper claim -- that a passive cryptoprocessor underwrote the security guarantees of half the operating system -- was not something Microsoft had ever asked consumers to think about. For OEMs, the requirement was old news. Since July 28, 2016 [@ms-learn-oem-tpm], every new Windows device model had been contractually required to &quot;implement and enable by default TPM 2.0.&quot; The 2021 mandate did not introduce the chip. It made an existing OEM rule into a visible install gate.&lt;/p&gt;

A small, isolated cryptoprocessor that holds keys, performs cryptographic operations, and records integrity measurements -- usually on a separate package or block of silicon that the host operating system cannot read directly. The TPM is &quot;passive&quot;: it executes commands sent to it but never reaches into the host&apos;s memory.

The PC Health Check tool was pulled and re-released. Reddit and Hacker News spent a weekend arguing about whether Microsoft had effectively bricked older hardware to sell new licenses. Microsoft&apos;s reply -- that TPM-by-default produces measurable population-level security gains even when individual users do not understand it -- was correct, but never quite the rebuttal that a consumer audience could engage with. The politics of &quot;Trusted Computing&quot; had returned, twenty years after the original Stallman objection [@wikipedia-trusted-computing].
&lt;p&gt;This article is about that piece of silicon: what it does, why Windows needs it more than ever, and why twenty-five years of engineering and twenty-five years of attacks have together produced a chip that quietly defines what modern Windows can defend against -- and what it cannot.&lt;/p&gt;
&lt;p&gt;The central claim, which the rest of this piece will earn: a passive cryptoprocessor designed in 1999 became the load-bearing pillar of half of Windows security, and the history of attacks against it has been a sustained empirical argument about exactly how passive that pillar is allowed to be.&lt;/p&gt;
&lt;h2&gt;2. The problem the TPM was built to solve&lt;/h2&gt;
&lt;p&gt;Picture an engineer at IBM in early 2000. The Windows kernel has just been rooted again. The newly shipped DPAPI master keys -- introduced with Windows 2000&apos;s general availability on February 17, 2000 [@wikipedia-windows-2000] -- are recoverable in seconds once SYSTEM falls. Stolen ThinkPads come back with their fresh EFS volumes already decrypted. Where do you put a secret that the OS cannot read?&lt;/p&gt;
&lt;p&gt;Software-only key storage was Generation 0. Windows had DPAPI, EFS, and LSA secrets [@ms-learn-cryptography-portal], all deriving their wrapping keys from the user&apos;s logon credential or from system-level material. Every derivation had the same structural problem: the unwrapping key, sooner or later, lived in the kernel&apos;s address space. An attacker who reached SYSTEM (or who carried the disk away to a separate machine) could replay it. A volume encrypted &quot;at rest&quot; was decryptable as soon as the disk was readable -- and a disk you can read is a disk you can read offline. Microsoft now states the constraint plainly: a TPM-resident key, by contrast, &quot;truly can&apos;t leave the TPM&quot; [@ms-learn-how-windows-uses-tpm]. That property cannot be retrofitted onto software-only storage.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Software-only key storage cannot defend against an attacker who reaches SYSTEM, and cannot defend against an attacker who carries the disk away. To survive both, the secret must live in silicon that the OS itself cannot read.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In October 1999 [@wikipedia-tcg], five PC-industry incumbents took that observation and turned it into an industrial coalition: Compaq, Hewlett-Packard, IBM, Intel, and Microsoft incorporated the Trusted Computing Platform Alliance.The Wikipedia Trusted Computing Group article gives the day-precision date as October 11, 1999. The original TCPA press release URL has not survived; the founder list and date are consistent across secondary sources. TCPA&apos;s charter was narrow: define a chip that could hold keys an x86 OS could not export, record boot-time integrity measurements, and sign attestations about that boot. The first chip to ship against the resulting TPM Main Specification 1.1b [@tcg-tpm-main-spec] appeared in 2003 [@wikipedia-tpm]. Atmel, Infineon, and STMicroelectronics built it [@wikipedia-tpm].&lt;/p&gt;
&lt;p&gt;In parallel, Microsoft Research ran its own bet. Paul England, Butler Lampson, John Manferdelli, Marcus Peinado, and Bryan Willman [@england-2003-trusted-open-platform] published &quot;A Trusted Open Platform&quot; in &lt;em&gt;IEEE Computer&lt;/em&gt;, July 2003. The codename inside Microsoft was Palladium; the public name was the Next-Generation Secure Computing Base, NGSCB. It described a Windows where high-assurance code could run isolated from a possibly-compromised OS kernel, anchored in a hardware secure coprocessor that looked very much like a TPM. The motivating sentence read like a thesis: NGSCB extends personal computers &quot;to offer mechanisms that let high-assurance software protect itself from the operating systems, device drivers, BIOS, and other software running on the same machine.&quot;&lt;/p&gt;
&lt;p&gt;NGSCB never shipped as advertised. By 2005, reports indicated [@wikipedia-ngscb] that Microsoft would ship &quot;only part of the architecture, BitLocker, which can optionally use the Trusted Platform Module to validate the integrity of boot and system files prior to operating system startup.&quot; The &quot;Nexus&quot; hypervisor, the user-mode high-assurance &quot;agents,&quot; the protected paths for keyboard and display -- all dropped against the Vista deadline.The deadline pressure on Vista is legendary. The architecture team chose to ship the smallest piece of NGSCB the existing chip could underwrite -- BitLocker -- and shelved the rest. That shelved piece eventually returned, fifteen years later, as Virtualization-Based Security and Credential Guard.&lt;/p&gt;
&lt;p&gt;The shelved primitives, however, did not die. &lt;em&gt;Measured boot&lt;/em&gt; -- the firmware measures the boot loader, the boot loader measures the kernel, each measurement extended into a register that cannot be rewound -- migrated into Vista &lt;a href=&quot;https://paragmali.com/blog/bitlocker-on-windows-architecture-attacks-and-the-limits-of-/&quot; rel=&quot;noopener&quot;&gt;BitLocker&lt;/a&gt; and, later, into Windows 8 Measured Boot. &lt;em&gt;Sealed storage&lt;/em&gt; -- a key tied to a measured boot state, unreleasable unless the boot state matches -- became the defining property of every TPM-bound BitLocker volume. &lt;em&gt;Remote attestation&lt;/em&gt; -- a device signing a quote of its own measurements for a remote verifier -- became Device Health Attestation. NGSCB shipped, just not as itself.&lt;/p&gt;

In the early 2000s, Richard Stallman and the Free Software Foundation framed Trusted Computing as &quot;treacherous computing&quot; [@wikipedia-trusted-computing]: hardware secured &quot;for its owner, but also against its owner.&quot; That objection has aged unevenly. The DRM concerns the FSF predicted did not dominate -- Hollywood never got the protected video paths it wanted on PCs. The trust-centralization concern has aged well: the modern Pluton debate raises a structurally similar question about who holds the signing key on the world&apos;s PC fleet, and the answer is now political rather than technical.
&lt;p&gt;TCPA had built a chip that could hold a key the OS couldn&apos;t read. Which keys, under whose authority, against which threats? The first answer was almost good enough -- and it lasted about a decade.&lt;/p&gt;
&lt;h2&gt;3. Generation 1 and Generation 2: TPM 1.1b -&amp;gt; 1.2, and why they failed&lt;/h2&gt;
&lt;p&gt;If you opened a 2007 ThinkPad and looked at the LPC bus next to the Super-IO chip, you would see a small Infineon SLB chip [@andzakovic-2019-tpm-sniffing]. That was your TPM 1.2. It did exactly one job, and Vista&apos;s BitLocker was the first feature to depend on it.&lt;/p&gt;
&lt;p&gt;The architectural skeleton of TPM 1.x [@wikipedia-tpm] was simple. At least sixteen Platform Configuration Registers, with the PC Client TPM Interface Specification mandating 24 per active bank. Hash algorithm: SHA-1. Asymmetric algorithm: RSA-2048. A single root of storage, the Storage Root Key, whose private half never left the chip. An Endorsement Key burned in at manufacture as the chip&apos;s permanent identity. An HMAC-SHA1 authorization model over command parameters. A &quot;Take Ownership&quot; ceremony where the platform owner created the SRK and bound it to an owner secret.&lt;/p&gt;

A TPM-internal register modified only by a one-way &quot;extend&quot; operation: $\text{PCR}_{\text{new}} = H(\text{PCR}_{\text{old}} \,\|\, \text{measurement})$. Static PCRs (0-15) cannot be rolled back without a full platform reset. TPM 2.0 also defines *dynamic* PCRs (16, 17-22, and 23 in the PC Client profile) that can be reset at specific localities via `TPM2_PCR_Reset`. DRTM uses PCRs 17-22 at locality 4 to re-launch a known measurement chain mid-run; PCRs 16 and 23 are resettable at lower localities for debug and application use. Either way, PCRs are the data structure that compresses a chain of measurements into a single attestable digest.

The TPM&apos;s permanent identity key, generated at manufacture and accompanied by an EK certificate from the chip vendor&apos;s CA. The EK is non-migratable and is used during attestation to prove that a given key was generated inside a genuine TPM. It is also the privacy-sensitive part of TPM identity: the EK is unique to one chip, so unrestricted use of the EK in attestation reveals which physical machine you are.

The root of the TPM&apos;s key hierarchy. In TPM 1.x there was exactly one SRK per chip, created during the &quot;Take Ownership&quot; ceremony. Every protected key in the hierarchy was a child of the SRK -- if you cleared the SRK, every key tied to it was lost.

A restricted signing key the TPM uses to sign quotes of PCR values for a remote verifier. Naming changed with the spec: in TPM 1.x it was the Attestation Identity Key (AIK), a separate RSA key whose binding to a real TPM was asserted by a Privacy CA&apos;s certificate over the EK. In TPM 2.0 it is the Attestation Key (AK), a primary key in the Endorsement Hierarchy *derived from the same Endorsement Primary Seed as the EK* -- the AK is a sibling of the EK, not a copy, and it is certified by the EK rather than being an alias of it. Either way, the AIK/AK signs the quote; the EK never directly signs anything.
&lt;p&gt;TPM 1.2 [@wikipedia-tpm], shipped in late 2003 and standardized as ISO/IEC 11889:2009, layered on the practical machinery: locality (a way for code at different privilege levels to extend different PCRs), monotonic counters, NV indices, transport sessions, and the eight-PCR split between firmware (PCR[0..7]) and OS (PCR[8..15]). It was the chip that mass-deployed in essentially every business PC from 2006 to 2014. When Windows Vista [@wikipedia-ngscb] reached volume-license RTM in late 2006 and broad availability in early 2007, BitLocker [@ms-learn-bitlocker] (Enterprise and Ultimate editions only) became the first mainstream Windows feature whose security depended on the chip: BitLocker sealed the Volume Master Key to PCR values describing the boot-loader chain, so that a stolen disk could not be decrypted offline. Secure Boot binding (PCR[7]) would not arrive until UEFI Secure Boot [@ms-learn-oem-secure-boot] shipped with Windows 8 in 2012.&lt;/p&gt;

flowchart TD
    EK[&quot;Endorsement Key (EK)&lt;br /&gt;RSA-2048, burned at manufacture&quot;]
    Owner[&quot;Owner secret&lt;br /&gt;(Take Ownership)&quot;]
    SRK[&quot;Storage Root Key (SRK)&lt;br /&gt;RSA-2048, single per chip&quot;]
    K1[&quot;Storage key&lt;br /&gt;(child)&quot;]
    K2[&quot;Binding key&lt;br /&gt;(child)&quot;]
    K3[&quot;Signing key&lt;br /&gt;(child)&quot;]
    AIK[&quot;Attestation Identity Key&lt;br /&gt;(independent RSA key)&quot;]
    PCA[&quot;Privacy CA&quot;]&lt;pre&gt;&lt;code&gt;Owner --&amp;gt; SRK
SRK --&amp;gt; K1
SRK --&amp;gt; K2
SRK --&amp;gt; K3
AIK --&amp;gt; PCA
EK -. cert .-&amp;gt; PCA
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The problem with all of this was not that anyone broke it. The problem was that the architecture hard-coded its cryptographic primitives into its data structures. SHA-1 was not a configurable algorithm; it was the literal width of the PCR register and of every hash field in the spec. RSA-2048 was not a configurable algorithm; it was the literal layout of the EK, the SRK, and every protected key blob. If the world deprecated SHA-1, you did not patch the firmware. You replaced the chip.&lt;/p&gt;
&lt;p&gt;NIST SP 800-131A deprecated SHA-1 [@nist-sp-800-131a-r2] digital signatures starting in 2011. The 2017 SHAttered collision [@google-2017-shattered] drove the point home.The 2017 SHAttered SHA-1 collision does not retroactively break Vista BitLocker in practice -- to do that, an attacker would have to choose firmware blobs whose hashes collide, not merely demonstrate a collision exists. But it ended any defense of &quot;SHA-1 in PCRs is fine because nobody can collide it.&quot; Algorithm flexibility cannot be retrofitted onto silicon whose data structures hard-code SHA-1. There were other limitations: a single SRK hierarchy meant clearing the chip&apos;s storage hierarchy also reset chip identity; the Privacy CA model for attestation never deployed at scale; ECC was missing; and the HMAC-based authorization model made every command exchange a piece of bespoke crypto plumbing.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Generation&lt;/th&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Hash&lt;/th&gt;
&lt;th&gt;Asym&lt;/th&gt;
&lt;th&gt;Hierarchies&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Software-only (LSA / PStore)&lt;/td&gt;
&lt;td&gt;1996+ [@wikipedia-windows-nt-4]&lt;/td&gt;
&lt;td&gt;varies&lt;/td&gt;
&lt;td&gt;varies&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;NT 4.0 baseline; disk-readable wrapping keys&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software-only (DPAPI / EFS)&lt;/td&gt;
&lt;td&gt;2000+&lt;/td&gt;
&lt;td&gt;varies&lt;/td&gt;
&lt;td&gt;RSA-1024 (EFS)&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;Defeated by offline disk theft and by SYSTEM compromise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TPM 1.1b&lt;/td&gt;
&lt;td&gt;2003&lt;/td&gt;
&lt;td&gt;SHA-1&lt;/td&gt;
&lt;td&gt;RSA-2048&lt;/td&gt;
&lt;td&gt;1 (SRK)&lt;/td&gt;
&lt;td&gt;First mass deployment; superseded by 1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TPM 1.2&lt;/td&gt;
&lt;td&gt;2003-2014&lt;/td&gt;
&lt;td&gt;SHA-1&lt;/td&gt;
&lt;td&gt;RSA-2048&lt;/td&gt;
&lt;td&gt;1 (SRK)&lt;/td&gt;
&lt;td&gt;Vista/7/8 BitLocker baseline; algorithm-rigid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TPM 2.0&lt;/td&gt;
&lt;td&gt;2014+&lt;/td&gt;
&lt;td&gt;SHA-1 + SHA-256 (+ SHA-3, future PQC)&lt;/td&gt;
&lt;td&gt;RSA, ECC&lt;/td&gt;
&lt;td&gt;4 (Platform / Endorsement / Storage / Null)&lt;/td&gt;
&lt;td&gt;Current; ISO/IEC 11889:2015&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;TCG accepted the constraint in 2014 and started over. The 2.0 design did not add features to 1.2. It answered a different question: how do you let one TPM survive twenty years of cryptographic transitions?&lt;/p&gt;
&lt;h2&gt;4. Generation 3: TPM 2.0 -- one primitive, many algorithms&lt;/h2&gt;
&lt;p&gt;On April 9, 2014 [@wikipedia-tpm], the Trusted Computing Group [@tcg-tpm2-library-spec] did something rare in standards bodies: they threw away a working specification and started from a different question. The result was the TPM 2.0 Library Specification, Family 2.0, Level 00, Revision 116. A year later it became ISO/IEC 11889-1:2015 Edition 2 [@iso-iec-11889-1-2015], which removed the &quot;industry consortium&quot; objection from procurement teams in regulated environments. By July 28, 2016 [@ms-learn-oem-tpm], Microsoft had quietly made TPM 2.0 a contractual must-have for every new Windows OEM SKU.&lt;/p&gt;
&lt;p&gt;Four conceptual changes carry the architecture.&lt;/p&gt;
&lt;h3&gt;4.1 Algorithm agility&lt;/h3&gt;
&lt;p&gt;Every cryptographic algorithm in TPM 2.0 carries an integer identifier. PCRs no longer have a single hash; they have &lt;em&gt;banks&lt;/em&gt;, one per supported algorithm, all extended in parallel by a single command. Microsoft&apos;s own documentation [@ms-learn-how-windows-uses-tpm] describes the contract: when firmware extends PCR[0] with the IBV&apos;s CRTM measurement, the TPM extends both the SHA-1 bank and the SHA-256 bank, and on newer parts the SHA-384 bank as well.The PC Client Platform TPM Profile mandates SHA-1 + SHA-256 minimum, not SHA-256-only. Backwards compatibility had a cost. Future-proofing against SHA-3 and post-quantum algorithms is now a matter of registering a new ID, not replacing silicon.&lt;/p&gt;

A property of a cryptographic protocol or device whereby the choice of hash, signature, or encryption algorithm is decoupled from the protocol&apos;s data structures. Algorithm-agile systems carry algorithm identifiers alongside their cryptographic blobs, so a new algorithm can be added by registering an ID rather than by re-laying out the wire format. TPM 2.0 is algorithm-agile; TPM 1.x was not.
&lt;h3&gt;4.2 Four hierarchies, four primary seeds&lt;/h3&gt;
&lt;p&gt;Where TPM 1.x had a single SRK, TPM 2.0 has four hierarchies -- Platform, Endorsement, Storage, Null -- each rooted in a per-hierarchy &lt;em&gt;primary seed&lt;/em&gt;. Primary keys are derived deterministically: call &lt;code&gt;TPM2_CreatePrimary&lt;/code&gt; with the same template against the same seed, and you get the same key back, byte-for-byte. The Apress textbook by Arthur, Challener, and Goldman [@arthur-challener-goldman-2015] -- the de-facto developer reference for the spec -- describes this as the architectural fix to a real operational problem: the platform owner can clear the storage hierarchy without losing the device&apos;s endorsement identity.&lt;/p&gt;

flowchart TD
    subgraph Platform[&quot;Platform Hierarchy&lt;br /&gt;(firmware-only)&quot;]
      PSeed[&quot;Platform Primary Seed&quot;]
      PSRK[&quot;Platform SRK&quot;]
      PSeed --&amp;gt; PSRK
    end
    subgraph Endorsement[&quot;Endorsement Hierarchy&lt;br /&gt;(privacy-sensitive)&quot;]
      ESeed[&quot;Endorsement Primary Seed&quot;]
      EK[&quot;EK&quot;]
      AK[&quot;AK&lt;br /&gt;(restricted signing)&quot;]
      ESeed --&amp;gt; EK
      ESeed --&amp;gt; AK
      EK -. cert .-&amp;gt; AK
    end
    subgraph Storage[&quot;Storage Hierarchy&lt;br /&gt;(owner-cleared)&quot;]
      SSeed[&quot;Storage Primary Seed&quot;]
      SRK[&quot;SRK&quot;]
      Sealed[&quot;Sealed VMK&lt;br /&gt;(BitLocker)&quot;]
      Bound[&quot;Hello key&lt;br /&gt;(per-user)&quot;]
      SSeed --&amp;gt; SRK
      SRK --&amp;gt; Sealed
      SRK --&amp;gt; Bound
    end
    subgraph Null[&quot;Null Hierarchy&lt;br /&gt;(reset on every reboot)&quot;]
      NSeed[&quot;Null Primary Seed&lt;br /&gt;(per-boot random)&quot;]
    end
&lt;h3&gt;4.3 Enhanced Authorization&lt;/h3&gt;
&lt;p&gt;The most interesting change is how TPM 2.0 talks about access control. Every protected object has a &lt;code&gt;policyDigest&lt;/code&gt;, an algorithm-agile hash of an arbitrarily complex set of conditions. To use the object, the caller starts a policy session (&lt;code&gt;TPM2_StartAuthSession&lt;/code&gt; with &lt;code&gt;SE_POLICY&lt;/code&gt;) and walks predicates -- &lt;code&gt;TPM2_PolicyPCR&lt;/code&gt;, &lt;code&gt;TPM2_PolicyAuthorize&lt;/code&gt;, &lt;code&gt;TPM2_PolicySigned&lt;/code&gt;, &lt;code&gt;TPM2_PolicyCommandCode&lt;/code&gt;, &lt;code&gt;TPM2_PolicyAuthValue&lt;/code&gt; -- each extending the running session digest. At the end, the TPM checks that the session digest matches the object&apos;s &lt;code&gt;policyDigest&lt;/code&gt;, and only then authorizes the operation. BitLocker, in its current Microsoft Learn description [@ms-learn-bitlocker], uses this to seal the Volume Master Key to PCR[7] (Secure Boot policy) and PCR[11] (BitLocker control flags). Any tampering with Secure Boot configuration -- or any non-BitLocker boot path -- causes unseal to fail.&lt;/p&gt;

TPM 2.0&apos;s flexible authorization mechanism. Each protected object carries a hash (policyDigest) of the predicates required to use it. A caller builds an equivalent digest by walking a sequence of TPM2_Policy* commands inside a policy session; the TPM only authorizes the operation if the two digests match. This is the mechanism that lets BitLocker bind the VMK to specific PCR values, lets Hello bind a key to a PIN gesture with anti-hammering, and lets attestation servers compose policies they did not design into the chip.
&lt;h3&gt;4.4 The unifying primitive: measure, extend, seal, quote&lt;/h3&gt;
&lt;p&gt;The reason any of this matters for Windows is that the entire feature surface compresses down to four operations on the same set of registers.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Measure.&lt;/strong&gt; A piece of code computes the hash of the next piece of code (or configuration) about to run.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extend.&lt;/strong&gt; That hash is folded into a PCR via &lt;code&gt;PCR_new = H(PCR_old || hash)&lt;/code&gt;. The operation is one-way: PCRs cannot be rewound.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seal.&lt;/strong&gt; A symmetric key (or arbitrary blob) is encrypted under the TPM&apos;s Storage hierarchy with a &lt;code&gt;policyDigest&lt;/code&gt; that names a specific set of PCR values. &lt;code&gt;TPM2_Unseal&lt;/code&gt; releases the blob if and only if the live PCR state matches.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quote.&lt;/strong&gt; The TPM signs a snapshot of selected PCRs with an Attestation Key. A remote verifier can check the signature against a known AKpub and an EK certificate chain.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The boot of a measured Windows machine is exactly this loop. The Core Root of Trust for Measurement -- a small piece of immutable firmware -- measures the next stage and extends PCR[0]. Each stage measures the next: PCR[2] for option ROMs, PCR[4] for the Windows Boot Manager, PCR[7] for the Secure Boot policy, PCR[11] for BitLocker volume control flags, and on through ELAM and the kernel. Microsoft&apos;s Trusted Boot description [@ms-learn-secure-boot-process] walks the chain.&lt;/p&gt;

sequenceDiagram
    participant FW as Firmware (CRTM)
    participant BM as Bootmgr
    participant Win as Windows kernel
    participant TPM as TPM
    FW-&amp;gt;&amp;gt;TPM: PCR_Extend(PCR[0], H(firmware))
    FW-&amp;gt;&amp;gt;BM: Hand off
    BM-&amp;gt;&amp;gt;TPM: PCR_Extend(PCR[4], H(bootmgr))
    BM-&amp;gt;&amp;gt;TPM: PCR_Extend(PCR[7], H(SecureBoot policy))
    BM-&amp;gt;&amp;gt;Win: Hand off
    Win-&amp;gt;&amp;gt;TPM: PCR_Extend(PCR[11], H(BitLocker control))
    Win-&amp;gt;&amp;gt;TPM: TPM2_Unseal(VMK, policyDigest = PCR[7],PCR[11])
    TPM--&amp;gt;&amp;gt;Win: VMK if PCRs match policy, else error
&lt;p&gt;Now compress the Windows feature catalogue against those four operations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BitLocker [@ms-learn-bitlocker] seals the VMK to a PCR policy.&lt;/li&gt;
&lt;li&gt;Measured Boot and Device Health Attestation [@ms-learn-azure-measured-boot] quote PCRs to a remote verifier.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://paragmali.com/blog/the-windows-secure-kernel/&quot; rel=&quot;noopener&quot;&gt;Credential Guard&lt;/a&gt; [@ms-learn-credential-guard] seals the VBS-isolated NTLM/Kerberos secrets with a policy that includes the VBS measurement.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://paragmali.com/blog/your-face-is-not-your-password-inside-windows-hellos-hardwar/&quot; rel=&quot;noopener&quot;&gt;Windows Hello for Business&lt;/a&gt; [@ms-learn-hello-for-business] creates a per-user RSA-2048 or P-256 key whose authorization policy requires the PIN gesture and is bounded by the TPM&apos;s anti-hammering counter.&lt;/li&gt;
&lt;li&gt;Virtual smart cards, DPAPI-NG, and TPM key attestation [@ms-learn-tpm-key-attestation] for ADCS-issued certificates all sit on the same primitives.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; BitLocker, Measured Boot, Credential Guard, Windows Hello, virtual smart cards, DPAPI-NG, and TPM key attestation are not seven independent uses of a chip. They are seven &lt;em&gt;policy expressions&lt;/em&gt; over the same four operations -- measure, extend, seal, quote -- on the same PCR set. The TPM is not a checkbox shared by features. It is one primitive that &lt;em&gt;defines&lt;/em&gt; what hardware-rooted security can do in Windows.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; One primitive -- measure, extend, seal, quote -- underwrites every Windows hardware-rooted security feature shipped since Vista. The TPM&apos;s value to Windows is not a list of cryptographic operations. It is a single, composable contract: &quot;this key only releases when the boot looks like &lt;em&gt;this&lt;/em&gt;.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;By July 28, 2016, TPM 2.0 was a hidden contractual requirement under the entire Windows OEM channel. By June 24, 2021, Microsoft made the same chip the visible install gate for Windows 11. The architecture had won the building. Then attackers started taking it apart.&lt;/p&gt;
&lt;h2&gt;5. The threat model collapses inward (2019-2024)&lt;/h2&gt;
&lt;p&gt;On March 13, 2019, a New Zealand security researcher named Denis Andzakovic posted a blog entry [@andzakovic-2019-tpm-sniffing] that, in retrospect, started the modern era of TPM offense. He demonstrated two LPC-bus sniffing attacks on two different machines. On an HP business laptop running TPM 1.2, he used a DSLogic Plus logic analyzer connected via the laptop&apos;s debug header (7 wires: LCLK, LFRAME, LAD[0:3], and ground) to lift the BitLocker Volume Master Key off the LPC bus. On a Surface Pro 3 running TPM 2.0, he spent $40 NZD on a Lattice iCE40 ICEStick FPGA (8 connections: GND, LCLK, LFRAME#, LRESET#, LAD[0:3]) and replicated the attack. With the disk in hand and the motherboard accessible, a thief could decrypt a TPM-only BitLocker volume in the time it took to boot it once. Andzakovic open-sourced the FPGA gateware [@andzakovic-lpc-sniffer-code] the same day.Andzakovic credits Hector Martin (&lt;code&gt;@marcan&lt;/code&gt;) for prototyping LPC sniffing earlier; the 2019 write-up was the first end-to-end public demonstration with reproducible code.&lt;/p&gt;
&lt;p&gt;The structural insight, which has not been backed away from, is that Windows does not enable TPM 2.0 &lt;em&gt;parameter encryption&lt;/em&gt; on the BitLocker boot path. The VMK travels in plaintext at the LPC bus&apos;s 33 MHz clock across a few millimetres of PCB.Why doesn&apos;t Windows turn on parameter encryption for BitLocker? The boot-time pressure is real -- pre-OS code lives in a tight memory budget and parameter encryption requires HMAC-signed sessions. The pragmatic mitigation Microsoft documents is preboot authentication (PIN or startup key), which makes the bus-sniffed VMK insufficient on its own.&lt;/p&gt;
&lt;p&gt;The attack would not stay a one-laptop curio. In late 2020, WithSecure&apos;s Henri Nurmi released an SPI variant [@withsecure-2020-spi-sniffing] and a public BitLocker-key extraction tool. A year later, Thomas Dewaele and Julien Oberson at SCRT reproduced the LPC attack [@scrt-2021-tpm-sniffing] on a Lenovo ThinkPad L440 with a chip (labeled P24JPVSP, identified by SCRT as probably equivalent to the ST33TPM12LPC) and published a tutorial. By October 2024, SCRT had industrialized the attack [@scrt-2024-bitlocker-pin] across &quot;the three major enterprise-grade laptop manufacturers (i.e. Lenovo, HP, and Dell)&quot; in &quot;a few minutes.&quot;&lt;/p&gt;
&lt;p&gt;The first reassurance the industry reached for was: ship the TPM inside the chipset. No bus, no sniff. Both Intel (Platform Trust Technology, fTPM-in-CSME [@wikipedia-intel-me]) and AMD (fTPM-in-PSP) had already done this for cost reasons. The second reassurance lasted eight months.&lt;/p&gt;
&lt;p&gt;In November 2019, Daniel Moghimi, Berk Sunar, Thomas Eisenbarth, and Nadia Heninger -- soon to be USENIX Security 2020 -- released TPM-Fail [@tpmfail-microsite]. Their finding: Intel PTT and a STMicro ST33 dTPM both leaked ECDSA private keys through ordinary timing side channels in their scalar multiplication. The numbers were brutal:&lt;/p&gt;

A local adversary can recover the ECDSA key from Intel fTPM in 4-20 minutes depending on the access level. We even show that these attacks can be performed remotely on fast networks, by recovering the authentication key of a virtual private network (VPN) server in 5 hours. -- TPM-Fail, tpm.fail [@tpmfail-microsite], 2019
&lt;p&gt;NVD assigned CVE-2019-11090 [@cve-2019-11090] to Intel PTT and CVE-2019-16863 [@cve-2019-16863] to STMicroelectronics&apos; ST33TPHF2ESPI. The latter entry is blunt: &quot;STMicroelectronics ST33TPHF2ESPI TPM devices before 2019-09-12 allow attackers to extract the ECDSA private key via a side-channel timing attack because ECDSA scalar multiplication is mishandled, aka TPM-FAIL.&quot; Both chips were certified at the moment of disclosure -- the STMicro chip held both Common Criteria EAL4+ and FIPS 140-2 Level 2, while the Intel chip held FIPS 140-2 [@tpmfail-microsite]. Certification did not catch the bug. The presentation is preserved in the USENIX Security 2020 proceedings [@moghimi-2020-usenix-tpmfail].&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Removing the bus did not remove the attack surface. It relocated it from the PCB to the trusted execution environment that hosted the firmware TPM. The fTPM closes one channel and opens another -- and the certification regime that was supposed to catch both missed the timing leak in chips that had passed their respective certification programmes (STMicro: Common Criteria EAL4+ and FIPS 140-2 Level 2; Intel: FIPS 140-2). The &quot;fTPM has no bus to sniff&quot; reassurance was a category error.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The final beat came four years later. In April 2023, Hans Niklas Jacob, Christian Werling, Robert Buhren, and Jean-Pierre Seifert posted faulTPM (arXiv:2304.14717) [@jacob-2023-faultpm], with reproducible code at github.com/PSPReverse/ftpm_attack [@pspreverse-ftpm-attack]. The attack: voltage-glitch the AMD Platform Security Processor and walk out with the entire internal TPM state. The paper&apos;s own claim is the sentence that, more than any other, framed the modern TPM threat model.&lt;/p&gt;

this vulnerability exposes the complete internal TPM state of the fTPM. It allows us to extract any cryptographic material stored or sealed by the fTPM regardless of authentication mechanisms such as Platform Configuration Register validation or passphrases with anti-hammering protection. -- Jacob, Werling, Buhren, Seifert, faulTPM (2023) [@jacob-2023-faultpm]
&lt;p&gt;Two to three hours of physical access. Anti-hammering bypassed because anti-hammering is enforced by the TPM, and once the TPM&apos;s internal state is on your bench you set the counter to zero. PCR-policy bypassed because the sealed blob&apos;s wrapping key is in the extracted state. The structural punch is that this makes BitLocker TPM+PIN on AMD fTPM with a low-entropy PIN &lt;em&gt;less&lt;/em&gt; secure than a TPM-less passphrase (a corollary the faulTPM paper makes explicit [@jacob-2023-faultpm]): the TPM concentrates all your trust into a chip whose internal state can be exfiltrated.&lt;/p&gt;

timeline
    title Three generations of TPM attack
    section Bus sniffing
      2019 March : Andzakovic - \$40 FPGA, BitLocker VMK off LPC bus
      2020 December : WithSecure - SPI variant and key-extraction tool
      2021 November : SCRT reproduces on Lenovo ThinkPad L440
      2024 October : SCRT - few-minute attack on Lenovo, HP, Dell
    section Side channel in fTPM
      2019 November : TPM-Fail (Moghimi, Sunar, Eisenbarth, Heninger)
      2019 November : CVE-2019-11090 (Intel PTT), CVE-2019-16863 (STMicro)
    section Fault injection in fTPM
      2023 April : faulTPM - full AMD fTPM state extracted in 2-3 h
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attack class&lt;/th&gt;
&lt;th&gt;TPM form&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;Time&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;LPC bus sniffing (BitLocker VMK)&lt;/td&gt;
&lt;td&gt;Discrete TPM 1.2 / 2.0&lt;/td&gt;
&lt;td&gt;$0 (logic analyzer) -- ~$40 NZD (iCE40 FPGA, Surface Pro 3)&lt;/td&gt;
&lt;td&gt;Minutes once wired&lt;/td&gt;
&lt;td&gt;Andzakovic 2019; SCRT 2021/2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SPI bus sniffing&lt;/td&gt;
&lt;td&gt;Discrete TPM 2.0&lt;/td&gt;
&lt;td&gt;~$50 (logic analyzer)&lt;/td&gt;
&lt;td&gt;Minutes once wired&lt;/td&gt;
&lt;td&gt;WithSecure 2020-2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Timing side channel on ECDSA&lt;/td&gt;
&lt;td&gt;Intel PTT, STMicro ST33&lt;/td&gt;
&lt;td&gt;Software-only&lt;/td&gt;
&lt;td&gt;4-20 min local; 5 h remote VPN&lt;/td&gt;
&lt;td&gt;TPM-Fail 2019/2020&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voltage glitch on PSP&lt;/td&gt;
&lt;td&gt;AMD fTPM&lt;/td&gt;
&lt;td&gt;~$200 (glitching rig)&lt;/td&gt;
&lt;td&gt;2-3 h physical&lt;/td&gt;
&lt;td&gt;faulTPM 2023&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;If a $40 FPGA defeats discrete TPM, a network packet defeats Intel PTT, and a few hours of physical access defeats AMD fTPM completely -- where does the next generation of TPM live? Microsoft&apos;s answer was on the CPU die itself.&lt;/p&gt;
&lt;h2&gt;6. State of the art: five realizations of one specification&lt;/h2&gt;
&lt;p&gt;All five chips in this section pass the same TCG conformance suite. They expose the same &lt;code&gt;TPM2_*&lt;/code&gt; command surface to Windows. They fail to completely different attackers. The architecture is identical; the &lt;em&gt;attack surface&lt;/em&gt; is everything.&lt;/p&gt;

A *discrete* TPM is a separate chip on the motherboard, talking to the host over LPC, SPI, or I2C. A *firmware* TPM is a TPM 2.0 implementation running inside an existing trusted execution environment on the host -- Intel CSME (Platform Trust Technology), AMD PSP (fTPM), or a dedicated Microsoft IP block (Pluton). Both pass the same TCG specification; they differ in physical location, attack surface, and update channel.

A zero-knowledge protocol that lets a TPM prove &quot;I am a real TPM certified by vendor X&quot; without revealing which chip is talking. Replaces the TPM 1.2 Privacy CA model, which required a third-party CA to mediate every attestation. ECDAA is the elliptic-curve variant standardized in TPM 2.0.
&lt;h3&gt;6.1 Discrete TPM&lt;/h3&gt;
&lt;p&gt;The classical chip. Infineon, STMicroelectronics, Nuvoton. Hangs off the motherboard&apos;s LPC, SPI, or I2C bus. Best certifications (Common Criteria EAL4+, FIPS 140-2/3). One bug class: bus sniffing in minutes for $40 against the BitLocker boot path that Windows leaves in plaintext.&lt;/p&gt;
&lt;h3&gt;6.2 Intel PTT&lt;/h3&gt;
&lt;p&gt;TPM 2.0 inside the Converged Security and Management Engine -- historically on the Platform Controller Hub die, and increasingly on the SoC die in integrated-platform Intel processors since Tiger Lake. Either way, no physical bus to sniff. Defeated by TPM-Fail [@tpmfail-microsite] timing side channel; firmware-patched, but inherits CSME&apos;s broader attack surface and CSME&apos;s update story (UEFI capsule via OEM, lifecycle entirely under the OEM&apos;s control).&lt;/p&gt;
&lt;h3&gt;6.3 AMD fTPM (PSP)&lt;/h3&gt;
&lt;p&gt;TPM 2.0 inside the AMD Platform Security Processor [@wikipedia-amd-psp] (an ARM TrustZone Cortex-A5 core integrated into every modern Ryzen SoC). Ships in essentially all Ryzen-class client SoCs since 2017. No physical bus to sniff. Defeated end-to-end by the faulTPM [@jacob-2023-faultpm] voltage-glitch attack against the PSP. The structural problem is shared TEE: the same coprocessor is responsible for memory encryption setup, secure-boot enforcement, and TPM service, and a single fault-injection path drops all of those.&lt;/p&gt;
&lt;h3&gt;6.4 Microsoft Pluton&lt;/h3&gt;
&lt;p&gt;A Microsoft IP block on the CPU SoC die, with Microsoft-authored Rust firmware (on 2024 AMD and Intel platforms) [@ms-learn-pluton] delivered through Windows Update. According to Microsoft&apos;s hardware list, Pluton &quot;is currently available on devices with the following chipsets running on Windows 11: AMD: Ryzen 6000, 7000, 8000, 9000 and Ryzen AI Series ... Intel: Core Series Processors -- Ultra 200V Series, Ultra Series 3 and Series 3 ... Qualcomm: Snapdragon 8cx Gen 3 and Snapdragon X Series.&quot; The same page notes that &quot;Pluton platforms in 2024 AMD and Intel systems will start to use a Rust-based firmware foundation given the importance of memory safety.&quot;&lt;/p&gt;
&lt;p&gt;The thesis is laid out in Microsoft&apos;s November 17, 2020 announcement post [@ms-pluton-blog-2020], which links explicitly to Andzakovic. The architectural framing is unusually direct.&lt;/p&gt;

The Pluton design removes the potential for that communication channel to be attacked by building security directly into the CPU. -- Microsoft Security Blog, November 17, 2020 [@ms-pluton-blog-2020]
&lt;p&gt;Three things change at once. The bus is gone -- Pluton is on-die, so dTPM bus-sniffing has no surface to attack. The TEE host is dedicated -- Pluton is not the same coprocessor that runs SEV memory encryption or ME runtime services. And the firmware ships through Windows Update -- so when a Pluton firmware vulnerability is found (and one will be found), the patch reaches the deployed fleet through Windows Update rather than through OEM UEFI capsule rollouts.The Pluton-as-TPM page makes the trade-off explicit: &quot;Microsoft Pluton can be used as a TPM, or with a TPM. Although Pluton builds security directly into the CPU, device manufacturers might choose to use discrete TPM as the default TPM.&quot; [@ms-learn-pluton-as-tpm] Several enterprise security teams have publicly cited the Pluton update model as a reason to keep dTPM as their default for high-assurance fleets even where Pluton silicon is available.&lt;/p&gt;
&lt;h3&gt;6.5 vTPM&lt;/h3&gt;
&lt;p&gt;A software TPM emulation, typically inside a hypervisor. Azure Trusted Launch [@ms-learn-azure-trusted-launch] is Microsoft&apos;s flagship implementation: &quot;Trusted Launch is the default state for newly created Azure Gen2 VM and scale sets.&quot; The vTPM lives in a host-protected memory region and inherits the trust of the host. For cloud workloads where the threat model already includes &quot;the hypervisor host is honest,&quot; this is the right shape; for adversarial physical access, it is not.&lt;/p&gt;
&lt;h3&gt;6.6 Head-to-head&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;dTPM&lt;/th&gt;
&lt;th&gt;Intel PTT&lt;/th&gt;
&lt;th&gt;AMD fTPM&lt;/th&gt;
&lt;th&gt;Pluton&lt;/th&gt;
&lt;th&gt;vTPM&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Physical location&lt;/td&gt;
&lt;td&gt;Separate chip&lt;/td&gt;
&lt;td&gt;CSME (PCH die)&lt;/td&gt;
&lt;td&gt;PSP (CPU die)&lt;/td&gt;
&lt;td&gt;Dedicated IP block on CPU die&lt;/td&gt;
&lt;td&gt;Hypervisor memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bus to host&lt;/td&gt;
&lt;td&gt;LPC / SPI / I2C&lt;/td&gt;
&lt;td&gt;None (on-die)&lt;/td&gt;
&lt;td&gt;None (on-die)&lt;/td&gt;
&lt;td&gt;None (on-die)&lt;/td&gt;
&lt;td&gt;None (virtual)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TEE shared with&lt;/td&gt;
&lt;td&gt;none (own die)&lt;/td&gt;
&lt;td&gt;CSME&lt;/td&gt;
&lt;td&gt;PSP (large)&lt;/td&gt;
&lt;td&gt;none (Pluton-only)&lt;/td&gt;
&lt;td&gt;host kernel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Side-channel exposure&lt;/td&gt;
&lt;td&gt;Implementation-dependent&lt;/td&gt;
&lt;td&gt;TPM-Fail patched&lt;/td&gt;
&lt;td&gt;faulTPM unaddressed structurally&lt;/td&gt;
&lt;td&gt;Limited public research&lt;/td&gt;
&lt;td&gt;host-dependent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update channel&lt;/td&gt;
&lt;td&gt;UEFI capsule&lt;/td&gt;
&lt;td&gt;UEFI capsule (CSME)&lt;/td&gt;
&lt;td&gt;UEFI capsule (PSP)&lt;/td&gt;
&lt;td&gt;Windows Update&lt;/td&gt;
&lt;td&gt;hypervisor patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Certifications&lt;/td&gt;
&lt;td&gt;EAL4+, FIPS 140-2/3&lt;/td&gt;
&lt;td&gt;EAL4+&lt;/td&gt;
&lt;td&gt;varies&lt;/td&gt;
&lt;td&gt;varies&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OEM cost&lt;/td&gt;
&lt;td&gt;per-chip BOM&lt;/td&gt;
&lt;td&gt;bundled&lt;/td&gt;
&lt;td&gt;bundled&lt;/td&gt;
&lt;td&gt;bundled&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best-known attack&lt;/td&gt;
&lt;td&gt;LPC/SPI sniffing in minutes&lt;/td&gt;
&lt;td&gt;TPM-Fail timing&lt;/td&gt;
&lt;td&gt;faulTPM full state&lt;/td&gt;
&lt;td&gt;None public at faulTPM depth&lt;/td&gt;
&lt;td&gt;host compromise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Algorithm agility&lt;/td&gt;
&lt;td&gt;spec-required&lt;/td&gt;
&lt;td&gt;spec-required&lt;/td&gt;
&lt;td&gt;spec-required&lt;/td&gt;
&lt;td&gt;spec-required + Rust firmware updates&lt;/td&gt;
&lt;td&gt;spec-required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best fit&lt;/td&gt;
&lt;td&gt;Compliance-driven, high-assurance fleets&lt;/td&gt;
&lt;td&gt;Existing Intel platforms&lt;/td&gt;
&lt;td&gt;Existing AMD platforms&lt;/td&gt;
&lt;td&gt;Default for Windows 11 client&lt;/td&gt;
&lt;td&gt;Cloud workloads&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

flowchart LR
    subgraph TPMs[&quot;Five realizations&quot;]
      dTPM[&quot;Discrete TPM&lt;br /&gt;(LPC/SPI/I2C)&quot;]
      PTT[&quot;Intel PTT&lt;br /&gt;(CSME)&quot;]
      AMD[&quot;AMD fTPM&lt;br /&gt;(PSP)&quot;]
      Pluton[&quot;Microsoft Pluton&lt;br /&gt;(on-die, Rust, WU)&quot;]
      vTPM[&quot;vTPM&lt;br /&gt;(Hyper-V / Azure)&quot;]
    end
    subgraph Surface[&quot;TCG2 command surface&quot;]
      TCG[&quot;TPM2_* commands&quot;]
    end
    dTPM --&amp;gt; TCG
    PTT --&amp;gt; TCG
    AMD --&amp;gt; TCG
    Pluton --&amp;gt; TCG
    vTPM --&amp;gt; TCG
    TCG --&amp;gt; BL[&quot;BitLocker VMK seal&quot;]
    TCG --&amp;gt; MB[&quot;Measured Boot / DHA&quot;]
    TCG --&amp;gt; CG[&quot;Credential Guard&quot;]
    TCG --&amp;gt; WH[&quot;Windows Hello&quot;]
    TCG --&amp;gt; VSC[&quot;Virtual smart cards&quot;]
    TCG --&amp;gt; DPAPI[&quot;DPAPI-NG&quot;]
    TCG --&amp;gt; KA[&quot;TPM key attestation (ADCS)&quot;]
&lt;p&gt;The deep claim of the Pluton design is not that it is a better cryptoprocessor. It is that the previous decade&apos;s lesson -- TEE memory-safety bugs are systemic, certification did not catch them, and OEM UEFI capsule patching is too slow -- argues for moving the firmware signer to Microsoft and the firmware language to Rust. That is a political choice, not just a technical one. The October 2019 Secured-core PCs initiative [@ms-secured-core-blog-2019] was the first public step; Pluton is its descendant.&lt;/p&gt;
&lt;p&gt;If you can sniff a dTPM, time-attack an Intel PTT, glitch an AMD fTPM, and trust Microsoft to sign your Pluton firmware -- which threat are you actually defending against?&lt;/p&gt;
&lt;h2&gt;7. Theoretical limits: what a passive cryptoprocessor cannot do&lt;/h2&gt;
&lt;p&gt;A famous joke in the trusted-computing community: the TPM cannot make a compromised OS uncompromised. It can only make sure that nothing else helped.&lt;/p&gt;
&lt;p&gt;Three impossibility-style results follow from the architecture itself, regardless of which of the five realizations you pick.&lt;/p&gt;
&lt;h3&gt;7.1 The TPM is a Root of Trust for Storage and Reporting, not Execution&lt;/h3&gt;
&lt;p&gt;The Core Root of Trust for Measurement -- the immutable code that bootstraps the measurement chain -- lives in firmware, not in the TPM. The TPM cannot detect that the wrong code measured itself; it can only refuse to release sealed material when the PCRs do not match the stored policy. If the CRTM is compromised (or a downstream measurement is forged before extension), the TPM has no way to know.&lt;/p&gt;
&lt;p&gt;Stronger guarantees require an &lt;em&gt;active&lt;/em&gt; root of trust: a Dynamic Root of Trust for Measurement, where the CPU enters a known good state late in the boot and re-measures from there. Intel TXT, AMD SVM-SKINIT, and Microsoft&apos;s System Guard Secure Launch [@ms-learn-system-guard] on Secured-core PCs all implement this. The TPM is a participant in DRTM; on its own, it is not sufficient.&lt;/p&gt;
&lt;h3&gt;7.2 TPM-only BitLocker has a structural lower bound&lt;/h3&gt;
&lt;p&gt;The VMK must enter RAM during Trusted Boot before the user authenticates. This is not a bug; it is the threat-model definition of &quot;TPM-only.&quot; Therefore &lt;em&gt;any&lt;/em&gt; attacker who intercepts the VMK at the moment of release defeats TPM-only BitLocker, regardless of TPM strength. This is what every dTPM bus-sniffing attack actually exploits -- not a weakness of the TPM, but the structural condition that the key must traverse the boot path.&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s countermeasures documentation [@ms-learn-bitlocker-countermeasures] names the mitigation in plain terms: preboot authentication. Adding TPM+PIN raises the bound to &quot;guess the PIN against intact anti-hammering&quot; -- but only as long as the TPM&apos;s anti-hammering counter cannot be exfiltrated. faulTPM violates that condition for AMD fTPM. On a Pluton or hardened dTPM, anti-hammering still holds, and a sufficiently random PIN closes the bound.&lt;/p&gt;
&lt;p&gt;The complexity of guessing an $n$-digit PIN against intact anti-hammering [@ms-learn-bitlocker-countermeasures] with a per-failure delay $\Delta t$ is approximately $\frac{1}{2} \cdot 10^n \cdot \Delta t$ in the average case. For $n = 8$ and $\Delta t \geq 1\text{s}$ this is roughly $5 \times 10^7$ seconds, or about 1.6 years. For $n = 4$, it is hours.&lt;/p&gt;

CVE-2023-21563 [@cve-2023-21563] -- the BitLocker Security Feature Bypass that the offensive-security community calls &quot;Bitpixie&quot; -- is a useful reminder that breaking BitLocker does not require breaking the TPM. The NVD entry reads simply &quot;BitLocker Security Feature Bypass Vulnerability,&quot; and the bypass operates against the boot path that consumes the unsealed VMK, not against the chip that sealed it. (NVD does not use the &quot;Bitpixie&quot; name; it is community-known-as.)
&lt;h3&gt;7.3 Once a key is unsealed, it lives in the OS&apos;s address space&lt;/h3&gt;
&lt;p&gt;A runtime-compromised OS reads any key the TPM has unsealed for it. The TPM defends against the &lt;em&gt;offline&lt;/em&gt; attacker (disk theft, post-shutdown tamper) and the &lt;em&gt;pre-OS&lt;/em&gt; attacker (boot-time integrity violation that fails the unseal). It does not defend against a privileged runtime attacker. This is a general impossibility, not a TPM weakness; no passive cryptoprocessor can decide whether the OS asking to unseal a key is itself trustworthy at the moment it asks.&lt;/p&gt;
&lt;p&gt;This is why VBS, Credential Guard, and DRTM exist as separate disciplines: they answer &quot;what protects the unsealed key once it is in RAM?&quot; by isolating the key inside a VTL1 enclave or by re-measuring the OS after launch. The TPM is a participant; it is not the answer.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; The TPM defends against the offline attacker and the pre-OS attacker. It does not defend against a runtime-compromised OS. This is by design, and is the most a passive cryptoprocessor can do. Stronger guarantees require an active component (DRTM, VBS, hypervisor isolation) -- and none of those are the TPM.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What would an &lt;em&gt;ideal&lt;/em&gt; TPM look like? On-die (no bus), in an isolated TEE shared with nothing else, with the host-firmware-update path replaced by an OS-channel update path, with high-assurance certification depth, with an authenticated wire protocol always on, and with native support for post-quantum primitives. &lt;em&gt;No shipping TPM today satisfies all six properties.&lt;/em&gt; Pluton plus future PQC firmware updates is the closest existing trajectory; it is on-die, isolated, OS-channel-updated, and Rust-implemented, but it does not yet expose PQC primitives and its certification depth is still evolving.&lt;/p&gt;
&lt;p&gt;If the TPM cannot defeat a runtime-compromised OS by design, and the best fTPM can be extracted in three hours, where is the security frontier actually moving?&lt;/p&gt;
&lt;h2&gt;8. Open problems: PQC, supply chain, and trust centralization&lt;/h2&gt;
&lt;p&gt;On August 13, 2024, NIST finalized FIPS 203 (ML-KEM) [@nist-fips-203-mlkem], FIPS 204 (ML-DSA) [@nist-fips-204-mldsa], and FIPS 205 (SLH-DSA) [@nist-fips-205-slhdsa] -- the first federal post-quantum cryptography standards. ML-DSA-87&apos;s public keys are 2,592 bytes. A typical TPM has 6 to 32 KiB of NV memory total. The math gets uncomfortable quickly.&lt;/p&gt;
&lt;h3&gt;8.1 Post-quantum migration&lt;/h3&gt;
&lt;p&gt;The NIST Post-Quantum Cryptography project page [@nist-pqc-project] describes the timeline: &quot;In August 2024, NIST released its principal PQC standards ... Under the transition timeline in NIST IR 8547, NIST will deprecate and ultimately remove quantum-vulnerable algorithms from its standards by 2035, with high-risk systems transitioning much earlier.&quot; That is the deadline driving every TPM roadmap, and the August 14, 2024 Federal Register notice [@federal-register-2024-fips-pqc] made it formal U.S. policy.&lt;/p&gt;
&lt;p&gt;Three concrete obstacles. &lt;strong&gt;First&lt;/strong&gt;, the TCG algorithm registry has not yet normatively added ML-KEM, ML-DSA, or SLH-DSA; a TCG PQC working group exists, but its output is in flight. The Microsoft TPM 2.0 reference code [@ms-tpm-20-ref-releases] tracks TCG: the V1.83 release notes describe it as &quot;the first revision in sync with Trusted Computing Group 1.83,&quot; and that revision still does not expose PQC algorithm IDs. The Fraunhofer SIT Post-Quantum Cryptography for TPM [@fraunhofer-pqc-tpm] programme has prototyped PQC primitives inside reference TPM stacks, but those changes are research artefacts, not normative TCG output.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Second&lt;/strong&gt;, the constrained NV-memory budget on a typical TPM cannot hold many simultaneous PQC keys at the larger parameter sets. Quick arithmetic against ML-DSA-87 (FIPS 204): 2,592-byte public key plus 4,896-byte private key plus protocol overhead pushes a single persistent key blob past 7.5 KiB. A 16-KiB-NV TPM can hold at most two persistent ML-DSA-87 slots before exhausting NV. The larger SLH-DSA-256s signatures (29,792 bytes per FIPS 205 Table 2) [@nist-fips-205-slhdsa] routinely exceed the typical 1-4 KiB response-buffer cap (&lt;code&gt;TPM_PT_MAX_RESPONSE_SIZE&lt;/code&gt; in the PC Client Platform TPM Profile [@tcg-pc-client-ptp-spec]); the related &lt;code&gt;TPM_PT_NV_BUFFER_MAX&lt;/code&gt; (the maximum NV read/write chunk) is in the same order of magnitude and complicates persistent-storage cases as well. The chip cannot return such a signature in a single command without fragmentation extensions. PQC support on commodity TPMs is not just a software upgrade; it is an NV-budget renegotiation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Third&lt;/strong&gt;, hybrid signing schemes (composite RSA + ML-DSA, or ECDSA + ML-DSA) are well-defined for transitional certificates. The IETF LAMPS WG draft on composite ML-DSA signatures [@ietf-lamps-pq-composite-sigs] specifies &quot;combinations of US NIST Module-Lattice-Based Digital Signature Algorithm (ML-DSA) in hybrid with traditional algorithms RSASSA-PKCS1-v1.5, RSASSA-PSS, ECDSA, Ed25519, and Ed448&quot; for X.509 PKIX. The TLS hybrid key-exchange draft [@ietf-tls-hybrid-design] does the same for TLS 1.3 handshakes. Neither defines a hybrid &lt;code&gt;TPM2_Sign&lt;/code&gt; profile, and no shipping Windows TPM exposes one.&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s Quantum Safe Security blog (August 2025) [@ms-quantum-safe-2025] describes the broader effort -- &quot;Our PQC effort began in 2014 when we published research on post-quantum algorithms ... We participated in four submissions to the original 2017 NIST PQC call and one submission to the current call&quot; -- but is silent on Pluton-firmware PQC support specifically.&lt;/p&gt;
&lt;p&gt;The architectural punchline: Pluton&apos;s Windows-Update firmware delivery channel is the only realization that can plausibly add a PQC primitive across the deployed fleet without a hardware refresh. Every other realization will need new silicon to ship native PQC.&lt;/p&gt;
&lt;h3&gt;8.2 The supply-chain trust of EK certificates&lt;/h3&gt;
&lt;p&gt;The Microsoft TPM key attestation documentation [@ms-learn-tpm-key-attestation] describes the trust-chain assumption plainly: the requestor proves &quot;to a CA that the RSA key in the certificate request is protected by either &apos;a&apos; or &apos;the&apos; TPM that the CA trusts.&quot; That trust is anchored on the EK certificate the chip&apos;s vendor issued at manufacture. A vendor-CA compromise therefore equals collapse of TPM-bound device identity for an entire OEM cohort.&lt;/p&gt;
&lt;p&gt;The 2017 ROCA incident is the canonical event for why this matters. In February 2017, Matúš Nemec, Marek Sýs, Petr Švenda, Dušan Klinec, and Vashek Matyáš at Masaryk University [@crocs-muni-roca] disclosed to Infineon a flaw in its RSA key-generation library that drastically reduced the entropy of generated keys and made factoring tractable. The NVD entry for CVE-2017-15361 [@cve-2017-15361] is precise about scope: &quot;The Infineon RSA library 1.02.013 in Infineon Trusted Platform Module (TPM) firmware ... mishandles RSA key generation, which makes it easier for attackers to defeat various cryptographic protection mechanisms via targeted attacks, aka ROCA. Examples of affected technologies include BitLocker with TPM 1.2, YubiKey 4 (before 4.3.5) PGP key generation, and the Cached User Data encryption feature in Chrome OS.&quot; The Wikipedia summary [@wikipedia-roca] reports the team&apos;s own estimate that the bug &quot;affected around one-quarter of all current TPM devices globally.&quot;&lt;/p&gt;
&lt;p&gt;The Estonian e-ID program -- about 750,000 cards issued since 2014 [@arstechnica-2017-roca-estonia], all using the affected Infineon chip -- had to be re-enrolled. Microsoft published advisory ADV170012 [@msrc-adv170012] on the same coordinated disclosure date. There is still no scalable revocation mechanism for individual EK certificates: vendor-level revocation breaks every device whose EKpub was issued by that vendor&apos;s CA, and ADCS-template OEM-pinning limits scope but does not solve in-scope CA compromise. Pluton centralizes one part of trust (Microsoft as firmware signer); EK certificate issuance for the silicon is unchanged, and supply-chain integrity remains a per-vendor question.&lt;/p&gt;
&lt;h3&gt;8.3 Attestation freshness in zero-trust networks&lt;/h3&gt;
&lt;p&gt;A TPM Quote proves &quot;this device booted clean,&quot; not &quot;this device is currently clean.&quot; Microsoft Intune&apos;s default device-compliance check-in is on the order of hours; Microsoft Entra&apos;s Continuous Access Evaluation documentation [@ms-learn-cae] specifies the upper-bound numerics: &quot;By default, access tokens are valid for one hour ... The goal for critical event evaluation is for response to be near real time, but latency of up to 15 minutes might be observed because of event propagation time.&quot;&lt;/p&gt;
&lt;p&gt;A 15-minute revocation window for critical events is good. But it propagates &lt;em&gt;signed&lt;/em&gt; policy decisions, not fresh TPM measurements. A device that was clean at boot, was compromised five minutes ago, and just made a request now will pass CAE if its existing access token is valid. Closing that window requires either much shorter token lifetimes, runtime attestation (TCG DICE, Project Cerberus), or a hypervisor-mediated re-measurement -- and none of them are the TPM.&lt;/p&gt;
&lt;p&gt;DPAPI-NG, the CNG-layer successor to classic DPAPI that Windows uses to encrypt secrets to a set of authorization principals, is a useful test case. The DPAPI-NG documentation [@ms-learn-cng-dpapi] describes the API as &quot;secure[ly] shar[ing] secrets (keys, passwords, key material) and messages by protecting them to a set of principals.&quot; The protection-descriptor grammar [@ms-learn-protection-descriptors] permits five descriptor keywords -- &lt;code&gt;SID&lt;/code&gt;, &lt;code&gt;SDDL&lt;/code&gt;, &lt;code&gt;LOCAL&lt;/code&gt;, &lt;code&gt;WEBCREDENTIALS&lt;/code&gt;, &lt;code&gt;CERTIFICATE&lt;/code&gt; -- across three logical authorization classes (AD-forest groups, web credentials, certificate-store entries). Notably absent: any literal &lt;code&gt;TPM=true&lt;/code&gt; clause. DPAPI-NG can be backed by a TPM-bound CNG key, but the &lt;em&gt;authorization&lt;/em&gt; is expressed in principal terms, not in TPM terms. The TPM is a key-residence property, not a policy primitive at this layer -- the right architectural choice, but it means TPM-bound DPAPI-NG inherits the freshness limits of whatever principal authorization decides who is currently authorized.&lt;/p&gt;
&lt;h3&gt;8.4 The Pluton political question&lt;/h3&gt;
&lt;p&gt;Centralizing firmware on a single Microsoft signing key is a deliberate trade-off, not an oversight. The benefit is the patch path: a Pluton firmware vulnerability becomes a Windows Update release rather than a multi-quarter OEM capsule rollout. The cost is that the chip&apos;s trust anchor is now a Microsoft signing key, in a way that even the most conservative dTPM is not. The market response in 2022 was openly mixed.&lt;/p&gt;
&lt;p&gt;In March 2022, The Register obtained vendor statements [@register-2022-pluton] from Dell, Lenovo, and HP. Dell&apos;s reply was unusually direct: &quot;Pluton does not align with Dell&apos;s approach to hardware security and our most secure commercial PC requirements.&quot; Lenovo deployed the chip but disabled it: &quot;[ThinkPads] will not support Microsoft Pluton at launch ... But ThinkPads introduced in January with AMD Ryzen 6000 processors will include Pluton as it&apos;s present in those AMD chips, though the feature will be disabled by default. AMD has provided an option for users to turn the feature on and off.&quot; PCWorld followed up [@pcworld-2022-pluton] with Lenovo&apos;s articulated reasoning: &quot;Pluton is disabled by default on 2022 Lenovo ThinkPad laptops using AMD Ryzen PRO 6000 Series processors because that&apos;s what Lenovo customers have asked for, the choice to enable or not.&quot;&lt;/p&gt;
&lt;p&gt;Matthew Garrett -- who later contributed the upstream Linux kernel support for the Pluton TPM CRB interface in Linux 6.3 (merged February 2023, released April 2023) [@phoronix-2023-pluton-linux63] -- published the closest thing to a public engineering analysis of Pluton&apos;s controllability. His April 2022 reverse-engineering write-up [@garrett-2022-pluton-rev] of the ASUS ROG Zephyrus G14 BIOS documents two firmware-level disable mechanisms on AMD Ryzen 6000 platforms: an x86-firmware &quot;do not communicate&quot; toggle, and a PSP directory entry 0xB BIT36 soft-fuse that &quot;will NOT put HSP hardware in disable state, to disable HSP hardware, you need setup PSP directory entry 0xB, BIT36 to 1.&quot; Garrett&apos;s caveat is honest: &quot;My interpretation of this is that it doesn&apos;t directly influence Pluton, but disables all mechanisms that would allow the OS to communicate with it.&quot; It is not a multi-signer proposal. There is no public peer-reviewed proposal for multi-signer or open-source Pluton firmware.&lt;/p&gt;
&lt;p&gt;The unresolved engineering question: whether a multi-signer model is feasible without losing the timely-update property that motivated Pluton in the first place. The answer is genuinely unknown. The political question -- whether one signing key on the world&apos;s PC fleet is the right cost for the Windows-Update patch latency it enables -- is no longer a technical argument. It is a procurement-policy and procurement-jurisdiction argument, and high-assurance fleets are deciding both ways.&lt;/p&gt;
&lt;p&gt;The TPM was supposed to be the part of the system you didn&apos;t have to trust anyone for. Twenty-five years later, the trust question is back -- and the answer is now political.&lt;/p&gt;
&lt;h2&gt;9. A Windows practitioner&apos;s TPM reference&lt;/h2&gt;
&lt;p&gt;What does this mean for the engineer running &lt;code&gt;Get-Tpm&lt;/code&gt; on Monday morning? Three concrete things: discovery, choosing a form factor, and avoiding the pitfalls.&lt;/p&gt;
&lt;h3&gt;9.1 Discovery&lt;/h3&gt;
&lt;p&gt;Three commands establish ground truth on any Windows 11 device. &lt;code&gt;Get-Tpm&lt;/code&gt; returns presence, ownership, and command-availability state. &lt;code&gt;Get-TpmEndorsementKeyInfo&lt;/code&gt; returns the EK public and certificate. &lt;code&gt;tpm.msc&lt;/code&gt; opens the Microsoft Management Console snap-in. The TCG event log lives at &lt;code&gt;C:\Windows\Logs\MeasuredBoot\*.log&lt;/code&gt; and contains the per-PCR measurement history for every boot. Microsoft&apos;s BitLocker page [@ms-learn-bitlocker] documents the protector model that pairs with the TPM state.&lt;/p&gt;
&lt;p&gt;{`
// Demonstrates the logic of:
//   Get-Tpm
//   (Get-BitLockerVolume -MountPoint &apos;C:&apos;).KeyProtector
//
// Mirrors the PowerShell decision tree without requiring a real TPM.&lt;/p&gt;
&lt;p&gt;const tpm = {
  TpmPresent: true,
  TpmReady: true,
  ManufacturerVersion: &apos;7.2.0.1&apos;,
  PhysicalPresenceVersionInfo: &apos;1.3&apos;,
};&lt;/p&gt;
&lt;p&gt;// Sample KeyProtector list as PowerShell would return it.
const protectors = [
  { KeyProtectorType: &apos;Tpm&apos; },
  { KeyProtectorType: &apos;RecoveryPassword&apos; },
  // Uncomment to model TPM+PIN:
  // { KeyProtectorType: &apos;TpmPin&apos; },
];&lt;/p&gt;
&lt;p&gt;function classify(tpm, protectors) {
  if (!tpm.TpmPresent) return &apos;no-tpm&apos;;
  if (!tpm.TpmReady) return &apos;tpm-not-ready&apos;;&lt;/p&gt;
&lt;p&gt;  const types = protectors.map(p =&amp;gt; p.KeyProtectorType);
  const hasPin = types.includes(&apos;TpmPin&apos;) || types.includes(&apos;TpmPinStartupKey&apos;);
  const hasStartupKey = types.includes(&apos;TpmStartupKey&apos;);
  const hasRecovery = types.includes(&apos;RecoveryPassword&apos;);&lt;/p&gt;
&lt;p&gt;  if (hasPin) return &apos;tpm-plus-pin&apos;;
  if (hasStartupKey) return &apos;tpm-plus-startup-key&apos;;
  if (types.includes(&apos;Tpm&apos;)) return &apos;tpm-only&apos;;
  return &apos;no-tpm-protector&apos;;
}&lt;/p&gt;
&lt;p&gt;const verdict = classify(tpm, protectors);
console.log(&apos;TPM present:&apos;, tpm.TpmPresent);
console.log(&apos;TPM ready  :&apos;, tpm.TpmReady);
console.log(&apos;Configuration:&apos;, verdict);
if (verdict === &apos;tpm-only&apos;) {
  console.log(&apos;WARN: TPM-only is vulnerable to bus-sniffing on dTPM.&apos;);
  console.log(&apos;Mitigation: enable TPM+PIN with PIN length &amp;gt;= 8.&apos;);
}
console.log(&apos;Recovery key escrowed:&apos;, protectors.some(p =&amp;gt; p.KeyProtectorType === &apos;RecoveryPassword&apos;));
`}&lt;/p&gt;
&lt;h3&gt;9.2 Choosing a TPM form when the OEM gives you a choice&lt;/h3&gt;
&lt;p&gt;A short decision tree, distilled from the SOTA analysis above:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Opportunistic theft, low-skill attacker.&lt;/strong&gt; Default TPM-only is acceptable but not ideal. TPM+PIN with at least 8 random digits closes the bus-sniffing window on dTPM and the low-PIN-entropy window on AMD fTPM.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Determined targeted adversary.&lt;/strong&gt; TPM+PIN is necessary but not sufficient. Add FIDO2 or smart-card preboot authentication where supported, and prefer Pluton or hardened dTPM over commodity AMD fTPM for the device class.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compliance-driven.&lt;/strong&gt; Discrete TPM with EAL4+ / FIPS 140-2 certification is still the easiest procurement story. Verify the OEM has not enabled &lt;code&gt;Pluton-as-TPM&lt;/code&gt; if the auditor&apos;s checklist requires a discrete chip.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud workload.&lt;/strong&gt; Azure Trusted Launch with vTPM [@ms-learn-azure-trusted-launch] is the default for Gen2 VMs and underwrites Confidential VM offerings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Surface Copilot+, AMD Ryzen 6000+, Intel Core Ultra 200V, Snapdragon X.&lt;/strong&gt; Pluton-as-TPM [@ms-learn-pluton] is the OEM default in many SKUs; verify the Pluton firmware is current via Windows Update.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9.3 Five common pitfalls&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Clearing the TPM invalidates BitLocker recovery on every TPM-bound protector. Always verify recovery key escrow first -- in Microsoft Entra ID for Azure-AD-joined devices, in Active Directory for AD-joined devices, or in a printed/saved location for personal devices. If the recovery key is unescrowed and the TPM is cleared, the volume is unrecoverable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The other four pitfalls in brief: firmware updates change PCR[0] and PCR[7], so suspend BitLocker before applying them; dual-boot Linux extends PCRs differently than Windows, so PCR-only sealing breaks under it -- escape with TPM+PIN; Windows does not enable parameter encryption on the BitLocker boot path, so the actual mitigation against dTPM bus sniffing is preboot authentication, not &quot;TPM hardening&quot;; and Windows Hello silently falls back to no-TPM credential storage if the TPM is unhealthy, so periodically check &lt;code&gt;Get-Tpm&lt;/code&gt; on enrolled devices.&quot;Anti-hammering&quot; is the persistent rate-limit counter the TPM enforces against authValue and policy-PIN failures. It survives reboots and only resets after a long lockout period.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The Group Policy setting &quot;Require additional authentication at startup&quot; with a minimum PIN length of 8 buys you the most security against published attacks for the least operational cost. It defeats Andzakovic-style bus sniffing (the VMK is no longer the only secret on the bus) and forces an attacker on AMD fTPM to either compromise the TPM state out-of-band or guess the PIN against anti-hammering. The exception is a fully-extracted AMD fTPM where faulTPM has already obtained the unsealed material -- in that case the PIN is bypassed.&lt;/p&gt;
&lt;/blockquote&gt;

From an elevated PowerShell prompt:&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;Suspend-BitLocker -MountPoint &quot;C:&quot; -RebootCount 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;RebootCount 1&lt;/code&gt; argument auto-resumes after the next reboot, which is what you want when the firmware update reboots the device. After the update completes, run &lt;code&gt;Get-BitLockerVolume -MountPoint C:&lt;/code&gt; and confirm &lt;code&gt;ProtectionStatus&lt;/code&gt; is &lt;code&gt;On&lt;/code&gt; again. If you forget, the next boot will land on the BitLocker recovery prompt because PCR[0] no longer matches the sealed policy.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The TPM does exactly what it was designed to do, no more. Which is exactly enough -- if you understand what &quot;exactly&quot; means.&lt;/p&gt;
&lt;h2&gt;10. FAQ and closing&lt;/h2&gt;
&lt;p&gt;A handful of questions get asked again and again about the TPM. The answers do not always match the marketing.&lt;/p&gt;

No. TPM keys are non-exportable and held inside the chip; the Microsoft documentation [@ms-learn-how-windows-uses-tpm] is explicit that &quot;if a key stored in a TPM has properties that disallow exporting the key, that key truly can&apos;t leave the TPM.&quot; The Endorsement Key is a privacy concern (it uniquely identifies the chip) but it is not a Microsoft backdoor. Pluton centralizes firmware *signing*, not key access -- Microsoft signs the firmware that runs on Pluton, but the keys Pluton creates and seals stay inside Pluton.

Depends on threat model. Against software attackers, fTPM is sufficient -- the no-bus property defeats the cheap LPC/SPI sniffing class. Against well-funded physical attackers, fTPM is weaker than dTPM: TPM-Fail [@tpmfail-microsite] showed timing-side-channel ECDSA key recovery on Intel PTT, and faulTPM [@jacob-2023-faultpm] showed 2-3 hour state extraction on AMD PSP. Pluton sits between the two with a smaller TEE surface but less public scrutiny.

Yes -- Microsoft mandates it. The OEM mandate has been in force since July 28, 2016 [@ms-learn-oem-tpm]; the consumer mandate became visible on June 24, 2021 with the Windows 11 announcement. The defensive primitives the TPM underwrites -- BitLocker, Credential Guard, Windows Hello, Device Health Attestation [@ms-learn-azure-measured-boot] -- are real, measurable, and not realistically replaceable by software-only equivalents.

Practically no for dTPM and Pluton; the EK private key never leaves the chip, and replicating it would require silicon-level extraction that no public attack has achieved. faulTPM [@jacob-2023-faultpm] proved that AMD fTPM internal state can be *extracted* in 2-3 hours of physical access; that is closer to &quot;extracted&quot; than &quot;cloned&quot; but the practical effect is the same for keys the chip held.

Because ransomware operates after the OS has loaded -- by definition outside the TPM&apos;s threat model. The TPM secures keys at rest and attests boot integrity. It does not run anti-malware, sign user files, or detect runtime compromise. Microsoft&apos;s BitLocker countermeasures page [@ms-learn-bitlocker-countermeasures] is explicit that BitLocker is a data-protection feature, not an anti-malware feature; the same logic applies to the TPM that underwrites it.

Pluton implements TPM 2.0 plus Microsoft-specific extensions. From Windows&apos;s perspective it *is* a TPM with a different update story (Windows Update instead of UEFI capsule) and a different trust anchor (Microsoft as firmware signer). Whether the OEM exposes Pluton &quot;as the TPM&quot; or alongside a discrete TPM is an OEM choice [@ms-learn-pluton-as-tpm].
&lt;p&gt;Return to June 24, 2021. The PR backlash about a Trusted Platform Module made the chip visible for the first time to a consumer audience that had owned one for a decade. The technical rationale Microsoft gave was four words long; the actual rationale is the rest of this article.&lt;/p&gt;
&lt;p&gt;A passive cryptoprocessor designed in 1999 quietly became the load-bearing pillar of half of Windows security. Twenty-five years of engineering refined a single primitive -- measure, extend, seal, quote -- into something one chip could underwrite. Twenty-five years of attacks, from a $40 FPGA on an LPC bus to a voltage glitch against the AMD PSP, argued empirically about how passive that chip can be allowed to be. The current state of the art is on the CPU die, in Rust, signed by Microsoft, patched through Windows Update -- and post-quantum migration is the next argument.&lt;/p&gt;
&lt;p&gt;The TPM is not a checkbox. It is the point at which Windows decided integrity must be measurable. It is not a panacea -- the runtime-compromised OS still wins once the key is unsealed -- but it is a primitive, with a clean boundary. Now you know what it can prove, and what it cannot. The chip is the cheapest part of the system. The cost was twenty-five years of getting it right.&lt;/p&gt;
&lt;p&gt;&amp;lt;StudyGuide slug=&quot;tpm-in-windows&quot; keyTerms={[
  { term: &quot;TPM (Trusted Platform Module)&quot;, definition: &quot;A passive cryptoprocessor on a separate chip or block of silicon that holds keys and records integrity measurements.&quot; },
  { term: &quot;PCR (Platform Configuration Register)&quot;, definition: &quot;A TPM register modified only by one-way extend operations, which fold a measurement into the running hash.&quot; },
  { term: &quot;Sealing&quot;, definition: &quot;Encrypting a blob under the TPM with a policy that names a specific PCR state; unseal succeeds only when the live PCRs match.&quot; },
  { term: &quot;Quote&quot;, definition: &quot;A TPM-signed snapshot of selected PCRs, used by remote verifiers in attestation.&quot; },
  { term: &quot;Endorsement Key (EK)&quot;, definition: &quot;The TPM&apos;s permanent identity key, generated at manufacture and certified by the chip vendor&apos;s CA.&quot; },
  { term: &quot;Enhanced Authorization&quot;, definition: &quot;TPM 2.0&apos;s policy-session mechanism, which lets a callable&apos;s authorization rule be an arbitrary composition of PCR, signed, and command-code predicates.&quot; },
  { term: &quot;Algorithm agility&quot;, definition: &quot;The architectural property of TPM 2.0 that decouples cryptographic algorithms from data-structure layout, allowing new algorithms to be added by registering an identifier rather than re-laying out the spec.&quot; },
  { term: &quot;fTPM (firmware TPM)&quot;, definition: &quot;A TPM 2.0 implementation running inside an existing TEE: Intel CSME (PTT), AMD PSP, or Microsoft Pluton.&quot; },
  { term: &quot;DRTM (Dynamic Root of Trust for Measurement)&quot;, definition: &quot;A late-launch boot mechanism (Intel TXT, AMD SVM-SKINIT, System Guard Secure Launch) that re-establishes a known good measurement chain after the OS has started, complementing the TPM&apos;s static RTM.&quot; },
  { term: &quot;Anti-hammering&quot;, definition: &quot;A persistent TPM-enforced rate-limit counter against repeated authValue or PIN failures; survives reboots and forces lockout after a configurable threshold.&quot; }
]} /&amp;gt;&lt;/p&gt;
</content:encoded><category>tpm</category><category>windows-security</category><category>bitlocker</category><category>pluton</category><category>hardware-security</category><category>measured-boot</category><category>post-quantum-cryptography</category><author>noreply@paragmali.com (Parag Mali)</author></item></channel></rss>