КриптоПро CSP  

Сроки действия долговременных ключей в "КриптоПро CSP 4.0"

Особенности контроля сроков действия долговременных ключей

В "КриптоПро CSP 4.0" реализован контроль сроков действия долговременных ключей. Возможность использования ключа, срок действия которого истёк, для различных операций зависит от параметров настройки провайдера.

Параметром, определяющим разрешенные операции для ключа, срок действия которого истёк, является параметр ControlKeyTimeValidity. Данный параметр может принимать значения 0, 1 и 2.

Значение параметра ControlKeyTimeValidityЭффект
0 Все операции разрешены.
1 Запрещено формирование ЭП и зашифрование.
Разрешено расшифрование ранее зашифрованных сообщений.
Это значение установлено по умолчанию.
2 Все операции запрещены.

Указанный параметр может быть изменён путём редактирования ключей реестра Windows:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Cryptography\CurrentVersion\Parameters\ControlKeyTimeValidity (для 64-битных операционных систем),
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Cryptography\CurrentVersion\Parameters\ControlKeyTimeValidity (для 32-битных операционных систем);

либо путём вызова утилиты cpconfig (для *nix-подобных ОС):
./cpconfig -ini '\config\parameters' -add long ControlKeyTimeValidity <значение>

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

Информация о сроке действия ключей может быть получена путём вызова функции CryptGetKeyParam с параметром KP_NOTAFTER. Эта функция возвращает дату окончания действия ключей AT_SIGNATURE/AT_KEYEXCHANGE в виде структуры FILETIME. Дата окончания действия ключа может определяться по времени создания ключа и по сертификату в контейнере.

При создании ключа срок действия определяется равным 3 годам для неэкспортируемых ключей, хранящихся на функциональных ключевых носителях (ФКН) или в КриптоПро HSM. Сроки действия всех остальных ключей составляют 15 месяцев. Срок окончания действия ключа записывается в расширение контейнера.

При наличии сертификата в контейнере срок действия ключа определяется на основании поля PrivateKeyUsagePeriod (при наличии), либо при его отсутствии сроком начала действия сертификата (3 года с начала при использовании неэкспортируемых ключей, хранящихся на ФКН или в КриптоПро HSM, и 15 месяцев для прочих ключей).

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

Для всех импортированных долговременных ключей срок действия определяется как 15 месяцев с момента импорта.

Также возможна настройка определения срока действия ключа с использованием только сертификата или только расширения контейнера. Это достигается путём установки дополнительного расширения PrivateKeyTimeValidityControlMode в контейнер.

Расширение PrivateKeyTimeValidityControlMode имеет объектный идентификатор 1.2.643.2.2.37.3.11 и задаётся следующей ASN.1-структурой.

PrivateKeyTimeValidityControlMode ::= BIT STRING {
pktvcmUseCertificate(0),pktvcmUseContainer(1)
}

Установить расширение можно с помощью утилиты csptest. Следующий пример выключает оба типа контроля срока действия ключа.
csptest -noerrorwait -notime -oid -get_param ct:1.2.643.2.2.37.3.11 -set_param 03020600 -container "\\.\HDIMAGE\test" -provtype 81 -provider "Crypto-Pro GOST R 34.10-2012 Strong Cryptographic Service Provider"

Для проверки сроков действия только по сертификату в переменную -set_param нужно передать значение 03020680, только по расширению контейнера - 03020640, по расширению контейнера и по сертификату - 030206С0.

Для установки расширения также можно воспользоваться функцией CryptSetProvParam с параметром PP_CONTAINER_EXTENSION.

Удалить расширение можно с помощью утилиты csptest:
csptest -noerrorwait -notime -oid -del_param ct:1.2.643.2.2.37.3.11 -container "\\.\HDIMAGE\test" -provtype 81 -provider "Crypto-Pro GOST R 34.10-2012 Strong Cryptographic Service Provider"

Также для удаления расширения можно воспользоваться функцией CryptSetProvParam с параметром PP_CONTAINER_EXTENSION_DEL.