Я пытаюсь подписать некоторые данные с помощью TPM через API TrouSerS.Я искал в Интернете примеры кода, и единственный, с которым я столкнулся, находится на слайде № 30 этого PDF (на мой взгляд, TPM и брюки имеют зашифрованную документацию).
Код не выполняется, когда я вызываю следующую функцию для создания ключа подписи:
Tspi_Key_CreateKey ()
Код ошибки, который я получаю, равен «1», который приВыполнение функции Trspi_Error_String()
переводит в строку «Ошибка аутентификации».Ясно, что вызов для создания ключа подписи терпит неудачу, потому что у него нет правильной политики авторизации.
В приведенном ниже примере кода вы видите, что я устанавливаю секрет политики по умолчанию равным TSS_WELL_KNOWN_SECRET
, что соответствует двадцати 0, если я правильно помню.Я не смог найти хорошую документацию о том, как работают политики и как убедиться, что мои звонки в TPM авторизованы.Мне нужна помощь в понимании двух вещей:
- Как работают политики в TrouSerS и TPM?
- Как мне убедиться, что мой звонок на
Tspi_Key_CreateKey()
авторизован?
TSS_HCONTEXT hContext;
TSS_HKEY hSigningKey, hSRK;
TSS_HPOLICY hPolicy;
BYTE secret[] = TSS_WELL_KNOWN_SECRET;
// Init context and connect to tcsd daemon
Tspi_Context_Create(&hContext);
Tspi_Context_Connect(hContext, NULL);
// Create object for Software Root Key
Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_RSAKEY, TSS_KEY_TSP_SRK, &hSRK);
// Create object for signing key
Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_RSAKEY,
TSS_KEY_TYPE_SIGNING |
TSS_KEY_SIZE_2048 |
TSS_KEY_AUTHORIZATION |
TSS_KEY_NOT_MIGRATABLE,
&hSigningKey);
// Set up the default policy, which applies to all objects
Tspi_Context_GetDefaultPolicy(hContext, &hPolicy);
Tspi_Policy_SetSecret(hPolicy, TSS_SECRET_MODE_SHA1, 20, secret);
// Load the SRK key
TSS_UUID SRK_UUID = TSS_UUID_SRK;
Tspi_Context_LoadKeyByUUID(hContext, TSS_PS_TYPE_SYSTEM, SRK_UUID, &hSRK);
// Create the signing key
Tspi_Key_CreateKey(hSigningKey, hSRK, 0);
if (result != TSS_SUCCESS) {
LOG(ERROR) << "Failed to create signing key " << result;
LOG(ERROR) << Trspi_Error_String(result);
return;
}