CryptoPro | КриптоПро CSP 5.0: Кэширование паролей

CryptoPro | КриптоПро CSP 5.0: Кэширование паролей ЭЦП

Что такое пароль и пин-код электронной подписи

На электронную подпись устанавливают один из типов защиты: пароль или пин-код. Разберемся, чем они отличаются. 

Базовые понятия и определения

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

Криптопровайдер (провайдер, CSP) — набор библиотек, реализующих интерфейс CryptoAPI.

Ключевой контейнер — сущность в постоянной памяти, которая хранит ключ подписи, сертификат и дополнительную служебную информацию. Чаще всего представляет собой набор из нескольких файлов с расширением «key». Может быть записан на любой поддерживаемый провайдером носитель.

ФКН — функциональный ключевой носитель, который реализует аппаратную криптографию. Ключи генерируются внутри ФКН и не покидают его никогда. К ФКН-ам относятся не только носители с неизвлекаемыми ключами, но и «облачный токен».  

Контекст контейнера — служебный объект в памяти криптопровайдера, которых хранит информацию о ключах. Чаще всего создаётся на основе прочитанной из ключевого контейнера информации. Типичный срок жизни контекста: от вызова CryptAcquireContext до CryptReleaseContext.

Объект провайдера — служебный глобальный объект, который создаётся на первом обращении к CSP и живет до завершения процесса. Он хранит в себе данные и структуры, которые являются общими для всех контекстов контейнеров, которые используются в рамках текущего процесса.

Приложение — пользовательская или системная программа/служба/плагин, которая загружает в своё адресное пространство криптопровайдер: csptest, cptools, CertEnroll, КриптоАРМ и т.д.

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

Забыл пароль подписи

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

Если подобрать пароль не удается, то доступ к сертификату можно вернуть в некоторых случаях. Если раньше пароль сохраняли на компьютере — нажимали галочку «Запомнить», то иногда такой контейнер можно скопировать без ввода пароля. Попытайтесь скопировать папку со всеми файлами подписи на другое устройство или токен. Если в процессе у вас не спросят пароль, то можно продолжать работать с ЭП.

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

Забыл пин-код токена

Восстановить забытый пин-код токена тоже невозможно. Именно из-за этого токен — надежный носитель ЭП: если его украдут мошенники, то пин-код защитит подпись от них. 

Однако для владельца ЭП есть два способа, которые помогут подобрать нужную комбинацию.

Забыть пароль на токене

Существует несколько способов заставить токен сбросить признак аутентификации:

  1. Дождаться аппаратного RESET. На Windows он происходит примерно раз в минуту для каждого неиспользуемого носителя. Также он может происходить при смене процесса, использующего носитель. Тем не менее, как уже было сказано ранее, это наименее надежный способ, т.к. некоторые токены (например, «Рутокен») могут не реагировать на RESET.
  2. Предъявить в CSP NULL в качестве пароля: CryptSetProvParam(PP_KEYEXCHANGE_PIN, NULL). Провайдер распознает данный вызов как запрос на сброс аутентификации и, если токен поддерживает эту функцию, пошлет на него явную команду с требованием забыть пароль.
  3. «Инструменты КриптоПро» (cptools) — «Управление носителями» — «Забыть пароль». По сути это графическая обертка вокруг отправки «нулевого» пароля.
  4. csptest -keys -cont “\.Aktiv Rutoken ECP 0” -nullpass

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

Запрет кэширования для фкн

При использовании ФКН есть возможность не кэшировать пароль вне зависимости от настроек AuthPositions. Для этого в окне ввода пароля нужно установить галочку «Требовать пароль на каждую операцию».

В отличие от пассивных ключевых носителей в случае ФКН криптографические операции происходят на самом носителе. Установка этой галочки заставляет провайдер не просто не запоминать пароль, но и вызывать команду «Забыть пароль» после каждой криптографической операции.

Также можно воспользоваться групповой политикой, которая форсирует установку данной галочки и запретит её снятие:

Конфигурация компьютера — Административные шаблоны — Классические административные шаблоны — КРИПТО-ПРО — КриптоПро CSP — Требовать пароль функциональной смарт-карты для каждой операции.

Агафьин С.С.,

начальник отдела разработки ФКН,

компания КриптоПро

Как восстановить пароль электронной подписи

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

Кэши паролей

В CSP 5.0 введена классификация паролей. Они могут быть:

В CSP 5.0 существует три вида кэшей паролей: локальный, глобальный и отключенный.

Локальный кэш пароль — это тот же кэш, что был в CSP 4.0. При локальном кэшировании паролей они сохраняются во внутреннем контексте контейнера. Срок их жизни полностью совпадает со сроком жизни контекста. По умолчанию локальными являются все контейнерные пароли (считыватели Реестр, Директория, Облачный токен, флэшки).

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

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

