Основные отличия интерфейса КриптоПро CSP версии 4.0 от версии 3.6
Основные отличия интерфейса КриптоПро CSP версии 4.0 от версии 3.6.
В данном разделе приведена краткая справка об основных изменениях в СКЗИ КриптоПро CSP при работе с уровня CryptoAPI 1.0.
Три типа провайдера
Основным отличием СКЗИ КриптоПро CSP версии 4.0 от предыдущих версий является поддержка стандартов ГОСТ Р 34.11-2012 (алгоритм хэширования) и ГОСТ Р 34.10-2012 (алгоритмы формирования и проверки электронной подписи), потребовавшая введения двух новых типов провайдера (PROV_GOST_2012_256 и PROV_GOST_2012_512) в дополнение к ранее существовавшему PROV_GOST_2001_DH. При создании контекста с помощью вызова функции CPAcquireContext() тип провайдера должен быть указан в поле dwProvType структуры PVTABLEPROVSTRUC.
Соответствие между типами провайдера и алгоритмами долговременных ключевых пар
Тип провайдера, указанный при создании контекста, однозначным образом определяет алгоритмы ключевых пар, сохраняемых в контейнере.
-
Провайдер типа PROV_GOST_2001_DH создает ключи алгоритма ГОСТ Р 34.10-2001.
-
Провайдер типа PROV_GOST_2012_256 создает ключи алгоритма ГОСТ Р 34.10-2012 длины 256 бит (длина открытого ключа 512 бит).
-
Провайдер типа PROV_GOST_2012_512 создает ключи алгоритма ГОСТ Р 34.10-2012 длины 512 бит (длина открытого ключа 1024 бита).
Соответствие между типом провайдера и параметрами шифрования
Тип провайдера также определяет набор узлов замены алгоритма шифрования ГОСТ 28147-89, используемый по умолчанию.
-
При создании сессионного ключа CALG_G28147 с помощью функции CPGenKey() или CPDeriveKey() с использованием провайдера типа PROV_GOST_2001_DH, PROV_GOST_2012_256 или PROV_GOST_2012_512 параметр KP_CIPHEROID полученного ключа по умолчанию принимает установленное для провайдера значение PP_CIPHEROID, либо, после загрузки ключей с контейнера (с помощью CPGetUserKey()), oid параметров шифрования, установленный в этом контейнере.
-
При использовании алгоритма VKO GOST R 34.10-2001 (дополненный алгоритм Диффи-Хеллмана с использованием функции хэширования ГОСТ Р 34.11-94) с долговременным ключом параметр KP_CIPHEROID полученного ключа принимает oid параметров шифрования, установленный в соответствующем долговременному ключу контейнере.
-
При использовании алгоритма VKO GOST R 34.10-2001 (дополненный алгоритм Диффи-Хеллмана с использованием функции хэширования ГОСТ Р 34.11-94) с эфемерным ключом параметр KP_CIPHEROID полученного ключа принимает установленное для провайдера значение PP_CIPHEROID.
-
При использовании алгоритма VKO GOST R 34.10-2012-256 (дополненный алгоритм Диффи-Хеллмана с использованием функции хэширования ГОСТ Р 34.11-2012 с длиной выхода 256 бит) параметр KP_CIPHEROID полученного ключа принимает значение, установленное в параметрах импортируемого открытого ключа (уточнение: в отличие от остальных случаев при использовании параметров "1.2.643.7.1.2.5.1.1" (вариант ТК26 Z) параметры шифрования в экспортированном открытом ключе явно не указываются, поэтому отсутствие в импортируемом открытом ключе установленных параметров шифрования трактуется как применение параметров "1.2.643.7.1.2.5.1.1" (вариант ТК26 Z) ).
-
Параметры шифрования (PP_CIPHEROID) для PROV_GOST_2001_DH по умолчанию устанавливаются как "1.2.643.2.2.31.1", вариант "Верба-О" (в контрольной панели описаны как "параметры по умолчанию"); для PROV_GOST_2012_256 или PROV_GOST_2012_512 как "1.2.643.7.1.2.5.1.1", вариант ТК26 Z.
-
При использовании ключей ГОСТ Р 34.10-2012 длиной 256 бит с провайдером PROV_GOST_2001_DH применяется тот же порядок выбора узлов замены, что и для провайдера PROV_GOST_2012_256.
-
При использовании ключей ГОСТ Р 34.10-2001 с провайдером PROV_GOST_2012_256 применяется тот же порядок выбора узлов замены, что и для провайдера PROV_GOST_2001_DH.
Отличия в использовании ключей алгоритмов ГОСТ Р 34.10-2001 и ГОСТ Р 34.10-2012
При использовании ключей алгоритмов ГОСТ Р 34.10-2001 и ГОСТ Р 34.10-2012 существуют следующие отличия.
-
При использовании ключей алгоритма ГОСТ Р 34.10-2001 для формирования или проверки электронной подписи необходимо использовать алгоритм хэширования ГОСТ Р 34.11-94.
-
При использовании ключей алгоритма ГОСТ Р 34.10-2012 длины 256 бит для формирования или проверки электронной подписи необходимо использовать алгоритм хэширования ГОСТ Р 34.11-2012 (256 бит).
-
При использовании ключей алгоритма ГОСТ Р 34.10-2012 длины 512 бит для формирования или проверки электронной подписи необходимо использовать алгоритм хэширования ГОСТ Р 34.11-2012 (512 бит).
-
Долговременные ключи ГОСТ Р 34.10-2001 могут быть экспортированы при помощи алгоритмов CALG_PRO_EXPORT и CALG_PRO12_EXPORT.
-
Долговременные ключи ГОСТ Р 34.10-2012 могут быть экспортированы только при помощи алгоритма CALG_PRO12_EXPORT.
Заметим, что для экспорта сессионных ключей могут использоваться алгоритмы CALG_SIMPLE_EXPORT, CALG_PRO_EXPORT и CALG_PRO12_EXPORT.
Установка параметров ключей алгоритмов электронной подписи и Диффи-Хеллмана
Идентификаторы параметров долговременных и эфемерных ключей электронной подписи и Диффи-Хеллмана, соответствующих используемому типу провайдера, могут быть установлены и/или получены с использованием функций CPGetProvParam() / CPSetProvParam() и CPSetKeyParam() / CPGetKeyParam() с флагами PP_SIGNATUREOID/PP_DHOID и KP_DHOID соответственно. Для создания эфемерных ключей, не соответствующих используемому типу провайдера, с необходимыми параметрами необходимо сначала устанавливать данные параметры явным образом с использованием функции SetKeyParam с параметром KP_DHOID, после чего выработать значение ключа с помощью функции CPSetKeyParam() с параметром KP_X. Внимание! Параметры эфемерных ключей, не соответствующих типу провайдера, по умолчанию не определены.