Поделиться через


Функция BCryptExportKey (bcrypt.h)

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

Синтаксис

NTSTATUS BCryptExportKey(
  [in]  BCRYPT_KEY_HANDLE hKey,
  [in]  BCRYPT_KEY_HANDLE hExportKey,
  [in]  LPCWSTR           pszBlobType,
  [out] PUCHAR            pbOutput,
  [in]  ULONG             cbOutput,
  [out] ULONG             *pcbResult,
  [in]  ULONG             dwFlags
);

Параметры

[in] hKey

Дескриптор ключа для экспорта.

[in] hExportKey

Дескриптор ключа, с помощью которого необходимо упаковать экспортируемый ключ. Используйте этот параметр при экспорте BLOB-объектов типа BCRYPT_AES_WRAP_KEY_BLOB; в противном случае задайте для него значение NULL.

Замечание

 Дескриптор hExportKey должен быть предоставлен тем же поставщиком, который предоставил дескриптор hKey , и hExportKey должен быть дескриптором симметричного ключа, который можно использовать в алгоритме упаковки ключей уровня " Расширенный стандарт шифрования " (AES). Если дескриптор hKey находится у поставщика Майкрософт, hExportKey должен быть дескриптором ключа AES.

Windows Server 2008 и Windows Vista: Этот параметр не используется и должен иметь значение NULL.

[in] pszBlobType

Строка Юникода, завершающая значение NULL, содержащая идентификатор, указывающий тип экспортируемых BLOB-объектов. Это может быть одно из следующих значений.

Ценность Значение
BCRYPT_AES_WRAP_KEY_BLOB Экспорт ключа AES, завернутого в оболочку. Параметр hExportKey должен ссылаться на допустимый указатель BCRYPT_KEY_HANDLE на ключ шифрования ключа, а ключ, представленный параметром hKey , должен иметь длину в 8 байтов.

Windows Server 2008 и Windows Vista: Этот тип BLOB не поддерживается.
BCRYPT_DH_PRIVATE_BLOB Экспорт пары открытого и закрытого ключа Diffie-Hellman. Буфер pbOutput получает BCRYPT_DH_KEY_BLOB структуру сразу после ключевых данных.
BCRYPT_DH_PUBLIC_BLOB Экспорт открытого ключа Diffie-Hellman. Буфер pbOutput получает BCRYPT_DH_KEY_BLOB структуру сразу после ключевых данных.
BCRYPT_DSA_PRIVATE_BLOB Экспорт пары открытого и закрытого ключа DSA. Буфер pbOutput получает BCRYPT_DSA_KEY_BLOB или BCRYPT_DSA_KEY_BLOB_V2 структуру сразу после ключевых данных. BCRYPT_DSA_KEY_BLOB используется для длины ключа от 512 до 1024 битов. BCRYPT_DSA_KEY_BLOB_V2 используется для длины ключей, превышающей 1024 бит, но меньше или равно 3072 битам.

Windows 8: Начинается поддержка BCRYPT_DSA_KEY_BLOB_V2 .
BCRYPT_DSA_PUBLIC_BLOB Экспорт открытого ключа DSA. Буфер pbOutput получает BCRYPT_DSA_KEY_BLOB или BCRYPT_DSA_KEY_BLOB_V2 структуру сразу после ключевых данных. BCRYPT_DSA_KEY_BLOB используется для длины ключа от 512 до 1024 битов. BCRYPT_DSA_KEY_BLOB_V2 используется для длины ключей, превышающей 1024 бит, но меньше или равно 3072 битам.

