TPM 32-битные ключи

Я изучал мир TPM и попробовал несколько разных библиотек (например, брюки, jTSS, JSR321 и TPM/J). Основываясь на ряде требований, TPM / J отвечает всем требованиям, и я могу выполнить большинство необходимых операций, таких как привязка / открепление, подписание / проверка и т. Д.

Однако одна проблема, с которой я столкнулся, - это ручка ключа. В соответствии со спецификациями, выпущенными Trusted Computing Group, 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, то есть ВНЕ 32-битных. Я считаю, что 32-разрядные подписанные значения ограничены примерно 2 миллиардами.

Это становится проблемой, потому что, когда я запускаю следующую команду:

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-битный диапазон), тогда команда выполняется просто отлично.

кто-нибудь еще сталкивался с этим? Заранее спасибо.

1 ответ

Решение

0xc5e94bf9 это 32-битное число.

В шестнадцатеричном представлении одна цифра представляет 4 бита. Таким образом, 8-битное число варьируется от 0x00 в 0xFF, Итак, 2 шестнадцатеричные цифры, также называемые полубайтами.

16 бит будет 0x0000 в 0xFFFF

А твой случай 32 битный 0x00000000 в 0xFFFFFFFF

Ссылка, которую вы нашли для целых чисел со знаком -2,147,483,648 в 2,147,483,647, Если вы интерпретируете это как неподписанное, это будет 0 в 4,294,967,296 в десятичном представлении. таким образом 3,320,400,889 находится в диапазоне.


Теперь к ошибке, которую вы получите: это ошибка в TPM/J. Оно использует

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

проанализировать входную строку. parseInt()-метод не работает для шестнадцатеричных чисел больше чем 0x7FFFFFFF,

Другие вопросы по тегам