Schritt 3 für den Import von Schlüsselmaterial: Verschlüsselung des Schlüsselmaterials - AWS Key Management Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Schritt 3 für den Import von Schlüsselmaterial: Verschlüsselung des Schlüsselmaterials

Nachdem Sie den öffentlichen Schlüssel und das Import-Token heruntergeladen haben, verschlüsseln Sie Ihr Schlüsselmaterial mit dem öffentlichen Schlüssel, den Sie heruntergeladen haben und dem von Ihnen angegebenen Verpackungsalgorithmus. Wenn Sie den öffentlichen Schlüssel oder das Import-Token ersetzen oder den Verpackungsalgorithmus ändern müssen, müssen Sie einen neuen öffentlichen Schlüssel und Import-Token herunterladen. Weitere Informationen zu den von AWS KMS unterstützten öffentlichen Schlüsseln und Verpackungsalgorithmen finden Sie unter Wählen Sie eine Spezifikation für den öffentlichen Verpackungsschlüssel und Auswählen des Verpackungsalgorithmus.

Das Schlüsselmaterial muss im Binärformat vorliegen. Weitere Informationen hierzu finden Sie unter Anforderungen an importiertes Schlüsselmaterial.

Anmerkung

Verschlüsseln und importieren Sie bei asymmetrischen Schlüsselpaaren nur den privaten Schlüssel. AWS KMS leitet den öffentlichen Schlüssel aus dem privaten Schlüssel ab.

Die folgende Kombination wird NICHT unterstützt: ECC_NIST_P521-Schlüsselmaterial, die RSA_2048-Spezifikation für öffentliche Verpackungsschlüssel und ein RSAES_OAEP_SHA_*-Verpackungsalgorithmus.

Sie können das Schlüsselmaterial von ECC_NIST_P521 nicht direkt mit einem öffentlichen RSA_2048-Verpackungsschlüssel verpacken. Verwenden Sie einen größeren Verpackungsschlüssel oder einen RSA_AES_KEY_WRAP_SHA_*-WRAP_*-Verpackungsalgorithmus.

In der Regel verschlüsseln Sie das Schlüsselmaterial, wenn Sie es aus dem Hardwaresicherheitsmodul (HSM) oder Schlüsselverwaltungssystem exportieren. Weitere Informationen zum Exportieren von Schlüsselmaterial im Binärformat finden Sie in der Dokumentation zum HSM oder Schlüsselverwaltungssystem. Sie können sich auch den folgenden Abschnitt ansehen, der eine Machbarkeitsnachweis-Demonstration unter Verwendung von OpenSSL enthält.

Verwenden Sie beim Verschlüsseln Ihres Schlüsselmaterials den gleichen Verpackungsalgorithmus, den Sie beim Herunterladen des öffentlichen Schlüssels und Import-Tokens angegeben haben. Den von Ihnen angegebenen Verpackungsalgorithmus finden Sie im CloudTrail Protokollereignis für die zugehörige GetParametersForImport Anforderung.

Generieren Sie Schlüsselmaterial für Tests

Die folgenden OpenSSL-Befehle generieren Schlüsselmaterial für jeden unterstützten Typ zum Testen. Diese Beispiele dienen nur zu Test- und proof-of-concept Demonstrationszwecken. Verwenden Sie für Produktionssysteme eine sicherere Methode zur Generierung Ihres Schlüsselmaterials, z. B. ein Hardware-Sicherheitsmodul oder ein Schlüsselverwaltungssystem.

Um die privaten Schlüssel von asymmetrischen Schlüsselpaaren in das DER-kodierte Format zu konvertieren, leiten Sie den Befehl zur Erzeugung von Schlüsselmaterial an den folgenden openssl pkcs8-Befehl weiter. Der topk8-Parameter weist OpenSSL an, einen privaten Schlüssel als Eingabe zu verwenden und einen PKCS-#8-formatierten Schlüssel zurückzugeben. (Das Standardverhalten ist das Gegenteil.)

openssl pkcs8 -topk8 -outform der -nocrypt

Die folgenden Befehle erzeugen Testschlüsselmaterial für jeden der unterstützten Schlüsseltypen.

  • Symmetrischer Verschlüsselungsschlüssel (32 Bytes)

    Dieser Befehl erzeugt einen symmetrischen 256-Bit-Schlüssel (32-Byte-Zufallszeichenfolge) und speichert ihn in der Datei PlaintextKeyMaterial.bin. Sie müssen dieses Schlüsselmaterial nicht verschlüsseln.

    openssl rand -out PlaintextKeyMaterial.bin 32

    Nur in chinesischen Regionen müssen Sie einen symmetrischen 128-Bit-Schlüssel (16-Byte-Zufallszeichenfolge) generieren.

    openssl rand -out PlaintextKeyMaterial.bin 16
  • HMAC-Schlüssel

    Dieser Befehl generiert eine zufällige Byte-Zeichenfolge der angegebenen Größe. Sie müssen dieses Schlüsselmaterial nicht verschlüsseln.

    Die Länge Ihres HMAC-Schlüssels muss der Länge entsprechen, die in der Schlüsselspezifikation des KMS-Schlüssels definiert ist. Wenn der KMS-Schlüssel beispielsweise HMAC_384 lautet, müssen Sie einen 384-Bit-Schlüssel (48 Byte) importieren.

    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
  • RSA-Privatschlüssel

    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
  • ECC-Privatschlüssel

    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

