Криптографический облачный сервис PKCS#11: от мифа к реальности

imageВ 2016 году была опубликована статья «Облачный токен PKCS#11 — миф или реальность?». Прошло полгода и вот на просторах Интернет появилось облако (облачный сервис), в котором желающие могут получить персональный облачный токен PKCS#11 с поддержкой российской криптографии.

Предисловие


Напомним, что PKCS#11 (Cryptoki) является стандартом, разработанным RSA Laboratories, для взаимодействия программ с криптографическими токенами, смарт-картами и другими аналогичными устройствами с помощью унифицированного программного интерфейса, который реализуется через библиотеки.

Криптографические токены обеспечивают как хранение сертификатов и ключевых пар (открытого и закрытого ключа), так и выполнение криптографических операций с соответствии со стандартом PKCS#11.

imageИ так, на просторах Интернет появился облачный сервис LS11CLOUD, являющийся облачной реализацией стандарта PKCS#11 v. 2.40, дополненного поддержкой российских криптографических алгоритмов в соответствии со спецификациями, выработанными Техническим комитетом по стандартизации (ТК 26) «Криптографическая защита информации». Облачный сервис LS11CLOUD поддерживает алгоритмы ГОСТ Р 34.10–2012, ГОСТ Р 34.11–2012, ГОСТ Р 34.12–2015 и ГОСТ Р 34.13–2015, а также сопутствующие алгоритмы и параметры, определенные руководящими документами ТК 26.

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

Обеспечение безопасного удаленного взаимодействия с защищенным личным контейнером криптографических объектов (токеном) по шифрованному сетевому каналу осуществляется с применением протокола аутентификации SESPAKE (Security Evaluated Standardized Password-Authenticated Key Exchange), рекомендованному ТК 26.

На стороне пользователя основная функциональность обеспечивается динамической библиотекой ls11cloud со стандартным программным интерфейсом pkcs#11. Для получения личного облачного токена пользователю необходимо зарегистрироваться на облачном сервисе LS11CLOUD, после которой провести инициализацию и конфигурирование личного токена на облачном сервисе.

Регистрация пользователя на облачном сервисе


Для начала отметим, что облачный токен LS11CLOUD находится по адресу pkcs11.ru и принимает запросы на порт 4444.

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

bash-4.3$ ./ls11cloud_config 
LS11CLOUD User Utility
usage:  ./ls11cloud_config  [-p ] [-n ]
Commands:
         register    - register new user on the server
         duplicate    - duplicate user account on other computer
         change_pswd - change SESPAKE authentication password
         status      - display current configuration data
         log         - display server log file
         recreate    - re-create token to initial empty state
         unregister  - remove all user files from the server
bash-4.3$


При регистрации пользователя указывается местоположение облачного сервиса (поле «host»), порт (поле «port»), через который ведется общение с внешним миром, и nickname (поле «id»), пользователя:

 bash-4.3$ ls11cloud_config register pkcs11.ru 4444 habrahabr


Для регистрации c платформы MS Windows имеется графическая оболочка с интуитивно понятным интерфейсом LS11CLOUDGUI для данной утилиты:

image

Получить дистрибутив для пользователя можно здесь.

И так приступаем к тестированию реализации российской криптографии в облачном токене PKCS#11. Тестирование проведем в среде MS Windows.

Установка LS11CLOUD_setup.exe включает в себя и генерацию начального значения датчика случайных чисел:

image

После скачивания и установки пакета LS11CLOUD_setup.exe, необходимо запустить графическую утилиту ls11cloudgui и нажать кнопку «Регистрации»:

image

Пароль необходим для создания защищенного канала (протокол SESPAKE) от приложения пользователя до его персонального токена в облаке. Пароль будет запрашиваться каждый раз, когда пользователь создает сессию с токеном:

image


В терминологии PKCS#11 сессия начинается с выполнения функции C_Initialize и разрывается выполнением функции C_Finalize.

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

При успешной регистрации пользователя для него будет создан новый токен с SO-PIN-ом 87654321:

image

Инициализация токена


После этого требуется провести инициализацию токена (установить метку, сменить SO PIN, установить пользовательский PIN и т.д.). Для инициализации токена используется утилита p11conf, которая входит в установочный дистрибутив:

bash-4.3$ p11conf
usage:  p11conf [-hitsmIupPred] -A APIpath [-c slotID -U userPin -S SOPin -n newPin -L label]
        -h display usage
        -i display PKCS11 info
        -t display token info
        -s display slot info
        -m display mechanism list
        -I initialize token 
        -u initialize user PIN
        -p set the user PIN
        -P set the SO PIN
        -r remove all objects
        -e enumerate objects
        -d dump all object attributes
