Come posso utilizzare le chiavi asimmetriche di AWS KMS per crittografare un file utilizzando OpenSSL?

4 minuti di lettura
0

Voglio utilizzare le chiavi di Key Management Service (AWS KMS) per crittografare un file utilizzando OpenSSL. In che modo posso farlo?

Breve descrizione

Le chiavi RSA non consentono di crittografare grandi quantità di dati. Ad esempio, per crittografare una coppia di chiavi RSA di 2.048 byte con RSAES_OAEP_SHA_256, puoi crittografare al massimo 190 byte. Con le chiavi Advanced Encryption Standard (AES), puoi suddividere i dati in parti più piccole utilizzando Cipher Block Chaining (CBC).

Risoluzione

Segui queste istruzioni per crittografare e decrittografare le chiavi utilizzando CBC.

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Creare la coppia di chiavi RSA, scaricare la chiave pubblica e creare una chiave AES a 256 bit

1.    Segui le istruzioni per creare la coppia di chiavi RSA con la Console di gestione AWS.

2.    Scarica la chiave pubblica utilizzando il comando di AWS CLI get-public-key simile al seguente:

$ aws kms get-public-key --key-id arn:aws:kms:eu-west-1:123456789012:key/d74f5077-811b-4447-af65-71f5f64f37d3 --output text --query 'PublicKey' > RSAPublic.b64 && base64 -d RSAPublic.b64 > RSAPublic.bin

Nota: la funzione --query si limita a recuperare la chiave pubblica e quindi decodificare il file base64 in una chiave DER. 3.    Crea una chiave AES a 256 bit utilizzando il comando di OpenSSL rand per generare dati casuali e fornire l'output nel file key.bin simile al seguente:

$ openssl rand -base64 32 > key.bin

Crittografare i dati

1.    Crittografa i dati utilizzando il file key.bin con il comando di OpenSSL enc crittografato in CBC in modo simile al seguente:

$ openssl enc -aes-256-cbc -salt -pbkdf2 -in FILE_TO_ENCRYPT -out FILE_TO_ENCRYPT.enc -pass file:./key.bin

Nota:

  • il comando -pbkdf2 è disponibile solo in OpenSSL 1.1.1. Sull'AMI Amazon Linux 2 è installato OpenSSL 1.0.2, che non supporta il comando -pbkdf2.
  • CBC consente di crittografare file di qualsiasi dimensione.
  • Sostituisci il valore FILE_TO_ENCRYPT con il nome del file che desideri crittografare.

2.    Crittografa la tua chiave AES a 256 bit key.bin con la chiave pubblica AWS KMS. Questo verifica che la chiave dei tuoi dati sia sicura. Solo gli utenti che hanno accesso alla tua chiave privata di AWS KMS possono accedere alla chiave key.bin.

Esegui il comando di OpenSSL pkeyutl in modo simile al seguente:

$ 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: il comando pkeyutl utilizza un algoritmo di crittografia supportato per la decrittografia dall'API AWS KMS (RSAES_OAEP_SHA_256). La chiave pubblica di AWS KMS RSAPublic.bin crittografa la chiave AES 256 e crea un nuovo file denominato enc.key.bin.

3.    Crittografa il file key.bin in modo che gli utenti non possano accedervi a meno che non possano decrittografare il file enc.key.bin utilizzando il comando di AWS CLI rm in modo simile al seguente:

$ rm key.bin && rm FILE_TO_ENCRYPT

Nota: puoi anche scegliere di eliminare il file originale che desideravi crittografare, in modo che gli utenti non possano accedervi.

Ora hai a disposizione quanto segue:

  • I dati crittografati nel file FILE_TO_ENCRYPT.enc.
  • La chiave crittografata AES a 256 bit enc.key.bin.
  • La chiave pubblica di AWS KMS RSAPublic.bin.

Nota: gli utenti con dati crittografati devono inviarti questi file per decrittografarli.

Decrittografare i file che ti sono stati inviati

Per recuperare i dati crittografati, decrittografa la chiave AES a 256 bit, quindi utilizza tale chiave per decrittografare il file di dati FILE_TO_ENCRYPT.enc.

Nota: devi avere accesso all'API di AWS KMS, perché la chiave privata di AWS KMS non può essere visualizzata in chiaro.

1.    Decrittografa la chiave AES a 256 bit e invia il file enc.key.bin all'API di AWS KMS utilizzando il comando di AWS CLI decrypt in modo simile al seguente:

$ aws kms decrypt --key-id arn:aws:kms:eu-west-1:123456789012:key/d74f5077-811b-4447-af65-71f5f64f37d3 --ciphertext-blob fileb://enc.key.bin --encryption-algorithm RSAES_OAEP_SHA_256 --output text --query 'Plaintext' | base64 --decode > decryptedKey.bin

Nota: la funzione --query seleziona il testo in chiaro, quindi decodifica il valore base64 nel file decryptedKey.bin. 2.    Esegui il comando di OpenSSL enc utilizzando il file decryptedKey.bin per fornire l'output in DECRYPTED_FILE in modo simile al seguente:

$ openssl enc -d -aes-256-cbc -pbkdf2 -in FILE_TO_ENCRYPT.enc -out DECRYPTED_FILE -pass file:./decryptedKey.bin

Nota: sostituisci il valore DECRYPTED_FILE con il nome del file che desideri decrittografare.

Puoi confrontare DECRYPTED_FILE e FILE_TO_ENCRYPT per assicurarti che la crittografia e la decrittografia siano state completate correttamente.


Informazioni correlate

Servizi e strumenti di crittografia di AWS

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa