在TPM2模块中进出持久性字符串

时间:2019-09-20 13:21:13

标签: tpm

我正在尝试在关机后再开机中将少量数据保存在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并具有断电持久性的最佳方法是什么?

1 个答案:

答案 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的示例代码)