Versions Compared

Key

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

...


б) Для 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 рекомендуется помещать текущее время на момент программирования.
1 – алгоритм уже активировался, это значение устанавливается автоматически после первого обращения к алгоритму. В поле 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 ключа, зарезервированной для загружаемого кода