Schlüssel importieren - AWS Kryptografie für Zahlungen

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.

Schlüssel importieren

Wichtig

Für Beispiele ist möglicherweise die neueste Version von AWS CLI V2 erforderlich. Bevor Sie beginnen, stellen Sie bitte sicher, dass Sie auf die neueste Version aktualisiert haben.

Symmetrische Schlüssel importieren

Schlüssel mithilfe asymmetrischer Techniken importieren (TR-34)

AWS Prozess zum Importieren von Verschlüsselungsschlüsseln für Zahlungen

Überblick: TR-34 verwendet asymmetrische RSA-Kryptografie, um symmetrische Schlüssel für den Austausch zu verschlüsseln und die Herkunft der Daten sicherzustellen (Signierung). Dadurch werden sowohl die Vertraulichkeit (Verschlüsselung) als auch die Integrität (Signatur) des verpackten Schlüssels gewährleistet.

Wenn Sie Ihre eigenen Schlüssel importieren möchten, schauen Sie sich bitte das Beispielprojekt auf Github an. Anweisungen zum Importieren/Exportieren von Schlüsseln von anderen Plattformen finden Sie im Benutzerhandbuch für diese Plattformen.

1. Rufen Sie den Befehl initialize import auf

Rufen Sie get-parameters-for-import auf, um den Importvorgang zu initialisieren. Diese API generiert ein Schlüsselpaar für Schlüsselimporte, signiert den Schlüssel und gibt das Zertifikat und den Zertifikatsstamm zurück. Letztlich sollte der zu exportierende Schlüssel mit diesem Schlüssel verschlüsselt werden. In der TR-34-Terminologie wird dies als KRD-Zertifikat bezeichnet. Beachten Sie, dass diese Zertifikate nur von kurzer Dauer sind und nur für diesen Zweck bestimmt sind.

2. Installieren Sie das öffentliche Zertifikat auf dem Schlüsselquellsystem

Bei vielen HSMs müssen Sie möglicherweise das in Schritt 1 generierte öffentliche Zertifikat installieren/laden/als vertrauenswürdig einstufen, um damit Schlüssel exportieren zu können.

3. Generieren Sie einen öffentlichen Schlüssel und stellen Sie den Zertifikatsstamm für Payment Cryptography bereit AWS

Um die Integrität der übertragenen Nutzdaten zu gewährleisten, wird sie von der sendenden Partei signiert (bekannt als Key Distribution Host oder KDH). Die sendende Partei möchte zu diesem Zweck einen öffentlichen Schlüssel generieren und anschließend ein Public-Key-Zertifikat (X509) erstellen, das an Payment Cryptography zurückgegeben werden kann. AWS AWS Private CA ist eine Option zum Generieren von Zertifikaten, es gibt jedoch keine Einschränkungen hinsichtlich der verwendeten Zertifizierungsstelle.

Sobald Sie das Zertifikat haben, sollten Sie das Stammzertifikat mithilfe der importKey Befehle and KeyMaterialType of ROOT_PUBLIC_KEY_CERTIFICATE und KeyUsageType of TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE in AWS Payment Cryptography laden.

4. Schlüssel aus dem Quellsystem exportieren

Viele HSMs und verwandte Systeme unterstützen die Möglichkeit, Schlüssel gemäß der TR-34-Norm zu exportieren. Sie sollten den öffentlichen Schlüssel aus Schritt 1 als KRD-Zertifikat (Verschlüsselung) und den Schlüssel aus Schritt 3 als KDH-Zertifikat (Signierzertifikat) angeben. Für den Import in AWS Payment Cryptography sollten Sie das Format TR-34.2012 angeben, das kein CMS-Format mit zwei Durchgängen ist. Dieses Format kann auch als TR-34 Diebold-Format bezeichnet werden.

5. Rufen Sie den Importschlüssel auf

Als letzten Schritt rufen Sie die ImportKey-API mit einem KeyMaterialType von TR34_KEY_BLOCK auf. Das certificate-authority-public-key-identifier ist der KeyARN der in Schritt 3 importierten Root-CA, das Schlüsselmaterial aus Schritt 4 key-material wird verpackt und signing-key-certificate ist das Leaf-Zertifikat aus Schritt 3. Sie müssen auch das Import-Token aus Schritt 1 angeben.

6. Verwenden Sie den importierten Schlüssel für kryptografische Operationen oder nachfolgenden Import

