证据收集:平台配置寄存器(PCR)、度量日志、引用数据、AK证书

远程证明说白了就是一场「自证清白」的过程。你的设备得拿出四样东西:PCR值、度量日志、引用数据、AK证书。缺一样,验证方就没法信任你。

我刚开始接触远程证明时,总觉得PCR是最重要的。后来踩过几次坑才明白——这四样东西是互相咬合的齿轮,少一个都转不起来。

4.1 平台配置寄存器(PCR)——信任链的「指纹」

PCR是TPM内部的一组寄存器。它们只做一件事:记录度量值。而且只能扩展(extend),不能直接写。

扩展操作是这样的:新值进来,跟旧值拼在一起,做一次SHA-256哈希,结果写回去。所以PCR的最终值,包含了从启动到现在的所有度量历史。

关键点:PCR的值是「链式哈希」的结果。你没法从最终值反推出中间过程,但你可以用度量日志重放一遍,看能不能得到同样的PCR值。

常见的PCR用途:

  • PCR 0-7:固件、BIOS、Boot Loader的度量
  • PCR 8-15:操作系统内核、驱动、系统服务的度量
  • PCR 16-23:应用层、虚拟化、自定义用途

我在项目中遇到过一个问题:某台服务器的PCR 7总是跟预期值对不上。查了半天,发现是BIOS里有个安全启动选项没开。你看,PCR就是一面照妖镜,硬件配置变了它立刻翻脸。

我的习惯:排查PCR不一致时,先看PCR 0-4。如果这几个都对了,再往下查。因为底层固件错了,上层再怎么折腾都没用。

4.2 度量日志——PCR的「解释器」

PCR值是一串哈希,你没法直接看出它代表什么。度量日志就是PCR的说明书——它记录了每一次扩展操作的具体内容:谁发起的、度量了什么、结果是什么。

验证方拿到度量日志后,会做两件事:

  1. 按日志记录的顺序,重新计算一遍PCR值
  2. 把计算结果跟TPM报告的PCR值对比

如果对不上,说明日志被篡改了,或者度量过程出了问题。

注意:度量日志是软件生成的,存在被篡改的风险。所以验证方必须用PCR来校验日志的完整性。这就是为什么PCR和日志必须一起提供。

我曾经遇到一个案例:客户说远程证明总是失败,日志和PCR对不上。我让他们把日志导出来一看——日志里有一条记录的时间戳是1970年1月1日。嗯,RTC电池没电了,日志时间戳全乱了。虽然哈希值没错,但验证方的时间校验没通过。

4.3 引用数据——「白名单」

引用数据就是「好」的度量值。验证方手里有一份清单,里面记录了所有可信组件的预期PCR值。比如:

组件 版本 预期PCR值
BIOS v2.3.1 a1b2c3d4...
Boot Loader GRUB 2.06 e5f6g7h8...
内核 Linux 5.15 i9j0k1l2...

验证方把设备报告的PCR值跟引用数据对比。匹配上了,说明设备运行在可信状态。

引用数据怎么来的?通常来自:

  • 设备出厂时的黄金镜像度量
  • 软件供应商提供的签名清单
  • 组织内部的安全基线

避坑指南:我曾经见过一个团队,引用数据半年没更新。结果新版本的内核度量值变了,所有设备都被判定为「不可信」。引用数据必须跟软件版本同步维护,这是很多人容易忽略的。

4.4 AK证书——身份的「身份证」

AK(Attestation Key)是TPM里的一对密钥。私钥永远不出TPM,公钥通过证书的形式发布。AK证书的作用很简单:证明「我是这台设备」。

验证方拿到AK证书后,会做三件事:

  1. 验证证书链是否可信(通常由TPM厂商或CA签发)
  2. 确认证书没有被吊销
  3. 用证书里的公钥验证远程证明签名的有效性

AK证书跟普通证书最大的区别:它绑定了TPM的唯一标识(EK公钥哈希)。所以一张AK证书只能用于一台设备。

核心逻辑:AK证书保证「你是谁」,PCR保证「你是什么状态」,度量日志保证「过程可追溯」,引用数据保证「结果可预期」。四者缺一不可。

4.5 四者的协作关系

我画了一张图,帮你理清这四样东西怎么配合:

远程证明证据四件套协作关系 TPM 安全芯片 PCR 寄存器 存储度量哈希 度量日志 记录扩展过程 AK 证书 身份证明 引用数据 预期白名单 远程验证方 验证方用AK证书确认身份,用PCR+日志校验完整性,用引用数据判定可信状态

你看这张图就清楚了:TPM是源头,PCR、日志、AK证书是它产出的三份证据。引用数据是验证方自己维护的「参考答案」。验证方拿到四样东西后,交叉校验,最终给出「可信」或「不可信」的结论。

4.6 常见故障模式

根据我的经验,证据收集阶段最容易出问题的点:

故障现象 可能原因 排查方向
PCR值全对,但验证失败 AK证书过期或吊销 检查证书有效期和CRL
PCR值对不上 固件版本不一致 对比BIOS/固件版本
日志重放结果不对 日志被截断或篡改 检查日志完整性签名
引用数据匹配失败 软件版本更新了 更新引用数据库

重要提醒:千万别把AK证书跟EK证书搞混。EK证书是TPM出厂时预置的,用于证明TPM身份。AK证书是运行时生成的,用于远程证明。用错证书,验证方直接拒绝。

嗯,证据收集这块就讲到这里。你想想看,这四样东西其实就是一个完整的证据链:身份、状态、过程、标准。下次排查远程证明故障时,按这个顺序查一遍,八成能找到问题。