You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

Функция GrdTRU_GenerateQuestionTimeEx генерирует зашифрованное число-вопрос для удаленного программирования, использующего технологию Trusted Remote Update. Является аналогом функции GrdTRU_GenerateQuestionEx для ключа Guardant Code Time с возможностью использования новых алгоритмов (AES128 и SHA256).

 

*C*int GRD_API GrdTRU_GenerateQuestionTimeEx(
HANDLE hGrd,
DWORD dwLngQuestion,
void *pQuestion,
DWORD *pdwID,
DWORD *pdwPublic,
QWORD *pqwDongleTime,
DWORD dwDeadTimesSize,
QWORD *pqwDeadTimes,
DWORD *pdwDeadTimesNumbers,
DWORD dwLngHash,
void *pHash,
DWORD dwReserved,
void *pReserved
);

C#

Visual Basic

Visual C++

hGrd

хэндл, через который будет выполнена данная операция

dwLngQuestion

размер буфера, куда будет помещен сгенерированный вопрос.

pQuestion

буфер, куда будет помещен сгенерированный вопрос.

pdwID

буфер, куда будет помещено значение ID ключа, для которого сгенерирован вопрос.

pdwPublic

буфер, куда будет помещено численное значение Public code ключа, для которого сгенерирован вопрос.

pqwDongleTime

зашифрованное время из микросхемы таймера. Длина буфера 8 байт

dwDeadTimesSize

размер входного буфера pqwDeadTimes в байтах

pqwDeadTimes

зашифрованные значения времен жизни алгоритмов. По 8 байт

pdwDeadTimesNumbers

количество элементов, возвращаемых в pqwDeadTimes

dwLngHash

размер буфера , куда будет помещено значение MAC ( Message Authentication Code - кода аутентификации сообщения) для верификации вопроса.

pHash

буфер, куда будет помещено значение MAC ( Message Authentication Code - кода аутентификации сообщения) для верификации вопроса.

dwReserved

зарезервировано. Должно быть равно 0

pReserved

зарезервировано. Должно быть равно NULL

Возможные ошибки

GrdE_SystemDataCorrupted

Системные данные TRU повреждены. (Секретный ключ удаленного программирования отсутствует)

GrdE_NoQuestion

Число-вопрос не было сгенерировано или было перегенерировано до записи числа ответа

GrdE_InvalidData

Неверный формат данных для удаленного программирования

GrdE_QuestionOK

Число-вопрос уже было сгенерировано, ключ ожидает данных для удаленного программирования

GrdE_UpdateNotComplete

Ошибка при записи данных удаленного программирования. Операция не была завершена

GrdE_InvalidHash

Неверное значение MAC (Message Authentication Code)

 

Стандартный набор ошибок

Функция GrdTRU_GenerateQuestionTimeEx генерирует зашифрованное число-вопрос и инициализирует процесс для удаленного программирования, использующего технологию Trusted Remote Update. Функция является аналогом GrdTRU_GenerateQuestionEx для ключа Guardant Time и используется в случаях, когда необходимо продлевать время работы защищенного приложения.

Функция GrdTRU_GenerateQuestionTimeEx вызывается на компьютере удаленного пользователя и генерирует число-вопрос pQuestion, защищенное от подделки кодом аутентификации сообщения (MAC) pHash. MAC вырабатывается аппаратным алгоритмом на секретном ключе, который должен быть предварительно записан при помощи функции GrdTRU_SetKey. MAC используется для того, чтобы нельзя было подделать число-вопрос, ID или Public Code электронного ключа.

После того, как число-вопрос сгенерировано, конечный пользователь должен передать разработчику все сгенерированные функцией GrdTRU_GenerateQuestionTimeEx данные: собственно число-вопрос pQuestion, ID ключа pdwID, Public code pdwPublic и MAC pHash. С момента генерации числа-вопроса ключ переходит в состояние ожидания числа-ответа.

Рекомендуемый размер буфера pqwDeadTimes для зашифрованных значения времени жизни алгоритмов должен быть равен (количеству алгоритмов + количество защищенных ячеек )*8. Если буфер содержит меньше элементов, то возвращается только то, что поместилось, иначе дополняется нулями до dwDeadTimesSize/8 элементов, но не более 499 элементов.

Два старших байта параметра pqwDongleTime - нули. 2 старших байта элементов массива pqwDeadTimes - числовое имя алгоритма. Остальные 6 байт - время жизни соответствующего алгоритма.

Время жизни (8 байт) имеет следующий формат:

1, 2 байтычисловое имя алгоритма (либо нули, если время из микросхемы таймера); 
3 байтгод от 2000 (08 для 2008 года); 
4 байт месяц года (01 - январь, 02 - февраль, ...);
5 байтдень месяца (1 - 31); 
6 байтчасы (0 - 23); 
7 байтминуты (0 - 59);
8 байтсекунды (0 - 59) 

На клиентской стороне всегда можно узнать, сколько алгоритмов и ячеек есть в ключе для вычисления количества элементов массива DeadTime. Количество алгоритмов и защищенных ячеек в ключе можно узнать, считав поле kmAlgoNum в режиме адресации SAM.

На стороне разработчика тоже можно вычислить количество алгоритмов по маске, хранящейся в базе. Поэтому в функциях TRU для Time важен только размер массива. Более того, количество элементов можно передать в "посылке" удаленного программирования вместе с числом-вопросом.

Пример для используемого средства разработки см. в директории:

"\%Program Files%\Guardant\Guardant 6\%PublicCode%\Samples\x86\Win32\General Guardant API\"
или
"\%Program Files%\Guardant\Guardant 6\%Public Code%\Samples\x64\Win64\General Guardant API\"

  • No labels