Wie kann ich asymmetrische AWS KMS-Schlüssel verwenden, um eine Datei mit OpenSSL zu verschlüsseln?

Lesedauer: 4 Minute
0

Ich möchte die Schlüssel des Key Management Service (AWS KMS) verwenden, um eine Datei mit OpenSSL zu verschlüsseln. Wie mache ich das?

Kurzbeschreibung

Sie können große Datenmengen nicht mit RSA-Schlüsseln verschlüsseln. Wenn Sie beispielsweise ein RSA-Schlüsselpaar mit einer Größe von 2048 Byte mit RSAES_OAEP_SHA_256 verschlüsseln möchten, beträgt der größte Teil, den Sie verschlüsseln können, 190 Byte. Mit Advanced Encryption Standard (AES) -Schlüsseln können Sie Ihre Daten mithilfe von Cipher Block Chaining (CBC) in kleinere Teile aufteilen.

Auflösung

Folgen Sie diesen Anweisungen, um Schlüssel mit CBC zu ver- und entschlüsseln.

Hinweis: Wenn Sie beim Ausführen von Befehlen von AWS Command Line Interface (AWS CLI) Fehlermeldungen erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.

Erstellen Sie das RSA-Schlüsselpaar, laden Sie den öffentlichen Schlüssel herunter und erstellen Sie einen AES-256-Bit-Schlüssel

1.    Folgen Sie den Anweisungen zum Erstellen des RSA-Schlüsselpaars mit der AWS Management Console.

2.    Laden Sie den öffentlichen Schlüssel mit dem AWS CLI-Befehl get-public-key herunter, der dem folgenden ähnelt:

$ 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

Hinweis: Die Funktion —query ruft nur den öffentlichen Schlüssel ab und dekodiert dann die base64-Datei in einen DER-Schlüssel. 3.    Erstellen Sie einen AES-256-Bit-Schlüssel mit dem Befehl OpenSSL rand, um zufällige Daten zu generieren, und geben Sie ihn dann in der Datei key.bin ähnlich der folgenden aus:

$ openssl rand -base64 32 > key.bin

Verschlüsseln Sie Ihre Daten

1.    Verschlüsseln Sie Ihre Daten mit der Datei key.bin mit dem in CBC verschlüsselten OpenSSL enc-Befehl ähnlich dem folgenden:

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

Hinweis:

  • Der Befehl -pbkdf2 ist nur mit OpenSSL 1.1.1 verfügbar. Im Amazon Linux 2 AMI ist OpenSSL 1.0.2 installiert, das den Befehl -pbkdf2 nicht unterstützt.
  • Mit CBC können Sie Dateien jeder Größe verschlüsseln.
  • Ersetzen Sie den Wert FILE_TO_ENCRYPT durch den Namen der Datei, die Sie verschlüsseln möchten.

2.    Verschlüsseln Sie Ihren AES-256-Bit-Schlüssel key.bin mit dem öffentlichen AWS KMS-Schlüssel. Dadurch wird überprüft, ob der Schlüssel zu Ihren Daten sicher ist. Nur Benutzer, die Zugriff auf Ihren privaten AWS KMS-Schlüssel haben, können auf den Schlüssel key.bin zugreifen.

Führen Sie den OpenSSL-Befehl pkeyutl ähnlich dem folgenden aus:

$ 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

Hinweis: Der Befehl pkeyutl verwendet einen Verschlüsselungsalgorithmus, der für die Entschlüsselung durch die AWS KMS-API (RSAES_OAEP_SHA_256) unterstützt wird. Der öffentliche AWS KMS-Schlüssel RSAPublic.bin verschlüsselt den AES 256-Schlüssel und erstellt eine neue Datei mit dem Namen enc.key.bin.

3.    Verschlüsseln Sie die Datei key.bin, sodass Benutzer nicht darauf zugreifen können, es sei denn, sie können die Datei enc.key.bin mit dem AWS CLI-Befehl rm ähnlich dem folgenden entschlüsseln:

$ rm key.bin && rm FILE_TO_ENCRYPT

Hinweis: Sie können auch die Originaldatei löschen, die Sie verschlüsseln möchten, damit Benutzer nicht darauf zugreifen können.

Sie haben jetzt Folgendes:

  • Die verschlüsselten Daten in der Datei FILE_TO_ENCRYPT.enc.
  • Der verschlüsselte AES-256-Bit-Schlüssel enc.key.bin.
  • Der öffentliche AWS KMS-Schlüssel RSAPublic.bin.

Hinweis: Benutzer mit verschlüsselten Daten müssen Ihnen diese Dateien zur Entschlüsselung senden.

Entschlüsselung der an Sie gesendeten Dateien

Um die verschlüsselten Daten abzurufen, entschlüsseln Sie den AES-256-Bit-Schlüssel und entschlüsseln Sie dann mit diesem Schlüssel die Datendatei FILE_TO_ENCRYPT.enc.

Hinweis: Sie müssen Zugriff auf die AWS KMS-API haben, da der private AWS KMS-Schlüssel nicht im Klartext angezeigt werden kann.

1.    Entschlüsseln Sie den AES-256-Bit-Schlüssel und senden Sie die Datei enc.key.bin an die AWS KMS-API, indem Sie den AWS CLI-Befehl decrypt ähnlich dem folgenden verwenden:

$ 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

Hinweis: Die Funktion —query wählt den Klartext aus und dekodiert dann den base64-Wert in die Datei decryptedKey.bin. 2.    Führen Sie den Befehl OpenSSL enc mit der Datei decryptedKey.bin aus, um die Ausgabe in DECRYPTED_FILE ähnlich wie folgt auszuführen:

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

Hinweis: Ersetzen Sie den Wert DECRYPTED_FILE durch den Namen der Datei, die Sie entschlüsseln möchten.

Sie können DECRYPTED_FILE und FILE_TO_ENCRYPT vergleichen, um sicherzustellen, dass die Verschlüsselung und Entschlüsselung erfolgreich abgeschlossen wurde.


Relevante Informationen

Kryptografische AWS-Services und -Tools

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren