可信平台模塊 - Arch Linux 中文维基

跳至內容

# 可信平台模塊

出自 Arch Linux 中文维基

相關文章

- Self-encrypting drives
- Smartcards
- 可信平台模塊/1.2

翻譯狀態：

- 本文（或部分內容）譯自 Trusted Platform Module，最近一次同步於 2025-01-31，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

這篇文章的某些內容需要擴充。

原因：需要說明 TPM 1.2 與 TPM 2.0 之間的使用差異，邪惡女傭攻擊（Evil Maid Attack）防禦和可信引導，PCR 寄存器的封裝與和同 LUKS 的結合使用。 (在 Talk:可信平台模塊 中討論)

可信平台模塊 (Trusted Platform Module，TPM) 是一種用於安全加密處理器的國際標準，作為一種集成的微處理器，它可以通過將加密密鑰集成到設備中來保護硬體安全。

TPM 可以被用於在各種安全應用場景，例如安全啟動，密鑰存儲與隨機數生成。

TPM 僅在具有 TPM 硬體支持的設備上可用。如果設備具有 TPM 支持但並不可用，可能需要在 BIOS 設置中啟用。

注意：有兩個使用不同軟體棧的 TPM 規範： 2.0 和 1.2。本文章僅討論 TPM 2.0，有關 TPM 1.2 的內容參見 可信平台模塊/1.2 。

## 查看 TPM 版本

絕大多數現代的計算機都支持 TPM 2.0，因為自 2016 年後，這是 Windows 10 的強制性認證的一部分[1]。要檢查設備是否支持，請使用如下方法：

- 檢查日誌，例如以 root 身份運行 `journalctl -k --grep=tpm`。
- 讀取 `/sys/class/tpm/tpm0/device/description`[2]或 `/sys/class/tpm/tpm0/tpm_version_major` 的值：

     $ cat /sys/class/tpm/tpm0/device/description
    TPM 2.0 Device

- 使用 systemd-analyze(1) 檢查 TPM 2.0 和必要的軟體依賴：

      $ systemd-analyze has-tpm2

TPM 2.0 允許通過 `/dev/tpm0` 直接訪問（單次僅允許單個用戶），通過受內核監視的 `/dev/tpmrm0` 訪問，或通過 tpm2-abrmd包 資源管理守護進程進行受監視的訪問。根據一個 systemd 項目成員的說法，不應再推薦使用 tpm2-abrmd包。此外，還有兩個用戶空間工具可用，分別是 Intel 的 tpm2-tools包 和 IBM 的 ibm-tssAUR。

TPM 2.0 需要 UEFI 引導，BIOS 或傳統引導（Legacy boot）下的系統只能使用 TPM 1.2。

某些 TPM 晶片可以通過硬體升級在 2.0 和 1.2 間切換（往往只能執行有限次）。

## 用法

tpm2-software 社區提供了許多學習如何配置 TPM 2.0 並投入到實際生活使用的相關信息。

### LUKS 數據加密

可以使用安全保存在 TPM 中的密鑰來加密卷。這可以確保僅在 TPM 生效，同時滿足一些特定條件的前提下，硬碟才會解密，例如硬體完整性或安全啟動的狀態（參見 #訪問 PCR 寄存器）。

此機制可以用於在引導時自動解密根文件系統，類似於 Windows 上的 BitLocker 和 macOS 上的 FileVault。當硬碟從原設備上被拆下時，這能有效地保護其中的數據，但當整個設備都被盜，數據保護仍然只能依賴於最原始的方法，如密碼和系統設置。要緩解這個問題，可以嘗試：

- 使用不同的機制加密用戶數據（用戶的 home 目錄等），例如 fscrypt（英語：Fscrypt#Encrypt a home directory） 或 systemd-homed（英語：Systemd-homed#LUKS home directory）。

- 使用 TPM PIN 以避免無人監管的自動解鎖，這是一個 TPM 安全屬性。

警告：此方式會讓設備更容易受到冷啟動攻擊。

systemd-cryptenroll（英語：systemd-cryptenroll） 和 Clevis（英語：Clevis） 可以使用存儲在 TPM 中的密鑰加密 LUKS 卷。此外，systemd-cryptenroll 可以將加密綁定到簽名策略，而不是靜態 PCR 值上（參見 systemd-cryptenroll(1)）。

### SSH

要使用 TPM 保護 SSH 密鑰，有以下兩種方式：

- ssh-tpm-agent — 使用 TPM 支持密鑰的，與 ssh-agent 兼容的代理服務。

  https://github.com/Foxboron/ssh-tpm-agent || ssh-tpm-agent包
  參見 Store ssh keys inside the TPM: ssh-tpm-agent.

