Compartir a través de


Función BCryptExportKey (bcrypt.h)

La función BCryptExportKey exporta una clave a un BLOB de memoria que se puede conservar para su uso posterior.

Sintaxis

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
);

Parámetros

[in] hKey

Identificador de la clave que se va a exportar.

[in] hExportKey

Identificador de la clave con la que se va a ajustar la clave exportada. Use este parámetro al exportar blobs de tipo BCRYPT_AES_WRAP_KEY_BLOB; De lo contrario, establézcalo en NULL.

Nota:

 El controlador hExportKey debe ser proporcionado por el mismo proveedor que proporcionó el identificador hKey y hExportKey debe ser un identificador para una clave simétrica que se puede usar en el algoritmo de encapsulado de claves de Advanced Encryption Standard (AES). Cuando el identificador hKey procede del proveedor de Microsoft, hExportKey debe ser un identificador de clave AES.

Windows Server 2008 y Windows Vista: Este parámetro no se usa y debe establecerse en NULL.

[in] pszBlobType

Cadena Unicode terminada en NULL que contiene un identificador que especifica el tipo de BLOB que se va a exportar. Puede ser uno de los siguientes valores.

Valor Significado
BCRYPT_AES_WRAP_KEY_BLOB Exporte una clave ajustada AES. El parámetro hExportKey debe hacer referencia a un puntero de BCRYPT_KEY_HANDLE válido a la clave de cifrado de claves y la clave representada por el parámetro hKey debe ser un múltiplo de 8 bytes de longitud.

Windows Server 2008 y Windows Vista: No se admite este tipo DE BLOB.
BCRYPT_DH_PRIVATE_BLOB Exporte un par de claves pública o privada Diffie-Hellman. El búfer pbOutput recibe una estructura BCRYPT_DH_KEY_BLOB inmediatamente seguida de los datos de clave.
BCRYPT_DH_PUBLIC_BLOB Exporte una clave pública Diffie-Hellman. El búfer pbOutput recibe una estructura BCRYPT_DH_KEY_BLOB inmediatamente seguida de los datos de clave.
BCRYPT_DSA_PRIVATE_BLOB Exporte un par de claves pública y privada de DSA. El búfer pbOutput recibe una estructura BCRYPT_DSA_KEY_BLOB o BCRYPT_DSA_KEY_BLOB_V2 inmediatamente seguida de los datos de clave. BCRYPT_DSA_KEY_BLOB se usa para longitudes de clave de 512 a 1024 bits. BCRYPT_DSA_KEY_BLOB_V2 se usa para longitudes de clave que superan los 1024 bits, pero son menores o iguales a 3072 bits.

Windows 8: Comienza la compatibilidad con BCRYPT_DSA_KEY_BLOB_V2 .
BCRYPT_DSA_PUBLIC_BLOB Exporte una clave pública DSA. El búfer pbOutput recibe una estructura BCRYPT_DSA_KEY_BLOB o BCRYPT_DSA_KEY_BLOB_V2 inmediatamente seguida de los datos de clave. BCRYPT_DSA_KEY_BLOB se usa para longitudes de clave de 512 a 1024 bits. BCRYPT_DSA_KEY_BLOB_V2 se usa para longitudes de clave que superan los 1024 bits, pero son menores o iguales a 3072 bits.

Windows 8: Comienza la compatibilidad con BCRYPT_DSA_KEY_BLOB_V2 .
BCRYPT_ECCPRIVATE_BLOB Exporte una clave privada de criptografía de curva elíptica (ECC). El búfer pbOutput recibe una estructura de BCRYPT_ECCKEY_BLOB inmediatamente seguida de los datos de clave.
BCRYPT_ECCPUBLIC_BLOB Exporte una clave pública ECC. El búfer pbOutput recibe una estructura de BCRYPT_ECCKEY_BLOB inmediatamente seguida de los datos de clave.
BCRYPT_KEY_DATA_BLOB Exporte una clave simétrica a un BLOB de datos. El búfer pbOutput recibe una estructura de BCRYPT_KEY_DATA_BLOB_HEADER inmediatamente seguida del BLOB de clave.
BCRYPT_MLKEM_PRIVATE_SEED_BLOB Exporte una clave de inicialización privada ML-KEM. El búfer pbOutput recibe una estructura de BCRYPT_MLKEM_KEY_BLOB inmediatamente seguida del conjunto de parámetros y los datos de clave.

