java - TPM 32 位 key 句柄

标签 java tpm

我一直在探索 TPM 世界,并尝试了一些不同的库(即 Trousers、jTSS、JSR321 和 TPM/J)。基于多项要求TPM/J符合要求,我能够完成大部分必要的操作,例如绑定(bind)/解除绑定(bind)、签名/验证等。

但是我遇到的一个问题是 key handle 。根据可信计算组织发布的规范,1.22.0 ,两者都声明键句柄是 32 位值。当我运行 TPM/J 并加载 key 时,TPM 会在 32 位空间之外发出 key 。

例如,如果我运行以下命令:

sudo java edu.mit.csail.tpmj.tools.TPMLoadKey testkey.key SRK ""

我收到以下输出:

Parsing command-line arguments ...

Using SRK as parent.
parentPwd = null, Encoded (NULL [no authorization]) = null

Read testkey.key ...

Loading the key into the TPM ...
keyHandle = 0xc5e94bf9

如果我的计算(以及我发现的一些在线转换工具)正确,那么上面的 key 句柄计算结果为 3,320,400,889,即 OUTSIDE 32 位。我相信 32 位有符号值限制在 2 billion 左右.

这成为一个问题,因为当我发出以下命令时:

sudo java -cp $CLASSPATH edu.mit.csail.tpmj.tools.TPMUnbind HelloWorld.txt.enc 0xc5e94bf9

我得到以下输出:

Parsing command-line arguments ...

Exception in thread "main" java.lang.NumberFormatException: For input string: "c5e94bf9"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:484)
    at bayanihan.util.params.Params.getInt(Params.java:67)
    at edu.mit.csail.tpmj.tools.TPMUnbind.main(TPMUnbind.java:71)

作为健全性检查,如果我使用上面的 TPMUnbind 命令,并等到加载可以由 Java int 类型处理的 key (即落在 32 位范围内),然后命令运行就好了。

还有人遇到过这种情况吗?提前致谢。

最佳答案

0xc5e94bf9 是一个 32 位数字。

在十六进制表示中,一个“数字”代表 4 位。因此,8 位数字的范围是从 0x000xFF。所以 2 个十六进制数字,也称为半字节

16 位将是 0x00000xFFFF

你的情况是32位:0x000000000xFFFFFFFF

您找到的有符号整数链接指出 -2,147,483,6482,147,483,647。如果您将其解释为无符号,则十进制表示形式为 04,294,967,296。因此 3,320,400,889 在范围内。

<小时/>

现在您遇到的错误是:这是 TPM/J 中的错误。它使用

Integer.parseInt( s.substring( 2 ), 16 );

解析输入字符串。 parseInt() 方法不适用于大于 0x7FFFFFFF 的十六进制数。

关于java - TPM 32 位 key 句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18986024/

相关文章:

java - 如何将 Dojo Data 网格单元格值重定向到另一个页面?

编译 tpm 驱动程序给出 tpm_open() undefined

c++ - ITpmVirtualSmartCardManager::CreateVirtualSmartCard PIN 设置不正确

arm - 树莓派使用TPM无人值守启动LUKS加密分区

Ruby:使用存储在 TPM 中的 key

linux - TSS_WELL_KNOWN_SECRET 的值是多少

java - Android:在 ListView header 中设置文本

java - 如何使用 Spring 和 Hibernate 从基本的 DAO 更改为 Repository 接口(interface)?

java - 单击按钮时 Windows 未打开

java - UML:方法图而不是类图?