Токены PKCS#11: генерация ключевой пары и неизвлекаемость приватного ключа (Продолжение) / Хабр

Токены PKCS#11: генерация ключевой пары и неизвлекаемость приватного ключа (Продолжение) / Хабр Электронная цифровая подпись

Итак, что такое ключевая пара?

Ключевая пара включает в себя два ключа:

Следует помнить, что закрытый и открытый ключи это не только их значения (для открытого ключа ГОСТ Р 34.10-2001 это 512 бит), но и параметры схемы цифровой подписи (п. 5.2

). В дальнейшем параметры схемы цифровой подписи для простоты будем называть параметрами (криптопараметрами) ключевой пары.

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

Для ключевых пар ГОСТ Р 34.10-2001 и ГОСТ Р 34.10-2021 с длиной закрытого ключа 256 бит (соответственно, публичный ключ – 512 бит) определены следующие криптопараметры:id-GostR3410-2001-CryptoPro-A-ParamSet;id-GostR3410-2001-CryptoPro-B-ParamSet;

id-GostR3410-2001-CryptoPro-C-ParamSet;id-GostR3410-2001-CryptoPro-XchA-ParamSet;id-GostR3410-2001-CryptoPro-XchB-ParamSet.Для ключевых пар ГОСТ Р 34.10-2021 с длиной закрытого ключа 512 бит (соответственно, публичный ключ – 1024 бита) определены следующие криптопараметры («Информационная технология. Криптографическая защита информации. Параметры эллиптических кривых для криптографических алгоритмов и протоколов»):

  1. id-tc26-gost-3410-2021-512-paramSetA;
  2. id-tc26-gost-3410-2021-512-paramSetB.

Состав криптопараметров определен в

. В этот состав входит простое число

q

— порядок подгруппы группы точек эллиптической кривой:


И именно оно определяет длину закрытого/открытого ключей и корректность закрытого ключа:

imageimage
И так, открытый ключ получается из закрытого ключа.

А откуда берется закрытый ключ?

Для получения закрытого ключа сначала необходимо решить какой длины будет закрытый ключ (256 или 512 бит), затем определиться с криптопараметрами ключевой пары. Теперь берем датчик случайных чисел и получаем случайное число соответствующей длины. Собственно это случайное число и должно стать значением

d

закрытого ключа (ключом подписи d). Это значение должно удовлетворять следующему правилу:

0 < d < q, где q– простое число из криптопараметров.

Что делать, если это условие не выполняется? Если d == 0, то просто сгенерировать новое случайное число. В противном случае достаточно бывает взять остаток от деления на цело значения d, которое превышает q, на q (d % q). Остаток и станет значением закрытого ключа.

Именно поэтому регулятор (ФСБ России) предъявляет особые требования к датчику случайных чисел.

Читайте также:  ФСС Часто задаваемые вопросы

В качестве примера основного источника для заполнения буфера:


В качестве дополнительных источников для заполнения данного буфера могут выступать:

Таким образом, чтобы токен/смарткарта PKCS#11 могли генерировать внутри себя ключевую пару, необходимо наличие токен/смарткарта встроенного аппаратного датчика случайных чисел, соответствующего требованиям регулятора. И только тогда можно говорить о неизвлекаемости закрытого ключа.

Для генерации ключевой пары используется фунция C_GenerateKeyPair. В зависимости от того, какую ключевую пару (с какой длиной закрытого ключа 256 или 512 бит) мы генерируем, в ней будет использоваться соответствующий механизм:


При генерации ключевой пары задаются ее атрибуты, например, криптопараметры:

Копирование с помощью криптопро csp

     1. Выбрать Пуск / Панель Управления / КриптоПро CSP.

     2. Перейти на вкладку Сервис и кликнуть по кнопке Скопировать контейнер. 

     3. В окне «Копирование контейнера закрытого ключа» нажмите на кнопку «Обзор».

     4. Выберите контейнер, который необходимо скопировать, и кликните по кнопке «Ок», затем «Далее». 

     5. Если вы копируете с защищённого ключевого носителя, то появится окно ввода, в котором следует указать pin-код. 

     6. Если вы не меняли pin-код на носителе, стандартный pin-код необходимо вводить соответственно его типу:

Rutoken – стандартный pin-код 12345678eToken /JaCarta  – 1234567890

     7. В следующем окне необходимо ввести имя Вашей копии. Придумайте и укажите вручную имя для нового контейнера. В названии контейнера допускается русская раскладка и пробелы. Затем кликните «Готово».

     8. В окне «Выбор ключевого носителя» выберите носитель, на который будет помещен новый контейнер.

9. На новый контейнер будет предложено установить пароль. Рекомендуем установить такой пароль, чтобы вам было легко его запомнить, но посторонние не могли его угадать или подобрать. Если вы не хотите устанавливать пароль, можно оставить поле пустым и нажать «ОК».

В случае утери пароля/pin-кода использование контейнера станет невозможным.

     10. Если вы копируете контейнер на смарт-карту ruToken/eToken /JaCarta, окно запроса будет выглядеть так: 

     11. В окне ввода укажите pin-код. Если вы не меняли pin-код на носителе, стандартный pin-код 

