КриптоПро CSP  

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

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

В "КриптоПро CSP 5.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. Сроки действия всех остальных ключей составляют 1 год 3 месяца. Срок окончания действия ключа записывается в расширение контейнера.

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

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

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

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

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

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

Установить расширение можно с помощью утилиты csptest. Следующий пример выключает оба типа контроля срока действия ключа.
csptest -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 -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.

Отсутствие расширения трактуется как необходимость проверки сроков действия ключей как по сертификату, так и по расширению контейнера.

Параметр KeyTimeValidityControlMode определяет устанавливаемое по умолчанию в контейнер расширение PrivateKeyTimeValidityControlMode и является специфичным для конкретного провайдера. В случае, если параметр установлен, в ключевой контейнер записывается расширение PrivateKeyTimeValidityControlMode со значением, указанным в параметре. По умолчанию для провайдеров типов 75, 80, 81 этот параметр не устанавливается, для прочих типов устанавливается значение 0x80 (проверять только по сертификату).

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

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

Параметр может принимать значения - 0x00 (отключить все проверки), 0x40 (проверять только по расширению контейнера), 0x80 (проверять только по сертификату), 0xC0 (проверять как по расширению контейнера, так и по сертификату).