WindowsのTPMとは何か ── 図解でわかる「鍵を外に出さない金庫」と測定起動

· 更新日: · · TPM, Windows, BitLocker, セキュリティ, Windows 11, 情報システム, C#

「Windows 11にできないPCがあります。TPMがないと言われました」──ここ数年、法人のPC入れ替えの相談で必ず出てくる言葉です。「なんだかセキュリティのチップらしい」ところまでは知られているものの、それが何をしていて、なぜ必須なのか、そしてなぜBIOSを更新しただけでBitLockerの回復キーを聞かれるのかまで説明できる人は多くありません。

TPMは「暗号化を速くするチップ」ではありませんし、「ウイルスを防ぐチップ」でもありません。やっていることは、乱暴に言えば次の2つだけです。

  1. 秘密鍵を自分の中から出さないまま、使わせてくれる
  2. 起動時に何が読み込まれたかを記録し、その記録が期待どおりのときだけ鍵を出す

この2つが分かると、BitLocker、Windows Hello、Credential Guard、デバイスの正常性証明といったWindowsのセキュリティ機能が同じ土台の上に乗っていることも、実務で遭遇するトラブルの理由も、きれいに説明がつきます。

この記事では、TPMの仕組みを図で押さえたうえで、Windowsのどこで使われているのか、自分のPCの状態をどう確認するのか、回復キー画面やTPMクリアといった現場のトラブルをどう扱うのか、そして開発者が自分のアプリからTPMを使うにはどうするのかまでを、公式ドキュメントの裏付けつきで整理します。

1. まず結論

TPM(Trusted Platform Module)は、暗号鍵の生成・保管・利用を担うセキュリティ専用のプロセッサです。1 やっていることは、冒頭で挙げた2つに集約されます。

  • 秘密鍵をチップの外に出さないまま使わせる(金庫)。エクスポート不可と指定した鍵の秘密部分は、他のソフトウェア・プロセス・ユーザーに一切公開されません。2
  • 起動時に何が読み込まれたかを記録する(台帳)。ファームウェアやブートローダーは、次に実行するコードのハッシュをPCRという領域に記録してから制御を渡します。この記録が期待どおりのときだけ鍵を取り出せる「封印」ができ、BitLockerがその代表例です。32

この2つから、実務で効く結論が導けます。詳細は各章で説明します。

  • Windows HelloのPINが4桁でも安全に成立するのは、辞書攻撃対策(認証失敗32回でロックアウト)がハードウェア側にあるからです(2章)。2
  • Windows 11の最小要件は「UEFI、セキュアブート対応」のファームウェアとTPM 2.0です。ただしWindows 11 IoT Enterpriseには専用機向けの緩和要件があり、TPMが任意になる構成もあります(6章)。45
  • TPMの実装は3種類(専用チップ/統合/ファームウェア)ありますが、Windowsはどれも同じように使います(5章)。6
  • Windows 10/11はTPMを自動的に初期化して所有権を取得するので、通常 tpm.msc で設定をいじる必要はありません(8章)。1
  • TPMのクリアはデータ消失につながります。実行前にバックアップと復旧手段の確認が必須です(9章)。7
  • 開発者は、TPMを直接叩くのではなくCNGの「Microsoft Platform Crypto Provider」を使います(10章)。8

2. TPMとは何か ── 「鍵を外に出さない金庫」

まず、TPMがない世界を考えます。ソフトウェアだけで秘密鍵を守ろうとすると、鍵は最終的にどこかのタイミングでメモリ上の平文になります。署名や復号の計算をするには、CPUが鍵の値を読む必要があるからです。つまり、カーネルまで到達したマルウェアや、メモリを物理的に読み出せる攻撃者からは、原理的に隠しきれません。公式ドキュメントも、ソフトウェアによる鍵保護は「使用中にメモリ上でどう鍵を保管しているか、どうコピーを作っているかを解析されるリバースエンジニアリング攻撃を受ける」と明言しています。3

TPMはこの前提をひっくり返します。鍵はTPMの中で生成され、TPMの中に留まります。アプリやOSは鍵をもらうのではなく、TPMに仕事を依頼して結果だけを受け取るのです。

B. TPMに鍵を預ける場合署名して / 復号してという依頼だけを送る結果だけを返す鍵そのものは取り出せないTPMアプリ / OSTPMの中の秘密鍵で計算する鍵はチップの外へ出ないアプリ / OS が受け取るのは署名や復号の結果だけカーネルまで到達したマルウェアメモリ解析・物理攻撃A. ソフトウェアだけで鍵を守る場合鍵を読み込んで計算する読み出せてしまうメモリ上の秘密鍵平文になる瞬間があるアプリ / OSカーネルまで到達したマルウェアメモリ解析・物理攻撃

図1: ソフトウェアだけで鍵を守る場合と、TPMに鍵を預ける場合の違い

ここで重要なのは、TPMは受動的(passive)だという点です。TPMは自分から何かを監視したり、ウイルスを止めたりしません。コマンドを受け取って応答を返すだけの部品です。6 だからこそ、TPMの価値を引き出すにはOEM(PCメーカー)がハードウェアとファームウェアを丁寧に統合する必要があり、Windowsがそれを前提に機能を組み立てている、という構図になります。

もう1つの柱が辞書攻撃対策です。TPMが守る鍵には、PINのような認証値を設定できます。認証値の推測が一定回数失敗すると、TPMは追加の試行を拒否してロックアウトします。TPM 2.0では、この挙動をWindowsが構成します。具体的には認証失敗32回でロックアウトし、10分経過ごとに1回分の失敗を忘れるという設定です。320分間まったく失敗がなければ、記憶している失敗回数はゼロに戻ります。2

この「回数制限がハードウェア側にある」という事実が効いてきます。ソフトウェアで失敗回数を数えていると、再起動されたり、システムクロックを巻き戻されたり、カウントを記録したファイルをロールバックされたりすれば無効化できます。TPMならそれができません。3 Windows HelloのPINが4桁でもパスワードより安全と言える根拠は、まさにここにあります。

3. TPMの中身 ── EK・SRK・PCR・NVRAM

TPMの内部には、役割の違う要素がいくつか入っています。名前が似ていて混乱しやすいので、図で位置関係を押さえておきます。

この値のときだけ取り出せる、と縛るTPM 2.0EK / 保証鍵製造時の種から導出される製造元の証明書が付くSRK / ストレージルート鍵ほかの鍵を包む親の鍵PCR 0〜23起動の測定値を積み上げるNVRAM電源を切っても消えない小領域AIK / 証明用の鍵EKの代わりに外へ出す身分証BitLockerの鍵Windows Helloの鍵証明書の秘密鍵

図2: TPMの主要な構成要素と、鍵の親子関係

EK(Endorsement Key / 保証鍵)は、そのTPM固有の非対称鍵ペアです。秘密側はTPMの中に保持され、外部に公開されることも、外部からアクセスされることも一切ありません。2 製造元が署名したEK証明書が付いており、「この鍵は確かに当社が製造したTPMの中にある」ことを示します。これによって、本物のTPMなのか、TPMのふりをしたマルウェアなのかを区別できます。3

なお、マイクロソフトのドキュメントはEKをRSA鍵ペアと説明していますが2、これはTPM 1.2時代からの記述です。TPM 2.0で製造時にチップへ書き込まれる不変の秘密は、正確には「エンドースメント・プライマリ・シード」という種で、EKはこの種から決まった手順(テンプレート)で導出されます。同じ種から導出すれば必ず同じ鍵になるので、EKは作り直せても事実上そのTPM固有の鍵であり続けます。RSAとECCのどちらのEKも導出でき、実機に両方が用意されていることも珍しくありません。

ただし、EKをそのまま外部に見せるとPCを一意に識別できてしまい、プライバシー上の問題になります。そこで実際のシナリオではAIK(Attestation Identity Key / 証明用の鍵)を使います。認証局がEKとその証明書を使って「このAIKは本物のTPMの中に存在する」ことを証明し、AIK証明書を発行します。相手ごとに別のAIKを使えるので、複数の検証者が結託して同じ端末を追跡することを防げます。3

SRK(Storage Root Key / ストレージルート鍵)は、他の鍵を包む(ラップする)ための親鍵です。TPMは作った鍵を暗号化して外に出すことができ、その鍵はそのTPMでしか復号できません。この処理を「ラップ」または「バインド」と呼びます。2 つまり、TPMの中の記憶領域は小さくても、外部ストレージに暗号化して置いておけば、実質的に何本でも鍵を持てるということです。

PCR(Platform Configuration Register)は、起動時の測定値を積み上げる特殊なレジスタです。0番から23番まであり、それぞれ何を測るかが決まっています。9 重要な性質は、任意の値を直接書き込めず、Extend という操作でしか値を進められないことです。Extend は「現在の値と新しい測定値を連結してハッシュを取った結果を新しい値にする」という一方向の操作なので、「途中で都合の悪い記録だけを消す」ことが原理的にできません。値は再起動でリセットされます。3

なお、TPM 2.0にはリセット可能属性を持つPCRもあります(DRTMやアプリケーション用途)。ただしBitLockerが封印に使うPCR(0・2・4・7・11)は静的な測定起動用のPCRで、再起動までリセットできません。本記事の説明はこちらを前提にしています。

