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

Обновлено: 02.07.2024

Наше ООО получило (безвозмездно) от налоговой ЭП ЮЛ на ключевом носителе Рутокен ЭЦП 2.0
у которого в спецификациях (https://www.rutoken.ru/products/catalogue/id_81.html) сказано, что
он "позволяет выполнять криптографические операции таким образом, что закрытая ключевая информация никогда не покидает пределы токена."

1. Как я могу быть уверен, что ключевая пара сформирована самим устройством токена, а не на компьютере сотрудника налоговой (что сразу же переводит ключ в статус скомпрометирован, так как я по умолчанию не доверяю "Леночке между декретами")?

2. На компьютере с успешно установленными драйверами рутокен-а и утилитой КриптоПро CSP (не ФКН) данный ключ успешно эксплуатируется, из чего я делаю вывод, что криптопреобразования проводятся на ПК а не микропроцессором токена, следовательно ключ покидает токен? . Получается какой-то цирк безопасности?

3. Хотелось бы услышать список причин, по которым признак "неизвлекаемости" ключа стал обязательным.

  • Ксения Шаврова
  • Администратор
  • Неактивен

Далее отвечу по пунктам:

1. Как я могу быть уверен, что ключевая пара сформирована самим устройством токена, а не на компьютере сотрудника налоговой (что сразу же переводит ключ в статус скомпрометирован, так как я по умолчанию не доверяю "Леночке между декретами")?

2. На компьютере с успешно установленными драйверами рутокен-а и утилитой КриптоПро CSP (не ФКН) данный ключ успешно эксплуатируется, из чего я делаю вывод, что криптопреобразования проводятся на ПК а не микропроцессором токена, следовательно ключ покидает токен? . Получается какой-то цирк безопасности?

3. Хотелось бы услышать список причин, по которым признак "неизвлекаемости" ключа стал обязательным.

Требования к неизвлекаемости сейчас нет.
Согласно требованиям УЦ ФНС есть требования к неэкспортируемости для повышения безопасности.
Неэкспортируемые закрытые ключи обладают большей защищенностью, т.к. однажды записанный на ключевой носитель закрытый ключ не подлежит копированию при помощи штатных возможностей средства криптографической защиты информации. Неэкспортируемые закрытые ключи являются более надежным вариантом использования, поскольку получение доступа к такому закрытому ключу требует применения специальных средств и техники.

Когда нужно переносить сертификаты в другое место?

И так давайте рассмотрим по каким причинам у вас может появиться необходимость в копировании ваших ЭЦП в другое место.

  1. На текущем физическом компьютере начинает умирать жесткий диск или SSD накопитель (Как проверить жизненные показатели жесткого диска), очень частая история и жизненная, когда люди теряли все свои данные, из-за банальной жадности в покупке нового оборудования и элементарного незнания принципов резервного копирования.
  2. У вас производится модернизация оборудования, его улучшение и вам нужно перенести все сертификаты с закрытыми ключами на другую систему
  3. Вы создали отдельный сервер, в виде виртуальной машины, где будут находится все ваши сертификаты и с ними смогут работать все необходимые сотрудники, терминал для бухгалтерии. Простой пример СБИС, и когда у вас 10-20 организаций.

Как видите предпосылок и вариантов переноса сертификатов из реестра на другой компьютер, предостаточно.

Какие есть варианты по копированию контейнеров закрытых ключей?

  • Если мы создаем единый терминал (Виртуальную машину), на которой будут коллективно работать пользователи, то можно произвести конвертирование физической тачки в виртуальную машину
  • Если будет просто замена жесткого диска, то можно произвести его клонирование или перенос системы на SSD с помощью специальных утилит
  • Можно воспользоваться утилитой КриптоПРО
  • Воспользоваться экспортом из реестра Windows.

Перенос сертификатов в виде пошаговой инструкции

Первые два пункта я описывать тут не стану, так как я уже это подробно рассказывал, посмотрите по ссылкам. Я расскажу, об остальных методах и начнем мы с классического КриптоПРО.

Данный метод подойдет для тех ситуаций, когда у вас один или 2 сертификата (ЭЦП). Если же их несколько десятков, а это не такая уж и редкость, то такой путь вам не подходит, и там придется выбирать 4-й метод.

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

Копирование закрытого ключа из КриптоПро

Это самый простой способ, и будет актуальным при небольшом количестве контейнеров с закрытыми ключами. Чтобы выполнить перенос сертификатов из реестра, откройте ваш КриптоПРО, вкладка "Сервис", нажимаем кнопку "Сервис", далее через кнопку "Обзор", откройте "Выбор ключевого контейнера" и укажите, какой сертификат вы будите переносить. В моем примере это контейнер "Копия сертификата в реестре (Семин Иван)".

перенос сертификатов из реестра-01

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

перенос сертификатов из реестра-02

У вас откроется окно с выбором носителей, вы можете выбрать либо токен, либо флешку для переноса на другое место. У меня это внешний жесткий диск Z:\.

перенос сертификатов из реестра-03

Задаем обязательно пароль, с точки зрения безопасности, так как файлы в таком виде просто скомпрометировать.

перенос сертификатов из реестра-04

Все, на выходе я получил папку со случайным названием и набором ключей в формате key.

перенос сертификатов из реестра-05

Если вы пытаетесь копировать сертификат с токена, то в ряде случаев у вас может появиться ошибка: Ошибка копирования контейнера. У вас нет разрешений на экспорт ключа, потому что при создании ключа не был установлен соответствующий флаг. Ошибка 0x8009000B (-2146893813) Ключ не может быть использован в указанном состоянии.

Ошибка копирования контейнера

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

Если вы получили ошибку копирования контейнера. У вас нет разрешений на экспорт ключа, то метод с КРиптоПРО вам не поможет

Перенос сертификатов из реестра без КриптоПРО

Существуют методы экспортировать закрытый ключ и без изспользования утилиты КриптоПРО. Представим себе ситуацию, что у вас на него кончилась лицензия и вы не успели ее купить. Вам нужно сдать отчетность в СБИС. Вы развернули CryptoPRO на другом компьютере, так как он позволяет 3 месяца бесплатного использования, осталось для СБИС выполнить перенос сертификатов, которые у вас в реестре Windows.

У нас два варианта:

  • Использование оснастки mmc-Сертификаты пользователя.
  • Использование Internet Explore

Как открыть оснастку сертификаты я уже подробно рассказывал, посмотрите. Откройте там контейнер "Личное - Сертификаты". Если у вас в контейнере не один сертификат с одинаковым именем, такое может быть, то откройте сертификат в оснастке mmc и в КриптоПРО и сравните серийные номера сертификата.

перенос сертификатов-01

В Internet Explore, откройте "Свойства браузера - Содержание - Сертификаты"

Экспорт сертификата из реестра Windows

Теперь нам необходимо его экспортировать, в оснастке "Сертификаты", через правый клик, это можно сделать, в Internet Explorer, сразу видно кнопку, экспорт.

Экспорт закрытого контейнера из реестра

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

перенос сертификатов

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

сбис перенос сертификата

Следующим этапом в мастере экспорта сертификатов, вам необходимо выбрать формат выгрузки, это будет PFX архив.

контур перенос сертификатов

Далее вы задаете обязательно пароль и указываете имя и место, где будите сохранять ваш переносимый контейнер с зарытым ключом в формате pfx.

сбис перенос сертификата-2

Мастер экспорта сертификатов, выведет вам сводные данные, нажимаем "Готово".

перенос сертификата на рутокен-01

Отрываем локацию, куда вы его выгрузили, и найдите свой pfx архив.

перенос сертификата на рутокен-02

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

перенос сертификата на рутокен-03

Выберите формат файла "X.509 (.CER) в кодировке DEP", задайте ему имя и место сохранения. На выходе у вас появятся два файла.

перенос сертификата на рутокен-04

Одни открытый ключ в формате cer и закрытый ключ в формате pfx. Этого набора вам будет достаточно, чтобы перенести сертификаты СБИС, Контура и остальных программ на другой компьютер.

перенос сертификата на рутокен-05

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

Установка перенесенного сертификата-01

На втором шаге проверяем импортируемый сертификат.

Установка перенесенного сертификата-02

Указываем пароль, который задавали при выгрузке.

Установка перенесенного сертификата-03

Оставляем автоматический выбор хранилища на основе типа сертификатов.

Установка перенесенного сертификата-04

Готово. Со вторым файлом то же самое. После чего у вас будут перенесены нужные вам ключи и сам сертификат, можно работать.

Установка перенесенного сертификата-05

Массовый перенос ключей и сертификатов CryptoPro на другой компьютер

Выше описанные методы хороши, когда у вас один или 5 ключиков в реестре, а как быть если их десятки. Помню лет 5 назад, когда я еще был младшим администратором, то я очень часто устанавливал электронные цифровые подписи главбуху, так как она работала в СБИС++ и сдавала там постоянно отчетность по огромному количеству организаций, по типу рога и копыта. Держать кучу токенов было не вариант, и для таких вещей у нее все хранилось в реестре и копия сертификатов была на флешке в сейфе. Флешку потом потеряли, встал вопрос сделать резервную копию всего и плюс обновить систему, в виду нового компьютера, на операционной системе Windows 8.1. ЭЦП было штук 50, а так как я ценю свое время, то и искал методы, выполнить это быстрее, к счастью я его нашел.

Заключался метод переноса сертификатов из реестра, в выгрузке веток и подмене SID значения, но обо всем по порядку. О том, как посмотреть SID пользователя и что это такое я рассказывал.

Открываете командную строку cmd и вводите команду:

криптопро перенос сертификатов-01

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Crypto Pro\Settings\Users\Номер вашего SID, который мы узнали\Keys

криптопро перенос сертификатов-02

В контейнере Keys, вы найдете все ваши закрытые ключи от ЭЦП. С правой стороны вы увидите файлы:
* header.key
* masks.key
* masks2.key
* name.key
* primary.key
* primary2.key

Щелкаем правым кликом по контейнеру Keys и экспортируем его.

криптопро перенос сертификатов-03

Сохраняем нашу ветку реестра с контейнерами закрытых ключей. Далее нам нужно скопировать открытые ключи, которые лежат по пути:

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

перенос сертификатов-05

Как только вы поместили на новом компьютере папку Key, вы можете перенести реестровую выгрузку. Сохраненный файл в формате reg, вы должны открыть в любом текстовом редакторе.

перенос сертификатов-01

Как я показывал выше, определите SID нового пользователя, скопируйте его полностью и замените им значение в файле reg, я отметил это стрелками.

перенос сертификатов-02

Все сохраняйте файл и запускайте его, у вас будет начат перенос сертификатов (закрытых ключей), подтверждаем действие.

перенос сертификатов-03

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

Мне нужно экспортировать закрытый ключ из магазина Windows. Что делать, если ключ отмечен как неэкспортируемый? Я знаю, что это возможно, программа jailbreak может экспортировать этот ключ.

Для экспорта ключа я использую Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair() , который экспортирует ключ из (RSACryptoServiceProvider)cryptoProv.ExportParameters(true) . Экспортированный ключ, который я использую в Org.BouncyCastle.Cms.CmsSignedDataGenerator для подписи CMS.

ОТВЕТЫ

Ответ 1

Вы правы, ни один API вообще не знает, что я знаю для экспорта PrivateKey, помеченного как неэкспортируемый. Но если вы исправляете (в памяти) обычные API, вы можете использовать обычный способ экспорта:)