Схематически глобальный кэш паролей можно изобразить так:

Свойства глобального кэша:

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

Кэширование контекстов контейнеров

В провайдере «КриптоПро CSP 4.0» есть два важных кэша контекстов: кэш открытых контейнеров и кэш закрытых контейнеров.

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

Довольно часто пользовательские приложения «забывают» закрыть контекст контейнера (CryptReleaseContext) после работы. Это приводит к тому, что он вместе с паролем остаётся в памяти и ни при каком последующем использовании контейнера провайдер не потребует ни подключение токена, ни ввод пароля.

Кэш закрытых контейнеров позволяетсохранять в глобальном объекте провайдера контексты контейнеров, даже если они были корректно закрыты. По умолчанию данный кэш выключен и имеет максимальный размер в 0 элементов. Если пользователь хочет включить оптимизацию, что может быть полезно для нагруженных серверных систем, то он должен установить размер данного кэша (максимальное число хранимых закрытых контекстов) в ненулевое значение.

Это можно сделать как через конфигурацию CSP, так и через «Панель управления КриптоПро CSP» на вкладке «Безопасность» при использовании службы хранения ключей.

При превышении заданного размера из кэша «выталкиваются» самые старые элементы.

Логика работы с ключами «криптопро csp 4.0»

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

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

  1. Провайдер перечисляет подключенные ключевые носители (считыватели) и ищет указанный контейнер.
  2. Через окно провайдер запрашивает пароль для контейнера.
  3. Если носителем является токен или смарт-карта, провайдер сразу предъявляет им пароль, иначе — запоминает в контексте контейнера для дальнейшего использования.
  4. Зачитывает в оперативную память ключевой контейнер и с помощью пароля его расшифровывает.

Чтобы упростить взаимодействие пользователя с ключевым носителем / контейнером, предъявленный пароль сохраняется в контексте контейнера.

Это позволяет не запрашивать у пользователя пароль второй раз, если, например, между двумя операциями, требующими пароль, произошел разрыв связи с токеном.

Вне зависимости от того, чем является пароль на самом деле (прообразом для ключа шифрования ключей контейнера или паролем от токена, на котором несколько десятков контейнеров), провайдер поддерживает жесткую связь «1 пароль — 1 ключевой контейнер».

Логика работы с ключами «криптопро csp 5.0»

В большинстве аспектов логика работы «КриптоПро CSP 5.0» является расширением логики CSP 4.0. Благодаря этому пользователь может самостоятельно настраивать тот режим работы, который больше соответствует решаемым задачам.

Рассмотрим тот же сценарий, что был описан ранее для CSP 4.0 — чтение ключевого контейнера:

  1. Провайдер перечисляет подключенные ключевые носители (считыватели) и ищет указанный контейнер.
  2. Провайдер запрашивает у ключевого носителя состояние аутентификации. Если на него был предъявлен пароль, то пробуем выполнить операцию.
  3. Если пароль предъявлен не был, пробуем предъявить пароль из кэшей или реестра.
  4. Пробуем выполнить операцию. Если получили ошибку — запрашиваем у пользователя пароль через графический интерфейс.
  5. Выполняем операцию: чтение ключей, подпись, выработка ключа обмена.

Наиболее существенным отличием от CSP 4.0 является то, что теперь провайдер запрашивает пароль только тогда, когда он действительно нужен.

Настройка кэшей паролей

Настроить вид кэширования пароля можно через значение AuthPositions, установленное в ключе реестра

[HKLMSOFTWAREWOW6432NodeCrypto ProCryptographyCurrentVersionParameters].

В него нужно установить значение вида 0xabc, где a — режим для разблокирующих паролей, b — для паролей носителей, c — для контейнерных. Режимы задаются следующими значениями:

Примеры использования:

Пароль от контейнера электронной подписи

Пароль используют для подписи, сохраненной в память компьютера. Он защищает контейнер ЭП — папку с файлами подписи: сертификатом, закрытым и открытым ключами. 

Впервые с паролем владелец ЭП встречается, когда выпускает сертификат ЭП и записывает его в реестр компьютера или на обычную флешку (не токен). Придумать пароль нужно самостоятельно — при записи программа КриптоПро CSP покажет окошко, в которое нужно ввести комбинацию чисел, символов и латинских и русских букв.

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

Пин-код от токена электронной подписи

Пин-код используется для электронной подписи, которая записана на носитель в виде usb-флешки — на токен. Пин защищает токен, поэтому, если мошенники украдут носитель ЭП, то самой подписью они воспользоваться не смогут.

