1. 课程导入

在服务器、笔记本、工业网关和云主机中,磁盘被拆走、镜像被复制、虚拟机快照被导出,都是现实中经常发生的攻击路径。仅靠文件系统权限或全盘加密口令,很难回答一个关键问题:解密密钥到底放在哪里,谁能取走它? TPM(Trusted Platform Module,可信平台模块)密封存储(Sealing)正是为解决这一问题而设计的硬件级密钥保护机制。本课程围绕“密钥如何被硬件绑定、如何被安全释放、如何被工程化落地”展开,帮助你把 TPM 从“知道有这个东西”推进到“能在项目中正确设计与排障”。

本课程的核心命题可以概括为一句话:让密钥只在正确的平台状态、正确的软件环境、正确的时刻被释放,并且释放过程可验证、可审计、可恢复。

一、学习目标:从概念到可交付能力

完成本课程后,你应当具备以下四类能力。第一,原理层:理解 TPM 2.0 的层级结构(Hierarchy)、PCR(Platform Configuration Register)度量、密封对象与授权策略之间的关系。第二,操作层:能够使用 tpm2-tools 完成创建主密钥、密封数据、解封数据、策略授权等完整命令链路。第三,设计层:能够针对磁盘加密、远程证明、容器密钥注入等场景,选择合适的密封策略与恢复方案。第四,排障层:当解封失败时,能够依据 PCR 值、策略会话、授权值和日志快速定位原因。

二、核心价值:为什么必须用 TPM 做密钥保护

传统密钥保护方案大致有三类:明文存放、口令派生、软件密钥库。它们各有明显短板。明文存放等于没有保护;口令派生依赖人的记忆强度,且难以自动化;软件密钥库的根密钥最终仍以某种形式落在磁盘上。TPM 密封存储的价值在于把“释放条件”写进硬件:密钥被加密后存储,只有满足指定 PCR 度量值和授权策略时,TPM 才会执行解封运算,密钥明文只在受控内存中出现。

保护方式 根信任来源 抗磁盘窃取 可自动化 典型短板
明文/配置文件 无 否 是 密钥直接泄露
口令派生(PBKDF) 用户口令 部分 差 弱口令可爆破
软件密钥库 软件根密钥 部分 是 根密钥仍落盘
TPM 密封存储 TPM 硬件 + PCR 是 是 平台状态变化导致解封失败

三、整体知识框架:五个层次递进

本课程的知识结构不是零散命令的堆砌,而是从硬件到应用的五层递进。下面的 SVG 展示了这一框架:底层是 TPM 硬件与固件,其上是层级与授权体系,再上是 PCR 度量与策略,然后是密封/解封的核心操作,最上层是磁盘加密、远程证明、容器密钥等工程场景。每一层都依赖下一层,任何一层理解偏差都会在排障时放大。

TPM 密封存储与密钥保护工程 · 五层知识框架 应用场景层 磁盘加密 · 远程证明 · 容器密钥注入 · 证书私钥保护 · 固件更新校验 密封与解封操作层 tpm2_create · tpm2_load · tpm2_unseal · tpm2_createprimary · 密封对象持久化 策略与度量层 PCR 0-7 固件 · PCR 8-15 系统 · PCR 16-23 调试 · 策略会话 · 授权值 · 试算策略 层级与授权层 Owner / Platform / Endorsement / Null 层级 · 授权值 · 字典攻击锁定 · 会话加密 硬件与固件层 TPM 2.0 芯片 · 离散/固件/虚拟 TPM · 启动度量链 · 设备接口与资源管理器 越靠上越贴近业务 越靠下越贴近硬件 贯穿主线 密钥 不落盘 状态 可验证 释放 有策略 失败 可定位 恢复 有预案

四、实战路线图:从环境准备到场景落地

课程按“先跑通、再理解、后设计”的节奏推进。建议你按下面的顺序实践,每一步都保留命令输出,作为后续排障的基线。

  1. 环境确认:检查设备是否存在 TPM 2.0,确认内核与资源管理器可用。
  2. 基础操作:创建主密钥、密封一段测试数据、解封并比对。
  3. 策略实验:绑定 PCR 0-7,重启后观察解封结果;再修改启动项,观察失败现象。
  4. 场景落地:将密封密钥接入 LUKS 磁盘加密或应用密钥注入流程。
  5. 故障复盘:构造 PCR 变化、授权错误、层级锁定三类故障并逐一修复。
# 环境确认示例
ls /dev/tpm*                 # 查看 TPM 设备节点
cat /sys/class/tpm/tpm0/tpm_version_major
tpm2_getcap properties-fixed | head -40
tpm2_pcrread sha256:0,1,2,3,4,5,6,7

五、典型场景:磁盘加密中的密封密钥

以 Linux 全盘加密为例,传统做法是开机输入口令解锁 LUKS。工程化做法是把 LUKS 主密钥用 TPM 密封,绑定 PCR 0-7 与 PCR 11(若使用 systemd 度量)。开机时由 initramfs 调用 tpm2_unseal 自动解封,无需人工输入。若攻击者把磁盘拆到另一台机器,PCR 值不同,解封失败,密钥无法释放。若攻击者修改引导程序,PCR 0-7 变化,同样失败。这就是“平台状态绑定”的实际价值。

设计密封策略时,优先绑定“变化少但安全关键”的 PCR。绑定过多会导致内核升级、固件更新后频繁解封失败;绑定过少则失去防篡改意义。建议先用 tpm2_pcrread 记录基线,再决定策略。

六、常见误区与复盘要点

  • 误区一:把 TPM 当成“加密磁盘”。 TPM 不存储你的业务数据,它保护的是密钥和度量状态,数据加密仍由 LUKS、BitLocker 等完成。
  • 误区二:忽略恢复路径。 PCR 变化、固件升级、主板更换都会导致解封失败。必须准备恢复口令或恢复密钥,否则可能永久失去数据访问能力。
  • 误区三:授权值随意设置。 Owner 层级授权值遗忘后,部分对象无法清理;字典攻击锁定触发后,需要等待或重置,影响自动化流程。
  • 误区四:不做日志留存。 解封失败时,PCR 值、策略摘要、授权会话信息是定位问题的关键证据,应在部署阶段就纳入日志采集。
在生产环境启用 TPM 密封前,务必在测试机完成“断电重启、内核升级、固件更新、磁盘迁移”四类演练,确认恢复流程可用,再推广到关键业务。