КриптоПро СSP 5.0 R2 и PKCS#11
Опубликовано Наталья Мовчан on 2021-06-22 16:09

КриптоПро CSP, начиная с версии CSP 5.0 R2, получил поддержку ключевых носителей через интерфейс PKCS#11.

Что важно знать про PKCS#11

Это не приложение, не библиотека и не часть операционной системы. Это просто описание интерфейса встраивания. Если производитель устройства хочет, чтобы его устройство встроили в какое-то приложение, использующее PKCS#11, он должен разработать собственную динамическую библиотеку (.dll на Windows или .so на Linux), которая будет реализовывать указанный интерфейс.

Тогда всё, что останется сделать прикладному приложению, - указать правильный путь до переданной библиотеки и использовать её в соответствии с известными спецификациями PKCS#11.

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

Главный вывод, который следует из вышеуказанного, - для работы с ключевым носителем через PKCS#11 первым делом нужно установить PKCS#11-библиотеку конкретного производителя:

N.B. На нашем сайте доступен установщик КриптоПро CSP 5.0 R2 для Windows, включающий в себя pkcs#11 модули компаний Актив, Аладдин Р.Д. и ISBC

Как CSP 5.0 11455 работает с неизвлекаемыми ключами

Первая сертифицированная версия КриптоПро CSP 5.0 умеет работать с неизвлекаемыми ключами на всех поддерживаемых токенах (прежде всего, Рутокен ЭЦП 2.0, JaCarta-2 ГОСТ и ESMART Token ГОСТ) напрямую. Производители токенов разработали специальные библиотеки (модули поддержки), которые оптимально формировали последовательности команд для выполнения операций.

У такого подхода есть плюсы:

  • Высокая производительность операций: криптопровайдер поддерживает точное состояние носителя с точностью до открытых папок и файлов, что позволяет минимизировать избыточные операции;
  • Удобство расширения интерфейса: криптопровайдер добавляет поддержку новой функции или протокола, разработчики токенов реализуют функции в модуле поддержки, пользователи получают работающее протестированное решение;
  • Кроссплатформенность и простота использования: всё, что нужно пользователю - пакет с модулем поддержки из состава криптопровайдера. Модули собираются, как правило, под тот же набор систем, что и базовые библиотеки CSP.

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

  • Производитель, который хочет добавить поддержку своего устройства в КриптоПро CSP, должен подробно изучить интерфейс встраивания модулей поддержки (READER) и написать довольно большой модуль - во многих случаях это доcтаточно сложная задача, требующая существенных временных затрат;
  • Так как интерфейс READER оперирует файловыми операциями, создаваемые для него объекты крайне сложно отобразить на другие интерфейсы. Это приводит к тому, что пользователь мог создать неизвлекаемый ключ штатными средствами носителя, но через КриптоПро CSP 5.0 этот ключ не будет виден, так как ему не хватает каких-то служебных файлов;
  • Дороговизна поддержки. КриптоПро CSP включает в свой состав около двух десятков модулей поддержки, многих из которых используются для десятков носителей в разных режимах. Учитывая, что их код является продуктом совместной разработки КриптоПро и производителей ключевых носителей, кодовая база, на которой они основаны, является крайне гетерогенной. Любое улучшение или исправление ошибки в CSP, связанной с ключевыми носителями, добавляет несколько недель тестирования и анализа кода, что сдвигает релиз сборки для пользователей.

Что изменилось в CSP 5.0 R2 12000

Взвесив все плюсы и минусы существующего подхода, мы приняли решение начать перевод поддержки носителей с неизвлекаемыми ключами с интерфейса READER на PKCS#11.

Нами был написан модуль поддержки Cryptoki (cryptoki.dll, cprocsp-rdr-cryptoki), который отображает интерфейс READER в PKCS#11. Поскольку этот релиз является первым с данной опцией, он обладает рядом особенностей:

Рутокен

  • Поддержка носителей Рутокен полностью переведена на PKCS#11 на всех платформах. CSP 5.0 R2 не будет работать с неизвлекаемыми ключами, пока не будет установлена библиотека PKCS#11. Свежие версии библиотеки умеют перечислять и использовать и старые ключи, которые были созданы в КриптоПро CSP 5.0 11455 через READER;
  • Если вам всё еще нужна поддержка «старого формата» напрямую - например, для создания ключей, которые будут работать в CSP 5.0.11455, её можно вернуть тут: Панель управления - КриптоПро CSP - Оборудование - Настроить типы носителей - Рутокен ЭЦП - Свойства - Настройки - Включить режим совместимости. Режим включается одной галкой не для одного токена, а для всех носителей Рутокен (в т.ч. Рутокен ПинПад, Рутокен 2151 и т.д.)

rutoken_old

  •  На Unix поддержка возвращается так: cpconfig -ini '\config\parameters' -add long EnableNativeTokenCryptMode 1

JaCarta и ESMART

  • По умолчанию на Windows для данных носителей ничего не изменилось - используется старый режим работы.
  • Для регистрации поддержки PKCS#11 нужно переподключить модуль PKCS#11:

Панель управления - КриптоПро CSP - Оборудование - Настроить считыватели - Считыватель смарт-карт PKCS#11 - Удалить - Добавить - Считыватель смарт-карт PKCS#11.

Рекомендуем отмечать галочками только те носители, которые вы действительно планируете использовать на данной рабочей станции, иначе в системном журнале будут множество ошибок загрузки библиотек:

registration

  • На Linux и MacOS регистрация PKCS#11 прописывается по умолчанию.

Создание ключей и имя считывателя

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

Например:

keygen_reader

 

Имя считывателя для PKCS#11-режима, которое используется в формате FQCN, отличается от стандартного. В перечислении оно начинается с PKCS11:

Winlogon, Распространение сертификата и RDP

К сожалению, изменение имени считывателя (добавление нового) сказалось на поддержке стандартных системных служб криптографии Windows.

  • При подключении токена к системе сертификаты из PKCS#11-контейнеров не устанавливаются в хранилище автоматически. Рекомендуем для этого пользоваться кнопкой «Установить сертификат» в Инструментах КриптоПро (cptools): 

instal_cert

  •  Использование PKCS#11-ключей для подключения по RDP или входа в систему через Winlogon невозможно.

Поддержка иных библиотек PKCS#11

Технически вы можете подключить любую другую библиотеку PKCS#11. Если она следует стандарту и его расширениям от ТК26, то, скорее всего, её поддержка заработает «из коробки». Подобное подключение будет соответствовать правилам использования КриптоПро CSP только при использовании ключевых носителей из Формуляра CSP.

Добавить можно в свойствах считывателя PKCS#11: Панель управления - КриптоПро CSP - Оборудование - Настроить считыватели - Считыватель смарт-карт PKCS#11 - Свойства - Настройки:

 

diff_readers

 

Обратите внимание, что на данной вкладке обязательно указывать путь только до 64-разрядной библиотеки. Если она будет находиться в стандартной системной директории System32, то 32-разрядная библиотека будет автоматически загружаться из директории SysWOW64.

Если же вы тестируете библиотеки, не установленные в системный стандартный путь, рекомендуем прописать путь до обеих библиотек.

 

Несколько важных замечаний, на которые нужно обратить внимание:

  • cptools (Инструменты КриптоПро) является 32-разрядным приложением. Некорректная регистрация 32-разрядной PKCS#11-библиотеки не позволит её использовать через данную утилиту;
  • мы рекомендуем использовать только самые последние версии сторонних библиотек;
  • если на машине установлено несколько криптопровайдеров, работающих с одной pkcs#11-библиотекой, они могут мешать друг другу в ряде случаев (например, при создании запросов на сертификат). Рекомендуем убрать регистрации используемых носителей из других критопровайдеров.
(94 плюсик(ов))
Класс!
Не очень :(

Коментарии (0)