Paso 3 de la importación de material de claves: Cifrar el material de claves - AWS Key Management Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Paso 3 de la importación de material de claves: Cifrar el material de claves

Después de descargar la clave pública y el token de importación, cifre el material de claves con la clave pública que descargó y el algoritmo de encapsulamiento que especificó. Si necesita reemplazar la clave pública o el token de importación, o cambiar el algoritmo de encapsulamiento, debe descargar una nueva clave pública y un token de importación. Para obtener información sobre las claves públicas y los algoritmos de empaquetado AWS KMS compatibles, consulte Selección de una especificación de clave pública de encapsulamiento ySeleccionar un algoritmo de encapsulamiento.

El material de claves debe estar en formato binario. Para obtener información detallada, consulte Requisitos para el material de claves importado.

nota

Para los pares de claves asimétricas, cifra e importa solo la clave privada. AWS KMS deriva la clave pública de la clave privada.

Se NOT admite la siguiente combinación: material clave ECC _ NIST _P521, la especificación de clave de empaquetado pública RSA _2048 y un RSAES algoritmo de empaquetado _ _ _*. OAEP SHA

No se puede empaquetar directamente el material clave ECC _ NIST _P521 con una clave de empaquetado pública _2048. RSA Utilice una clave de empaquetado más grande o un algoritmo de empaquetado RSA _ _ AES _ KEY WRAP _ SHA _*.

Los algoritmos de empaquetado RSA AES KEY _ WRAP _ _ _ SHA _256 y RSA _ AES _ KEY _ WRAP _ SHA _1 no son compatibles en las regiones de China.

Normalmente, el material clave se cifra cuando se exporta desde el módulo de seguridad de hardware (HSM) o el sistema de gestión de claves. Para obtener información sobre cómo exportar el material clave en formato binario, consulte la documentación de su HSM sistema de administración de claves. También puede consultar la siguiente sección, que proporciona una demostración de una prueba de concepto sobre el uso de OpenSSL.

Al cifrar el material de claves, utilice el mismo algoritmo de encapsulamiento que especificó al descargar la clave pública y el token de importación. Para encontrar el algoritmo de empaquetado que especificó, consulte el evento de CloudTrail registro de la GetParametersForImportsolicitud asociada.

Generación de material de claves para realizar pruebas

Los siguientes SSL comandos de apertura generan material clave de cada tipo compatible para realizar pruebas. Estos ejemplos se proporcionan únicamente para pruebas y proof-of-concept demostraciones. En el caso de los sistemas de producción, utilice un método más seguro para generar el material de claves, como un módulo de seguridad de hardware o un sistema de administración de claves.

Para convertir las claves privadas de los pares de claves asimétricas a un formato DER codificado, canalice el comando de generación de material clave al siguiente openssl pkcs8 comando. El topk8 parámetro indica SSL a Open que tome una clave privada como entrada y devuelva una clave con el formato PKCS #8. (El comportamiento predeterminado es el contrario).

openssl pkcs8 -topk8 -outform der -nocrypt

Los siguientes comandos generan material de claves de prueba para cada uno de los tipos de clave compatibles.

  • Clave de cifrado simétrica (32 bytes)

    Este comando genera una clave simétrica de 256 bits (cadena aleatoria de 32 bytes) y la guarda en el archivo PlaintextKeyMaterial.bin. No es necesario cifrar este material de claves.

    openssl rand -out PlaintextKeyMaterial.bin 32

    Solo en las regiones de China, debe generar una clave simétrica de 128 bits (cadena aleatoria de 16 bytes).

    openssl rand -out PlaintextKeyMaterial.bin 16
  • HMACclaves

    Este comando genera una cadena de bytes aleatorios del tamaño especificado. No es necesario cifrar este material de claves.

    La longitud de la HMAC clave debe coincidir con la longitud definida por la especificación de la KMS clave. Por ejemplo, si la KMS clave es HMAC _384, debe importar una clave de 384 bits (48 bytes).

    openssl rand -out HMAC_224_PlaintextKey.bin 28 openssl rand -out HMAC_256_PlaintextKey.bin 32 openssl rand -out HMAC_384_PlaintextKey.bin 48 openssl rand -out HMAC_512_PlaintextKey.bin 64
  • RSAclaves privadas

    openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_2048_PrivateKey.der openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:3072 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_3072_PrivateKey.der openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_4096_PrivateKey.der
  • ECCclaves privadas

    openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P256_PrivateKey.der openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-384 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P384_PrivateKey.der openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-521 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P521_PrivateKey.der openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:secp256k1 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_SECG_P256K1_PrivateKey.der
  • SM2claves privadas (solo para las regiones de China)

    openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:sm2 | openssl pkcs8 -topk8 -outform der -nocrypt > SM2_PrivateKey.der

