tpm2-tools使用工具

tpm2_changeauth

描述:实现对TPM所有权访问认证设置

  1. 设置所有者密码、认可密码和锁定密码
tpm2_changeauth -c owner newpass
tpm2_changeauth -c endorsement newpass
tpm2_changeauth -c lockout newpass
  1. 修改所有者密码、认可密码和锁定密码
tpm2_changeauth -c o -p newpass newerpass
tpm2_changeauth -c e -p newpass newerpass
tpm2_changeauth -c l -p newpass newerpass
  1. 将所有者密码设置为空
tpm2_changeauth -c o -p oldpass

tpm2_clear

  1. 将所有者密码、认可密码和锁定密码为空值
tpm2_clear lockoutpasswd
  1. 清除平台层次结构上的授权值
tpm2_clear -c p

tpm2_createprimary

描述:创建主对象
参数选项:

-C 创建主对象,必须提出那个进行密钥授权,所有者、平台、认可或空

  1. o 所有者密钥 (默认值)
  2. p 平台密钥
  3. e 认可密钥
  4. n

-P 层次认证

-C指定的层次结构的授权值。

-p 主要对象的授权值创建

-g 指出使用的hash算法

可选

  1. sha1
  2. sha256(默认)
  3. sha384
  4. sha512
  5. sm3_256
  6. sha3_256
  7. sha3_384
  8. sha3_512

-G 指出密钥生成算法

可选
rsa2048:null:aes128cfb(默认)

  • aes - Default AES: aes128
  1. aes128
  2. aes192
  3. aes256
  • ecc - Elliptical Curve, defaults to ecc256.
  1. ecc192
  2. ecc224
  3. ecc256
  4. ecc384
  5. ecc521
  • rsa - Default RSA: rsa2048
  1. rsa1024 - RSA with 1024 bit keysize.
  2. rsa2048 - RSA with 2048 bit keysize.
  3. rsa4096 - RSA with 4096 bit keysize.

-c

保存生成的主对象的对象上下文的文件路径

-L

可选
文件输入,包含用于对象的基于策略的授权的策略摘要

-a 对象属性

可选
默认值:TPMA_OBJECT_RESTRICTED|TPMA_OBJECT_DECRYPT|TPMA_OBJECT_FIXEDTPM | TPMA_OBJECT_FIXED‐PARENT|TPMA_OBJECT_SENSITIVEDATAORIGIN| TPMA_OBJECT_USERWITHAUTH

-u

可选

-t

可选的文件输出,用于保存创建票证以进行认证

-d

可选文件输出,用于保存创建哈希以供认证

-q

可选文件或十六进制字符串,用于将唯一数据添加到创建数据。请注意,它对创建统计上唯一的对象没有帮助。

-l

PCR库的列表和每个库的选定PCR的ID将包含在用于证书的创建数据中。

  • 创建一个ECC主键对象
tpm2_createprimary -C o -g sha256 -G ecc -c context.out

tpm2_create

  • 描述:创建一个子对象。该对象可以是钥匙或密封对象。密封对象允许将用户数据密封到TPM,最大大小为128字节。另外,如果指定了-c,它将加载创建的对象。

-C 创建父对象

-P 给-C指定的父对象的授权值

-p 创建对象的授权值

-g 哈希算法

-G 密钥生成算法

-a 对象属性

-I 密封数据文件

-L 输入策略文件

-u 输出一个包含创建的对象的公有部分的文件,公钥

-r 输出一个包含创建的对象的私有部分的文件, 私钥

-c

  1. –key-context=FILE:
    包含键上下文(可选)的输出文件。关键上下文类似于tpm2_load(1)生成的上下文文件,但是是通过tpm2_createloaded(1)命令生成的。此选项可用于避免正常的tpm2_create(1)和tpm2_load(1)命令序列,并在一个命令中自动完成所有操作。

  2. –creation-data=FILE:
    可选的文件输出,用于保存创建数据以供认证

  3. –template-data=FILE:
    可选文件输出,用于保存要在tpm2_policytemplate中使用的密钥模板数据(TPM2B_PUBLIC)。

-t 创建票证

可选的文件输出,用于保存创建票证以进行认证。

-d

可选的文件输出,用于保存创建哈希以供认证

-q

可选的十六进制字符串或路径,用于将唯一数据添加到创建数据。请注意,它对创建统计上唯一的对象没有帮助。

-l

PCR库的列表和每个库的选定PCR的ID将包含在用于证书的创建数据中。

a case of tpm2_create

  1. 设置-创建主对象
  • 为了创建一个对象,我们必须首先创建一个主键作为它的父键。
tpm2_createprimary -c primary.ctx
  1. 创建对象
    这将使用所有默认值创建一个对象,并将TPM密封的私有和公有部分存储到分别通过-u和-r指定的路径。该工具默认为RSA密钥。
tpm2_create -C primary.ctx -u obj.pub -r obj.priv
  1. 创建对象
    在关键对象之外,TPM允许将少量用户指定的数据密封到TPM