Beispiele für die Verschlüsselung von Schlüsselmaterial mit OpenSSL

Die folgenden Beispiele zeigen, wie Sie OpenSSL verwenden, um Ihr Schlüsselmaterial mit dem öffentlichen Schlüssel zu verschlüsseln, den Sie heruntergeladen haben.

Wichtig

Diese Beispiele dienen nur zur Demonstration des Konzepts. Verwenden Sie bei Produktionssystemen eine sicherere Methode (beispielsweise ein kommerzielles HSM oder Schlüsselverwaltungssystem), um Ihr Schlüsselmaterial zu generieren und zu speichern.

Die folgende Kombination wird NICHT unterstützt: ECC_NIST_P521-Schlüsselmaterial, die RSA_2048-Spezifikation für öffentliche Verpackungsschlüssel und ein RSAES_OAEP_SHA_*-Verpackungsalgorithmus.

Sie können das Schlüsselmaterial von ECC_NIST_P521 nicht direkt mit einem öffentlichen RSA_2048-Verpackungsschlüssel verpacken. Verwenden Sie einen größeren Verpackungsschlüssel oder einen RSA_AES_KEY_WRAP_SHA_*-WRAP_*-Verpackungsalgorithmus.

RSAES_OAEP_SHA_1

AWS KMS unterstützt RSAES_OAEP_SHA_1 für symmetrische Verschlüsselungsschlüssel (SYMMETRIC_DEFAULT), private Schlüssel mit elliptischen Kurven (ECC) und HMAC-Schlüssel.

RSAES_OAEP_SHA_1 wird für private RSA-Schlüssel nicht unterstützt. Außerdem können Sie einen öffentlichen RSA_2048-Verpackungsschlüssel nicht mit einem RSAES_OAEP_SHA_*-Verpackungsalgorithmus verwenden, um einen privaten ECC_NIST_P521 (secp521r1)-Schlüssel zu verpacken. Sie müssen einen größeren öffentlichen Verpackungsschlüssel oder einen RSA_AES_KEY_WRAP-Verpackungsalgorithmus verwenden.

Im folgenden Beispiel wird Ihr Schlüsselmaterial mit dem öffentlichen Schlüssel, den Sie heruntergeladen haben, und dem Verpackungsalgorithmus RSAES_OAEP_SHA_1 verschlüsselt und in der Datei EncryptedKeyMaterial.bin gespeichert.

In diesem Beispiel:

  • WrappingPublicKey.bin ist die Datei, die den heruntergeladenen öffentlichen Verpackungsschlüssel enthält.

  • PlaintextKeyMaterial.bin ist die Datei, die das Schlüsselmaterial enthält, das Sie verschlüsseln, z. B. PlaintextKeyMaterial.bin, HMAC_384_PlaintextKey.bin oder 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_OAEP_SHA_256

AWS KMS unterstützt RSAES_OAEP_SHA_256 für symmetrische Verpackungsschlüssel (SYMMETRIC_DEFAULT), private Schlüssel mit elliptischen Kurven (ECC) und HMAC-Schlüssel.

RSAES_OAEP_SHA_256 wird für private RSA-Schlüssel nicht unterstützt. Außerdem können Sie einen öffentlichen RSA_2048-Verpackungsschlüssel nicht mit einem RSAES_OAEP_SHA_*-Verpackungsalgorithmus verwenden, um einen privaten ECC_NIST_P521 (secp521r1)-Schlüssel zu verpacken. Sie müssen einen größeren öffentlichen Schlüssel oder einen RSA_AES_KEY_WRAP-Verpackungsalgorithmus verwenden.

Im folgenden Beispiel wird Schlüsselmaterial mit dem öffentlichen Schlüssel, den Sie heruntergeladen haben, und dem Verpackungsalgorithmus RSAES_OAEP_SHA_256 verschlüsselt und in der Datei EncryptedKeyMaterial.bin gespeichert.