- tpm2-pkcs11 — 適用於 TPM 2.0 硬體的 PKCS#11 接口。

  https://github.com/tpm2-software/tpm2-pkcs11 || tpm2-pkcs11包
  參見 SSH configuration 與 Using a TPM for SSH authentication （2020-01）。

### GnuPG

這篇文章的某些內容需要擴充。

原因：需要添加查詢 TPM 所支持密鑰類型的方法。 (在 Talk:可信平台模塊 中討論)

自從 2.3 版本後，GnuPG 就支持將兼容的密鑰遷移到 TPM 中。參見 Using a TPM with GnuPG 2.3 以獲得方法。

### 其他 TPM 2.0 使用例

- Configuring Secure Boot + TPM 2
- Using the TPM - It's Not Rocket Science (Anymore) - Johannes Holland & Peter Huewe (2020-11, Youtube): examples for OpenSSL with tpm2-tss-engine包

## 訪問 PCR 寄存器

這篇文章的某些內容需要擴充。

原因：也許應該僅列出有用的 PCR，然後給出實際的使用案例，而不是把所有存在的 PCRs 都列出來。 (在 Talk:可信平台模塊 中討論)

平台配置寄存器（Platform Configuration Registers，PCR）將密鑰加密與特定的軟體版本和硬體狀態的哈希值一一對應，使得註冊的密鑰僅在使用特定的受信軟體和/或配置時才能被訪問。

PCR 常用於在不同引導間檢驗設備硬體和軟體完整性（例如用於預防邪惡女傭攻擊）。

TCG PC Client Specific Platform Firmware Profile Specification 定義了正在使用的寄存器，The Linux TPM PCR Registry 確定了使用它們的 Linux 系統組件。

有以下寄存器：

PCR | 描述 | 由...擴展（Extended by）
--- | --- | ---
PCR0 | 核心系統固件可執行碼 (又稱固件)，可能會在升級 UEFI 後更改。 | 固件
PCR1 | 核心系統固件數據 (又稱 UEFI 設置) | 固件
PCR2 | 擴展或可插入式可執行碼（又稱 OpROMs） | 固件
PCR3 | 擴展或可插入式固件數據，將在 UEFI 引導的選擇引導設備過程中設定。 | 固件
PCR4 | 引導管理器代碼和引導嘗試，檢測引導管理器和固件嘗試引導的設備。 | 固件
PCR5 | 引導管理器的配置與數據，可以檢測引導器配置，包括 GPT 分區表。 | 固件
PCR6 | 從 S4 和 S5 電源狀態事件恢復 | 固件
PCR7 | 安全啟動狀態，包含完整的 PK/KEK/db 內容，以及用於確認每個引導程序的特定證書。[3] 使用 shim 時，shim 會將自身的 MokList、 MokListX、和 MokSBState 添加到其後。 | 固件，shim（添加 MokList，MokListX，和 MokSBState）
PCR81 | 內核參數哈希值 | GRUB， systemd-boot
PCR91 | initrd 和 EFI Load Options 的哈希值 | Linux（檢測 initrd 和 EFI Load Options，本質上是內核參數選項)
PCR101 | 保留以供未來使用 |
PCR111 | 統一內核映像哈希值 | systemd-stub(7)
PCR121 | 覆蓋內核參數，證書 | systemd-stub(7)
PCR131 | 系統拓展 | systemd-stub(7)
PCR141 | shim 的 MokList，MokListX，和 MokSBState[4]。 | shim
PCR151 |  | 未使用
PCR161 | 調試用，可能會在任何時候被使用或是重置。可能在官方固件發布中不可用。 |
PCR23 | 應用支持，作業系統可以設定或清除此 PCR。 |

1. 使用方式由作業系統決定，在不同的 Linux 發行版和 Windows 設備間的使用方式可能有所不同。

在 Windows 上，BitLocker 使用 PCR8-11 (Legacy) 或 PCR11-14 (UEFI) 用於其自身用途。 文檔來自 tianocore[5]。

tpm2-totp包 通過人工觀察和專用可信設備進行此檢查。

當前 PCR 的值可以通過 systemd-analyze(1) 查看：

    $ systemd-analyze pcrs

也可以通過來自 tpm2-tools包 的 tpm2_pcrread(1) 查看：

    # tpm2_pcrread

## 排錯

### 使用 TPM 2.0 後 LUKS2 在解鎖時仍然需要密碼

如果在遵循了上述指引後，在使用 TPM 2.0 硬體模塊內的密鑰解鎖 LUKS2 設備時，仍然在 initrams 引導階段被要求輸入密碼，可能需要在早啟動階段加載控制特定 TPM 2.0 硬體的內核模塊（可以通過 `systemd-cryptenroll --tpm2-device=list` 獲取其名）。

## 參見

- Gentoo:Trusted Platform Module
- TPM-JS 測試工具：源碼 - 網頁版.

分類：​

- 安全
- 硬體

可信平台模塊
新增話題