Перейти к содержимому
Аладдин Р.Д.
Библиотека
Библиотека

Особенности приложения ГОСТ

USB-токены и смарт-карты JaCartaAPI и SDKUSB-токены и смарт-карты JaCarta

Макрос JC_MODEL_CRYPTOTOKEN_2 используется для выбора приложения ГОСТ, имеющего следующие варианты версий:

  • 2.5.5
  • 2.5.13

Для того, чтобы однозначно определить с каким приложением какой версии предстоит работать, необходимо после выбора приложения получить его версию. Сделать это можно с помощью функции C_GetTokenInfo, проанализировав tokenInfo.firmwareVersion.major и tokenInfo.firmwareVersion.minor.

Версии приложения ГОСТ:

  • ver255 = (tokenInfo.firmwareVersion.major == 2 && tokenInfo.firmwareVersion.minor == 0x37)
  • ver2513 = (tokenInfo.firmwareVersion.major == 2 && tokenInfo.firmwareVersion.minor == 0x3f)

Приведем пример кода, демонстрирующего получение версии приложения:

// просматриваем список полученных токенов
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;
}
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;
}

Функциональные отличия версий приложения ГОСТ

Заголовок раздела «Функциональные отличия версий приложения ГОСТ»

Приложение ГОСТ имеет разные версии, являющиеся поэтапным развитием приложения:

  • 2.5.5;
  • 2.5.13.

Важно! Помните, что более новые (высокие) версии приложения ГОСТ имеют ряд функциональных отличий, не поддерживаемых более старыми (низкими) версиями приложения.

Ниже приведены таблицы сравнения функциональных возможностей приложения ГОСТ версий 2.5.5, 2.5.13.

Необходимо ориентироваться на эту информации при встраивании приложения ГОСТ.

Поддержка

ФункциональностьПриложение ГОСТ, версия 2.5.5Приложение ГОСТ, версия 2.5.13
Поддержка алгоритмов ГОСТ Р 34.10-2012/ГОСТ 34.10-2018 (256 и 512 бит):
- генерация ключевых пар;
- формирование и проверка электронной подписи;
- срок действия закрытых ключей до 3-х лет.
Частичное соответствие. Поддерживаются только ключи длиной 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-кодом.

Ролевая модель:

РольПриложение ГОСТ, версия 2.5.5Приложение ГОСТ, версия 2.5.13
Гость - доступны только публичные объекты для чтения. Введение PIN-кода не требуется.СоответствиеСоответствие
Пользователь - доступны любые объекты для записи, чтения, модификации, удаления. Требуется введение PIN-кода.СоответствиеСоответствие
Администратор изделия (АИ) - доступны административные действия над устройством. Требуется введение PIN-кода АИ.Поддержка отсутствуетСоответствие
Администратор безопасности (АБ) - доступны всё административные действия и действия над доверенными ключами. Требуется введение ключа АБ.СоответствиеСоответствие

Поддержка PIN-кодов:

Тип PIN-кодаПриложение ГОСТ, версия 2.5.5Приложение ГОСТ, версия 2.5.13 или выше
PIN-код пользователяПоддерживаетсяПоддерживается
PIN-код администратора изделия (АИ)Не поддерживаетсяПоддерживается
PIN-код подписиПоддерживаетсяПоддерживается
PIN-код форматированияНе поддерживаетсяПоддерживается
PUK-код разблокировкиПоддерживаетсяПоддерживается¹

¹ С версии 2.5.13 функцию PUK-кода выполняет PIN-код администратора изделия (АИ).

Функциональные возможности, связанные с PIN-кодами:

ФункциональностьПриложение ГОСТ, версия 2.5.5Приложение ГОСТ, версия 2.5.13
Разблокировка PIN-кода пользователяСоответствиеСоответствие
Форматирование приложения по PIN-коду пользователяСоответствиеСоответствие
Форматирование приложения по PIN-коду АИ с установкой политик PIN-кода пользователяПоддержка отсутствуетСоответствие (при наличии полномочий АИ)
Смена PIN-кода пользователяСоответствиеСоответствие. Доступно пользователю и АИ (при наличии полномочий АИ).
Смена PIN-кода администратораПоддержка отсутствуетСоответствие
Настройка политики смены PIN-кода пользователяПоддержка отсутствуетС производства смена PIN-кода доступна пользователю и администратору.