Ejemplos de cifrado de material clave con Open SSL

En los siguientes ejemplos se muestra cómo utilizar Open SSL para cifrar el material de claves con la clave pública que ha descargado. Para cifrar el material clave con una clave SM2 pública (solo para las regiones de China), utilice la SM2OfflineOperationHelper clase. Para obtener más información sobre los tipos de materiales clave que admite cada algoritmo de empaquetado, consulteSeleccionar un algoritmo de encapsulamiento.

importante

Estos ejemplos son solo una demostración de la prueba de concepto. En el caso de los sistemas de producción, utilice un método más seguro (como un sistema comercial HSM o de gestión de claves) para generar y almacenar el material clave.

Se NOT admite la siguiente combinación: material clave ECC _ NIST _P521, la especificación de clave de empaquetado pública RSA _2048 y un algoritmo de empaquetado RSAES _ _ OAEP _*. SHA

No se puede empaquetar directamente el material clave ECC _ NIST _P521 con una clave de empaquetado pública _2048. RSA Utilice una clave de empaquetado más grande o un algoritmo de empaquetado RSA _ _ AES _ KEY WRAP _ SHA _*.

RSAES_OAEP_SHA_1

AWS KMS admite el RSAES _ OAEP _ SHA _1 para claves de cifrado simétricas (SYMMETRIC_DEFAULT), claves privadas de curva elíptica (ECC), claves SM2 privadas y claves. HMAC

RSAES_ OAEP _ SHA _1 no es compatible con las claves privadas. RSA Además, no puede utilizar una clave de empaquetado pública RSA _2048 con ningún algoritmo de empaquetado RSAES _ OAEP _ SHA _* para empaquetar una clave privada ECC _ NIST _P521 (secp521r1). Debe utilizar una clave de empaquetado pública más grande o un algoritmo de empaquetado _ _ _. RSA AES KEY WRAP

El siguiente ejemplo cifra el material de claves con la clave pública que ha descargado y el algoritmo de empaquetado RSAES OAEP _ _ SHA _1, y lo guarda en el EncryptedKeyMaterial.bin archivo.

En este ejemplo:

  • WrappingPublicKey.bin es el archivo que contiene la clave pública de empaquetado descargada.

  • PlaintextKeyMaterial.bin es el archivo que contiene el material clave que está cifrando, comoPlaintextKeyMaterial.bin, HMAC_384_PlaintextKey.bin o. ECC_NIST_P521_PrivateKey.der

$ openssl pkeyutl \ -encrypt \ -in PlaintextKeyMaterial.bin \ -out EncryptedKeyMaterial.bin \ -inkey WrappingPublicKey.bin \ -keyform DER \ -pubin \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha1
RSAES_OAEP_SHA_256

AWS KMS admite el RSAES _ OAEP _ SHA _256 para claves de cifrado simétricas (SYMMETRIC_DEFAULT), claves privadas de curva elíptica (ECC), claves SM2 privadas y claves. HMAC

RSAES_ OAEP _ SHA _256 no es compatible con las claves privadas. RSA Además, no puede utilizar una clave de empaquetado pública RSA _2048 con ningún algoritmo de empaquetado RSAES _ OAEP _ SHA _* para empaquetar una clave privada ECC _ NIST _P521 (secp521r1). Debe utilizar una clave pública más grande o un algoritmo de empaquetado _ _ _. RSA AES KEY WRAP

