本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
导入密钥
重要
示例需要最新版本的 AWS CLI V2。在开始之前,请确保您已升级到最新版本。
导入对称密钥
使用非对称技术导入密钥 (TR-34)

TR-34 使用 RSA 非对称加密技术对对称密钥进行加密和签名以进行交换。这样可以确保封装密钥的机密性(加密)和完整性(签名)。
要导入自己的密钥,请查看上GitHub
-
调用 “初始化导入” 命令
调用
get-parameters-for-import
以初始化导入过程。此 API 为密钥导入生成密钥对,对密钥进行签名,然后返回证书和证书根。使用此密钥加密要导出的密钥。在 TR-34 术语中,这被称为 KRD 证书。这些证书采用 base64 编码,寿命短,仅用于此目的。保存该ImportToken
值。$
aws payment-cryptography get-parameters-for-import \
--key-material-type
TR34_KEY_BLOCK \--wrapping-key-algorithm
RSA_2048{ "ImportToken": "import-token-bwxli6ocftypneu5", "ParametersValidUntilTimestamp": 1698245002.065, "WrappingKeyCertificateChain": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0....", "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0....", "WrappingKeyAlgorithm": "RSA_2048" }
-
在密钥源系统上安装公共证书
大多数情况下 HSMs,您需要安装、加载或信任步骤 1 中生成的公共证书才能使用它导出密钥。这可能包括整个证书链,或者仅包括步骤 1 中的根证书,具体取决于 HSM。
-
在源系统上生成 key pair 并为 AWS 支付密码学提供证书链
为确保传输的有效载荷的完整性,发送方(密钥分发主机或 KDH)对其进行签名。为此生成公钥并创建公钥证书 (X509) 以提供给 AWS 支付密码学。
从 HSM 传输密钥时,请在该 HSM 上创建密钥对。HSM、第三方或诸如之类的服务 AWS Private CA 可以生成证书。
使用带 KeyMaterialType 有 of
RootCertificatePublicKey
和 of 的importKey
命令将根证书加载到 AWS 支付密码中 KeyUsageType 。TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE
对于中间证书,请使用带有
importKey
ofTrustedCertificatePublicKey
和 of KeyMaterialType KeyUsageType 的命令TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE
。对多个中间证书重复此过程。使用链KeyArn
中最后一次导入的证书作为后续导入命令的输入。注意
不要导入树叶证书。在导入命令期间直接提供它。
-
从源系统导出密钥
许多 HSMs 及相关系统都支持使用 TR-34 标准导出密钥。将步骤 1 中的公钥指定为 KRD(加密)证书,将步骤 3 中的密钥指定为 KDH(签名)证书。要导入到 Paym AWS ent Cryptography,请将格式指定为 TR-34.2012 非 CMS 双通格式,也可以称为 TR-34 Diebold 格式。
-
呼叫导入密钥
使用 of 调用 ImportKey API KeyMaterialType 。
TR34_KEY_BLOCK
使用步骤 3 中导入的最后一个 CA 的 KeyArncertificate-authority-public-key-identifier
,将步骤 4 中的封装密钥材料用于key-material
,使用步骤 3 中的叶子证书。signing-key-certificate
包括步骤 1 中的导入令牌。$
aws payment-cryptography import-key \
--key-material
='{"Tr34KeyBlock
": { \ "CertificateAuthorityPublicKeyIdentifier
": "arn:aws:payment-cryptography:us-east-2:111122223333:key/zabouwe3574jysdl", \ "ImportToken
": "import-token-bwxli6ocftypneu5", \ "KeyBlockFormat
": "X9_TR34_2012", \ "SigningKeyCertificate
": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUV2RENDQXFTZ0F3SUJ...", \ "WrappedKeyBlock
": "308205A106092A864886F70D010702A08205923082058E020101310D300B0609608648016503040201308203..."} \ }'{ "Key": { "CreateTimestamp": "2023-06-13T16:52:52.859000-04:00", "Enabled": true, "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza", "KeyAttributes": { "KeyAlgorithm": "TDES_3KEY", "KeyClass": "SYMMETRIC_KEY", "KeyModesOfUse": { "Decrypt": true, "DeriveKey": false, "Encrypt": true, "Generate": false, "NoRestrictions": false, "Sign": false, "Unwrap": true, "Verify": false, "Wrap": true }, "KeyUsage": "TR31_K1_KEY_ENCRYPTION_KEY" }, "KeyCheckValue": "CB94A2", "KeyCheckValueAlgorithm": "ANSI_X9_24", "KeyOrigin": "EXTERNAL", "KeyState": "CREATE_COMPLETE", "UsageStartTimestamp": "2023-06-13T16:52:52.859000-04:00" } }
-
使用导入的密钥进行加密操作或后续导入
如果导入 KeyUsage 的是 TR31 _K0_KEY_ENCRYPTION_KEY,则可以使用 TR-31 将此密钥用于后续的密钥导入。对于其他密钥类型(例如 TR31 _D0_SYMMETRIC_DATA_ENCRYPTION_KEY),您可以直接使用该密钥进行加密操作。
使用非对称技术导入密钥(RSA Unwrap)
概述:当 TR-34 不可行时,P AWS ayment Cryptography 支持 RSA 封装/解包进行密钥交换。与 TR-34 一样,此技术使用 RSA 非对称加密来加密对称密钥以进行交换。但是,与 TR-34 不同,此方法不让发送方签署有效载荷。此外,这种 RSA 封装技术无法在传输过程中保持密钥元数据的完整性,因为它不包括密钥块。
注意
您可以使用 RSA 封装来导入或导出 TDES 和 AES-128 密钥。
-
调用 “初始化导入” 命令
调用get-parameters-for-import以初始化导入过程
KEY_CRYPTOGRAM
。KeyMaterialType
RSA_2048
用于交换 TDES 密钥WrappingKeyAlgorithm
时使用。RSA_4096
在交换 TDES 或 AES-128 密钥时使用RSA_3072
或。此 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" }
-
在密钥源系统上安装公共证书
对于许多证书 HSMs,您需要安装、加载或信任步骤 1 中生成的公共证书(和/或其根证书),才能使用它导出密钥。
-
从源系统导出密钥
许多 HSMs 及相关系统都支持使用 RSA 封装导出密钥。将步骤 1 中的公钥指定为加密证书 (
WrappingKeyCertificate
)。如果您需要信任链,请使用 froWrappingKeyCertificateChain
m 步骤 1。从 HSM 导出密钥时,将格式指定为 RSA,填充模式 = PKCS #1 v2.2 OAEP(使用 SHA 256 或 SHA 512)。 -
打电话 import-key
使用 of 调用 import-key API
KeyMaterial
。KeyMaterialType
你需要步骤 1ImportToken
中的和步骤 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" } }
-
使用导入的密钥进行加密操作或后续导入
如果导入
KeyUsage
的是TR31_K0_KEY_ENCRYPTION_KEY
,则可以使用 TR-31 使用此密钥进行后续密钥导入。如果密钥类型为任何其他类型(例如TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY
),则可以直接使用该密钥进行加密操作。
使用预先建立的密钥交换密钥导入对称密钥 (TR-31)

交换多个密钥或支持密钥轮换时,合作伙伴通常首先交换初始密钥加密密钥 (KEK)。您可以使用诸如 paper 密钥组件之类的技术来做到这一点,或者对于 AWS 支付密码学,可以使用 TR-34。
建立 KEK 后,您可以使用它来传输后续密钥(包括其他 KEKs)。 AWS Payment Cryptography 使用 ANSI TR-31 支持这种密钥交换,HSM 供应商广泛使用和支持。
-
导入密钥加密密钥 (KEK)
确保你已经导入了 KEK 并有 KeyArn(或 keyAlias)可用。
-
在源平台上创建密钥
如果密钥不存在,请在源平台上创建密钥。或者,您可以在 “ AWS 支付密码学” 上创建密钥并使用export命令。
-
从源平台导出密钥
导出时,将导出格式指定为 TR-31。源平台将要求提供要导出的密钥和要使用的密钥加密密钥。
-
导入 AWS 支付密码学
调用import-key命令时,请使用密钥加密密钥的 KeyArn(或别名)。
WrappingKeyIdentifier
将源平台的输出用于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 支付密码学支持将 RSA 公钥作为 X.509 证书导入。要导入证书,请先导入其根证书。所有证书在导入时必须处于未过期状态。证书应采用 PEM 格式并采用 base64 编码。
-
将根证书导入 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" } }
-
将公钥证书导入 AWS 支付密码学
现在,您可以导入公钥。有两种导入公钥的选项:
-
TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE
如果密钥的目的是验证签名(例如,使用 TR-34 导入时),则使用。 -
TR31_D1_ASYMMETRIC_KEY_FOR_DATA_ENCRYPTION
在加密数据以供其他系统使用时使用。
$
aws payment-cryptography import-key \
--key-material
='{"Tr31KeyBlock
": { \ "WrappingKeyIdentifier
": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza", \ "WrappedKeyBlock
": "D0112B0AX00E00002E0A3D58252CB67564853373D1EBCC1E23B2ADE7B15E967CC27B85D5999EF58E11662991FF5EB1381E987D744334B99D"} \ }'{ "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" } }
-