In diesem Beispiel:

  • WrappingPublicKey.bin ist die Datei, die den heruntergeladenen öffentlichen Verpackungsschlüssel enthält. Wenn Sie den öffentlichen Schlüssel über die Konsole heruntergeladen haben, hat diese Datei den Namen wrappingKey_KMS key_key_ID_timestamp (z. B. wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909).

  • PlaintextKeyMaterial.bin ist die Datei, die das Schlüsselmaterial enthält, das Sie verschlüsseln, z. B. PlaintextKeyMaterial.bin, HMAC_384_PlaintextKey.bin oder 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_AES_KEY_WRAP_SHA_1

Der Verpackungsalgorithmus RSA_AES_KEY_WRAP_SHA_1 umfasst zwei Verschlüsselungsoperationen.

  1. Verpacken Sie Ihr Schlüsselmaterial mit einem von Ihnen generierten symmetrischen AES-Schlüssel und einem symmetrischen AES-Verpackungsalgorithmus.

  2. Verschlüsseln Sie den symmetrischen AES-Schlüssel, den Sie verwendet haben, mit dem öffentlichen Schlüssel, den Sie heruntergeladen haben, und dem RSAES_OAEP_SHA_1-Verpackungsalgorithmus.

AWS KMS unterstützt RSA_AES_KEY_WRAP_SHA_*-Verpackungsalgorithmen für alle unterstützten Typen von importiertem Schlüsselmaterial und alle unterstützten Spezifikationen für öffentliche Schlüssel. Die RSA_AES_KEY_WRAP_SHA_*-Algorithmen sind die einzigen Verpackungsalgorithmen, die für das Verpacken von RSA-Schlüsselmaterial unterstützt werden.