Windows 8: Начинается поддержка BCRYPT_DSA_KEY_BLOB_V2 .
BCRYPT_ECCPRIVATE_BLOB Экспорт закрытого ключа с многоточием кривой (ECC). Буфер pbOutput получает BCRYPT_ECCKEY_BLOB структуру сразу после ключевых данных.
BCRYPT_ECCPUBLIC_BLOB Экспорт открытого ключа ECC. Буфер pbOutput получает BCRYPT_ECCKEY_BLOB структуру сразу после ключевых данных.
BCRYPT_KEY_DATA_BLOB Экспорт симметричного ключа в BLOB-объект данных. Буфер pbOutput получает BCRYPT_KEY_DATA_BLOB_HEADER структуру сразу после ключа BLOB.
BCRYPT_MLKEM_PUBLIC_BLOB BLOB - это ML-KEM BLOB, который обеспечивает импорт и экспорт стандартных байтов, закодированных ML-KEM ключей инкапсулирования на FIPS 203. Буфер pbOutput должен содержать BCRYPT_MLKEM_KEY_BLOB структуру, содержащую ключ инкапсулации KEM с кодировкой байтов, BCRYPT_MLKEM_PUBLIC_MAGIC и набор параметров ML-KEM.
BCRYPT_MLKEM_PRIVATE_BLOB BLOB — это ML-KEM BLOB,который обеспечивает импорт и экспорт стандартных байтовых ключей, закодированных ML-KEM декапсуляции на FIPS 203. Буфер pbOutput должен содержать структуру BCRYPT_MLKEM_KEY_BLOB , содержащую ключ декапсуляции KEM с кодировкой байтов, BCRYPT_MLKEM_PRIVATE_MAGIC и набор параметров ML-KEM.
BCRYPT_MLKEM_PRIVATE_SEED_BLOB BLOB — это ML-KEM BLOB, который обеспечивает импорт и экспорт семян ML-KEM на FIPS 203. Буфер pbOutput должен содержать структуру BCRYPT_MLKEM_KEY_BLOB , содержащую начальное значение KEM, BCRYPT_MLKEM_SEED_MAGIC и набор параметров ML-KEM.
BCRYPT_OPAQUE_KEY_BLOB Экспорт симметричного ключа в формате, относящееся к одному поставщику служб шифрования (CSP). Непрозрачные BLOB-объекты не переносимы и должны быть импортированы с помощью того же поставщика служб CSP, который создал БОЛЬШОЙ ДВОИЧНЫй объект. Непрозрачные BLOB-объекты предназначены только для межпроцессного передачи ключей и не подходят для сохранения и чтения в разных версиях поставщика.
BCRYPT_PQDSA_PUBLIC_BLOB BLOB — это BLOB-объект ML-DSA, SLH-DSA, LMS или BLOB-объект XMSS, который обеспечивает импорт и экспорт открытых ключей цифровой подписи PQ на FIPS 204 и 205. Буфер pbOutput должен содержать BCRYPT_PQDSA_KEY_BLOB структуру, содержащую ключевые материалы, открытые магии и набор параметров PQ.
BCRYPT_PQDSA_PRIVATE_BLOB BLOB — это BLOB-объект ML-DSA, SLH-DSA, LMS или BLOB-объект XMSS, который обеспечивает импорт и экспорт закрытых ключей цифровой подписи PQ на FIPS 204 и 205. Буфер pbOutput должен содержать BCRYPT_PQDSA_KEY_BLOB структуру, содержащую ключевой материал, частный магия и набор параметров PQ.
BCRYPT_PQDSA_PRIVATE_SEED_BLOB BLOB — это BLOB-объект ML-DSA, SLH-DSA, LMS или BLOB-объект XMSS, который обеспечивает импорт и экспорт частных семян цифровой подписи PQ на FIPS 204 и 205. Буфер pbOutput должен содержать BCRYPT_PQDSA_KEY_BLOB структуру, содержащую начальное значение, магию частного начального значения и набор параметров PQ.
BCRYPT_PRIVATE_KEY_BLOB Экспорт универсального закрытого ключа любого типа. Закрытый ключ не обязательно содержит открытый ключ. Тип ключа в этом BLOB-объекте определяется магическим элементом структуры BCRYPT_KEY_BLOB .
BCRYPT_PUBLIC_KEY_BLOB Экспорт универсального открытого ключа любого типа. Тип ключа в этом BLOB-объекте определяется магическим элементом структуры BCRYPT_KEY_BLOB .
BCRYPT_RSAFULLPRIVATE_BLOB Экспорт полной пары открытого и закрытого ключа RSA. Буфер pbOutput получает BCRYPT_RSAKEY_BLOB структуру сразу после ключевых данных. Этот BLOB-объект будет содержать дополнительные ключевые материалы по сравнению с типом BCRYPT_RSAPRIVATE_BLOB .
BCRYPT_RSAPRIVATE_BLOB Экспорт пары открытого и закрытого ключа RSA. Буфер pbOutput получает BCRYPT_RSAKEY_BLOB структуру сразу после ключевых данных.
BCRYPT_RSAPUBLIC_BLOB Экспорт открытого ключа RSA. Буфер pbOutput получает BCRYPT_RSAKEY_BLOB структуру сразу после ключевых данных.
LEGACY_DH_PRIVATE_BLOB Экспорт устаревшей Diffie-Hellman BLOB-объект закрытого ключа версии 3 , содержащий пару открытых и закрытых ключей Diffie-Hellman, которую можно импортировать с помощью CryptoAPI.
LEGACY_DH_PUBLIC_BLOB Экспорт устаревшего blOB-объектаDiffie-Hellman версии 3 с открытым ключом , который содержит открытый ключ Diffie-Hellman, который можно импортировать с помощью CryptoAPI.
LEGACY_DSA_PRIVATE_BLOB Экспорт пары открытого и закрытого ключа DSA в форме, которую можно импортировать с помощью CryptoAPI.
LEGACY_DSA_PUBLIC_BLOB Экспорт открытого ключа DSA в форме, которую можно импортировать с помощью CryptoAPI.
LEGACY_DSA_V2_PRIVATE_BLOB Экспорт закрытого ключа DSA версии 2 в форме, которую можно импортировать с помощью CryptoAPI.
LEGACY_RSAPRIVATE_BLOB Экспорт пары открытого и закрытого ключа RSA в форме, которую можно импортировать с помощью CryptoAPI.
LEGACY_RSAPUBLIC_BLOB Экспорт открытого ключа RSA в форме, которую можно импортировать с помощью CryptoAPI.