echo "my sealed data" > seal.dat
tpm2_create -C primary.ctx -i seal.dat -u obj.pub -r obj.priv
  1. 创建EC密钥对象并将其加载到TPM通常,在创建对象时,仅返回对象的公有和私有部分,调用者需要使用tpm2_load将那些公共和私有部分加载到TPM之前,使用对象。但是,这也可以在此命令中完成。
tpm2_create -C primary.ctx -G ecc -u obj.pub -r obj.priv -c ecc.ctx

tpm2_load

  • 描述:将对象的私有和公有部分都加载到TPM中

  • 该工具以YAML字典格式输出已加载对象的名称,并带有键名称,其中该键的值是十六进制格式的对象名称,例如:name:000bac25cb8743111c8e1f52f2ee7279d05d3902a18dd1af694db5d1afa7adf1c8b3

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

注意:必须指定tpm密钥的私有和公有部分

-C, 父对象

-P, -C指定的父对象的授权值

-u, 公钥

-r, 私钥

-n, 保存对象的名称的文件

-c, 保存对象上下文的文件

a case of tpm2_create

  1. 创建一个主对象
 tpm2_createprimary -c primary.ctx
  1. 根据主对象创建一个对象
 tpm2_create -C primary.ctx -u key.pub -r key.priv
  1. 将对象的私有和公有部分都加载到TPM中
tpm2_load  -C primary.ctx -u key.pub -r key.priv -c key.ctx

tpm2_rsaencrypt

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

-c 上下文

指向用于加密的RSA密钥的公共部分的上下文对象

-o

可选的输出文件路径,用于记录加密数据。默认设置是将二进制加密数据打印到stdout。

-s

可选,设置填充方案(默认为rsaes)。

  1. null - TPM_ALG_NULL uses the key’s scheme if set.

  2. rsaes - TPM_ALG_RSAES which is RSAES_PKCSV1.5.

  3. oaep - TPM_ALG_OAEP which is RSAES_OAEP.

-l

可选,设置标签数据。可以是字符串或文件路径。 TPM要求标签的最后一个字节为零,这在工具内部处理。没有其他嵌入的0字节可以存在,否则TPM将截断您的标签。

a case of tpm2_rsaencrypt

  1. 创建一个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
  1. 利用RSA加密
 echo "my message" > msg.dat
 tpm2_rsaencrypt -c key.ctx -o msg.enc msg.dat
  1. 利用RSA解密
tpm2_rsadecrypt -c key.ctx -o msg.ptext msg.enc
cat msg.ptext

tpm2_rsadecrypt

  • 描述:根据IETF RFC 3447,使用指定的填充方案对文件的内容执行RSA解密。

-c 指向用于解密的RSA密钥的公共部分的上下文对象

-p 指向用于解密的RSA密钥的公共部分的上下文对象

-o 输出

可选的输出文件路径,用于记录解密后的数据。默认设置是将二进制加密数据打印到STDOUT。

-s 可选,设置填充方案(默认为rsaes)。

  1. null
  2. rsaes
  3. oaep

-l

可选,设置标签数据。TPM要求标签的最后一个字节为零,这在工具内部处理。没有其他嵌入的0字节可以存在,否则TPM将截断您的标签。

tpm2_sign

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

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

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

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

-c

指向用于签名的密钥的上下文对象。

-p

使用-c指定的密钥的可选授权值。

g

用于摘要消息的哈希算法。

-s

用于签名消息的签名方案。可选。签名方案应遵循“格式标准”,请参阅“算法说明符”部分。如果指定,则签名方案必须与密钥类型匹配。如果未指定,将使用密钥类型的默认签名方案。

-d

表示FILE是包含消息摘要的文件。指定此选项和-t时,将生成警告,并且忽略验证票证(-t)。您不能使用此选项对受限签名密钥进行摘要签名。

-t

票证文件,包含验证结构,是可选的。

-o

签名文件,记录签名结构。

-f

签名输出文件的格式选择。

a case of tpm2_sign

  1. 使用认可等级与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

tpm2_verifysignature

  • 描述:使用已加载的密钥来验证消息上的签名,并将消息摘要传递给TPM。如果签名检查成功,则TPM将生成TPMT_TK_VERIFIED。否则,TPM将返回TPM_RC_SIGNATURE。如果对象引用非对称密钥,则仅需要加载密钥的公有部分。如果对象引用对称密钥,则公有和私有部分都需要加载。

-c

用于操作的关键上下文的上下文对象。

-g

用于摘要消息的哈希算法。

-m

消息文件,包含要摘要的内容。

-d

输入哈希文件,包含消息的哈希。如果选择此选项,则无需指定消息(-m)和算法(-g)选项

-s

要验证的签名的输入签名文件

-f

用于签名消息的签名方案。仅当签名来自非tss标准(例如openssl)时,才应指定此选项。有关更多详细信息,请参见“签名格式说明符”。 tss格式包含理解其签名方案所需的签名元数据。签名方案应遵循“格式标准”,请参阅“算法说明符”部分。

–format

不推荐使用。与–scheme相同。

你可能感兴趣的:(可信计算,tpm2-tools)