View a markdown version of this page

导出密钥 - AWS Payment Cryptography

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

导出密钥

导出对称密钥

重要

在开始 AWS CLI 之前,请确保您拥有最新版本的。要升级,请参阅安装 AWS CLI

使用非对称技术导出密钥 () TR-34

TR-34 使用 RSA 非对称加密技术对称密钥进行加密和签名以进行交换。加密保护机密性,而签名则确保完整性。当您导出密钥时,P AWS ayment Cryptography 充当密钥分发主机 (KDH),您的目标系统将成为密钥接收设备 (KRD)。

注意

如果您的 HSM 支持 TR-34 导出但不支持 TR-34 导入,我们建议您首先使用在 HSM 和 AWS 支付加密之间建立共享 KEK。 TR-34然后,您可以使用 TR-31转移剩余的密钥。

  1. 初始化导出过程

    运行get-parameters-for-export以生成用于密钥导出的密钥对。我们使用这个密钥对来签署 TR-34 有效载荷。 TR-34 用术语来说,这是 KDH 签名证书。这些证书的有效期很短,仅在中ParametersValidUntilTimestamp指定的期限内有效。

    注意

    所有证书均采用 base64 编码。

    $ aws payment-cryptography get-parameters-for-export \ --signing-key-algorithm RSA_2048 \ --key-material-type TR34_KEY_BLOCK
    { "SigningKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUV2RENDQXFTZ0F3SUJ...", "SigningKeyCertificateChain": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS....", "SigningKeyAlgorithm": "RSA_2048", "ExportToken": "export-token-au7pvkbsq4mbup6i", "ParametersValidUntilTimestamp": "2023-06-13T15:40:24.036000-07:00" }
  2. 导入 AWS 向您的收款系统发送付款加密证书

    将步骤 1 中的证书链导入您的接收系统。

  3. 设置接收系统的证书

    为了保护传输的有效载荷,发送方 (KDH) 对其进行加密。您的接收系统(通常是您的 HSM 或合作伙伴的 HSM)需要生成公钥并创建 X.509 公钥证书。您可以使用 AWS 私有 CA 生成证书,但可以使用任何证书颁发机构。

    获得证书后,使用ImportKey命令将根证书导入 AWS 支付加密。将 KeyMaterialType 设置为 RootCertificatePublicKey,将 KeyUsageType 设置为 TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE

    我们TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE之所以使用,KeyUsageType是因为这是签署叶子证书的根密钥。您无需将分 AWS 支证书导入 Payment Cryptography,您可以将它们内联传递。

    注意

    如果您之前导入了根证书,请跳过此步骤。对于中间证书,请使用TrustedCertificatePublicKey

  4. 导出你的密钥

    使用KeyMaterialType设置为调ExportKey用 API TR34_KEY_BLOCK。你需要提供:

    • 步骤 3 中根 CA 的 keyArn 作为 CertificateAuthorityPublicKeyIdentifier

    • 步骤 3 中的叶子证书为 WrappingKeyCertificate

    • 要导出的密钥的 KeyArn(或别名)作为 --export-key-identifier

    • 步骤 1 中的导出令牌

    $ aws payment-cryptography export-key \ --export-key-identifier "example-export-key" \ --key-material '{"Tr34KeyBlock": { \ "CertificateAuthorityPublicKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/4kd6xud22e64wcbk", \ "ExportToken": "export-token-au7pvkbsq4mbup6i", \ "KeyBlockFormat": "X9_TR34_2012", \ "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUV2RENDQXFXZ0F3SUJBZ0lSQ..."} \ }'
    { "WrappedKey": { "KeyMaterial": "308205A106092A864886F70D010702A08205923082058...", "WrappedKeyMaterialFormat": "TR34_KEY_BLOCK" } }

使用非对称技术 (ECDH) 导出密钥

AWS 使用 ECDH 的付款加密密钥加密密钥导入流程

椭圆曲线 Diffie-Hellman (ECDH) 使用 ECC 非对称加密技术在双方之间建立共享密钥,无需预先交换密钥。ECDH 密钥是临时的,因此 AWS 支付密码学不存储它们。在此过程中,使用ECDH进行一次性KBPK/KEK计算。该派生密钥将立即用于包装您要传输的密钥,该密钥可以是另一个 KBPK、BDK、IPEK 密钥或其他密钥类型。

导出时, AWS 支付加密被称为 U 方(发起方),接收系统称为第 V 方(响应方)。

注意

ECDH 可用于交换任何对称密钥类型,但如果尚未建立 KEK,则它是唯一可用于传输 AES-256 密钥的方法。

  1. 生成 ECC 密钥对

    致电create-key为该过程创建 ECC 密钥对。此 API 为密钥导入或导出生成密钥对。创建时,指定可以使用此 ECC 密钥派生哪种密钥。使用 ECDH 交换(包装)其他密钥时,使用值。TR31_K1_KEY_BLOCK_PROTECTION_KEY

    注意

    尽管低级 ECDH 会生成可用于任何目的的派生密钥,但 AWS 支付密码学允许密钥仅用于单一派生密钥类型,从而限制了密钥意外重复用于多种用途。

    $ aws payment-cryptography create-key --exportable --key-attributes KeyAlgorithm=ECC_NIST_P256,KeyUsage=TR31_K3_ASYMMETRIC_KEY_FOR_KEY_AGREEMENT,KeyClass=ASYMMETRIC_KEY_PAIR,KeyModesOfUse='{DeriveKey=true}' --derive-key-usage "TR31_K1_KEY_BLOCK_PROTECTION_KEY"
    { "Key": { "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/wc3rjsssguhxtilv", "KeyAttributes": { "KeyUsage": "TR31_K3_ASYMMETRIC_KEY_FOR_KEY_AGREEMENT", "KeyClass": "ASYMMETRIC_KEY_PAIR", "KeyAlgorithm": "ECC_NIST_P256", "KeyModesOfUse": { "Encrypt": false, "Decrypt": false, "Wrap": false, "Unwrap": false, "Generate": false, "Sign": false, "Verify": false, "DeriveKey": true, "NoRestrictions": false } }, "KeyCheckValue": "2432827F", "KeyCheckValueAlgorithm": "CMAC", "Enabled": true, "Exportable": true, "KeyState": "CREATE_COMPLETE", "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY", "CreateTimestamp": "2025-03-28T22:03:41.087000-07:00", "UsageStartTimestamp": "2025-03-28T22:03:41.068000-07:00" } }
  2. 获取公钥证书

    get-public-key-certificate致电接收公钥作为 X.509证书,该证书由您的账户 CA 签署,该证书专用于特定地区的 AWS 支付加密。

    $ aws payment-cryptography get-public-key-certificate \ --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/wc3rjsssguhxtilv
    { "KeyCertificate": "LS0tLS1CRUdJTi...", "KeyCertificateChain": "LS0tLS1CRUdJT..." }
  3. 在交易对手系统上安装公共证书(第五方)

    对于许多 HSM,您需要安装、加载或信任步骤 1 中生成的公共证书才能建立密钥。这可能包括整个证书链,也可以仅包括根证书,具体取决于 HSM。有关具体说明,请查阅您的 HSM 文档。

  4. 在源系统上生成 ECC 密钥对并提供证书链给 AWS Payment Cryptography

    在 ECDH 中,各方生成一对密钥并商定一个通用密钥。为了使 AWS 支付密码学得出密钥,它需要交易对手的公钥格式的公钥。 X.509

    从 HSM 传输密钥时,在该 HSM 上创建密钥对。对于支持密钥块的 HSM,密钥标头将类似于D0144K3EX00E0000。创建证书时,通常在 HSM 上生成 CSR,然后 HSM、第三方或服务等 AWS 私有 CA 可以生成证书。

    使用带有 o KeyMaterialType f RootCertificatePublicKey 和 of 的importKey命令将根证书加载到 AWS 支付加密中 KeyUsageType 。TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE

    对于中间证书,使用带有 o KeyMaterialType f TrustedCertificatePublicKey 和 of KeyUsageType 的importKey命令TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE。对多个中间证书重复此过程。使用链KeyArn中最后导入的证书作为后续导出命令的输入。

    注意

    不要导入叶子证书。在导出命令期间直接提供。

  5. 从中派生密钥和导出密钥 AWS Payment Cryptography

    导出时,该服务使用 ECDH 派生密钥,然后立即将其用作 KBPK 来包装要导出的密钥。 TR-31要导出的密钥可以是任何 TDES 或 AES 密钥,只要包装密钥的强度至少与要导出的密钥一样强大。 TR-31

    $ aws payment-cryptography export-key \ --export-key-identifier arn:aws:payment-cryptography:us-west-2:529027455495:key/e3a65davqhbpjm4h \ --key-material='{ "DiffieHellmanTr31KeyBlock": { "CertificateAuthorityPublicKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/swseahwtq2oj6zi5", "DerivationData": { "SharedInformation": "ADEF567890" }, "DeriveKeyAlgorithm": "AES_256", "KeyDerivationFunction": "NIST_SP800", "KeyDerivationHashAlgorithm": "SHA_256", "PrivateKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/wc3rjsssguhxtilv", "PublicKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FUR..." } }'
    { "WrappedKey": { "WrappedKeyMaterialFormat": "TR31_KEY_BLOCK", "KeyMaterial": "D0112K1TB00E00007012724C0FAAF64DA50E2FF4F9A94DF50441143294E0E995DB2171554223EAA56D078C4CFCB1C112B33BBF05597EE700", "KeyCheckValue": "E421AD", "KeyCheckValueAlgorithm": "ANSI_X9_24" } }
  6. 在 Party V HSM 上使用 ECDH 派生一次性密钥

    许多 HSM 和相关系统支持使用 ECDH 建立密钥。将步骤 1 中的公钥指定为公钥,将步骤 3 中的密钥指定为私钥。有关允许的选项,例如派生方法,请参阅 API 指南。

    注意

    诸如哈希类型之类的派生参数必须在两端完全匹配。否则,您将生成不同的密钥。

  7. 将密钥导入目标系统

    最后,使用标准 TR-31 命令从 AWS 支付密码学中导入密钥。将 ECDH 派生密钥指定为 KBPK,并使用之前从支付加密中 AWS 导出的 TR-31 密钥块。

使用非对称技术导出密钥 (RSA Wrap)

当 TR-34 不可用时,您可以使用 RSA wrap/unwrap 进行密钥交换。例如 TR-34,此方法使用 RSA 非对称加密来加密对称密钥。但是,RSA 封装不包括:

  • 由发送方签名有效载荷

  • 在传输期间保持密钥元数据完整性的密钥块

注意

您可以使用 RSA 封装来导出 TDES 和密钥。 AES-128

  1. 在接收系统上创建 RSA 密钥和证书

    创建或识别用于接收封装密钥的 RSA 密钥。我们要求密钥采用 X.509 证书格式。确保证书由根证书签名,您可以将其导入 AWS 支付加密中。

  2. 将根公共证书导入到 AWS Payment Cryptography

    import-key与导入证书的--key-material选项一起使用

    $ aws payment-cryptography import-key \ --key-material='{"RootCertificatePublicKey": { \ "KeyAttributes": { \ "KeyAlgorithm": "RSA_4096", \ "KeyClass": "PUBLIC_KEY", \ "KeyModesOfUse": {"Verify": true}, \ "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE"}, \ "PublicKeyCertificate": "LS0tLS1CRUdJTiBDRV..."} \ }'
    { "Key": { "CreateTimestamp": "2023-09-14T10:50:32.365000-07:00", "Enabled": true, "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/nsq2i3mbg6sn775f", "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-09-14T10:50:32.365000-07:00" } }
  3. 导出你的密钥

    告诉 P AWS ayment Cryptography 使用您的分支证书导出您的密钥。你需要指定:

    • 您在步骤 2 中导入的根证书的 ARN

    • 出口叶子证书

    • 要导出的对称密钥

    输出是对称密钥的十六进制编码二进制包装(加密)版本。

    例示例-导出密钥
    $ cat export-key.json
    { "ExportKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi", "KeyMaterial": { "KeyCryptogram": { "CertificateAuthorityPublicKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/zabouwe3574jysdl", "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDEXAMPLE...", "WrappingSpec": "RSA_OAEP_SHA_256" } } }
    $ aws payment-cryptography export-key \ --cli-input-json file://export-key.json
    { "WrappedKey": { "KeyMaterial": "18874746731E9E1C4562E4116D1C2477063FCB08454D757D81854AEAEE0A52B1F9D303FA29C02DC82AE7785353816EFAC8B5F4F79CC29A1DDA80C65F34364373D8C74E5EC67E4CB55DEA7F091210DCACD3C46FE4A5DAA0F0D9CAA7C959CA7144A5E7052F34AAED93EF44C004AE7ABEBD616C955BBA10993C06FB905319F87B9B4E1B7A7C7D17AF15B6154E807B9C574387A43197C31C6E565554437A252EFF8AC81613305760D11F9B53B08A1BA79EC7E7C82C48083C4E2D0B6F86C34AB83647BDD7E85240AD1AF3C0F6CA8C5BF323BB2D3896457C554F978F4C9436513F494130A6FADBC038D51898AAD72E02A89FF256C524E7B5D85B813751B718C4933D9DC6031F2C5B2E13351A54B6021B2DB72AA0C7EA54727FBCD557E67E5E7CC2E165576E39DB4DA33510BA9A3C847313103A18EF3B23A3440471864D58C79C569D5CD2A653AC16043CA9A61E6878F74C18EE15F9AB23754C37A945B68C0437C19F0079F74B573D9B59DAC25A20781DBE8075C947C9EDC76177A1B0794288CBF89567A541E8401C74E85B8E1C3E501860AF702F641CAA04327018A84EF3A82932A2BCF37047AB40FE77E0A6F68D0904C7E60983CD6F871D5E0E27EEF425C97D39E9394E8927EEF5D2EA9388DF3C5C241F99378DF5DADE8D0F0CF453C803BA38BA702B9651685FAFA6DCB4B14333F8D3C57F2D93E0852AA94EEC3AF3217CAE5873EFD9", "WrappedKeyMaterialFormat": "KEY_CRYPTOGRAM" } }
  4. 将密钥导入您的接收系统

    许多 HSM 和相关系统支持使用 RSA unwrap(包括 AWS 支付加密)导入密钥。导入时,请指定:

    • 步骤 1 中的公钥作为加密证书

    • 格式为 RSA

    • 填充模式为 PKCS #1 v2.2 OAEP(带有 SHA 256)

    注意

    我们以 HexBinary 格式输出封装的密钥。如果您的系统需要不同的二进制表示形式,例如 base64,则可能需要转换格式。

使用预先建立的密钥交换密钥导出对称密钥 () TR-31

交换多个密钥或支持密钥轮换时,合作伙伴通常首先交换初始密钥加密密钥 (KEK)。您可以使用TR-34物理密钥交换等技术将 KEK 与 AWS 支付加密技术交换。建立 KEK 后,您可以使用它来传输后续密钥,包括其他 KEK。我们使用受到 HSM 供应商广泛支持的 ANSI TR-31 来支持这种密钥交换。

  1. 设置您的密钥加密密钥 (KEK)

    确保你已经交换了 KEK 并有 KeyArn(或 KeyAlias)可用。

  2. 开启您的密钥 AWS Payment Cryptography

    如果密钥尚不存在,请创建密钥。或者,你可以在其他系统上创建密钥并使用导入命令。

  3. 从中导出您的密钥 AWS Payment Cryptography

    以 TR-31 格式导出时,请指定要导出的密钥和要使用的打包密钥。

    例示例 — 使用 TR31 密钥块导出密钥
    $ aws payment-cryptography export-key \ --key-material='{"Tr31KeyBlock": \ { "WrappingKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza" }}' \ --export-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/5rplquuwozodpwsp
    { "WrappedKey": { "KeyCheckValue": "73C263", "KeyCheckValueAlgorithm": "ANSI_X9_24", "KeyMaterial": "D0144K0AB00E0000A24D3ACF3005F30A6E31D533E07F2E1B17A2A003B338B1E79E5B3AD4FBF7850FACF9A3784489581A543C84816C8D3542AE888CE6D4EDDFD09C39957B131617BC", "WrappedKeyMaterialFormat": "TR31_KEY_BLOCK" } }
  4. 将密钥导入您的系统

    使用系统的导入密钥实现来导入密钥。

导出 DUKPT 初始密钥 () IPEK/IK

使用 DUKPT 时,您可以为一组终端生成单个基本派生密钥 (BDK)。终端无法直接访问 BDK。相反,每个终端都会收到一个唯一的初始终端密钥,称为 IPEK 或初始密钥 (IK)。每个 IPEK 均使用唯一的密钥序列号 (KSN) 从 BDK 中派生。

KSN 结构因加密类型而异:

  • 对于 TDES:10 字节的 KSN 包括:

    • 密钥集 ID 为 24 位

    • 终端 ID 为 19 位

    • 21 位用于交易计数器

  • 对于 AES:12 字节 KSN 包括:

    • BDK ID 为 32 位

    • 派生标识符 (ID) 为 32 位

    • 32 位用于交易计数器

我们提供了一种生成和导出这些初始密钥的机制。您可以使用 TR-31、 TR-34或 RSA 封装方法导出生成的密钥。请注意,IPEK 密钥不能永久保存,也不能用于支付加密的后续 AWS 操作。

我们不强制在 KSN 的前两部分之间进行拆分。如果要将派生标识符与 BDK 一起存储,则可以使用 AWS 标签。

注意

KSN 的计数器部分(AES DUKPT 为 32 位)不用于推导。 IPEK/IK例如,12345678901234560001 和 12345678901234569999 的输入将生成相同的 IPEK。

$ aws payment-cryptography export-key \ --key-material='{"Tr31KeyBlock": { \ "WrappingKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza"}} ' \ --export-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi \ --export-attributes 'ExportDukptInitialKey={KeySerialNumber=12345678901234560001}'
{ "WrappedKey": { "KeyCheckValue": "73C263", "KeyCheckValueAlgorithm": "ANSI_X9_24", "KeyMaterial": "B0096B1TX00S000038A8A06588B9011F0D5EEF1CCAECFA6962647A89195B7A98BDA65DDE7C57FEA507559AF2A5D601D1", "WrappedKeyMaterialFormat": "TR31_KEY_BLOCK" } }

指定要导出的键块标题

以 ASC 或格式导出时,您可以修改 TR-31 或 TR-34添加密钥块信息。下表描述了 TR-31 键块格式以及在导出期间可以修改的元素。

密钥方块属性 用途 你能在导出期间修改吗? 注意

版本 ID

定义用于保护密钥材料的方法。该标准包括:

  • 版本 A 和 C(密钥变体-已弃用)

  • 版本 B(使用 TDES 推导)

  • 版本 D(使用 AES 派生密钥)

我们将版本 B 用于 TDES 封装密钥,使用版本 D 进行 AES 封装密钥。我们仅支持版本 A 和 C 用于导入操作。

密钥块长度

指定剩余消息的长度

我们会自动计算这个值。在解密有效载荷之前,长度可能看起来不正确,因为我们可以根据规范的要求添加密钥填充。

密钥用法

定义密钥的允许用途,例如:

  • C0(信用卡验证)

  • B0(基本派生密钥)

算法

指定底层密钥的算法。我们支持:

  • T (TDES)

  • H (HMAC)

  • (年龄)

我们按原样出口这个值。

密钥用法

定义允许的操作,例如:

  • 生成并验证 (C)

  • Encrypt/Decrypt/Wrap/Unwrap (B)

是*

密钥版本

表示密钥的版本号 replacement/rotation。如果未指定,则默认为 00。

是-可以追加

密钥可导出性

控制是否可以导出密钥:

  • N-没有可导出性

  • E-根据 X9.24 (键块)导出

  • S-以密钥块或非密钥块格式导出

是*

可选密钥块

是-可以追加

可选密钥块是以加密方式绑定到密钥 name/value 的成对密钥。例如,DUKPT 密钥的 KeySet ID。我们会根据您的 name/value 配对输入自动计算区块数量、每个区块的长度和填充区块 (PB)。

*修改值时,您的新值必须比 AWS 支付加密中的当前值更严格。例如:

  • 如果当前的密钥使用模式为 Generate=True、Verify=True,则可以将其更改为 Generate=True、Verify=False

  • 如果密钥已设置为不可导出,则无法将其更改为可导出

当您导出密钥时,我们会自动应用正在导出的密钥的当前值。但是,在发送到接收系统之前,您可能需要修改或附加这些值。以下是一些常见场景:

  • 将密钥导出到支付终端时,将其可导出性设置为,Not Exportable因为终端通常只导入密钥,不应将其导出。

  • 当您需要将关联的密钥元数据传递给接收系统时,使用 TR-31可选标头以加密方式将元数据绑定到密钥,而不是创建自定义负载。

  • 使用该KeyVersion字段设置密钥版本以跟踪密钥轮换。

TR-31/X9.143 定义了常用标头,但您可以使用其他标头,只要它们满足 AWS 支付加密参数并且您的接收系统可以接受它们。有关导出期间的密钥区块标头的更多信息,请参阅 API 指南中的密钥区块标头。

以下是导出具有以下规格的 BDK 密钥(例如,到 KIF)的示例:

  • 密钥版本:02

  • KeyExportability: 不可导出

  • KeySetID:00ABCDEFAB(00 表示 TDES 密钥,ABCDEFABCD 是初始密钥)

由于我们没有指定密钥的使用模式,因此该密钥继承了 arn: aws: payment-cryptography: us-east-2:111122223333: (= true) 的使用模式。key/5rplquuwozodpwsp DeriveKey

注意

即使在本示例中将可导出性设置为不可导出,KI F 仍然可以:

  • 派生密钥,例如在 DUKPT 中IPEK/IK使用的密钥

  • 导出这些派生密钥以安装在设备上

这是标准特别允许的。

$ aws payment-cryptography export-key \ --key-material='{"Tr31KeyBlock": { \ "WrappingKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza", \ "KeyBlockHeaders": { \ "KeyModesOfUse": { \ "Derive": true}, \ "KeyExportability": "NON_EXPORTABLE", \ "KeyVersion": "02", \ "OptionalBlocks": { \ "BI": "00ABCDEFABCD"}}} \ }' \ --export-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/5rplquuwozodpwsp
{ "WrappedKey": { "WrappedKeyMaterialFormat": "TR31_KEY_BLOCK", "KeyMaterial": "EXAMPLE_KEY_MATERIAL_TR31", "KeyCheckValue": "A4C9B3", "KeyCheckValueAlgorithm": "ANSI_X9_24" } }

常用标题

X9.143 为常见用例定义某些标头。除了 HM(HMAC 哈希)标头外, AWS 支付加密不解析或使用这些标头。

标头名称 用途 典型验证 注意

BI

DUKPT 的基本派生密钥标识符

2 个十六进制字符(TDES 为 00,AES 为 11),然后 TDES KSI 为 10 个十六进制字符,BDK ID (AES DUKPT) 为 8 个十六进制字符。

包含(BDK ID,对于 AES DUKPT)或密钥集标识符(KSI,对于 TDES DUKPT)。可以在交换 BDK ID 或 KSI 时使用,但不需要交换 IK 和 KS 方块中包含的其他数据。通常,在传输到 KIF 时使用 BI,而在向终端本身注入时使用 IK 或 KS。

HM

指定 HMAC 操作的哈希类型

  • 10 — SHA-1

  • 20 — SHA-224

  • 21 — SHA-256

  • 22 — SHA-384

  • 23 — SHA-512

  • 24 — SHA-512/224

  • 25 — SHA-512/256

  • 30 — SHA3-224

  • 31 — SHA3-256

  • 32 — SHA3-384

  • 33 — SHA3-512

  • 40 — SHAKE128

  • 41 — SHAKE256

该服务在导出时自动填充此字段,并将在导入时对其进行解析。可以导入服务不支持的哈希类型,例如 SHAKE128,但可能无法用于加密函数。

IK

AES DUKPT 的初始密钥序列号

16 十六进制字符

该值用于实例化接收设备上初始 DUKPT 密钥的使用,它标识源自 BDK 的初始密钥。该字段通常包含推导数据,但不包含计数器。使用 KS 进行 TDES DUKPT。

KS

TDES DUKPT 的初始密钥序列号

20 十六进制字符

该值用于实例化接收设备上初始 DUKPT 密钥的使用,它标识源自 BDK 的初始密钥。该字段通常包含推导数据 + 归零计数器值。使用 IK 进行 AES DUKPT。

KP

KBPK 的密钥校验值

2 个十六进制字符代表 KCV 方法(0 表示 X9.24 方法,01 表示 CMAC 方法)。其次是 KCV 值,通常为 6 个十六进制字符。例如,010FA329 表示使用 01 (CMAC) 方法计算的 0FA329 的 KCV。

根据 ANSI X9.24-1-2017 附录 A 计算;KCV 用于密钥验证,而不是作为完整性机制。

PB

填充块

随机可打印 ASCII 字符

该服务在导出时自动填充此字段,以确保可选标头是加密块长度的倍数

导出非对称 (RSA) 密钥

要以证书形式导出公钥,请使用get-public-key-certificate命令。此命令返回:

  • 证书

  • 根证书

两个证书均采用 base64 编码。

注意

此操作不是阶级——即使使用相同的底层密钥,后续调用也可能会生成不同的证书。

$ aws payment-cryptography get-public-key-certificate \ --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/5dza7xqd6soanjtb
{ "KeyCertificate": "LS0tLS1CRUdJTi...", "KeyCertificateChain": "LS0tLS1CRUdJT..." }