

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: Cifrar el material de claves
<a name="importing-keys-encrypt-key-material"></a>

Después de [descargar la clave pública y el token de importación](importing-keys-get-public-key-and-token.md), 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](importing-keys-get-public-key-and-token.md#select-wrapping-key-spec) y[Seleccionar un algoritmo de encapsulamiento](importing-keys-get-public-key-and-token.md#select-wrapping-algorithm).

El material de claves debe estar en formato binario. Para obtener información detallada, consulta [Requisitos para el material de claves importado](importing-keys-conceptual.md#importing-keys-material-requirements).

**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.  
NO se admite la siguiente combinación: material de claves ECC\$1NIST\$1P521, la especificación de clave pública de encapsulamiento RSA\$12048 y un algoritmo de encapsulamiento RSAES\$1OAEP\$1SHA\$1\$1.  
No se puede encapsular directamente el material de claves ECC\$1NIST\$1P521 con una clave pública de encapsulamiento RSA\$12048. Utilice una clave de encapsulamiento más grande o un algoritmo de encapsulamiento RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1\$1.  
Los algoritmos de encapsulamiento RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 y RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 no se admiten en las regiones de China.

Normalmente, el material de claves se cifra al exportarlo desde el módulo de seguridad de hardware (HSM) o el sistema de administración de claves. Para obtener información sobre cómo exportar el material de claves en formato binario, consulte la documentación de su HSM o sistema de administración de claves. También puede consultar la siguiente sección que proporciona una demostración de prueba de concepto con 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](importing-keys-get-public-key-and-token.md). Para encontrar el algoritmo de empaquetado que especificó, consulte el evento de CloudTrail registro de la [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html)solicitud asociada.

## Generación de material de claves para realizar pruebas
<a name="importing-keys-example-key-material"></a>

Los siguientes comandos de OpenSSL generan material de claves 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 cifrado en DER, transfiera el comando de generación de material de claves al siguiente comando `openssl pkcs8`. El parámetro `topk8` indica a OpenSSL que tome una clave privada como entrada y devuelva una clave con formato PKCS \$18. (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
  ```
+ Claves HMAC

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

  La longitud de la clave HMAC debe coincidir con la longitud definida en la especificación de clave de la clave de KMS. Por ejemplo, si la clave de KMS es HMAC\$1384, 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
  ```
+ Claves privadas RSA

  ```
  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
  ```
+ Claves privadas ECC

  ```
  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
  ```
+ SM2 claves privadas (solo 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 de claves con OpenSSL
<a name="importing-keys-encrypt-key-material-openssl"></a>

Los siguientes ejemplos muestran cómo utilizar [OpenSSL](https://openssl.org/) 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](offline-operations.md#key-spec-sm-offline-helper). Para obtener más información sobre los tipos de materiales de claves que admite cada algoritmo de encapsulamiento, consulte [Seleccionar un algoritmo de encapsulamiento](importing-keys-get-public-key-and-token.md#select-wrapping-algorithm).

**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 HSM o un sistema de administración de claves comercial) para generar y almacenar el material de claves.  
NO se admite la siguiente combinación: material de claves ECC\$1NIST\$1P521, la especificación de clave pública de encapsulamiento RSA\$12048 y un algoritmo de encapsulamiento RSAES\$1OAEP\$1SHA\$1\$1.  
No se puede encapsular directamente el material de claves ECC\$1NIST\$1P521 con una clave pública de encapsulamiento RSA\$12048. Utilice una clave de encapsulamiento más grande o un algoritmo de encapsulamiento RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1\$1.

------
#### [ RSAES\$1OAEP\$1SHA\$11 ]

AWS KMS admite la RSAES\$1OAEP\$1SHA\$11 para claves de cifrado simétricas (SYMMETRIC\$1DEFAULT), claves privadas de curva elíptica (ECC), claves privadas y claves HMAC. SM2 

RSAES\$1OAEP\$1SHA\$11 no es compatible con las claves privadas RSA. Además, no puede usar una clave de encapsulamiento pública RSA\$12048 con ningún algoritmo de encapsulamiento RSAES\$1OAEP\$1SHA\$1\$1 para encapsular una clave privada ECC\$1NIST\$1P521 (secp521r1). Debe usar una clave de pública de encapsulamiento más grande o un algoritmo de encapsulamiento RSA\$1AES\$1KEY\$1WRAP.

El siguiente ejemplo cifra el material de claves con la [clave pública que ha descargado](importing-keys-get-public-key-and-token.md) y el algoritmo de encapsulamiento RSAES\$1OAEP\$1SHA\$11, y lo guarda en el archivo `EncryptedKeyMaterial.bin`. 

En este ejemplo:
+ *`WrappingPublicKey.bin`* es el archivo que contiene la clave pública de encapsulamiento descargada. 
+ *`PlaintextKeyMaterial.bin`* es el archivo que contiene el material de claves que está cifrando, como `PlaintextKeyMaterial.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\$1OAEP\$1SHA\$1256 ]

AWS KMS admite el RSAES\$1OAEP\$1SHA\$1256 para claves de cifrado simétricas (SYMMETRIC\$1DEFAULT), claves privadas de curva elíptica (ECC), claves privadas y claves HMAC. SM2 

RSAES\$1OAEP\$1SHA\$1256 no es compatible con las claves privadas RSA. Además, no puede usar una clave de encapsulamiento pública RSA\$12048 con ningún algoritmo de encapsulamiento RSAES\$1OAEP\$1SHA\$1\$1 para encapsular una clave privada ECC\$1NIST\$1P521 (secp521r1). Debe usar una clave pública más grande o un algoritmo de encapsulamiento RSA\$1AES\$1KEY\$1WRAP.

El siguiente ejemplo cifra el material de claves con la [clave pública que ha descargado](importing-keys-get-public-key-and-token.md) y el algoritmo de encapsulamiento RSAES\$1OAEP\$1SHA\$1256, y lo guarda en el archivo `EncryptedKeyMaterial.bin`. 

En este ejemplo:
+ *`WrappingPublicKey.bin`* es el archivo que contiene la clave de encapsulamiento 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 de claves que está cifrando, como `PlaintextKeyMaterial.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:sha256 \
    -pkeyopt rsa_mgf1_md:sha256
```

------
#### [ RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 ]

El algoritmo de encapsulamiento RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 implica dos operaciones de cifrado.

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

1. Cifre la clave simétrica AES que utilizó con la clave pública que descargó y el algoritmo de encapsulamiento RSAES\$1OAEP\$1SHA\$11.

El algoritmo de encapsulamiento RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 requiere la versión 3.*x* de OpenSSL o posterior.

1. 

**Generación de una clave de cifrado simétrica AES de 256 bits**

   Este comando genera una clave de cifrado simétrica AES 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
   ```

1. 

**Cifrado del material de claves con la clave de cifrado simétrica AES**

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

   En este comando de ejemplo:
   + *`PlaintextKeyMaterial.bin`* es el archivo que contiene el material de claves que está importando, como `PlaintextKeyMaterial.bin`, `HMAC_384_PlaintextKey.bin`, `RSA_3072_PrivateKey.der` o `ECC_NIST_P521_PrivateKey.der`.
   + *`aes-key.bin`* es el archivo que contiene la clave de cifrado simétrica AES 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
   ```

1. 

**Cifrado de la clave de cifrado simétrica AES con la clave pública**

   Este comando cifra la clave de cifrado simétrica AES con la clave pública que ha descargado y el algoritmo de encapsulamiento RSAES\$1OAEP\$1SHA\$11, la cifra en DER 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 encapsulamiento 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 simétrica AES 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
   ```

1. 

**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 AES cifrada. Guárdelos en el archivo `EncryptedKeyMaterial.bin`, que es el archivo que va a importar en [Paso 4: Importar el material de claves](importing-keys-import-key-material.md).

   En este comando de ejemplo:
   + *`key-material-wrapped.bin`* es el archivo que contiene el material de claves cifrado.
   + *`aes-key-wrapped.bin`* es el archivo que contiene la clave de cifrado AES 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\$1AES\$1KEY\$1WRAP\$1SHA\$1256 ]

El algoritmo de encapsulamiento RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 implica dos operaciones de cifrado.

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

1. Cifre la clave simétrica AES que utilizó con la clave pública que descargó y el algoritmo de encapsulamiento RSAES\$1OAEP\$1SHA\$1256.

El algoritmo de encapsulamiento RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 requiere la versión 3.*x* de OpenSSL o posterior.

1. 

**Generación de una clave de cifrado simétrica AES de 256 bits**

   Este comando genera una clave de cifrado simétrica AES 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
   ```

1. 

**Cifrado del material de claves con la clave de cifrado simétrica AES**

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

   En este comando de ejemplo:
   + *`PlaintextKeyMaterial.bin`* es el archivo que contiene el material de claves que está importando, como `PlaintextKeyMaterial.bin`, `HMAC_384_PlaintextKey.bin`, `RSA_3072_PrivateKey.der` o `ECC_NIST_P521_PrivateKey.der`.
   + *`aes-key.bin`* es el archivo que contiene la clave de cifrado simétrica AES 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
   ```

1. 

**Cifrado de la clave de cifrado simétrica AES con la clave pública**

   Este comando cifra la clave de cifrado simétrica AES con la clave pública que ha descargado y el algoritmo de encapsulamiento RSAES\$1OAEP\$1SHA\$1256, la cifra en DER 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 encapsulamiento 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 simétrica AES 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
   ```

1. 

**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 AES cifrada. Guárdelos en el archivo `EncryptedKeyMaterial.bin`, que es el archivo que va a importar en [Paso 4: Importar el material de claves](importing-keys-import-key-material.md).

   En este comando de ejemplo:
   + *`key-material-wrapped.bin`* es el archivo que contiene el material de claves cifrado.
   + *`aes-key-wrapped.bin`* es el archivo que contiene la clave de cifrado AES 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](importing-keys-import-key-material.md).