bash-4.3$


Для платформы MS Windows имеется графическая оболочка с интуитивно понятным интерфейсом P11CONFGUI для данной утилиты:

image

Для инициализации личного облачного токена достаточно запустить утилиту P11CONGGUI.exe и нажать кнопку «Инициализировать»:

image

После нажатия кнопки «ОК» облачный токен готов к работе. Если вы хотите использовать созданный облачный токен на другом компьютере, то вам, естественно, также необходимо установить на нем пакет LS11CLOUD_setup.exe. После этого необходимо запустить графическую утилиту ls11cloudgui и нажать кнопку «Дублировать токен»:

image

Установка первого личного сертификата в облачный токен


Теперь, когда мы зарегистрировались в облаке и создали в нем свой личный облачный токен, можно приступать к его использованию. Для тестирования возьмем браузер Redfox-52 и почтового клиента Redfoxmail-52 с поддержкой российской криптографии на токенах/смарткартах PKCS#11 и которые созданы на базе Mozilla Firefox и Mozilla Thunderbird.

Тестирование будем проводить на платформе WIN32.

Для начала необходимо скачать и установить Redfox-52.Для установки браузера Redfox необходимо скачать архив — firefox-52-gost и распаковать его.

Распакованную папку Mozilla Firefox переместить в удобное место. Затем создать ярлык для исполняемого файла firefox.exe (находится внутри папки Mozilla Firefox) и разместить его в любом удобном месте.

После запуска браузера необходимо подключить созданный облачный токен, путем добавления в устройства библиотеки ls11cloud.dll:

image

Обращаем внимание на то, что дистрибутив браузера для MS Windows собран для платформы Win32. Следовательно библиотеку ls11cloud.dll следует также брать для платформы Win32.

После того, как мы включили в число криптографических устройств, с которыми работает браузер, облачный токен, можно приступить к его тестировнию. На первом этапе необходимо получить хотя бы один личный сертификат. Для этого воспользуемся услугами одного из тестовых УЦ:

image

Нажав кнопку «Продолжить» УЦ предложит проверить данные заявки, а затем предложит выбрать криптографическое устройство (токен/смарткарта) для генерации ключевой пары и хранения личного сертификата:

image

Естественно выбирается облачный токен и после нажатия кнопки «Продолжить» будет предложено не только получить личный сертификат, сформированный по вашей заявке, но и установить/сохранить корневой сертификат УЦ:

image

Убедиться в установке сертификата можно просмотрев хранилища сертификатов браузера:

image

Тестируем HTTPS и PKCS#12


И так механизмы облачного токена работают. Теперь проверим работу облачного токена в режиме авторизованного https на российских шифрсьютах:

image

Для проверки работы облачного токена на тестовых страницах КриптоПро воспользуемся ранее полученным на тестовом УЦ КриптоПро тестовым сертификатом и выгруженного в контейнер PKCS#12. Для начала необходимо скачать сертификат в формате PKCS#12 и установить его на облачном токене (пароль для контейнера PKCS#12 — 01234567):

image

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

image

Затем потребуется ввести PIN-для доступам к токену, пароль для PKCS#12 и в итоге сертификат окажется на токене:

image

При этом не забудьте выставить уровень доверия корневому сертификату УЦ КриптоПро:

image

Теперь можно смело идти на тестовые страницы КриптоПро, например сюда:

image

Использование облачного токена для организации безопасной почтовой переписки


Теперь посмотрим как работает облачный токен в почтовом клиенте Redfoxmail/Thunderbird.
Для установки почтового клиента Mozilla Thunderbird на платформу WIN32 необходимо скачать архив — thunderbird-52.0-gost и распаковать его. Распакованную папку Mozilla Thunderbird переложить в удобное место.

Затем создать ярлык для исполняемого файла thunderbird.exe (находится внутри папки Mozilla Thunderbird) и разместить их в любом удобном месте. После запуска почтового клиента подключаем облачный токен, аналогично тому как делали для браузера Redfox:

image

После подключения облачного токена станут доступны хранящиеся на нем сертификаты. Но этого может оказаться мало — необходимо установить корневые сертификаты УЦ, на которых выпущены личные сертификаты. Именно для этого мы и сохранили при выпуске корневой сертификат:

image

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

image

Теперь можно смело подписывать свои сообщения:

image

Это сообщение может быть принято любым почтовым клиентом с поддержкой российской криптографии, например KMail:

image

Заключение


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

© Geektimes