可信度量 Root of Trust for Measurement (RTM)
概念
可信链
- 可信链是由可信根开始,通过逐层可信扩展的方式实现
首先可信根验证系统硬件和固件的可信性,用固件的验证机制验证操作系统引导程序的可信性,用操作系统引导程序验证操作系统安全部件的可信性,由操作系统安全部件为应用提供可信运行环境,以在系统中构建一个完整的信任链条。
可信扩展
静态扩展一般在系统启动阶段进行,由当前可信部件载入下一个可信部件,度量其可信性
- 动态扩展在系统运行阶段进行,在系统运行过程中载入一个部件生成新任务后,保证载入过程可信,又要保证任务正常运行过程中与其交互的任务可信
平台配置寄存器 Platform Configuration Register (PCR)
A Platform Configuration Register (PCR) is a 160-bit storage location for discrete integrity
measurements.
平台配置寄存器是一个 160-bit 的存储区域,作用是离散完整性度量。
- PCR 在可信度量过程中用于保存 Hash 计算结果,每次写入按照以下形式:
- TPM 需要提供至少 16 个独立的 PCR, PCR0 ~ PCR15
在可信扩展过程中,依次向 PCR 写入度量值,则系统可信链中任意一个环境度量值与预期不一致时,PCR 值均将无法返回到预期序列。所以,通过 PCR 当前值与预期序列的比对,即可判断系统可信链是否如预期进行扩展。这就是可信度量的基本原理
相关变量和指令
pcrReset
TRUE : 在 TPM_Startup() 时,将相应 PCR 重置为 0xFF
FALSE : 在 TPM_Startup() 时,将相应 PCR 重置为 0x00
TPM_Extend()
向指定索引 PCR 添加新度量值
-
TPM_PCRRead()
-
TPM_Quote()
-
TPM_PCR_Reset()
对于可重置的 PCR,设置为启动时的初始值
- 需要 pcrReset 为 TRUE
- 如果 stany.flags.TOSPresent 为 TRUE,则重置为 0, 否则重置为 0xff