Wenn der importierte Schlüssel TR31_K0_KEY_ENCRYPTION_KEY KeyUsage war, kann dieser Schlüssel für nachfolgende Schlüsselimporte mit TR-31 verwendet werden. Wenn der Schlüsseltyp ein anderer Typ war (z. B. TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY), kann der Schlüssel direkt für kryptografische Operationen verwendet werden.

Importieren Sie Schlüssel mithilfe asymmetrischer Techniken (RSA Unwrap)

Überblick: AWS Payment Cryptography unterstützt RSA Wrap/Unwrap für den Schlüsselaustausch, wenn TR-34 nicht möglich ist. Ähnlich wie bei TR-34 verwendet diese Technik asymmetrische RSA-Kryptografie, um symmetrische Schlüssel für den Austausch zu verschlüsseln. Im Gegensatz zu TR-34 ist bei dieser Methode die Nutzdaten jedoch nicht von der sendenden Partei signiert. Außerdem gewährleistet diese RSA-Wrap-Technik nicht die Integrität der Schlüsselmetadaten während der Übertragung, da keine Schlüsselblöcke enthalten sind.

Anmerkung

RSA Wrap kann verwendet werden, um TDES- und AES-128-Schlüssel zu importieren oder zu exportieren.

1. Rufen Sie den Befehl initialize import auf

Rufen Sie get-parameters-for-import auf, um den Importvorgang mit dem Schlüsselmaterialtyp KEY_CRYPTOGRAM zu initialisieren. WrappingKeyAlgorithm kann beim Austausch von TDES-Schlüsseln RSA_2048 sein. RSA_3072 oder RSA_4096 können beim Austausch von TDES- oder AES-128-Schlüsseln verwendet werden. Diese API generiert ein Schlüsselpaar für Schlüsselimporte, signiert den Schlüssel mit einem Zertifikatsstamm und gibt sowohl das Zertifikat als auch den Zertifikatsstamm zurück. Letztlich sollte der zu exportierende Schlüssel mit diesem Schlüssel verschlüsselt werden. Beachten Sie, dass diese Zertifikate nur von kurzer Dauer sind und nur für diesen Zweck bestimmt sind.

