我想要拥有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 库。
但我收到的是错误信息:
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
据我所知,对于 TPM 1.2 这是不可能的,因为“硬编码”哈希算法,但对于 TPM 2.0(我拥有的),我可以为 PCR 库选择几种算法。
那么,你能帮我解决这个问题吗?
答案1
这只能通过系统固件来改变——tpm2_pcrallocate 所做的操作需要“平台”授权,这意味着它只能由系统固件执行,而不能由操作系统执行。
(在 /bin 中放置此类命令的目的是为了与以完全空状态启动的软件 TPM 模拟器一起使用 - 例如,QEMU 可以在启动 VM 之前充当“平台”角色来配置 swtpm - 但它们对于物理 TPM 毫无用处,因为在任何用户控制的代码启动时,真实的固件已经初始化了 TPM。
除此之外,一旦系统启动并运行,更改 PCR 分配就毫无意义了,因为你只会得到全零的 PCR,而没有记录任何事件;PCR 值之所以有用,是因为固件和引导加载程序记录了事件前操作系统启动。
似乎 TCG EFI 协议(可用于引导加载程序)具有设置活动PCRBanks()该函数应该告诉固件从下次重启开始分配不同的 PCR 库,但我不知道有任何现有工具可以让您方便地调用该函数。
据我所知,对于 TPM 1.2 这是不可能的,因为“硬编码”哈希算法,但对于 TPM 2.0(我拥有的),我可以为 PCR 库选择几种算法。
是的,但不是——这意味着 API 和数据结构支持算法灵活性,允许TPM 支持非 SHA1 算法(和/或同时支持多种算法)——例如,TCG 事件日志中的“扩展值”字段已从固定的 20 字节字段更改为可变长度哈希值的可变长度数组——但是,这并不一定意味着可用算法的数量必须多于一个。
TCG“TPM 2.0 的 PC 客户端平台配置文件”规范列出了两种强制实施的哈希算法,但固件会在启动时选择实际启用哪些算法(并且允许 TPM 支持的活动库数量少于算法数量)。请注意,SHA-1 不再是“强制”算法 - 它已被 SHA-384 取代较新的版本因此,仅提供 SHA-256 而不提供 SHA-1 的系统是完全符合规范的。