引言
本次实验内容主要熟悉tpm2-tools相关功能命令的使用。详细命令使用见:
https://tpm2-tools.readthedocs.io/en/latest/https://tpm2-tools.readthedocs.io/en/latest/
一、实验准备
1、TPM服务
systemctl start tpm-server.service
systemctl status tpm-server.service
2、tpm2-abrmd服务
systemctl start tpm2-abrmd.service
systemctl status tpm2-abrmd.service
3、测试
tpm2_pcrlist
输出以上内容,证明服务启动成功。
二、文件的加解密
1、设置TPM相关密码
tpm2_takeownership -o ownerpass -e endorsepass -l lockpass
ownership: 对TPM的操作权限的拥有者,ownerpass是操作者对TPM设备进行操作的密码,endorsepass是使用TPM进行背书/签名的密码,lockpass是对TPM进行锁定。
tpm2_takeownership -o 1 -e 2 -l 3
分别对三个hierarchy设置密码。
2、创建主键对象,即主密钥
对于tpm密钥的使用在概念上是一个树形的结构,创建密钥是由父密钥创建。所以需要选择一个hierarchy并且在这个hierarchy上创建一个主密钥,之后再创建子密钥进行使用。
tpm2_createprimary -H e -K 11 -g 0x000b -G 0x0001 -C po.ctx -P 2
该命令中,选择在背书hierarchy上创建主键,该主键密码设置为11,-g,-G为设置密钥算法。最后将密钥保存在po.ctx中,并验证该hierarchy的密码为2。结果如下:
3、创建密钥
在上面创建的主密钥之下,我们使用该主密钥创建一个子密钥,也就是我们真正使用的密钥。该密钥类型为RSA非对称密钥。
tpm2_create -c po.ctx -P 11 -K 111 -g 0x000b -G 0x0001 -u key.pub -r key.priv
该命令中,选取上面创建的po.ctx密钥,并验证该密钥密码为11,设置此密钥的密码为111,之后指定密钥算法。最后将该非对称密钥的公钥保存在key.pub中,私钥保存在key.priv中。结果如下:
4、加载密钥,生成密钥信息
在生成子密钥之后,我们需要将该子密钥加载至tpm中。
tpm2_load -c po.ctx -P 11 -u key.pub -r key.priv -n key.name -C obj.ctx
该命令中选择主密钥po.ctx验证密码11,将生成的私钥公钥加载到tpm中,并生成密钥信息obj.ctx
5、加密文件
tpm2_rsaencrypt -c obj.ctx -o data.encrypt text.txt
使用该命令加密文件,并将加密后的信息保存在data.encrypt中。可以看到文件夹内生成了文件。
查看文件内容为乱码。
6、解密文件
tpm2_rsadecrypt -c obj.ctx -I data.encrypt -P 111 -o data.decrypt
使用该命令进行解密,需要验证该密钥的密码为111,并将解密后的文件保存在data.encrypt中。
查看文件内容为原文件内容。