Как сделать копию электронного ключа usb

Содержание

Извлечение ключа из токена с неизвлекаемым ключом

Довольно часто при оформлении сертификатов ключей электронной подписи можно наблюдать навязчивый пиар токенов с неизвлекаемым ключом. Продавцы из удостоверяющих центров уверяют, что, купив у них СКЗИ КриптоПРО CSP и токен с неизвлекаемым ключом (Рутокен ЭЦП или JaCarta ГОСТ), мы получим сертифицированные СКЗИ, обеспечивающие 100%-ную защиту от кражи ключей с токена. Но так ли это на самом деле? Для ответа на этот вопрос проведем простой эксперимент…

Инструкция по копированию электронной подписи на съемный носитель или на другой компьютер

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

Выполнить копирование сертификата можно через программу «Подпись Про» (либо модуль «Удостоверяющий центр» программы «Полигон Про») или через программу КриптоПро CSP.

AntiHASP: эмулируем ключ аппаратной защиты HASP

В этой статье описаны способы обхода аппаратных систем защиты. В качестве примера рассмотрена технология HASP (Hardware Against Software Piracy), разработанная компанией Aladdin Knowledge Systems Ltd. В прошлом данная технология являлась одной из самых популярных аппаратных систем защиты ПО.

Мощью аппаратной защиты HASP пользуются многие серьезные разработчики софта, которые не хотят, чтобы их продукт несанкционированно распространялся. Хаспом, например, защищаются пакеты “1С.Бухгалтерия” или “1С.Предприятие”, без которых не может прожить ни одно более или менее организованное дело. Популярный юридический справочник “КонсультантПлюс” также защищает доступ к данным с помощью электронных ключиков. Чтобы воспользоваться вышеупомянутым или другим не менее дорогостоящим софтом, не платя никому ни копейки, недостаточно просто полазить по Сети в поисках txt’шника с ключиками. Однако хакер всегда разберется, что делать с защитой, пусть и аппаратной. И паяльник ему для этого не понадобится.

Зачем копируют сертификаты ЭЦП на другой компьютер или флешку

Для удобства пользователей электронную цифровую подпись записывают на съемные носители (диск, флешка и т. п.) или компьютер. Вот как пользоваться ЭПЦ с флешки, токена или другого носителя:

  1. Записать на накопитель закрытый ключ.
  2. Сгенерировать на носителе открытый ключ.
  3. Задать пароль (для токенов паролем является ПИН-код).
  4. Установить ключевой контейнер на пользовательский компьютер.
  5. Добавить цифровую подпись на ПК и подписывать документы. Действие выполняется через файл сертификата в разделе «Защита документа».

Электронная подпись одновременно находится и на флеш-накопителе, на котором ее записали, и на компьютере — в той директории, куда ее установил пользователь. После установки и записи ЭП пользователь автоматически подписывает необходимые документы цифровым шифром. Но иногда требуется перенос ключей и сертификатов электронной подписи. Пользователи производят копирование ЭПЦ с флешки на флешку в следующих случаях:

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

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

Конфигурация тестового стенда

  1. ОС MS Windows 7 SP1
  2. СКЗИ КриптоПРО CSP 3.9.8423
  3. Драйверы Рутокен для Windows (x86 и x64). Версия: v.4.1.0.0 от 20.06.2016, WHQL-certified
  4. Единый Клиент JaCarta и JaCarta SecurLogon. Версия 2.9.0 сборка 1531
  5. КриптоАРМ Стандарт Плюс 5. Версия 5.2.0.8847.
  1. Рутокен ЭЦП. Версия 19.02.14.00 (02)
  2. JaCarta ГОСТ. Номер модели JC001-2.F09 v2.1

1.1. Копирование подписи через “Подпись Про” / модуль “Удостоверяющий центр”

1) На ленте на вкладке “Главная” нажмите кнопку “Резервное копирование”.

01_1.png

2) Выберите необходимый контейнер и введите пароль (если он был установлен).

Примечание: если установлена галочка «По сертификату», поиск осуществляется по ФИО владельца или наименованию организации.

3) Укажите имя и пароль нового контейнера и нажмите “ОК”.

02_1.png

4) Запустится программа «КриптоПро CSP», следуя подсказкам, закончите копирование.

Взглянем

