Создание и использование криптографических токенов PKCS#11 в облаках

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

Криптографические токены обеспечивают как хранение сертификатов и ключевых пар (открытого и закрытого ключа), так и выполнение криптографических операций. Слабым звеном здесь является  хранение закрытого ключа. Если пропал открытый ключ, то его всегда можно восстановить по закрытому ключу или взять из сертификата. Пропажа/уничтожение токена с неизвлекаемым закрытым ключом имеет печальные последствия, например, вы не сможете расшифровать зашифрованные на вашем открытом ключе файлы, не сможете поставить электронную подпись (ЭП). Но последняя проблема решается  генерацией новой ключевой парой и за определенные деньги получением нового сертификата  в одном из удостоверяющих центров.

Облачный токен PKCS#11

В настоящее время распространены программные, программно-аппаратные и аппаратные токены. И вот сейчас мы рассматриваем еще один вид криптографического токена PKCS#11 – облачного токена.

Сегодня уже никого не удивишь облачной флэшкой. Все преимущества и недостатки облачной флэшки практически один в один присущи и облачному токену.

 

Главное здесь безопасность хранимых в облачном токене данных, прежде всего, закрытых ключей. Может ли это облачный токен обеспечить? Мы говорим – ДА!

И так как работает облачный токен?

Естественно, облако PKCS#11, как любой сетевой ресурс, имеет точку входа IP/порт. Мы будет рассматривать реальное облако LS11CLOUD, существующее на просторах Интернет, по адресу pkcs11.ru:4444.

Регистрация в облаке

Первым шагом является регистрация клиента в облаке токенов. Для регистрации используется утилита ls11cloud_cjnfig:

bash-4.3$/usr/local/bin64/ls11cloud_config  
LS11CLOUD User Utility

usage:  /usr/local/bin64/ls11cloud_config <command> [-p <password>] [-n <new password>]
Commands:
        register <host> <port> <id> - register new user on the server
        duplicate <host> <port> <id> - 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
