Utilizo OpenSSL para importar mi clave a AWS KMS pero aparece el error «InvalidCipherText». ¿Cómo puedo solucionar este problema?

5 minutos de lectura
0

He creado una clave de AWS KMS en AWS Key Management Service (AWS KMS). He especificado el origen del material de claves de KMS como externo, he elegido RSAES_OAEP_SHA_256 como algoritmo para la clave de encapsulamiento y luego he usado OpenSSL para cifrar mi material de claves con la clave de encapsulamiento. Sin embargo, cuando importo mi material de claves cifrado, la solicitud falla y aparece un mensaje de error relacionado con «InvalidCipherText». ¿Cómo puedo evitar este error de importación?

Breve descripción

De forma predeterminada, OpenSSL usa la función de hash SHA-1.

Para evitar errores de importación al utilizar el algoritmo RSAES_OAEP_SHA_256 (función de hash SHA-256), cifre el material de claves con OpenSSL mediante el comando openssl pkeyutl y especifique los parámetros –pkeyopt rsa_padding_mode:oaep y –pkeyopt rsa_oaep_md:sha256.

El procedimiento completo para importar material de claves a AWS KMS mediante OpenSSL y RSAES_OAEP_SHA_256 es el siguiente:

1.    Cree una clave de KMS utilizando External para el origen del material de claves.

2.    Descargue la clave de encapsulamiento (pública) y el token de importación.

3.    Genere una clave simétrica de 256 bits.

4.    Compruebe que su versión de OpenSSL sea compatible con openssl pkeyutl.

5.    Cifre su material de claves con la clave de encapsulamiento.

6.    Importe su material de claves cifrado.

Nota: Si utiliza el algoritmo de cifrado RSAES_OAEP_SHA_1 para su clave de encapsulamiento, consulte How to import key material.

Resolución

Crear una clave de KMS utilizando External para el origen del material de claves

Ejecute los siguientes comandos de la Interfaz de la línea de comandos de AWS (AWS CLI) para crear un KMS para material de claves externo.

Nota:

export REGION=us-east-1
export KEY_ALIAS=kms_key_with_externalmaterial
export KEY_ID=`aws kms create-key --region $REGION --origin EXTERNAL --description $KEY_ALIAS --query KeyMetadata.KeyId --output text`
aws kms --region $REGION create-alias --alias-name alias/$KEY_ALIAS --target-key-id $KEY_ID

El estado de la clave de KMS recién creada es pendiente de importación hasta que importe el material de claves. Ejecute el siguiente comando para ver el estado de la clave.

aws kms --region $REGION describe-key --key-id $KEY_ID

Descargar la clave de encapsulamiento (pública) y el token de importación

Ejecute los siguientes comandos de AWS CLI para obtener los valores PublicKey (clave de encapsulamiento) e ImportToken, decodifique ambos valores mediante base64 y, a continuación, guarde estos valores en archivos independientes. Tenga en cuenta que el algoritmo de encapsulamiento RSAES_OAEP_SHA_256 se especifica en el comando get-parameters-for-import.

export KEY_PARAMETERS=`aws kms --region $REGION get-parameters-for-import --key-id $KEY_ID --wrapping-algorithm RSAES_OAEP_SHA_256 --wrapping-key-spec RSA_2048`
echo $KEY_PARAMETERS | awk '{print $7}' | tr -d '",' | base64 --decode > PublicKey.bin
echo $KEY_PARAMETERS | awk '{print $5}' | tr -d '",' | base64 --decode > ImportToken.bin

Estos comandos almacenan la clave de encapsulamiento en PublicKey.bin y el token de importación en ImportToken.bin.

Generar una clave simétrica de 256 bits

El material de claves debe ser una clave simétrica de 256 bits (32 bytes). Ejecute uno de los siguientes comandos para generar la clave:

OpenSSL

openssl rand -out PlaintextKeyMaterial.bin 32

-o-

dd

dd if=/dev/urandom of=PlaintextKeyMaterial.bin bs=32 count=1

Comprobar que su versión de OpenSSL sea compatible con openssl pkeyutl

Para cifrar su material de claves con RSAES_OAEP_SHA_256 como algoritmo de encapsulamiento, utilice el comando openssl pkeyutl.

Importante: Este comando solo está disponible en OpenSSL 1.0.2 y versiones posteriores.

Si utiliza un equipo Linux basado en RHEL, como una instancia de Amazon Elastic Compute Cloud (Amazon EC2) lanzada con una AMI de Amazon Linux, siga estos pasos.

1.    Ejecute el siguiente comando para comprobar su versión de OpenSSL.

openssl version

2.    Para actualizar OpenSSL, ejecute el siguiente comando.

sudo yum –y update openssl

Si usa macOS, siga estos pasos.

1.    Ejecute los siguientes comandos de Homebrew.

brew update
brew upgrade openssl
brew info openssl

2.    El último comando le muestra que OpenSSL está instalado en /usr/local/opt/openssl/bin/. Confirme la versión de OpenSSL al ejecutar este comando.

/usr/local/opt/openssl/bin/openssl version

3.    Para utilizar siempre la versión más reciente de OpenSSL, edite ~/.bash_profile y añada la siguiente línea al final del archivo:

export PATH="/usr/local/opt/openssl/bin:$PATH"

4.    Después de añadir la línea, ejecute el siguiente comando.

source ~/.bash_profile

5.    Para comprobar el cambio en su entorno macOS, ejecute el siguiente comando.

echo $PATH
openssl version

Cifrar material de claves con la clave de encapsulamiento

Ejecute el siguiente comando para cifrar su material de claves al usar la versión más reciente de OpenSSL y la clave de encapsulamiento que descargó anteriormente.

Nota: La clave de encapsulamiento se almacena en PublicKey.bin.

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

El comando genera EncryptedKeyMaterial.bin. Este valor se importa como material de claves cifrado en el KMS.

Importar material de claves cifrado

Ejecute el siguiente comando de AWS CLI para importar el material de claves cifrado a la clave de KMS.

aws kms --region $REGION import-key-material --key-id $KEY_ID --encrypted-key-material fileb://EncryptedKeyMaterial.bin --import-token fileb://ImportToken.bin --expiration-model KEY_MATERIAL_DOES_NOT_EXPIRE

Una vez finalizada la importación, el estado de la clave cambia a Habilitada. Ejecute el siguiente comando para comprobar el estado de la clave.

aws kms --region $REGION describe-key --key-id $KEY_ID

Información relacionada

About imported key material

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años