Утрируя, можно сказать, что HASP состоит из двух частей: аппаратной и программной. Аппаратная часть — это электронный ключик в виде USB-брелка, PCMCIA-карты, LTP-девайса или вообще внутренней PCI-карты. Установленный софт будет работать только на той машине, в которую воткнут электронный ключ. Собственно, неплохо было бы отучить софт от такой неприятной для кошелька привычки.

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

Какие есть способы копирования

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

  1. Через инструменты Windows и мастер экспорта сертификатов. Этот способ подразумевает экспортирование из реестра Windows.
  2. Через инструменты «КриптоПро CSP». Механизм подходит для копирования одного или двух ключей — для переноса каждого сертификата требуется отдельная операция.
  3. Через массовое копирование. Переносятся все выбранные реестровые и файловые записи. Перенос осуществляется вручную или через специальные утилиты (действуют не для всех типов ключей).

Массовое копирование

  1. Скачайте и запустите утилиту. Дождитесь загрузки всего списка контейнеров/сертификатов и отметьте нужные.
  2. Выберите меню «Массовые действия» и нажмите на кнопку «Копирование контейнеров».
  3. Выберите носитель для хранения копии контейнера и нажмите «ОК». При копировании в реестр можно выбрать пункт «Копировать к ключевой контейнер компьютера», тогда после копирования контейнер будет доступен всем пользователям данного компьютера.
  4. После копирования нажмите внизу слева кнопку «Обновить».

Если хотите работать со скопированными контейнерами — необходимо установить сертификаты.

На какие носители можно записать электронную подпись

Сертификат электронной подписи можно записать:

  • в память компьютера: в реестр или на жесткий диск;
  • токен;
  • флешку;
  • съемный жесткий диск.

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

Некоторые типы сертификатов можно хранить только на токене. Например, записать на флешку нельзя сертификаты для работы с Федеральной таможенной службой или для системы для учета алкогольной продукции ЕГАИС ФСРАР.

Механизм системы защиты

Сам брелок нас почти не интересует, в отличие от ПО в его комплекте. Для нас наибольший интерес представляет модуль hardlock.sys. Не углубляясь в подробности, отмечу, что этот драйвер отвечает за взаимодействие с аппаратным ключом. Он имеет два объекта устройства, один из которых обладает символьным именем DeviceFNT0. Используя этот объект, защищенное приложение посредством диспетчера ввода-вывода проверяет лицензию на использование данного ПО.

Главным недостатком такой системы защиты является возможность перехвата вызовов диспетчера ввода-вывода и эмулирования аппаратного ключа. Существует также вариант разработки драйвера виртуального ключа, но это гораздо более сложная техническая задача, нежели перехват вызовов.
Как тебе известно, модель драйвера описывается в структуре DRIVER_OBJECT при загрузке модуля. Она хранит массив обработчиков сообщений. Причем никто не мешает переписать эти адреса и получить управление, выполнив наш код. Таким образом, можно перехватывать и подменять IRP-пакеты, подставляя лицензионные данные. Другими словами, имея дамп ключа защиты, можно передать его программе, проверяющей верность лицензионных данных!

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

Копирование с помощью КриптоПро CSP

Чтобы скопировать сертификат:

  1. Выберите «Пуск» → «Панель управления» →«КриптоПро CSP». Перейдите на вкладку «Сервис» и нажмите на кнопку «Скопировать».
  2. В окне «Копирование контейнера закрытого ключа» нажмите на кнопку «Обзор».
  3. Выберите контейнер, который необходимо скопировать, и нажмите на кнопку «ОК».
  4. Нажмите «Далее». Если вы копируете с Рутокена, то появится окно ввода, в котором укажите pin-код. Если вы не меняли pin-код на носителе, стандартный pin-код — 12345678.
  5. Придумайте и укажите имя для нового контейнера. В названии контейнера допускается русская раскладка и пробелы.
  6. Нажмите «Готово».
  7. Выберите носитель, на который будет помещен новый контейнер.
  8. На новый контейнер будет предложено установить пароль. Рекомендуем установить такой пароль, чтобы было легко его запомнить, но посторонние не могли его угадать или подобрать.
    Если вы не хотите устанавливать пароль, можно оставить поле пустым и нажать «ОК».
    Не храните пароль/pin-код в местах, к которым имеют доступ посторонние. В случае утери пароля/pin-кода использование контейнера станет невозможным.

    Если вы копируете контейнер на носитель ruToken, сообщение будет звучать иначе. В окне ввода укажите pin-код. Если вы не меняли pin-код на носителе, стандартный pin-код — 12345678.