NVRAMは不揮発の小さな領域で、証明書などを保持するのに使われます。TPM 2.0はTPM 1.2に比べ、アルゴリズム、暗号、階層、ルート鍵、認可、NVRAMの各面で改善されています。6

4. 測定起動とPCR ── なぜ「起動が変わると開かない」のか

TPMのもう1つの柱が測定起動(Measured Boot)です。ここがBitLockerの動作を理解する鍵になります。

4.1. そもそも「測定」とは何をすることか

先に進む前に、「測定」という言葉を具体的にしておきます。ここでの測定は、重さや温度のような物理量を測ることではありません。次に実行するプログラムや設定データのバイト列全体から、ハッシュ値を計算することです。ハッシュ値は「内容の指紋」のような固定長の値で、次の性質を持ちます。

  • 同じ内容からは、いつ誰が計算しても必ず同じ値が出る
  • 内容が1バイトでも違えば、まったく別の値になる
  • 値から元の内容を復元することは実質的にできない

たとえばSHA-256というハッシュで計算すると、abc

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

になり、最後の1文字だけ違う abd

a52d159f262b2c6ddb724a61840befc36eb30c88877a4030b65cbe86298449c9

になります。1文字の違いでも値は全面的に変わり、2つの値を見比べても「似た内容だった」という手がかりすら残りません。PowerShellの Get-FileHash で任意のファイルのSHA-256を計算できるので、この「指紋」の感覚は手元でも試せます。

つまり「起動の測定値」とは、起動の過程で実行されるファームウェア・ブートローダー・設定それぞれのハッシュ値のことです。測定値が前回とすべて同じなら「起動に関わったソフトウェアと構成は前回とまったく同じだった」と言い切れます。逆に、ブートローダーが改ざんされていたり、別のOSから起動されたりすれば、対応する測定値が必ず変わります。これが測定起動の土台です。

4.2. 測定の連鎖 ── 読み込むものを、実行する前に測る

仕組みは単純です。システムファームウェアの中にはCRTM(Core Root of Trust for Measurement)という、無条件に信頼される起点があります。CRTMは次に実行するソフトウェアコンポーネントを無条件にハッシュ化し、その測定値をTPMへ記録します。以降のコンポーネントも同じことを繰り返します──読み込むものを、実行する前に測るのです。実行前に測定値が送られるため、あるコンポーネントが自分の測定値をTPMから消すことはできません。3

TPMWindows カーネルWindows ブートマネージャーUEFIファームウェア CRTMTPMWindows カーネルWindows ブートマネージャーUEFIファームウェア CRTMPCR 0 / 2 / 4 / 7 が更新される実行前に測ってから制御を渡すalt[PCR が封印時と同じ値][PCR が違う値]次に実行するコードのハッシュを Extend1制御を渡す2封印された BitLocker の鍵の解除を依頼3鍵を返す4OSボリュームを復号する5カーネル・ELAM・ブートドライバーを Extend6制御を渡して Windows を起動7鍵を返さない8回復キー入力画面へ9

図3: 測定起動とBitLockerの鍵解放の流れ

図で「復号したあとにカーネルを測る」順序になっているのは、測定起動の原則どおり、読み込むものは実行前に測るからです。Windowsブートローダーがカーネルのデジタル署名を検証してから読み込み、カーネルがさらにブートドライバー・スタートアップファイル・ELAMを検証する、という連鎖になっています。10 カーネルが起動してから自分を測るのでは、測定を省略できてしまい意味がありません。

BitLockerは、この測定値が期待した値のときだけ使える鍵をTPMの中に作ります。期待値は、システムディスクのOSボリュームからWindowsブートマネージャーが動く時点のものとして計算されます。別のOSで起動されたり構成が変えられたりすれば、TPM内の測定値が変わり、TPMは鍵の使用を許可せず、暗号化されたOSボリュームは復号できません。3

では、実際にどのPCRが見られているのでしょうか。ネイティブUEFI構成での既定のプラットフォーム検証プロファイルは次のとおりです。9

PCR 測定対象
PCR 0 コアシステムファームウェアの実行コード
PCR 1 コアシステムファームウェアのデータ
PCR 2 拡張・着脱可能な実行コード
PCR 3 拡張・着脱可能なファームウェアのデータ
PCR 4 ブートマネージャー
PCR 5 GPT / パーティションテーブル
PCR 6 S4/S5からの復帰イベント
PCR 7 セキュアブートの状態
PCR 11 BitLockerのアクセス制御
PCR 12〜14 データイベント、ブートモジュール詳細、ブート機関

既定では PCR 0・2・4・11 が封印の対象です。ただしセキュアブート状態(PCR 7)がサポートされている場合は、PCR 7とPCR 11で封印されます。9 これは重要な違いです。PCR 0/2/4はファームウェアやブートマネージャーのイメージそのもののハッシュなので、ファームウェアを更新するたびに値が変わり、回復モードに落ちます。一方PCR 7は「セキュアブートが有効か、どの鍵を信頼しているか」を測るので、署名者が同じであればイメージが更新されても値が変わりません。マイクロソフトも、PCR 7に紐づけることでファームウェア更新やイメージ更新による回復モード突入の可能性が減ると説明しています。9

PCR 11の使われ方は少し変わっていて、面白い工夫です。想定されているのは、攻撃者が被害者の端末はそのまま(ハードウェアとファームウェアを保ったまま)で、OSディスクだけを自分の用意したものに差し替えるという攻撃です。鍵は元のTPMに封印されているので端末ごと変えては意味がなく、被害者のTPMを使い続けるのがポイントです。攻撃者は被害者のOSパーティションのメタデータから封印済みのBitLocker鍵blobを取り出し、自分の支配下のOSを起動してからTPM APIを呼び、その鍵blobの解除(unseal)を試みます。

これが成立しないのは、Windowsが鍵を封印するときPCR 11の値を0として封印し、ブートマネージャーが次のブートローダー(正規のものであれ不正なものであれ)へ制御を渡すときに必ずPCR 11を1に変えるからです。攻撃者のOSが動いている時点でブートマネージャーはすでに制御を手放しており、PCR 11は確実に0ではなくなっています。したがって同じ端末・同じTPMの上でも、ブートマネージャーより後の段階から鍵を要求することはできません。11

なお、セキュアブートそのものもBitLockerの守りの一部です。既定でBitLockerはPCR 7の測定によってセキュアブートの完全性保護を利用し、許可されていないEFIファームウェア・EFIブートアプリケーション・ブートローダーが起動してBitLockerの鍵を取得することを防ぎます。11

5. dTPM・fTPM・Pluton ── 実装形態の違い

「TPMチップ」という言い方が広まっているせいで、TPMは必ず独立した部品だと思われがちですが、実装は3種類あります。6

LPC / SPI バスCPU専用のTPMチップ= ディスクリート dTPMCPU / チップセットのパッケージ同じパッケージ内の専用ハードウェア論理的には分離= 統合 integrated汎用CPU信頼実行環境 TEE の上で動くファームウェア実装= ファームウェア fTPMSoCマイクロソフト設計のセキュリティプロセッサ= Pluton

図4: TPMの3つの実装形態と、その延長にあるPluton

  • ディスクリートTPM(dTPM)は、独立した半導体パッケージの専用チップです。マザーボードに実装され、OEMがシステム本体とは別に評価・認証できるという利点があります。6
  • 統合TPMは、他のコンポーネントと同じパッケージに入りつつ、論理的には分離された専用ハードウェアとして実装されます。6
  • ファームウェアTPM(fTPM)は、汎用の演算ユニットの信頼実行環境(TEE)でTPMをファームウェアとして動かします。6 小型・低消費電力のデバイスで専用チップが現実的でないケースに向きます。

Windowsは互換性のあるTPMであればどれも同じように使います。マイクロソフトはTPMをどの方式で実装すべきかについて立場を取らず、幅広いエコシステムがあらゆるニーズに応えるとしています。6 つまり「fTPMだから格下」ということはありません

そのうえでMicrosoft Plutonは、統合形態をさらに進めたものです。マイクロソフトが設計しシリコンパートナーが製造する、CPUに組み込まれたセキュアな暗号プロセッサで、TPMの機能を提供しつつ、TPM 2.0仕様の範囲を超えたセキュリティ機能も提供することを狙って設計されています。12 2026年時点でPlutonが利用できるのは、Windows 11が動作する次のチップセット搭載機です。12

  • AMD: Ryzen 6000 / 7000 / 8000 / 9000 シリーズ、Ryzen AI シリーズ
  • Intel: Core Ultra 200V シリーズ、Core Ultra Series 3 および Series 3 プロセッサ
  • Qualcomm: Snapdragon 8cx Gen 3、Snapdragon X シリーズ

運用面でPlutonが持つ特徴は、ファームウェアの更新経路が2系統あることです。従来どおりUEFIカプセル更新でマザーボードのSPIフラッシュ上のファームウェアを更新できるほか、OSの更新を通じて新しいPlutonファームウェアを動的に読み込めます。システム起動時にはSPIフラッシュ上のファームウェアで初期化され、Windowsの起動中に(あれば)Windows Update経由で取得した最新版が読み込まれる、という流れです。12 TPMのファームウェア脆弱性が見つかったときに、PCメーカーのBIOS更新提供を待たずに配られる可能性がある、というのは実務上ありがたい性質です。

