我想在sha1
和sha256
银行中拥有所有 PCR(0-23),但现在我只sha256
设置并且sha1
为空但存在,tpm2_pcrread
输出:
sha1:
sha256:
0 : 0xC373FA10837B62B48E9CA87E5F31440FCDC8F5C51FB1BF0FC72D4E241E680ABC
1 : 0x6182DB76DAE2E1F0540C5EFAB413141D2F1957BA4F1344087A744CD36B34D1A1
2 : 0x3D458CFE55CC03EA1F443F1562BEEC8DF51C75E14A9FCF9A7234A13F198E7969
3 : 0x3D458CFE55CC03EA1F443F1562BEEC8DF51C75E14A9FCF9A7234A13F198E7969
4 : 0x30FBEFFB0D106992F28146DEDF62A2154164585F9606ACBDAB9FD4FA89806FD9
5 : 0x514DDD32584089DC386AD6C28FD03B70D42AAE7B7029A0899A9287BE6646D7EB
6 : 0x3D458CFE55CC03EA1F443F1562BEEC8DF51C75E14A9FCF9A7234A13F198E7969
7 : 0x65CAF8DD1E0EA7A6347B635D2B379C93B9A1351EDC2AFC3ECDA700E534EB3068
8 : 0x0000000000000000000000000000000000000000000000000000000000000000
9 : 0x0000000000000000000000000000000000000000000000000000000000000000
10: 0xA63AFE1C978C162B2D0BCEC08ABC0D1F31D7988D7A9F3CC0AB9A48A34399573A
11: 0x0000000000000000000000000000000000000000000000000000000000000000
12: 0x0000000000000000000000000000000000000000000000000000000000000000
13: 0x0000000000000000000000000000000000000000000000000000000000000000
14: 0x0000000000000000000000000000000000000000000000000000000000000000
15: 0x0000000000000000000000000000000000000000000000000000000000000000
16: 0x0000000000000000000000000000000000000000000000000000000000000000
17: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
18: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
19: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
20: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
21: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
22: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
23: 0x0000000000000000000000000000000000000000000000000000000000000000
我试过了tpm2_pcrallocate
,因为这里默认情况下它会分配sha1
和sha256
:
如果未指定分配,则分配 PCR 为 0 - 23 的 SHA1 和 SHA256 bank。
但我收到了错误消息:
WARNING:esys:src/tss2-esys/api/Esys_PCR_Allocate.c:321:Esys_PCR_Allocate_Finish() Received TPM Error
ERROR:esys:src/tss2-esys/api/Esys_PCR_Allocate.c:114:Esys_PCR_Allocate() Esys Finish ErrorCode (0x000009a2)
ERROR: Could not allocate PCRs.
ERROR: Esys_PCR_Allocate(0x9A2) - tpm:session(1):authorization failure without DA implications
ERROR: Unable to run tpm2_pcrallocate
AFAIK,对于 TPM 1.2,这是不可能的,因为“硬编码”哈希算法,但对于 TPM 2.0(我有),我可以为 PCR 库选择几种算法。
那么,你能帮我解决这个问题吗?
这只能通过系统固件进行更改——tpm2_pcrallocate 完成的操作需要“平台”授权,这意味着它只能由系统固件执行,而不能由操作系统执行。
(在 /bin 中包含此类命令的目的是与以完全空状态启动的软件 TPM 仿真器一起使用 - 例如,QEMU 可能充当“平台”角色以在启动 VM 之前配置 swtpm - 但它们对在任何用户控制的代码启动时,实际固件已经初始化 TPM 的物理 TPM。
除此之外,一旦系统已经启动并运行,更改 PCR 分配将毫无意义,因为您只会获得全零 PCR,而没有记录任何事件;使 PCR 值有用的是在操作系统启动之前由固件和引导加载程序记录的事件。)
似乎 TCG EFI 协议(可用于引导加载程序)具有SetActivePcrBanks()函数,该函数应该告诉固件从下次重新启动开始分配不同的 PCR 组,但我不知道任何现有的工具可以让你方便地调用这个功能。
是,但不是——这意味着 API 和数据结构支持算法灵活性,允许TPM 支持非 SHA1 算法(和/或一次多个算法)——例如,“扩展值”字段TCG 事件日志已从固定的 20 字节字段更改为可变长度哈希的可变长度数组 - 但是,这并不一定意味着可用算法的数量必须超过一个。
TCG“用于 TPM 2.0 的 PC 客户端平台配置文件”规范列出了两种哈希算法作为强制实施,但它是固件选择在启动时实际启用哪些算法(并且允许 TPM 支持比算法更少的活动银行) . 请注意,SHA-1 不再是“强制性”算法——在最新版本的规范中,它已被 SHA-384 取代,因此拥有仅提供 SHA-256 但不提供 SHA-1 的系统完全符合要求。