Configuración de Bring Your Own Key (BYOK)

Completado

Escenario

Un cliente de Key Vault desea transferir de forma segura una clave desde su módulo de seguridad de hardware (HSM) local fuera de Azure, en el HSM que respalda Azure Key Vault. El proceso de importación de una clave generada fuera de Key Vault se conoce como Bring Your Own Key (BYOK).

A continuación se muestran los requisitos:

  • La clave que se va a transferir nunca existe fuera de un HSM en texto plano.
  • Fuera de un HSM, la clave que se va a transferir siempre está protegida por una clave contenida en el HSM de Azure Key Vault.

Terminología

nombre de clave tipo de clave Origen Descripción
Clave de intercambio de claves (KEK) RSA Azure Key Vault HSM Un par de claves RSA con respaldo de HSM generado en Azure Key Vault
Clave de envoltura AES HSM del proveedor Una clave AES [efímera] generada por HSM local
Clave de destino RSA, EC, AES (solo HSM administrado) HSM del proveedor Clave que se va a transferir al HSM de Azure Key Vault

Clave de intercambio de claves (KEK): se trata de una clave respaldada por HSM generada por el cliente dentro del almacén de claves destinado a la importación de la clave BYOK (Bring Your Own Key). La KEK debe tener las siguientes propiedades:

  • Debe ser una clave de RSA-HSM, con un tamaño de 4096 bits, 3072 bits o 2048 bits.
  • Sus operaciones clave (key_ops) se limitan a "importar", lo que permite su uso exclusivamente durante el proceso BYOK.
  • Debe residir en la misma bóveda donde se va a importar la Clave de Destino.

Pasos del usuario

Para realizar una transferencia de claves:

  1. Genere KEK.
  2. Recupere la clave pública de la KEK.
  3. Con la herramienta BYOK proporcionada por el proveedor de HSM, importe la KEK en el HSM de destino y exporte la clave de destino protegida por la KEK.
  4. Importe la clave de destino protegida en Azure Key Vault.

Los clientes usan la herramienta BYOK y la documentación proporcionadas por el proveedor de HSM para completar los pasos 3. Genera un blob de transferencia de claves (un archivo ".byok").

Restricciones de HSM

El HSM existente puede aplicar restricciones en las claves que administran, entre las que se incluyen:

  • Es posible que tenga que configurar el HSM para permitir la exportación basada en encapsulado de claves.
  • La clave de destino puede necesitar ser marcada Atributo Cryptoki (CKA)_EXTRACTABLE para que el HSM permita la exportación controlada.
  • En algunos casos, la KEK y la clave de ajuste pueden tener que marcarse como CKA_TRUSTED, lo que permite que se use para encapsular las claves en el HSM.

La configuración del HSM de origen es, por lo general, fuera del ámbito de esta especificación. Microsoft espera que el proveedor de HSM genere documentación que acompaña a su herramienta BYOK para incluir estos pasos de configuración.

Nota

Se pueden realizar varios de estos pasos mediante otras interfaces, como Azure PowerShell y Azure Portal. También se pueden realizar mediante programación mediante funciones equivalentes en el SDK de Key Vault.

Generar KEK

Use el comando az keyvault key create para crear KEK con operaciones de clave establecidas para importar. Anote el identificador clave "kid" devuelto por el siguiente comando.

az keyvault key create --kty RSA-HSM --size 4096 --name KEKforBYOK --ops import --vault-name ContosoKeyVaultHSM




Los servicios admiten diferentes longitudes de KEK; Azure SQL, por ejemplo, solo admite longitudes de clave de 2048 o 3072 bytes.

Recuperar la clave pública de la KEK

Descargue la parte de clave pública de la KEK y almacénela en un archivo PEM.

az keyvault key download --name KEKforBYOK --vault-name ContosoKeyVaultHSM --file KEKforBYOK.publickey.pem




Generación de blobs de transferencia de claves mediante la herramienta BYOK proporcionada por el proveedor de HSM

Use la herramienta BYOK proporcionado por el proveedor de HSM para crear un blob de transferencia de claves (almacenado como un archivo ".byok"). Clave pública KEK como .Privacy-Enhanced mail (archivo.pem) será una de las entradas de esta herramienta.

Blob de transferencia de claves

A largo plazo, Microsoft quiere usar PKCS#11 CKM_RSA_AES_KEY_WRAP mecanismo para transferir la clave de destino a Azure Key Vault, ya que este mecanismo genera un único blob y, lo que es más importante, la clave AES intermedia se controla mediante los dos HSM y se garantiza que es efímero. Este mecanismo no está disponible actualmente en algunos HSM, pero la combinación de proteger la clave de destino con CKM_AES_KEY_WRAP_PAD mediante una clave AES y proteger la clave AES con CKM_RSA_PKCS_OAEP genera un blob equivalente.

El texto no cifrado de la clave de destino depende del tipo de clave:

  • Para una clave RSA, la codificación ASN.1 DER de clave privada [RFC3447] encapsulada en PKCS#8 [RFC5208]
  • Para una clave EC, la codificación ASN.1 DER de clave privada [RFC5915] encapsulada en PKCS#8 [RFC5208]
  • Para una clave de octeto, los bytes sin formato de la clave

Los bytes de la clave en texto plano se transforman mediante el mecanismo de CKM_RSA_AES_KEY_WRAP:

  • Se genera una clave AES efímera y se cifra con la clave RSA de envoltura mediante RSA-OAEP con SHA1.
  • La clave de texto plano codificada se cifra usando la clave AES con AES Key Wrap with Padding (Encapsulado de claves AES con relleno).
  • La clave AES cifrada y la clave de texto no cifrado se concatenan para generar el blob de texto cifrado final.

El formato del blob de transferencia usa la serialización compacta de JSON Web Encryption (RFC7516) principalmente como un vehículo para entregar los metadatos necesarios al servicio para el descifrado correcto.