6. TPM 1.2 と 2.0 の違い、そしてWindows 11の要件

古いPCを扱っていると、まだTPM 1.2に出会うことがあります。両者の差は「バージョンが上がった」という以上のものです。6

観点 TPM 1.2 TPM 2.0
暗号アルゴリズム RSAとSHA-1のみ 複数のアルゴリズムに対応(暗号アジリティ)
ロックアウト方針 実装依存でメーカーごとにばらつく Windowsが構成し、一貫した辞書攻撃対策を保証
実装形態 基本的にディスクリートチップ ディスクリート/統合/ファームウェア
標準化 ISO/IEC 11889:2015として国際標準化
ファームウェア要件 BIOSでも可 ネイティブUEFI必須(CSMは無効化)

とくに効くのがSHA-1です。NISTは2014年時点で多くの連邦機関にSHA-256への移行を求め、マイクロソフトやグーグルも2017年にSHA-1ベースの署名・証明書のサポートを廃止しました。TPM 1.2の仕様はSHA-1しか使えないため、この流れに追随できません。6

そしてWindows 11です。最小要件は、互換性リストに載った64bit CPU、メモリ4GB、ストレージ64GB、DirectX 12以上に対応しWDDM 2.0ドライバーを持つグラフィックス、720p以上で9インチ超・8ビット/チャネルのディスプレイ、「UEFI、セキュアブート対応(Secure Boot capable)」のシステムファームウェア、そしてTPM 2.0です。4

ここは正確に読んでください。最小要件が求めているのはセキュアブートに対応していることであって、有効になっていることではありません。4 無効のままでも要件自体は満たせるので、Windows 11に上げるためだけにUEFI設定をいじる必要はありません。もっとも、セキュアブートを有効化し、かつプラットフォームがPCR 7の紐づけ要件を満たしていれば、BitLockerがPCR 7に紐づいて回復モードに落ちにくくなります(4章)。有効化だけで自動的にそうなるわけではないので、実際にどのPCRに紐づいているかは manage-bde -protectors -get C: のPCR検証プロファイルで確認してください。要件だからではなく、この実利のために有効化するのが正しい整理です。

もう1つ見落とされがちなのが、TPM 2.0はレガシーモードやCSM(Compatibility Support Module)モードのBIOSではサポートされないという点です。TPM 2.0搭載デバイスはBIOSモードを「ネイティブUEFIのみ」に構成する必要があり、レガシー/CSMオプションは無効化しなければなりません。6

これは実務で厄介な状況を生みます。レガシーモードでインストールされたOSは、BIOSモードをUEFIに変えると起動しなくなるからです。BIOSモードを変更する前に MBR2GPT ツールを使い、OSとディスクをUEFI対応の状態にしておく必要があります。6 「TPMは載っているのにWindows 11に上げられない」という機体は、この状態であることが少なくありません。Windows 10からの移行判断の全体像は「Windows 10サポート終了後の現実解 ── ESU・LTSC・買い替えの判断表」に整理しています。

なお、デバイスの正常性証明(Device Health Attestation)についても、WindowsがサポートするのはTPM 2.0であり、TPM 2.0を積んでいてもレガシーBIOSのデバイスでは期待どおりに動作しません。1

6.1. 例外 ── Windows 11 IoT EnterpriseではTPMは任意

ここまでの「Windows 11ならTPM 2.0必須」は、一般PC向けエディションの話です。Windows 11 IoT Enterprise には、専用機向けの緩和された最小要件が別に定義されていて、IoT Enterprise LTSC(および非LTSCの24H2以降)ではTPMもセキュアブートも任意(Optional)です。5 産業用PCや装置組み込みの現場では、ここを知っているかどうかで「この基板ではWindows 11にできない」という結論がひっくり返ります。

公式の要件表は、PREFERRED(推奨)OPTIONAL(専用機向けの最小)の2列構成になっています。5

項目 Windows 11 一般PC向け Windows 11 IoT Enterprise LTSC
PREFERRED
Windows 11 IoT Enterprise LTSC
OPTIONAL
TPM TPM 2.0 必須 TPM 2.0 任意(Optional)
セキュアブート 対応必須 有効 任意(Optional)
システムファームウェア UEFI UEFI BIOSでも可
メモリ 4GB 4GB 2GB
ストレージ 64GB 64GB 16GB

注意点が3つあります。

  • 「LTSCならTPM不要」ではありません。緩和要件が定義されているのは IoT Enterprise で、Windows 11 Enterprise LTSC(IoTなし)は一般PC向けと同じ扱いです。名前が似ているので混同されがちですが、調達するライセンスがどちらなのかで結論が変わります。
  • 非LTSCのIoT Enterpriseはバージョンで違います。21H2〜23H2のOPTIONAL要件ではTPM 2.0は依然として必須(任意になっているのはセキュアブートだけ)で、TPMが任意になるのは24H2以降です。5
  • プロセッサ要件は別建てです。TPMとセキュアブートが任意でも、対応プロセッサの一覧は別途定義されているので、そちらは必ず確認してください。5

そしてマイクロソフト自身が、緩和要件を選ぶことの意味に釘を刺しています。エンドユーザーがあとからソフトウェアを追加できるデバイスで要件を下げるときは慎重に検討すべきで、TPMを載せないことはエンドユーザーが必要とするソフトウェアに影響しうる、という趣旨です。5 TPMがなければBitLockerは鍵を起動状態に封印できず、Windows Helloの鍵もソフトウェア保護に落ちます。「要件を満たすために載せる」のではなく「その端末に必要な保護を得るために載せる」という判断に切り替えてください。

IoT Enterprise / LTSCの選び方とライセンス調達の全体像は「産業用PCにはどのWindowsを入れるべきか ── Windows IoT Enterprise / LTSC 実践ガイド」に整理しています。

7. WindowsのどこでTPMが使われているか

「TPMが必須です」と言われても、それが日々のどの機能に効いているのかが見えないと納得しにくいものです。地図を描いておきます。

TPM 2.0BitLocker / デバイス暗号化鍵を起動状態に封印するWindows HelloPINや生体情報に紐づく鍵を保護辞書攻撃対策で短いPINでも安全Credential Guard分離環境の鍵を測定値で保護測定起動 / リモート証明起動状態に署名した quote を発行デバイスの正常性証明MDMの条件付きアクセスの判断材料Platform Crypto Provider証明書の秘密鍵を持ち出し不可に

図5: TPMを土台にしているWindowsの主なセキュリティ機能

BitLocker / デバイス暗号化。4章で見たとおりです。解除方式はTPMのみ、TPM+PIN、TPM+スタートアップキー、TPM+PIN+スタートアップキーの4通りで、TPMのみは利便性が最も高いぶん、追加の認証要素を求める方式より安全性は低い、と整理されています。11

なお、デバイス暗号化(BitLockerを自動で有効化する仕組み)の前提条件はここ数年で変わりました。かつてはModern StandbyまたはHSTIの要件を満たし、DMAアクセス可能な外部ポートを持たないことが条件でしたが、Windows 11 バージョン24H2以降この前提は撤廃され、より多くの端末が対象になっています。13 古い解説にある「Modern Standby対応機でないと使えない」は、24H2以降には当てはまりません。手元の端末が対象かどうかは、msinfo32.exe(システム情報)の「デバイス暗号化のサポート」で確認できます。13

Windows Hello / Windows Hello for Business。デバイスごとにプロビジョニングされた鍵と、PINや生体情報を組み合わせて認証します。TPMがあれば鍵はTPMが保護し、なければソフトウェアで保護します。生体情報はプロビジョニング済みの鍵にアクセスするためだけにその端末上で使われ、端末間で共有されません。3 TPMがある端末では鍵を他の場所へコピーできないため、認証情報が漏れても他の端末では使えないという性質が得られます。

Credential Guard。資格情報のハッシュ処理をカーネルからアクセスできない分離メモリ領域で行う機能です。この分離領域は起動プロセス中に初期化・保護され、Credential GuardはTPMを使ってその鍵を測定値で保護します。鍵は「分離領域が初期化される起動プロセスの段階」でのみアクセス可能で、通常のカーネルからは利用できません。3

測定起動とリモート証明。AIKを使って、TPMは現在の測定値の状態に暗号署名した文(quote)を生成できます。これをリモートへ送ることで、「どのソフトウェアと構成で起動し、OSを初期化したか」を証明できます。3 測定はWindowsの初期状態で止まるので、どのアプリを使っているかといったプライバシー情報は含まれません。3

デバイスの正常性証明。マイクロソフトの正常性証明サービスが、複数メーカーのTPM向けにAIK証明書を発行し、測定起動の情報を解析して「BitLockerがオンか」「セキュアブートがオンか」「DEPが有効か」といった単純な表明に変換します。MDM(Intuneなど)は複雑な quote を自前で解析せずに、この表明を使って端末を隔離したりクラウドサービスへのアクセスを止めたりできます。13

Platform Crypto Provider。証明書の秘密鍵をTPMで保護します。証明書テンプレートで「TPMのPlatform Crypto Providerを使う」と指定でき、エクスポート不可に設定された証明書の秘密鍵はTPMから取り出せません。PINを要求する証明書なら、TPMの辞書攻撃対策が自動的に適用されます。3 これが10章で扱う開発者視点の入口です。