После копирования система вернется на вкладку « Сервис » КриптоПро CSP. Копирование завершено. Если вы планируете использовать для работы в сервисе новый ключевой контейнер, установите его через Крипто Про .

Копирование с помощью «КриптоПро CSP»

Утилиты «КриптоПро» позволяют извлечь закрытый контейнер и перенести его и с флешки на флешку, и с компьютера на другой компьютер при помощи съемного носителя.

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

Шаг 1. Заходим в «Пуск», затем в панель управления и переходим в «КриптоПро». Нам понадобится раздел «Сервис».

Шаг 2. Выбираем действие «Скопировать контейнер».

Копирование контейнера

Шаг 3. В открывшемся окне заполняем имя ключевого контейнера (находим в списке реестра) и криптопровайдер (CSP) для поиска контейнера.

Шаг 4. Система потребует ввести пароль к закрытому ключу — вводим. Переходим в блок копирования контейнера.

Вводим имя нового ключевого контейнера. Определяем положение хранилища — «Пользователь» или «Компьютер».

Шаг 5. Выбираем носитель.

Выбор носителя ключа

Вводим новый пароль (или ПИН-код для токена), подтверждаем и запоминаем его. Готово!

Проведение тестирования

Для этого с помощью КриптоАРМ создадим в реестре контейнер закрытого ключа test-key-reestr, содержащий самоподписанный сертификат (CN=test)









С помощью штатных средств СКЗИ КриптоПРО CSP (Пуск–>Панель управления–>КриптоПро CSP) скопируем ключевой контейнер test-key-reestr на ключевые носители Рутокен ЭЦП и JaCarta ГОСТ. Ключевым контейнерам на ключевых носителях присвоим имена test-key-rutoken и test-key-jacarta соответственно.
Описание приведено применительно к JaCarta ГОСТ (для Рутокен ЭЦП действия аналогичны):





Таким образом получили рабочие ключевые документы на JaCarta ГОСТ (контейнер test-key-jacarta) и Рутокен ЭЦП (контейнер test-key-rutoken).
Попробуем скопировать ключевые контейнеры test-key-rutoken и test-key-jacarta обратно в реестр.
Описание приведено для JaCarta ГОСТ (для Рутокен ЭЦП действия аналогичны).







Как мы видим, ключевая информация успешно скопирована или, другим языком, извлечена из токенов с неизвлекаемым ключом. Получается, что производители токенов и СКЗИ врут? На самом деле нет, и ситуация сложнее, чем кажется на первый взгляд. Исследуем матчасть по токенам.

2. Установка подписи

Скопированную подпись необходимо установить. Сделать это можно через программу “Подпись Про” (либо модуль “Удостоверяющий центр” программы “Полигон Про”) или через программу КриптоПро CSP.

Какой должен быть объем у флешки для электронной подписи

Электронная подпись «весит» очень мало — около четырех килобайт (Кб). Поэтому для хранения сертификата подойдет флешка с любым объемом памяти.

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

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

Перехват и эмуляция

Как уже отмечалось, идея перехвата состоит в перезаписи обработчиков IRP-пакетов. Для этого необходимо иметь возможность изменять поля структуры DRIVER_OBJECT. К счастью, существует функция IoGetDevicePointer, которая возвращает указатель на объект вершины стека именованных устройств и указатель на соответствующий файловый объект. Вот фрагмент кода функции, устанавливающей ловушку:

NTSTATUS HookDevice(LPWSTR lpDevice)

UNICODE_STRING DeviceName;
PDEVICE_OBJECT DeviceObject;
PFILE_OBJECT FileObject;

RtlInitUnicodeString(&DeviceName, lpDevice);
IoGetDeviceObjectPointer(&DeviceName, 1u, &FileObject, &DeviceObject);

Получив указатель на структуру DEVICE_OBJECT, имеем указатель на DRIVER_OBJECT. Теперь заменим адреса обработчиков и функций выгрузки драйвера на свои:

NTSTATUS HookDevice(LPWSTR lpDevice)

gDriverObject = DeviceObject-> DriverObject;

