目录
使用tpm2_createpolicy 基于pcr创建简单的授权策略密封数据
前言
以下部分内容来自我对tpm2-tools API文档、《A Practical Guide to TPM 2.0》的翻译和理解
关于TPM2基本原理、特性、密钥、层次、PCR等内容,TPM-JS这个项目有较详细的说明:
TPM-JShttps://google.github.io/tpm-js/#pg_welcome想自学以及更深入了解的同学可以参考tpm2-tools doc :Home - tpm2-tools
TPM 的外部编程接口规范: https ://trustedcomputinggroup.org/tpm-library-specification/
TPM2.0实用指南 《A Practical Guide to TPM 2.0》:
https://link.springer.com/content/pdf/10.1007/978-1-4302-6584-9.pdf
使用策略密封数据
了解完前面的授权和会话,现在再了解通过策略启动授权和会话来密封数据。
基于策略的会话授权也是可以密封数据,具体命令工具包含tpm2_policypassword、tpm2_policysecret 、tpm2_createpolicy、tpm2_policypcr、tpm2_policysigned、tpm2_ticket等。
使用tpm2_policypassword密码策略密封数据
在此使用密码和tpm2_policypassword密码策略密封数据,使用 TPM 对象明文身份验证值进行身份验证解封数据。
具体TPM命令流程如下:
1.创建密码策略
tpm2_startauthsession -S session.dat
tpm2_policypassword -S session.dat -L policy.dat
tpm2_flushcontext session.dat
2.使用密码和密码策略创建对象
tpm2_createprimary -C o -c prim.ctx
tpm2_create -g sha256 -G aes -u key.pub -r key.priv -C prim.ctx -L policy.dat -p testpswd
3.使用明文密码输入进行身份验证
tpm2_load -C prim.ctx -u key.pub -r key.priv -n key.name -c key.ctx
echo "plaintext" > plain.txt
echo "secret iv file." >iv.ctx
tpm2_encryptdecrypt -c key.ctx -o encrypt.out -p testpswd plain.txt -t iv.ctx
tpm2_flushcontext session.dat
4.使用密码和策略进行身份验证
tpm2_startauthsession --policy-session -S session.dat
tpm2_policypassword -S session.dat -L policy.dat
tpm2_encryptdecrypt -d -c key.ctx -o decrypt.out encrypt.out -p session:session.dat+testpswd -t iv.ctx
tpm2_flushcontext session.dat
使用tpm2_policysecret 策略密封数据
tpm2_policysecret将密封对象的 auth 值与所有者层次结构密码相关联。步骤如下:
1、启动试用身份验证会话并运行tpm2_policysecret 以创建仅在提供所有者层次结构身份验证值时才能满足的策略。
2、启动一个真正的策略会话并提供所有者层次结构身份验证值。
3、 向unseal工具提供满足所有者层次结构身份验证的 policysecret 中的会话输入。
4、 如果策略得到满足,解封应该成功。
具体TPM命令流程如下:
1、生成绑定到所有者层次结构秘密的策略
tpm2_startauthsession -S session.ctx
tpm2_policysecret -S session.ctx -c o -L secret.policy
tpm2_flushcontext session.ctx
2、使用策略创建 TPM 对象
tpm2_createprimary -Q -C o -g sha256 -G rsa -c prim.ctx
tpm2_create -Q -g sha256 -u sealing_key.pub -r sealing_key.priv -i- \
-C prim.ctx -L secret.policy <<< "SEALED-SECRET"
tpm2_load -C prim.ctx -u sealing_key.pub -r sealing_key.priv \
-c sealing_key.ctx
3、满足策略并解封秘密
tpm2_startauthsession --policy-session -S session.ctx
tpm2_policysecret -S session.ctx -c o -L secret.policy
tpm2_unseal -p "session:session.ctx" -c sealing_key.ctx
输出:SEALED-SECRET
tpm2_flushcontext session.ctx
使用tpm2_createpolicy 基于pcr创建简单的授权策略密封数据
tpm2_createpolicy (1) - 基于多个启用的PCR banks的多个 PCR 索引值创建简单的断言授权策略。
具体TPM命令流程如下:
tpm2_createprimary -c primary.ctx -Q
tpm2_pcrread -Q -o pcr.bin sha256:0,1,2,3
tpm2_createpolicy -Q --policy-pcr -l sha256:0,1,2,3 -f pcr.bin -L pcr.policy
echo 'secret' | tpm2_create -C primary.ctx -L pcr.policy -i-\
-u seal.pub -r seal.priv -c seal.ctx -Q
tpm2_unseal -c seal.ctx -p pcr:sha256:0,1,2,3