仮想スマートカード。TPMを「常に挿さっているスマートカード」として振る舞わせる機能で、物理カードとリーダーの購入・配布コストを不要にします。3 ただしマイクロソフトは現在、仮想スマートカードの利用者にWindows Hello for BusinessやFIDO2セキュリティキーへの移行を推奨しています。2 既存資産としては残っていますが、これから設計するなら選ばない方向です。

8. 自分のPCのTPMを確認する

ここからは手を動かす話です。まず押さえておきたいのは、Windows 10/11はTPMを自動的に初期化して所有権を取得するということです。したがってTPM管理コンソール(tpm.msc)で設定をいじる必要は通常なく、マイクロソフトも「ほとんどの場合、tpm.mscでの構成は避けることを推奨する」としています。例外は、PCのリセットやクリーンインストールに関わる場面くらいです。1 ちなみにTPM管理コンソールは、Windows Server 2019 / Windows 10 バージョン1809以降、積極的な開発が終了しています。1

8.1. GUIで見る

  • Win + Rtpm.msc でTPMの管理コンソールが開きます。TPMの有無、状態、仕様バージョン、メーカーが分かります。
  • Windowsセキュリティの デバイス セキュリティセキュリティ プロセッサの詳細 でも同じ情報が見られます。この画面から セキュリティ プロセッサのトラブルシューティングTPM をクリア に進めます(9章で扱いますが、安易に押してはいけません)。7

8.2. PowerShellで見る

複数台を調べるならPowerShellが確実です。TrustedPlatformModule モジュールに一通りのコマンドレットがあります。14

# TPMの状態をまとめて確認する(管理者権限で実行)
Get-Tpm

出力は次のような形です。15

TpmPresent                : True
TpmReady                  : True
TpmEnabled                : True
TpmActivated              : True
TpmOwned                  : True
ManufacturerIdTxt         : INTC
ManufacturerVersion       : 402.1.0.0
ManagedAuthLevel          : Full
OwnerClearDisabled        : False
AutoProvisioning          : Enabled
LockedOut                 : False
LockoutHealTime           : 10 minutes
LockoutCount              : 0
LockoutMax                : 31

読み方のポイントは次のとおりです。15

  • TpmPresent: TPMが存在するか。ここが False ならハードウェアかUEFI設定の問題です。
  • TpmReady: Windowsが使える状態か。TpmPresentTrue でも TpmReadyFalse なら、初期化や所有権取得でつまずいています。
  • LockedOut / LockoutCount / LockoutMax / LockoutHealTime: 辞書攻撃対策の状態です。LockedOutTrue なら、PINの入力ミスなどで一時的に締め出されています。
  • OwnerClearDisabled: True だとOSから所有者認証値によるリセット(クリア)ができません。
  • AutoProvisioning: Windowsによる自動プロビジョニングの有効/無効です。

仕様バージョンが2.0かどうかを機械的に判定したい場合は、WMIから見るのが手軽です。

# 仕様バージョン・メーカー・有効状態を取得する
Get-CimInstance -Namespace 'root/CIMv2/Security/MicrosoftTpm' -ClassName Win32_Tpm |
    Select-Object SpecVersion, ManufacturerId, ManufacturerVersion,
                  IsEnabled_InitialValue, IsActivated_InitialValue, IsOwned_InitialValue

ここで注意したいのが ManufacturerId です。Get-Tpm が返す ManufacturerIdTxt(INTC のような文字列)は Get-Tpm 側にしかないプロパティで、Win32_Tpm クラスにはありません。16 うっかり Select-Object ManufacturerIdTxt と書くと、その列は黙って空になります。

Win32_Tpm にあるのは uint32ManufacturerId で、各バイトをASCII文字として解釈すると文字列になります(例: 14145487360x54 0x50 0x4D 0x00TPM)。16 文字列で欲しいなら、次のように自分で復号するか、素直に Get-Tpm を使ってください。

# ManufacturerId(uint32)をASCII文字列に直して一覧にする
Get-CimInstance -Namespace 'root/CIMv2/Security/MicrosoftTpm' -ClassName Win32_Tpm |
    Select-Object SpecVersion, ManufacturerVersion,
        @{ Name = 'ManufacturerText'; Expression = {
            $bytes = [System.BitConverter]::GetBytes([uint32]$_.ManufacturerId)
            # uint32を上位バイトから読む(例: 1229870147 → 0x49 0x4E 0x54 0x43 → INTC)
            if ([System.BitConverter]::IsLittleEndian) { [array]::Reverse($bytes) }
            -join ($bytes | Where-Object { $_ -ne 0 } | ForEach-Object { [char]$_ })
        } }

SpecVersion2.0, 0, 1.16 のように「仕様バージョン, リビジョン, エラッタ」の形で返ります。16 先頭が 2.0 かどうかを見れば、Windows 11のTPM要件を満たすかの判定に使えます(CPU・メモリ・ストレージなど他の要件は別途の確認が必要です。11章参照)。複数台に対してリモートで実行する方法は「PowerShell Remoting(WinRM)入門」を参照してください。

そのほか、Get-TpmEndorsementKeyInfo でEKと証明書の情報を、Get-TpmSupportedFeature で特定機能のサポート状況を確認できます。ロックアウトの解除は Unblock-Tpm、TPMのリセットは Clear-Tpm です。14

8.3. コマンドラインツールで見る

tpmtool はTPMの情報取得と診断に使う標準ツールです。17

:: TPMの基本情報を表示する
tpmtool getdeviceinformation

:: TPMのログを収集してカレントディレクトリに置く
tpmtool gatherlogs

BitLockerの状態とあわせて見るなら、manage-bde -statusGet-BitLockerVolume を併用します。イベントログ側の調査手順は「Get-WinEventでイベントログを実務的に調べる」にまとめています。

9. 実務のトラブル ── 回復キー画面・TPMクリア・ロックアウト

現場でTPMが話題になるのは、たいてい何かがうまくいかないときです。よくある3つを扱います。

9.1. BitLockerの回復キーを求められた

いちばん多い相談です。原因の切り分けは、実は単純です。

UEFI/BIOSを更新したセキュアブート設定を変えたCSMを有効にしたTPMをクリアしたマザーボードを交換したUSBから別OSを起動したブート順を変えた心当たりがない起動時に回復キー画面が出た直前に何かを変えたかPCR 0 などの測定値が変わった次回以降は再封印されるので回復キーで解除して継続PCR 7 の測定値が変わった設定を戻すか回復キーで解除封印した鍵そのものが消えた事前にBitLockerを一時停止していなければ回復キーが唯一の手段ブート構成の測定値が変わった元に戻して再起動攻撃の可能性も含めて調査ログ収集後に回復キーで解除回復キーの保管場所を確認AD DS / Entra ID / Microsoftアカウント

図6: BitLockerの回復キーを求められたときの切り分け

ファームウェア更新は回復モードの定番の引き金です。マイクロソフトも、PCR 0を含むプロファイルを設定している場合はファームウェア更新の前にBitLockerを一時停止するよう案内しています。9 逆に言えば、セキュアブートが正しく構成されPCR 7に紐づいている端末では、ファームウェア更新で回復モードに落ちる頻度が下がります。9 Modern Standby対応機ではPCR 7の測定がロゴ要件であり、TPMとセキュアブートが正しく構成されていれば既定でPCR 7とPCR 11に紐づきます。9

運用としての結論はシンプルです。UEFI更新・セキュアブート設定変更・TPMクリア・マザーボード交換の前には、必ずBitLockerを一時停止する。そして、その前に回復キーの保管場所(Active Directory Domain Services、Microsoft Entra ID、個人ならMicrosoftアカウント)を確認しておくことです。組織ではBitLockerを構成して回復キーをAD DSに保管できます。3

一時停止を挟んでいたかどうかで、その後の手間はまったく変わります。BitLockerを一時停止するとクリアキーの保護機能がボリュームに残るので、TPMをクリアしても新しいTPMに載せ替えても、回復キーを入力せずにそのまま起動できます(起動後に保護を再開すると、新しいTPMに対して封印し直されます)。図6で「回復キーが唯一の手段」としているのは、一時停止せずにクリア・交換してしまった場合の話です。逆に言えば、事前準備を1つ入れるだけで、この分岐は回避できます。

9.2. TPMをクリアしたい / クリアしてしまった

TPMのクリアはデータ消失を招きます。公式ドキュメントの警告は明確です。クリアすると、TPMに紐づいて作られた鍵と、その鍵で保護されたデータ(仮想スマートカードやサインインPINなど)がすべて失われます。TPMで保護・暗号化しているデータについて、バックアップと復旧手段を必ず用意してください。7

加えて、実務で効く注意点が3つあります。7

  • 自分の所有物でない端末(会社や学校のPC)のTPMを、管理者の指示なしにクリアしない。
  • クリアは必ずOSの機能(tpm.msc やWindowsセキュリティ)から行い、UEFIから直接クリアしない。
  • 一時的にTPMの動作を止めたいだけなら、クリアではなく「TPMをオフにする」を使う。

