栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

tpm2-tools:简单密钥管理

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

tpm2-tools:简单密钥管理

实验步骤实验所用安装包如下:

  1. 启动环境

  1. 检查环境是否配置成功

创建SRK:tpm2_createprimary -C o -g sha256 -G rsa -c primary.ctxt -p test1_pswd

 ​​​​​​

在主系统上创建可复制的DSK

  • 使用tpm2_policycommand-code命令创建策略,策略选择是TPM2_CC_Duplicate

根据报错内容创建一个策略会话:tpm2_startauthsession -S session.dat

然后创建策略

tpm2_policycommandcode -S session.dat -L policy.dat TPM2_CC_Duplicate

接着根据报错内容执行 sudo apt install tpm2-tools

  • 接着上一步命令:tpm2_policyauthvalue -S session.dat -L policy.dat

  • 更新会话tpm2_flushcontext session.dat

5.创建DSK密钥

  • tpm2_create -C primary.ctxt -P test1_pswd -g sha256 -G rsa -r key.prv -u key.pub -c key.ctxt -p dsk_pswd -L policy.dat

  • 加载新的SRK,DSK将被复制到该新SRK下

tpm2_createprimary -C o -g sha256 -G ecc -c new_parent.ctxt

6.

  • 创建一个策略会话

tpm2_startauthsession --policy-session -S Policy_session.ctx

tpm2_policycommandcode -S Policy_session.ctx -L new_policy.dat TPM2_CC_Duplicate

然后更新会话

tpm2_flushcontext Policy_session.ctx

  • 创建 HMAC会话,使用DSK口令

tpm2_startauthsession --hmac-session -L Hmac_session.ctx -c key.ctxt

(根据报错内容可得知:tools4.0没有这个选项)

  • 执行TPM2_DUplictae命令

tpm2_duplicate -G null -C new_parent.ctxt -c key.ctxt -r duprv.bin -s seed.dat

  • 根据报错内容 ,将所有者密码、认可密码和锁定密码为空值

tpm2_clear lockoutpasswd

  • 清除平台层次结构上的授权值

tpm2_clear -c p

  • 将所有密码设置为空值

(由④⑤⑥可知:tpm2_clear被自带保护机制上锁,暂时没有找到解锁方法)

7.创建一个ECC主键对象

tpm2_createprimary -C o -g sha256 -G ecc -c context.out

8.tpm2_load

描述:将对象的私有和公有部分都加载到TPM中,该工具以YAML字典格式输出已加载对象的名称,并带有键名称,其中该键的值是十六进制格式的对象名称,例如:name:000bac25cb8743111c8e1f52f2ee7279d05d3902a18dd1af694db5d1afa7adf1c8b3

它还会保存一个上下文文件,以备将来与该对象进行交互。

  • 为了创建一个对象,我们必须首先创建一个主键作为它的父键。

tpm2_createprimary -c primary.ctx

  • 创建对象:这将使用所有默认值创建一个对象,并将TPM密封的私有和公有部分存储到分别通过-u和-r指定的路径。该工具默认为RSA密钥。tpm2_create -C primary.ctx -u obj.pub -r obj.priv

  • 创建对象:在关键对象之外,TPM允许将少量用户指定的数据密封到TPM:

echo "my sealed data" > seal.dat

tpm2_create -C primary.ctx -i seal.dat -u obj.pub -r obj.priv

  • 创建EC密钥对象并将其加载到TPM通常,在创建对象时,仅返回对象的公有和私有部分,调用者需要使用tpm2_load将那些公共和私有部分加载到TPM之前,使用对象。但是,这也可以在此命令中完成。

tpm2_create -C primary.ctx -G ecc -u obj.pub -r obj.priv -c ecc.ctx

9.tpm2_rsaencrypt

描述:根据IETF RFC 347,使用指示的填充方案对文件数据的内容执行RSA加密。

  • 创建一个RSA密钥并加载它

tpm2_createprimary -c primary.ctx

tpm2_create -C primary.ctx -Grsa2048 -u key.pub -r key.priv

tpm2_load -C primary.ctx -u key.pub -r key.priv -c key.ctx

  • 利用RSA加密

tpm2_rsadecrypt -c key.ctx -o msg.ptext msg.enc

cat msg.ptext

(此步失败)

10.tpm2_sign

描述:使用指定的对称或非对称签名密钥生成指定消息或消息摘要的签名。

对消息签名时,tpm2_sign实用程序首先计算消息的摘要,类似于tpm2_hash命令。它还分别在TPM2_RH_NULL或TPM2_RH_OWNER层次结构下为非受限或受限签名密钥生成验证凭单。

虽然在此工具中提供了对消息进行签名的建议,但建议首先使用tpm2_hash工具并传递摘要和验证凭单。

注意:如果签名密钥是受限制的签名密钥,则必须通过-t输入提供验证和摘要。票证指示TPM执行了消息的哈希。

  • 使用认可等级与TPM签署并验证

执行如下:

tpm2_createprimary -C e -c primary.ctx
tpm2_create -G rsa -u rsa.pub -r rsa.priv -C primary.ctx
tpm2_load -C primary.ctx -u rsa.pub -r rsa.priv -c rsa.ctx
echo "my message" > message.dat

tpm2_sign -c rsa.ctx -g sha256 -o sig.rssa message.dat
tpm2_verifysignature -c rsa.ctx -g sha256 -s sig.rssa -m message.dat
 

  • 使用TPM签名并使用OSSL进行验证

openssl ecparam -name prime256v1 -genkey -noout -out private.ecc.pem

openssl ec -in private.ecc.pem -out public.ecc.pem -pubout

# Generate a hash to sign

echo "data to sign" > data.in.raw

sha256sum data.in.raw | awk '{ print "000000 " $1 }' |

xxd -r -c 32 > data.in.digest

 # Load the private key for signing

tpm2_loadexternal -Q -G ecc -r private.ecc.pem -c key.ctx

# Sign in the TPM and verify with OSSL

tpm2_sign -Q -c key.ctx -g sha256 -d -f plain -o data.out.signed data.in.digest

openssl dgst -verify public.ecc.pem -keyform pem -sha256

-signature data.out.signed data.in.raw

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/945807.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号