Hash 使用-d dgst时tpm2_验证签名失败

Hash 使用-d dgst时tpm2_验证签名失败,hash,tpm,Hash,Tpm,我刚刚尝试使用以下命令验证TPM中的签名: tpm2_verifysignature-Q-f ecdsa-s signed.bin-d hashed.bin-c eckey.ctx 失败,错误代码为0x2db。hashed.bin文件是abc.bin的原始摘要(sha256)数据。 但是,如果我使用参数-m和-g而不是-d,TPM将传递签名 tpm2_验证签名-Q-f ecdsa-s signed.bin-m abc.bin-g sha256-c eckey.ctx 我只是不想把这个重要的信息

我刚刚尝试使用以下命令验证TPM中的签名:

tpm2_verifysignature-Q-f ecdsa-s signed.bin-d hashed.bin-c eckey.ctx

失败,错误代码为0x2db。hashed.bin文件是abc.bin的原始摘要(sha256)数据。

但是,如果我使用参数-m和-g而不是-d,TPM将传递签名

tpm2_验证签名-Q-f ecdsa-s signed.bin-m abc.bin-g sha256-c eckey.ctx

我只是不想把这个重要的信息传递给TPM,有人能建议正确的方法吗


谢谢

正如@mnistic所指出的,看起来您未能正确地散列文件。您有两个选择:

A) 自己散列你的信息 在这种情况下,您必须自己计算数据的散列。我认为这是一个更难的选择。

1) 选择一个哈希算法 您必须选择散列算法(例如SHA256)。如果不使用相同的哈希算法进行哈希和验证,验证将失败

2) 散列数据 计算文件的散列并将其作为原始字节写入文件。这部分很棘手。例如,您可以使用
sha256sum
,但它会将哈希打印为ASCII格式的十六进制字符串。您需要的是原始二进制数据。要在一个命令中转换它,请执行以下操作:

sha256sum abc.bin | awk '{ print "000000 " $1 }' | xxd -r -c 32 > hashed.bin`
3) 签字 现在你在这个散列上签名。使用与上述相同的散列算法(如果未给出
-g
,则默认为SHA256)

tpm2_sign -c eckey.ctx -g sha256 -f plain -s signed -D hashed.bin
B) 让
tpm2签名
散列数据 这是一个更简单的选择,只需呼号并传递数据即可。工具
tpm2\u符号
将为您进行哈希运算

tpm2_sign -c eckey.ctx -g sha256 -s signed.bin -m abc.bin

验证 现在验证正好相反。您必须决定是希望
tpm2\u verifysignature
计算消息的哈希值,还是自己计算

如果您自己做,请按照上面所示计算哈希值,然后调用

tpm2_verifysignature -c eckey.ctx -g sha256 -D hashed.bin -s signed.bin
或者,让
tpm2\u verifysignature
计算散列

tpm2_verifysignature -c eckey.ctx -g sha256 -m abc.bin -s signed.bin

我希望这能奏效。我没有机会在我的机器上测试它。如果
-m
-g
工作,我假设您正在使用tpm2\u工具版本
3.x

,但是
-d
不工作,那么您没有正确地散列文件。显然需要使用SHA256。不清楚你所说的“传递重要信息”是什么意思?