我一直在探索TPM世界,并尝试了一些不同的库(即Trousers,jTSS,JSR321和TPM / J)。根据许多要求,TPM / J符合要求,我能够完成大多数必要的操作,例如绑定/解除绑定,签名/验证等。
但是,我遇到的一个问题是关键句柄。根据Trusted Computing Group发布的规范1.2和2.0,都声明密钥句柄是32位值。当我运行TPM / J并加载密钥时,TPM会发布32位空间的密钥OUTSIDE。
例如,如果我运行以下命令:
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
如果我的计算(以及我找到的一些在线转换工具)正确,那么上面的关键句柄将计算为3,320,400,889,超出32位。我相信32位有符号值限制在20亿左右。
这成为一个问题,因为当我发出以下命令时:
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类型处理的密钥(即,落入32位范围内)一样,命令可以正常运行。
有人遇到过这种情况么?提前致谢。