2. TPM基础概念
在Linux系统中使用TPM(Trusted Platform Module,可信平台模块)之前,必须先建立一套清晰的“概念地图”。TPM并不是一个简单的加密芯片,而是一套围绕密钥、度量、授权和证明构建的可信计算基础设施。理解TPM 1.2与TPM 2.0的差异,以及PCR、EK、SRK、NV、密封、证明等核心术语,是后续驱动配置、设备节点访问和系统集成的必要前提。
一、TPM 1.2与TPM 2.0:从“单一规范”到“灵活框架”
TPM 1.2由TCG(Trusted Computing Group)在2003年前后制定,主要面向PC平台,采用固定的RSA算法和SHA-1哈希,命令集和授权模型相对僵化。TPM 2.0则是一次架构级重构,它不再绑定单一算法,而是通过算法敏捷性支持RSA、ECC、SHA-1、SHA-256、SHA-384等多种算法,并引入更丰富的授权策略和层次化密钥结构。
在Linux视角下,TPM 1.2通常对应/dev/tpm0,而TPM 2.0除了/dev/tpm0外,还常通过/dev/tpmrm0提供资源管理器接口。TPM 2.0的层次结构包括平台层次(Platform Hierarchy)、存储层次(Storage Hierarchy)、背书层次(Endorsement Hierarchy)和空层次(Null Hierarchy),不同层次承担不同职责,权限和持久化行为也各不相同。
| 对比维度 | TPM 1.2 | TPM 2.0 |
|---|---|---|
| 算法支持 | 以RSA、SHA-1为主 | RSA、ECC、SHA-1/256/384等,算法敏捷 |
| 密钥层次 | SRK为固定根密钥 | 多层级、多种子,支持Primary/Child密钥 |
| 授权模型 | OIAP/OSAP等较复杂 | 基于会话和策略的授权,更灵活 |
| NV存储 | 容量和索引有限 | NV索引更丰富,支持多种属性 |
| Linux接口 | /dev/tpm0 | /dev/tpm0、/dev/tpmrm0 |
二、核心术语:PCR、EK、SRK、NV、密封与证明
PCR(Platform Configuration Register)是TPM内部的一组寄存器,用于记录平台启动和运行过程中的度量值。PCR不能直接写入任意值,只能通过“扩展”操作更新:PCR_new = Hash(PCR_old || 度量值)。这种设计使得PCR值具有累积性和不可逆性,任何启动阶段的微小变化都会导致最终PCR值不同。Linux中可通过/sys/class/tpm/tpm0/pcr-sha256/查看PCR值。
EK(Endorsement Key)是TPM的背书密钥,通常在生产阶段注入,用于标识TPM身份。EK私钥永不出TPM,公钥可用于验证TPM的真实性。EK是建立信任链的起点,常用于远程证明场景。
SRK(Storage Root Key)是存储层次的根密钥,在TPM 1.2中固定存在,在TPM 2.0中通常作为存储层次的Primary Key存在。SRK用于保护下层密钥,形成密钥树。用户密钥通常由SRK或其它存储密钥加密后保存在磁盘上,使用时再加载进TPM。
NV(Non-Volatile)存储是TPM内部的非易失性存储空间,可用于保存证书、计数器、标志位或小段敏感数据。NV索引具有读写授权、PCR绑定等属性,适合存放平台配置信息或防回滚计数器。
密封(Sealing)是指将数据绑定到特定PCR状态后再加密存储。只有当PCR值恢复到指定状态时,TPM才允许解封。典型应用是磁盘加密:密钥被密封到PCR 0~7,只有正常启动路径才能解封。
证明(Attestation)是TPM向远程方证明自身状态的过程。包括EK证明、平台证明和密钥证明。远程方通过验证TPM签名和PCR值,判断平台是否可信。
三、典型应用场景与Linux集成要点
TPM 2.0在Linux中的典型应用包括:全盘加密(如systemd-cryptenroll配合LUKS2)、远程证明(如Keylime、IMA)、安全启动度量、SSH密钥保护、容器镜像签名验证等。以全盘加密为例,可将LUKS密钥密封到PCR 7(安全启动状态)和PCR 14(MOK策略),实现“只有正常启动的系统才能自动解锁磁盘”。
# 查看TPM设备与PCR值
ls -l /dev/tpm*
cat /sys/class/tpm/tpm0/pcr-sha256/7
# 使用systemd-cryptenroll绑定TPM2
systemd-cryptenroll --tpm2-device=auto \
--tpm2-pcrs=7+14 /dev/nvme0n1p3
# 查看NV索引
tpm2_nvreadpublic
提示:在Linux中访问TPM 2.0时,优先使用/dev/tpmrm0资源管理器接口,它能自动处理会话和上下文切换,避免多进程竞争导致TPM句柄耗尽。
四、常见误区与复盘
- 误区一:PCR值可以随意写入。PCR只能扩展,不能直接赋值。试图“恢复”PCR到某个值,只能通过相同度量序列重新扩展。
- 误区二:EK就是SRK。EK用于身份标识和证明,SRK用于密钥保护,二者用途和层次不同。
- 误区三:密封后数据放在TPM内部。密封后的数据通常保存在磁盘上,TPM只负责在PCR匹配时解封。
- 误区四:TPM 2.0一定兼容TPM 1.2命令。两者命令集不同,Linux驱动和用户态工具链需分别适配。
注意:在虚拟机或云环境中,TPM通常以vTPM形式提供。此时EK证书可能由虚拟化平台签发,远程证明的信任根与物理TPM不同,集成时需确认证明策略和证书链。