gDeviceControl = gDriverObject-> MajorFunction[IRP_MJ_DEVICE_CONTROL];
gDriverObject-> MajorFunction[IRP_MJ_DEVICE_CONTROL] = HookDispatch;

gInternalDeviceControl = gDriverObject-> MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL];
gDriverObject-> MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = HookDispatch;

gDriverUnload = gDriverObject->DriverUnload;
gDriverObject->DriverUnload = HookUnload;

В последней строчке вызывается функция ObfDereferenceObject, которая уменьшает количество ссылок на файловый объект. Это необходимо делать для корректной выгрузки драйвера, чтобы не было утечки ресурсов и аналогичных ошибок.

Так как указатель на объект драйвера защиты сохранeн, то чтобы снять ловушку, нужно просто восстановить прежние обработчики IRP-пакетов:

gDriverObject-> MajorFunction[IRP_MJ_DEVICE_CONTROL] = gDeviceControl;
gDriverObject-> MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = gInternalDeviceControl;
gDriverObject->DriverUnload = gDriverUnload;

Конечно, надо добавить соответствующие проверки на валидность указателей и прочее.

Теперь необходимо реализовать правильную выгрузку драйверов. Так как система защиты по каким-либо причинам может закончить свою работу раньше нашего драйвера, то чтобы избежать краха системы из-за неверных указателей, обработаем это событие в функции HookUnload:

void HookUnload(PDRIVER_OBJECT DrvObj)

Здесь происходит восстановление полей структуры DRIVER_OBJECT, и передаeтся управление на оригинальный код выгрузки драйвера перехваченного устройства.

Аналогично поступаем, если наш драйвер завершает работу раньше системы защиты. Только нужно высвободить захваченные ресурсы и не вызывать сохранeнный gHookUnload.


Принцип работы эмулятора

Экспорт PFX-файла и его установка

Экспорт сертификата с закрытым ключом:

  1. Откройте окно «Сертификаты» одним из способов:
    • «Пуск» → «Все программы» → «КриптоПро» → «Сертификаты».
    • «Internet Explorer» → «Сервис» → «Свойства обозревателя» → вкладка «Содержание» → «Сертификаты.
  2. Откройте сертификат, который нужно скопировать. На вкладке «Состав» нажмите «Копировать в файл».
  3. В «Мастере экспорта сертификатов» нажмите «Далее» и выберите пункт «Да, экспортировать закрытый ключ». Нажмите «Далее».
  4. Выберите пункты «Включить по возможности все сертификаты в путь сертификации» и «Экспортировать все расширенные свойства», остальные пункты должны быть не выбраны. Нажмите «Далее».
  5. Обязательно задайте пароль для экспортируемого файла. Данный пароль не рекомендуется сообщать по электронной почте. Нажмите «Далее».
  6. Укажите имя файла, выберите путь, куда его сохранить, и нажмите «Далее».
  7. Нажмите «Готово».
  8. Экспортируйте открытый ключ сертификата (см. Экспорт открытого ключа).
  9. Заархивируйте полученные файлы форматов *.pfx и *.cer.

Установка сертификата с закрытым ключом

  1. Откройте *.pfx файл. Запустится «Мастер импорта сертификатов».
  2. Укажите хранилище «Текущий пользователь» и нажмите «Далее», затем снова «Далее».
  3. Введите пароль, который указывали при экспорте и выберите пункт «Пометить этот ключ как экспортируемый…», иначе контейнер нельзя будет скопировать в дальнейшем. Нажмите «Далее».
  4. Выберите пункт «Поместить все сертификаты в следующее хранилище», нажмите на кнопку «Обзор», выберите «Личное» и нажмите на кнопку «ОК». Нажмите «Далее», а затем «Готово».
  5. Выберите носитель, на который хотите сохранить контейнер. При необходимости задайте пароль.
  6. Для корректной работы сертификата со встроенной лицензией переустановите сертификат в контейнер (см. Как установить личный сертификат в КриптоПро).

Матчасть

То, что на рынке принято называть токеном с неизвлекаемым ключом, правильно называется функциональным ключевым носителем (ФКН) (доп. инфо).

Главным отличием ФКН от обычных токенов (Рутокен S, JaCarta PKI, …) в том, что при выполнении криптографических преобразований (например, формирование электронной подписи) закрытый ключ не покидает устройство. В то время как при использовании обычных токенов закрытый ключ копируется с токена в память комптьютера.

