TL

TPM の原理(測定ブート・PCR・封印と Attestation)

なぜディスク暗号鍵を改ざんされた OS に渡さずに済むのか。測定ブート・PCR・シーリング・リモート構成証明を原理から押さえれば、信頼の起点をハードウェアに根づかせる設計が読み解けるようになる。

応用TPM測定ブートAttestationハードウェアセキュリティ信頼の起点最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.TPM は PCR(一方向に積み上がるハッシュレジスタ)にブートの各段階を「測定」して記録します。値を任意に書き換える命令はなく、PCR_new = Hash(PCR_old || 測定値) という extend のみで、改ざんは必ず痕跡を残します。
  • 2.シーリングは秘密(ディスク暗号鍵など)を「特定の PCR 値」に束縛します。封印時と PCR が一致しなければ TPM はアンシール(復号)を拒否するため、改ざんされた状態では鍵を取り出せません。
  • 3.リモート構成証明は PCR の集合に AK(構成証明鍵)で署名した Quote を検証者へ送る仕組み。EK 証明書で「本物の TPM」を、Quote の nonce で「リプレイでない今の状態」を保証します。

TPM が解く問題:信頼の起点をどこに置くか

ソフトウェアだけで「この OS は改ざんされていない」と証明しようとすると、循環に陥ります。検証するコード自身が改ざんされていれば、どんなチェックも嘘をつけるからです。この鶏と卵を断ち切るには、ソフトウェアの外側に書き換えられない測定者を置くしかありません。それが TPM(Trusted Platform Module)の役割です。

TPM は専用チップ(ディスクリート TPM)、あるいは CPU のセキュアモード内のファームウェア(fTPM)として実装される暗号コプロセッサです。本質は「鍵を外に出さずに使う隔離された金庫」と「ブート過程を記録する改ざん不能なログ台帳」の二つで、これらが組み合わさって**信頼の起点(Root of Trust)**になります。鍵を持ち出せないという性質は シークレット管理 の原則をハードウェアで強制したものと言えます。

TPM は能動的に何かを止めるわけではない

TPM 自体はブートを中断したり実行を拒否したりしません。あくまで「測定し、記録し、束縛し、署名する」受動的な部品です。改ざんへの対処(鍵を渡さない、起動を止める)は、TPM の出した値を使う側(ブートローダー、OS、検証サーバー)が決めます。これを混同すると Secure Boot との役割分担を誤解します。

PCR:一方向に積み上がる測定レジスタ

TPM の心臓部が **PCR(Platform Configuration Register)**です。各 PCR はハッシュ長(SHA-256 なら 32 バイト)のレジスタで、TPM 2.0 では 24 本程度を備えます。決定的なのは、PCR に任意の値を直接書き込む命令が存在しないことです。許されるのは extend という一つの操作だけで、

PCR_new = Hash( PCR_old || 測定値 )

と、現在値に新しい測定値を連結してハッシュし、結果で上書きします。電源投入時は全 PCR がゼロ(または既知の初期値)にリセットされ、そこから測定が一つずつ積み上がります。

この設計の核心は一方向性と順序依存性です。ハッシュの原像計算困難性(ハッシュの構成 参照)により、目的の PCR 値を作る測定値の列を逆算できません。さらに A を測定してから B を測定した結果と、B のあと A を測定した結果は別物になります。つまり PCR の最終値は「何を、どの順で実行したか」の暗号学的な要約であり、途中に悪意あるコードが一段でも挟まれば、最終値は必ず期待値からずれます。攻撃者が後から「正しい値」へ戻すことはできません。

PCR には用途の慣例があります。PCR[0] から PCR[7] がファームウェア・ブートローダーなど起動時の測定、PCR[8] 以降を OS(Linux の IMA など)が利用、という割り当てです。

測定ブート:信頼の連鎖をどう繋ぐか

PCR が積み上がるためには、誰かが各段階のコードを測定して extend を呼ばねばなりません。ここで効くのが**信頼の連鎖(chain of trust)**です。

起点は CRTM(Core Root of Trust for Measurement)、書き換え困難なブート ROM の最初の数命令です。CRTM は「次に実行するコード(ファームウェア本体)を、実行する前にハッシュして PCR へ extend する」。そのファームウェアは「次のブートローダーを、実行前に測定して extend する」。ブートローダーは「カーネルとその初期 RAM ディスクを測定して extend する」——と、各段が次段を実行前に測定してからジャンプするバケツリレーで連鎖します。