クリア後、Windowsは自動的にTPMを再初期化して所有権を取得し直します。7

ここで強調しておきたいのは、TPMのクリアはデータ消去(サニタイズ)ではないということです。クリアで失われるのはTPMの中の鍵であって、ディスク上のデータそのものは1バイトも消えません。BitLockerの回復キーはAD DSやMicrosoft Entra ID、Microsoftアカウントに退避されているのが普通なので、それを持つ人はTPMをクリアした後でもボリュームを復号できます。

端末を第三者に渡すときの本体は、Windowsの「このPCを初期状態に戻す(データも消去する)」、専用の消去ツール、暗号化消去、物理破壊といったストレージの消去手順です。TPMのクリアはその仕上げに過ぎません。廃棄・譲渡の手順全体は「Windows PCの廃棄・譲渡チェックリスト」に整理しています。

もう1つ、意外に知られていない落とし穴があります。一部のシステムには複数のTPMが載っていてUEFIで切り替えられることがありますが、Windowsはこの構成をサポートしていません。TPMを切り替えるとWindowsが新しいTPMを正しく検出できないことがあり、BitLockerは回復モードに入ります。切り替えるなら、切り替えたうえでクリアし、Windowsを再インストールする必要があります。マイクロソフトは、TPMが2つあるシステムでは片方を選んだら変更しないことを強く推奨しています。7

9.3. TPMがロックアウトされた

PINの入力ミスが続くと、TPMがロックアウトします。Windowsの既定構成では、TPM 2.0は認証失敗32回でロックし、10分ごとに1回分の失敗を忘れます。ロック状態でも、回復間隔のあいだ電源を入れたまま待てばロックアウトから抜けられます。2 10分はあくまでWindowsの既定値なので、実際の間隔はその端末の Get-Tpm が返す LockoutHealTime で確認してください(8章)。慌てて再起動を繰り返すより、放置するほうが早いことがあります。

即時解除したい場合は、ロックアウトリセットのコマンドを送ります。ここで誤解しやすいのがTPM所有者パスワードです。Windows 10 バージョン1607以降、WindowsはTPMのプロビジョニング時に所有者パスワードを保持しません(ランダムな高エントロピー値を設定したうえで破棄します)。18 「管理者が所有者パスワードを持っている前提」で手順を組むと、現場で止まります。

代わりに使われるのがロックアウト認可(lockout authorization)です。OSManagedAuthLevel の既定値5は、TPM 2.0では「ロックアウト認可だけを保持する」ことを意味します。18 つまり「フルの所有者パスワードは失われているが、ロックアウトを解除するための認可は残っている」のが既定の状態で、tpm.msc のロックアウト時間リセットや Unblock-Tpm は通常この認可で動きます。所有者パスワードそのものを残す設定(レジストリで OSManagedAuthLevel を4にする)もありますが、マイクロソフトは強く非推奨としています。18

なお、所有者パスワードがなくても、UEFIでの物理的存在の確認によってTPMの有効化・無効化・クリアといった管理操作を行う経路は残されています。18 ただしこれは、ロックアウトを非破壊で即時解除する代替手段ではありません。ロックアウト認可が使えない場合は、時間経過による回復(10分ごとに1回分)を待つのが基本で、クリアは鍵をすべて失う最終手段です(9.2節)。

なお、認可値を明示的に入力してリセットする構成の場合、間違った値でリセットを試みると、TPMは24時間リセットの再試行を許可しません。2 手当たりしだいに試さないでください。

なお、TPM 2.0では認証値なしで作れる鍵もあり、それらはTPMがロックされていても使えます。BitLockerの既定のTPMのみ構成は、TPMがロックされていてもWindowsを起動できます。2

10. 開発者から見たTPM ── Platform Crypto ProviderとCNG

自社アプリで「ライセンス鍵を端末に紐づけたい」「サーバーへの接続に端末固有のクライアント証明書を使いたい」「設定ファイルの機密値をこの端末でしか復号できないようにしたい」という要件が出たとき、TPMは有力な選択肢になります。

10.1. TBSではなくCNGを使う

Windowsには低レベルのAPIとしてTBS(TPM Base Services)があります。アプリケーション横断でTPMアクセスを集中管理するシステムサービスで、RPC経由のAPIとして提供され、呼び出し側が指定した優先度に基づいてTPMアクセスを協調的にスケジュールします。19

ただし、TBSのドキュメント自身がこう書いています。「TPMは鍵保管の用途にも使えるが、開発者にはこれらのシナリオではキーストレージAPIの使用を推奨する。キーストレージAPIは鍵の作成・署名・暗号化・永続化の機能を提供し、TBSよりも高水準で扱いやすい」19 つまり、鍵を守りたいだけならTBSを触る理由はありません。

使うべきなのは、CNG(Cryptography API: Next Generation)のキーストレージプロバイダー 「Microsoft Platform Crypto Provider」 です。CNGは暗号プロバイダーとキーストレージプロバイダーを分離しており、Platform Crypto ProviderはTPMを利用するKSPとして、秘密鍵を安全に保管し取り出せないようにします。8

Platform Crypto Providerが提供する、ソフトウェアだけのCNGプロバイダーでは実現できない(あるいは同等に実現できない)特性は2つです。3

  • 鍵の保護: TPMの中に利用制限付きの鍵を作れる。OSは鍵をシステムメモリにコピーせずにTPM内で読み込んで使える。持ち出し不可に設定できる。TPMが作った鍵はそのTPMにしか存在せず、そのTPMは鍵のコピーを作る源にはならない。
  • 辞書攻撃対策: 鍵にPINなどの認証値を要求でき、推測が多すぎればTPMが一定時間の拒否を返す。

10.2. C#での書き方

.NETからは System.Security.Cryptography の CNG系クラスで扱えます。

using System;
using System.Security.Cryptography;

const string KeyName = "KomuraSoft.DeviceKey";

// NTE_EXISTS: 「オブジェクトは既に存在します」(同名の鍵がすでにある)
const int NTE_EXISTS = unchecked((int)0x8009000F);

// TPMを使うキーストレージプロバイダー
var provider = new CngProvider("Microsoft Platform Crypto Provider");

// ユーザー単位の鍵にするか、マシン単位(サービスやタスクから使う)にするか。
// 作成側と参照側で必ず揃える ── ここがずれると「作ったはずの鍵が見つからない」になる。
const bool UseMachineKey = false;
var openOptions = UseMachineKey ? CngKeyOpenOptions.MachineKey : CngKeyOpenOptions.None;
var creationOptions = UseMachineKey
    ? CngKeyCreationOptions.MachineKey   // 作成には管理者権限が必要
    : CngKeyCreationOptions.None;

CngKey OpenOrCreateKey()
{
    if (CngKey.Exists(KeyName, provider, openOptions))
    {
        // 2回目以降は既存の鍵を開く(鍵はTPMに永続化されている)
        return CngKey.Open(KeyName, provider, openOptions);
    }

    var creationParameters = new CngKeyCreationParameters
    {
        Provider = provider,
        KeyCreationOptions = creationOptions,
        // 秘密鍵の持ち出しを一切許可しない ── ここがTPMを使う意味の中心
        ExportPolicy = CngExportPolicies.None,
    };
    creationParameters.Parameters.Add(
        new CngProperty("Length", BitConverter.GetBytes(2048), CngPropertyOptions.None));

    try
    {
        return CngKey.Create(CngAlgorithm.Rsa, KeyName, creationParameters);
    }
    catch (CryptographicException ex) when (ex.HResult == NTE_EXISTS)
    {
        // Exists と Create の間に別プロセスが同名の鍵を作ると、Create は
        // NTE_EXISTS で失敗する。その場合だけ、勝った側が作った鍵を開き直す。
        // それ以外の失敗(TPMが使えない・権限不足など)はそのまま呼び出し元へ投げる。
        return CngKey.Open(KeyName, provider, openOptions);
    }
}

