我正在尝试在电源周期内在 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:参数 (1(:完整性检查失败 错误:无效的项目句柄授权 错误:无法运行tpm2_unseal
我正在使用tpm_server(模拟器(,如果这有什么不同的话。
那么,将小字符串加载到 tpm2 中并具有断电持久性的最佳方法是什么?
密封对象不会在 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 工具测试脚本的示例代码(