Как узнать имя контейнера закрытого ключа криптопро
Перейти к содержимому

Как узнать имя контейнера закрытого ключа криптопро

  • автор:

Нахождение привязки контейнера и ключа

Такое бывает, если по каким то причинам, имя контейнера одинаковое для 2 ключей. Необходимо найти этот ключ и удалить привязку и или перекопировать контейнер с новым именем и заново связать сертификат с новым контейнером.

Нахождение привязки контейнера и ключа

Переходим в папку c:\documents and settings\имя пользователя\application data\microsoft\systemcertificates\my\certificates.

С помощью блокнота открываем эти файлы, если с сертификатом связан ключ, то внутри будет наше искомое имя контейнера, к которому сертификат привязан.

Для решения именно моей проблемы, было достаточно удалить этот файл + также удалить запомненные пароли в свойствах КриптоПро.

Как найти закрытый ключ сертификата на компьютере

Сейчас работа любой даже самой маленькой организации практически не возможно без использования ЭЦП (электронной цифровой подписи). Это связанная в первую очередь с цифровизацией экономики. С одной стороны это упрощает ведение бизнеса но с другой прибавляет забот с получение, хранением, настройкой ЭЦП для работы на различных сервисах. ЭЦП можно сделать как на организацию так и на сотрудника. Так же для работы в разных сервисах могут потребоваться ЭЦП от определенных удостоверяющих центров. Поэтому как правило в организации не одна ЭЦП а несколько. В большинстве все они хранятся на одном носители, простой флешке или даже на жестком диске в компьютере. Мало кто покупает Рутокен/eToken, так стоят они не дешево. В общем за несколько лет на подобном носители собирается несколько закрытых контейнеров и при необходимости найти нужны становиться достаточно сложно. Сегодня хочу поделиться одним способ который поможет найти нужный закрытый ключ.

Как найти закрытую часть ключа

И так допустим есть папка в которой хранятся закрытые контейнеры/ключи и сертификаты, и нам потребовалось один из них скопировать. Имена закрытых контейнеров выглядят следующем образом, это набор цифр и букв. Понять где какой закрытый ключ невозможно.

Как найти закрытый ключ

Лично я в таких случаю делаю следующие манипуляции. Открываю КриптоПРО и выбираю пункт «Установить личный сертификат».

Как найти закрытый ключ сертификата на компьютере

Далее выбирает сертификат от которого нужно найти закрытую часть.

Как найти закрытую часть ключа

Для начала проверяю есть он вообще, ставлю галочку «Найти контейнер автоматически» если ключевой контейнер найден, снимаю галочку и жму «Обзор».

как найти закрытый ключ сертификата

В имени закрытой части ключа может отображать ФИО того кому она выданная, но не всегда.

найти закрытый ключ сертификата

Поэтому сверху отмечаем пункт «Уникальные имена», после чего отобразится имена контейнеров которые будут совпадать с именем папки с закрытой частью.

закрытая часть ключа

Остается только по очереди выбирать контейнеры. Если контейнер не подходить Вы увидите соответствующее сообщение.

как подобрать закрытую часть ключа

Пока не будет найден нужный.

Как найти закрытую часть ЭЦП на компьютере

После чего по имени можно будет определить необходимый контейнер с закрытой частью ключа и скопировать его. Вообще лучше ЭЦП каждого пользователя хранить в отдельной папке или флешки.

Как найти закрытый ключ : 2 комментария

А если они не на флешки а в реестре хранятся, оттуда можно как-то досать?

Читаем контейнер закрытого ключа КриптоПро средствами OpenSSL

