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

Compare with Current View Page History

« Previous Version 5 Next »

Функция GrdTRU_DecryptQuestionTime расшифровывает число-вопрос и проверяет подлинность его и остальных присланных с удаленного компьютера параметров. Функция является аналогом GrdTRU_DecryptQuestion для ключа Guardant Time.

    int  GRD_API GrdTRU_DecryptQuestionTime( 
    		HANDLE	hGrd,			
    		DWORD	dwAlgoNum_GSII64,
    		DWORD	dwAlgoNum_HashS3,	
    		void	*pQuestion,	
    		DWORD	dwID,		 
    		DWORD	dwPublic,	
    		QWORD *pqwDongleTime,	
    		QWORD	*pqwDeadTimes,
    		DWORD	dwDeadTimesNumbers,
    		void	*pHash			
    	);	

    hGrd

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

    dwAlgoNum_GSII64

    номер аппаратного алгоритма типа GSII64, который будет использоваться для расшифровывания числа-вопроса

    dwAlgoNum_Hash64

    номер аппаратного алгоритма Hash64, который будет использоваться для проверки подлинности числа-вопроса на основании MAC

    pQuestion

    буфер, содержащий присланное удаленным пользователем число-вопрос. Длина буфера 8 байт

    dwID

    ID ключа удаленного пользователя, для которого будет произведена операция

    dwPublic

    численное значение Public Code ключа удаленного пользователя, для которого будет произведена операция

    pqwDongleTime

    зашифрованное значение времени ключа. 8 байт.

    pqwDeadTimes

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

    dwDeadTimesNumbers

    количество 8 байтовых элементов в pqwDeadTimes

    pHash

    буфер, содержащий MAC, вычисленный на ключе удаленного пользователя. Длина буфера 8 байт

    pQuestion

    после выполнения функции в этот буфер возвращается расшифрованное число-вопрос. Длина буфера 8 байт

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

    GrdE_SystemDataCorrupted

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

    GrdE_NoQuestion

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

    GrdE_InvalidData

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

    GrdE_QuestionOK

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

    GrdE_UpdateNotComplete

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

    GrdE_InvalidHash

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

     

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

    public static GrdE GrdTRU_DecryptQuestionTime(Handle grdHandle, GrdAlgNum algNum_GSII64, GrdAlgNum algNum_HashS3, byte[] question,
    	uint id, uint publicCode, ref ulong dongleTime, ulong[] deadTimes, int deadTimesNumbers, byte[] hash)
    
    

     

     

     

     

     

    Использование функции GrdTRU_DecryptQuestionTime позволяет получить число-вопрос в расшифрованном виде и убедиться в том, что оно действительно было сгенерировано на ключе с ID равным dwID и Public Code равным dwPublic. Функция является аналогом GrdTRU_DecryptQuestion для ключа Guardant Time и используется в случаях, когда необходимо продлевать время работы защищенного приложения.

    Если число-вопрос расшифровано правильно и проверка подлинности прошла успешно, функция возвращает GrdE_OK.

    Расшифрованное 8-байтовое число-вопрос помещается в тот же буфер pQuestion, в котором находилось зашифрованное число-вопрос. Расшифрованное число-вопрос необходимо для генерации ответа, поэтому его нужно сохранить для дальнейшего использования.

    Расшифрование числа-вопроса производится аппаратным алгоритмом типа GSII64 с номером, задаваемым dwAlgoNum_GSII64. На момент расшифровывания этот алгоритм должен быть создан в ключе, находящемся у разработчика. В качестве определителя должен использоваться секретный 128-битовый ключ, который был сгенерирован и прошит в ключ удаленного пользователя при предпродажной подготовке функцией GrdTRU_SetKey для ключа с ID, равным dwID. При использовании GRDUTIL этот ключ берется из базы данных.

    Проверка подлинности числа-вопроса производится аппаратным алгоритмом типа Hash64 с номером dwAlgoNum_Hash64. На момент проверки этот алгоритм должен быть создан в ключе, находящемся у разработчика. В качестве определителя должен использоваться секретный 128-битовый ключ, который был сгенерирован и прошит в ключ удаленного пользователя при предпродажной подготовке функцией GrdTRU_SetKey для ключа с ID равным dwID. При использовании GRDUTIL этот ключ берется из базы данных.

    Рабочий ключ, находящийся у разработчика, инициализировать функцией GrdTRU_SetKey с секретным ключом, таким же как у удаленного пользователя, необязательно. Все преобразования делаются на заранее запрограммированных алгоритмах, номера которых указываются в параметрах указываемых в параметрах dwAlgoNum_GSII64 и dwAlgoNum_Hash64.

    После расшифрования в pqwDongleTime содержится расшифрованное время ключа из микросхемы таймера, а в pqwDeadTimes расшифрованное время деактивации алгоритмов.

    Два старших байта параметра 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) 
    • No labels