[out] pbOutput

Адрес буфера, который получает ключ BLOB. Параметр cbOutput содержит размер этого буфера. Если этот параметр задан NULL, эта функция будет размещать требуемый размер в байтах в ULONG , на который указывает параметр pcbResult .

[in] cbOutput

Содержит размер в байтах буфера pbOutput .

[out] pcbResult

Указатель на ULONG , получающий количество байтов, скопированных в буфер pbOutput . Если параметр pbOutput имеет NULLзначение, эта функция будет размещать требуемый размер в байтах в ULONG , на который указывает этот параметр.

[in] dwFlags

Набор флагов, изменяющих поведение этой функции. Для этой функции флаги не определены.

Этот параметр должен быть равен нулю для ключей ML-KEM.

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

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

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

Возвращаемый код Описание
STATUS_SUCCESS Функция была успешной.
STATUS_BUFFER_TOO_SMALL Размер, указанный параметром cbOutput , недостаточно велик для хранения зашифрованного текста. Если буфер pbOutput слишком мал, pcbResult получает количество байтов, необходимых для pbOutput.
STATUS_INVALID_HANDLE Дескриптор ключа в параметре hKey hKey недопустим.
СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР Один или несколько параметров недопустимы.
STATUS_NOT_SUPPORTED Указанный тип BLOB не поддерживается поставщиком. Если предоставленный дескриптор ключа не поддерживает экспорт частного начального значения. См. примечания.

Замечания

Обратите внимание, что экспорт ML-KEM закрытого начального значения будет доступен только в том случае, если вызывающий объект использовал BCrypt для создания ключа или дескриптора был создан путем импорта частного начального значения.

В зависимости от того, какие режимы процессора поддерживает поставщик, BCryptExportKey можно вызывать из пользовательского режима или режима ядра. Вызывающие серверы режима ядра могут выполняться в PASSIVE_LEVELIRQL или DISPATCH_LEVEL IRQL. Если текущий уровень IRQL DISPATCH_LEVEL, дескриптор, предоставленный параметром hKey , должен быть производным от дескриптора алгоритма, возвращенного поставщиком, который был открыт с флагом BCRYPT_PROV_DISPATCH , и все указатели, передаваемые функции BCryptExportKey , должны ссылаться на неупакованную (или заблокированную) память.

Чтобы вызвать эту функцию в режиме ядра, используйте Cng.libпакет средств разработки драйверов (DDK). Windows Server 2008 и Windows Vista: Чтобы вызвать эту функцию в режиме ядра, используйте Ksecdd.lib.

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows Vista [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2008 [классические приложения | Приложения UWP]
целевая платформа Виндоус
Заголовок bcrypt.h
Библиотека Bcrypt.lib
Библиотека dll Bcrypt.dll

См. также

BCryptImportKey

BCryptImportKeyPair