匯入金鑰 - AWS 支付密碼學

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

匯入金鑰

重要

範例可能需要最新版本的 AWS CLI V2。在開始使用之前,請確保您已升級到最新版本

匯入對稱金鑰

使用非對稱技術匯入金鑰 (TR-34)

AWS 付款密碼編譯金鑰加密金鑰匯入程序

概觀:TR-34 利用 RSA 非對稱加密技術來加密對稱金鑰以進行交換,並確保資料來源 (簽署)。這樣可確保包裝金鑰的機密性 (加密) 和完整性 (簽章)。

如果您想導入自己的密鑰,請查看 Github 上的示例項目。如需如何從其他平台匯入/匯出金鑰的說明,請參閱這些平台的使用者指南。

1. 呼叫初始化匯入命令

呼叫get-parameters-for-import以初始化匯入程序。此 API 將生成密鑰對以進行密鑰導入,簽名密鑰並返回證書和證書根目錄。最終,要導出的密鑰應該使用此密鑰進行加密。在 TR-34 術語中,這被稱為 KRD 證書。請注意,這些證書的壽命很短,僅用於此目的。

2. 在金鑰來源系統上安裝公用憑證

對於許多 HSM,您可能需要安裝/載入/信任步驟 1 中產生的公用憑證,才能使用它匯出金鑰。

3. 生成公鑰並提供證書根 AWS 支付密碼

為了確保傳輸的有效負載的完整性,它由發送方(稱為密鑰分發主機或 KDH)簽名。發送方將希望生成用於此目的的公鑰,然後創建可以提供回 AWS 付款密碼學的公鑰證書(X509)。 AWS Private CA 是產生憑證的一個選項,但對使用的憑證授權單位沒有任何限制。

一旦你有證書,你會想要使用importKey命令和和 KeyMaterialType 的ROOT_PUBLIC_KEY_CERTIFICATE根證書加載到 AWS 付款密碼編譯。 KeyUsageType TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE

4. 從來源系統匯出金鑰

許多 HSM 和相關系統都支援使用 TR-34 規範匯出金鑰的功能。您需要將步驟 1 中的公鑰指定為 KRD(加密)證書,並將步驟 3 中的密鑰指定為 KDH(簽名)證書。為了導入到 AWS 付款密碼學,您需要將格式指定為 TR-34.2012 非 CMS 兩次通過格式,也可以稱為 TR-34 迪博爾德格式。

5. 呼叫匯入金鑰

作為最後一 KeyMaterialType 步,您將調用進口密鑰 API 與. TR34_KEY_BLOCK certificate-authority-public-key-identifier將會是步驟 3 中匯入的根 CA 的 KeyARN,key-material將會包裝步驟 4 的金鑰材料,並且signing-key-certificate是步驟 3 中的分葉憑證。您還需要提供步驟 1 中的導入令牌。

6. 使用匯入的金鑰進行密碼編譯作業或後續匯入

如果匯入的 KeyUsage 是使用 TR-31 的金鑰匯入,則此金鑰可用於後續的金鑰匯入。如果金鑰類型是任何其他類型 (例如 TR31_D0_ 對稱資料 _ 加密金鑰),則該金鑰可以直接用於密碼編譯作業。

使用非對稱技術匯入金鑰 (RSA 解除換行)

概述:當 TR-34 不可行時,支 AWS 付密碼學支持 RSA 包裝/解包以進行密鑰交換。與 TR-34 類似,此技術利用 RSA 非對稱加密技術來加密對稱金鑰以進行交換。但是,與 TR-34 不同,此方法沒有由發送方簽名的有效負載。此外,由於不包含金鑰區塊,此 RSA 換行技術不會在傳輸期間維持金鑰中繼資料的完整性。

注意

RSA 換行可用來匯入或匯出 TDES 和 AES-128 金鑰。

1. 呼叫初始化匯入命令