Впервые владелец ЭП должен ввести пин-код при выпуске подписи — когда ее записывают на токен. Если носитель новый, то нужно ввести «заводское» стандартное значение, например, 12345678 для Рутокена. «Заводское» значение лучше сразу изменить на собственное, чтобы его не смогли подобрать злоумышленники.

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

Режимы работы

«КриптоПро CSP» имеет два основных режима работы:

В режиме библиотеки провайдер загружается в адресное пространство вызывающего приложения. В каждом приложении будет свой объект провайдера со своим набором параметров, свойств и контекстов.

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

Решение №1. заводской пароль.

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

  • «Рутокен», eSmart, JaCarta и JaCarta LT— 12345678,
  • eToken — 1234567890, eToken,
  • Jacarta SE — 1111111 для PKI-части и 0987654321 для ГОСТ части.

Если «заводская» комбинация к токену не подходит, значит ее сменили при записи сертификата. Тогда вернуть доступ к ЭП можно только одним способом — подобрать правильные символы.

Решение №2. подбор пин-кода и права администратора

На то, чтобы подобрать пин-код к токену, есть десять попыток. После десятого неверного ввода символов заблокируется.

Иногда количество попыток ввода можно увеличить. Для этого нужно зайти на токен в качестве администратора и разблокировать пин-код:

  1. Перейти в панель управления токеном. Например, если используется носитель «Рутокен», то нужно перейти в Пуск — Панель управления — Панель управления «Рутокен» — вкладка «Администрирование».
  2. Ввести пин-код администратора. Стандартное значение устанавливает производитель: для «Рутокена» — 87654321, для Jacarta SE — 00000000 для PKI-части и 1234567890 для ГОСТ части. Если стандартное значение администратора не подошло, значит его сменили, и нужно вспоминать установленную комбинацию. На это есть десять попыток, потом токен окончательно заблокируется.
  3. Разблокировать пин-код токена. Для этого на вкладке «Администрирование» нажать «Разблокировать».

Также, если пин-код администратора известен, то можно сбросить попытки ввода другим способом — через КриптоПро CSP:

  1. Открыть КриптоПро CSP, перейти на вкладку «Оборудование» и нажать кнопку «Настроить типы носителей».
  2. Выбрать свой токен. Открыть его свойства и перейти в раздел «Информация».
  3. Разблокировать пин-код.

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

Если вспомнить или изменить нужную комбинацию не удалось, придется получать новый сертификат подписи в УЦ: отозвать старый сертификат и получить новый. Токен можно использовать старый — можете отформатировать носитель, тогда старый пин-код и сертификат удалятся.

При записи подписи на новый токен советуем поменять стандартный пин-код носителя на собственный. Это, конечно, может привести к тому, что комбинация вновь потеряется. Но лучше получить новый сертификат, чем пострадать от мошенников, которые смогли взломать «заводское» значение на токене и подписали украденной ЭП важные документы.

Сохранение в реестре

Предъявляемый через окно пароль можно сохранить в защищенном виде в реестре.

Если у администратора есть потребность запретить сохранение паролей, то можно воспользоваться групповой политикой:

Конфигурация компьютера — Административные шаблоны — Классические административные шаблоны — КРИПТО-ПРО — КриптоПро CSP — Запретить использование сохраненных паролей.

Запомненные пароли можно очистить через «Панель управления КриптоПро CSP» с помощью кнопки «Удалить запомненные пароли» на вкладке «Сервис».

Специфика некоторых токенов

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

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

Если токен отвечает утвердительно, провайдер не выводит пользователю окно ввода пароля, а сразу неявно предъявляет известный пароль. Так, например, при работе с основной конфигурацией носителей Рутокен ЭЦП 2.0 этим паролем является 12345678. Провайдер никогда не запрашивает пароль по умолчанию.

Не менее важным является и внутреннее устройство токена. Чаще всего в токене реализована одна команда предъявления пароля, которая при успехе устанавливает в оперативной памяти устройства признак проведенной аутентификации. Это позволяет выполняться всем последующим командам, которые могут требовать повышенных привилегий: чтение или запись ключей, формирование подписи, выработка ключа обмена (расшифрование документа).

В зависимости от внутреннего устройства токена данный признак может сохраняться как на несколько секунд и сбрасываться автоматически, так и поддерживаться до отключения токена из USB-порта. За редким исключением большинство производителей токенов следуют стандарту PC/SC и сбрасывают все признаки аутентификации и парольную информацию при получении аппаратного события RESET. Оно возникает, например, при обращении к токену из соседнего приложения.

Оцените статью
ЭЦП64
Добавить комментарий