El ejemplo siguiente cifra el material clave con la clave pública que ha descargado y el algoritmo de empaquetado RSAES OAEP _ _ SHA _256, y lo guarda en el EncryptedKeyMaterial.bin archivo.

En este ejemplo:

  • WrappingPublicKey.bin es el archivo que contiene la clave de empaquetado pública descargada. Si ha descargado la clave pública desde la consola, este archivo se denomina wrappingKey_KMS key_key_ID_timestamp (por ejemplo, wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909).

  • PlaintextKeyMaterial.bin es el archivo que contiene el material clave que está cifrando, como PlaintextKeyMaterial.binHMAC_384_PlaintextKey.bin, o. ECC_NIST_P521_PrivateKey.der

$ openssl pkeyutl \ -encrypt \ -in PlaintextKeyMaterial.bin \ -out EncryptedKeyMaterial.bin \ -inkey WrappingPublicKey.bin \ -keyform DER \ -pubin \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha256 \ -pkeyopt rsa_mgf1_md:sha256
RSA_AES_KEY_WRAP_SHA_1

El algoritmo de empaquetado RSA AES KEY _ WRAP _ _ SHA _1 implica dos operaciones de cifrado.

  1. Cifre el material de su clave con una clave AES simétrica que usted genere y un algoritmo de cifrado AES simétrico.

  2. Cifre la clave AES simétrica que utilizó con la clave pública que descargó y el algoritmo de empaquetado RSAES _ _ OAEP _1. SHA

El algoritmo de empaquetado RSA AES _ KEY _ WRAP _ SHA _1 requiere la versión 3 de Open. SSL x o posterior.

  1. Genere una clave de cifrado AES simétrica de 256 bits

    Este comando genera una clave de cifrado AES simétrica que consta de 256 bits aleatorios y la guarda en el archivo aes-key.bin

    # Generate a 32-byte AES symmetric encryption key $ openssl rand -out aes-key.bin 32
  2. Cifre el material de su clave con la clave de cifrado AES simétrica

    Este comando cifra el material de la clave con la clave de cifrado AES simétrica y guarda el material de la clave cifrada en el archivo. key-material-wrapped.bin

    En este comando de ejemplo:

    • PlaintextKeyMaterial.bin es el archivo que contiene el material clave que está importando, comoPlaintextKeyMaterial.bin, HMAC_384_PlaintextKey.binRSA_3072_PrivateKey.der, oECC_NIST_P521_PrivateKey.der.

    • aes-key.bin es el archivo que contiene la clave de cifrado AES simétrica de 256 bits que generó en el comando anterior.

    # Encrypt your key material with the AES symmetric encryption key $ openssl enc -id-aes256-wrap-pad \ -K "$(xxd -p < aes-key.bin | tr -d '\n')" \ -iv A65959A6 \ -in PlaintextKeyMaterial.bin\ -out key-material-wrapped.bin
  3. Cifre la clave de cifrado AES simétrica con la clave pública

    Este comando cifra la clave de cifrado AES simétrica con la clave pública que ha descargado y el algoritmo de empaquetado RSAES _ OAEP _ SHA _1, la DER codifica y la guarda en el archivo. aes-key-wrapped.bin

    En este comando de ejemplo:

    • WrappingPublicKey.bin es el archivo que contiene la clave de empaquetado pública descargada. Si ha descargado la clave pública desde la consola, este archivo se denomina wrappingKey_KMS key_key_ID_timestamp (por ejemplo, wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909).

    • aes-key.bin es el archivo que contiene la clave de cifrado AES simétrica de 256 bits que generó en el primer comando de esta secuencia de ejemplo.

    # Encrypt your AES symmetric encryption key with the downloaded public key $ openssl pkeyutl \ -encrypt \ -in aes-key.bin \ -out aes-key-wrapped.bin \ -inkey WrappingPublicKey.bin \ -keyform DER \ -pubin \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha1 \ -pkeyopt rsa_mgf1_md:sha1
  4. Generación del archivo que se va a importar

    Concatene el archivo con el material de la clave cifrada y el archivo con la clave cifrada. AES Guárdelos en el archivo EncryptedKeyMaterial.bin, que es el archivo que va a importar en Paso 4: Importar el material de claves.

    En este comando de ejemplo:

    • key-material-wrapped.bin es el archivo que contiene el material clave cifrado.

    • aes-key-wrapped.bin es el archivo que contiene la clave de AES cifrado cifrada.

    # Combine the encrypted AES key and encrypted key material in a file $ cat aes-key-wrapped.bin key-material-wrapped.bin > EncryptedKeyMaterial.bin