$ aws payment-cryptography get-parameters-for-import --key-material-type KEY_CRYPTOGRAM --wrapping-key-algorithm RSA_4096
{ "ImportToken": "import-token-bwxli6ocftypneu5", "ParametersValidUntilTimestamp": 1698245002.065, "WrappingKeyCertificateChain": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0....", "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0....", "WrappingKeyAlgorithm": "RSA_4096" }
2. Installieren Sie das öffentliche Zertifikat auf dem Schlüsselquellsystem

Bei vielen HSMs müssen Sie möglicherweise das in Schritt 1 generierte öffentliche Zertifikat (und/oder sein Stammzertifikat) installieren/laden/als vertrauenswürdig einstufen, um damit Schlüssel exportieren zu können.

3. Schlüssel aus dem Quellsystem exportieren

Viele HSMs und verwandte Systeme unterstützen die Möglichkeit, Schlüssel mithilfe von RSA Wrap zu exportieren. Sie sollten den öffentlichen Schlüssel aus Schritt 1 als (Verschlüsselungs-) Zertifikat (WrappingKeyZertifikat) angeben. Wenn Sie die Vertrauenskette benötigen, ist diese im Antwortfeld WrappingKeyCertificateChain in Schritt #1 enthalten. Wenn Sie den Schlüssel aus Ihrem HSM exportieren, sollten Sie als Format RSA, Padding Mode = PKCS #1 v2.2 OAEP (mit SHA 256 oder SHA 512) angeben.

4. Rufen Sie den Importschlüssel auf

Als letzten Schritt rufen Sie die ImportKey-API mit einem KeyMaterialType von KeyMaterial auf. Sie benötigen das Import-Token aus Schritt 1 und das key-material (verpackte Schlüsselmaterial) aus Schritt 3. Sie müssen die wichtigsten Parameter (z. B. die Schlüsselverwendung) angeben, da RSA Wrap keine Schlüsselblöcke verwendet.

$ cat import-key-cryptogram.json { "KeyMaterial": { "KeyCryptogram": { "Exportable": true, "ImportToken": "import-token-bwxli6ocftypneu5", "KeyAttributes": { "KeyAlgorithm": "AES_128", "KeyClass": "SYMMETRIC_KEY", "KeyModesOfUse": { "Decrypt": true, "DeriveKey": false, "Encrypt": true, "Generate": false, "NoRestrictions": false, "Sign": false, "Unwrap": true, "Verify": false, "Wrap": true }, "KeyUsage": "TR31_K0_KEY_ENCRYPTION_KEY" }, "WrappedKeyCryptogram": "18874746731....", "WrappingSpec": "RSA_OAEP_SHA_256" } } }
$ aws payment-cryptography import-key --cli-input-json file://import-key-cryptogram.json
{ "Key": { "KeyOrigin": "EXTERNAL", "Exportable": true, "KeyCheckValue": "DA1ACF", "UsageStartTimestamp": 1697643478.92, "Enabled": true, "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h", "CreateTimestamp": 1697643478.92, "KeyState": "CREATE_COMPLETE", "KeyAttributes": { "KeyAlgorithm": "AES_128", "KeyModesOfUse": { "Encrypt": true, "Unwrap": true, "Verify": false, "DeriveKey": false, "Decrypt": true, "NoRestrictions": false, "Sign": false, "Wrap": true, "Generate": false }, "KeyUsage": "TR31_K0_KEY_ENCRYPTION_KEY", "KeyClass": "SYMMETRIC_KEY" }, "KeyCheckValueAlgorithm": "CMAC" } }
5. Verwenden Sie den importierten Schlüssel für kryptografische Operationen oder nachfolgenden Import

Wenn der importierte Schlüssel TR31_K0_KEY_ENCRYPTION_KEY KeyUsage war, kann dieser Schlüssel für nachfolgende Schlüsselimporte mit TR-31 verwendet werden. Wenn der Schlüsseltyp ein anderer Typ war (z. B. TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY), kann der Schlüssel direkt für kryptografische Operationen verwendet werden.

Importieren Sie symmetrische Schlüssel mithilfe eines vorab festgelegten Schlüsselaustauschschlüssels (TR-31)

AWS Importprozess für symmetrische Schlüssel im Zahlungskryptografiebereich

Wenn Partner mehrere Schlüssel austauschen (oder um die Schlüsselrotation zu unterstützen), ist es üblich, zunächst einen Initial Key Encryption Key (KEK) unter Verwendung von Techniken wie Papierschlüsselkomponenten oder im Fall von AWS Zahlungskryptografie mithilfe von TR-34 auszutauschen.

Sobald ein KEK eingerichtet ist, können Sie diesen Schlüssel verwenden, um nachfolgende Schlüssel (einschließlich anderer KEK) zu transportieren. AWS Die Zahlungskryptografie unterstützt diese Art des Schlüsselaustauschs mithilfe von ANSI TR-31, das weit verbreitet ist und von HSM-Anbietern weitgehend unterstützt wird.

1. Schlüsselverschlüsselungsschlüssel (KEK) importieren

Es wird davon ausgegangen, dass Sie Ihren KEK bereits importiert haben und dass Ihnen der KeyARN (oder KeyAlias) zur Verfügung steht.

2. Schlüssel auf der Quellplattform erstellen

Wenn der Schlüssel noch nicht existiert, erstellen Sie den Schlüssel auf der Quellplattform. Umgekehrt können Sie den Schlüssel in AWS Payment Cryptography erstellen und stattdessen den export Befehl verwenden.

3. Exportieren Sie den Schlüssel von der Quellplattform

Achten Sie beim Exportieren darauf, dass Sie als Exportformat TR-31 angeben. Die Quellplattform fragt Sie außerdem nach dem Schlüssel, der exportiert werden soll, und nach dem zu verwendenden Schlüssel.

4. In AWS Payment Cryptography importieren

Wenn Sie den ImportKey-Befehl aufrufen, WrappingKeyIdentifier sollte dies der KeyARN (oder Alias) Ihres Schlüsselverschlüsselungsschlüssels sein und WrappedKeyBlock die Ausgabe von der Quellplattform sein.

$ aws payment-cryptography import-key \ --key-material="Tr31KeyBlock={WrappingKeyIdentifier="arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza",\ WrappedKeyBlock="D0112B0AX00E00002E0A3D58252CB67564853373D1EBCC1E23B2ADE7B15E967CC27B85D5999EF58E11662991FF5EB1381E987D744334B99D"}"
{ "Key": { "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h", "KeyAttributes": { "KeyUsage": "TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY", "KeyClass": "SYMMETRIC_KEY", "KeyAlgorithm": "AES_128", "KeyModesOfUse": { "Encrypt": true, "Decrypt": true, "Wrap": true, "Unwrap": true, "Generate": false, "Sign": false, "Verify": false, "DeriveKey": false, "NoRestrictions": false } }, "KeyCheckValue": "0A3674", "KeyCheckValueAlgorithm": "CMAC", "Enabled": true, "Exportable": true, "KeyState": "CREATE_COMPLETE", "KeyOrigin": "EXTERNAL", "CreateTimestamp": "2023-06-02T07:38:14.913000-07:00", "UsageStartTimestamp": "2023-06-02T07:38:14.857000-07:00" } }

Importiert asymmetrische (RSA) Schlüssel

Öffentliche RSA-Schlüssel importieren

AWS Payment Cryptography unterstützt den Import von öffentlichen RSA-Schlüsseln in Form von X.509-Zertifikaten. Um ein Zertifikat zu importieren, müssen Sie zuerst das Stammzertifikat importieren. Alle Zertifikate sollten zum Zeitpunkt des Imports noch nicht abgelaufen sein. Das Zertifikat sollte im PEM-Format vorliegen und Base64-codiert sein.

1. In das Stammzertifikat in Payment Cryptography importieren AWS
$ aws payment-cryptography import-key \ --key-material='{"RootCertificatePublicKey":{"KeyAttributes":{"KeyAlgorithm":"RSA_2048", \ "KeyClass":"PUBLIC_KEY", "KeyModesOfUse":{"Verify": true},"KeyUsage":"TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE"}, \ "PublicKeyCertificate":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURKVENDQWcyZ0F3SUJBZ0lCWkRBTkJna3Foa2lHOXcwQkFR..."}}'
{ "Key": { "CreateTimestamp": "2023-08-08T18:52:01.023000+00:00", "Enabled": true, "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/zabouwe3574jysdl", "KeyAttributes": { "KeyAlgorithm": "RSA_2048", "KeyClass": "PUBLIC_KEY", "KeyModesOfUse": { "Decrypt": false, "DeriveKey": false, "Encrypt": false, "Generate": false, "NoRestrictions": false, "Sign": false, "Unwrap": false, "Verify": true, "Wrap": false }, "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE" }, "KeyOrigin": "EXTERNAL", "KeyState": "CREATE_COMPLETE", "UsageStartTimestamp": "2023-08-08T18:52:01.023000+00:00" } }
2. Importieren Sie das Public-Key-Zertifikat in die AWS Zahlungskryptografie

Sie können jetzt einen öffentlichen Schlüssel importieren. Es gibt zwei Möglichkeiten, öffentliche Schlüssel zu importieren. TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATUREkann verwendet werden, wenn der Schlüssel dazu dient, Signaturen zu verifizieren (z. B. beim Import mit TR-34). TR31_D1_ASYMMETRIC_KEY_FOR_DATA_ENCRYPTIONkann beim Verschlüsseln von Daten verwendet werden, die für die Verwendung mit einem anderen System bestimmt sind.

$ aws payment-cryptography import-key \ --key-material='{"TrustedCertificatePublicKey":{"CertificateAuthorityPublicKeyIdentifier":"arn:aws:payment-cryptography:us-east-2:111122223333:key/zabouwe3574jysdl", \ "KeyAttributes":{"KeyAlgorithm":"RSA_2048","KeyClass":"PUBLIC_KEY","KeyModesOfUse":{"Verify":true},"KeyUsage":"TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE"},\ "PublicKeyCertificate":"LS0tLS1CRUdJTiB..."}}'
{ "Key": { "CreateTimestamp": "2023-08-08T18:55:46.815000+00:00", "Enabled": true, "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/4kd6xud22e64wcbk", "KeyAttributes": { "KeyAlgorithm": "RSA_4096", "KeyClass": "PUBLIC_KEY", "KeyModesOfUse": { "Decrypt": false, "DeriveKey": false, "Encrypt": false, "Generate": false, "NoRestrictions": false, "Sign": false, "Unwrap": false, "Verify": true, "Wrap": false }, "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE" }, "KeyOrigin": "EXTERNAL", "KeyState": "CREATE_COMPLETE", "UsageStartTimestamp": "2023-08-08T18:55:46.815000+00:00" } }