Криптопровайдеры
Де-факто стандартом отрасли является класс криптосредств, известных как криптопровайдеры. Криптопровайдер — это предоставляющая специальный API и специальным образом зарегистрированная в ОС библиотека, которая позволяет расширить список поддерживаемых в ОС криптоалгоритмов.
Следует отметить, что несовершенство предлагаемых MS Windows механизмов расширения вынуждает разработчиков криптопровайдеров дополнительно модифицировать высокоуровневые криптобиблиотеки и приложения MS Windows в процессе их выполнения для того, чтобы «научить» их использовать российские криптоалгоритмы.
https://www.youtube.com/watch?v=ytpress
Следует понимать, что не все СКЗИ одного вида реализуют полный объем функциональности, приведенный в таблицах. Для уточнения возможностей криптосредств следуют обратиться к производителю.
Регистрация на портале
- Получаем список подключенных к компьютеру устройств Рутокен ЭЦП
- Генерируем ключевую пару ГОСТ Р 34.10-2001 на выбранном Рутокен ЭЦП
- Cоздаем запрос PKCS#10 на сертификат для сгенерированной ключевой пары
- Отправляем запрос на сервер
- На сервере создаем сертификат, привязываем к аккаунту (сам сертификат или его дескриптор). Следует отметить, что дескрипторы сертификатов, полученные при вызове функции enumerateCertificates, являются уникальными и неизменными
- Отправляем сертификат на клиент
- На клиенте визуализируем полученный сертификат
- Импортируем полученный сертификат в Рутокен ЭЦП
Далее запрос отправляется на сервер, где на его основе выдается сертификат.Для этого на сервере должен быть установлен и правильно сконфигурирован openssl версии от 1.0 и развернут функционал УЦ.
openssl genpkey -engine gost -algorithm GOST2001 -pkeyopt paramset:A -out ca.key
После этого в файле ca.key будет создан закрытый ключ
openssl req -engine gost -x509 -new -key ca.key -out ca.crt
После ввода необходимой информации об издателе в файле ca.crt будет создан сертификат УЦ.
Общая схема аутентификации, используемая в Рутокен Плагин, выглядит следующим образом:
- сервер формирует начальную последовательность случайных данных (строку salt) и отправляет ее на клиент
- при передаче salt в функцию плагина authenticate данная последовательность дополняется случайными данными размером в 32 символа, и происходит подпись итоговой последовательности на выбранном пользователем сертификате в формате CMS attached
- подпись отправляется на сервер
- на сервере происходит проверка подписи
- из CMS attached сообщения извлекается итоговая случайная последовательность, “отсоединяется” salt и происходит сравнение
- в случае успешной проверки пользователь аутентифицируется на основе сертификата, извлеченного из сообщения CMS
Реализация данной схемы ничем принципиально не отличается от «Регистрация, сертификат уже имеется, выдан внешним УЦ».
Нативные библиотеки
OpenSSL-style
Open Source библиотека OpenSSL обладает широкими криптографическими возможностями и удобным механизмом ее расширения другими криптоалгоритмами. OpenSSL является основным криптоядром для широкого спектра приложений Open Source.
После того, как в эту библиотеку компанией Криптоком были добавлены ГОСТы, появились патчи для «гостификации» многих популярных приложения, использующих OpenSSL. На базе OpenSSL некоторые вендоры разработали и сертифицировали СКЗИ, кроме того в ряд продуктов OpenSSL входит «неявным» образом.
Локальные прокси
Основным принципом действия локального прокси является прием незащищенного соединения от приложения, установка TLS-туннеля с удаленным сервером и передача «прикладного уровня» между приложением и удаленным сервером по этому туннелю.
Некоторые локальные прокси кроме того дополнены механизмом ЭЦП специальным образом промаркированных WEB-форм (Inter-PRO, МагПро КриптоТуннель). Существуют локальные прокси, которые предоставляют для браузера WEB API ЭЦП (систему HTTP-запросов и ответов, аналогичных программному API криптобиблиотеки).
Спецификация | – |
Платформы | Семейство Windows, GNULinux, OS X. На базе СПО iOS, Android |
Алгоритмы и криптографические протоколы | ЭЦП, шифрование, хэш-функция, имитозащита, HMAC, VKO; TLS |
Интеграция с PKI | X.509, PKCS#10, CMS, CRL, OCSP, TSP |
Механизмы ЭЦП | Подпись WEB-форм при прохождении траффика WEB API |
Механизмы аутентификации | клиентская аутентификация в рамках TLS |
Механизмы “гостирования” TLS | Через механизм проксирования |
Форматы защищенных сообщений | PKCS#7, CMS |
Интеграция с браузером | Через механизм проксирования |
Мобильные платформы | iiOS, Android на базе СПО sTunnel |
Хранилища ключей | Реестр, файлы, USB-токены |
Взаимодействие с USB-токенами | Хранилище ключей и сертификатов Использование аппаратной реализации алгоритмов Через PKCS#11, PC/SC, APDU |
Приложения | Браузеры WEB-сервера RDP Почтовые клиенты и сервера |
Инсталляция | Программа установки, в целом не требуются права системного администратора Копирование, запуск Запуск с FLASH-памяти USB-токена |
Примеры (ГОСТ) | МагПро КриптоТуннель Inter-PRO VPNKey-TLS LirTunnel КриптоПро sTunnel sTunnel |
Проблемы:
- прокси должен быть запущен;
- приложение должно работать через прокси, нужно «научить» его этому;
- могут использоваться нестандартные порты, отсюда проблемы в файрволом
- если приложение «ходит» через localhost, то, например, в адресной строке браузера прописано localhost… — нестандартно
- дополнительные ограничения на разработку web-сайта — в ряде случаев использование только относительных ссылок, чтобы не «вылететь» из туннеля
- прокси сконфигурирован на проксирование конечной группы сайтов, расширение группы — это обновление клиентского конфига
- работа через внешний прокси требует дополнительного конфигурирования локального прокси, при этом могут быть проблемы с аутентификацией пользователя на внешнем прокси
Плюсы:
- решение использует универсальную технологию, поэтому можно не бояться его устаревания;
- решение может применяться на большом числе платформ, в том числе на мобильных платформах;
- кроссбраузерность, поддержка всех WEB-серверов без модификации;
- не требует инсталляции;
- поддержка различных прикладных протоколов.
Шифрование/расшифрование данных и/или файлов в формате CMS
Для того, чтобы обеспечить конфиденциальность обмена данными между клиентом и сервером в плагине предусмотрено шифрование/расшифрование данных. Данные шифруются в формате CMS. Для того, чтобы зашифровать данные в формате CMS, требуется сертификат открытого ключа «адресата». При этом расшифровать такое сообщение сможет только владелец закрытого ключа.
При шифровании данных для сервера рекомендуется хранить сертификат сервера на Рутокен ЭЦП. Этот сертификат может быть записан на устройство при регистрации пользователя на портале. Для этого следует использовать функцию importCertificate, при этом в качестве параметра category следует передать CERT_CATEGORY_OTHER.
Для использования в функции cmsEncrypt нужно получить тело сертификата по его дескриптору с помощью функции getCertificate. При этом дескриптор является уникальным и неизменным и может быть сохранен в учетной записи пользователя на сервере при импорте сертификата сервера. Для того, чтобы использовалось аппаратное шифрование по ГОСТ 28147-89, требуется установить опцию useHardwareEncryption в true. В противном случае будет использована быстрая программная реализация ГОСТ 28147-89.
try
{
var recipientCert = plugin.getCertificate(deviceId, certRecId);
}
catch (error)
{
console.log(error);
}
var options = {};
options.useHardwareEncryption = true;
var cms;
try
{
cms = plugin.cmsEncrypt(deviceId, certSenderId, recipientCert, data, options);
}
catch (error)
{
console.log(error);
}
openssl smime -engine gost -decrypt -in message.cms -inform PEM -recip recipient.crt -inkey recipient.key
recipient.crt — сертификат того, для кого зашифровано сообщение, recipient.key — ключ того, для кого зашифровано сообщение.
Для расшифрования данных, полученных с сервера, предназначена функция cmsDecrypt. Так как сервер шифрует для клиента, используя его сертификат, то в качестве keyId должен быть передан дескриптор закрытого ключа клиента, соответствующий открытому ключу в сертификате. Этот дескриптор является уникальным и неизменным и потому может быть сохранен в учетной записи пользователя на сервере. Кроме того, дескриптор ключа пользователя может быть получен явным образом, путем вызова функции getKeyByCertificate.
Браузерные плагины
https://www.youtube.com/watch?v=https:accounts.google.comServiceLogin
Для того, чтобы из скриптов WEB-страницы вызвать нативную библиотеку большинство браузеров поддерживают специальные расширения — ActiveX для IE и NPAPI-плагин для GH, MF, Opera, Sаfari и др. В данный момент на рынке существует широкий спектр продуктов, относящихся к браузерным плагинам. Архитектурно данные плагины могут быть исполнены по-разному.
Некоторые работают на базе CryptoAPI и требуют дополнительной установки криптопровайдера, другие используют в качестве криптоядра PKCS#11-совместимые устройства и не требуют установки дополнительных СКЗИ на рабочее место клиента. Есть универсальные плагины, которые поддерживают как все основные криптопровайдеры, так и широкий спектр аппаратных СКЗИ.
Спецификация | – |
Платформы | Семейство Windows, GNULinux, OS X |
Алгоритмы и криптографические протоколы | ЭЦП, шифрование, хэш-функция, имитозащита, HMAC |
Интеграция с PKI | X.509, PKCS#10, CMS, CRL, OCSP (КриптоПро ЭЦП Browser plugin), TSP (КриптоПро ЭЦП Browser plugin) |
Механизмы ЭЦП | Программный интерфейс для использования в JavaScript |
Механизмы аутентификации | ЭЦП случайных данных |
Механизмы “гостирования” TLS | – |
Форматы защищенных сообщений | PKCS#7, CMS, XMLSec (КриптоПро ЭЦП Browser plugin), CADES (КриптоПро ЭЦП Browser plugin) |
Интеграция с браузером | ActiveX (для IE) NPAPI |
Мобильные платформы | не поддерживаются |
Хранилища ключей | Реестр, файлы, USB-токены |
Взаимодействие с USB-токенами | Хранилище ключей и сертификатов Использование аппаратной реализации алгоритмов Через PKCS#11, через CryptoAPI |
Приложения | Браузеры |
Инсталляция | Программа установки, не требуются права системного администратора |
Примеры (ГОСТ) | КриптоПро ЭЦП Browser plugin eSign-PRO КриптоПлагин Лисси Плагин портала госуслуг JC-WebClient Рутокен Плагин Плагин BSS КриптоАРМ Browser plugin |
Проблемы:
- отсутствие TLS
- удаление NPAPI из Chromium
- браузеры на мобильных платформах не поддерживают плагины
- настройки безопасности IE могут блокировать исполнение плагина
Плюсы:
- кроссплатформенность для плагинов на базе PKCS#11
- кроссбраузерность
- плагины на базе PKCS#11 не требуют установки СКЗИ
- прозрачное использование для пользователя
ActiveX
Компания Microsoft разработала два основных клиентских ActiveX-компонента, которые транслируют функционал CryptoAPI в скрипты, в браузер.Для генерации ключа и создания PKCS#10-запроса применятся компонент XEnroll/CertEnroll, а для ЭЦП/шифрования и работы с сертификатами компонент CAPICOM.
В следующих статьях будут подробно рассмотрены оставшиеся решения.
Полезные ссылки
https://www.youtube.com/watch?v=ytcopyright
Демосистема Рутокен ПлагинWEB-сервис генерации ключей, формирования запросов, управления сертификатами, формирования шаблонов запросов на сертификаты Документация на Рутокен ПлагинДокументация по использованию утилиты openssl с российскими крипталгоритмамиПример скрипта на PHP, использующего утилиту openssl