Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

 

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

...

Expand
titleВыходные параметры

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

GrdE_SystemDataCorrupted

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

GrdE_NoQuestion

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

GrdE_InvalidData

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

GrdE_QuestionOK

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

GrdE_UpdateNotComplete

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

GrdE_InvalidHash

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

 

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

 

 

Expand
titleОписание

Функция GrdTRU_GenerateQuestionTimeEx генерирует зашифрованное число-вопрос и инициализирует процесс для удаленного программирования, использующего технологию Trusted Remote Update. Функция является аналогом GrdTRU_GenerateQuestion для ключа 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 важен только размер массива. Более того, количество элементов можно передать в "посылке" удаленного программирования вместе с числом-вопросом.

...