Configurar 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 indican los requisitos:

  • La clave que se va a transferir nunca existe fuera de un HSM en formato de texto sin formato.
  • 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 HSM de Azure Key Vault Un par de claves RSA respaldadas por HSM generado en Azure Key Vault.
Clave de encapsulado 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 La clave que se va a transferir al HSM de Azure Key Vault.

Clave de intercambio de claves (KEK): Se trata de una clave basada en 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 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 el mismo almacén donde se va a importar la clave de destino.

Pasos de usuario

Para realizar una transferencia de claves:

  1. Generar la KEK.
  2. Recuperar la clave pública de la KEK.
  3. Use la herramienta BYOK suministrada por el proveedor de HSM para importar la KEK en el HSM de destino y exportar la clave de destino protegida por la KEK.
  4. Importar la clave de destino protegida en Azure Key Vault.

Los clientes utilizan la herramienta BYOK y la documentación suministrada por el proveedor de HSM para completar el paso 3. Genera un Blob de transferencia de claves (un archivo ".byok").

Restricciones de HSM

Los módulos HSM existentes pueden aplicar restricciones en la clave que administran, entre las que se incluyen:

  • Es posible que sea necesario configurar el módulo HSM para permitir la exportación basada en el encapsulado de claves.
  • Es posible que sea necesario marcar la clave de destino atributo Cryptoki (CKA)_EXTRACTABLE para que el HSM permita la exportación controlada
  • En algunos casos, es posible que la KEK y la clave de ajuste deban marcarse como CKA_TRUSTED, lo que permite que se use para encapsular las claves en HSM.

Por lo general, la configuración del HSM de origen está fuera del ámbito de esta especificación. Microsoft espera que el proveedor de HSM genere la documentación que acompaña a la herramienta BYOK de modo que incluya 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 con funciones equivalentes en Key Vault SDK.

Generar la KEK

Use el comando az keyvault key create para crear KEK con las operaciones de clave establecidas para importar. Anote el identificador de clave, "kid", que devuelve 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.

Descargar la parte de la clave pública de la KEK y guardarla en un archivo PEM.

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




Generar el blob de transferencia de claves con la herramienta de BYOK suministrada por el proveedor de HSM.

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

Blob de transferencia de claves

A largo plazo, Microsoft optaría por usar el mecanismo de CKM_RSA_AES_KEY_WRAP de PKCS#11 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 está garantizado que será efímera. Actualmente, este mecanismo no está disponible en algunos HSM, pero la combinación de protección de la clave de destino con CKM_AES_KEY_WRAP_PAD mediante una clave AES y la protección de 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 la clave privada [RFC3447] encapsulada en PKCS#8 [RFC5208]
  • Para una clave EC, la codificación ASN.1 DER de la 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 de texto no cifrado se transforman mediante el mecanismo CKM_RSA_AES_KEY_WRAP:

  • Se genera una clave AES efímera y se cifra con la clave RSA de encapsulado mediante RSA-OAEP con SHA1.
  • La clave de texto no cifrado codificada se cifra con la clave AES mediante el encapsulado de claves AES con relleno.
  • La clave AES cifrada y la clave de texto no cifrado cifrada se concatenan para generar el blob de texto cifrado final.

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