Nota: ML-KEM identificadores de clave que contienen una clave privada que se importó mediante BCRYPT_MLKEM_PRIVATE_BLOB tienen información insuficiente para exportar una clave de inicialización privada.

Windows Insiders (compilación 27843): Comienza la compatibilidad con ML-KEM.
BCRYPT_MLKEM_PRIVATE_BLOB Exporte una clave privada (decapsulación) de ML-KEM. El búfer pbOutput recibe una estructura de BCRYPT_MLKEM_KEY_BLOB inmediatamente seguida del conjunto de parámetros y los datos de clave.

Windows Insiders (compilación 27843): Comienza la compatibilidad con ML-KEM.
BCRYPT_MLKEM_PUBLIC_BLOB Exporte una clave pública (encapsulación) de ML-KEM. El búfer pbOutput recibe una estructura de BCRYPT_MLKEM_KEY_BLOB inmediatamente seguida del conjunto de parámetros y los datos de clave.

Windows Insiders (compilación 27843): Comienza la compatibilidad con ML-KEM.
BCRYPT_OPAQUE_KEY_BLOB Exporte una clave simétrica en un formato específico de un único proveedor de servicios criptográficos (CSP). Los BLOB opacos no se pueden transferir y deben importarse mediante el mismo CSP que generó el BLOB. Los BLOB opacos solo están diseñados para usarse para la transferencia entre procesos de claves y no son adecuados para conservarse y leer entre versiones de un proveedor.
BCRYPT_PQDSA_PRIVATE_SEED_BLOB Exporte una clave de inicialización privada del algoritmo de firma digital post-quantum (PQDSA). El búfer pbOutput recibe una estructura de BCRYPT_PQDSA_KEY_BLOB inmediatamente seguida del conjunto de parámetros y los datos de clave.

Nota: Los identificadores de clave PQDSA que contienen una clave privada que se importó mediante BCRYPT_PQDSA_PRIVATE_BLOB tienen información insuficiente para exportar una clave de inicialización privada.

Windows Insiders (compilación 27843): Comienza la compatibilidad con ML-DSA.
BCRYPT_PQDSA_PRIVATE_BLOB Exporte una clave privada PQDSA. El búfer pbOutput recibe una estructura de BCRYPT_PQDSA_KEY_BLOB inmediatamente seguida del conjunto de parámetros y los datos de clave.

Windows Insiders (compilación 27843): Comienza la compatibilidad con ML-DSA.
BCRYPT_PQDSA_PUBLIC_BLOB Exporte una clave pública PQDSA. El búfer pbOutput recibe una estructura de BCRYPT_PQDSA_KEY_BLOB inmediatamente seguida del conjunto de parámetros y los datos de clave.

