Как правильно открыть ручку для TPMs RNG в C? - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь использовать TPM для генерации случайных чисел. Это чисто для того, чтобы научиться использовать TPM.

Проблема, с которой я столкнулся, заключается в том, что я не могу получить дескриптор. Когда я использую MS_PLATFORM_CRYPTO_PROVIDER, дескриптор не создается с сообщением STATUS_NOT_FOUND. Работает по умолчанию NULL.

Как правильно настроить дескриптор для использования TPM в качестве ГСЧ?

#include <Windows.h>
#include <bcrypt.h>
#pragma comment(lib, "bcrypt.lib")
...
BCRYPT_ALG_HANDLE *handle;
NTSTATUS handle_status = BCryptOpenAlgorithmProvider(
    &handle,
    BCRYPT_RNG_ALGORITHM,
    MS_PLATFORM_CRYPTO_PROVIDER,
    0
);
// Status code 0xC0000225 STATUS_NOT_FOUND
unsigned char *buffer = calloc(BIT_SIZE/sizeof(char), sizeof(char));
NTSTATUS gen_status = BCryptGenRandom(
    handle,
    buffer,
    BIT_SIZE / sizeof(char),
    0
);
...

У меня Intel TPM с версией спецификации 2.0. Статус готов.

...