【问题标题】:Get a persistant string in and out of the TPM2 module从 TPM2 模块中获取持久字符串
【发布时间】:2019-09-20 13:21:13
【问题描述】:

我正在尝试通过电源循环在 TPM2 中保存少量数据。这样这个小字符串只会被绑定到一台特定的机器上。这是我的工作。

# put data in file that is to be sealed
echo "my sealed data" > seal.dat

# create a primary key
tpm2_createprimary -c primary.ctx

# create a child key in public and private parts
tpm2_create -C primary.ctx -u obj.pub -r obj.priv

# create a sealed object
tpm2_create -C primary.ctx -i seal.dat -u obj.pub -r obj.priv

# load the private and public portions into the TPM
tpm2_load -C primary.ctx -u obj.pub -r obj.priv -c key.ctx

# unseal the data
tpm2_unseal -c key.ctx

但如果我输入电源循环后: 'tpm2_unseal -c key.ctx' 我收到以下错误:

警告:esys:src/tss2-esys/api/Esys_ContextLoad.c:279:Esys_ContextLoad_Finish() 收到 TPM 错误 错误:esys:src/tss2-esys/api/Esys_ContextLoad.c:93:Esys_ContextLoad() Esys 完成错误代码 (0x000001df) 错误:Esys_ContextLoad(0x1DF) - tpm:parameter(1):完整性检查失败 错误:无效的项目句柄授权 错误:无法运行 tpm2_unseal

如果有什么不同,我正在使用 tpm_server(模拟器)。

那么将一个小字符串加载到 tpm2 并具有断电持久性的最佳方法是什么?

【问题讨论】:

    标签: tpm


    【解决方案1】:

    密封对象不会在 TPM 的 NV 内存中存储任何内容。它使用只有 TPM 可以访问的密钥加密数据,但它保存在文件系统上的两个文件中 - TPM 中没有保存任何内容。

    要在 TPM 的内存中存储一​​些数据,你可以定义内存索引,然后保存到它,例如:

    tpm2_nvdefine -Q $nv_test_index -C o -s 32 -a "ownerread|policywrite|ownerwrite"
    echo "please123abc" > nv.test_w
    tpm2_nvwrite -Q $nv_test_index -C o -i nv.test_w
    

    然后再读回数据:

    tpm2_nvread -Q $nv_test_index -C o -s 32 -o 0
    

    (来自tpm2-tools test script的示例代码)

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 1970-01-01
      • 2011-06-20
      • 2013-03-29
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多