呼叫get-parameters-for-import以使用 KEY_CRYGRAM 的金鑰材料類型初始化匯入程序。 WrappingKeyAlgorithm 在交換 TDES 金鑰時,可以使用 RSA_2048。在交換 TDES 或 AES-128 金鑰時,可以使用 RSA 或 RSA 此 API 將生成密鑰對以進行密鑰導入,使用證書根簽名密鑰並返回證書和證書根。最終,要導出的密鑰應該使用此密鑰進行加密。請注意,這些證書的壽命很短,僅用於此目的。

$ 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. 在金鑰來源系統上安裝公用憑證

對於許多 HSM,您可能需要安裝/載入/信任步驟 1 中產生的公用憑證 (和/或其根),才能使用它匯出金鑰。

3. 從來源系統匯出金鑰

許多 HSM 和相關系統都支援使用 RSA 換行匯出金鑰的功能。您需要將步驟 1 中的公開金鑰指定為 (加密) 憑證 (WrappingKey憑證)。如果您需要信任鏈,這會包含在步驟 #1 的回應欄位 WrappingKeyCertificateChain 中。從 HSM 匯出金鑰時,您需要將格式指定為 RSA,填補模式 = PKCS #1 v2.2 OAEP (使用 SH256 或 SHA 512)。

4. 呼叫匯入金鑰

作為最後一 KeyMaterialType 步,您將調用進口密鑰 API 與. KeyMaterial 您將需要步驟 1 中的導入令牌以及步驟 3 中的key-material(包裝的密鑰材料)。由於 RSA wrap 不使用密鑰塊,因此您將需要提供關鍵參數(例如密鑰用法)。

$ 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. 使用匯入的金鑰進行密碼編譯作業或後續匯入

如果匯入的 KeyUsage 是使用 TR-31 的金鑰匯入,則此金鑰可用於後續的金鑰匯入。如果金鑰類型是任何其他類型 (例如 TR31_D0_ 對稱資料 _ 加密金鑰),則該金鑰可以直接用於密碼編譯作業。

使用預先建立的金鑰交換金鑰匯入對稱金鑰 (TR-31)

AWS 支付加密對稱密鑰導入過程

當合作夥伴交換多個金鑰 (或支援金鑰輪換) 時,通常會先使用 paper 張金鑰元件等技術來交換初始金鑰加密金鑰 (KEK),或在使用 TR-34 進行 AWS 付款密碼編譯的情況下交換初始金鑰加密金鑰 (KEK)。

建立 KEK 後,您可以使用此金鑰來傳輸後續金鑰 (包括其他 KEK)。 AWS 支付密碼學使用 ANSI TR-31 支持這種密鑰交換,該密鑰已廣泛使用並受到 HSM 供應商的廣泛支持。

1. 匯入金鑰加密金鑰 (KEK)

假設您已經匯入了 KEK,而且您可以使用 KEYARN (或金鑰別名)。

2. 在來源平台上建立金鑰

如果金鑰尚未存在,請在來源平台上建立金鑰。相反,您可以在 AWS 付款密碼學上創建密鑰,然後使用該export命令。

3. 從來源平台匯出金鑰

匯出時,請務必將匯出格式指定為 TR-31。來源平台也會要求您輸入要匯出的金鑰和要使用的金鑰加密金鑰。

4. 導入到 AWS 付款密碼學

呼叫 ImportKey 指令時, WrappingKeyIdentifier 應該是金鑰加密金鑰的 KeyARN (或別名),而且 WrappedKeyBlock 是來源平台的輸出。

$ 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" } }

匯入非對稱 (RSA) 金鑰

匯入 RSA 公開金鑰

AWS 付款密碼編譯支援以 X.509 憑證的形式匯入公用 RSA 金鑰。若要匯入憑證,您必須先匯入其根憑證。匯入時,所有憑證都應該尚未過期。憑證應為 PEM 格式,且應以 base64 編碼。

1. 將根憑證匯入 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. 將公開金鑰憑證匯入 AWS 付款密碼

您現在可以匯入公開金鑰。匯入公開金鑰有兩個選項。 TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE如果密鑰的目的是驗證簽名,則可以使用(例如使用 TR-34 導入時)。 TR31_D1_ASYMMETRIC_KEY_FOR_DATA_ENCRYPTION可以在加密用於與其他系統一起使用的數據時使用。

$ 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" } }