我一直在探索TPM世界並嘗試了幾個不同的庫(即Trousers,jTSS,JSR321和TPM/J)。根據一些要求TPM/J符合法案,我能夠完成大部分必要的操作,如綁定/解除綁定,簽名/驗證等。TPM 32位密鑰句柄
但是我遇到的一個問題是關鍵句柄。根據可信計算組織發佈的規範,1.2和2.0,都聲明密鑰句柄是32位值。當我運行TPM/J並加載密鑰時,TPM向32位空間外的密鑰發出密鑰。
例如,如果我運行下面的命令:
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,這是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類型處理的鍵(即在32位範圍內),那麼該命令運行得很好。
有沒有其他人遇到過嗎?提前致謝。
感謝Scolytus的解釋。我猜如果我想要使用這個庫,那麼我必須將鍵句柄從int更改爲long。 – schmudu