Использование ФКН требует особой организации взаимодействия между прикладным криптографическим ПО и библиотекой СКЗИ (криптопровайдером или, по-другому, CSP).

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

Одновременное копирование нескольких ключей

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

Пошаговый алгоритм, как ЭПЦ перенести с флешки на компьютер (для нескольких ключей).

Шаг 1. Определите Security Identifier или SID (идентификатор безопасности) вашего рабочего ПК. Введите такую команду: wmic useraccount where name=’(имя пользователя)’ get sid. Запомните код.

Шаг 2. Скопируйте контейнеры в файл. Зайдите в реестр и скопируйте действующую ветку: HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeCrypto ProSettingsUsersS-1… (подставьте SID)Keys

Шаг 3. Найдите и экспортируйте ключевую папку — Keys.

Одновременное копирование нескольких ключей ЭЦП

Шаг 4. Вы скопировали ключевой контейнер, теперь переносим сертификаты ЭЦП. На диске C есть такая директория: C:Users polzovatelAppDataRoamingMicrosoftSystemCertificatesMy. Скопируйте ее.

Шаг 5. Перенесите на новый компьютер скопированные ветку (замените на SID нового ПК) и директорию с сертификатами (замените аналогичную директорию на новом ПК). Для корректного переноса ветки скопируйте первоначальную строку в блокнот или любой текстовый редактор и поменяйте SID. Откройте файл с расширением .reg, загрузите новые сведения в реестровую запись. Теперь копируйте сертификаты на новый ПК. Процедура завершена.

В 2009 году закончила бакалавриат экономического факультета ЮФУ по специальности экономическая теория. В 2011 — магистратуру по направлению «Экономическая теория», защитила магистерскую диссертацию.

Копирование контейнера из реестра другого пользователя

  1. Найдите ветку реестра с нужным контейнером. Ветки реестра, в которых может быть контейнер закрытого ключа:
    • для 32-битной ОС: HKEY_LOCAL_MACHINESOFTWARECrypto ProSettingsUsers*идентификатор пользователя*Keys*Название контейнера*;
    • для 64-битной ОС: HKEY_LOCAL_MACHINESOFTWAREWow6432NodeCrypto ProSettingsUSERS*идентификатор пользователя*Keys*Название контейнера*.
  2. После того, как нашли нужную ветку, нажмите правой кнопкой мыши на ветку с контейнером и выберите «Экспортировать».
  3. Введите имя файла и нажмите на кнопку «Сохранить».
  4. Скопируйте файл на тот компьютер, где будете работать с электронной подписью обычными средствами Windows.
  5. Пройдите диагностику на сайте https://help.kontur.ru .
  6. Как диагностика закончится, нажмите на ссылку «Показать результаты».
  7. В списке результатов выберите «Информация о Windows».
  8. Скопируйте SID текущего пользователя.
  9. Откройте экспортированный файл реестра с помощью «Блокнота».
  10. Замените SID пользователя на скопированный ранее.
  11. Если ветка реестра экспортируется из 32-битной ОС в 64-битную ОС, добавьте в путь ветки реестра параметр Wow6432Node как на картинке.
  12. Сохраните изменения и закройте файл.
  13. Снова нажмите на файл правой кнопкой мыши и выберите «Слияние». В появившемся окне нажмите «Да».
  14. Появится сообщение о том, что данные успешно внесены в реестр. Нажмите «ОК».
  15. Если появляется сообщение «Ошибка при доступе к реестру», еще раз проверьте все пути в файле на корректность. Также проверьте, чтобы в пути не было лишних пробелов, знаков.
  16. После того, как данные будут внесены в реестр, вручную установите сертификат (см. Как установить личный сертификат).

По-новому взглянем на наш тестовый стенд

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

В последней строке указана фраза «Поддержка КриптоПРО ФКН: Нет», а это значит, что на токене нет апплета, с которым умеет работать СКЗИ КриптоПРО CSP. Таким образом, реализация технологии ФКН с использованием СКЗИ и токенов, описанных в конфигурации тестового стенда, невозможна.

Аналогичная ситуация и с JaCarta ГОСТ. Более того, СКЗИ КриптоПРО CSP, по крайней мере та версия, которая использовалась в тестовом стенде, использует данные ключевые носители как «обычные токены», которые, в свою очередь, являются просто носителями ключа.

