28 апреля в 18:14

Криптографический облачный сервис 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 <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
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, которые созданы на базе Mozilla Firefox и Mozilla Thunderbird, с поддержкой российской криптографии на токенах/смарткартах PKCS#11.

Тестирование будем проводить на платформе 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 может стать внутрикорпоративный документооборот, защищенная почта, банковская сфера.
Облачный сервис LS11CLOUD с его облачными токенами может оказаться очень полезным разработчикам приложений с использованием токенов/смарткарт PKCS#11.

imageP.S. Положил личный сертификат в облачный токен, подключил его к плагину госуслуг и оплатил налоговую задолжность через портал ГОСУСЛУГ. OC — Linux.
Орлов Владимир Николаевич @saipr
карма
13,0
рейтинг 0,0
Программист
Похожие публикации
Самое читаемое

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

  • +1
    Решение интересное.
    Но на мой взгляд нужно делать продукт, который будет реализовывать «облачный токен» внутри компании.

    Держать приватные ключи «где-то у кого-то» в Интернете можно только в исключительных случаях, когда ключи не представляют большой ценности.
    • –1
      Спасибо.
      По первому замечанию. Нет проблем развернуть облачный сервис на сервере в корпоративной сети (на каком-нибудь сервере с IP-адресом 192.168.х.х). Так что ничего делать не надо.
      Что касается второго. Весь вопрос что-такое Интернет и «где-то у кого-то». Конечно, это должен быть проверенный провайдер.
      • +1
        Правильно ли я понял что в статье описывается — продукт (фрагмент) компании ЛИСИ-СФОТ LCSSL (http://soft.lissi.ru/ls_product/skzi/OpenSSL)?

        Если нет то как реализовать функционал облачного токена в частном облаке?
        • 0
          По первому вопросу — нет не так. Это разные продукты, но имеющие на нижнем уровне одну и туже реализацию российскиз криптоалгоритмов. Если говорить о каких-то прототипах — то это естественно программый токен LS11SW.
          По второму. Облако состоит из двух частей: серверной и клиентской/пользовательской.
          Материал написан на основании того, что серверная часть уже поднята в интернете по адресу pkcs11.ru:4444 и статье не рассматривается. Для Частного облака компания должна выделить сервер, например, по адрему 192.168.0.45:4567 и на нем запустить серверную часть облака. Остальное по тексту с учетом адреса сервиса.
  • –1
    imageПоложил личный сертификат в облачный токен, подключил его к плагину госуслуг и оплатил налоговую задолжность через портал ГОСУСЛУГ .
    OC — linux.
    • +1
      А зачем? Безопасность от такого решения падает, а сложность реализации растет. Можно спокойно авторизоваться с помощью двухфакторной авторизации самих ГУ.

      На сайте той-же налоговой есть свой облачный токен, для подписи деклараций. Но там он оправдан, т.к. сильно упрощает процесс подачи декларации, при этом подпись Вы можете осуществить и с обычного токена (на сколько я помню).
      • –1
        Можно спокойно авторизоваться с помощью двухфакторной авторизации самих ГУ.

        На сайте ГУ есть несколько способов авторизации:
        — с помощью пароля
        — с помощью электронных средств.
        С помощью пароля — к этому способу вообще нет доверия.
        С помощью электронных средств — имеется в виду использования сертификата и электронной подписи.
        Если обычный токен — это токен, используемый как флэшка, только с PIN-кодом (а так используется 99% токенов у нас), то тоже доверия мало. Если же вы имеете в виду ГОСТ-вый токен PKCS#11, то да.
        Недостаток у реального, а не облачного токена, один — стеречь его надо.
        • +1
          — с помощью пароля

          Авторизация с помощью пароля используется двухфакторная, с помощью СМС. Не верх секьюрности, но при хранении пароля отдельно от телефона позволяет гарантировать неуязвимость от автоматического взлома. Разумеется, если ломать будут лично Вас, то это возможно. Но неуязвимых систем вообще не существует.
          Если же вы имеете в виду ГОСТ-вый токен PKCS#11, то да.

          Под токеном я имею ввиду что-то вроде этого, дешево и сердито!
          Недостаток у реального, а не облачного токена, один — стеречь его надо.

          Так это не недостаток, а достоинство:
          Для доступа к физическому токену мне нужно знать пароль/пин-код и иметь физический доступ к носителю одновременно. Т.е. хакер на другом конце планеты не вскроет сейф, а медвежатник не узнает пароль.

          Для доступа же к облачному токену достаточно знать пароль! Более того, нужно доверять другому человеку свой токен, что в наше время может слишком дорого стоить!
          • –1
            Ссылку на токен вы дали правильную. Но Вопрос остался: как этот токен используют — как флэшку или токен PKCS#11.
            Но неуязвимых систем вообще не существует

            Да, именно так.
            Ноесли мы доверяем СМС от банка, то что мешает тому же банку вместо генерации одноразовых паролей, зпвести у себя для своих клиентов облачный криптографический токен. Мы же доверяем банкам!?
            • +1
              как флэшку или токен PKCS#11.

              Разумеется я имею ввиду вариант использования с неизвлекаемым ключом. Хранишь в открытом виде — «сам себе злобный Буратино».
              зпвести у себя для своих клиентов облачный криптографический токен.

              На сайте налоговой это костыль, который закрывает законную необходимость в подписании декларации! Это я понимаю.
              А зачем на сайте банка? Авторизация по «облачному криптоконтейнеру» менее надежна, чем простой пароль, а подпись на документах может быть легко заменена подписью самого банка. Зачем мне и банку это? Какой в этом смысл?

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