...
б) Для Guardant Code/Code Time допустимы следующие значения:
Имя кода | Значение | Комментарий |
rs_algo_PI | 8 | Защищенная ячейка, содержащая данные |
rs_algo_ECC160 | 12 | Цифровая подпись по алгоритму ECC 160 бит. Размер определителя при этом 20 байт |
rs_algo_AES128 | 13 | Симметричное шифрование по AES с длиной ключа 128 бит (режимы шифрования поддерживаются) |
rs_algo_LoadableCode | 14 | Алгоритм, содержащий загружаемый код |
rs_algo_SHA256 | 15 | Алгоритм хэширования SHA256. Определительне содержит данных в поле rs_K[] |
rs_algo_AES128Encode | 16 | Симметричное шифрование по AES с длиной ключа 128 бит. Данные могут только зашифровываться. Возможны режимы шифрования только ECB и CBC |
rs_algo_AES128Decode | 17 | Симметричное шифрование по AES с длиной ключа 128 бит. Данные могут только расшифровываться. Возможны режимы шифрования только ECB и CBC |
...
Для алгоритмов GSII64, HASH64 и RND64 при ошибочном значении длины ключа, его длина устанавливается равной 16 байт.
Поле rs_hash зарезервировано для будущего использования.
Поле rs_ActivatePwd содержит 4-байтовый пароль активации защищенной ячейки, в том случае, если разрешен сервис активации установкой флага nsafl_ActivationSrv.
Поле rs_DeactivatePwd содержит 4-байтовый пароль деактивации защищенной ячейки, в том случае, если разрешен сервис деактивации установкой флага nsafl_DeactivationSrv.
Поле rs_ReadPwd содержит 4-байтовый пароль чтения данных защищенной ячейки, в том случае, если разрешен сервис чтения данных по паролю установкой флага nsafh_ReadPwd.
Поле rs_UpdatePwd содержит 4-байтовый пароль на обновление данных защищенной ячейки в том случае, если разрешен сервис обновления данных по паролю установкой флага nsafh_UpdateSrv.
Поле rs_BirthTime содержит дату и время автоматической активации алгоритма. Если не установлен флаг nsafh_BirthTime, значение поля игнорируется. Дата и время хранятся в структуре TGrdTime:
Смещение | Длина | Название | Комментарий |
---|---|---|---|
0 | BYTE | BSeconds | Секунды от 0 до 59 |
1 | BYTE | BMinute | Минуты от 0 до 59 |
2 | BYTE | BHour | Часы от 0 до 23 |
3 | BYTE | BDay | Дни от 1 до 31 |
4 | BYTE | BMonth | Месяцы от 1 до 12 |
5 | BYTE | BYear | Годы от 0 до 99, начиная с 2000 года |
Поле rs_DeadTime содержит дату и время автоматической деактивации алгоритма. Если не установлен nsafh_DeadTime, значение поля игнорируется. Дата и время хранятся в структуре TgrdTime (см. выше).
Поле rs_LifeTime содержит время, в течение которого алгоритм будет оставаться в активном состоянии после первого обращения к нему. Если не установлен флаг nsafh_LifeTime, значение поля игнорируется. Дата и время хранятся в структуре TGrdLifeTime:
Смещение | Длина | Название | Комментарий |
0 | TGrdTime | LifeTime | Срок жизни аппаратного алгоритма после первого обращения (в виде разницы дат) |
6 | BYTE | State | 0 – обращений к алгоритму еще не было, это исходное значение. При предпродажном программировании ключа в поле rs_DeadTime рекомендуется помещать текущее время на момент программирования. |
7 | BYTE | ReservedForEven | Зарезервировано для выравнивания |
Поле rs_FlipTime содержит время rs_ChangeFlipTimeStart, когда должна начаться автоматическая модификация определителя алгоритма и количество дней rs_DaysGap, составляющих период смены.
Если не установлен флаг nsafh_FlipTime, значение поля игнорируется. Дата и время хранятся в структуре TGrdFlipTime:
Смещение | Длина | Название | Комментарий |
0 | TGrdTime | rs_ChangeFlipTimeStart | Дата и время, с которого начинается отсчет |
6 | BYTE | rs_DaysGap | Алгоритм меняется каждые rs_DaysGap дней, начиная с даты rs_ChangeFlipTimeStart. Должно быть значение от 1 до 255 |
7 | BYTE | ReservedForEven | Зарезервировано для выравнивания |
Поле rs_GP содержит счетчик алгоритма. Если указан флаг nsaf_GP_dec, то это поле задает то количество раз, которое алгоритм может быть выполнен. По достижении счетчиком нулевого значения, такой алгоритм переходит в деактивированное состояние и перестает преобразовывать данные. При дальнейших обращениях возвращается код ошибки GrdE_InactiveItem. Значение счетчика можно увеличить, только записав весь дескриптор заново.
Поле rs_ErrorCounter содержит счетчик неудачных попыток подбора паролей на доступ к защищенной ячейке. При каждой неудачной попытке счетчик уменьшается на 1. По достижении счетчиком нуля защищенная ячейка переходит в состояние с неизменяемым статусом.
Поле rs_K[] содержит данные защищенной ячейки. В зависимости от типа ячейки здесь может храниться секретный ключ алгоритма, либо какие-нибудь иные данные. Длина данных обязательно должна соответствовать значению поля rs_klen. Данные защищенной ячейки можно считывать или изменять только с помощью специальных функций. Главное отличие защищенной ячейки от простых данных заключается в том, что ее данные можно менять, только указав специальный пароль. Этот пароль программируется разработчиком и хранится в дескрипторе защищенной ячейки. Такой механизм позволяет производить более безопасное изменение части памяти ключа, не затрагивающее остальную память.
В дескрипторах алгоритмов с загружаемым кодом в поле rs_K[] должна содержаться структура TGrdLoadableCodeData, описывающая свойства модуля загружаемого кода. Эта структура разделена на публичную часть, данные которой можно прочитать, если сервис чтения разрешен, и приватную часть, данные которой закрыты от чтения.
Длина, байт | Имя поля | Комментарий |
---|---|---|
Публичная часть (структура TGrdCodePublicData), данные доступны для чтения |
|
|
1 | bLoadableCodeVersion | Версия загружаемого кода |
1 | bReserved0 | Зарезервировано |
1 | bState | Состояние загружаемого кода (GrdCodeState_XXXXX) |
1 | bReserved | Зарезервировано |
4 | dwLoadingDate | Дата загрузки кода. Заполняется автоматически функцией GrdCodeLoad |
Закрытая часть структуры, данные не доступны для чтения |
|
|
40 | abLoadableCodePublicKey4VerifySign | Открытый ключ для проверки подписи кода |
20 | abLoadableCodePrivateKey4DecryptKey | Закрытый ключ для расшифрования ключа AES, на котором зашифрован загружаемый код |
4 | dwBegFlashAddr | Начальный адрес Flash-памяти, зарезервированной для загружаемого кода |
4 | dwEndFlashAddr | Конечный адрес Flash-памяти, зарезервированной для загружаемого кода |
4 | dwBegMemAddr | Начальный адрес RAM ключа, зарезервированной для загружаемого кода |
4 | dwEndMemAddr | Конечный адрес RAM ключа, зарезервированной для загружаемого кода |