Это утверждение очень просто подтвердить. Для этого надо поставить СКЗИ КриптоПРО CSP на чистую машину без драйверов от токенов и подключить токен JaCarta ГОСТ. ОС Windows 7 обнаружит токен JaCarta ГОСТ как «Устройство чтения смарт-карт Microsoft Usbccid (WUDF)». теперь можно попробовать создать ключ на токене и скопировать его в реестр компьютера. Весь функционал СКЗИ успешно отработает.

Установка подписи через “КриптоПро CSP”

Для установки скопированной подписи на компьютере через “КриптоПро CSP” выполните уже знакомые действия.

1) Запустите программу КриптоПро CSP (меню “Пуск” → “Все программы” → “КРИПТО-ПРО” → “КриптоПро CSP”).

2) Перейдите на вкладку “Сервис” и нажмите кнопку “Установить личный сертификат” (рисунок 21).

21.png

Рисунок 21 – Вкладка “Сервис”.

3) В открывшемся окне нажмите на кнопку “Обзор”, выберите сертификат, который был скопирован на съемный носитель, нажмите на кнопки “Открыть” и “Далее” (рисунок 22).

22.png

Рисунок 22 – Выбор файла сертификата.

4) В окне “Сертификат для установки” отобразятся основные сведения, содержащиеся в устанавливаемом сертификате. Нажмите “Далее” (рисунок 23).

23.png

Рисунок 23 – Просмотр сведений сертификата.

5) В окне “Контейнер закрытого ключа” укажите контейнер закрытого ключа, который соответствует выбранному сертификату. Для автоматического поиска контейнера, соответствующего устанавливаемому сертификату, можно установить галочку в поле “Найти контейнер автоматически” (рисунок 24).

24.png

Рисунок 24 – Выбор контейнера закрытого ключа.

6) В окне “Хранилище сертификатов” удостоверьтесь, что в поле “Имя хранилища сертификатов” указано “Личное”, а в поле “Установить сертификат в контейнер” стоит галочка, после чего нажмите “Далее” (рисунок 25).

25.png

Рисунок 25 – Хранилище сертификатов.

7) В окне “Завершение работы мастера установки личного сертификата” убедитесь, что выбраны правильные параметры и нажмите кнопку “Готово” для выполнения установки сертификата (рисунок 26).

Как пользоваться электронной подписью с флешки и токена

Порядок подписания документов не зависит от того, на каком носителе хранится ЭП: на токене или флешке.

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

От этого зависит, с помощью какой программы, плагина или сервиса нужно подписать документ:

    используют, чтобы создать открепленную ЭП. Это бесплатный веб-сервис, который работает с сертификатами любых удостоверяющих центров (УЦ). используют для создания открепленной или совмещенной подписи. Во время пробного периода работать с программой можно бесплатно. После его окончания нужно купить лицензию на программу, сделать это можно в любом сервисном центре. Если вы хотите подписать документ базовой электронной подписью — без проверки времени подписания и статуса сертификата ЭП — программу можно использовать бесплатно. используют, чтобы создать встроенную ЭП в документах Word или Excel. Это тоже платная программа, для работы с которой нужно купить лицензию. используют для создания встроенной ЭП в PDF-документе. В программе Adobe Reader КриптоПро PDF можно использовать бесплатно. А вот для работы в других программах, например Foxit Reader или Sejda PDF, нужно купить лицензию.

Чтобы подписать документ ЭП с флешки или токена:

  1. Проверьте, чтобы подписываемый документ был в окончательной редакции: вы не сможете исправить его после подписания.
  2. Вставьте флешку или токен с ЭП в компьютер.
  3. Откройте программу, с помощью которой хотите подписать документ. В зависимости от выбранной программы вам нужно будет загрузить документ в сервис или просто открыть его.
  4. Выберите формат подписи, если это необходимо.
  5. Выберите сертификат, который установлен на флешке или токене.
  6. Нажмите на кнопку «Подписать».
  7. Если на контейнере закрытого ключа стоит пароль, введите его, чтобы подписать документ.

Обработчик

Теперь есть все необходимое для корректной работы модуля. Осталось реализовать подстановку лицензионной информации. Причем можно перехватывать лишь некоторые IRP-пакеты. Здесь все уже зависит от конкретной версии ключа и защищаемой программы.

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

