概要
TPM(Trusted Platform Module)とは、Trusted Computing Group(TCG)が策定した国際標準(ISO/IEC 11889)に準拠したセキュリティチップ規格である。暗号鍵の生成・保管、乱数生成、デジタル署名、プラットフォームの整合性測定など、多彩なセキュリティ機能を専用ハードウェアで提供する。
TPM はルートオブトラストの具体的な実装であり、PC やサーバーでは事実上の標準となっている。Windows 11 では TPM 2.0 が必須要件として定められており、クラウドサービスや企業のセキュリティポリシーでも広く要求される。
組み込み・産業機器においても、セキュアブート、デバイス認証、ディスク暗号化(BitLocker 連携)などの用途で採用が拡大している。
歴史・背景
- 1999年: Compaq、HP、IBM、Intel、Microsoft らが TCG の前身である TCPA(Trusted Computing Platform Alliance)を設立。
- 2003年: TPM 1.1b 仕様を策定・公開。Dell、HP など主要 PC メーカーが搭載を開始。
- 2009年: TPM 1.2 が ISO/IEC 11889 として国際標準化。
- 2014年: TPM 2.0 仕様を公開。アーキテクチャを大幅に刷新し、アルゴリズムの柔軟性と機能性が向上。
- 2016年: TPM 2.0 が ISO/IEC 11889:2015 として改訂・国際標準化。
- 2021年: Microsoft が Windows 11 の最低要件に TPM 2.0 を含めると発表し、社会的な注目が高まった。
- Firmware TPM (fTPM): Intel PTT(Platform Trust Technology)や AMD fTPM のように、CPU のファームウェアで TPM 機能をエミュレートする実装も普及している。
技術仕様
TPM 1.2 vs TPM 2.0 の比較
| 項目 | TPM 1.2 | TPM 2.0 |
|---|---|---|
| 標準化 | ISO/IEC 11889:2009 | ISO/IEC 11889:2015 |
| ハッシュ | SHA-1 のみ | SHA-256、SHA-384 等、柔軟 |
| 署名 | RSA-2048 のみ | RSA、ECC、ECDSA 対応 |
| PCR 数 | 24個 | 32個以上(実装依存) |
| 階層構造 | なし | あり(Platform/Storage/Endorsement) |
| NV ストレージ | 制限あり | 柔軟な NV Index |
| 鍵管理 | SRK/AIK のみ | 汎用的な鍵オブジェクト |
主要コンポーネント
┌────────────────────────────────────────────┐
│ TPM チップ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │暗号エンジン│ │ 乱数生成器 │ │ハッシュ │ │
│ │(RSA/ECC) │ │ (TRNG) │ │ エンジン │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ Platform Configuration Register │ │
│ │ (PCR 0〜31) │ │
│ └──────────────────────────────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ EK (製造 │ │ NV RAM │ │
│ │ 証明書鍵) │ │ (永続保管) │ │
│ └──────────┘ └──────────┘ │
│ │
│ LPC / SPI / I2C インターフェース │
└────────────────────────────────────────────┘
PCR(Platform Configuration Register)
PCR はシステムの「現在の状態」を表すレジスタであり、起動時の各コンポーネントのハッシュを累積的に記録する。
PCR 0 : BIOS / UEFI ファームウェア
PCR 1 : BIOS 設定
PCR 2 : オプション ROM コード
PCR 3 : オプション ROM 設定
PCR 4 : IPL コード(MBR)
PCR 5 : IPL 設定
PCR 6 : ステート遷移
PCR 7 : セキュアブートポリシー
PCR 8〜15: OS が使用
PCR 16〜23: デバッグ・アプリケーション用
動作原理
鍵の階層構造(TPM 2.0)
Endorsement Hierarchy(製造者による信頼)
├── EK(Endorsement Key): 製造時に生成、変更不可
└── 子鍵
Storage Hierarchy(プラットフォームの信頼)
├── SRK(Storage Root Key): ユーザーが制御
└── 子鍵(アプリケーション鍵など)
Platform Hierarchy(プラットフォーム管理者)
└── プラットフォーム固有の操作に使用
セーリング(Sealing)とアンシーリング
鍵をシステムの特定の状態(PCR 値)に結び付けることができる。
# sealing の概念(Python 風疑似コード)
def seal_data(data: bytes, pcr_values: dict) -> bytes:
"""
PCR 値が一致する場合のみ復号可能な形でデータを封印
"""
current_pcrs = {0: hash(bios), 4: hash(bootloader), 7: hash(secureboot_policy)}
# PCR ポリシーを作成
policy = create_pcr_policy(pcr_values)
# TPM 内部でデータを暗号化(秘密鍵は TPM 外に出ない)
sealed_blob = tpm2_create(parent=srk, policy=policy, sensitive=data)
return sealed_blob
def unseal_data(sealed_blob: bytes) -> bytes:
"""
現在の PCR 値がシーリング時と同じ場合のみ成功
"""
# PCR 値が変わっていればここで失敗する
return tpm2_unseal(sealed_blob)
tpm2-tools を使った実操作例
# TPM の情報取得
tpm2_getcap properties-fixed
# PCR 値の読み取り
tpm2_pcrread sha256:0,1,2,3,4,7
# 乱数生成
tpm2_getrandom --hex 32
# 主鍵の作成
tpm2_createprimary -C e -g sha256 -G ecc -c primary.ctx
# 子鍵(署名鍵)の作成
tpm2_create -C primary.ctx -g sha256 -G ecc \
-u signing_key.pub -r signing_key.priv \
-a "sign|fixedparent|fixedtpm|sensitivedataorigin"
# 鍵のロード
tpm2_load -C primary.ctx -u signing_key.pub -r signing_key.priv -c signing_key.ctx
# データの署名
echo "hello" | tpm2_sign -c signing_key.ctx -g sha256 -o sig.dat
# 署名の検証
echo "hello" | tpm2_verifysignature -c signing_key.ctx -g sha256 -s sig.dat
# BitLocker 相当: データのシーリング
echo "disk_encryption_key" | tpm2_create -C primary.ctx \
-p pcr:sha256:0,7 -i - -u sealed.pub -r sealed.priv
リモートアテステーション
TPM を使ってデバイスの状態をリモートから検証するフロー。
デバイス(TPM あり) 検証サーバー
| |
|--- EK 証明書を送信 ----->| 製造者が保証した鍵
| |
|<-- チャレンジ(nonce) ----|
| |
| PCR 値を読み取り |
| nonce + PCR を AK で署名|
| |
|--- Quote レポート ------>|
| |
| PCR値を期待値と比較
| 署名を EK で検証
| |
|<-- 認証成功/失敗 --------|
用途・ユースケース
ディスク暗号化(BitLocker)
Windows BitLocker では TPM に暗号化鍵をシーリングし、正規のブートシーケンスが検証された場合のみ自動的にアンシーリングされる。ハードディスクを取り出して別の PC に接続しても復号できない。
VPN・証明書管理
デバイス証明書の秘密鍵を TPM に保管し、ソフトウェアからは鍵にアクセスできないようにする。秘密鍵が抜き出される心配なく VPN 認証が行える。
プラットフォーム整合性の証明
クラウドサービスへの接続時に、デバイスが改ざんされていないことをリモートアテステーションで証明する。コンフィデンシャルコンピューティングの基盤技術でもある。
産業機器・IoT
組み込み Linux の起動チェーン測定、クラウド接続時のデバイス認証、設定値の改ざん検知などに使用される。
実装・開発のポイント
Linux での TPM 操作
# TPM デバイスの確認
ls /dev/tpm* /dev/tpmrm*
# tpm2-tss ライブラリのインストール
sudo apt install tpm2-tools libtss2-dev
# Rust の tpm2-tss バインディング
# cargo add tss-esapi
fTPM(Firmware TPM)の注意点
Intel PTT や AMD fTPM は CPU ファームウェアで動作するため、ハードウェア TPM と比べてサイドチャネル攻撃への耐性が劣る場合がある。高セキュリティが求められる用途では専用チップが推奨される。
組み込み Linux での TPM 統合
# Linux カーネル設定
CONFIG_TCG_TPM=y
CONFIG_TCG_TIS=y # SPI 接続の場合
CONFIG_TCG_TIS_I2C=y # I2C 接続の場合
# 接続確認
dmesg | grep -i tpm
cat /sys/class/tpm/tpm0/tpm_version_major
他技術との比較
| 技術 | 対象プラットフォーム | 強度 | 標準化 | 主な機能 |
|---|---|---|---|---|
| TPM 2.0 | PC、サーバー、産業機器 | EAL4 | TCG / ISO | PCR、シーリング、アテステーション |
| セキュアエレメント | スマートカード、IoT | EAL5〜6 | GlobalPlatform | 決済、SIM、鍵保管 |
| HSM | サーバー、PKI | EAL4〜7 | FIPS 140-2 | 大量鍵管理、PKI |
| TrustZone TEE | ARM SoC | 実装依存 | GlobalPlatform TEE | モバイル、組み込み |
| fTPM | CPU ファームウェア | TPM より低い | TCG | コスト削減、PC |
TPM はルートオブトラストとして汎用性が高く、セキュアブートやデバイス認証の実装に最適な標準的ソリューションである。特に産業用 PC や組み込み Linux 環境では、TPM 搭載 SOM(System on Module)の利用が手軽な導入方法として推奨される。