RSA_AES_KEY_WRAP_SHA_256

El algoritmo de empaquetado RSA AES KEY _ WRAP _ _ _ SHA _256 implica dos operaciones de cifrado.

  1. Cifre el material de su clave con una clave AES simétrica que usted genere y un algoritmo de cifrado AES simétrico.

  2. Cifre la clave AES simétrica que utilizó con la clave pública que descargó y el algoritmo de empaquetado RSAES _ _ OAEP _256. SHA

El algoritmo de empaquetado RSA AES _ KEY _ WRAP _ SHA _256 requiere la versión 3 de Open. SSL x o posterior.

  1. Genere una clave de cifrado AES simétrica de 256 bits

    Este comando genera una clave de cifrado AES simétrica que consta de 256 bits aleatorios y la guarda en el archivo aes-key.bin

    # Generate a 32-byte AES symmetric encryption key $ openssl rand -out aes-key.bin 32
  2. Cifre el material de su clave con la clave de cifrado AES simétrica

    Este comando cifra el material de la clave con la clave de cifrado AES simétrica y guarda el material de la clave cifrada en el archivo. key-material-wrapped.bin

    En este comando de ejemplo:

    • PlaintextKeyMaterial.bin es el archivo que contiene el material clave que está importando, comoPlaintextKeyMaterial.bin, HMAC_384_PlaintextKey.binRSA_3072_PrivateKey.der, oECC_NIST_P521_PrivateKey.der.

    • aes-key.bin es el archivo que contiene la clave de cifrado AES simétrica de 256 bits que generó en el comando anterior.

    # Encrypt your key material with the AES symmetric encryption key $ openssl enc -id-aes256-wrap-pad \ -K "$(xxd -p < aes-key.bin | tr -d '\n')" \ -iv A65959A6 \ -in PlaintextKeyMaterial.bin\ -out key-material-wrapped.bin
  3. Cifre la clave de cifrado AES simétrica con la clave pública

    Este comando cifra la clave de cifrado AES simétrica con la clave pública que ha descargado y el algoritmo de empaquetado RSAES _ OAEP _ SHA _256, la DER codifica y la guarda en el archivo. aes-key-wrapped.bin

    En este comando de ejemplo:

    • WrappingPublicKey.bin es el archivo que contiene la clave de empaquetado pública descargada. Si ha descargado la clave pública desde la consola, este archivo se denomina wrappingKey_KMS key_key_ID_timestamp (por ejemplo, wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909).

    • aes-key.bin es el archivo que contiene la clave de cifrado AES simétrica de 256 bits que generó en el primer comando de esta secuencia de ejemplo.

    # Encrypt your AES symmetric encryption key with the downloaded public key $ openssl pkeyutl \ -encrypt \ -in aes-key.bin \ -out aes-key-wrapped.bin \ -inkey WrappingPublicKey.bin \ -keyform DER \ -pubin \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha256 \ -pkeyopt rsa_mgf1_md:sha256
  4. Generación del archivo que se va a importar

    Concatene el archivo con el material de la clave cifrada y el archivo con la clave cifrada. AES Guárdelos en el archivo EncryptedKeyMaterial.bin, que es el archivo que va a importar en Paso 4: Importar el material de claves.

    En este comando de ejemplo:

    • key-material-wrapped.bin es el archivo que contiene el material clave cifrado.

    • aes-key-wrapped.bin es el archivo que contiene la clave de AES cifrado cifrada.

    # Combine the encrypted AES key and encrypted key material in a file $ cat aes-key-wrapped.bin key-material-wrapped.bin > EncryptedKeyMaterial.bin

Continúe en Paso 4: Importar el material de claves.