Windows Insiders (compilación 27843): Comienza la compatibilidad con ML-DSA.
BCRYPT_PRIVATE_KEY_BLOB Exporte una clave privada genérica de cualquier tipo. La clave privada no contiene necesariamente la clave pública. El tipo de clave de este BLOB viene determinado por el miembro Magic de la estructura BCRYPT_KEY_BLOB .
BCRYPT_PUBLIC_KEY_BLOB Exporte una clave pública genérica de cualquier tipo. El tipo de clave de este BLOB viene determinado por el miembro Magic de la estructura BCRYPT_KEY_BLOB .
BCRYPT_RSAFULLPRIVATE_BLOB Exporte un par de claves pública y privada RSA completa. El búfer pbOutput recibe una estructura de BCRYPT_RSAKEY_BLOB inmediatamente seguida de los datos de clave. Este BLOB incluirá material de clave adicional en comparación con el tipo de BCRYPT_RSAPRIVATE_BLOB .
BCRYPT_RSAPRIVATE_BLOB Exporte un par de claves pública y privada RSA. El búfer pbOutput recibe una estructura de BCRYPT_RSAKEY_BLOB inmediatamente seguida de los datos de clave.
BCRYPT_RSAPUBLIC_BLOB Exporte una clave pública RSA. El búfer pbOutput recibe una estructura de BCRYPT_RSAKEY_BLOB inmediatamente seguida de los datos de clave.
LEGACY_DH_PRIVATE_BLOB Exporte un blob de clave privada heredadaDiffie-Hellman versión 3 que contiene un par de claves pública y privada Diffie-Hellman que se puede importar mediante CryptoAPI.
LEGACY_DH_PUBLIC_BLOB Exporte un blob de clave pública heredadoDiffie-Hellman versión 3 que contiene una clave pública de Diffie-Hellman que se puede importar mediante CryptoAPI.
LEGACY_DSA_PRIVATE_BLOB Exporte un par de claves públicas y privadas de DSA en un formulario que se pueda importar mediante CryptoAPI.
LEGACY_DSA_PUBLIC_BLOB Exporte una clave pública DSA en un formulario que se pueda importar mediante CryptoAPI.
LEGACY_DSA_V2_PRIVATE_BLOB Exporte una clave privada de DSA versión 2 en un formulario que se pueda importar mediante CryptoAPI.
LEGACY_RSAPRIVATE_BLOB Exporte un par de claves pública y privada RSA en un formulario que se pueda importar mediante CryptoAPI.
LEGACY_RSAPUBLIC_BLOB Exporte una clave pública RSA en un formulario que se pueda importar mediante CryptoAPI.

[out] pbOutput

Dirección de un búfer que recibe la clave BLOB. El parámetro cbOutput contiene el tamaño de este búfer. Si este parámetro es NULL, esta función colocará el tamaño necesario, en bytes, en el ULONG al que apunta el parámetro pcbResult .

[in] cbOutput

Contiene el tamaño, en bytes, del búfer pbOutput .

[out] pcbResult

Puntero a un ULONG que recibe el número de bytes que se copiaron en el búfer pbOutput . Si el parámetro pbOutput es NULL, esta función colocará el tamaño necesario, en bytes, en la ULONG a la que apunta este parámetro.

[in] dwFlags

Conjunto de marcas que modifican el comportamiento de esta función. No se definen marcas para esta función.

Valor devuelto

Devuelve un código de estado que indica el éxito o error de la función.

Entre los códigos de retorno posibles se incluyen, entre otros, los siguientes.

Código devuelto Descripción
STATUS_SUCCESS La función se realizó correctamente.
STATUS_BUFFER_TOO_SMALL El tamaño especificado por el parámetro cbOutput no es lo suficientemente grande como para contener el texto cifrado. Si el pbOutput del búfer es demasiado pequeño, pcbResult recibe el número de bytes necesarios para pbOutput.
STATUS_INVALID_HANDLE El identificador de clave del parámetro hKey no es válido.
STATUS_INVALID_PARAMETER Uno o varios parámetros no son válidos.
STATUS_NOT_SUPPORTED El proveedor no admite el tipo DE BLOB especificado. Si el identificador de clave proporcionado no admite la exportación de la inicialización privada. Vea los comentarios.

Observaciones

Al usar un proveedor de algoritmos compatible, se puede llamar a BCryptExportKey desde el modo de usuario o el modo kernel. Los autores de llamadas en modo kernel se pueden ejecutar en PASSIVE_LEVELIRQL o DISPATCH_LEVEL IRQL. Si el nivel IRQL actual es DISPATCH_LEVEL, el identificador proporcionado en el parámetro hKey debe derivarse de un identificador de algoritmo devuelto por un proveedor que se abrió con la marca BCRYPT_PROV_DISPATCH y los punteros pasados a la función BCryptExportKey deben hacer referencia a la memoria no paginada (o bloqueada).

Para llamar a esta función en modo kernel, use Cng.lib, que forma parte del Kit de desarrollo de controladores (DDK). Windows Server 2008 y Windows Vista: Para llamar a esta función en modo kernel, use Ksecdd.lib.

Requisitos

Requisito Valor
Cliente mínimo compatible Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo admitido Windows Server 2008 [aplicaciones de escritorio | Aplicaciones para UWP]
de la plataforma de destino de Windows
encabezado bcrypt.h
Biblioteca Bcrypt.lib
DLL de Bcrypt.dll

Consulte también

BCryptImportKey

BCryptImportKeyPair