Поговорим немного про средства электронной подписи (ЭП) с использованием отечественных ГОСТ-алгоритмов в Linux. Несмотря на то, что различные средства и интерфейсы по работе с ЭП в Linux развиты даже лучше, чем в Windows, использовать их не так просто.
Такое положение вещей сохранялось последние несколько лет. Но с конца 2016 года ситуация изменилась в лучшую сторону. Появилось сразу два продукта, которые позволяют работать с электронной подписью по стандарту ГОСТ и шифрованием без использования консоли – это Rosa Crypto Tool и Trusted eSign. Оба эти продукта для работы с криптографией используют «КриптоПро CSP» для Linux. Поэтому, перед тем как обратиться к описанию самих продуктов, поговорим немного про «КриптоПро CSP».
«КриптоПро CSP» под Linux — неоднозначный продукт. С одной стороны, это одно из самых распространенных и мощных сертифицированных средств по работе с криптографией как в Windows, так и в Linux. С другой стороны, для простого человека пользоватся его интерфейсами даже в Windows не так-то просто. А в Linux доступен только консольный интерфейс. Надеюсь, что компания «КриптоПро» в курсе этой ситуации, и в будущем нас ждут новые красивые и удобные интерфейсы, как для Windows, так и для Linux.
Для настройки нам понадобится:
- Любимый дистрибутив Linux. Я использовал Ubuntu Linux 16.04 LTS и ROSA Fresh GNOME R8;
- Сертифицированная версия КриптоПро CSP 4.0 R2 для Windows, UNIX и macOS;
- Рутокен ЭЦП 2.0.
Настройка «КриптоПро» CSP
Несмотря на то, что есть несколько неплохих статей по настройке «КриптоПро CSP» под Linux (например, тут или тут), я опишу здесь свой вариант. Основная причина в том, что большинство инструкций написаны для «Крипто Про CSP» версии 3.x. А современная версия «КриптоПро CSP» 4.0 не является 100% совместимой с 3.x. Дополнительная причина – всегда приятно иметь полную инструкцию по настройке в одном месте, а не переключаться с одного окна на другое.
Приступаем к настройке.
Скачиваем «КриптоПро CSP» для Linux с официального сайта КриптоПро — www.cryptopro.ru/downloads
Распаковываем «КриптоПро CSP» для Linux:
tar -zxf ./linux-amd64_deb.tgz
Далее у нас есть 2 варианта – автоматическая установка и установка вручную. Автоматическая установка запускается командой:
sudo ./install.sh
или
sudo ./install_gui.sh
Здесь надо отдать должное разработчикам «КриптоПро» – автоматическая установка для большинства дистрибутивов отрабатывает успешно. Хотя бывают и нюансы. Например, если у вас не хватает некоторых пакетов, то установка будет успешно завершена, хотя некоторый функционал работать не будет.
Если что-то пошло не так, или вы по тем или иным причинам хотите использовать установку в ручном режиме, то вам необходимо выполнить:
dpkg -i ./cprocsp-curl-64_4.0.0-4_amd64.deb lsb-cprocsp-base_4.0.0-4_all.deb lsb-cprocsp-capilite-64_4.0.0-4_amd64.deb lsb-cprocsp-kc1-64_4.0.0-4_amd64.deb lsb-cprocsp-rdr-64_4.0.0-4_amd64.deb
Для установки пакетов в ROSA используйте urpmi, вместо dpkg -i.
Устанавливаем лицензию для «КриптоПро CSP» для Linux и проверяем, что все работает нормально:
cpconfig -license -set <серийный_номер>
cpconfig -license –view
Мы должны получить что-то вроде:
License validity:
XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
Expires: 3 month(s) 2 day(s)
License type: Server.
Настройка работы с Рутокен ЭЦП 2.0
Сделаем небольшое отступление. Для работы с электронной подписью и шифрованием нам не обойтись без ключевых пар и сертификатов. Надежное хранение закрытых ключей – один из основных факторов безопасности. А более надежных средств хранения, чем токен или смарт-карта, человечество пока не придумало. Я буду использовать Рутокен ЭЦП 2.0, который имеет сертификат ФСБ и поддерживает работу как с новыми, так и со старыми ГОСТами.
Для работы с токенами в ОС Linux есть масса различных средств и драйверов. Для описания всех этих средств понадобится отдельная статья. Поэтому я не буду подробно описывать, как это работает, и почему нам нужны именно эти пакеты.
Устанавливаем пакеты для работы с Рутокен ЭЦП 2.0:
apt-get install libpcsclite1 pcscd libccid
Нам также необходимо установить пакеты КриптоПро CSP для поддержки работы с токенами:
dpkg -i ./cprocsp-rdr-gui-gtk-64_4.0.0-4_amd64.deb ./cprocsp-rdr-rutoken-64_4.0.0-4_amd64.deb ./cprocsp-rdr-pcsc-64_4.0.0-4_amd64.deb ./lsb-cprocsp-pkcs11-64_4.0.0-4_amd64.deb
Получаем тестовый сертификат
Перед тем как перейти непосредственно к работе с подписью, надо сгенерировать ключевую пару и создать сертификат электронной подписи. Если у вас уже есть Рутокен с контейнером «КриптоПро», то эту часть можно смело пропустить.
Воспользуемся тестовым УЦ компании «КриптоПро» по адресу — https://www.cryptopro.ru/certsrv/
Создаем запрос на сертификат с параметрами по умолчанию.
Проверим, что сертификат получен успешно.
Чтобы убедиться, что «КриптоПро CSP» успешно увидел токен, выполним:
list_pcsc
Мы должны получить что-то вроде:
Aktiv Rutoken ECP 00 00
Теперь проверяем, что сертификат на токене видится успешно:
csptest -keyset -enum_cont -verifyc -fq
Получаем:
CSP (Type:80) v4.0.9014 KC1 Release Ver:4.0.9842 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 13476867
\\.\Aktiv Rutoken ECP 00 00\822506788-dfcd-54c9-3a5e-e0a82a2d7f0
OK.
Total: SYS: 0,020 sec USR: 0,160 sec UTC: 0,870 sec
[ErrorCode: 0x00000000]
Записываем в хранилище сертификатов КриптоПро информацию об этом сертификате:
csptestf -absorb -cert -pattern 'rutoken'
Match: SCARD\rutoken_ecp_351d6671\0A00\62AC
OK.
Total: SYS: 0,010 sec USR: 0,140 sec UTC: 1,040 sec
[ErrorCode: 0x00000000]
Проверим, что сертификат успешно сохранился в хранилище:
certmgr -list -cert -store uMy
Certmgr 1.0 (c) "CryptoPro", 2007-2010.
program for managing certificates, CRLs and stores
=============================================================================
1-------
Issuer : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject : CN=Trusted eSign Test
Serial : 0x120019F5D4E16D75F520A0299B00000019F5D4
SHA1 Hash : 0x016f443df01187d5500aff311ece5ea199ff863e
SubjKeyID : 204e94f63c68595e4c521357cf1d9279bff6f6e5
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before : 22/02/2017 10:53:16 UTC
Not valid after : 22/05/2017 11:03:16 UTC
PrivateKey Link : Yes
Container : SCARD\rutoken_ecp_351d6671\0A00\62AC
Provider Name : Crypto-Pro GOST R 34.10-2012 KC1 CSP
Provider Info : ProvType: 80, KeySpec: 1, Flags: 0x0
CA cert URL : http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202.crt
OCSP URL : http://testca.cryptopro.ru/ocsp/ocsp.srf
CDP : http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202.crl
Extended Key Usage : 1.3.6.1.5.5.7.3.2
=============================================================================
[ErrorCode: 0x00000000]
На этом основная настройка завершена, и мы можем начинать подписывать или шифровать файлы с использованием различных средств. Переходим к тому, зачем задумывалась эта статья.
Подпись средствами «КриптоПро CSP»
В составе «КриптоПро CSP» есть утилита csptestf, позволяющая выполнять различные криптографические операции. Как я уже писал выше, у этой утилиты есть 2 недостатка:
- Отсутствие хорошей документации;
- Отсутствие графического интерфейса.
Подписать можно с помощью команды:
csptestf –sfsign –sign –in <имя файла> -out <имя файла> -my ‘Trusted eSign Test’ –detached –alg GOST94_256
Здесь,
my — параметр, в котором надо указать часть Common Name сертификата для подписи;
detached — позволяет создать открепленную подпись;
alg GOST94_256 — задает алгоритм хэширования, который будет использоваться при создании подписи.
Более подробную информацию о возможных параметрах вы можете получить, выполнив команду:
csptestf –sfsign
Такой интерфейс отлично подходит для подготовленного пользователя или для автоматизации операций в скриптах.
Поговорим теперь об утилитах, которые облегчают жизнь обычным пользователям при работе с подписью и шифрованием в Linux.
Rosa Crypto Tool
Как следует из названия, это утилита для работы с электронной подписью и шифрованием для дистрибутива ROSA Linux. В данный момент утилита доступна в репозиториях Rosa Linux и Alt Linux.
Эта утилита разрабатывается одним человеком – Михаилом Вознесенским. У нее простой, но удобный интерфейс. На данный момент утилита находится в активной разработке – с ноября 2016 года мне удалось протестировать три версии. Последняя версия, доступная на момент написание статьи — 0.2.2. Сейчас утилита поддерживает работу только с «КриптоПро CSP» для Linux, однако в ближайшее время будет добавлена поддержка других криптопровайдеров.
Что внутри? Утилита написана на Python с использованием PyQt4 для графического интерфейса.
Установить ее можно, использовав «Управление программами» в Rosa Linux.
Вставляем токен и запускаем утилиту.
Видим, что токен определился успешно и был найден наш сертификат.
Интерфейс программы настолько прост, что описывать и показывать в статье все его функции не имеет смысла. Попробуем только подписать файл.
Выбираем файл и жмем “Подписать файл”. Получаем вот такое предупреждение.
Нажимаем «OK» и получаем информацию о том, что файл был подписан успешно.
Основное достоинство этой утилиты в том, что она совершенно бесплатная, в отличии нашего следующего продукта.
По сравнению с использованием «КриптоПро CSP» из консоли:
+ На порядок проще использовать;
— Отсутствуют различные параметры подписи.
Исходный код программы доступен в публичном репозитории на ABF:
abf.io/uxteam/rosa-crypto-tool-devel
Система контроля версий, которую использует «НТЦ ИТ РОСА», интегрирована в сборочную среду и базируется на Git. Можно вполне использовать любой клиент git.
Надеюсь, разработчики других отечественных дистрибутивов Linux, таких как Astra Linux, GosLinux и другие добавят в свои дистрибутивы пакеты с rosa-crypto-tool.
Trusted eSign
Второй продукт, про который мы поговорим, это Trusted eSign от компании “Цифровые технологии”. Она известна на российском рынке ИБ как разработчик средства по работе с подписью и шифрованием для ОС Windows – «КриптоАРМ».
Главное, не путать этот продукт с Trusted.eSign – web-сервисом по работе с подписью этой же компании.
Найти продукт на сайтах компании “Цифровые технологии” непросто. Небольшое описание есть в магазине http://www.cryptoarm.ru/shop/trusted_esign, продукт также можно скачать в разделе «Центр загрузки» на сайте trusted.ru — https://trusted.ru/support/downloads/?product=133
К сожалению, продукт пока доступен только в виде deb пакета для 64-битных систем. С чем связано такое ограничение, непонятно. Будем надеяться, что в ближайшее время компания выпустит и rpm пакет, а также версии для 32-битных дистрибутивов Linux.
Скачиваем с официального сайта deb-пакет и устанавливаем командой:
dpkg –i ./trustedesign-x64.deb
Запускаем Trusted eSign.
Сразу видно, что разработка не обошлась без дизайнера. Никакого сарказма. Все действия делаются просто и логично, а внешний вид радует глаз. К сожалению, большинство средств и программ в области ИБ от российских разработчиков разработаны без привлечения UX-специалистов и дизайнеров и заставляют своих пользователей страдать и плакать кровавыми слезами. Создается впечатление, что другими средства информационной безопасности просто не могут быть. “Цифровые технологии” опровергают это. Плата за красоту и удобство – необходимость платить за лицензию.
Но вернемся к подписи.
Выбираем раздел “Электронная подпись”:
Выбираем «Сертификат для подписи»:
Выбираем файлы для подписи и жмем «Подписать»:
Что под капотом? Процитирую с сайта: “Приложение создано на современном движке Electron, для вызова криптографических операций применяется библиотека OpenSSL. Совместимо с СКЗИ “КриптоПро CSP 4.0” и поддерживает все криптографические алгоритмы, реализованные в нем.” Для тех, кто ещё не в курсе Electron — это фреймворк для создания десктопных приложений на платформе node.js.
Сравним Trusted eSign с Rosa crypto tool:
+ Более удобный и красивый интерфейс
— Платная лицензия
Резюме
Подведем итог. В конце 2016 – начале 2017 года наметился неплохой прогресс в средствах по работе с электронной подписью под Linux. Информационная безопасность начинает поворачиваться к пользователю лицом, и с каждым годом требуется все меньше действий для такого простого действия, как подписать или зашифровать файл с использованием отечественных алгоритмов.
Хочется дополнительно отметить такое развитие отечественных продуктов, учитывая современный тренд на замену Windows на Linux в государственных и муниципальных организациях. В рамках этого тренда становится актуальным использование средств криптографической защиты информации под Linux. Хорошие и удобные продукты российских разработчиков помогут государственным организациям и структурам нормально работать и выполнять требования по импортозамещению.
Такое развитие не может не радовать, особенно когда это происходит под Linux.
P.S.
Наверняка есть немало пользователей, особенно пользователей Linux, кто считает, что консольных утилит достаточно. А также специалистов по информационной безопасности, которые считают, что дизайн и удобство — излишество в ИБ. Но я не могу с ними согласиться. Консольные утилиты, несомненно, идеальны для автоматизации. Но большинству пользователей удобнее работать с графическими интерфейсами. Даже в Linux.
Комментарии (16)
Greyushko
09.03.2017 11:43"«КриптоПро CSP» не умеет графического интерфейса под Linux.".
Во-первых, имеет. Нужно доставить пакет с нужным набором окон (gtk или motif). Но то, что вы называете графическим интерфейсом, — это набор кнопочек для решения задач, которыми занимается пользовательское ПО, встраивающее в себя криптографию. У CSP на Linux, действительно, кнопочек «вычислить подпись» или «зашифровать» нет. Но, собственно, на Windows тоже ничего подобного нет.
Во-вторых, криптопровайдер — это просто набор библиотек. Кажется странным требовать от него функциональности АРМа, которыми и являются Rosa Crypto tool и Trusted esign. Если вы хотите сравнивать графические интерфейсы библиотек, то сравнение с openssl будет более уместным.
Ну и наконец. csptestf — это не «консольный интерфейс CSP», а утилита, которая в большинстве случаев используется пользователями исключительно для тестовых целей, чтобы понять, на каком этапе работы возникает ошибка: при встраивании или при работе провайдера.
Основной интерфейс криптопровайдера (любого, не только КриптоПро) — программный MS CryptoAPI. Его подробное описание есть как в документации разработчика, так и на MSDN.Neraverin
09.03.2017 12:01+1Давайте разбираться.
В Windows у КриптоПро CSP есть графический интерфейс для просмотра сертификатов например. Аналогичного интерфейса под linux, на сколько я знаю, нет. Если вы знаете о таком, то поделитесь здесь — это будет полезно не только мне. И я с удовольствием внесу изменения в статью для всех. Единственный пакет, который имеет gtk в названии это — cprocsp-rdr-gui-gtk, который представляет собой GUI компоненты для CSP идеров, как следует из описания.
Что касается «набора кнопочек для решения задач». Статья именно про эти наборы кнопочек. В Windows их масса. В Linux они только начали появляться.
Спасибо за совет дополнить сравнением с openssl. Постараюсь и такой сделать. Про криптопровайдер — вы абсолютно правы.
Что касается csptestf — возможно разработчики ее задумывали именно как утилиту для тестирования, но по факту пользователи ей пользуются для подписи, а не только для тестов.Greyushko
09.03.2017 12:46Но речь-то не о просмотре сертификатов, а о подписи. Действительно, в Windows есть простые WinAPI-вызовы для отображения списка сертификатов. Более того, есть даже кнопочка в Панели управления CSP, которая позволяет посмотреть свойства контейнера. Но это всё еще не прикладная функциональность, а достаточно тестовая: «Проверить контейнер», «Просмотреть сертификат» и т.п. Тем более, реализация которой не требует никаких трудозатрат помимо одного WinAPI-вызова.
Про openssl я имел в виду, не «дополнить», а заменить. Сейчас статья выглядит как: «Есть три приложения, в которых можно подписать, используя наш токен. Есть неудобное с широкой функциональностью, удобное с урезанной функциональностью и удобное с широкой функциональностью, но платное». Причем, под первым приложением всюду по тексту подразумевается «КриптоПро CSP».
Хотелось бы еще раз уточнить: «КриптоПро CSP» — это не пользовательское приложение, а набор системных библиотек, реализующих криптографию, которые можно встроить в пользовательские приложения. И ни на Windows, ни на Linux в составе «КриптоПро CSP» не идёт полноценного графического пользовательского приложения для управления ключами/сертификатами/документами.
То, что много кто использует csptest для настоящих задач, а не тестовых, честно говоря, является открытием. Если это действительно так, то странно, что по этому поводу его использования практически отсутствуют обращения в техподдержку.daggert
09.03.2017 13:23>И ни на Windows, ни на Linux в составе «КриптоПро CSP» не идёт полноценного графического пользовательского приложения для управления ключами/сертификатами/документами.
Мб я что путаю, но то что появляется в панели инструментов — не полноценное пользовательское приложение?
dmytro18
09.03.2017 13:03Rosa Crypto Tool
Как следует из названия, это утилита для работы с электронной подписью и шифрованием для дистрибутива ROSA Linux. В данный момент утилита доступна только в репозиториях Rosa Linux.
У Вас несколько устаревшая информация. Утилита полгода назад портирована в Alt Linux: Посмотреть
redflasher
09.03.2017 18:57КриптоПРО CSP… увидел и сразу содрогнулся)
Не могу не вставить свои 5 копеек о том, что в их PDF-мануалах одно, в cli help'е другое(более близкое к истине, кстати).
А по факту — если вы не юзали их продукты ранее и вам надо их настроить через ssh на удаленной машине, то лучше сразу звонить в саппорт — там вам помогут толковые, но явно уставшие от звонков ребята.
Ниже замечание-спойлер(любителям позаниматься mind-порно через ssh — не читать)
Спойлер:
Если вы получили сертификат для ЭЦП не в виде ру-токена, а в виде файла от заказчика… то вас еще ждет сюрприз — что оказывается структура папок, в которых находится файл-сертификат, имеет-таки значение!
(в то время как ни вы(если не работали с системой ранее), ни ваш заказчик об этом ничего не знаете)Hayate
10.03.2017 13:47Зашёл увидеть комментарий, что не у одного меня КриптоПРО CSP в linux или freebsd вызывает содрогание.
dinisoft
12.03.2017 19:50Может я что-то не знаю, но для чего этот костыль в виде «CryptoPro» если у нас полноценный аппаратный криптопровайдер?
Меня будет сложно переубедить, но практически все свои нуждики перекрыл стандартными средствами и без «CryptoPro». Для меня, как для лица использующего ваши токены в личных целях было бы гораздо интереснее если бы вы добавили поддержку OpenPGP.Neraverin
13.03.2017 11:37Это не наша инициатива, а разработчиков прикладного ПО. Так как пользователей КриптоПро в России много, то производителям конечного ПО для пользователей проще встроить КриптоПро. Мы со своей стороны будем только рады, если разработчики будут встраивать нас напрямую. Меньше компонент в системе — меньше вероятность проблем. Плюс нашими библиотеками можно пользоваться совершенно бесплатно. Про OpenPGP подумаем.
max_rip
А как у этих продуктов
с авторизацией и подписываем запросов в gosuslugi.ru, т.к. они используют свой плагин, который на данный момент работает только в firefox и в связке с криптопро запустить не удалось.
Neraverin
Если вопрос про rosa crypto tool и trusted esign, то они не имеют никакого отношения к сайту госуслуг. Госуслуги действительно используют для работы только свой плагин, и прочий софт на компе их не интересует. Что касается Рутокен ЭЦП 2.0, то работу с ним полностью поддерживает плагин госуслуг. Если у вас будет КЭП на Рутокен ЭЦП 2.0, то никаких проблем с авторизацией и подписываем запросов не будет.
Neraverin
Коллеги меня поправляют. Вход действительно работает. А подпись запросов пока нет. Есть тестовая версия с поддержкой, но в релиз она не ушла.