Der Verpackungsalgorithmus RSA_AES_KEY_WRAP_SHA_1 erfordert OpenSSL Version 3. x oder später.

  1. Generieren Sie einen symmetrischen 256-Bit-AES-Schlüssel für die Verschlüsselung

    Dieser Befehl generiert einen symmetrischen AES-Verpackungsschlüssel, der aus 256 zufälligen Bits besteht, und speichert ihn in der Datei aes-key.bin

    # Generate a 32-byte AES symmetric encryption key $ openssl rand -out aes-key.bin 32
  2. Verschlüsseln Sie Ihr Schlüsselmaterial mit dem symmetrischen AES-Verschlüsselungsschlüssel

    Dieser Befehl verschlüsselt Ihr Schlüsselmaterial mit dem symmetrischen AES-Verschlüsselungsschlüssel und speichert das verschlüsselte Schlüsselmaterial in der Datei key-material-wrapped.bin.

    In diesem Beispielbefehl:

    • PlaintextKeyMaterial.bin ist die Datei, die das Schlüsselmaterial enthält, das Sie importieren, z. B. PlaintextKeyMaterial.bin, HMAC_384_PlaintextKey.bin, RSA_3072_PrivateKey.der oder ECC_NIST_P521_PrivateKey.der.

    • aes-key.bin ist die Datei, die den symmetrischen 256-Bit-AES-Verschlüsselungsschlüssel enthält, den Sie mit dem vorherigen Befehl erzeugt haben.

    # 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
  3. Verschlüsseln Sie Ihren symmetrischen AES-Verschlüsselungsschlüssel mit dem öffentlichen Schlüssel

    Dieser Befehl verschlüsselt Ihren symmetrischen AES-Verschlüsselungsschlüssel mit dem öffentlichen Schlüssel, den Sie heruntergeladen haben, und dem RSAES_OAEP_SHA_1-Verpackungsalgorithmus, DER-kodiert ihn und speichert ihn in der Datei aes-key-wrapped.bin.

    In diesem Beispielbefehl:

    • WrappingPublicKey.bin ist die Datei, die den heruntergeladenen öffentlichen Verpackungsschlüssel enthält. Wenn Sie den öffentlichen Schlüssel über die Konsole heruntergeladen haben, hat diese Datei den Namen wrappingKey_KMS key_key_ID_timestamp (z. B. wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909

    • aes-key.bin ist die Datei, die den symmetrischen 256-Bit-AES-Verschlüsselungsschlüssel enthält, den Sie im ersten Befehl in dieser Beispielsequenz generiert haben.

    # 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
  4. Generieren Sie die zu importierende Datei

    Verketten Sie die Datei mit dem verschlüsselten Schlüsselmaterial und die Datei mit dem verschlüsselten AES-Schlüssel. Speichern Sie sie in der EncryptedKeyMaterial.bin-Datei, die Sie in Schritt 4: Importieren des Schlüsselmaterials importieren werden.

    In diesem Beispielbefehl:

    • key-material-wrapped.bin ist die Datei, die das verschlüsselte Schlüsselmaterial enthält.

    • aes-key-wrapped.bin ist die Datei, die den verschlüsselten AES-Verschlüsselungsschlüssel enthält.

    # Combine the encrypted AES key and encrypted key material in a file $ cat aes-key-wrapped.bin key-material-wrapped.bin > EncryptedKeyMaterial.bin
RSA_AES_KEY_WRAP_SHA_256

Der Verpackungsalgorithmus RSA_AES_KEY_WRAP_SHA_256 umfasst zwei Verschlüsselungsoperationen.

  1. Verpacken Sie Ihr Schlüsselmaterial mit einem von Ihnen generierten symmetrischen AES-Schlüssel und einem symmetrischen AES-Verpackungsalgorithmus.

  2. Verschlüsseln Sie den symmetrischen AES-Schlüssel, den Sie verwendet haben, mit dem öffentlichen Schlüssel, den Sie heruntergeladen haben, und dem RSAES_OAEP_SHA_256-Verpackungsalgorithmus.

AWS KMS unterstützt RSA_AES_KEY_WRAP_SHA_*-Verpackungsalgorithmen für alle unterstützten Typen von importiertem Schlüsselmaterial und alle unterstützten Spezifikationen für öffentliche Schlüssel. Die RSA_AES_KEY_WRAP_SHA_*-Algorithmen sind die einzigen Verpackungsalgorithmen, die für das Verpacken von RSA-Schlüsselmaterial unterstützt werden.

Der Verpackungsalgorithmus RSA_AES_KEY_WRAP_SHA_256 erfordert OpenSSL Version 3. x oder später.

  1. Generieren Sie einen symmetrischen 256-Bit-AES-Schlüssel für die Verschlüsselung

    Dieser Befehl generiert einen symmetrischen AES-Verpackungsschlüssel, der aus 256 zufälligen Bits besteht, und speichert ihn in der Datei aes-key.bin

    # Generate a 32-byte AES symmetric encryption key $ openssl rand -out aes-key.bin 32
  2. Verschlüsseln Sie Ihr Schlüsselmaterial mit dem symmetrischen AES-Verschlüsselungsschlüssel

    Dieser Befehl verschlüsselt Ihr Schlüsselmaterial mit dem symmetrischen AES-Verschlüsselungsschlüssel und speichert das verschlüsselte Schlüsselmaterial in der Datei key-material-wrapped.bin.

    In diesem Beispielbefehl:

    • PlaintextKeyMaterial.bin ist die Datei, die das Schlüsselmaterial enthält, das Sie importieren, z. B. PlaintextKeyMaterial.bin, HMAC_384_PlaintextKey.bin, RSA_3072_PrivateKey.der oder ECC_NIST_P521_PrivateKey.der.

    • aes-key.bin ist die Datei, die den symmetrischen 256-Bit-AES-Verschlüsselungsschlüssel enthält, den Sie mit dem vorherigen Befehl erzeugt haben.

    # 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
  3. Verschlüsseln Sie Ihren symmetrischen AES-Verschlüsselungsschlüssel mit dem öffentlichen Schlüssel

    Dieser Befehl verschlüsselt Ihren symmetrischen AES-Verschlüsselungsschlüssel mit dem öffentlichen Schlüssel, den Sie heruntergeladen haben, und dem RSAES_OAEP_SHA_256-Verpackungsalgorithmus, DER-kodiert ihn und speichert ihn in der Datei aes-key-wrapped.bin.

    In diesem Beispielbefehl:

    • WrappingPublicKey.bin ist die Datei, die den heruntergeladenen öffentlichen Verpackungsschlüssel enthält. Wenn Sie den öffentlichen Schlüssel über die Konsole heruntergeladen haben, hat diese Datei den Namen wrappingKey_KMS key_key_ID_timestamp (z. B. wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909

    • aes-key.bin ist die Datei, die den symmetrischen 256-Bit-AES-Verschlüsselungsschlüssel enthält, den Sie im ersten Befehl in dieser Beispielsequenz generiert haben.

    # 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
  4. Generieren Sie die zu importierende Datei

    Verketten Sie die Datei mit dem verschlüsselten Schlüsselmaterial und die Datei mit dem verschlüsselten AES-Schlüssel. Speichern Sie sie in der EncryptedKeyMaterial.bin-Datei, die Sie in Schritt 4: Importieren des Schlüsselmaterials importieren werden.

    In diesem Beispielbefehl:

    • key-material-wrapped.bin ist die Datei, die das verschlüsselte Schlüsselmaterial enthält.

    • aes-key-wrapped.bin ist die Datei, die den verschlüsselten AES-Verschlüsselungsschlüssel enthält.

    # Combine the encrypted AES key and encrypted key material in a file $ cat aes-key-wrapped.bin key-material-wrapped.bin > EncryptedKeyMaterial.bin

Fahren Sie mit Schritt 4: Importieren des Schlüsselmaterials fort.