Довольно часто при оформлении сертификатов ключей электронной подписи можно наблюдать навязчивый пиар токенов с неизвлекаемым ключом. Продавцы из удостоверяющих центров уверяют, что, купив у них СКЗИ КриптоПРО CSP и токен с неизвлекаемым ключом (Рутокен ЭЦП или JaCarta ГОСТ), мы получим сертифицированные СКЗИ, обеспечивающие 100%-ную защиту от кражи ключей с токена. Но так ли это на самом деле? Для ответа на этот вопрос проведем простой эксперимент…
Конфигурация тестового стенда
Соберем тестовый стенд с конфигурацией, типовой для машин, участвующих в электронном документообороте (ЭДО):
- ОС MS Windows 7 SP1
- СКЗИ КриптоПРО CSP 3.9.8423
- Драйверы Рутокен для Windows (x86 и x64). Версия: v.4.1.0.0 от 20.06.2016, WHQL-certified
- Единый Клиент JaCarta и JaCarta SecurLogon. Версия 2.9.0 сборка 1531
- КриптоАРМ Стандарт Плюс 5. Версия 5.2.0.8847.
Для тестирования будут использоваться токены с неизвлекамым ключом:
- Рутокен ЭЦП. Версия 19.02.14.00 (02)
- JaCarta ГОСТ. Номер модели JC001-2.F09 v2.1
Методика тестирования
Смоделируем типовой процесс подготовки Администратором информационной безопасности ключевых документов для организации ЭДО:
- генерируется контейнер закрытого ключа и запрос на сертификат открытого ключа;
- после прохождения в удостоверяющем центре процедуры сертификации из запроса получается сертификат;
- сертификат в совокупности с контейнером закрытого ключа образует готовую для использования ключевую информацию. Данную ключевую информацию, записанную на носителе, будем называть исходным ключевым документом;
- с исходного ключевого документа изготавливаются копии, которые записываются на отчуждаемые носители (далее будем называть их рабочими ключевыми документами) и передаются уполномоченным пользователям;
- после изготовления необходимого количества рабочих ключевых документов исходный ключевой документ уничтожается или депонируется на хранение в орган криптографической защиты информации.
В нашем случае мы не будем пользоваться услугами центров сертификации, а сгенерируем ключевой контейнер с самоподписанным сертификатом и разместим его в реестре компьютера (АРМа генерации ключевой информации), это и будет исходный ключевой документ. Затем скопируем ключевую информацию на Рутокен ЭЦП и JaCarta ГОСТ, изготовив рабочие ключевые документы. После этого уничтожим исходный ключевой документ, удалив из реестра ключевой контейнер. И, наконец, попробуем скопировать ключевую информацию с рабочих ключевых документов обратно в реестр.
Проведение тестирования
1. Создадим исходный ключевой документ.









2.Сформируем рабочие ключевые документы.
Описание приведено применительно к JaCarta ГОСТ (для Рутокен ЭЦП действия аналогичны):





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








Как мы видим, ключевая информация успешно скопирована или, другим языком, извлечена из токенов с неизвлекаемым ключом. Получается, что производители токенов и СКЗИ врут? На самом деле нет, и ситуация сложнее, чем кажется на первый взгляд. Исследуем матчасть по токенам.
Матчасть
То, что на рынке принято называть токеном с неизвлекаемым ключом, правильно называется функциональным ключевым носителем (ФКН) (доп. инфо).
Главным отличием ФКН от обычных токенов (Рутокен S, JaCarta PKI, …) в том, что при выполнении криптографических преобразований (например, формирование электронной подписи) закрытый ключ не покидает устройство. В то время как при использовании обычных токенов закрытый ключ копируется с токена в память комптьютера.
Использование ФКН требует особой организации взаимодействия между прикладным криптографическим ПО и библиотекой СКЗИ (криптопровайдером или, по-другому, CSP).
Здесь важно увидеть, что программная часть библиотеки СКЗИ должна знать о существовании на токене апплета, реализующего криптографический функционал (например, генерация ключа, подпись данных и т.д.) и уметь с ним работать.
По-новому взглянем на наш тестовый стенд
В качестве одного из ключевых носителей использовался Рутокен ЭЦП. Через «Панель управления Рутокен» о нем можно получить следующую информацию:
В последней строке указана фраза «Поддержка КриптоПРО ФКН: Нет», а это значит, что на токене нет апплета, с которым умеет работать СКЗИ КриптоПРО CSP. Таким образом, реализация технологии ФКН с использованием СКЗИ и токенов, описанных в конфигурации тестового стенда, невозможна.
Аналогичная ситуация и с JaCarta ГОСТ. Более того, СКЗИ КриптоПРО CSP, по крайней мере та версия, которая использовалась в тестовом стенде, использует данные ключевые носители как «обычные токены», которые, в свою очередь, являются просто носителями ключа.
Это утверждение очень просто подтвердить. Для этого надо поставить СКЗИ КриптоПРО CSP на чистую машину без драйверов от токенов и подключить токен JaCarta ГОСТ. ОС Windows 7 обнаружит токен JaCarta ГОСТ как «Устройство чтения смарт-карт Microsoft Usbccid (WUDF)». теперь можно попробовать создать ключ на токене и скопировать его в реестр компьютера. Весь функционал СКЗИ успешно отработает.
Как сделать, чтобы все было хорошо?
Чтобы с помощью продуктов ООО “КРИПТО-ПРО” реализовать технологию ФКН, необходимо:
1. Купить специальную версию библиотеки СКЗИ:
— для Рутокен ЭЦП — СКЗИ КриптоПРО Рутокен CSP.
— для JaCarta ГОСТ – СКЗИ КриптоПро ФКН CSP.
2. Одновременно с библиотекой СКЗИ необходимо приобрести специально подготовленные токены, содержащие в себе программные части (апплеты), с которыми умеет работать КриптоПРО Рутокен CSP или КриптоПро ФКН CSP соответственно.
Получается, что Рутокен ЭЦП и JaCarta ГОСТ не являются токенами с неизвлекаемым ключом?
Опять нет. Данные устройства могут реализовывать функционал ФКН (но, возможно, в меньшем объеме, чем при использовании их совместно с СКЗИ КриптоПРО), но для этого нужен софт, который умеет работать с апплетами размещенными на токенах. Таким софтом может быть КриптоАРМ Стандарт 5 Плюс. Он это умеет. При генерации ключевой пары в мастере КриптоАРМ можно выбрать криптопровайдер, который будет использоваться, например, Rutoken ECP или eToken GOST. Это и позволит использовать токен как ФКН.
Выводы
- Не верьте продавцам, чушь вам городящим. Использование обычных версий криптопровайдера КриптоПРО CSP и обычных Рутокен ЭЦП или JaCarta ГОСт не позволяют реализовать технологию ФКН.
- Для использования технологии ФКН совместно с продуктами ООО «КРИПТО-ПРО» необходимы как специально подготовленные токены, содержащие апплет, с которым умеет работать СКЗИ, так и специальные версии криптопровайдера КриптоПРО CSP, которые умеют работать с апплетом на токенах.
- Рутокен ЭЦП и JaCarta ГОСТ умеет самостоятельно реализовывать технологию ФКН, но для этого необходим специальный софт.
Автор: imbasoft