Читайте также:  Как записаться на переоформление авто в спецЦОНе — Kolesa.kz || Почитать

Rutoken – 12345678eToken /JaCarta  – 1234567890

     12. После копирования система вернется на вкладку «Сервис» КриптоПро CSP. Копирование завершено. 

     13. Для работы с копией ключевого контейнера необходимо установить личный сертификат.

     14. В меню Пуск выберите пункт «КРИПТО-ПРО», запустите приложение «КриптоПро CSP»

     15. Перейдите на вкладку «Сервис» и нажмите кнопку «Просмотреть сертификаты в контейнере»:

     16. В следующем окне нажмите кнопку Обзор, чтобы выбрать контейнер для просмотра (в нашем примере контейнер находится в Реестре):

     17. После выбора контейнера нажмите кнопку Ок, затем Далее

     18. Если после нажатия на кнопку Далее Вы видите такое сообщение:

     19. «В контейнере закрытого ключа отсутствует открытый ключ шифрования», следует установить сертификат по рекомендациям, описанным в разделе «Установка через меню «Установить личный сертификат».

     20. В окне Сертификат для просмотра нажмите кнопку Установить:

     21. Если откроется сообщение «Этот сертификат уже присутствует в хранилище сертификатов. Заменить существующий сертификат новым, с проставленной ссылкой на закрытый ключ?», нажмите Да:

     22. Дождитесь сообщения об успешной установке:

     23. Сертификат установлен. Можно закрыть все открытые окна КриптоПро.

Нас интересуют атрибуты извлекаемости закрытого ключа.

Это прежде атрибут CKA_SENSITIVE, отвечающий за возможность получения значения закрытого ключа. Если значение атрибута CKA_SENSITIVE установлено в CK_TRUE, то закрытый ключ не может быть извлечен из токена в открытом виде. Второй атрибут CKA_EXTRACTABLE позволяет получать закрытый ключ в зашифрованном виде. Для этого его необходимо установить CK_TRUE.

Установка атрибута CKA_SENSITIVE в CK_TRUE, а атрибута CKA_EXTRACTABLE в CK_FALSE при генерации ключевой пары делает закрытый ключ абсолютно неизвлекаемым. Возможность определять является ли ключ экспортабельным имеется в браузере Redfox:

Кто-то скажет, — а что если изменить значения этих атрибутов. Как правило этого сделать нельзя, защиту понизить нельзя, также как «нельзя понижать градус». Точно также можно сделать неизвлекаемым закрытый ключ после его импорта на токен (если конечно токен/смарткарта разрешают импорт).

В последнем случае (при импорте) следует иметь в виду, что хотя закрытый ключ и стал неизвлекаемым, он появился со стороны (например, из PKCS#12), и гарантии, что нет еще где-то его дубликата нету.

Читайте также:  Клиентский сертификат не сопоставлен с пользователем

И вот здесь не мешало бы напомнить тебе, уважаемый читатель, что безопасность обеспечивается только КОМПЛЕКСОМ организационных и технических мероприятий. Поэтому не получится латать дыры в организационной безопасности за счет технических средств и наоборот — все должно быть органично согласовано. В том числе, и при доступе к значению закрытого ключа.

Убедиться, что на токен/смарткарте находятся полноценные объекты PKCS#11 (CKO_PRIVATE_KEY, CKO_PUBLIC_KEY, CKO_CERTIFICATE), которые участвуют в криптографических операциях на самом токене удобно с помощью доступной для свободного скачивания утилиты p11conf:

Установка через меню «установить личный сертификат».

     1. Для установки сертификата этим способом Вам понадобится файл сертификата (файл с расширением.cer). 

     2. В меню Пуск выберите пункт «КРИПТО-ПРО», запустите приложение «КриптоПро CSP»

     3. Перейдите на вкладку «Сервис» и нажмите кнопку «Установить личный сертификат»:

     4. В следующем окне нажмите кнопку Обзор, чтобы выбрать файл сертификата. Укажите путь к файлу сертификата и нажмите кнопку Открыть (в нашем примере файл сертификата находится на Рабочем столе):

     5. В следующем окне нажмите кнопку Далее; в окне Сертификат для установки нажмите Далее.

     6. Поставьте галку в окне Найти контейнер автоматически (в нашем примере контейнер находится в Реестре компьютера) и нажмите Далее:

     7. В следующем окне отметьте пункт Установить сертификат (цепочку сертификатов) в контейнер и нажмите Далее:

     8. В окне Завершение мастера установки личного сертификата нажмите Готово.

     9. Если КриптоПро CSP запрашивает pin-код от контейнера, введите нужный код или попробуйте стандартные pin-коды носителей:

Rutoken – 12345678eToken /JaCarta  – 1234567890

     10. Если откроется сообщение «Этот сертификат уже присутствует в хранилище сертификатов. Заменить существующий сертификат новым, с проставленной ссылкой на закрытый ключ?», нажмите Да:

     11. Сертификат установлен. Можно закрыть все открытые окна КриптоПро.

Остались вопросы? 

Оцените статью
ЭЦП Эксперт
Добавить комментарий

Adblock
detector