Как выглядит контейнер закрытого ключа
Читаем контейнер закрытого ключа КриптоПро средствами 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
Проверяем подпись
Все работает просто замечательно!
Спасибо за внимание. Это была моя первая статья на хабре.
КриптоПро CSP: как создать хранилище сертификата и скопировать контейнер закрытого ключа
Владелец цифрового автографа (далее – ЭЦП, ЭП) может дистанционно запрашивать у удостоверяющего центра (далее – УЦ) сертификат ключа проверки электронной подписи (далее – СКПЭП) или его обновление. Внеплановая замена производится только при определенных обстоятельствах: требуется коррекция сведений, использованных для оформления текущего документа (сменился руководитель организации, в связи с переездом был перерегистрирован юридический адрес) или до конца периода актуальности СКПЭП остается меньше двух месяцев.
Чтобы воспользоваться данной услугой через сайт УЦ, заявителю потребуется маркер или карточка временного доступа. Это пара логин–пароль для авторизации в защищенной зоне интернет-портала центра сертификации, выдавшего своему клиенту текущий СКПЭП. Проапдейтить его можно непосредственно через веб-интерфейс УЦ. Если требуется новый сертификат, заявителю следует выбрать подходящий УЦ и сделать соответствующий запрос, воспользовавшись ссылкой типа «Мастер создания сертификатов», размещенной на официальном сайте учреждения.
Чтобы получить маркер временного доступа, пользователю нужно зарегистрировать личный кабинет и, скорее всего, понадобится заполнить электронный бланк заказа услуги. Он обязательно оформляется, если существует необходимость расширения области применения ЭП. Например, для подключения компании заявителя к процессу представления цифровой бухотчетности в ПФР, ФСС или Росстат.
Услугу удаленного создания нового или обновления текущего СКПЭП предлагают Федеральная служба по регулированию алкогольного рынка (ФСРАР), МТС-банк, УЦ Такском и другие организации. В следующих разделах мы расскажем, как с помощью КриптоПро CSP создать хранилище личного сертификата и скопировать контейнер закрытого ключа на подходящий носитель при использовании удаленных сервисов для запроса СКПЭП.
КриптоПро CSP: как создать ключевой контейнер
Ключевой контейнер – это «запароленный» каталог в хранилище (реестре) или системной библиотеке «операционки» (далее – ОС) или на защищенном ключевом USB-носителе: токене, смарт-карте. Он считается одним из инструментов защиты криптографических средств генерации и верификации ЭП, лицензий, сертификатов, паролей и другой личной информации.
Криптометод организации и иерархии персональных данных предусматривает обязательное использование защищенного каталога как части комплекса гарантий сохранности и конфиденциальности сведений, необходимых для активации ЭП. Фактически, создавая новую папку для хранения СКПЭП, доступ к которой обеспечивается путем ввода пароля, пользователь формирует новое хранилище.
Помимо выполнения основных функций – генерации и верификации ЭП – КриптоПро CSP «умеет» функционировать как зависимая компонента: приложение можно вызывать из сторонних программ. Например, через веб-интерфейс сайта УЦ, в который заявитель обратился за услугой обновления СКПЭП. КриптоПро CSP бывает необходим и для того, чтобы создать ключевой контейнер и установить в него сертификат ключа проверки ЭЦП, в том числе с обращением к службе сертификации ОС Microsoft (далее – MS) Windows Server.
Испытать работу генератора ключей и ознакомиться с процедурой запроса СКПЭП можно на странице тестового удостоверяющего центра разработчика программного модуля. Ниже мы пошагово опишем этот процесс.
Внимание! Если вы запрашиваете СКПЭП, который планируете использовать при работе с электронной почтой, указывайте «Область применения ключа». Также учитывайте: вы не получите доступа к криптофункциям для e-mail, если указанный адрес электронной почты не совпадает с зарегистрированным в MS Outlook Express.
Чтобы получить возможность применять выданный по удаленному запросу СКПЭП при обмене данными по протоколу TLS, перейдите к разделу «Область применения ключа» и укажите его тип: «Сертификат аутентификации клиента».
Создание контейнера закрытого ключа
В случае, если для работы используется 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, перейдите к разделу «Область применения ключа» и укажите его тип: «Сертификат аутентификации клиента».
Как скопировать контейнер/закрытую часть ключа?
Если для работы используется дискета или flash-накопитель, копирование можно выполнить средствами Windows (этот способ подходит для версий КриптоПро CSP не ниже 3.0). Папку с закрытым ключом (и файл сертификата — открытый ключ, если он есть) необходимо поместить в корень дискеты (flash-накопителя). Название папки при копировании рекомендуется не изменять. Папка с закрытым ключом должна содержать 6 файлов с расширением .key.
Пример закрытого ключа — папки с шестью файлами, и открытого ключа — файла с расширением .cer.
Копирование контейнера также можно выполнить с помощью КриптоПро CSP. Для этого необходимо выполнить следующие шаги:Как правило, в закрытом ключе присутствует открытый ключ (файл header.key в этом случае будет весить больше 1 Кб). В этом случае копирование открытого ключа выполнять не обязательно.
Копирование с помощью КриптоПро CSP
1. Выбрать Пуск / Панель Управления / КриптоПро CSP.
2. Перейти на вкладку Сервис и кликнуть по кнопке Скопировать контейнер.
3. В окне «Копирование контейнера закрытого ключа» нажмите на кнопку «Обзор».
4. Выберите контейнер, который необходимо скопировать, и кликните по кнопке «Ок», затем «Далее».
5. Если вы копируете с защищённого ключевого носителя, то появится окно ввода, в котором следует указать pin-код.
6. Если вы не меняли pin-код на носителе, стандартный pin-код необходимо вводить соответственно его типу:
7. В следующем окне необходимо ввести имя Вашей копии. Придумайте и укажите вручную имя для нового контейнера. В названии контейнера допускается русская раскладка и пробелы. Затем кликните «Готово».
8. В окне «Выбор ключевого носителя» выберите носитель, на который будет помещен новый контейнер.
9. На новый контейнер будет предложено установить пароль. Рекомендуем установить такой пароль, чтобы вам было легко его запомнить, но посторонние не могли его угадать или подобрать. Если вы не хотите устанавливать пароль, можно оставить поле пустым и нажать «ОК».
В случае утери пароля/pin-кода использование контейнера станет невозможным.
10. Если вы копируете контейнер на смарт-карту ruToken/eToken /JaCarta, окно запроса будет выглядеть так:
11. В окне ввода укажите pin-код. Если вы не меняли pin-код на носителе, стандартный pin-код
12. После копирования система вернется на вкладку «Сервис» КриптоПро CSP. Копирование завершено.
13. Для работы с копией ключевого контейнера необходимо установить личный сертификат.
14. В меню Пуск выберите пункт «КРИПТО-ПРО», запустите приложение «КриптоПро CSP»
15. Перейдите на вкладку «Сервис» и нажмите кнопку «Просмотреть сертификаты в контейнере»:
16. В следующем окне нажмите кнопку Обзор, чтобы выбрать контейнер для просмотра (в нашем примере контейнер находится в Реестре):
17. После выбора контейнера нажмите кнопку Ок, затем Далее
18. Если после нажатия на кнопку Далее Вы видите такое сообщение:
19. «В контейнере закрытого ключа отсутствует открытый ключ шифрования», следует установить сертификат по рекомендациям, описанным в разделе «Установка через меню «Установить личный сертификат».
20. В окне Сертификат для просмотра нажмите кнопку Установить:
21. Если откроется сообщение «Этот сертификат уже присутствует в хранилище сертификатов. Заменить существующий сертификат новым, с проставленной ссылкой на закрытый ключ?», нажмите Да:
22. Дождитесь сообщения об успешной установке:
23. Сертификат установлен. Можно закрыть все открытые окна КриптоПро.
Установка через меню «Установить личный сертификат».
1. Для установки сертификата этим способом Вам понадобится файл сертификата (файл с расширением.cer).
2. В меню Пуск выберите пункт «КРИПТО-ПРО», запустите приложение «КриптоПро CSP»
3. Перейдите на вкладку «Сервис» и нажмите кнопку «Установить личный сертификат»:
4. В следующем окне нажмите кнопку Обзор, чтобы выбрать файл сертификата. Укажите путь к файлу сертификата и нажмите кнопку Открыть (в нашем примере файл сертификата находится на Рабочем столе):
5. В следующем окне нажмите кнопку Далее; в окне Сертификат для установки нажмите Далее.
6. Поставьте галку в окне Найти контейнер автоматически (в нашем примере контейнер находится в Реестре компьютера) и нажмите Далее:
7. В следующем окне отметьте пункт Установить сертификат (цепочку сертификатов) в контейнер и нажмите Далее:
8. В окне Завершение мастера установки личного сертификата нажмите Готово.
9. Если КриптоПро CSP запрашивает pin-код от контейнера, введите нужный код или попробуйте стандартные pin-коды носителей:
10. Если откроется сообщение «Этот сертификат уже присутствует в хранилище сертификатов. Заменить существующий сертификат новым, с проставленной ссылкой на закрытый ключ?», нажмите Да:
11. Сертификат установлен. Можно закрыть все открытые окна КриптоПро.
Остались вопросы?
Отдел технической поддержки