#tpm #trusted-computing
#tpm #доверенные вычисления
Вопрос:
У меня есть программа на C для выполнения базовых функций TPM_GetCapabilities через базовые службы TPM и Windows 7 SDK.
Я настроил программу ниже
int _tmain(int argc, _TCHAR* argv[])
{
TBS_CONTEXT_PARAMS pContextParams;
TBS_HCONTEXT hContext;
TBS_RESULT rv;
pContextParams.version = TBS_CONTEXT_VERSION_ONE;
rv = Tbsi_Context_Create(amp;pContextParams, amp;hContext);
printf("n1 RESULT : %x STATUS : %x", rv, hContext);
BYTE data[200] =
{0,0xc1, /* TPM_TAG_RQU_COMMAND */
0,0,0,18, /* blob length, bytes */
0,0,0,0x65, /* TPM_ORD_GetCapability */
0,0,0,0x06, /* TPM_CAP_VERSION */
0,0,0,0}; /* 0 bytes subcap */
BYTE buf[4000];
UINT32 len = 4000;
rv = Tbsip_Submit_Command(hContext,0,TBS_COMMAND_PRIORITY_NORMAL,data,18,buf,amp;len);
//CAPABILITY_RETURN* retVal = new CAPABILITY_RETURN(buf);
//printf("n2 Response Tag: %x Output Bytes: %x",tag,);
printf("n2 RESULT : %x STATUS : %xn", rv, hContext);
printBuf(buf,len);
rv = Tbsip_Context_Close(hContext);
printf("n3 RESULT : %x STATUS : %x", rv, hContext);
Мой буфер возврата выглядит так:
00:C4:00:00:00:12:00:00:00:00:00:00:00:04:01:01:00:00
Согласно этому документу, раздел 7.1 TPM_GetCapability, я должен получить следующее:
Глядя на мой выходной буфер, я получаю TPM_TAG_RSP_COMMAND , значение 18 для моего paramSize, 0 для моего TPM_RESULT, 0x … 04 для порядкового номера (не уверен, что это должно означать.) затем 1,1,0,0 для моих последних битов. Я в недоумении, как это расшифровать.
Ответ №1:
Ответ на ваш вопрос:
Вы не получаете нестандартного ответа.
- Ответ в полном порядке, в нем нет ничего нестандартного. Это выглядит точно так, как определено в спецификации.
- Содержимое ответа
resp
, которое вы получаете, также является ожидаемым. TPM, соответствующий стандарту, должен отвечать,01 01 00 00
когда его запрашиваютTPM_CAP_VERSION
.
Почему?
Прежде всего: строка с указанием TPM_COMMAND_CODE ordinal
не является частью ответа. У него нет PARAM #
и нет PARAM SZ
. Это относится только к вычислению HMAC ответа.
Итак, ответ следующий:
00 C4 tag
00 00 00 12 paramSize
00 00 00 00 returnCode
00 00 00 04 respSize
01 01 00 00 resp
Вы просили эту возможность TPM_CAP_VERSION
. Вот что говорится в спецификации:
Value: 0x00000006
Capability Name: TPM_CAP_VERSION
Sub cap: Ignored
TPM_STRUCT_VER structure.
The major and minor version MUST indicate 1.1.
The firmware revision MUST indicate 0.0.
The use of this value is deprecated, new software SHOULD
use TPM_CAP_VERSION_VAL to obtain version and revision information
regarding the TPM.
Итак, когда вы декодируете resp
, то есть a TPM_STRUCT_VER
, вы получаете следующее:
typedef struct tdTPM_STRUCT_VER {
BYTE major; // ==> 1
BYTE minor; // ==> 1
BYTE revMajor; // ==> 0
BYTE revMinor; // ==> 0
} TPM_STRUCT_VER;
Итак, 1.1 и 0.0, точно в соответствии со спецификацией.
Комментарии:
1. Что ж, считайте меня образованным. Спасибо.