我正在尝试在关机后再开机中将少量数据保存在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并具有断电持久性的最佳方法是什么?
答案 0 :(得分:0)
密封对象不会在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的示例代码)