Доступные политики смены:
- Смена доступна только пользователю
- Смена доступна только АИ
- Смена доступна пользователю и АИ
PIN-код форматированияПоддержка отсутствуетСоответствие
Индикация смены дефолтных PIN-кодовПоддержка отсутствуетСоответствие
  • Гость. В этом режиме доступа устройство работает по умолчанию. Гостю доступны только публичные объекты и только для чтения. Гость не может выполнять операции записи, изменения или удаления данных, включая пользовательские данные и криптографические ключи. Если устройство работает в другом режиме доступа, то для перехода в режим гостя необходимо вызвать функцию C_Logout.

  • Пользователь. Этот режим доступа включается после предъявления PIN-кода пользователя. Пользователь может выполнять операции чтения, записи, изменения или удаления данных, включая любые приватные данные и некоторые криптографические ключи. Пользователь может выполнять криптографические операции, такие как электронная подпись и шифрование. Для перехода в режим пользователя, необходимо вызвать функцию C_Login c userType равным CKU_USER.

  • Администратор изделия или просто Администратор. Этот режим доступа включается после предъявления PIN-кода администратора. Администратор имеет право выполнять различные административные действия, такие как разблокирование устройства инициализация устройства, установка PIN-кода пользователя, установка парольных политик и ряд других действий. Администратор не имеет доступа к пользовательским данным и криптографическим ключам. Для перехода в режим администратора, необходимо вызвать функцию C_Login c userType равным CKU_SO. **Только для приложения ГОСТ версии 2.5.13 и выше!

  • Администратор Безопасности. Этот режим доступа включается после предъявления ключа администратора безопасности. Администратор Безопасности имеет расширенные полномочия, по сравнению с Администратором, и может выполнять полную реконфигурацию изделия, устанавливать любые политики, а также записывать и управлять доверенной ключевой информацией. Доверенные ключи, записанные Администратором Безопасности, не могут быть удалены или изменены. Согласно правилам пользования, функции Администратора Безопасности должны выполняться с помощью специального ПО - АРМ Администратора Безопасности.

В состав SDK входит функциональный аналог - АРМ Разработчика, предназначенный для тех же целей, что АРМ Администратора Безопасности. Однако его применение возможно только на этапе разработки и тестирования.

PUK-код используется для разблокировки PIN-кода пользователя для приложения ГОСТ версий 2.5.5. PUK-код не сбрасывает PIN-код пользователя, а обнуляет счётчик неуспешных попыток. Установка, смена, удаление.

Установка, смена, удаление PUK-кода должна проводиться Администратором Безопасности на “АРМ Aдминистратора Безопасности”.

Предъявление PUK-кода.

PUK-код предъявляется с помощью функции C_Login() с параметром userType равном CKU_PUK. При этом будет включена гостевая сессия, а счётчик неверных попыток ввода PIN-кода пользователя будет сброшен и установлен в 0.

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-кода подписи:

  1. Предъявить PIN-код пользователя, вызвав функцию C_Login() с параметром userType равном CKU_USER. Произойдет переход в пользовательскую сессию.
  2. Предъявить PIN-код подписи, вызвав функцию C_Login() с параметром userType равном CKU_SIGNATURE. Сессия не изменится, т.е. останется пользовательской.
  3. Подписать данные или создать запрос на сертификат.
  4. Сбросить состояние аутентификации, вызвав функцию C_Login(). Произойдет переход в гостевую сессию.

PIN-код форматирования возвращает приложение ГОСТ версии 2.5.13 и выше в начальное состояние: удаляются все данные, а PIN-коды сбрасываются к значениям по умолчанию.

Установка, смена, удаление.

Установка, смена, удаление PIN-кода форматирования должна проводиться Администратором Безопасности на “АРМ Aдминистратора Безопасности”.

Предъявление PIN-кода форматирования.

PIN-код форматирования предъявляется с помощью функции C_Login() с параметром userType равном JC_KT2_PIN_TYPE_FORMAT. При этом будет включена гостевая сессия, память очищена, все настройки сброшены до заводских, а значения PIN-кодов будут установлены в значения по умолчанию.

Приложение ГОСТ поддерживает строгий сеанс работы с токеном, в котором:

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

Это защищает от попыток вредоносных приложений:

  • подменить подписываемый документ в канале связи между библиотекой и токеном;
  • использовать состояние “залогиненности” для подписи посторонних поддельных документов.

Для его включения необходимо вызвать функцию C_Login() с параметром userType = CKU_USER_SM.