You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于IMA测量日志重建PCR寄存器:全零模板哈希处理咨询

IMA测量日志全零模板哈希的PCR重建问题

我有一份Linux IMA测量日志,正在尝试重建PCR寄存器用于远程验证。已知PCR扩展规则为PCR := SHA1(PCR || data),即把PCR旧值与数据拼接后哈希,将结果存入PCR。但日志中部分模板哈希为0000000000000000000000000000000000000000,我尝试了三种方法都无法得到正确的最终PCR值,想了解IMA实际如何处理这类测量:

  • 将0000000000000000000000000000000000000000直接扩展到PCR
  • 跳过此类条目
  • 手动计算对应数据的SHA1模板哈希再扩展

测量日志如下:

10 4347bff321748edf90d2dc40edaa1b54c7eaaa16 ima-ng sha256:de2e7b1bc7a2aed4e5866d3655d1041206c27caf376ee81bfc4012e8225e0e7c /usr/share/ca-certificates/mozilla/UCA_Global_G2_Root.crt
10 cfa34f58e8319181173d9b9f6345aa3a367702d3 ima-ng sha256:7aa7e87cb29fb7303d8d2402c98b3855b45859640211773c279f0c046e2071c6 /usr/share/ca-certificates/mozilla/E-Tugra_Global_Root_CA_ECC_v3.crt
10 7dd199a752c6484ee8d3c11337dcd8b49f82fa6e ima-ng sha256:05161ad2ac04a0df956ef803e127aa877cc5131e0a727ed8e5de43f02e8868c4 /usr/share/ca-certificates/mozilla/DigiCert_TLS_ECC_P384_Root_G5.crt
10 e9edbe721d1e0c27163c79378a6867a4d4a36ffd ima-ng sha256:2b0b73d3dc775b865bd38a4400bf5020b3c1df3ccb171db98bfcaafed8a49470 /home/verifier/code_examples/cpp-examples/.git/config
10 e5ce41ea6573d2744fb325613c2c8c4ad9b7190b ima-ng sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 /home/verifier/code_examples/cpp-examples/.git/objects/pack/tmp_pack_qM1wJZ
10 0000000000000000000000000000000000000000 ima-ng sha256:0000000000000000000000000000000000000000000000000000000000000000 /home/verifier/code_examples/cpp-examples/.git/objects/pack/tmp_pack_qM1wJZ
10 0000000000000000000000000000000000000000 ima-ng sha256:0000000000000000000000000000000000000000000000000000000000000000 /home/verifier/code_examples/cpp-examples/.git/objects/pack/tmp_pack_qM1wJZ
10 0000000000000000000000000000000000000000 ima-ng sha256:0000000000000000000000000000000000000000000000000000000000000000 /home/verifier/code_examples/cpp-examples/.git/objects/pack/tmp_pack_qM1wJZ
10 bd22836913d6df07e8467fd64c58f02473203884 ima-ng sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 /home/verifier/code_examples/cpp-examples/.git/objects/pack/tmp_idx_3tSjWT
10 65a631f51219253d424893ef413f1064bb347b05 ima-ng sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 /home/verifier/code_examples/cpp-examples/.git/objects/pack/pack-b1d33a47772de5cd9a6ba6149ded5aa281790754.keep
正确处理方式

这些全零模板哈希条目,是IMA处理临时文件(比如日志里的tmp_pack_qM1wJZ这类git临时打包文件)时的特殊情况——这类文件在测量时可能已被删除或无法访问,导致IMA无法生成有效模板哈希,只能记录全零值。

IMA对这类条目的处理逻辑是:直接使用日志中记录的全零哈希值执行PCR扩展,但你之前操作失败,大概率是误解了IMA扩展PCR时用的data是什么——IMA并非单独扩展模板哈希,而是扩展整个测量记录按模板规则拼接后的结构化二进制数据。

以ima-ng模板为例,扩展PCR的二进制数据由以下字段拼接而成:

  • 测量类型(固定标识值)
  • 模板哈希(日志第二列值)
  • 文件哈希(日志第四列的sha256值)
  • 文件路径(日志第五列内容)

你需要严格按照模板格式拼接这些字段为二进制数据,再通过SHA1(当前PCR值 || 拼接后的二进制数据)计算新PCR值,而非仅使用模板哈希单独扩展。

另外,日志中重复的全零条目必须逐一处理,不能跳过——IMA每条测量记录都会触发一次PCR扩展,哪怕哈希是全零。

总结重建步骤:

  1. 初始化PCR为SHA1初始值:0000000000000000000000000000000000000000
  2. 遍历每条测量日志:
    • 按ima-ng模板格式,将该条所有字段拼接成二进制数据
    • 计算SHA1(当前PCR值 || 拼接后的二进制数据),将结果作为新PCR值
    • 遇到全零模板哈希条目时,直接使用日志记录的全零值完成上述操作,不得跳过或替换
  3. 遍历完成后得到的PCR值即为最终结果

内容的提问来源于stack exchange,提问作者Haris Saeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:09:58