Контейнер эцп что это
Читаем контейнер закрытого ключа КриптоПро средствами OpenSSL
Речь пойдет о файлах primary.key, masks.key и header.key, которые лежат в директории ххххх.000 на флешке. Данные файлы входят в состав криптоконтейнера закрытого ключа электронной подписи криптопровайдера КриптоПро, формат которого нигде не опубликован. Целью данной статьи является чтение контейнера и преобразование закрытого ключа в формат, который может быть прочитан в библиотеке OpenSSL. Долгое время было распространено ошибочное суждение, что достаточно сделать нечто вида (primary_key XOR masks_key) и мы получим закрытый ключ в чистом (raw) виде, однако забегая вперед, можно утверждать, что в КриптоПро было применено более сложное преобразование, в худшем случае состоящее из более чем 2000 (двух тысяч) операций хеширования.
Файл primary.key
Содержит 32 байта ключа в формате Asn1. Это только половина ключа, полный ключ получается при делении этого числа по модулю Q на маску. Поле, хранящее модуль Q в библиотеке OpenSSL имеет название order. Маска лежит в файле masks.key:
Файл masks.key
Содержит 32 байта маски ключа в формате Asn1, зашифрованного на ключе хранения pwd_key. Далее 12 байт «затравочной» информации для генерации ключа хранения pwd_key, если криптоконтейнер защищен паролем, то пароль также участвует в генерации ключа хранения.
Далее контрольная сумма (имитозащита) 4 байта. Контрольной информацией для простоты мы пользоваться не будем, общий контроль будет осуществляться путем генерации открытого ключа и сравнения первых 8 байт полученного ключа с соответствующим полем из файла header.key:
Файл header.key
Читаем закрытый ключ и конвертируем
Основную работу выполняют следующие 3 функции:
1. Создаем ключ хранения исходя из 12-ти байтовой «соли» и пароля.
2. Расшифровываем основной ключ на ключе хранения.
3. Делим ключ с маской на маску.
Но так как в библиотеке OpenSLL операция деления по модулю традиционно отсутствует, пользуемся операцией взятия обратного числа и умножением.
Сборка утилиты конвертирования ключа
Далее сборка исходников описана для Linux версии.
Версию для Windows можно скачать отсюда там же есть сертификаты и закрытый ключ для тестирования, для сборки потребуется бесплатный компилятор Borland C++ 5.5
Компиляция OpenSSL библиотеки
После скачивания и распаковки исходных текстов openssl в целевой директории выполняем команды:
Получаем готовую библиотеку libcrypto.a в текущей директории.
Также потребуются заголовочные файлы из директорий engines/ccgost и include.
Компиляция privkey.c
Формирование файла закрытого ключа private.key
Тестовый закрытый ключ в криптоконтейнере lp-9a0fe.000, сертификат открытого ключа signer.cer и другие файлы для тестирования можно взять отсюда
Получаем результат работы:
Cохраняем в private.key
Пользуемся закрытым ключом private.key для подписывания файла file.txt
Проверяем подпись
Все работает просто замечательно!
Спасибо за внимание. Это была моя первая статья на хабре.
Электронная подпись для чайников: с чем ее есть и как не подавиться. Часть 2
Продолжая раскрывать тайное знание о цифровой подписи простым языком, разберем, что же нам надо для удобной и эффективной работы с ними, а также главное различие между лагерями S/MIME + X.509 и PGP.
Перед тем, как рассматривать особенности этих двух больших лагерей, стоит рассмотреть, какая информация нужна получателю для проверки подписи (а наш зашифрованный хэш уже вполне можно называть подписью), и в каком виде ее можно ему передать.
Каждую из частей информации можно передать вместе с открытым ключом, или вместе с нашей подписью, а можно и с тем и с тем, для большего удобства. Конечно, можно не разделять информацию на передаваемую с открытым ключом и передаваемую с подписью. Но тогда каждый раз отправляя подписанную информацию мы отправляем одно и то же. Как если бы к каждому отправляемому нами бумажному письму (даже короткому, в две строки), мы бы прикладывали дополнение вида «Здравствуйте! Это я, В. Пупкин, которого вы встречали на Красной площади Москвы, где мы и познакомились, потом пошли в ресторан, потом ». Согласитесь, слегка неудобно.
Но вернемся к нашей информации, необходимой для проверки подписи.
Начнем с простого: информация, которая позволит нам узнать, кто же сделал эту подпись. Как мы уже договорились, ассиметричное шифрование позволяет однозначно связать наш открытый ключ и полученную подпись. Беда в том, что сам по себе открытый ключ – набор байт. При этом он, конечно, связан с закрытым, которым мы (то есть отправитель) владеем, но связь эта для получателя неочевидна. У него есть набор байт от В. Пупкина, от И. Петрова, от С. Сидорова… И от десятка других людей. И как ему их идентифицировать? Держать отдельный реестр для того, кому какой набор байт принадлежит? Это что же, получается уже второй реестр (помимо того, где должно быть записано, с помощью какой хэш-функции какой хэш сделан)! И опять, неудобно!
Значит, надо связать каждый открытый ключ с информацией о том, кому этот ключ принадлежит, и присылать это все одним пакетом. Тогда проблема реестра решается сама собой – пакет (а если более правильно, контейнер) с открытым ключом можно будет просто посмотреть и сразу понять его принадлежность.
Но эту информацию все так же надо связать с подписью, пришедшей получателю. Как это сделать? Надо соорудить еще один контейнер, на сей раз для передачи подписи, и в нем продублировать информацию о том, кто эту подпись создавал.
Продолжая нашу аналогию с красивым замком, мы пишем на ключе «Этот ключ открывает замок В. Пупкина». А на замке тоже пишем «Замок В. Пупкина». Имея такую информацию, получатель нашей коробочки не будет каждый из имеющихся у него ключей вставлять наугад в наш замок, а возьмет наш ключ и сразу его откроет.
Теперь, по переданной информации при проверке можно найти контейнер открытого ключа, взять оттуда ключ, расшифровать хэш и…
А собственно, что «и»? Мы ведь пока так и не решили проблему, как донести до получателя информацию о том, какая хэш-функция применялась для хэша, а ведь для проверки подписи эта информация необходима! Решить ее можно достаточно просто: положить эту информацию в контейнер вместе с нашим открытым ключом. Ведь именно связка «хэширование – шифрование результата хеширования» считается процедурой создания цифровой подписи, а ее результат – подписью. А значит, достаточно логичным представляется объединение в связку алгоритма шифрования хэша и хэш-функции, с помощью которой он сформирован. И доставлять эту информацию тоже надо в связке.
Теперь, ненадолго вернемся к информации о подписывающем. Какого рода эта информация должна быть? ФИО? Нет, В. Пупкиных много. ФИО + год рождения? Так и родившихся в один день В. Пупкиных тоже предостаточно! Более того, это может быть Василий, Виктор, или даже Василиса или Виктория Пупкины. Значит, информации должно быть больше. Ее должно быть столько, чтобы совпадение всех параметров, по которым мы идентифицируем человека, было максимально невероятным.
Безусловно, такой пакет информации создать возможно. Вот только, работать с ним уже трудновато. Ведь надо наши контейнеры открытых ключей надо сортировать, хранить, использовать, в конце концов. А если для каждого использования придется указывать по полсотни параметров, то уже на втором контейнере станет понятно, что что-то надо менять. Решение этой проблемы, конечно же, было найдено.
Чтобы понять, в чем же оно заключалось, обратимся к бумажному документу, который есть у всех нас: к паспорту. В нем можно найти и ФИО, и дату рождения, и пол, и много другой информации. Но, главное, в нем можно найти серию и номер. И именно серия и номер являются той уникальной информацией, которую удобно учитывать и сортировать. Кроме того, они существенно короче всей оставшейся информации вместе взятой, и при этом все так же позволяют опознать человека.
Применяя этот же подход к контейнерам открытых ключей, мы получим, что у каждого контейнера должен быть некий номер, последовательность символов, уникальная для него. Эту последовательность символов принято называть идентификатором, а сами контейнеры – сертификатами, либо просто ключами.
Вот здесь и начинаются принципиальные различия в идеологиях OpenPGP и S/MIME + X.509. Для краткого понимания их, вернемся к нашей аналогии с паспортом.
С другой стороны, в кругу друзей, или внутри компании вам достаточно представиться так: «В. Пупкин из твоей группы в институте» или же «В. Пупкин из отдела продаж». И людям, с которыми вы контактируете в этом кругу уже не нужна третья сторона, они и так помнят Пупкина из группы с которым проучились пять лет, или Пупкина из отдела продаж, с которым недавно ходили обедать, и предоставленной вами информации им вполне достаточно.
Так же можно разделить и эти два лагеря.
Сертификат X.509 – это аналог нашего паспорта. Здесь сертификаты вам выдаются суровой третьей стороной, гарантом вашей личности: Удостоверяющим Центром (УЦ). Получающий ваши подписи человек всегда может обратиться в УЦ и спросить интересующую его информацию по вот этому конкретному сертификату.
PGP же (и стандарт OpenPGP, появившийся в дальнейшем) создавался на основе так называемых сетей доверия. Такая идея подразумевает, что обмениваются подписями люди, которым третья сторона для их взаимоотношений не нужна, а нужна только защита от нехороших лиц.
Конечно, с течением времени такое разделение стало уже достаточно условным, так как на данный момент и в S/MIME+X.509 и в PGP можно использовать методы лагеря соперников. Но все же, стандарты достаточно продолжительное время развивались параллельно и развились до той степени, что взаимная совместимость между ними стала невозможной.
Более популярным стандартном, в силу своей ориентированности на участие более компетентной третьей стороны, стал стандарт S/MIME + X.509, однако и у PGP есть некоторое количество козырей за пазухой, с помощью которых он не только не погибает, но и продолжает успешно развиваться.
Более подробное рассмотрение каждого из форматов, а также рекомендации, когда, где и какой из них использовать вы сможете прочитать уже в следующих статьях.
Создание контейнера закрытого ключа
В случае, если для работы используется flash-накопитель или дискета, копирование можно выполнить средствами Windows (этот способ подходит для версий КриптоПро CSP не ниже 3.0). Папку с закрытым ключом (и файл сертификата, если он есть) необходимо поместить в корень flash-накопителя (дискеты). Название папки при копировании рекомендуется не изменять.
Папка с закрытым ключом должна содержать 6 файлов с расширением.key. Ниже приведен пример содержимого такой папки.
Копирование контейнера также может быть выполнено с помощью криптопровайдера КриптоПро CSP. Для этого необходимо выполнить следующие шаги:
1. Выбрать Пуск / Панель Управления / КриптоПро CSP.
2. Перейти на вкладку Сервис и кликнуть по кнопке Скопировать. (см. рис. 1).
Рис. 1. Окно «Свойства КриптоПро CSP»
3. В окне Копирование контейнера закрытого ключа нажать на кнопку Обзор (см. рис. 2).
Рис. 2. Копирование контейнера закрытого ключа
4. Выбрать контейнер из списка, кликнуть по кнопке Ок, затем Далее.
5. Далее необходимо указать вручную имя контейнера, на который будет выполнено копирование. В названии контейнера допускается русская раскладка и пробелы. Затем выбрать Готово (см. рис. 3).
Рис. 3. Имя ключевого контейнера
6. В окне «Вставьте и выберите носитель для хранения контейнера закрытого ключа» необходимо выбрать носитель, на который будет помещен новый контейнер (см. рис. 4).
Рис. 4. Выбор чистого ключевого носителя
7. На новый контейнер будет предложено установить пароль. Установка пароля не является обязательной, можно оставить поле пустым и нажать на кнопку Ок (см. рис. 5).
Рис. 5. Установка пароля на контейнер
Если копирование выполняется на носитель Rutoken, сообщение будет звучать иначе (см. рис. 6)
Рис. 6. Pin-код для контейнера
Рекомендуется указать стандартный pin-код (12345678)
Обращаем ваше внимание: в случае утери пароля/pin-кода использование контейнера станет невозможным.
8. После выполнения копирования система вернется на вкладку Сервис в окне КриптоПро CSP. Копирование завершено. Если планируется использовать для работы в системе «Контур-Экстерн» новый ключевой контейнер, необходимо установить личный сертификат (см. Как установить личный сертификат?).
КриптоПро ЭЦП Browser plug-in — является встраиваемым модулем в КриптоПро CSP и используется для создания и верификации ЭП на веб-страницах. Соответственно, плагин дополняет КриптоПРо ЭП. Чтобы купить программу КриптоПро CSP и дополнительные модули в SoftMagazin, необходимо определиться с нужным типом лицензии.
Как установить электронную подпись КриптоПро
Для установки электронной подписи необходим контейнер с ключевой информацией (флешка, RuToken и другие). Программа КриптоПро CSP должна быть установлена на компьютере. Запустив ПО, во вкладке Сервис необходимо нажать на кнопку «Посмотреть сертификаты в контейнере». После этого подключить накопитель с контейнером. Выбрав ключевой контейнер, необходимо будет ввести пин-код.
В информационном окне появятся данные о сертификате, если они соответствуют нужным, выберите Свойства. Перейдя во вкладку общие нужно будет нажать на кнопку «Установить сертификат» и выбрать личное хранилище. Стоит убедиться также в наличии корневого сертификата. Эти этапы составляют основные шаги по установке ЭП. Далее потребуется работа с Outlook, Microsoft Word и другими программами.
Установка контейнера КриптоПро
Для установки контейнера должен быть установлен и верифицирован сертификат в Личном Хранилище/Кабинете. После это нужно выполнить действия, описанные выше.
Для самостоятельного создания ключевого контейнера одним из вариантов будет создание тестового варианта на сайте тестового Удостоверяющего Центра. Здесь можно получить сертификат открытого ключа проверки ЭП. Для этого необходимо будет создать открытый и закрытый ключи и данные подтверждающие связь сертификата и его владельца.
Как установить ключ в КриптоПро
При использовании большого количества на одном ПК электронных подписей, может возникнуть надобность установить ключ в реестр КриптоПро (скопировать). Для этого необходимо подключить съемный носитель с реестром КриптоПро. Открыв ПО через меню Пуск нужно будет выбрать вкладку Оборудование и нажать на «Настроить считыватели». Реестр может быть виден сразу, если его нет, потребуется создать через Мастер Установки Считывателей.
Чтобы скопировать ключ ЭЦП, нужно зайти в программе во вкладку Сервис. Выбрав «Скопировать», выбираем подключенный носитель в окне обзора. Затем потребуется ввести пароль контейнера, задать ему имя и нажать «Готово». Следует выбрать наименование Реестр и придумать новый пароль для контейнера. После копирования контейнера не забудьте установить личный сертификат в хранилище.
Как установить контейнер закрытого ключа в КриптоПро
Для установки контейнера закрытого ключа потребуется перейти на вкладку Сервис и выбрать пункт «Скопировать контейнеры». Вставив накопитель с ключевым контейнером, нужно будет его выбрать в окне обзора. Выбрав контейнер и нажав «Ок», нужно будет задать имя контейнера. Затем в окне выбора считывателя потребуется выбрать устройство и создать пароль.
Установить Рутокен в КриптоПро
Благодаря использованию Рутокен можно надежно защитить информацию от несанкционированного доступа. Защищенная файловая система сохранит в безопасности данные благодаря криптографическому шифрованию. Создано специально ПО, которое объединяет возможности двух программ — КриптоПро Рутокен CSP. Объединив идентификатор и СКЗИ получился надежный модуль, на котором можно безопасно хранить данные.
Так как все действия выполняются внутри ключа-идентификатора и протокол обмена данными защищен уникальной технологией, рационально использовать подобный дистрибутив при работе с электронными документами высокой важности. Если использовать отдельно Рутокен, необходимо прежде всего установить драйвера на ПО. Нельзя подключать идентификатор до установки драйверов. После инсталляции потребуется установка модулей поддержки для КриптоПро. Пройдя этапы подготовки, можно подключать ключ Рутокен. Затем следует запустить программу КриптоПро и во вкладке Оборудование настроить считыватели. Для работы идентификатора нужно выбрать пункт «Все считыватели смарт-карт» и нажать «Далее».
Как установить КриптоПро ЭЦП Browser plug-in
Плагин используется при создании и верификации электронной подписи, при работе на веб-страницах, когда используется ПО КриптоПро. Легко встраиваемый ЭЦП Browser plug-in поддерживает возможность работать с любым из браузеров, которые поддерживает сценарии JavaScript. Подпись может создаваться для разных типов данных: веб-страницы, текстовые сообщения, электронные документы. Если вам необходимо установить КриптоПро ЭЦП Browser plug-in, воспользуйтесь рекомендациями, приведенными ниже.
Для того чтобы установить КриптоПро ЭЦП Browser plug-in потребуется один из современных браузеров, который должен быть установлен на компьютере. Необходимо найти установочный файл и запустить его. Следуя указания Мастера Установки выполнить все этапы установки. После этого необходимо будет перезайти в веб-браузер. При новом запуске браузера должна появиться информация, что плагин загружен. Если требуется установить плагин для UNIX-платформ, обязательно потребуется установка пакета cprocsp-rdr-gui-gtk.
Владелец цифрового автографа (далее – ЭЦП, ЭП) может дистанционно запрашивать у удостоверяющего центра (далее – УЦ) сертификат ключа проверки электронной подписи (далее – СКПЭП) или его обновление. Внеплановая замена производится только при определенных обстоятельствах: требуется коррекция сведений, использованных для оформления текущего документа (сменился руководитель организации, в связи с переездом был перерегистрирован юридический адрес) или до конца периода актуальности СКПЭП остается меньше двух месяцев.
Чтобы воспользоваться данной услугой через сайт УЦ, заявителю потребуется маркер или карточка временного доступа. Это пара логин–пароль для авторизации в защищенной зоне интернет-портала центра сертификации, выдавшего своему клиенту текущий СКПЭП. Проапдейтить его можно непосредственно через веб-интерфейс УЦ. Если требуется новый сертификат, заявителю следует выбрать подходящий УЦ и сделать соответствующий запрос, воспользовавшись ссылкой типа «Мастер создания сертификатов», размещенной на официальном сайте учреждения.
Чтобы получить маркер временного доступа, пользователю нужно зарегистрировать личный кабинет и, скорее всего, понадобится заполнить электронный бланк заказа услуги. Он обязательно оформляется, если существует необходимость расширения области применения ЭП. Например, для подключения компании заявителя к процессу представления цифровой бухотчетности в ПФР, ФСС или Росстат.
Услугу удаленного создания нового или обновления текущего СКПЭП предлагают Федеральная служба по регулированию алкогольного рынка (ФСРАР), МТС-банк, УЦ Такском и другие организации. В следующих разделах мы расскажем, как с помощью КриптоПро CSP создать хранилище личного сертификата и скопировать контейнер закрытого ключа на подходящий носитель при использовании удаленных сервисов для запроса СКПЭП.
КриптоПро CSP: как создать ключевой контейнер
Ключевой контейнер – это «запароленный» каталог в хранилище (реестре) или системной библиотеке «операционки» (далее – ОС) или на защищенном ключевом USB-носителе: токене, смарт-карте. Он считается одним из инструментов защиты криптографических средств генерации и верификации ЭП, лицензий, сертификатов, паролей и другой личной информации.
Криптометод организации и иерархии персональных данных предусматривает обязательное использование защищенного каталога как части комплекса гарантий сохранности и конфиденциальности сведений, необходимых для активации ЭП. Фактически, создавая новую папку для хранения СКПЭП, доступ к которой обеспечивается путем ввода пароля, пользователь формирует новое хранилище.
Помимо выполнения основных функций – генерации и верификации ЭП – КриптоПро CSP «умеет» функционировать как зависимая компонента: приложение можно вызывать из сторонних программ. Например, через веб-интерфейс сайта УЦ, в который заявитель обратился за услугой обновления СКПЭП. КриптоПро CSP бывает необходим и для того, чтобы создать ключевой контейнер и установить в него сертификат ключа проверки ЭЦП, в том числе с обращением к службе сертификации ОС Microsoft (далее – MS) Windows Server.
Испытать работу генератора ключей и ознакомиться с процедурой запроса СКПЭП можно на странице тестового удостоверяющего центра разработчика программного модуля. Ниже мы пошагово опишем этот процесс.
Внимание! Если вы запрашиваете СКПЭП, который планируете использовать при работе с электронной почтой, указывайте «Область применения ключа». Также учитывайте: вы не получите доступа к криптофункциям для e-mail, если указанный адрес электронной почты не совпадает с зарегистрированным в MS Outlook Express.
Чтобы получить возможность применять выданный по удаленному запросу СКПЭП при обмене данными по протоколу TLS, перейдите к разделу «Область применения ключа» и укажите его тип: «Сертификат аутентификации клиента».
КриптоПро CSP: как создать хранилище сертификата и скопировать контейнер закрытого ключа
Владелец цифрового автографа (далее – ЭЦП, ЭП) может дистанционно запрашивать у удостоверяющего центра (далее – УЦ) сертификат ключа проверки электронной подписи (далее – СКПЭП) или его обновление. Внеплановая замена производится только при определенных обстоятельствах: требуется коррекция сведений, использованных для оформления текущего документа (сменился руководитель организации, в связи с переездом был перерегистрирован юридический адрес) или до конца периода актуальности СКПЭП остается меньше двух месяцев.
Чтобы воспользоваться данной услугой через сайт УЦ, заявителю потребуется маркер или карточка временного доступа. Это пара логин–пароль для авторизации в защищенной зоне интернет-портала центра сертификации, выдавшего своему клиенту текущий СКПЭП. Проапдейтить его можно непосредственно через веб-интерфейс УЦ. Если требуется новый сертификат, заявителю следует выбрать подходящий УЦ и сделать соответствующий запрос, воспользовавшись ссылкой типа «Мастер создания сертификатов», размещенной на официальном сайте учреждения.
Чтобы получить маркер временного доступа, пользователю нужно зарегистрировать личный кабинет и, скорее всего, понадобится заполнить электронный бланк заказа услуги. Он обязательно оформляется, если существует необходимость расширения области применения ЭП. Например, для подключения компании заявителя к процессу представления цифровой бухотчетности в ПФР, ФСС или Росстат.
Услугу удаленного создания нового или обновления текущего СКПЭП предлагают Федеральная служба по регулированию алкогольного рынка (ФСРАР), МТС-банк, УЦ Такском и другие организации. В следующих разделах мы расскажем, как с помощью КриптоПро CSP создать хранилище личного сертификата и скопировать контейнер закрытого ключа на подходящий носитель при использовании удаленных сервисов для запроса СКПЭП.
КриптоПро CSP: как создать ключевой контейнер
Ключевой контейнер – это «запароленный» каталог в хранилище (реестре) или системной библиотеке «операционки» (далее – ОС) или на защищенном ключевом USB-носителе: токене, смарт-карте. Он считается одним из инструментов защиты криптографических средств генерации и верификации ЭП, лицензий, сертификатов, паролей и другой личной информации.
Криптометод организации и иерархии персональных данных предусматривает обязательное использование защищенного каталога как части комплекса гарантий сохранности и конфиденциальности сведений, необходимых для активации ЭП. Фактически, создавая новую папку для хранения СКПЭП, доступ к которой обеспечивается путем ввода пароля, пользователь формирует новое хранилище.
Помимо выполнения основных функций – генерации и верификации ЭП – КриптоПро CSP «умеет» функционировать как зависимая компонента: приложение можно вызывать из сторонних программ. Например, через веб-интерфейс сайта УЦ, в который заявитель обратился за услугой обновления СКПЭП. КриптоПро CSP бывает необходим и для того, чтобы создать ключевой контейнер и установить в него сертификат ключа проверки ЭЦП, в том числе с обращением к службе сертификации ОС Microsoft (далее – MS) Windows Server.
Испытать работу генератора ключей и ознакомиться с процедурой запроса СКПЭП можно на странице тестового удостоверяющего центра разработчика программного модуля. Ниже мы пошагово опишем этот процесс.
Внимание! Если вы запрашиваете СКПЭП, который планируете использовать при работе с электронной почтой, указывайте «Область применения ключа». Также учитывайте: вы не получите доступа к криптофункциям для e-mail, если указанный адрес электронной почты не совпадает с зарегистрированным в MS Outlook Express.
Чтобы получить возможность применять выданный по удаленному запросу СКПЭП при обмене данными по протоколу TLS, перейдите к разделу «Область применения ключа» и укажите его тип: «Сертификат аутентификации клиента».