CRTM ─測定→ ファームウェア ─測定→ ブートローダー ─測定→ カーネル ─測定→ …
  │            │                  │                  │
  └ extend ────┴ extend ──────────┴ extend ──────────┴ extend → PCR

ポイントは「測定してから制御を渡す」順序です。先に測定するからこそ、悪意あるコードは自分が PCR に記録されるのを避けられません。記録を消そうにも、後続のコードはすでに測定済みの PCR の上にしか積めない(extend は不可逆)。結果として PCR の最終値は、起動に関与した全コードの正直な要約になります。

測定ブートと Secure Boot は別物

Secure Boot は各段の署名を検証し、不正なら起動を止める強制の仕組みです。一方、測定ブートはただ記録するだけで止めません。Secure Boot は「許可リストにある物しか動かさない」、測定ブートは「動いた物を全部記録し、後で封印や構成証明で使う」。両者は補完関係で、UEFI 環境では併用されます。改ざんを「予防」するのが Secure Boot、「事後に検知・束縛」するのが測定ブートです。

鍵階層:EK と SRK の役割分担

TPM は秘密を外に出さずに鍵を扱うため、階層化された鍵構造を持ちます。TPM 2.0 では鍵はプライマリシードから決定的に導出され、シードごとに用途の異なる三つの階層(hierarchy)——Endorsement / Storage / Platform——に分かれます。

由来役割外部に出るか
EK(Endorsement Key)Endorsement 階層シードから導出。製造時に固有TPM の「身元」。製造元が EK 証明書を発行し本物であることを保証公開鍵のみ。秘密鍵は永久に内部
SRK(Storage Root Key)Storage 階層シードから導出他の鍵やデータを暗号化して外部保存する際の親鍵公開鍵のみ。秘密鍵は内部
AK(Attestation Key)Endorsement 階層配下で生成Quote(PCR)への署名専用。EK の代理で身元を表す公開鍵のみ。秘密鍵は内部

EK は TPM ごとに固有で、製造元が発行する EK 証明書PKI の証明書チェーンで検証可能)が「これは正規の TPM である」ことを保証します。ただし EK はプライバシー上の理由から直接の署名には使わず、署名には別途生成する AK を用います。EK と AK の結びつきは、EK で暗号化したチャレンジを TPM 内で復号できるかで証明します(後述)。

SRK は階層の根となる親鍵で、TPM の不揮発メモリは小さいため、ユーザーの鍵やシール済みデータは SRK 配下の鍵で暗号化して外部ストレージに退避します。必要時に TPM へ読み込み、内部で復号して使います。秘密鍵が平文で外に出ることは一切ありません。

なぜ EK で署名しないのか

EK は TPM 一つに一つの固有鍵なので、もし EK で何にでも署名すると、複数のサービスにまたがってその TPM(=その端末)を一意に追跡できてしまいます。そこで用途ごとに使い捨ての AK を作り、EK は「AK が本物の TPM の中で作られた」ことを一度だけ証明する身元保証に限定します。初期の TPM 1.2 ではこの仲介を Privacy CA が担い、TPM 2.0 では ActivateCredential プロトコルで実現します。

シーリング:状態に秘密を束縛する

TPM の応用で最も実用的なのが**シーリング(封印)**です。これは秘密データ(典型的にはディスク暗号化の鍵)を、SRK 配下の鍵で暗号化する際に、特定の PCR 値という条件を付ける操作です。

封印時、TPM は「アンシール(復号)を許す条件=指定した PCR が指定の値であること」をデータに紐づけます。後で Unseal が呼ばれると、TPM はそのときの実際の PCR 値が封印時の条件と一致するかを内部で照合し、一致した場合のみ復号して秘密を返します。一致しなければエラーを返し、秘密は決して出てきません。

これが強力なのは、改ざんされた状態では原理的に鍵を取り出せないからです。攻撃者がブートローダーやカーネルを書き換えると、測定ブートにより extend の入力が変わり、PCR の最終値が封印時と一致しなくなります。すると Unseal は失敗し、ディスク暗号鍵は得られません。攻撃者は「正しい PCR を偽装する」ことも、extend の一方向性のためにできません。Windows の BitLocker や Linux の LUKS + clevis/systemd-cryptenroll が、まさにこの仕組みで「健全なブート時のみ自動でディスクを解錠する」を実現しています。

PCR 選びとブリトル問題

