Saltar al contenido

¿Cómo uso OpenSSL para cifrar un archivo con claves asimétricas de AWS KMS?

4 minutos de lectura
0

Quiero usar OpenSSL para cifrar un archivo con claves de AWS Key Management Service (AWS KMS).

Solución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Crea el par de claves RSA, descarga la clave pública y crea una clave AES de 256 bits

Sigue estos pasos:

  1. Crea el par de claves RSA.
  2. Para descargar la clave pública, ejecuta el comando get-public-key de la AWS CLI:
    aws kms get-public-key --key-id your-key-id --output text --query 'PublicKey' > RSAPublic.b64 && base64 -d RSAPublic.b64 > RSAPublic.bin
    Nota: Sustituye your-key-id por tu ID de clave asimétrica. La función --query obtiene la clave pública y, a continuación, decodifica el archivo base64 en una clave DER.
  3. Ejecuta el siguiente comando rand de OpenSSL para crear una clave de 256 bits del Estándar de cifrado avanzado (AES):
    openssl rand -base64 32 > key.bin

Cifra tus datos

Sigue estos pasos:

  1. Ejecuta el siguiente comando enc de OpenSSL con el archivo key.bin:
    openssl enc -aes-256-cbc -salt -pbkdf2 -in FILE_TO_ENCRYPT -out FILE_TO_ENCRYPT.enc -pass file:./key.bin
    Nota: Sustituye FILE_TO_ENCRYPT por el nombre de tu archivo. El comando**-pbkdf2** solo está disponible con OpenSSL 1.1.1. La Imagen de máquina de Amazon (AMI) de Amazon Linux 2 usa OpenSSL 1.0.2 y no admite el comando**-pbkdf2**.
  2. Cifra el archivo key.bin con la clave pública de AWS KMS. Esto protegerá tus datos clave. Solo los usuarios que tienen acceso a su clave privada de AWS KMS pueden acceder al archivo key.bin. Para ello, ejecuta el comando pkeyutl de OpenSSL:
    openssl pkeyutl -in key.bin -out enc.key.bin -inkey RSAPublic.bin -keyform DER -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
    Nota: El comando pkeyutl usa un algoritmo de cifrado que admite el descifrado mediante la API de AWS KMS RSAES_OAEP_SHA_256. La clave pública RSAPublic.bin de AWS KMS cifra la clave AES de 256 bits y crea un nuevo archivo denominadoenc.key.bin.
  3. Para cifrar el archivo key.bin de modo que los usuarios tengan que descifrar el archivo enc.key.bin para acceder a key.bin, ejecuta el comandorm de la AWS CLI:
    aws s3 rm key.bin && rm FILE_TO_ENCRYPT
    Nota: Sustituye FILE_TO_ENCRYPT por el nombre de tu archivo.
  4. (Opcional) Elimina el archivo original que querías cifrar para que los usuarios no puedan acceder al archivo.

Ahora dispones de los siguientes recursos:

  • Los datos cifrados del archivo FILE_TO_ENCRYPT.enc.
  • La clave cifrada AES de 256 bits de enc.key.bin.
  • La clave pública de AWS KMS RSAPublic.bin.

Nota: Los usuarios con datos cifrados deben enviarte los archivos para descifrarlos.

Descifrado de los archivos

Para recuperar los datos cifrados, descifra enc.key.bin y, a continuación, utilice esa clave para descifrar el archivoFILE_TO_ENCRYPT.enc.

Nota: Debes tener acceso a la API de AWS KMS porque la clave privada de AWS KMS no se puede ver en texto sin formato.

Sigue estos pasos:

  1. Para descifrar el archivo enc.key.bin y enviarlo a la API de AWS KMS, ejecuta el comando decrypt de la AWS CLI:
    aws kms decrypt --key-id your-key-id --ciphertext-blob fileb://enc.key.bin --encryption-algorithm RSAES_OAEP_SHA_256 --output text --query 'Plaintext' | base64 --decode > decryptedKey.bin
    Nota: Sustituye your-key-id por tu ID de clave. La función**--query** selecciona el texto sin formato y, a continuación, decodifica el valor en base64 en el archivo decryptedKey.bin.
  2. Para generar el archivo descifrado, usa el archivo decryptedKey.bin cuando ejecutes el siguiente comando enc de OpenSSL:
    openssl enc -d -aes-256-cbc -pbkdf2 -in FILE_TO_ENCRYPT.enc -out DECRYPTED_FILE -pass file:./decryptedKey.bin
    Nota: Sustituye DECRYPTED_FILE por el nombre de tu archivo.
  3. Para comprobar que el cifrado y el descifrado se han completado correctamente, compara DECRYPTED_FILE y FILE_TO_ENCRYPT.
OFICIAL DE AWSActualizada hace 9 meses