提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
在安装好的TPM模拟环境基础上,通过搜索引擎查找tpm2-tools提供的命令和使用方法,完成以下任务:
(1) 利用tpm2-tools提供的hash 函数生产文件度量值。
(2) 利用tpm实现对文件的加解密。
(3) 利用TPM实现对文件进行签名,实现对文件完整性认证。
实验环境类型:Linux
Linux版本:Ubuntu 16.04.7 LTS
内核版本:4.4.0-210-generic
tpm模拟器:ibmtpm 1332
tpm协议栈中:tpm2-tss 2.1.0
tpm守护进程:tpm2-abrmd 2.0.2
tpm2 tools 3.x
systemctl daemon-reload
systemctl start tpm-server.service
service tpm-server status
效果如图:
systemctl daemon-reload
systemctl start tpm2-abrmd.service
service tpm2-abrmd status
输入以下命令打印pcr情况,查看输出是否正常:
tpm2_pcrlist
利用tpm-tools中生成文件hash值的命令:tpm2_hash -H e -g sha1 -o hash.bin -t ticket.bin data.txt
对某数据文件进行度量,(即生成该文件的hash值,也就是度量值),然后修改该文件,再进行度量,对比修改前后的文件哈希值可以发现,它们是不同的。也就是说,修改文件会导致文件度量值发生改变。
①用vim命令创建一个data.txt数据文件,在data.txt数据文件中写入任意你喜欢的内容,用于实验:
注:i
插入。:wq
保存并退出
vim data.txt
此处数据内容为:
Does Tartaglia reprint today?
②cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上,此处显示文件内容:
cat data.txt
③用以下命令生成data.txt数据文件的度量值:
tpm2_hash -H e -g sha1 -o hash.bin -t ticket.bin data.txt
vim data.txt
数据修改为:
Does Albedo reprint today?
⑤显示修改后文件内容:
cat data.txt
tpm2_hash -H e -g sha1 -o hash.bin -t ticket.bin data.txt
为了能够在不可信的存储上安全存储数据,利用tpm可信根,生成加密秘钥来对数据进行加密。利用模拟器实现整个加解密过程。
①利用takeownership实现对TPM所有权的访问认证设置。利用TPM所有权来实现证明现有身份,通过验证机密的知识来对所有权进行身份验证。其中-o 为作为所有者密码,-e为认可密码,-l为锁定密码。
tpm2_takeownership -o 1 -e 2 -l 3
②创建主键对象,以使用创建的对象生成秘钥。利用-K后参数11作为对象密码,其秘钥为RSA秘钥且哈希函数为SHA256。并将对象保存在文件po.ctx。其中-p后为认可密码。
tpm2_createprimary -H e -K 11 -g 0x000b -G 0x0001 -C po.ctx -P 2
③在主键背景下,创建一个RSA秘钥,产生公钥和私钥。-p为主键的对象密码,-K为子类密码,这里设置为11。公钥保存在key.pub中,私有秘钥存为key.priv。
tpm2_create -c po.ctx -P 11 -K 111 -g 0x000b -G 0x0001 -u key.pub -r key.priv
通过命令ls
查看目录,可以看到公钥key.pub和私有秘钥key.priv已经创建完毕:
④利用tp2_load命令使用认证秘钥加载创建的RSA秘钥,生成秘钥加载的对应信息obj.ctx。
tpm2_load -c po.ctx -P 11 -u key.pub -r key.priv -n key.name -C obj.ctx
⑤利用tpm2_rsaencrypt加密函数利用创建的秘钥对第一个实验中的文件data.txt进行加密,生成加密文件data.encrypt:
tpm2_rsaencrypt -c obj.ctx -o data.encrypt test.txt
⑥最后利用tpm2_rsadecrypt解密函数对加密的输出进行解密,生成解密后的文件data.decrypt。
tpm2_rsadecrypt -c obj.ctx -I data.encrypt -P 111 -o data.decrypt
⑦用以下命令查看三个文件:
cat data.decrypt
cat data.txt
cat data.encrypt
从上图可以看出,数据文件data.txt和解密后的data.decrypt内容一致,而data.encrypt中则是加密后的乱码,实验成功。
①创建主键对象:
PS:如果这步报错了可以重启一下虚拟机,虽然但是不得不承认有的时候重启可以解决很多问题:),重启之后记得再做下准备工作!
tpm2_createprimary -H e -K 11 -g 0x000b -G 0x0001 -C po.ctx -P 1
③生成RSA秘钥:
tpm2_create -c po.ctx -P 11 -K 111 -g 0x000b -G 0x0001 -u key.pub -r key.priv
④利用tp2_load命令使用认证秘钥加载创建的RSA秘钥,生成秘钥加载的对应信息obj.ctx1:
tpm2_load -c po.ctx -P 11 -u key.pub -r key.priv -n key.name -C obj.ctx
⑤生成消息文件:
echo “my message”>message.dat
⑥使用tpm2_sign利用加载的RSA秘钥对消息文件进行签名。生成签名文件sig.rssa。
tpm2_sign -c obj.ctx -P 111 -g 0x000b -s sig.rssa -m message.dat
⑦使用tmp2_verfysignature函数对文件和签名信息的一致性进行确认。
tpm2_verifysignature -c obj.ctx -g 0x000b -m message.dat -s sig.rssa -t tk.sig
⑧ 将message.dat文件改名为messagel.dat,完整性认证成功:
ls
rm tk.sig
cat message.dat
mv message.dat messagel.dat
tpm2_verifysignature -c obj.ctx -g 0x000b -m messagel.dat -s sig.rssa -t tk.sig
⑨更改message.date文件的内容,完整性认证失败:
cat messagel.dat
mv messagel.dat message.dat
echo "change message" > message.dat
cat message.dat
rm tk.sig
tpm2_verifysignature -c obj.ctx -g 0x000b -m message.dat -s sig.rssa -t tk.sig
周一,好困;早八 ,好累 ;中午,好饿。:)