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

Compare with Current View Page History

« Previous Version 5 Next »

Функция GrdTRU_EncryptAnswer предназначена для подготовки данных (ответа) при использовании технологии Trusted Remote Update. Эта функция не подходит для ключей Guardant Code, при работе с которыми нужно использовать функцию GrdTRU_EncryptAnswerEx.

    int GRD_API GrdTRU_EncryptAnswer(	
      HANDLE hGrd,
      DWORD dwAddr,
      DWORD dwLng,
      void *pData,
      void *pQuestion,
      DWORD dwAlgoNum_GSII64,
      DWORD dwAlgoNum_Hash64,
      void *pAnswer,
      DWORD *pdwAnswerSize
    );

    hGrd

    хэндл, через который будет выполнена данная операция. В ключ, соответствующий этому хэндлу должен быть записан тот же секретный ключ, что и в удаленном ключе. Также ключ должен содержать алгоритмы GSII64 и HASH64, в качестве определителей которых используется секретный ключ

    dwAddr

    стартовый адрес (в системе адресации SAM) в памяти удаленного ключа, по которому будет производиться запись данных

    dwLng

    длина буфера данных, которые должны быть записаны в удаленный ключ

    pData

    буфер, содержащий данные для записи в удаленный ключ

    pQuestion

    указатель на буфер, содержащий расшифрованное 64-битное число-вопрос

    dwAlgoNum_GSII64

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

    dwAlgoNum_Hash64

    номер алгоритма типа HASH64, который будет использоваться для вычисления хэш-функции для проверки подлинности ответа. Определителем алгоритма должен быть тот же секретный 128-битный ключ, что был записан операцией GrdTRU_SetKey в удаленный ключ

    pAnswer

    указатель на буфер, в который будет помещен зашифрованный ответ. Под буфер рекомендуется выделять памяти не менее dwLng*3 + 128 байт

    pdwAnswerSize

    указатель на переменную типа DWORD, которая при вызове должна содержать значение длины буфера pAnswer. После вызова в нее будет записан размер буфера pAnswer, использованный для размещения ответа. Если изначально размер буфера был меньше необходимого, функция возвращает код ошибки GrdE_InvalidArg. В таком случае это значение необходимо использовать в качестве минимального размера при выделении нового буфера

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

    GrdE_AlgoNotFound

    Аппаратный алгоритм с заданным номером не существует

    GrdE_CRCErrorFunc

    Ошибка при вызове аппаратного алгоритма

    GrdE_InactiveItem

    Аппаратный алгоритм деактивирован, обращение к нему невозможно

    GrdE_SystemDataCorrupted

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

    GrdE_NoQuestion

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

    GrdE_InvalidData

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

    GrdE_QuestionOK

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

    GrdE_UpdateNotComplete

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

    GrdE_InvalidHash

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

     

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

    public static GrdE GrdTRU_EncryptAnswer(Handle grdHandle, uint addr, byte[] data, byte[] question,
    	int algNum_GSII64, int algNum_HashS3, out byte[] answer)
    

     

     

    public static GrdE GrdTRU_EncryptAnswer(Handle grdHandle, int addr, byte[] data, byte[] question, int algoNum_GSII64,
    	int algoNum_HashS3, byte[] answer, int[] answerSize)

     

     

    Функция GrdTRU_EncryptAnswer предназначена для подготовки данных (ответа) при использовании технологии Trusted Remote Update.

    При подготовке ответа функция GrdTRU_EncryptAnswer генерирует зашифрованный ответ. Этот ответ представляет собой последовательность команд и набор данных. Расшифрование ответа, проверка его подлинности, последующее выполнение команд и запись данных pData по адресу dwAddr производится непосредственно микропрограммой внутри удаленного электронного ключа.

    Поскольку кроме данных pData, которые должны быть записаны в память удаленного ключа, ответ содержит команды и другую служебную информацию, длина ответа pdwAnswerSize получается больше, чем длина данных dwLng. Соответственно для размещения ответа pAnswer необходимо зарезервировать памяти больше, чем dwLng.

    Функция проверяет, достаточно ли памяти выделено для ответа, и если размер буфера недостаточен, возвращается код ошибки GrdE_InvalidArg. При этом в переменную pdwAnswerSize записывается минимальный размер буфера для генерации ответа. Это значение необходимо учитывать при повторном выделении памяти для буфера.

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

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

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

    • No labels