如何验证存储在 TPM 中的密钥的真实性?如何验证使用命令“mokutil --'xx'”(在 Ubuntu 中)查看的 PK、KEK、db 和 dbx 密钥是用于安全启动的密钥和存储在 TPM 中的密钥?
答案1
您询问的是两个完全不同的功能:
安全启动密钥存储为 EFI 变量。它们受以下固件保护:一些方式(这样,如果没有完整的私有 PK,就不可能更改 KEK,如果没有 KEK,就不可能更改数据库)——但它们不一定受到 TPM 的保护。实现可能使用 TPM 提供的 NVRAM,也可能使用其他防篡改 NVRAM,或者可能比较懒惰,使用通用 EFI 变量 NVRAM。
TPM 存储通用密钥。它可以将数据密封到当前系统状态,包括各种 EFI 变量的哈希值。例如,更改 KEK 或数据库会改变写入 TPM PCR 的哈希值,从而使所有 PCR 锁定的数据不再可访问。(更改启动顺序等也是如此。)但是,TPM 是一个独立芯片(或固件功能),其功能不依赖于安全启动。
这两个功能相互作用,但并不相互依赖。事实上,许多具有安全启动功能的系统甚至没有 TPM。同样,许多具有 TPM 的系统没有安全启动功能,许多系统甚至根本没有 UEFI。(只有 TPM 2.0 需要 UEFI;TPM 1.2 不需要。)