Существует новая версия mimikatz, которая также поддерживает экспорт CNG (Windows Vista/7/2008. )

Запустите его и введите в командной строке следующие команды:

  1. privilege::debug (если у вас уже нет или не только CryptoApi)
  2. crypto::patchcng (nt 6) и/или crypto::patchcapi (nt 5 и 6)
  3. crypto::exportCertificates и/или crypto::exportCertificates CERT_SYSTEM_STORE_LOCAL_MACHINE

.pfx файлы защищены паролем "mimikatz"

Ответ 2

Jailbreak

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

Ответ 3

Gentil Kiwi ответ правильный. Он разработал этот инструмент mimikatz, который может извлекать неэкспортируемые закрытые ключи.

Однако его инструкции устарели. Вам нужно:

Запустите cmd с правами администратора на том же компьютере, на котором был запрошен сертификат

Перейдите в каталог bin mimikatz (версия для Win32 или x64)

Следуйте инструкциям wiki, а файл .pfx(защищенный паролем mimikatz) будет помещен в ту же папку mimikatz bin

    example.domain.local
    Key Container: example.domain.local
    Поставщик: поставщик программного обеспечения для Microsoft Key Key

Ответ 4

Это работало для меня на Windows Server 2012 - мне нужно было экспортировать неэкспортируемый сертификат для установки другого сервера ADFS, и это сделало трюк. Не забудьте использовать инструкции джейлбрейка выше i.e.:

Ответ 5

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


Как это могло случиться? “Нельзя вывозить! — сказал он. Он не знал, что никогда не должен говорить Так вот с чего начинается эта история!

Прежде чем сделать невозможное вам нужно выполнить несколько предварительных условий:

2. Если вы хотите экспортировать сертификат удаленно. Вам необходимо запустить службу WinRM (Windows Remote Management). Это может быть быстро достигнуто с помощью следующей команды: winrm qc

Первая проблема, с которой мы сталкиваемся, — это сам сертификат. Помните мой простой лозунг из предыдущих эпизодов. Касающийся памяти (Это то. Что мы также сделаем практическим в этом эпизоде.

Давайте начнем! Ниже вы можете увидеть сертификат. Чей закрытый ключ был явно сделан не экспортируемым (это флажок в шаблоне сертификата):


Рисунок 1: Закрытый ключ не экспортируется – результат

Есть много способов сделать ключ экспортируемым. Но давайте воспользуемся самым дерзким. Который должен сделать вас более жизнерадостным. Так как это также метод удаленного захвата закрытого ключа ;). Фактор

Несмотря на то, что ключ кажется не экспортируемым. Мы можем экспортировать сертификат с помощью Mimikatz! Запустите Mimikatz и используйте эти команды:



Сертификат будет экспортирован в каталог mimikatz. Где ясно, мы можем видеть сертификат, который мы смотрели (синим цветом):


Рисунок 2: Сертификаты с закрытым ключом

Теперь мы можем импортировать следующий сертификат туда. Куда вы хотите с паролем: mimikatz


Рисунок 3: Импорт сертификата с закрытым ключом

Если вы импортируете новый сертификат – и если вы хотите избежать тех же действий с получением закрытого ключа снова и снова – не забудьте выбрать опцию: Отметьте этот ключ как экспортируемый. Кроме того, вместо импорта сертификата таким образом можно использовать инструмент openssl. Мы переместили сертификат в нашу папку инструментов, так как это место. Где у нас есть инструмент openssl.


Рисунок 4: Импорт сертификата с закрытым ключом

Как видите. Вся эта деятельность очень проста. Мы можем ограничиться mimikatz. Импортировать сертификат с закрытым ключом. А затем пометить его как экспортируемый. Следующее, что вы можете сделать. — это регулярно экспортировать закрытый ключ через консоль диспетчера сертификатов и снова экспортировать его с вашим секретным паролем вместо пароля

Читайте также: