证据收集:平台配置寄存器(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的说明书——它记录了每一次扩展操作的具体内容:谁发起的、度量了什么、结果是什么。
验证方拿到度量日志后,会做两件事:
- 按日志记录的顺序,重新计算一遍PCR值
- 把计算结果跟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证书后,会做三件事:
- 验证证书链是否可信(通常由TPM厂商或CA签发)
- 确认证书没有被吊销
- 用证书里的公钥验证远程证明签名的有效性
AK证书跟普通证书最大的区别:它绑定了TPM的唯一标识(EK公钥哈希)。所以一张AK证书只能用于一台设备。
核心逻辑:AK证书保证「你是谁」,PCR保证「你是什么状态」,度量日志保证「过程可追溯」,引用数据保证「结果可预期」。四者缺一不可。
4.5 四者的协作关系
我画了一张图,帮你理清这四样东西怎么配合:
你看这张图就清楚了:TPM是源头,PCR、日志、AK证书是它产出的三份证据。引用数据是验证方自己维护的「参考答案」。验证方拿到四样东西后,交叉校验,最终给出「可信」或「不可信」的结论。
4.6 常见故障模式
根据我的经验,证据收集阶段最容易出问题的点:
| 故障现象 | 可能原因 | 排查方向 |
|---|---|---|
| PCR值全对,但验证失败 | AK证书过期或吊销 | 检查证书有效期和CRL |
| PCR值对不上 | 固件版本不一致 | 对比BIOS/固件版本 |
| 日志重放结果不对 | 日志被截断或篡改 | 检查日志完整性签名 |
| 引用数据匹配失败 | 软件版本更新了 | 更新引用数据库 |
重要提醒:千万别把AK证书跟EK证书搞混。EK证书是TPM出厂时预置的,用于证明TPM身份。AK证书是运行时生成的,用于远程证明。用错证书,验证方直接拒绝。
嗯,证据收集这块就讲到这里。你想想看,这四样东西其实就是一个完整的证据链:身份、状态、过程、标准。下次排查远程证明故障时,按这个顺序查一遍,八成能找到问题。