как узнать контейнер закрытого ключа к сертификату
Читаем контейнер закрытого ключа КриптоПро средствами 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
Проверяем подпись
Все работает просто замечательно!
Спасибо за внимание. Это была моя первая статья на хабре.
Перенос контейнеров закрытых ключей и сертификатов CryptoPro
Криптопровайдер КриптоПро на сегодняшний день является, пожалуй, самым популярным на рынке, по крайней мере в России. Я хочу рассказать, как быстро и удобно перенести большое количество контейнеров закрытых ключей CryptoPro и сертификатов к ним. Существует штатный механизм в самой программе, работает в ручном режиме и не подходит, когда надо перенести большое количество.
Введение
Я опишу оба этих способа, но подробно остановлюсь именно на втором способе. В некоторых ситуациях он является единственно возможным.
Копирование закрытого ключа через оснастку КриптоПро
Для того, чтобы скопировать контейнер для хранения закрытого ключа сертификата штатным средством, необходимо в Панели управления открыть оснастку CryptoPro, перейти в раздел Сервис и нажать Скопировать.
Далее вы выбираете текущий контейнер, который хотите скопировать. Это может быть либо токен, либо реестр компьютера. Затем новое имя и новое расположение контейнера. Опять же, это может быть как реестр, так и другой токен.
Ошибка копирования контейнера
Но тут есть важный нюанс. Если во время создания закрытого ключа он не был помечен как экспортируемый, скопировать его не получится. У вас будет ошибка:
Ошибка копирования контейнера. У вас нет разрешений на экспорт ключа, потому что при создании ключа не был установлен соответствующий флаг. Ошибка 0x8009000B (-2146893813) Ключ не может быть использован в указанном состоянии. Либо вы просто не сможете его выбрать для копирования, если у вас последняя версия CryptoPro. Он будет неактивен:
Если получили такую ошибку, то для вас этот способ переноса не подходит. Можно сразу переходить к следующему. Отдельно расскажу, как скопировать сертификат и закрытый ключ к нему в файл, чтобы перенести на другой компьютер без использования токена. Делаем это там же на вкладке Сервис в оснастке CryptoPro. Нажимаем Посмотреть сертификаты в контейнере.
Выбираем необходимый сертификат и нажимаем Посмотреть свойства сертификата.
Далее переходим на вкладку Состав в информации о сертификате и нажимаем Копировать в файл.
Если у вас после слов «Экспортировать закрытый ключ вместе с сертификатом» нет возможности выбрать ответ «Да, экспортировать закрытый ключ«, значит он не помечен как экспортируемый и перенести его таким способом не получится. Можно сразу переходить к другому способу, который описан ниже.
Если же такая возможность есть, то выбирайте именно этот пункт и жмите Далее. В следующем меню ставьте все галочки, кроме удаления. Так вам будет удобнее и проще в будущем, если вдруг опять понадобится копировать ключи уже из нового места.
Сохраните сертификат для удобства в ту же папку, куда сохранили закрытый ключ от него. В итоге у вас должны получиться 2 файла с расширениями:
Вам достаточно перенести эти 2 файла на другой компьютер и кликнуть по каждому 2 раза мышкой. Откроется мастер по установке сертификатов. Вам нужно будет выбрать все параметры по умолчанию и понажимать Далее. Сертификат и контейнер закрытого ключа к нему будут перенесены на другой компьютер. Я описал первый способ переноса в ручном режиме. Им можно воспользоваться, если у вас немного сертификатов и ключей. Если их много и руками по одному переносить долго, то переходим ко второму способу.
Массовый перенос ключей и сертификатов CryptoPro с компьютера на компьютер
В интернете достаточно легко находится способ переноса контейнеров закрытых ключей КриптоПро через копирование нужной ветки реестра, где это все хранится. Я воспользуюсь именно этим способом. А вот с массовым переносом самих сертификатов у меня возникли затруднения и я не сразу нашел рабочий способ. Расскажу о нем тоже. Для дальнейшей работы нам надо узнать SID текущего пользователя, у которого мы будем копировать или переносить сертификаты с ключами. Для этого в командной строке выполните команду:
После того, как перенесли файлы со старого компьютера на новый, открываем файл с веткой реестра в текстовом редакторе и меняем там SID пользователя со старого компьютера на SID пользователя нового компьютера. Можно прям в блокноте это сделать поиском с заменой.
КриптоПро CSP ошибка 0x80090010 Отказано в доступе
Ошибка обращения к контейнеру закрытого ключа. Ошибка 0x80090010: Отказано в доступе. Связано это с тем, что у текущего пользователя, под которым вы хотите получить доступ к контейнеру, нет полных прав на ветку реестра с хранящимися ключами. Исправить это просто. Переходите в редактор реестра и выставляйте полные права к ветке Keys для текущего пользователя.
Убедитесь так же, что новые права наследовались на дочерние ветки с самими ключами. Обычно это так, но перепроверить на всякий случай непомешает. После этого ошибка с доступом к контейнеру закрытого ключа исчезнет.
Часто задаваемые вопросы по теме статьи (FAQ)
Очевидно, что предложенное в статье решение для этого не подойдет. Ведь тут идет речь о переносе сертификатов, которые хранятся в реестре, то есть уже были скопированы. Технические средства для копирования защищенных крипто контейнеров тоже существуют, но это не такое простое и очевидное решение.
Это не безопасно и в общем случае я не рекомендую это делать. USB токены для хранения сертификатов придуманы не просто так. Они реально защищают сертификаты от несанкционированного копирования. Если у вас нет объективной необходимости копировать сертификаты в реестр, лучше этого не делать. Если вам нужно сделать бэкап сертификата на случай поломки токена, то просто скопируйте его в зашифрованный архив и сохраните на флешке.
Нет, не подойдет. В статье описан способ переноса сертификатов CryptoPro. Другие криптопровайдеры хранят сертификаты по-другому. Универсального способа для всех не существует.
Да, есть статья на сайте контура, в ней ссылка на утилиту для копирования контейнеров Certfix. Можете воспользоваться ей.
Как найти сертификат ключа ЭЦП на компьютере
Если электронную подпись нужно использовать на нескольких компьютерах или скопировать сертификат на запасной носитель, то необходимо знать, где ее искать. Обычно сертификаты хранятся в одном месте, но в зависимости от типа используемой операционной системы путь к хранилищу может быть разным.
Где хранится ЭЦП на компьютере
Найти сертификат ключа электронной подписи на ОС Windows Vista и выше можно по адресу: C:Users/ПОЛЬЗОВАТЕЛЬ/App/Data/Roaming/MicrosoftSystem/Certificates. Где «Пользователь» — это название учетной записи ПК. В целях безопасности система сохраняет в данной папке только открытый, т.е. доступный всем, ключ ЭЦП. Закрытый ключ не копируется на жесткий диск и хранится на токене. Используется он для генерации открытых ключей.
Для программного пользования открытый ключ хранится в папке Windows в зашифрованном виде. Скопировать этот файл не получится, т.к. система не дает права доступа к нему. Просмотр установленных сертификатов возможен только администратор ПК.
Как посмотреть сертификат ЭЦП
Посмотреть установленные сертификаты можно при помощи Internet Explorer, Certmgr, консоль управления или КриптоПро. Пользоваться другими компьютерными программами не рекомендуется: они могут иметь встроенную команду отправки ключа ЭЦП на сторонний сервер, что приведет к компрометации подписи и невозможности ее использования.
Через КриптоПро
Как найти сертификат ЭЦП на компьютере при помощи КриптоПро:
Этим способом могут воспользоваться пользователи или администраторы ПК (если пользователю будет отказано в доступе, необходимо дополнительно запросить права администратора). В открывшемся окне будет список всех сертификатов, установленных на данном ПК. В содержащем сертификаты хранилище, можно посмотреть информацию по каждому, скопировать контейнер закрытых ключей КриптоПро на другой компьютер, внешний носитель или удалить недействительный ключ ЭЦП.
Через Certmgr
Найти файл сертификата можно и при помощи встроенного менеджера, который присутствует во всех ОС Windows. Через него можно не только посмотреть все личные сертификаты, но и сертификаты УЦ и партнеров Microsoft.
Метод может использоваться только администратором ПК. Для просмотра нужно:
С шифрованными сертификатами приложение работает ограниченно и не всегда корректно отражает все электронные подписи, установленные пользователем.
Через Internet Explorer
Интернет-браузер IE входит в комплектацию всех ОС семейства Windows XP и выше и позволяет также найти сертификаты ЭЦП на компьютере. Для просмотра нужно:
Далее откроется окно с перечнем всех сертификатов, установленных пользователем и сторонними поставщиками ПО. В данном меню возможен перенос ключей и сертификатов на внешний носитель, удаление открытых ключей. Удаление корневых сертификатов УЦ через меню IE невозможно.
Через консоль управления
Просмотр сертификатов в ОС Windows через консоль управления запускается в несколько этапов:
Дополнительно можно просмотреть ключи ЭЦП по конкретной учетной записи. Способ также доступен только пользователям с правами администратора ПК. Через консоль можно не только просматривать информация, но и удалять, копировать, добавлять контейнеры с ключами ЭЦП. Неудобство метода в том, что все команды необходимо вводить вручную. Обычны работа через консоль осуществляется на windows server для настройки прав доступа всех пользователей.
Где в реестре хранится ЭЦП
Иногда реестр используется как ключевой носитель, т.е. он подходит для импорта и экспорта сертификатов. Где находится сертификат ЭЦП зависит от битности системы:
SID — это идентификатор пользователя, который идентифицирует данную учетную запись. Узнать его можно через командную строку и команду WHOAMI/USER.
Где хранится сертификат ЭЦП в ОС Windows XP
К базовым компонентам ОС Windows XP относятся службы сертификации, а XP Professional уже поддерживает многоуровневые иерархии центра сертификации (ЦС) как с изолированными и интерактивными ЦС, так и сети ЦС с доверительными перекрестными отношениями.
Открытые ключи ЭЦП Windows XP хранит в личном хранилище, а т.к. они представляют собой общедоступную информацию, то хранятся в виде открытого текста. Сертификаты пользователя находятся по адресу:
Documents and Settings\ \ApplicationData\Microsoft\ SystemCertificates\My\Certificates. Они автоматически вносятся в локальный реестр при каждом входе в систему. Если профиль перемещаемый, то открытые ключи хранятся обычно не на ПК, а следуют за пользователем при каждом входе в систему с внешнего носителя.
Такие поставщики услуг криптографии, как Enchanced CSP и Base CSP хранят закрытые ключи электронной подписи в папке %SystemRoot%\Documents and Settings\ \ Application Data\Microsoft\Crypto\RSA. Если профиль перемещаемый, то они расположены в папке RSA на контроллере домена. В этом случае на ПК они загружаются только на время работы профиля. Все файлы в данной папке шифруются случайным симметричным ключом автоматически. Основной ключ пользователя имеет длину в 64 символа и создается проверенным генератором случайных чисел.
Где хранится ЭЦП в системах Linux
Закрытые ключи хранятся в хранилище HDImageStore на жестком диске, и доступны они и для CSP, и для JCP.
Поддержка и помощь
Спасибо!
Наш менеджер уже увидел Ваше обращение и спешит помочь Вам как можно скорее!
В рабочее время (пн – пт с 9:00 до 18:00) наши менеджеры очень активны и общительны и с радостью ответят Вам в течение дня.
В остальное время – дожидайтесь ответа на следующий рабочий день.
А пока предлагаем вам:
Заказ обратного звонка
Как скопировать контейнер закрытого ключа в КриптоПро?
Копирование контейнера закрытого ключа – обязательное действие при переустановке СБиС на другой компьютер. Вы также можете скопировать сертификат, если хотите создать запасной ключ электронной подписи.
КриптоПро: копирование сертификата
Шаг 1. Открытие программы КриптоПро
Чтобы открыть программу проделайте следующий путь:
Нажмите меню Пуск, затем перейдите в Программы ⇒ КриптоПро ⇒ КриптоПро CSP и включите вкладку Сервис.
В открытом окне Сервис нажмите кнопку Скопировать контейнер.
Шаг 2. Копирование контейнера закрытого ключа
После нажатия кнопки Скопировать контейнер, система отобразит окно Копирование контейнера закрытого ключа.
В открытом окне необходимо заполнить поле Имя ключевого контейнера.
Шаг 3. Ввод ключевого контейнера
Существует 3 способа, как заполнить поле Имя ключевого контейнера:
Выбрать из списка посредством нажатия кнопки Обзор
Поиск по сертификату ЭЦП
Кроме заполнения поля Имя ключевого контейнера, необходимо заполнить оставшиеся опции поиска:
После того, как все поля заполнены, нажмите кнопку Далее.
Если на доступ к закрытому ключу установлен пароль, то система попросит ввести его. Введите пароль и нажмите кнопку ОК.
Шаг 4. Ввод нового ключевого контейнера
Система вновь отобразит окно Копирование контейнера закрытого ключа, в котором необходимо ввести имя нового ключевого контейнера и установить переключатель Введенное имя задает ключевой контейнер в положение Пользователь или Компьютер, в зависимости от того, в каком хранилище требуется разместить скопированный контейнер.
После ввода нажмите кнопку Готово.
Шаг 5. Выбор носителя для скопированного контейнера
На Вашем экране появится окно, в котором необходимо выбрать носитель для скопированного контейнера.
Вставьте носитель (токен, флешка, дискета) в считыватель и нажмите кнопку ОК.
Шаг 6. Установка пароля
Система отобразит окно установки пароля на доступ к закрытому ключу.
Введите пароль, подтвердите его, при необходимости установите флажок Запомнить пароль.
Если данный флажок будет установлен, то пароль сохранится в специальном хранилище на локальном компьютере, и при обращении к закрытому ключу пароль будет автоматически считываться из этого хранилища, а не вводиться пользователем.
После ввода необходимых данных нажмите кнопку ОК. Средство криптозащиты информации «КриптоПро CSP» скопирует контейнер закрытого ключа.
Если у Вас остались вопросы, Вы можете заказать консультацию специалиста.
Что делать, если забыл пароль к сертификату электронной подписи?
Пароль или пин-код электронной подписи (ЭП или ЭЦП) схож с пин-кодом банковской карты. Он защищает подпись от мошенников, его нужно запомнить или записать на листочек и хранить подальше от самой подписи. Но, в отличие от пин-кода карточки, пароль ЭП редко используют и часто забывают.
Возьмем экономиста Василия. Он получил электронную подпись, установил ее на компьютер, задал пароль, поставил галочку «Запомнить» — и все, больше никогда эту комбинацию не вводил. Но через полгода Василий переехал в другой кабинет и сел за новый компьютер. Попытался установить на него свою подпись, но не получилось — он забыл пароль электронной подписи, а листочек, на который записывал символы, потерял.
В своей беде Василий не одинок — многие владельцы ЭП не могут вспомнить или не знают, где взять пароль электронной подписи. В этой статье расскажем, что делать в подобной ситуации и когда нужно получать новую ЭП.
Что такое пароль и пин-код электронной подписи
На электронную подпись устанавливают один из типов защиты: пароль или пин-код. Разберемся, чем они отличаются.
Пароль от контейнера электронной подписи
Пароль используют для подписи, сохраненной в память компьютера. Он защищает контейнер ЭП — папку с файлами подписи: сертификатом, закрытым и открытым ключами.
Впервые с паролем владелец ЭП встречается, когда выпускает сертификат ЭП и записывает его в реестр компьютера или на обычную флешку (не токен). Придумать пароль нужно самостоятельно — при записи программа КриптоПро CSP покажет окошко, в которое нужно ввести комбинацию чисел, символов и латинских и русских букв.
Далее этот пароль будет запрашиваться при установке подписи на компьютер, ее копировании и при каждом использовании — подписании документов, работе на электронной торговой площадке или входе в сервисы. Если, конечно, не установить галочку «Запомнить пароль».
Пин-код от токена электронной подписи
Пин-код используется для электронной подписи, которая записана на носитель в виде usb-флешки — на токен. Пин защищает токен, поэтому, если мошенники украдут носитель ЭП, то самой подписью они воспользоваться не смогут.
Впервые владелец ЭП должен ввести пин-код при выпуске подписи — когда ее записывают на токен. Если носитель новый, то нужно ввести «заводское» стандартное значение, например, 12345678 для Рутокена. «Заводское» значение лучше сразу изменить на собственное, чтобы его не смогли подобрать злоумышленники.
После этого пин-код понадобится вводить, чтобы установить сертификат подписи на компьютер, использовать и копировать ЭП, работать с ней за новым компьютером. Чтобы не вводить комбинацию каждый раз, можно нажать галочку «Запомнить пароль». Главное в таком случае самим не забыть последовательность символов.
Как восстановить пароль электронной подписи
Если пароль и пин-код подписи не удается вспомнить, то восстановить его не получится. В этом не поможет даже удостоверяющий центр, выпустивший сертификат, — он не хранит пароли ЭП. Поэтому нужно пытаться вспомнить заветную комбинацию или подобрать ее.
Забыл пароль подписи
Пароль от контейнера ЭП можно вводить неограниченное количество раз. Поэтому можно спокойно подбирать к подписи все знакомые комбинации: важные даты или код из смс, которую при выпуске сертификата присылал удостоверяющий центр. Возможно, именно этот код случайно установили на контейнер в качестве защиты.
Если подобрать пароль не удается, то доступ к сертификату можно вернуть в некоторых случаях. Если раньше пароль сохраняли на компьютере — нажимали галочку «Запомнить», то иногда такой контейнер можно скопировать без ввода пароля. Попытайтесь скопировать папку со всеми файлами подписи на другое устройство или токен. Если в процессе у вас не спросят пароль, то можно продолжать работать с ЭП.
Если не получается ни скопировать подпись, ни вспомнить пароль ЭЦП, то остается только одно — получить новый сертификат ЭП. Для этого нужно отозвать старый в удостоверяющем центре и подать документы и заявку на выпуск нового. На контейнер новой подписи стоит установить пароль, который легко запомнить, но который не угадают мошенники.
Забыл пин-код токена
Восстановить забытый пин-код токена тоже невозможно. Именно из-за этого токен — надежный носитель ЭП: если его украдут мошенники, то пин-код защитит подпись от них.
Однако для владельца ЭП есть два способа, которые помогут подобрать нужную комбинацию.
Решение №1. Заводской пароль.
По умолчанию на новом токене установлен стандартный пин-код от производителя. Можно ввести его, чтобы вернуть доступ к сертификату ЭП. Для разных носителей подойдут разные значения:
Если «заводская» комбинация к токену не подходит, значит ее сменили при записи сертификата. Тогда вернуть доступ к ЭП можно только одним способом — подобрать правильные символы.
Решение №2. Подбор пин-кода и права администратора
На то, чтобы подобрать пин-код к токену, есть десять попыток. После десятого неверного ввода символов заблокируется.
Иногда количество попыток ввода можно увеличить. Для этого нужно зайти на токен в качестве администратора и разблокировать пин-код:
Также, если пин-код администратора известен, то можно сбросить попытки ввода другим способом — через КриптоПро CSP:
После разблокировки счетчик попыток ввода сбросится. Но даже тогда, пока правильную комбинацию к токену не введут, доступ будет закрыт и использовать подпись не получится.
Если вспомнить или изменить нужную комбинацию не удалось, придется получать новый сертификат подписи в УЦ: отозвать старый сертификат и получить новый. Токен можно использовать старый — можете отформатировать носитель, тогда старый пин-код и сертификат удалятся. Отметим, что отформатировать токены марок Рутокен, eToken, JaCarta LT можно без прав администратора. Но для форматирования носителя Jacarta SE нужно знать администраторский пин.
При записи подписи на новый токен советуем поменять стандартный пин-код носителя на собственный. Это, конечно, может привести к тому, что комбинация вновь потеряется. Но лучше получить новый сертификат, чем пострадать от мошенников, которые смогли взломать «заводское» значение на токене и подписали украденной ЭП важные документы.