using (var key = OpenOrCreateKey())
using (var rsa = new RSACng(key))
{
    byte[] payload = System.Text.Encoding.UTF8.GetBytes("device-attestation-challenge");
    // 署名はTPMの中で行われる。秘密鍵はプロセスのメモリに現れない
    byte[] signature = rsa.SignData(payload, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}

ExportPolicy = CngExportPolicies.None が肝です。ここを既定のままにすると、せっかくTPMを使っても鍵を取り出せる設定になりかねません。「鍵が外に出ない」ことがTPMを使う理由なので、明示的に持ち出し不可を指定してください

もう1つの落とし穴が、ユーザー単位の鍵とマシン単位の鍵の取り違えです。CngKey.Exists / CngKey.Open の2引数版はユーザー単位の鍵しか探しません。作成側だけを CngKeyCreationOptions.MachineKey に変えて参照側をそのままにすると、既存のマシン鍵が見つからず、毎回「同じ名前で作り直そうとして失敗する」という壊れ方をします。上のコードのように、作成・存在確認・オープンの3か所で同じスコープ(CngKeyCreationOptions.MachineKeyCngKeyOpenOptions.MachineKey)を使うよう揃えてください。

OpenOrCreateKey を関数に切り出して try/catch を入れているのにも理由があります。「存在を確認してから作る」は競合に弱いからです。アプリの多重起動などで2つのプロセスがともに Exists == false を見てから Create に進むと、先に作れたほうが勝ち、負けたほうは「同名の鍵がすでにある」で失敗します。初回起動時にだけ、しかも稀にしか起きないので、テストではまず踏みません。負けた側は勝者が作った鍵を開き直す、という後始末を最初から入れておいてください。

ただし、開き直してよいのは失敗の理由が「同名の鍵がすでにある」(NTE_EXISTS)のときだけです。TPMが使えない・権限が足りないといった別の失敗まで同じ経路に流すと、本来の原因が Open の「鍵が見つからない」という別の例外にすり替わり、調査が迷走します。上のコードが例外フィルターで HResult を絞っているのはそのためです。

10.3. 設計時に織り込むべき現実

公式ドキュメントの記述とTPMの性質から、実装前に決めておくべきことがいくつかあります。

  • TPMは速くない。専用のマイクロコントローラーや、CPUの保護モードで動く小さなプロセッサです。2 鍵生成に数秒かかることも珍しくありません。大量データの暗号化にTPMの鍵を直接使ってはいけません。データはAESなどの対称鍵で暗号化し、その対称鍵をTPMの鍵で保護する二段構えにします。
  • 鍵生成・署名はUIスレッドで走らせない。上記の遅さがそのままフリーズとして見えます。
  • TPMをクリアすると鍵は消える。修理・マザーボード交換・OS再インストールで失われる前提で、再登録の導線(サーバー側で端末を再登録する手順など)を設計に入れてください。「鍵が消えたら詰み」という設計は現場で必ず事故ります。
  • ユーザー単位かマシン単位かを決める。ユーザー単位の鍵はプロファイルに紐づきます。サービスやスケジュールタスクから使うならマシン単位(CngKeyCreationOptions.MachineKey)が必要で、作成には管理者権限が要ります。参照側にも CngKeyOpenOptions.MachineKey を渡すのを忘れないでください。データの置き場所の考え方は「Windowsアプリのデータ保存先の選び方」も参考になります。
  • マシン単位にしただけでは、サービスのアカウントはその鍵を使えません。MachineKey が決めるのは鍵ストアの場所だけで、誰が使えるかは鍵に付いたACL(セキュリティ記述子)で決まります。管理者が作った鍵を非管理者のサービスアカウントで開こうとして「アクセスが拒否されました」で止まるのは定番の事故です。対処は、鍵を使う本人(サービスのアカウント)の権限で作るか、作成時にセキュリティ記述子(CNGの Security Descr プロパティ)へサービスのSIDを許可として設定するか。どちらにせよ、必ず実際の実行アカウントで動作確認してください。
  • TPMがない環境をどう扱うか決める。要件として弾くのか、Microsoft Software Key Storage Provider にフォールバックして「保護レベルが下がる」ことを受け入れるのか。混在環境では、証明書テンプレートでPlatform Crypto Providerを優先しつつソフトウェアプロバイダーも許す、という運用が実際に取られています。3
  • 鍵にPINを付けるかどうかは慎重に。辞書攻撃対策が効くのは利点ですが、TPMのロックアウトはグローバルです。個々の鍵ごとに失敗回数を管理するのは技術的に現実的でないため、認証失敗が増えすぎるとTPM全体がロックされます。2 自社アプリの入力ミスが、同じ端末のWindows Helloを巻き込む可能性があるということです。
  • 資格情報そのものの扱いは別問題として残ります。スクリプトや設定ファイルに平文で置かない設計は「PowerShellでの資格情報の安全な扱い」に整理しています。

11. 実務の定石(判断表)

状況 やること 理由・補足
Windows 11に上げられるか調べたい PC正常性チェック(PC Health Check)か管理ツールで判定する。手作業で確認するなら、CPUの対応リスト・メモリ4GB・ストレージ64GB・DirectX 12以上かつWDDM 2.0ドライバーのGPU・720p/9インチ超/8bpcのディスプレイ・ネイティブUEFIかつセキュアブート対応のファームウェア・TPM 2.0まで見る TPMだけ見て「上げられる」と判断しない。GPUとディスプレイも最小要件に含まれる。抜けが怖いので、判定は基本的にツールに任せる4
TPM要件だけを一括で棚卸ししたい Get-TpmWin32_TpmSpecVersion で2.0を確認 これはTPM要件の確認であって、Windows 11の適格判定そのものではない416
TPMはあるのにWindows 11要件を満たさない BIOSモードがレガシー/CSMになっていないか確認。MBR2GPT でUEFI化してから切り替え TPM 2.0はCSMモードでは動作しない6
産業用PC・装置組み込みでTPMがない/載せられない Windows 11 IoT EnterpriseのOPTIONAL最小要件を確認する。ただしエディション(IoT Enterpriseか、IoTなしのEnterprise LTSCか)とバージョン(LTSCか、非LTSCなら24H2以降か)を必ず区別する TPMが任意なのはIoT Enterprise LTSCと非LTSCの24H2以降。非LTSCの21H2〜23H2はTPM 2.0必須。IoTなしのEnterprise LTSCは緩和対象外5
UEFI/BIOSを更新する 事前にBitLockerを一時停止し、回復キーの保管場所を確認 ファームウェア更新はPCRの測定値を変える9
TPMをクリアしたい 先にバックアップと復旧手段を確保。OSの機能から実行(UEFIからは行わない) クリアはTPM由来の鍵とデータをすべて失う7
回復キー画面が出た 直前の変更(ファームウェア・セキュアブート・ブート順・TPM)を洗い出す 変更点が測定値を動かしたのが原因911
TPMがロックアウトした 回復間隔(既定10分。Get-TpmLockoutHealTime で確認)のあいだ電源を入れたまま待つ。急ぐなら tpm.msc のロックアウト時間リセットか Unblock-Tpm 所有者パスワードは1607以降保持されない。既定でTPM 2.0はロックアウト認可だけを保持する。誤った認可値でのリセットは24時間の再試行禁止を招く182
物理攻撃まで想定する端末 TPM+PIN(拡張PIN)を構成し、スリープを無効化して休止か電源断で運用 TPMのみは利便性優先の構成11
自社アプリで鍵を守りたい CNGの Microsoft Platform Crypto Provider + ExportPolicies.None TBSより高水準なキーストレージAPIが推奨198
大量データを暗号化したい 対称鍵で暗号化し、その鍵だけをTPMで保護 TPMは低速。直接の一括暗号化には向かない2
端末を廃棄・譲渡する ディスクの消去(Windowsのリセット・専用消去ツール・物理破壊)を本体の手順とし、TPMクリアはその一部として最後に行う TPMをクリアしてもディスクのデータは消えない。別途保管された回復キーで復号できてしまう。手順を誤ると自分がデータにアクセスできなくなる点にも注意7

12. まとめ

  • TPMは「秘密鍵をチップの外に出さないまま使わせる金庫」と「起動時に読み込まれたものを記録する台帳」を兼ねた、受動的なセキュリティプロセッサです。
  • 測定起動用の静的なPCRは Extend でしか値を進められず、しかも実行前に測定するため、途中のコンポーネントが自分の痕跡を消せません。BitLockerはこの測定値に鍵を封印しています(TPM 2.0にはリセット可能なPCRもありますが、封印に使うPCRは対象外です)。
  • ネイティブUEFIの既定ではPCR 0/2/4/11、セキュアブートが使える環境ではPCR 7/11に封印されます。PCR 7に紐づくほうが、ファームウェア更新で回復モードに落ちにくくなります。
  • 実装はディスクリート/統合/ファームウェアの3種類で、Windowsはどれも同じように扱います。PlutonはCPU統合型で、ファームウェアをWindows Update経由でも更新できる点が運用上の特徴です。
  • Windows 11の要件はTPM 2.0と「UEFI、セキュアブート対応」のファームウェア。要件は対応であって有効化ではありませんが、有効化するとBitLockerがPCR 7に紐づくという実利があります。TPMを積んでいてもCSMモードでは要件を満たさないので、MBR2GPT を挟んでからBIOSモードを変えてください。
  • 例外はWindows 11 IoT Enterpriseで、専用機向けの緩和要件ではTPMもセキュアブートも任意です。ただし対象はIoT Enterprise LTSCと非LTSCの24H2以降で、非LTSCの21H2〜23H2はTPM 2.0必須IoTなしのWindows 11 Enterprise LTSCは緩和対象外です。そもそもTPMを載せない選択は、BitLockerやWindows Helloの保護を手放すことでもあります。
  • ファームウェア更新・セキュアブート設定変更・TPMクリア・マザーボード交換の前には、BitLockerの一時停止と回復キーの所在確認をセットで行います。
  • 自社アプリからは、TBSではなくCNGの Microsoft Platform Crypto Provider を使います。持ち出し不可を明示し、TPMの遅さとクリア時の消失を設計に織り込んでください。

関連記事

関連する相談領域

合同会社小村ソフトでは、Windows 11移行にともなうハードウェア要件の棚卸しやBitLocker運用設計の相談、TPMを使った端末固有の鍵管理を含むWindows業務アプリの受託開発を扱っています。

参考リンク

  1. Microsoft Learn, Trusted Platform Module Technology Overview. TPMがセキュアな暗号プロセッサであり複数の物理的セキュリティ機構で耐タンパー性を持つこと、マルウェアがTPMのセキュリティ機能を改ざんできないこと、鍵の生成・保管・利用制限とデバイス認証・プラットフォーム完全性の3つの利点、起動時のブートコードの測定と記録、Windows 10/11がTPMを自動的に初期化して所有権を取得するためtpm.mscでの構成は通常避けるべきこと、TPM管理コンソールがWindows Server 2019 / Windows 10 1809以降で積極的な開発を終了していること、デバイス正常性証明がTPM 2.0とUEFIファームウェアを必要としレガシーBIOS+TPM 2.0では期待どおりに動作しないことについて。  2 3 4 5 6

  2. Microsoft Learn, Trusted Platform Module (TPM) fundamentals. ストレージルート鍵と保証鍵の秘密部分が他のコンポーネント・ソフトウェア・プロセス・ユーザーに一切公開されないこと、鍵のラップ/バインド、プラットフォーム測定値への封印(sealing)と解除(unsealing)、EKがRSA鍵ペアで秘密側がTPM外に出ないこと、鍵の証明(key attestation)、辞書攻撃対策がグローバルなロックアウトであること、TPM 2.0でWindowsが32回の認証失敗でロックし10分ごとに1回分を忘れるよう構成すること、320分間失敗がなければ記憶がゼロに戻ること、ロック状態でも10分電源を入れたままにすればロックアウトを抜けること、所有者パスワードでの即時リセットと誤入力時の24時間再試行禁止、認証値なしの鍵はロック中でも使えBitLockerのTPMのみ構成が起動できること、TPMが専用マイクロコントローラーやCPUの保護モードで動くこと、仮想スマートカード利用者にWindows Hello for BusinessやFIDO2への移行を推奨していることについて。  2 3 4 5 6 7 8 9 10 11 12 13 14 15

  3. Microsoft Learn, How Windows uses the TPM. ソフトウェアによる鍵保護がリバースエンジニアリング攻撃を受けること、Platform Crypto Providerの鍵保護と辞書攻撃対策、EK証明書によるTPMの真正性確認とAIKによるプライバシー保護、CRTMが次のコンポーネントを無条件にハッシュ化してTPMへ記録し実行前に測定するため測定値を消せないこと(測定値は再起動で消去される)、BitLockerが起動測定値が期待値と一致するときだけ使える鍵をTPM内に作ること、回復キーをAD DSに保管できること、測定起動がWindowsカーネル・ELAMドライバー・ブートドライバーを記録すること、AIKによるquoteとリモート証明、正常性証明サービスとMDMの連携、Credential GuardがTPMの測定値で分離環境の鍵を保護すること、Windows Hello for Businessの鍵保護と生体情報が端末外に共有されないこと、仮想スマートカード、混在環境での証明書テンプレート運用について。  2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

  4. Microsoft Learn, Windows 11 requirements. Windows 11の最小要件(1GHz以上・2コア以上の互換性のある64bit CPUまたはSoC、4GB以上のメモリ、64GB以上のストレージ、DirectX 12以上に対応しWDDM 2.0ドライバーを持つグラフィックスカード、システムファームウェアが「UEFI、セキュアブート対応(Secure Boot capable)」であること、TPM 2.0、720p以上・9インチ超・8ビット/チャネルのディスプレイ、インターネット接続)について。要件はセキュアブートに対応していることであり、有効化されていることではない点を含む。  2 3 4 5

  5. Microsoft Learn, Minimum System Requirements - Windows IoT Enterprise. Windows IoT EnterpriseのPREFERRED最小要件が一般消費者向けデバイスの要件と一致すること、専用デバイス向けにこの水準から逸脱できる柔軟性(OPTIONAL最小要件)があること。Windows 11 IoT Enterprise LTSCのOPTIONAL最小要件がメモリ2GB・ストレージ16GB・システムファームウェアBIOS可・TPM「Optional」・セキュアブート「Optional」であること。非LTSCのWindows 11 IoT Enterpriseでは21H2/22H2/23H2のOPTIONAL要件はTPM 2.0が必要でセキュアブートのみOptionalであり、TPMがOptionalになるのは24H2以降であること。プロセッサ要件が別ページで定義されていること。そして、エンドユーザーがソフトウェアを追加できる専用デバイスで要件を下げる場合は慎重な検討が必要で、TPMを提供しないことはエンドユーザーが必要とするソフトウェアに影響しうる(ストレージ種別の変更が読み書き性能にのみ影響するのとは異なる)としていることについて。この緩和要件が適用されるのはWindows IoT Enterprise系エディションである。  2 3 4 5 6 7

  6. Microsoft Learn, TPM recommendations. TPMが受動的でコマンドを受け取り応答を返す部品であること、TPM 1.2がRSAとSHA-1のみであること、NISTが2014年時点でSHA-256への移行を求めマイクロソフトとグーグルが2017年にSHA-1署名・証明書のサポートを廃止したこと、TPM 2.0の暗号アジリティとISO/IEC 11889:2015としての国際標準化、TPM 1.2はロックアウト方針が実装ごとにばらつくがTPM 2.0はWindowsが構成し一貫した辞書攻撃対策を保証すること、ディスクリート(dTPM)/統合/ファームウェア(fTPM)の3実装とWindowsがどれも同じように使いマイクロソフトが実装方式について立場を取らないこと、TPM 2.0がレガシーおよびCSMモードのBIOSではサポートされずネイティブUEFI構成が必要でありレガシーモードでインストールされたOSはBIOSモード変更前にMBR2GPTを使う必要があることについて。なお同ページはデバイス暗号化の前提としてModern Standbyを挙げているが、この前提はWindows 11 バージョン24H2で撤廃されている(本文7章および [^bitlockerindex] 参照)。  2 3 4 5 6 7 8 9 10 11 12 13

  7. Microsoft Learn, Troubleshoot the TPM. WindowsがTPMを自動的に初期化し所有権を取得するため所有者パスワードの作成が不要であること、TPMのクリアがデータ消失を招き仮想スマートカードやサインインPINを含むTPM由来の鍵とデータをすべて失うこと、自分が所有しない端末を管理者の指示なくクリアしないこと、クリアは必ずOSの機能(tpm.msc)から行いUEFIから直接行わないこと、一時的に止めるならTPMをオフにする選択肢があること、Windowsセキュリティのデバイスセキュリティ→セキュリティプロセッサの詳細→トラブルシューティングからクリアする手順、クリア後にWindowsが自動的に再初期化して所有権を取り直すこと、複数TPM搭載システムの切り替えをWindowsがサポートせず切り替えるとBitLockerが回復モードに入ること、TPM 2.0が検出されない場合のUEFI設定確認について。  2 3 4 5 6 7 8

  8. Microsoft Learn, CNG Key Storage Providers. CNGが暗号プロバイダーとキーストレージプロバイダー(KSP)を分離していること、Microsoft Platform Crypto ProviderがTPMを利用するKSPであり秘密鍵を安全に保管して悪意あるソフトウェアからも取り出せないようにすること、NCryptOpenStorageProviderにMS_PLATFORM_CRYPTO_PROVIDERを渡して利用することについて。  2 3

  9. Microsoft Learn, Configure BitLocker. 「Configure TPM platform validation profile for native UEFI firmware configurations」ポリシーにおけるPCR 0〜23の一覧と各PCRの測定対象、ネイティブUEFIの既定プロファイルがPCR 0・2・4・11であること、セキュアブート状態(PCR 7)がサポートされる場合は既定でPCR 7とPCR 11で封印されること、PCR 7がセキュアブートの有効状態と信頼される鍵を示し実際のファームウェア・BootmgrイメージのハッシュであるPCR 0・2・4の代わりに使うことでファームウェア更新やイメージ更新による回復モード突入の可能性が下がること、PCR 0を含む構成ではファームウェア更新前にBitLockerを一時停止すべきこと、Modern Standby対応システムではPCR 7測定がロゴ要件でありTPMとセキュアブートが正しく構成されていれば既定でPCR 7とPCR 11に紐づくことについて。  2 3 4 5 6 7 8 9

  10. Microsoft Learn, Secure the Windows boot process. Secure Boot・Trusted Boot・ELAM・Measured Bootの役割、Trusted Bootではブートローダーがカーネルを読み込む前にそのデジタル署名を検証し、カーネルがさらにブートドライバー・スタートアップファイル・ELAMを検証すること、ELAMが他社製ブートドライバーより前に読み込まれること、Measured BootではUEFIファームウェアがファームウェア・ブートローダー・ブートドライバーおよびマルウェア対策アプリより前に読み込まれるすべてのもののハッシュをTPMへ保存することについて。 

  11. Microsoft Learn, BitLocker countermeasures. 既定でBitLockerがPCR 7の測定によりセキュアブートの完全性保護を利用し許可されないEFIファームウェア・ブートアプリケーション・ブートローダーがBitLockerの鍵を取得できないこと、TPMのみ/TPM+スタートアップキー/TPM+PIN/TPM+スタートアップキー+PINの4つの解除方式とTPMのみが利便性優先で安全性が相対的に低いこと、TPMやBIOS/UEFI構成・起動ファイル・ブート構成の変更で回復モードに入ること、ブートキット・ルートキットがPCR測定により検知され鍵が解放されないこと、Windowsが鍵を封印するときPCR 11の値を0として封印しブートマネージャーが制御を渡す際に必ずPCR 11を1に変えるためディスク差し替えによる解除が成立しないこと、物理攻撃を想定する場合のTPM+拡張PINとスリープ無効化の推奨について。  2 3 4 5

  12. Microsoft Learn, Microsoft Pluton security processor. PlutonがCPUに組み込まれたセキュアな暗号プロセッサであること、TPMの機能を提供しつつTPM 2.0仕様を超えたセキュリティ機能も提供するよう設計されていること、対応チップセット(AMD Ryzen 6000/7000/8000/9000およびRyzen AIシリーズ、Intel Core Ultra 200VシリーズおよびCore Ultra Series 3、Qualcomm Snapdragon 8cx Gen 3およびSnapdragon Xシリーズ)、ファームウェアがマザーボードのSPIフラッシュから起動時に読み込まれWindows起動中にWindows Update経由の最新版が使われること、UEFIカプセル更新とOS更新の2系統の更新経路について。  2 3

  13. Microsoft Learn, BitLocker overview. デバイス暗号化がModern StandbyまたはHSTIのセキュリティ要件を満たすことを必要としDMAアクセス可能な外部ポートを持てないこと、そしてWindows 11 バージョン24H2以降はDMAとHSTI/Modern Standbyの前提条件が撤廃され、より多くのデバイスが自動・手動のデバイス暗号化の対象になったこと、デバイス暗号化がOSドライブと固定ドライブのみを暗号化すること、回復キーがMicrosoft Entra ID・AD DS・Microsoftアカウントへバックアップされてからクリアキーが削除されること、msinfo32.exeの「デバイス暗号化のサポート」で前提条件の充足を確認できることについて。  2

  14. Microsoft Learn, TrustedPlatformModule Module. Clear-Tpm、ConvertTo-TpmOwnerAuth、Disable-TpmAutoProvisioning、Enable-TpmAutoProvisioning、Get-Tpm、Get-TpmEndorsementKeyInfo、Get-TpmSupportedFeature、Import-TpmOwnerAuth、Initialize-Tpm、Set-TpmOwnerAuth、Unblock-Tpmの各コマンドレットと役割について。  2

  15. Microsoft Learn, Get-Tpm (TrustedPlatformModule). Get-TpmがTpmObjectを返すこと、TpmPresent・TpmReady・TpmEnabled・TpmActivated・TpmOwned・ManagedAuthLevel・OwnerAuth・OwnerClearDisabled・AutoProvisioning・LockedOut・LockoutHealTime・LockoutCount・LockoutMax・SelfTestなどの各プロパティの意味と出力例について。  2

  16. Microsoft Learn, Win32_Tpm class. Win32_Tpmクラスのプロパティ(IsActivated_InitialValue、IsEnabled_InitialValue、IsOwned_InitialValue、SpecVersion、ManufacturerVersion、ManufacturerVersionInfo、ManufacturerId、PhysicalPresenceVersionInfo)について。ManufacturerIdがuint32であり各バイトをASCII文字として解釈すると文字列になること(例: 1414548736 → 0x54/0x50/0x4D/0x00 → “TPM”)、SpecVersionがTCG仕様のメジャー・マイナーバージョンとリビジョン・エラッタを含む文字列であることを含む。ManufacturerIdTxtはこのクラスのプロパティには含まれない。  2 3 4

  17. Microsoft Learn, tpmtool. tpmtoolがTPMの情報取得に使えるユーティリティであること、getdeviceinformationでTPMの基本情報を表示すること、gatherlogsでTPMのログをカレントディレクトリに収集することについて。 

  18. Microsoft Learn, Change the TPM owner password. Windows 10 バージョン1607以降、WindowsがTPMのプロビジョニング時に所有者パスワードを保持せず、ランダムな高エントロピー値を設定して破棄すること。レジストリキー HKLM\Software\Policies\Microsoft\TPMOSManagedAuthLevel を4にすれば保持できるがマイクロソフトが強く非推奨としていること、Windows 10 1703より新しいバージョンでの既定値が5であり、その値はTPM 2.0では「ロックアウト認可を保持する」ことを意味すること、所有者パスワードがなくてもUEFIでの物理的存在の確認によって有効化・無効化・クリアといった操作が可能であることについて。  2 3 4 5

  19. Microsoft Learn, TPM Base Services. TBSがアプリケーション横断でTPMアクセスを集中管理するシステムサービスでありRPC経由のAPIを提供すること、呼び出し側が指定する優先度に基づいてTPMアクセスを協調的にスケジュールすること、鍵保管の用途では開発者にTBSではなくより高水準で扱いやすいキーストレージAPIの使用を推奨していることについて。  2 3

同じタグを共有する最新の記事です。さらに近い話題で知識を深められます。

このテーマと近いトピックページです。記事を起点に、関連するサービスや他の記事へ進めます。

この記事は次のサービスページにつながります。近い入口からご覧ください。

よくある質問

この記事のテーマについて、相談時によくある質問をまとめています。

TPMは結局のところ何をしているのですか?
ひとことで言えば「秘密鍵を外に出さないまま使わせてくれる小さな金庫」です。TPMの中で作られた秘密鍵は、設定しだいでチップの外へ一切出ません。アプリやOSは鍵そのものを受け取るのではなく、TPMに対して「このデータに署名して」「この鍵で復号して」と依頼し、結果だけを受け取ります。これに加えて、起動時に読み込まれたファームウェアやブートローダーのハッシュをPCRという領域に積み上げて記録し、その値が期待どおりのときだけ鍵を取り出せるようにする「封印」ができます。BitLockerが「PCの中身をすり替えると解除できない」のはこの仕組みによるものです。
Windows 11がTPM 2.0を必須にしたのはなぜですか?
BitLocker・Windows Hello・Credential Guard・デバイス正常性の証明といった機能が、ハードウェアに根ざした信頼の起点を前提に設計されているためです。TPM 1.2はRSAとSHA-1しか使えず、ロックアウトの挙動もメーカーごとにばらついていましたが、TPM 2.0では新しいアルゴリズムが使え、辞書攻撃対策もWindowsが一貫して構成します。なお、TPM 2.0はレガシーBIOS互換モード(CSM)では動作しないため、ネイティブUEFI構成が前提になります。例外はWindows 11 IoT Enterpriseで、IoT Enterprise LTSCと非LTSCの24H2以降ではTPMもセキュアブートも任意です(非LTSCの21H2〜23H2ではTPM 2.0は必須。名前の似たWindows 11 Enterprise LTSC(IoTなし)は緩和対象外)。
dTPM、fTPM、Plutonは何が違うのですか?どれを選ぶべきですか?
実装形態の違いです。dTPM(ディスクリートTPM)はマザーボード上の専用チップ、fTPM(ファームウェアTPM)はCPUの信頼実行環境で動くソフトウェア実装、PlutonはCPUに統合されたマイクロソフト設計のセキュリティプロセッサです。Windowsから見た使い方はどれも同じで、マイクロソフトはどの実装を選ぶべきかについて立場を取らないと明記しています。実務上の違いは、専用チップはCPUとの間のバスが物理攻撃の対象になりうること、fTPMはCPUのファームウェア更新に挙動が左右されること、PlutonはファームウェアをWindows Update経由で更新できることなどです。調達で選べる場合は、業務端末ではメーカーの保守方針とファームウェア更新の提供状況を基準にするのが現実的です。
BIOSを更新したらBitLockerの回復キーを求められました。なぜですか?
BitLockerの鍵は起動時の測定値(PCR)に封印されているため、その測定対象が変わると鍵が解放されず回復モードに入ります。ファームウェア更新はまさにPCR 0などの測定値を変える操作です。マイクロソフトも、PCR 0を含む構成ではファームウェア更新前にBitLockerを一時停止するよう案内しています。回復キーで解除すれば、次回以降は新しい測定値で再封印されるので同じことは起きません。運用としては、UEFI更新・セキュアブート設定変更・TPMのクリア・マザーボード交換の前には必ずBitLockerを一時停止し、回復キーの保管場所(Active Directory、Microsoft Entra ID、Microsoftアカウント)を先に確認してください。
自分のアプリからTPMで鍵を守るにはどうしますか?
TPMのコマンドを直接叩くのではなく、CNG(Cryptography API: Next Generation)のキーストレージプロバイダー「Microsoft Platform Crypto Provider」を使います。.NETならCngKey.CreateにこのプロバイダーとExportPolicies.Noneを指定するだけで、秘密鍵がTPMの中に作られ、持ち出せない状態になります。低レベルのTPM Base Services(TBS)も公開されていますが、マイクロソフト自身が鍵の保管・署名・暗号化の用途にはより高水準なキーストレージAPIを使うよう推奨しています。実装上は、TPMの処理が遅いこと、TPMをクリアすると鍵が消えること、TPMのない環境へのフォールバックをどうするかを設計に織り込んでください。

著者プロフィール

記事の著者プロフィールページです。

小村 豪

合同会社小村ソフト 代表

Windows ソフト開発、技術相談、不具合調査を中心に、既存資産が残る案件や原因が見えにくい障害調査に強みがあります。

ブログ一覧に戻る