NB: Don't use non-latin letters to avoid encoding problems!
Copyright(C) LISSI-Soft, Ltd (http://soft.lissi.ru) 2017-2018
bash-4.3$

Команда «register» утилиты ls11cloud_config и выполняет регистрацию пользователя под nickname-ом (поле «id») в облаке. Взаимодействие пользователя с облаком ведется по шифрованному каналу.         Для выработки согласованного ключа, на основе которого будет защищаться/шифроваться трафик между клиентом и сервером, используется протокол SESPAKE  - протокол выработки общего ключа с аутентификацией на основе пароля. Пароль для протокола SESPAKE также задается при регистрации в облаке.  Сразу отметим, что этот пароль не имеет ничего общего с PIN-кодами токена, который у пользователя будет находиться в облаке. Это пароль,  который участвует в создании защищенного (шифрованного) канала между облаком и пользователем:

Именно по этому защищенному каналу и происходит доступ к токену в облаке. Отметим, что правилом хорошего тона могла бы быть смена пароля (команда «change_pswd») перед началом или окончанием каждого сеанса. Утилита ls11cloud_config имеет графическую оболочку, которая значительно облегчает процесс взаимодействия с облаком:

В этом случае регистрация выглядит следующим образом:

 

И после задания пароля пользователь будет зарегистрирован в облаке LS11CLOUD:

Есть вторая схема регистрации в облаке, она может быть предпочтительна, например, для корпоративного облака или пользователь уже имеет облачный токен.  Администратор  регистрирует в облаке некоторое количество nickname-ов и дает им первоначальные пароли. Затем эти nickname-ы вместе с паролями выдаются сотрудникам. В этом случае, сотрудник сначала должен продублировать nickname с облака на своем рабочем месте:

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

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

Управление облачным токеном PKCS#11

После регистрации в облаке пользователь должен проинициализировать свой персональный токен в облаке, который будет доступен ему и только ему. Инициализация облачного токена ничем не отличается от инициализации любого другого токена PKCS#11 и состоит в установке метки токена и, самое важное, установке секретных PIN-кодов.  Токены обладают двумя типами PIN-кода: пользовательский PIN-код (USER PIN) и PIN-код администратора (SO PIN)). Пользовательский PIN-код должен быть известен только владельцу токена и им самим устанавливаться. Что касается SO PIN-кода, то владельцы токенов очень часто не обращают на него внимание. Это не правильно. И если мы говорим об облачном токене, его безопасности, то только владелец такого токена должен владеть обоими типами PIN-кода. Эти операции должны проводиться только по защищенному/шифрованному каналу. Для инициализации токена используется утилита pk11conf:

bash-4.3$ /usr/local/bin64/p11conf  
usage:  /usr/local/bin64/p11conf [-hitsmIupPredf] -A APIpath [-c slotID
-U userPin -S SOPin -n newPin -L label]
       -h display usage
       -i display PKCS#11 library info
       -s display slot(s) info (-c slotID is optional)
       -t display token(s) info (-c slotID is optional)
Others must use -c slotID
       -m display mechanism list
       -I initialize token  
       -u initialize user PIN
       -p set the user PIN
       -P set the SO PIN
       -e enumerate objects
       -d dump all object attributes (additional to -e and to -f)
       -r remove all objects
       -e -r remove enumerated objects with prompt
       -f enumerate certificates and write them to DER-files with prompt
Version 5.7
Copyright(C)  2011-2018
bash-4.3$

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

Утилита p11conf, также как утилита ls11cloud_config, имеет графическую оболочку, которая находится в дистрибутивах:

В дистрибутивах также находится и библиотека ls11cloud, которая собственно и предоставляет пользователям интерфейс PKCS#11. Выбрав библиотеку облачного токена ls11cloud, можно инициализировать облачный токен:

При инициализации токена следует иметь ввиду, что по умолчанию SO PIN равен 87654321. После инициализации токена его требуется поменять. И так, если все прошло успешно, то пользователь получит следующую информацию:

Все, после выполнения этих действий, облачный токен готов к использованию. Следует отметить, что в настоящее время облачный токен LS11CLOUD поддерживает только российскую криптографию (в соответствии со стандартами ГОСТ Р 34.10-2001/2012, ГОСТ Р 34.11-94/2012, ГОСТ 28147-89, ГОСТ Р 34.12-2015 и ГОСТ Р 34.13-2015). Посмотреть, какие криптографические механизмы поддерживаются облачным токеном, можно все той же утилитой P11CONF:

Тестирование облачного токена

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

Самый простой способ протестировать работу облачного токена, это установить версию Mozills Firefox с поддержкой российской криптографии. Скачать эту версию под именем RedFox можно здесь. После того, как будет установлен браузер RedFox, необходимо подключить облачный токен (Правка->Настройки->Дополнительные->Устройства защиты->Загрузить):

После подключения браузер запросит PIN-код на доступ к облачному токенну. Теперь, когда подключен облачный токен, подключена российская криптография, можно попытаться установить анонимное TLS-соединение с любым web-сервером по российскис шифрсьютам, например, по этому адресу (https://soft.lissi.ru/ ):

Если вы отключите облачный токен, то вы не сможете установить соединение. Для того, чтобы воспользоваться авторизованным https/tls  или защищенной электронной почтой  необходимо иметь личные сертификаты в облачном токене. Их можно установить тем же браузером из защищенного контейнера PKCS#12 (пароль 01234567) либо получить в удостоверяющем центре (УЦ), воспользовавшись тем же браузером.

Поскольку речь идет о тестировании, то сертификат заказать и получить можно на тестовом  УЦ. Получить корневой сертификат тестового УЦ можно здесь.  Создать ключевую пару (ключ ЭП и ключ проверки ЭП), сформировать запрос и получить сертификат ключа проверки ЭП в тестовом УЦ, перейдя по этой ссылке.

Облачный криптографический токен просто не заменим на мобильных платформах:

  

Вот и все, теперь можно заказывать боевой сертификат, устанавливать его в свой облачный токен и идти на сайт госуслуг . Что и было сделал

Версия для печатиВерсия для печати
  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 0
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Читайте также

 

Комментарии

Аватар пользователя savely

Форматирование кривое.

Оглянулся на пачку аппаратных токенов (разных). Вот сделали бы какое-то удобное (aka "не поднимая ж..ы со стула") получение боевых сертификатов - вот было бы счастье. ;)

Аватар пользователя savely

Copyright(C) LISSI-Soft, Ltd (http://soft.lissi.ru) 2017-2018

Copyright(C)  2011-2018

Хе-хе. Welcome to future! 

+1