シーリングは「どの PCR に束縛するか」が設計の肝です。ファームウェアやブートローダーを含む PCR に束縛すると、正規の OS アップデートや BIOS 更新でも PCR が変わり、鍵が取り出せなくなる(=正規ユーザーが締め出される)「ブリトル(脆い束縛)」が起きます。実運用では、束縛先を必要最小限の PCR に絞る、更新前に再封印する、あるいは PCR 値そのものではなく **TPM 内の認可ポリシーに署名した公開鍵(Authorized Policy)**へ束縛し、ベンダーが署名した新しい期待値を許容できるようにします。

リモート構成証明:他者に状態を証明する

シーリングが「自分の中で状態を確認する」のに対し、**リモート構成証明(Remote Attestation)**は「離れた検証者に、自端末のブート状態を信頼できる形で証明する」仕組みです。ゼロトラスト環境で端末の健全性を判断する基盤になります(ゼロトラスト 参照)。

流れは次の通りです。

  1. チャレンジ: 検証者がランダムな nonce を端末へ送る。これがリプレイ攻撃(過去の正常な応答の使い回し)を防ぐ。
  2. Quote 生成: 端末は TPM に Quote を要求する。TPM は「指定された PCR の現在値の集合」と受け取った nonce をまとめ、AK の秘密鍵で署名する。署名は TPM 内部で行われ、AK 秘密鍵は外に出ない。
  3. 検証: 検証者は AK の公開鍵で署名を検証し(署名方式 の手順)、nonce が自分の送ったものと一致するか(=今この瞬間の応答か)、PCR 値が期待するゴールデン値と一致するか(=正しいソフトウェアで起動したか)を確認する。

ここで二つの保証が要ります。**「本物の TPM か」は AK が EK に紐づき、EK 証明書が製造元のチェーンで検証できることで担保します。「リプレイでない今の状態か」は nonce が Quote の署名対象に含まれることで担保します。さらに、PCR 値だけでは「何が起動したか」までは分からないため、端末は extend の入力履歴を記録したイベントログ(TCG ログ)**を Quote に添えます。検証者はログを頭から再生して PCR を計算し直し、その結果が署名済み PCR と一致することを確認することで、各段の正体まで監査できます。

試験・面接で問われる要点

PCR は「extend のみ・一方向・順序依存」、これが測定ブートの改ざん検知を成立させる根拠です。シーリングとアンシールは「PCR 一致が復号の条件」、改ざん時は鍵が出ない点を必ず説明できるように。リモート構成証明は「AK 署名の Quote + nonce + EK による TPM 身元保証+イベントログ照合」の四点セットが核心。EK と AK を分ける理由(プライバシーと追跡防止)、測定ブートと Secure Boot の違い(記録するだけ/止める)も頻出です。

まとめ

TPM は、ソフトウェアの外側に改ざん不能な測定者と鍵の金庫を置くことで「信頼の起点」を提供します。PCRextend(PCR_new = Hash(PCR_old || 測定値))だけで積み上がる一方向・順序依存のレジスタで、測定ブートは CRTM から各段が次段を実行前に測定する連鎖により、起動コード全体の正直な要約を PCR に刻みます。

鍵階層では、TPM 固有で身元を表す EK、外部退避用の親鍵 SRK、署名専用の AK が役割を分担し、秘密鍵は決して外に出ません。シーリングは秘密を特定の PCR 値に束縛し、改ざんされた状態ではアンシールを拒否することでディスク暗号鍵を守ります。リモート構成証明は AK 署名付き Quote と nonce、EK による TPM 身元保証、イベントログ照合により、離れた検証者へ起動状態を証明します。これらを土台に、端末の健全性を前提とする FIDO2/WebAuthn の認証器保護(FIDO2・WebAuthn)やゼロトラスト端末評価が成り立ちます。

セキュリティ Article

TPM の原理(測定ブート・PCR・封印と Attestation)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

TPM

比較で見る軸

難易度: advanced / カテゴリ: セキュリティ / タグ数: 5

導入後に効く点

シーリングは秘密(ディスク暗号鍵など)を「特定の PCR 値」に束縛します。封印時と PCR が一致しなければ TPM はアンシール(復号)を拒否するため、改ざんされた状態では鍵を取り出せません。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
セキュリティ
タグ数
5

判断チェックリスト

  • 自社の用途が「TPM / 測定ブート」に近いか確認する。
  • 強みである「TPM は PCR(一方向に積み上がるハッシュレジスタ)にブートの各段階を「測定」して記録します。値を任意に書き換える命令はなく、PCR_new = Hash(PCR_old || 測定値) という extend のみで、改ざんは必ず痕跡を残します。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

TPM測定ブートAttestationハードウェアセキュリティ信頼の起点TPM測定ブートAttestation
参考: 公式情報