本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
匯入金鑰
重要
範例可能需要 VAWSCLIV2 的最新版本。開始之前,請確定您已升級至最新版本 。
匯入對稱金鑰
使用非對稱技術匯入金鑰 (TR-34)
概觀:TR-34 使用RSA非對稱密碼編譯來加密對稱金鑰以進行交換,並確保資料來源 (簽署)。這可確保包裝金鑰的機密性 (加密) 和完整性 (簽章)。
如果您想要匯入自己的金鑰,請在 Github
- 1. 呼叫初始化匯入命令
-
呼叫
get-parameters-for-import
以初始化匯入程序。這API將產生金鑰對,用於金鑰匯入、簽署金鑰並傳回憑證和憑證根。最後,要匯出的金鑰應該使用此金鑰加密。在 TR-34 術語中,這稱為 KRD Cert。請注意,這些憑證為短期使用,僅供此用途使用。 - 2. 在金鑰來源系統上安裝公有憑證
-
對於許多 HSMs,您可能需要安裝/載入/信任步驟 1 中產生的公有憑證,才能使用它匯出金鑰。
- 3. 產生公有金鑰並提供 AWS 付款密碼編譯的憑證根目錄
-
為了確保傳輸承載的完整性,其由傳送方簽署 (稱為金鑰分發主機或 KDH)。傳送方會想要產生用於此目的的公有金鑰,然後建立可提供給 AWS Payment Cryptography 的公有金鑰憑證 (X509)。 AWS Private CA 是產生憑證的一個選項,但對使用的憑證授權機構沒有限制。
取得憑證後,您會想要使用
importKey
命令和 KeyMaterialType 的 和 ,將根憑證載入 AWS 付款密碼編譯ROOT_PUBLIC_KEY_CERTIFICATE
KeyUsageTypeTR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE
。 - 4. 從來源系統匯出金鑰
-
許多 HSMs和 相關系統支援使用 TR-34 規範匯出金鑰的能力。您需要將步驟 1 的公有金鑰指定為 KRD(加密) 憑證,並將步驟 3 的金鑰指定為 KDH(簽署) 憑證。若要匯入至 AWS 付款密碼編譯,您需要將格式指定為 TR-34.2012 CMS非雙通道格式,這些格式也可能稱為 TR-34 Diebold 格式。
- 5. 呼叫匯入金鑰
-
作為最後一個步驟,您將使用 KeyMaterialType 的 呼叫 importKey API
TR34_KEY_BLOCK
。certificate-authority-public-key-identifier
將是步驟 3 中匯入根 CA 的金鑰ARN,key-material
將包裝步驟 4 的金鑰材料,並且signing-key-certificate
是步驟 3 的分葉憑證。您也需要提供步驟 1 的匯入金鑰。 - 6. 使用匯入的金鑰進行密碼編譯操作或後續匯入
-
如果匯入的 KeyUsage 是 TR31_K0_KEY_ENCRYPTION_KEY,則此金鑰可用於使用 TR-31 的後續金鑰匯入。如果金鑰類型是任何其他類型 (例如 TR31_D0_SYMMETRIC_DATAENCRYPTION_KEY),則金鑰可以直接用於密碼編譯操作。
使用非對稱技術匯入金鑰 (RSA取消包裝)
概觀:當 TR-34 不可行時, AWS 付款密碼編譯支援金鑰交換的RSA包裝/取消包裝。與 TR-34 類似,此技術使用RSA非對稱密碼編譯來加密對稱金鑰以進行交換。不過,與 TR-34 不同,此方法沒有由傳送方簽署的承載。此外,由於不包含金鑰區塊,此RSA包裝技術不會在傳輸期間維護金鑰中繼資料的完整性。
注意
RSA 包裝可用於匯入或匯出 TDES和 AES-128 金鑰。
- 1. 呼叫初始化匯入命令
-
在交換金鑰時,呼叫
get-parameters-for-import
以 KEY_CRYPTOGRAM.. 的金鑰材料類型初始化匯入程序 WrappingKeyAlgorithm 可以是 RSA_2048TDES。RSA交換 或 AES-128 金鑰時,可以使用 _3072 TDES或 RSA_4096。這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. 在金鑰來源系統上安裝公有憑證
-
對於許多 HSMs,您可能需要安裝/載入/信任步驟 1 中產生的公有憑證 (和/或其根目錄),才能使用它匯出金鑰。
- 3. 從來源系統匯出金鑰
-
許多 HSMs和 相關系統支援使用RSA包裝匯出金鑰的功能。您需要將步驟 1 的公有金鑰指定為 (加密) 憑證 (WrappingKeyCertificate)。如果您需要信任鏈,這包含在步驟 #1 WrappingKeyCertificateChain 的回應欄位中。從 匯出金鑰時HSM,您需要將格式指定為 RSA,緩衝模式 = PKCS#1 v2.2 OAEP(使用 SHA 256 或 SHA 512)。
- 4. 呼叫匯入金鑰
-
作為最後一個步驟,您將使用 KeyMaterialType 的 呼叫 importKey API
KeyMaterial
。您需要從步驟 1 匯入金鑰,以及從步驟 3 匯入金鑰材料key-material
(已包裝金鑰材料)。您將需要提供金鑰參數 (例如金鑰用量),因為RSA包裝不會使用金鑰區塊。$
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 是 TR31_K0_KEY_ENCRYPTION_KEY,則此金鑰可用於使用 TR-31 的後續金鑰匯入。如果金鑰類型是任何其他類型 (例如 TR31_D0_SYMMETRIC_DATAENCRYPTION_KEY),則金鑰可以直接用於密碼編譯操作。
使用預先建立的金鑰交換金鑰 (TR-31) 匯入對稱金鑰
當合作夥伴交換多個金鑰 (或支援金鑰輪換) 時,通常會先使用紙本金鑰元件等技術交換初始金鑰加密金鑰 (KEK),或使用 TR-34 進行 AWS 付款密碼編譯。
建立 KEK 後,您可以使用此金鑰傳輸後續金鑰 (包括其他 KEKs)。 AWS 付款密碼編譯支援使用 ANSI TR-31 的此類金鑰交換,其廣泛使用且受到HSM廠商廣泛支援。
- 1. 匯入金鑰加密金鑰 (KEK)
-
假設您已匯入 ,KEK並擁有您可用的金鑰ARN (或 keyAlias)。
- 2. 在來源平台上建立金鑰
-
如果金鑰尚未存在,請在來源平台上建立金鑰。相反地,您可以在 AWS 付款密碼編譯上建立 金鑰,並改用
export
命令。 - 3. 從來源平台匯出金鑰
-
匯出時,請確定您將匯出格式指定為 TR-31。來源平台也會要求您提供要匯出的金鑰和要使用的金鑰加密金鑰。
- 4. 匯入 AWS 付款密碼編譯
-
呼叫 importKey 命令時, WrappingKeyIdentifier 應該是金鑰加密金鑰ARN的金鑰 (或別名) 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" } }