可信度量 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 计算结果,每次写入按照以下形式:

image.png

  • TPM 需要提供至少 16 个独立的 PCR, PCR0 ~ PCR15
  • 在可信扩展过程中,依次向 PCR 写入度量值,则系统可信链中任意一个环境度量值与预期不一致时,PCR 值均将无法返回到预期序列。所以,通过 PCR 当前值与预期序列的比对,即可判断系统可信链是否如预期进行扩展。这就是可信度量的基本原理

    相关变量和指令

    pcrReset

  • TRUE : 在 TPM_Startup() 时,将相应 PCR 重置为 0xFF

  • FALSE : 在 TPM_Startup() 时,将相应 PCR 重置为 0x00

    TPM_Extend()

  • 向指定索引 PCR 添加新度量值

  • 将原始值与新的摘要值拼接后计算新的 PCR 值

    TPM_PCRRead()

  • 读取指定索引的 PCR 值

    TPM_Quote()

  • 引用 PCR,对于指定的 PCRs,返回给定密钥的签名

    TPM_PCR_Reset()

  • 对于可重置的 PCR,设置为启动时的初始值

  • 需要 pcrReset 为 TRUE
  • 如果 stany.flags.TOSPresent 为 TRUE,则重置为 0, 否则重置为 0xff