Запечатывание данных с помощью TPM в Windows
Я хотел бы выполнить операцию уплотнения TPM в Windows. Я знаком с программированием на C++, но понятия не имею, какие библиотеки я бы даже использовал.
В настоящее время я застрял в следующих двух вопросах:
Могу ли я выполнить это действие, используя, например, WMI и скрипт powershell? Это http://msdn.microsoft.com/en-us/library/windows/desktop/aa446799%28v=vs.85%29.aspx указывает, что я могу использовать TBS для отправки команды, но у меня нет слабых как я бы настроить параметры, например, в WMI.
Могу ли я использовать tbs.h / tbs.lib из Windows 7 SDK для выполнения операции TPM_Seal?
Есть ли TSS API, например http://trousers.sourceforge.net/ где я могу вызвать это из некоторого кода C++?
Метод, с помощью которого я делаю это, не имеет большого значения, но я использую TPM 1.2 на Windows, и все мои клиенты - Windows.
2 ответа
Вы можете использовать TPM Base Sevices для отправки команд в TPM. Так что вам нужно собрать команды самостоятельно.
Команды, структуры и потоки TPM определены в 3 документах:
Сначала вам нужно выяснить, какую команду вы хотите отправить. Затем вы должны найти ссылку на команду в части 3 и собрать необходимые структуры, как описано в части 2.
TPM_seal
Например, команда определена в разделе 10.1 на стр. 72 части 3. В строке 1331 показано, как должна выглядеть команда. После выдачи команды вы можете оценить возвращенную структуру в соответствии со строкой 1332. (Все числа относятся к ревизии 116.)
Это может быть действительно сложно. Однако вы можете взглянуть на другие реализации. Если вам просто нужно несколько команд, это не так сложно, особенно когда вы можете быть уверены, что некоторые угловые случаи не происходят.
Я бы посоветовал вам начать смотреть на программный TPM IBM. Этот проект также предоставляет libtpm и некоторые утилиты. Это одна из самых легких реализаций, которую я знаю.
Вы также можете проверить, достаточно ли стабильно приложение TrouSerS for Windows для ваших нужд. Там у вас будет TSS API высокого уровня.
Если Java является опцией, взгляните на jTSS. Он поддерживает Windows.
Я смог сделать это без особых проблем с JTSS. Есть пример @ https://security.stackexchange.com/questions/60841/encrypting-a-symmetric-key-or-small-file-using-tpm-and-windows-tbs