Речь пойдет о файлах primary.key, masks.key и header.key, которые лежат в директории ххххх.000 на флешке. Данные файлы входят в состав криптоконтейнера закрытого ключа электронной подписи криптопровайдера КриптоПро, формат которого нигде не опубликован. Целью данной статьи является чтение контейнера и преобразование закрытого ключа в формат, который может быть прочитан в библиотеке OpenSSL. Долгое время было распространено ошибочное суждение, что достаточно сделать нечто вида (primary_key XOR masks_key) и мы получим закрытый ключ в чистом (raw) виде, однако забегая вперед, можно утверждать, что в КриптоПро было применено более сложное преобразование, в худшем случае состоящее из более чем 2000 (двух тысяч) операций хеширования.

  • Читает контейнер не напрямую, а через криптопровайдер, поэтому там, где кроме OpenSSL ничего нет, не работает.
  • Если в свойствах ключа не отмечено, что ключ «экспортируемый», то конвертировать его невозможно.
  • В демо версии не формирует файл с ключом, эта возможность присутствует только в платной версии.

Файл primary.key

Содержит 32 байта ключа в формате Asn1. Это только половина ключа, полный ключ получается при делении этого числа по модулю Q на маску. Поле, хранящее модуль Q в библиотеке OpenSSL имеет название order. Маска лежит в файле masks.key:

primary.key

Файл masks.key

Содержит 32 байта маски ключа в формате Asn1, зашифрованного на ключе хранения pwd_key. Далее 12 байт «затравочной» информации для генерации ключа хранения pwd_key, если криптоконтейнер защищен паролем, то пароль также участвует в генерации ключа хранения.

Далее контрольная сумма (имитозащита) 4 байта. Контрольной информацией для простоты мы пользоваться не будем, общий контроль будет осуществляться путем генерации открытого ключа и сравнения первых 8 байт полученного ключа с соответствующим полем из файла header.key:

masks.key

Файл header.key

  • GostR3410_2001_CryptoPro_A_ParamSet — 1.2.643.2.2.35.1
  • GostR3410_2001_CryptoPro_B_ParamSet — 1.2.643.2.2.35.2
  • GostR3410_2001_CryptoPro_C_ParamSet — 1.2.643.2.2.35.3
  • GostR3410_2001_CryptoPro_XchA_ParamSet — 1.2.643.2.2.36.0
  • GostR3410_2001_CryptoPro_XchB_ParamSet — 1.2.643.2.2.36.1

header.key

Читаем закрытый ключ и конвертируем

Основную работу выполняют следующие 3 функции:

1. Создаем ключ хранения исходя из 12-ти байтовой «соли» и пароля.

2. Расшифровываем основной ключ на ключе хранения.

3. Делим ключ с маской на маску.

Но так как в библиотеке OpenSSL операция деления по модулю традиционно отсутствует, пользуемся операцией взятия обратного числа и умножением.

Сборка утилиты конвертирования ключа

Далее сборка исходников описана для Linux версии.

Версию для Windows можно скачать отсюда там же есть сертификаты и закрытый ключ для тестирования, для сборки потребуется бесплатный компилятор Borland C++ 5.5

Компиляция OpenSSL библиотеки

После скачивания и распаковки исходных текстов openssl в целевой директории выполняем команды:

Получаем готовую библиотеку libcrypto.a в текущей директории.
Также потребуются заголовочные файлы из директорий engines/ccgost и include.

Windows admin blog

Полезные команды cmd, powershell, администрирование, фичи и решения проблем на win/winserver

Крипто Про: как узнать пароль контейнера закрытого ключа (сохраненного в реестре)

Если пароль сохраненного в реестре контейнера ЭЦП отличается от стандартного и пользователь его забыл, а вспомнить его нужно (например, при копировании сертификата другому пользователю), то узнать сохраненный пароль можно следующим способом:

1. Открываем cmd

2. Переходим в директорию с программой

3. Смотрим имена доступных контейнеров закрытого ключа ЭЦП:

команда выводит список доступных контейнеров вида: \\.\<имя считывателя>\<имя контейнера>

4. После этого выводим сохраненный пароль для нужного контейнера:

PS: Данный способ подходит для КриптоПро 3.6 и выше. В КриптоПро 3.0 у утилиты csptest отсутствует опция -showsaved.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *