2.3.1.1 Учёт версионности приложения GOST
Макрос JC_MODEL_CRYPTOTOKEN_2 используется для выбора приложения GOST, имеющего следующие варианты версий:
- 2.5.5
- 2.5.9
- 2.5.13
Для того, чтобы однозначно определить с каким приложением какой версии предстоит работать, необходимо после выбора приложения получить его версию.
Сделать это можно с помощью функции C_GetTokenInfo, проанализировав tokenInfo.firmwareVersion.major и tokenInfo.firmwareVersion.minor.
Версии приложения GOST:
ver255 = (tokenInfo.firmwareVersion.major == 2 && tokenInfo.firmwareVersion.minor == 0x37)
ver259 = (tokenInfo.firmwareVersion.major == 2 && tokenInfo.firmwareVersion.minor == 0x3B)
ver2513 = (tokenInfo.firmwareVersion.major == 2 && tokenInfo.firmwareVersion.minor == 0x3f)
Приведем пример кода, демонстрирующего получение версии приложения:
<pre> // просматриваем список полученных токенов for (std::vector<CK_SLOT_ID>::iterator slot = slots.begin(); slot != slots.end(); ++slot) { CK_TOKEN_INFO tokenInfo = {}; // получить информацию о токене в слоте rv = CALL_P11(C_GetTokenInfo(*slot, &tokenInfo)); CHECK_RES(rv, "C_GetTokenInfo"); printf("C_GetTokenInfo - OK\n"); const std::string& strCurrentModel = P11Utils::CK2string(tokenInfo.model, sizeof(tokenInfo.model)); if (strCurrentModel == JC_MODEL_CRYPTOTOKEN_2) { bGostFound = true; gostSlotId = *slot; printf("Target applet (KT2) - found\n"); } if (bGostFound) { ver255 = (tokenInfo.firmwareVersion.major == 2 && tokenInfo.firmwareVersion.minor == 0x37); if(ver255) { printf("GOST2 ver. 2.5.5 found.\n"); break; } ver259 = (tokenInfo.firmwareVersion.major == 2 && tokenInfo.firmwareVersion.minor == 0x3B); if(ver2513) { printf("GOST2 ver. 2.5.9 found.\n"); break; } ver2513 = (tokenInfo.firmwareVersion.major == 2 && tokenInfo.firmwareVersion.minor == 0x3f); if(ver2513) { printf("GOST2 ver. 2.5.13 found.\n"); break; } } } if (false == bGostFound) { printf("No smartcard with GOST2 applet found.\n"); goto end; }</pre>2.3.1.2 Функциональные отличия версий приложения GOST
Приложение GOST имеет разные версии, являющиеся поэтапным развитием приложения:
- 2.5.5;
- 2.5.9;
- 2.5.13.
Ниже приведены таблицы сравнения функциональных возможностей приложения GOST версий 2.5.5, 2.5.9, 2.5.13.
Необходимо ориентироваться на эту информации при встраивании приложения GOST.
Поддержка
Функциональность | Приложение GOST, версия 2.5.5 | Приложение GOST, версия 2.5.9 | Приложение GOST, версия 2.5.13 |
Поддержка алгоритмов ГОСТ Р 34.10-2012/ГОСТ 34.10-2018 (256 и 512 бит): | Частичное соответствие. Поддерживаются только ключи длиной 256 бит. | Частичное соответствие. Поддерживаются только ключи длиной 256 бит. | Соответствие |
Поддержка алгоритмов ГОСТ Р 34.11-2012/ГОСТ 34.11-2018 (256 и 512 бит): | Соответствие | Соответствие | Соответствие |
Поддержка алгоритма ГОСТ 28147-89: - генерация и импорт ключей шифрования; - вычисление и проверка криптографической контрольной суммы данных (имитовставки по ГОСТ). | Соответствие | Соответствие | Соответствие |
Поддержка алгоритмов ГОСТ Р 34.12-2015/ГОСТ 34.12-2018 (Магма): | Поддержка отсутствует | Соответствие | Соответствие |
Поддержка алгоритмов ГОСТ Р 34.12-2015/ГОСТ 34.12-2018 (Кузнечик): | Поддержка отсутствует | Поддержка отсутствует | Соответствие |
Работа с СКЗИ «КриптоПро CSP 5.0 R3» и новее по протоколу защиты канала SESPAKE (режим ФКН) | Поддержка отсутствует | Поддержка отсутствует | Соответствие. Реализовано отдельным апплетом ФКН со своим PIN-кодом и PUK-кодом. |
Ролевая модель:
Роль | Приложение GOST, версия 2.5.5 | Приложение GOST, версия 2.5.9 | Приложение GOST, версия 2.5.13 |
|---|---|---|---|
Гость - доступны только публичные объекты для чтения. Введение ПИН-кода не требуется. | Соответствие | Соответствие | Соответствие |
Пользователь - доступны любые объекты для записи, чтения, модификации, удаления. Требуется введение ПИН-кода. | Соответствие | Соответствие | Соответствие |
Администратор изделия (АИ) - доступны административные действия над устройством. Требуется введение ПИН-кода АИ. | Поддержка отсутствует | Поддержка отсутствует | Соответствие |
Администратор безопасности (АБ) - доступны всё административные действия и действия над доверенными ключами. Требуется введение ключа АБ. | Соответствие | Соответствие | Соответствие |
Поддержка ПИН-кодов:
Роль | Приложение GOST, версия 2.5.5 | Приложение GOST, версия 2.5.9 | Приложение GOST, версия 2.5.13 |
|---|---|---|---|
ПИН-код пользователя | Соответствие | Соответствие | Соответствие |
ПИН-код администратора изделия (АИ) | Поддержка отсутствует | Поддержка отсутствует | Соответствие |
ПИН-код подписи | Соответствие | Соответствие | Соответствие |
ПИН-код форматирования (сброса к заводским настройкам) | Поддержка отсутствует | Поддержка отсутствует | Соответствие |
PUK-код разблокировки | Соответствие | Соответствие | Соответствие. Роль PUK-кода исполняет ПИН-код администратора изделия (АИ) |
Функциональные возможности, связанные с ПИН-кодами:
Функциональность | Приложение GOST, версия 2.5.5 | Приложение GOST, версия 2.5.9 | Приложение GOST, версия 2.5.13 |
Разблокировка PIN-кода пользователя | Соответствие | Соответствие | Соответствие |
Форматирование приложения по PIN-коду пользователя | Соответствие | Соответствие | Соответствие |
Форматирование приложения по PIN-коду АИ с установкой политик PIN-кода пользователя | Поддержка отсутствует | Поддержка отсутствует | Соответствие (при наличии полномочий АИ) |
Смена PIN-кода пользователя | Соответствие | Соответствие | Соответствие. Доступно пользователю и АИ (при наличии полномочий АИ). |
Смена PIN-кода администратора | Поддержка отсутствует | Поддержка отсутствует | Соответствие |
Настройка политики смены PIN-кода пользователя | Поддержка отсутствует | Поддержка отсутствует | С производства смена PIN-кода доступна пользователю и администратору. |
PIN-код форматирования | Поддержка отсутствует | Поддержка отсутствует | Соответствие |
Индикация смены дефолтных PIN-кодов | Поддержка отсутствует | Поддержка отсутствует | Соответствие |
2.3.1.3 Ролевая модель приложения GOST
- Гость. В этом режиме доступа устройство работает по умолчанию. Гостю доступны только публичные объекты и только для чтения. Гость не может выполнять операции записи, изменения или удаления данных, включая пользовательские данные и криптографические ключи. Если устройство работает в другом режиме доступа, то для перехода в режим гостя необходимо вызвать функцию C_Logout.
- Пользователь. Этот режим доступа включается после предъявления ПИН-кода пользователя. Пользователь может выполнять операции чтения, записи, изменения или удаления данных, включая любые приватные данные и некоторые криптографические ключи. Пользователь может выполнять криптографические операции, такие как электронная подпись и шифрование. Для перехода в режим пользователя, необходимо вызвать функцию C_Login c userType равным CKU_USER.
- Администратор изделия или просто Администратор. Этот режим доступа включается после предъявления ПИН-кода администратора. Администратор имеет право выполнять различные административные действия, такие как разблокирование устройства инициализация устройства, установка ПИН-кода пользователя, установка парольных политик и ряд других действий. Администратор не имеет доступа к пользовательским данным и криптографическим ключам. Для перехода в режим администратора, необходимо вызвать функцию C_Login c userType равным CKU_SO. Только для приложения GOST версии 2.5.13 и выше!
- Администратор Безопасности. Этот режим доступа включается после предъявления ключа администратора безопасности. Администратор Безопасности имеет расширенные полномочия, по сравнению с Администратором, и может выполнять полную реконфигурацию изделия, устанавливать любые политики, а также записывать и управлять доверенной ключевой информацией. Доверенные ключи, записанные Администратором Безопасности, не могут быть удалены или изменены. Согласно правилам пользования, функции Администратора Безопасности должны выполняться с помощью специального ПО - АРМ Администратора Безопасности.
2.3.1.4 Уникальные ПИН-коды приложения GOST
PUK-код
PUK-код используется для разблокировки PIN-кода пользователя для приложения GOST версий 2.5.5, 2.5.9. PUK-код не сбрасывает PIN-код пользователя, а обнуляет счётчик неуспешных попыток.
Установка, смена, удаление.
Установка, смена, удаление PUK-кода должна проводиться Администратором Безопасности на «АРМ Aдминистратора Безопасности».
Предъявление PUK-кода.
PUK-код предъявляется с помощью функции C_Login() с параметром userType равном CKU_PUK. При этом будет включена гостевая сессия, а счётчик неверных попыток ввода PIN-кода пользователя будет сброшен и установлен в 0.
PIN-код подписи
PIN-код подписи используется как дополнительный фактор для подтверждения операции подписи. Его использование не отменяет необходимость предъявления PIN-кода пользователя для работы в режиме пользователя.
Установка, смена и предъявление
PIN-код подписи устанавливается с помощью функции JC_KT2_SetSignaturePIN(). После установки PIN-код подписи пользователь уже не сможет его удалить, только изменить на новый.
Для изменения PIN-кода подписи необходимо вызвать функцию JC_KT2_ChangeSignaturePIN().
PIN-код подписи может быть удалён только после инициализации устройства.
PIN-код подписи предъявляется с помощью функции C_Login() с параметром userType равном CKU_SIGNATURE. Вызов C_Logout() переключит текущую сессию в гостевую. Т.е. нельзя отменить PIN-код подписи отдельно от сессии пользователя.
Использование PIN-кода подписи
Предъявление PIN-кода подписи является опциональным для каждой ключевой пары на устройстве. Необходимость предъявления задаётся атрибутом CKA_ALWAYS_AUTHENTICATE:
CK_TRUE– необходимо предъявление PIN-кода подписи;CK_FALSE– предъявление PIN-кода подписи не требуется.
Атрибут неизменяемый, т.е. необходимость использования PIN-кода подписи для каждой ключевой пары задаётся на этапе её создания.
Подготовка PIN-кода подписи к использованию:
- установить PIN-код подписи на токен с помощью функции
JC_KT2_SetSignaturePIN(). - сгенерировать ключевую пару при помощи функции
C_GenerateKeyPair(), где в шаблоне закрытого ключа установить атрибутCKA_ALWAYS_AUTHENTICATEвCK_TRUE.
Примечание: Если не установить PIN-код подписи, но при этом создать ключевую пару с необходимостью его предъявления, то такой ключевой парой нельзя будет подписать до установки PIN-кода подписи. |
Использование PIN-кода подписи:
- Предъявить PIN-код пользователя, вызвав функцию
C_Login()с параметром userType равномCKU_USER. Произойдет переход в пользовательскую сессию. - Предъявить PIN-код подписи, вызвав функцию
C_Login()с параметром userType равномCKU_SIGNATURE. Сессия не изменится, т.е. останется пользовательской. - Подписать данные или создать запрос на сертификат.
- Сбросить состояние аутентификации, вызвав функцию
C_Login(). Произойдет переход в гостевую сессию.
PIN-код форматирования (сброса к заводским настройкам)
PIN-код форматирования (сброса к заводским настройкам) используется для сброса всех настроек приложения GOST версии 2.5.13 до заводских, а также удаления всех данных.
Установка, смена, удаление.
Установка, смена, удаление PIN-кода форматирования должна проводиться Администратором Безопасности на «АРМ Aдминистратора Безопасности».
Предъявление PIN-кода форматирования.
PIN-код форматирования предъявляется с помощью функции C_Login() с параметром userType равном JC_KT2_PIN_TYPE_FACTORY_RESET. При этом будет включена гостевая сессия, память очищена, все настройки сброшены до заводских, а значения ПИН-кодов будут установлены в значения по умолчанию.
2.3.1.4 Строгий сеанс работы приложения GOST
Приложение GOST поддерживает строгий сеанс работы с токеном, в котором:
- все данные, передаваемые между библиотекой и токеном, шифруются;
- устройство входит в эксклюзивный режим работы и отвергает попытки любых сторонних приложений получить доступ к его функциям.
Это защищает от попыток вредоносных приложений:
- подменить подписываемый документ в канале связи между библиотекой и токеном;
- использовать состояние “залогиненности” для подписи посторонних поддельных документов.
Для его включения необходимо вызвать функцию C_Login() с параметром userType = CKU_USER_SM.