Довольно часто при оформлении сертификатов ключей электронной подписи можно наблюдать навязчивый пиар токенов с неизвлекаемым ключом. Продавцы из удостоверяющих центров уверяют, что, купив у них СКЗИ КриптоПРО CSP и токен с неизвлекаемым ключом (Рутокен ЭЦП или JaCarta ГОСТ), мы получим сертифицированные СКЗИ, обеспечивающие 100%-ную защиту от кражи ключей с токена. Но так ли это на самом деле? Для ответа на этот вопрос проведем простой эксперимент…
Конфигурация тестового стенда
Методика тестирования
Проведение тестирования
Как мы видим, ключевая информация успешно скопирована или, другим языком, извлечена из токенов с неизвлекаемым ключом. Получается, что производители токенов и СКЗИ врут? На самом деле нет, и ситуация сложнее, чем кажется на первый взгляд. Исследуем матчасть по токенам.
Матчасть
То, что на рынке принято называть токеном с неизвлекаемым ключом, правильно называется функциональным ключевым носителем (ФКН) (доп. инфо).
Главным отличием ФКН от обычных токенов (Рутокен 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. Это и позволит использовать токен как ФКН.
Самым безопасным вариантом хранения контейнера с сертификатом и ключом электронной подписи (ЭП) является ключевой носитель, защищенном PIN-кодом. Такие носители существуют в двух более распространенных форм-факторах: USB-токен и смарт-карта.
Для носителей Рутокен существуют следующие режимы работы с КриптоПро CSP:
Активный (Активный токен без защиты канала). Контейнер генерируется при помощи внутреннего криптоядра Рутокена семейства ЭЦП, с использованием библиотеки PKCS#11. В таком режиме контейнер тоже хранится на токене или смарт-карте. Отличие в том, что пользователь может получить от этого носителя результат выполнения криптографических операций с использованием хранимого на устройстве закрытого ключа, поэтому такие ключи нельзя украсть или скопировать. В данном случае ключ является неизвлекаемым. Активные носители имеют возможность хранить контейнеры в пассивном режиме, что снижает безопасность ключа.
Ключевые носители Рутокен и поддерживаемые ими режимы работы
Каждый Рутокен работает в одном, двух или трех режимах.
В таблице указаны носители, продемонстрировавшие работоспособность с соответствующими версиями КриптоПро CSP.
На пересечении строки с названием модели Рутокена и строки с версией КриптоПро CSP указаны режимы работы носителя.
Чтобы бесплатно получить подпись в ФНС, индивидуальный предприниматель, юридическое лицо или нотариус должны приобрести специальный токен. Токен — это носитель электронной подписи, он служит для хранения ключа ЭП и его использования.
В этой статье мы разберёмся в том, какие носители существуют, в чём разница между ними и расскажем, как с ними работать и какие ошибки могут возникнуть во время их эксплуатации.
Какие носители бывают
Все токены внешне напоминают флешку и выполняют её функции — выступают в качестве носителя. Однако, в отличие от обычной флешки, токены являются защищёнными носителями: на них устанавливается пароль и в них встроены криптографические алгоритмы. Это сделано для того, чтобы максимально обезопасить хранимую на них электронную подпись от компрометации, то есть доступа постороннего лица к защищённой информации.
Мы лишь вскользь упомянем о том, что хранить электронную подпись можно и на компьютере, но это небезопасно. В то же время, с 1 января 2022 года, получить подпись для юридических лиц, индивидуальных предпринимателей и нотариусов можно будет только в удостоверяющем центре ФНС. И получатель должен иметь при себе токен, на который и будет загружен ключ.
К носителям выставлены определённые требования: они должны быть сертифицированы и соответствовать формату USB Type-A. К этому типу можно отнести следующие токены:
В чём разница
Носители различают по следующим критериям: производитель, внешний вид, аппаратная криптография, объём защищённой памяти, цена, дополнительные опции, поддержка тех или иных операционных систем и необходимое программное обеспечение для работы.
Токены могут различаться также и по максимальному количеству электронных подписей, которые можно на них установить. Например, если размер носителя 64 Кб, то на него можно установить до 8 электронных подписей.
Объём защищённой памяти варьируется от 32 до 128 Kb, в зависимости от производителя. Некоторые модели могут содержать дополнительную flash-память для автоматического запуска необходимого программного обеспечения. Большинство токенов поддерживает множество версий Windows, а также Mac OS X и GNU/Linux.
Несмотря на все отличия, носители служат одной цели. Мы рекомендуем при выборе токена обращать внимание на то, подходит лишь ваша операционная система или нет для работы с данным носителем. При необходимости можно покупать карту с дополнительными опциями.
Как работать с носителями
Порядок получения электронной подписи на токен выглядит следующим образом:
Чтобы полноценно работать с установленной на токен электронной подписью, нужно выполнить ещё несколько действий. Главное — на компьютер нужно установить криптопровайдер « КриптоПро CSP », это требование налоговой. Остальное зависит от выбранного носителя: нужно будет установить драйвер для работы с токеном.
Порядок работы с носителями очень прост: в случае с Рутокеном, который является самым распространённым российским носителем, достаточно установить драйвер и воткнуть сам токен в гнездо USB. Настройка носителя осуществляется в специальной панели управления, которая устанавливается вместе с драйвером.
После выполненных действий электронную подпись можно будет использовать по назначению: подписывать электронные документы, работать с государственными порталами и участвовать в закупках.
Какие могут возникнуть ошибки
Во время работы с токеном могут возникать ошибки, которые может исправить либо сам пользователь, либо организация, выдавшая носитель. Рассмотрим основные ошибки, которые возникают при работе с Рутокеном.
Носитель ключа электронной подписи нужно хранить в недоступном для посторонних лиц месте, чтобы избежать компрометации. Использовать его нужно чётко в соответствии с прилагаемой инструкцией, а при возникновении проблем — пользоваться вышеуказанными методами их решения или обращаться в службу поддержки.
В предыдущей статье мы описали виды ключевых носителей, которые представлены на российском рынке, и указали на их достоинства и недостатки. В ней был сделан вывод, что наиболее безопасным видом ключевых носителей является ФКН — «функциональный ключевой носитель». В настоящей статье мы развиваем эту тему рассказом об использовании устройств контроля подписи.
В отличие от обычных активных носителей, где аутентификация производится простым явным предъявлением ПИН-кода по открытому каналу, ФКН для аутентификации и установления защищенного канала используют протокол SESPAKE (см. «Рекомендации по стандартизации Р-50.1.115–2016» и RFC 8133).
После выполнения протокола между токеном и криптопровайдером устанавливается защищенное соединение, а все данные, которыми они обмениваются, проходят в зашифрованном виде. Нарушитель, прослушивающий канал, не только не может узнать, какие данные подписываются на носителе, но даже понять, команда какого типа посылается криптопровайдером. Более подробно о протоколе можно прочитать в статье на Хабрахабре.
Устройство контроля подписи
Однако есть атака, от которой не застрахованы даже ФКН: подмена подписываемых данных до передачи их криптопровайдеру. В этом случае нарушитель находится между пользователем и криптопровайдером, в адресном пространстве пользовательского процесса, и имеет возможность незаметно изменить данные, которые пользователь хочет подписать.
Так как криптопровайдер не показывает пользователю, какие именно данные он отправляет на подпись, подмененная информация успешно подписывается. Поскольку в данном случае речь идет о нарушителе в адресном пространстве процесса, никакими программными способами, добавленными в криптопровайдер, защититься от него нельзя.
Тут на помощь приходят устройства контроля подписи (УКП), которые отображают на экране подписываемые данные, запрашивающие у пользователя разрешение на подпись. Принцип их действия показан на рисунке ниже. Как правило, они либо представляют собой считыватель, в который может быть вставлен активный носитель, либо сами являются активными носителями с экраном. В любом случае предполагается, что между таким устройством и носителем нарушителя нет. А вот между ним и криптопровайдером, или в одном адресном пространстве с криптопровайдером, нарушитель может быть.
Криптопровайдер, получив данные для хэширования, которые потом надо будет подписать, не только сам хэширует их, но и посылает в устройство контроля подписи. В результате хэширования в криптопровайдере получается значение, названное на рисунке ХЭШCP.
УКП имеет экран, на который оно выводит значимую часть подписываемого документа. После отображения документа на экране устройство запрашивает у пользователя разрешение на подпись. Если тот согласился, считается значение хэша документа, которое сохраняется в кэше устройства. На рисунке оно названо ХЭШV.
Когда криптопровайдер посылает носителю, вставленному в УКП, APDU-команду подписи, устройство контроля подписи перехватывает ее, выделяет из нее переданный хэш, и последовательно сравнивает со всеми значениями из своего кэша, то есть с теми, на которые получено разрешение пользователя. Если в кэше находится такое же значение, команда подписи пропускается к носителю, в противном случае отвергается. Таким образом, отвергаются все команды подписи, кроме содержащих хэши от данных, явно одобренных пользователем.
Если нарушитель попытается прямо в канал между криптопровайдером и носителем записать APDU-команду, содержащую некоторый ХЭШX, она будет отвергнута. Точно так же будет отвергнута команда, содержащая хэш от данных, которые не передавались криптопровайдером устройству контроля подписи, или от данных, не получивших разрешения пользователя (на рисунке — ХЭШ0).
Большим плюсом такого подхода является возможность работы с активным носителем как с помощью обычных считывателей, так и через УКП. Носитель, использовавшийся с устройством контроля подписи, в любой момент времени можно вставить в обычный считыватель и выполнить подпись на том же закрытом ключе.
Фактически, устройство контроля подписи является легальным MitM-нарушителем, фильтрующим обмен сообщениями между носителем и криптопровайдером.
Контроль подписи и ФКН
Кажется, что данная логика входит в противоречие с идеологией ФКН, в рамках которой невозможны даже «легальные нарушители». Защищенный канал, устанавливаемый между криптопровайдером и носителем, скрывает команды подписи, поэтому УКП не может отфильтровать неразрешенные пользователем хэши. И хотя ФКН защищен от формирования злоумышленником собственной команды в канале между криптопровайдером и носителем, он беззащитен от передачи в криптопровайдер подмененных данных. Это могло бы ограничить возможности использования функциональных носителей, но у данной проблемы есть решение и мы его здесь представим.
В случае если устройство контроля подписи совмещено с носителем (то есть фактически они — единое целое), то систему фильтра переданных хэшей можно разместить уже после расшифрования команд внутри устройства, так что никакой проблемы нет.
Но если устройство контроля подписи представляет собой только считыватель, в который может быть вставлен один из множества функциональных носителей, решение несколько сложнее, и заключается в переносе кэша разрешенных хэшей в носитель. Принцип действия в этом случае изображен на рисунке ниже.
Криптопровайдер работает с устройством контроля подписи и с ФКН точно так же, как было описано ранее. Функциональный носитель получает все APDU-команды подписи по защищенному каналу. Но у носителя есть две специальных APDU-команды, разрешенных и по открытому каналу:
«Белый список» — это, по сути, тот же кэш хэшей, только хранящийся в носителе. После получения первой команды носитель, получив команду подписи, проверяет, есть ли подписываемый хэш в его кэше, и подписывает только те хэши, которые нашел. Вторая команда передает носителю значения хэша, которые тот сохраняет в свой кэш. Не получив первую команду, ФКН подписывает любой переданный ему хэш.
Эти две команды формирует и посылает носителю устройство контроля подписи. Также УКП следит, чтобы носителю не были переданы эти команды со стороны криптопровайдера, из канала, в котором может быть нарушитель (это возможно, если защищенный канал еще не был установлен). А так как между носителем и устройством контроля подписи нарушителя нет (ведь токен или смарт-карта напрямую вставляется в корпус устройства или встроен в УКП), то гарантируется, что кэш носителя будет наполнен только хэшами, переданными устройством контроля подписи.
Первую команду устройство контроля подписи посылает носителю, когда перехватывает APDU-команду аутентификации по SESPAKE (она означает, что криптопровайдер собирается установить защищенный канал с носителем, в котором, возможно, будут проходить команды подписи). Следом УКП посылает носителю все значения хэшей, разрешенных пользователем в тот момент, а после этого уже пересылает перехваченную команду аутентификации. Также устройство контроля подписи посылает очередной хэш носителю в тот момент, когда пользователь разрешает его подпись.
Основная опасность данного способа в том, что носителю будет передана команда, записывающая хэш нарушителя в «белый список». Но так как, как отмечено выше, нарушителя между устройством контроля подписи и носителем нет, а все команды записи хэша в «белый список», полученные УКП снаружи, отфильтровываются, нарушитель не может записать в кэш носителя свой хэш.
Использование же этих команд без устройства контроля подписи не сможет снизить защищенности ФКН: максимум, можно перевести носитель в режим работы по «белому списку», после чего он откажется принимать от криптопровайдера любые команды подписи до ближайшей команды сброса состояния, но это не заставит его ни подписывать хэши, переданные по открытому каналу, ни каким-то образом раскрыть хранимую на нем закрытую информацию.
Основным недостатком метода является то, что работать с УКП могут не любые ФКН, а только те, которые поддерживают «белые списки». Но поддержка не требует больших затрат ресурсов от носителей: чаще всего между выработкой хэша и его подписью проходит минимальное количество времени, и поэтому можно использовать один кэш для всего ФКН, размером порядка десяти значений, с вытеснением старых хэшей новыми. А операция нахождения в кэше значения, совпадающего с переданным в команде подписи, не является сложной для микропроцессора носителя.
Таким образом, предложенная схема позволяет использовать функциональные ключевые носители вместе с устройствами контроля подписи, что делает их защищенными от атаки с подменой данных, сохраняя все прочие положительные качества ФКН.
с Вин7 (ВМваре) также токен не виден, ну тут особо и не надеялся ) Хотя, было бы удобно.
При использовании Рутокен ЭЦП (без ФКН) ситуация аналогична.
Токены ВЕЗДЕ видны родной контрольной панелью, на одном видно и содержащиеся в нем сертификаты.
Приложите, пожалуйста, скриншот панели управления Рутокен\вкладка сертификаты и диалогового окна своиств сертификата для данного идентификатора.
#17 Ответ от vadjunik 2016-12-13 11:17:44
Re: Рутокен ЭЦП 2.0 + КриптоПро Рутокен CSP
Да, сработало! Дело было в версии IE- 11-й, просто не позволяет выбрать криптопровайдер.
Но это уже не к вам вопрос )
Спасибо за помощь! Токен увиделся в Вин7 с 8-м IE.
#18 Ответ от Антон Тихиенко 2016-12-13 11:22:59
Re: Рутокен ЭЦП 2.0 + КриптоПро Рутокен CSP
Спасибо за помощь! Токен увиделся в Вин7 с 8-м IE.
Спасибо за обращение.
#19 Ответ от vadjunik 2016-12-13 13:10:16 (2016-12-13 13:11:32 отредактировано vadjunik)
Re: Рутокен ЭЦП 2.0 + КриптоПро Рутокен CSP
Рано обрадовался, не все так кучеряво ) Проблем в том, что существующая ДБО не опознала КриптоПро Рутокен CPS, как поддерживаемый ей КриптоПро. При установке полной версии КриптоПро CPS 3.9.8495, при запросе сертификата выдается диалог с выбором носителя (как я и предполагал), однако, ни один токен не распознался как подходящий:
Конфликт КриптоПро Рутокен CPS и КриптоПро CPS?
#20 Ответ от Антон Тихиенко 2016-12-13 15:38:00
Re: Рутокен ЭЦП 2.0 + КриптоПро Рутокен CSP
возможно ли использование Рутокена для хранения сертификатов и ЭЦП КриптоПро без какой-то доработки.
Возможно. Обычно дополнительно ничего настраивать не требуется. На последнем скриншоте запущена обычная версия КриптоПро CSP без поддержки ФКН?
#21 Ответ от vadjunik 2016-12-13 17:01:14
Re: Рутокен ЭЦП 2.0 + КриптоПро Рутокен CSP
Возможно. Обычно дополнительно ничего настраивать не требуется.
Отлично, теперь бы выработать точные требования к аппаратуре и ПО для этого )
На последнем скриншоте запущена обычная версия КриптоПро CSP без поддержки ФКН?
Такое поведение нормально если подсоединен КриптоПро Рутокен CSP и запушена обычная версия КриптоПро.
С обычным Рутокен ЭЦП все корректно работает.
Что такое «обычный» Рутокен? Вот сейчас подключен этот:
КриптоПро его не видит, хотя на токене написано именно «КриптоПро Рутокен CSP», вот такой внешне
Как видно, поддержка КриптоПро ФКН есть. Со вторым типом токенов «Рутокен ЭЦП»:
Стандартная схема такая: — на сервере стоит УЦ КриптоПро — клиент запрашивает сертификат на подпись документов — полученный в итоге электронная подпись ставится при помощи токена.
В настоящий момент все работает, но сертификат и подпись, соответственно, сохраняются на ПК клиента.
#22 Ответ от Антон Тихиенко 2016-12-13 22:34:55
Re: Рутокен ЭЦП 2.0 + КриптоПро Рутокен CSP
А вот тут много лишнего:
Модули ставить не надо
CSP надо оставить какой то один, какой нужен
Что такое «обычный» Рутокен? Вот сейчас подключен этот:
КриптоПро его не видит, хотя на токене написано именно «КриптоПро Рутокен CSP», вот такой внешне
Если на компьютере установлен просто КриптоПро CSP (без Рутокен в названии), то с ним «из коробки» работаю неФКН идентификаторы Рутокен. Причем аппаратная криптография при генерации ключей тут не не используется.
Если установлен КриптоПро Рутокен CSP, то подойдет Рутокен КП с поддержкой технологии ФКН.
Попробуйте развернуть две «новые» установки виртуальных ОС, к одной подключите просто Рутокен ЭЦП и установите соответствующую версию CSP, ко второй подключите КриптоПро Рутокен CSP и также нужный CSP.
Если возможно, то идентификаторы нужно сначала отформатировать, а потом выпустить на них ключи и сертификаты при помощи этого тестового УЦ.
#23 Ответ от vadjunik 2016-12-14 10:01:08 (2016-12-14 10:38:08 отредактировано vadjunik)
Re: Рутокен ЭЦП 2.0 + КриптоПро Рутокен CSP
Оставил только — Драйверы Рутокен Переставил — КриптоПро CSP 3.9.8495
Попробуйте развернуть две «новые» установки виртуальных ОС, к одной подключите просто Рутокен ЭЦП и установите соответствующую версию CSP, ко второй подключите КриптоПро Рутокен CSP и также нужный CSP.
Ситуация такова, что на данный момент мне актуально добиться работоспособнсти связки только конкретно КриптоПро CSP (т.к. он не требует доработки существуюшего собственного ПО) и Рутокен (с выводом о требуемой модификации).
Токен отформатировал. С тестовым УЦ картина точно такая же как и с моим :
#24 Ответ от Антон Тихиенко 2016-12-14 10:24:19
Re: Рутокен ЭЦП 2.0 + КриптоПро Рутокен CSP
Особых настроек USB нет. Поскольку Рутокен корректно определяется через Панель управления Рутокен, то похоже что то с самим CSP.
Удалить запомненные пароли (меню Пуск\Панель управления\КриптоПро CSP\вкладка «Сервис»\кнопка «Удалить запомненные пароли». Далее выбрать пункт «Пользователя» в разделе «Удалить все запомненные пароли закрытых ключей» и нажать на кнопку «ОК») и переподключить Рутокен ЭЦП;
Если удаление запомненных паролей не помогло, то удалите КриптоПро CSP\пройдитесь утилитой очистки следов установки «cspclean.exe»\перезагрузите компьютер и установите КриптоПро CSP (на всякий случай лучше повторно скачать дистрибутив).
Ситуация такова, что на данный момент мне актуально добиться работоспособнсти связки только конкретно КриптоПро CSP (т.к. он не требует доработки существуюшего собственного ПО) и Рутокен (с выводом о требуемой модификации).
При использовании криптопровайдера КриптоПро Рутокен CSP 3.9 необходимости в доработках также не должно возникнуть. Главное чтобы на рабочей станции был установлен только этот CSP. Версия 3.9 поддерживает как Рутокен КП так и Рутокен ЭЦП.