Крипто-Про CSP

CPDeriveKey

Функция CPDeriveKey() производит криптографические ключи сессии на основе значения хеш-функции, вычисленной по другим ключам, паролям или любым другим данным пользователя.

BOOL WINAPI CPDeriveKey(
  HCRYPTPROV hProv,
  ALG_ID AlgId,
  HCRYPTHASH hBaseData,
  DWORD dwFlags,
  HCRYPTKEY * phKey
);

Аргументы

hProv
[in] Дескриптор криптопровайдера. Получается при помощи функции CPAcquireContext().
AlgId
[in] Идентификатор алгоритма шифрования, для которого производится ключ.
Значение AlgId Описание
CALG_G28147 Ключ шифрования и/или имтозащиты данных по ГОСТ 28147-89. Впоследствии этот ключ может быть преобразован с помощью функции CPSetKeyParam() в ключ, на котором возможен экпорт/импорт других ключей.
CALG_TLS1_ENC_KEY Ключ шифрования на основе объекта TLS1_MASTER_HASH.
CALG_TLS1_MAC_KEY Ключ имитозащиты на основе объекта TLS1_MASTER_HASH.
hBaseData
[in] Дескриптор объекта функции хеширования, используемый для обработки входных данных.
dwFlags
[in] Флаги определяют признаки производимого ключа сессии. В настоящее время определены следующие значения флагов:
Значение dwFlags Описание
CRYPT_EXPORTABLE Если флаг установлен, то произведённый ключ может быть передан из криптопровайдера в ключевой блоб через функцию CPExportKey(). Если флаг не установлен, ключ не будет экспортируемым и будет доступен только в пределах текущей сессии приложению, которое создало этот ключ. Действие этого флага не распространяются на открытый ключ ключевых пары.
CRYPT_SERVER Если при работе с TLS флаг установлен, то создается ключ шифрования сервера, если не установлен - создается ключ шифрования клиента.
phKey
[out] Адрес, по которому функция копирует дескриптор произведённого ключа.

Возвращаемые значения:

При успешном завершении функция возвращает TRUE, в противном случае возвращается FALSE. Если возвращается FALSE, соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.
Коды возврата Описание
NTE_BAD_ALGID Параметр AlgId определяет алгоритм, который не поддерживается криптопровайдером.
NTE_BAD_FLAGS Величина dwFlags имеет ошибочное значение.
NTE_NO_MEMORY Криптопровайдер во время операции исчерпал память.
NTE_FAIL Ошибка при считывании данных из системного реестра. см. Дополнительные параметры и определения .

Примечания

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

Требования:

Windows 2000/XP/2003: Необходимо Windows 2000 SP4 или старше с Internet Explorer 6.0 или старше.
Windows NT/95/98/ME: CSP 3.0 не поддерживает (см. КриптоПро CSP 2.0 World Wide Web link ).
Solaris: 9 Update 4 или выше.
FreeBSD: FreeBSD 5.2 или выше
Linux: RedHat 7.3, RedHad 9.0.
Файл описания: Прототип описан в файле wincsp.h.
Ядро Windows NT: IRQL < DISPATCH_LEVEL

См. также:

CPDestroyKey() ,CPGenKey() ,CPDeriveKey в MS CSP World Wide Web link ,CryptDeriveKey в MS CryptoAPI 2.0 World Wide Web link

Крипто-Про CSP Версия: 3.0 Сборка 3293
Что Вы думаете по поводу данной статьи?
Закажите CD c Крипто-Про CSP