PIO_STACK_LOCATION Stack = Irp-> Tail.Overlay.CurrentStackLocation;
ULONG IoControlCode;
if (Stack->MajorFunction == 14)
IoControlCode = Stack.DeviceIoControl.IoControlCode;
If (IoControlCode != 0x9c402458)
Return gDeviceControl(DeviceObject, Irp);
>
else
Encrypt(Irp->AssociatedIrp.SystemBuffer);
Crypt(Irp->AssociatedIrp.SystemBuffer, Key, DumpMemory);
>
>

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

void Encrypt(BYTE * Buffer)
WORD Seed = ((WORD)Buffer + 0x5e);
WORD Ver = ((WORD)Buffer + 0xba);

if (Ver)
for (int i = 0; i < 0xB9; i++) (WORD)(Buffer + i) += Seed;
Seed = (Seed >> 15) | (Seed << 1);
Seed -= (WORD)(Buffer + i) ^ i;
>

for (int i = 0xBE; i < 0xFF; i++) (WORD)(Buffer + i) -= Seed;
Seed = (Seed >> 15) | (Seed << 1);
Seed += (WORD)(Buffer + i) ^ i;
>

Видно, что алгоритм гораздо сложнее, чем обычный сдвиг и исключающее “или”. А вот алгоритм дешифрования:

void Decrypt(BYTE* Buffer)
WORD Seed = ((WORD)Buffer + 0x5e);
WORD Ver = ((WORD)Buffer + 0xba);

if (Ver) for (int i = 0xFE; i > 0xBD; i–) Seed -= (WORD)(Buffer + i) ^ i;
Seed = (Seed << 15) | (Seed >> 1);
(WORD)(Buffer + i) += Seed;
>

for (int i = 0xB8; i >= 0; i–) Seed += (WORD)(Buffer + i) ^ i;
Seed = (Seed << 15) | (Seed >> 1);
(WORD)(Buffer + i) -= Seed;
>

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

В заключение отмечу, что построение табличного эмулятора, основанного на перехвате DeviceIoControl, — достаточно трудная задача. Но такой принцип эмулятора можно использовать и на другом уровне взаимодействия: создать виртуальную USB-шину.

Как сделать, чтобы все было хорошо?

Чтобы с помощью продуктов ООО “КРИПТО-ПРО” реализовать технологию ФКН, необходимо:

1. Купить специальную версию библиотеки СКЗИ:
— для Рутокен ЭЦП — СКЗИ КриптоПРО Рутокен CSP.
— для JaCarta ГОСТ – СКЗИ КриптоПро ФКН CSP.

2. Одновременно с библиотекой СКЗИ необходимо приобрести специально подготовленные токены, содержащие в себе программные части (апплеты), с которыми умеет работать КриптоПРО Рутокен CSP или КриптоПро ФКН CSP соответственно.

Можно ли использовать Рутокен в качестве флешки?

Чаще всего на токенах марки «Рутокен» можно хранить только сертификаты электронной подписи. Записать на них другие файлы невозможно из-за технических особенностей носителей — они созданы только для хранения контейнеров закрытых ключей ЭП.

Токены, на которых помимо ЭП можно хранить и другие файлы, встречаются редко и стоят дороже. Например, в линейке Рутокен это модель Рутокен 2.0 Flash.

Заключение

Это не единственный способ избавиться от системы защиты. Существуют и другие, более совершенные методы. Изложенные в статье принципы можно использовать и для анализа работы драйверов, перехватывая IRP-пакеты. Таким образом можно добавить неплохой инструмент в свой сделанный на коленке набор. Удачи!

Получается, что Рутокен ЭЦП и JaCarta ГОСТ не являются токенами с неизвлекаемым ключом?

Опять нет. Данные устройства могут реализовывать функционал ФКН (но, возможно, в меньшем объеме, чем при использовании их совместно с СКЗИ КриптоПРО), но для этого нужен софт, который умеет работать с апплетами размещенными на токенах. Таким софтом может быть КриптоАРМ Стандарт 5 Плюс. Он это умеет. При генерации ключевой пары в мастере КриптоАРМ можно выбрать криптопровайдер, который будет использоваться, например, Rutoken ECP или eToken GOST. Это и позволит использовать токен как ФКН.

Оцените статью
Рейтинг автора
4,8
Материал подготовил
Егор Новиков
Наш эксперт
Написано статей
127
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий