<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Etminan Blog</title>
    <link>https://etminan.dev/blog/</link>
    <description>Engineering and design writing from the Etminan team — deep dives on offline TPM attestation, the trust model, and the decisions behind the system.</description>
    <language>en-us</language>
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" href="https://etminan.dev/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <!-- BLOG_ITEMS_INSERT_POINT: newest first — add new <item> blocks directly after this comment. -->

    <item>
      <title>Offline-verifiable TPM attestation for Linux — no cloud, no third-party registrar</title>
      <link>https://etminan.dev/blog/offline-tpm-attestation.html</link>
      <guid isPermaLink="true">https://etminan.dev/blog/offline-tpm-attestation.html</guid>
      <pubDate>Sat, 25 Jul 2026 00:00:00 +0000</pubDate>
      <description>On-box integrity checkers share a structural weakness: the checksum database and the alarm both live on the very host being watched, so a root compromise can suppress its own alarm. Etminan splits the job across two trust domains — an agent on the monitored host produces TPM-signed evidence (a quote over the IMA-backed PCR plus a fresh nonce) and a separate verifier replays the IMA log, recomputes the PCR, checks the signature, and is the only place an alarm can fire. The engineering punchline: the verifier needs no TPM of its own — quote verification is pure offline signature math, and a hand-rolled tpm_wire.rs removes the last libtss2 dependency, leaving a self-contained static Linux binary. The post covers why offline matters for NIS2 / air-gapped / OT deployments, why drift is proposed and never auto-accepted, a fair comparison with Keylime, and the threat model stated plainly (defends against remote/software root compromise; not physical attacks, below-TPM firmware, or a compromised hypervisor).</description>
    </item>

  </channel>
</rss>
