导出密钥 - AWS 支付密码学

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

导出密钥

仅导出对称密钥。

重要

示例可能需要最新版本的 AWS CLI V2。在开始之前,请确保您已升级到最新版本

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

概述:TR-34 使用非RSA对称加密来加密对称密钥以进行交换,并确保数据来源(签名)。这样可以确保封装密钥的机密性(加密)和完整性(签名)。导出时,P AWS ayment Cryptography 成为密钥分发主机 (KDH),目标系统成为密钥接收设备 (KRD)。

1. 调用初始化导出命令

调用 get-parameters-for-export 以初始化导出过程。API这将生成用于密钥导出的密钥对,签署密钥并返回证书和证书根目录。最终,此命令生成的私钥用于对导出有效载荷进行签名。在 TR-34 术语中,这被称为KDH签名证书。请注意,这些证书的有效期很短,仅用于此目的。参数 ParametersValidUntilTimestamp指定它们的持续时间。

NOTE: 所有证书均以 base64 编码格式返回

$ aws payment-cryptography get-parameters-for-export \ --signing-key-algorithm RSA_2048 --key-material-type TR34_KEY_BLOCK
{ "SigningKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUV2RENDQXFTZ0F3SUJBZ0lRZFAzSzNHNEFKT0I4WTNpTmUvYlF0akFOQmdrcWhraUc5dzBCQVEwRkFEQ0IKaVRFTE1Ba0dBMVVFQmhNQ1ZWTXhHVEFYQmdOVkJBb01FRUZYVXlCRGNubHdkRzluY21Gd2FIa3hJVEFmQmdOVgpCQXNNR0VGWFV5QlFZWGx0Wlc1MElFTnllWEIwYjJkeVlYQm9lVEVSTUE4R0ExVUVDQXdJVm1seVoybHVhV0V4CkZUQVRCZ05WQkFNTUREVXlPVEF5TnpRMU5UUTVOVEVTTUJBR0ExVUVCd3dKUVhKc2FXNW5kRzl1TUI0WERUSXoKTURZd05qSXhOREF5TVZvWERUSXpNRFl4TXpJeU5EQXlNRm93TERFVk1CTUdBMVVFQXd3TU5USTVNREkzTkRVMQpORGsxTVJNd0VRWURWUVFGRXdveE9ETTROemt5TWpNeU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBCk1JSUJDZ0tDQVFFQXNTLzZ0TkhPK29RaTczVFMvYXJFSE40aEhRSjdFVThaT3dXN0RuNVlTTlZmZmM0b1B6ZVUKNHQ5Q045djViamxrL3p5TTJORllVL0NsTHNueFk2Y3IvaWwwY2hROVFtM1hUMHZVWGZGNzdRSzFSWnZzNkVkdApicVFaWGlqVDZ4UkJGcUxUMjV0dGJYQTlXMjlUd1d1eXdVN1c4dDZDZEIxSVFoOFFhYlBGaHRhWmVpWmVVWjNPCnRSa2NZU1VtRDRncWJxTElEL2M2RlpmdGpkYS9HbkhkZ1dmMk5oUUFvVnkxOS9ZZXhlZzdmTlVOZXVzWmRYSWYKZkNpM0VNaFF4S3lYY3dUMC9TZ2g5alZNakQwSDdyZWpCMGF4Tit0RUNqeVFEcm5XS2ZvbVA2ZFdkMExCSUM2bgpNQ1VKcmVtSDV3emVzZjFrWnF1VjRMbjYwdzZSNDNhQzRRSURBUUFCbzN3d2VqQUpCZ05WSFJNRUFqQUFNQjhHCkExVWRJd1FZTUJhQUZDNklyYUZzYnRUMDFGL2JjQ0c3Z3RVR1phM1RNQjBHQTFVZERnUVdCQlRXbldEWXNsMXMKalhnVExRRmFCYm1DakFZcHNUQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSApBd0VHQ0NzR0FRVUZCd01DTUEwR0NTcUdTSWIzRFFFQkRRVUFBNElDQVFCdUJmVjJmVFBlM0VkSEhnODFoVnZECnRQZUJsQzAvRy8wQ25XNFhPVEt2NUJtNXNudDBpczg4Yzc1SlRRUXdvdm9ScEVUTzZLdXdxMUFuUFR1c3RyRDYKL0I1bDd0MGw3ZUh6Z3pPVGZSN29Wem9TZXlGamkvVEVwK2M0NXBHWDBpY0ovTDlMaE0ybUVOZHhqNmtzVUcxMApuZnJCbzJyejkwRUJQYTVFb1lhMlRYYW90VlU4NFRiSFVyMlUzaFhrRExDWmhpSTdLY2I5cWRwenVlV0dWRzRTCmFreGJQcW5LQjMrek9JSzFZYTl2aENHZjRaMDFtWFFtVmRjQlpnbGE5SWFyeEcvKy9xWXEvNzBKalFnYk5HOUUKcUd1UFFadE5QQ0lJckJXOFN4cVpmUjVJbmxtUDlkZEY0SStOR002aHNoRUNXeWJCWkdUZjhYVCtwYVRFZXA2ZQpZUHp2UXI2cWQ4TExDYk5wOEI3ZTNrcmRKc0VUV0tBaU93TzFoZ1BReld2ZTRWKzBNdVlQaDczNk0xUS9rUTJVCmN5VmhDVDNCWENmOFhXVjMwYzg2c2J2dlhIeGJ5cVl1dWs4anZvRHl6T3R0T0QxbVdlRDBNeXV6OU1Fb3JTanIKM3ZwUDhBWXowMVI0UWNBMUR5cVl1dVErQ1BFRHlqU3VPK2tTQ1JIYXFLRzFOVzY5aVMxWWQyWG9LZTdtRlVpaAp3REM0WTlISlZjNjk5bWNMQ0NXWmhyYlZmZUJrOUxDS1BlUzZWUFZDMGdpVnJRYUtxbFhkTnh5SGJ2ZzBsRlUvCjZkUm5nYmVPMTZQdUhhN1hjL2FCUUF6N3JNaWlvRFFjSVdrQVdyK0NIOHl0UVFXZXRjSFdHNWRMMmZiSFgzOU0KMWhIeXFraHAwdDhXc0dTdVhjbWJBQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=", "SigningKeyCertificateChain": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUY0VENDQThtZ0F3SUJBZ0lSQUtlN2piaHFKZjJPd3FGUWI5c3VuOEV3RFFZSktvWklodmNOQVFFTkJRQXcKZ1lreEN6QUpCZ05WQkFZVEFsVlRNUmt3RndZRFZRUUtEQkJCVjFNZ1EzSjVjSFJ2WjNKaGNHaDVNU0V3SHdZRApWUVFMREJoQlYxTWdVR0Y1YldWdWRDQkRjbmx3ZEc5bmNtRndhSGt4RVRBUEJnTlZCQWdNQ0ZacGNtZHBibWxoCk1SVXdFd1lEVlFRRERBdzFNamt3TWpjME5UVTBPVFV4RWpBUUJnTlZCQWNNQ1VGeWJHbHVaM1J2YmpBZUZ3MHkKTXpBMk1EWXdNalEzTlRKYUZ3MHlPREEyTURZd016UTNOVEphTUlHSk1Rc3dDUVlEVlFRR0V3SlZVekVaTUJjRwpBMVVFQ2d3UVFWZFRJRU55ZVhCMGIyZHlZWEJvZVRFaE1COEdBMVVFQ3d3WVFWZFRJRkJoZVcxbGJuUWdRM0o1CmNIUnZaM0poY0doNU1SRXdEd1lEVlFRSURBaFdhWEpuYVc1cFlURVZNQk1HQTFVRUF3d01OVEk1TURJM05EVTEKTkRrMU1SSXdFQVlEVlFRSERBbEJjbXhwYm1kMGIyNHdnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDRHdBdwpnZ0lLQW9JQ0FRQzJyMld2eGJxZjJSUHhOem1JUk5ZeWZRQ2labGxYUVBQSDQycnAyQ1VtTk1VMkc2ZzdFRUZBCm5TWnNvRlN6Z1NJaEhUSWU4UDdUd1l3ckpPL3VNcEtka3lac1ppTEhUNGo4M1l1VkNlT1dSVERjdnRWMFV0M1IKaCs5UWVyaHhRQnVrK2dnZkRkT0FFUkR3S1pWckZqM3diT1FFMXY2WnRYSmpVZytWTXZKcEphUTg0WkFvYnpyUgpuY2JaL0hnbFhDM09xampSSk1laGJFaE93ZFJCTU4yQ2dTNHlhWTB3YlBvazhMSlRORVp5ZnkxUEtkaTd1UmxxCm9qeEdjc3pCRHFvdCsvTURBNVdZUjd5NVhiOGdOdSt0alkrMWdQSGRkWHFhRTR2bXV2cEtsQUttcml2SDRYWXQKZk9sa1kzYnRJckVuWDEwQkp1UXVGN0dRNyt3ZjN6TDZ4NFNIcGpiQWxpMDQyUmdXTVpibmlscW15YnhuUkRrUwpjZXZ3aEx2L0tnT09WM05KZlplWlVzT1N6NWNzTmRLME4rM2FCUlZQcVc5b2k3dDJ2dTc5eCtvb1pIS2FibFdiCmJDMDJxR1VDaTE3cHhDQ0JJdUVDZWJiWDhSS3dLa3RwbTRSOUZWYjBXZGFqNUc1ekdudTBsUlRMUVNaZ0QyU1EKSjRmQjh2em9Bb3BYenpSSStMSjNBaC9NcThXSTNHTHFIakhzcm5vdVJzMmNzcjVBYnNMbXUyUTlvMFJmNTd1RApwK1R1cXpKTysrNFpUWDlsb0N3UXdzKzNEZWUyL1pUSmJCNkFCdy9xdnovQjhsL2duY29Wc3lHTFhkaXdleTV1CjJHNnl2NGgrN0FBQldvdjhwWVBPUlRMY1FkanhVdWNDdllRYjJiRXY4ZGh1anN6TWo2ZDBDUUlEQVFBQm8wSXcKUURBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJRdWlLMmhiRzdVOU5SZjIzQWh1NExWQm1XdAowekFPQmdOVkhROEJBZjhFQkFNQ0FZWXdEUVlKS29aSWh2Y05BUUVOQlFBRGdnSUJBSS9Ta1NaS0pyMm1JakJ6ClJxQXQ3dmJ4eWNhQXhCU3VqbDlqVSttYkh1RDg4Qyt3TDh4TzNYRHJ1Vm9IZTdYanhrNXpaN0RWMjMza3haQlEKR3BET1hWaGNZdE5UNzk2YXd1K0VNU2kzK3RzTVJBMmMxODJ2ZVNDSE9HQmVseTlRS3FHWkJBZGU2ZGNzTkpMTwpiRE10NlB3NXpiRHNqalJnMGY5SGQrRFZheXV6QzBtdXVGWEZkT0txU0VWZVNmZWVNOUl5KzFMWDMzOFlVd05zCjdhS2ppaFVFSkg4ZkVFU1NEUGE5OGNOSEsyZ0t5UENrRUorMGlNZkJiTi9yUE1CYlhqTUtHYWpXSFFhWWtieDUKalVRUmdvd25ZbStycDRwRnNhalpSTFB0NE9mbkswNWYvRHdCUXVGWUUzUFJ2d2NQSWxJNHpkcWh0NE9ZSVY4RAo2MktleVEzb3R6eTdsVXIxamNrZldkSHpHc3NKVjYxc0xRTTBudVFNUnRTZjlHeEpYTEkyNjFaRWFMYVY5WFduCnY3YnByb090UTNiYk9RbjI0elJDVm5kZ0Z3aCtUVHMzVmFOQjhURmY2QjFoV1R5aTYzOCtoa1FTRnJTbXI1WTcKTXNGUXZXSVZVbjQ2cWNjVGNuNlc2Y2JIUlhyQkRiR0tlWUJiVjVXSkJwRUtSN0JuQ25HNnJCbmxGNjZ5eTUyLwpSbWZLRWZwWG1qbkh0WW94UnlQVlJZWDhPcnkzUFQrYSt0REtlMDBXY1MyM0U3MWl2QTBNdnVrODlwTzJIUVorCjNHUU9xdWJpQ3RMbVppdVFCZC9aN1NGWGlzcUxyTE5aOW52Q2VRSkxTckVDajRpZjV2dmJkWVhLdkozamhtSjkKeVZvc0xZVzA3SklzSFE0aDAwVWphSnhrVjdoWgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t", "SigningKeyAlgorithm": "RSA_2048", "ExportToken": "export-token-au7pvkbsq4mbup6i", "ParametersValidUntilTimestamp": "2023-06-13T15:40:24.036000-07:00" }
2. 将 AWS 支付密码证书导入接收系统

必要时,将步骤 1 中提供的证书链导入您的接收系统。

3. 生成 key pair,创建公共证书并将证书根提供给 Payment Cryptogr AWS aphy

为确保传输的有效载荷的机密性,发送方(称为密钥分发主机或KDH)对其进行加密。接收方(通常是您HSM或您的合作伙伴的HSM)需要为此生成一个公钥,然后创建一个可以提供给支付密码学的公钥证书 (x.509)。 AWS AWS Private CA 是生成证书的一种选择,但对使用的证书颁发机构没有限制。

获得证书后,您需要使用ImportKey命令和 KeyMaterialType of 和 of 和 of 将根证书加载到 Paym AWS ent Cryptograph ROOT_PUBLIC_KEY_CERTIFICATE y KeyUsageType 中。TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE

此证书 KeyUsageType 的名称是 TR31 _S0_ _ ASYMMETRIC _ KEY FOR DIGITAL _,SIGNATURE因为它是根密钥,用于对叶证书进行签名。用于导入/导出的树叶证书不会导入到 AWS 支付密码学中,而是以内联方式传递。

注意

如果之前导入了根证书,则可以跳过此步骤。

4. 调用导出密钥

作为最后一步,您将调 ExportKey API用 a KeyMaterialType 为TR34_KEY_BLOCKcertificate-authority-public-key-identifier将是步骤 3 中导入根 CA ARN 的密钥,WrappingKeyCertificate将是步骤 3 中的叶证书,export-key-identifier也是要导出的密钥ARN(或别名)。您还需要提供步骤 1 中的导出令牌。

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

概述:当交易对手RSA不提供 TR-34 选项时, AWS 支付密码学支持封装/解包进行密钥交换。与 TR-34 类似,该技术利用RSA非对称加密来加密对称密钥以进行交换。但是,与 TR-34 不同,此方法没有发送方对有效载荷进行签名。此外,这种RSA封装技术不包括用于在传输过程中保持密钥元数据完整性的密钥块。

注意

RSAwrap 可用于导出TDES和 AES -128 个密钥。

1. 在接收系统上生成RSA密钥和证书

创建(或标识)一个RSA用于接收封装密钥的密钥。 AWS 支付密码学需要采用 X.509 证书格式的密钥。证书应由已导入(或可以导入)到 AWS 支付密码学的根证书签名。

2. 在 AWS 支付密码学上安装根公共证书
$ 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. 呼叫导出密钥

接下来,你要指示 Payment AWS Cryptography 使用你的叶子证书导出密钥。您将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": "LS0tLS1CRUdJTiBD...", "WrappingSpec": "RSA_OAEP_SHA_256" } } }
$ aws payment-cryptography export-key --cli-input-json file://export-key.json
{ "WrappedKey": { "KeyMaterial": "18874746731E9E1C4562E4116D1C2477063FCB08454D757D81854AEAEE0A52B1F9D303FA29C02DC82AE7785353816EFAC8B5F4F79CC29A1DDA80C65F34364373D8C74E5EC67E4CB55DEA7F091210DCACD3C46FE4A5DAA0F0D9CAA7C959CA7144A5E7052F34AAED93EF44C004AE7ABEBD616C955BBA10993C06FB905319F87B9B4E1B7A7C7D17AF15B6154E807B9C574387A43197C31C6E565554437A252EFF8AC81613305760D11F9B53B08A1BA79EC7E7C82C48083C4E2D0B6F86C34AB83647BDD7E85240AD1AF3C0F6CA8C5BF323BB2D3896457C554F978F4C9436513F494130A6FADBC038D51898AAD72E02A89FF256C524E7B5D85B813751B718C4933D9DC6031F2C5B2E13351A54B6021B2DB72AA0C7EA54727FBCD557E67E5E7CC2E165576E39DB4DA33510BA9A3C847313103A18EF3B23A3440471864D58C79C569D5CD2A653AC16043CA9A61E6878F74C18EE15F9AB23754C37A945B68C0437C19F0079F74B573D9B59DAC25A20781DBE8075C947C9EDC76177A1B0794288CBF89567A541E8401C74E85B8E1C3E501860AF702F641CAA04327018A84EF3A82932A2BCF37047AB40FE77E0A6F68D0904C7E60983CD6F871D5E0E27EEF425C97D39E9394E8927EEF5D2EA9388DF3C5C241F99378DF5DADE8D0F0CF453C803BA38BA702B9651685FAFA6DCB4B14333F8D3C57F2D93E0852AA94EEC3AF3217CAE5873EFD9", "WrappedKeyMaterialFormat": "KEY_CRYPTOGRAM" } }
4. 将密钥导入接收系统

许多HSMs及相关系统都支持使用 RSA unwrap(包括 AWS 支付加密)导入密钥的功能。为此,请将步骤 1 中的公钥指定为(加密)证书。格式应指定为RSA,填充模式 = PKCS #1 v2.2OAEP(有 SHA 256)。确切的术语可能因人而异HSM。

注意

AWS 支付密码学将封装后的密钥输出到。hexBinary如果您的系统需要不同的二进制表示形式(如 base64),则可能需要在导入之前转换格式。

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

当合作伙伴交换多个密钥(或支持密钥轮换)时,通常首先使用诸如 paper 密钥组件之类的技术交换初始密钥加密密钥 (KEK),或者在 AWS 支付密码学中使用 TR-34 交换初始密钥加密密钥 ()。建立 a KEK 后,您可以使用此密钥传输后续密钥(包括其他密钥KEK)。 AWS Payment Cryptography 使用 ANSI TR-31 支持这种密钥交换,该密钥交换已被广泛使用并得到HSM供应商的广泛支持。

1. 交换密钥加密密钥 (KEK)

假设您已经交换了您的密钥,KEK并且有可用的密钥ARN(或keyAlias)。

2. 在 AWS 支付密码学上创建密钥

如果该密钥尚不存在,请创建它。相反,您可以在其他系统上创建密钥并改用 import 命令。

3. 从 “ AWS 支付密码学” 中导出密钥

导出时,格式将为 TR-31。调用时API,您将指定要导出的密钥和要使用的包装密钥。

$ 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都是派生自的密钥BDK,每个终端的密钥都是唯一的,但源自原始密钥BDK。此计算的派生数据称为密钥序列号 (KSN)。根据 X9.24,10 字节KSN通常由密钥集 ID 的 24 位、终端 ID 的 19 位和事务计数器的 21 位组成。TDES对于AES,12 字节KSN通常由用于 BDK ID 的 32 位、派生标识符 (ID) 的 32 位和用于事务计数器的 32 位组成。

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

AWS 支付密码学不强制在前两部分之间进行分割。KSN如果您希望将派生标识符与一起存储BDK,则可以为此使用 AWS 标签功能。

注意

的计数器部分KSN(32 位为 AESDUKPT)不用于 IPEK /IK 推导。因此,输入 12345678901234560001 和 1234567890123456999 将输出相同的结果。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" } }

在导出时指定密钥块标题

AWS Payment Cryptography 支持在以 ASC TR-31 或 TR-34 格式导出时修改或附加密钥区块信息的功能。下表描述了 TR-31 密钥块格式以及在导出时可以修改哪些元素。

按键方块属性 用途 导出时修改还是追加? 注意

版本 ID

表示用于保护底层密钥材料的方法。该标准定义了版本 A 和版本 C(密钥变体)、版本 B(使用派生TDES)和版本 D(使用AES密钥派生)。

不可修改

AWS 当包装密钥为时,Payment Cryptography 将使用版本 B,当包装密钥为AES时,将使用版本 D。TDES版本 A 和版本 C 已过时,仅支持导入操作。

密钥块长度

表示剩余消息的长度

不可修改

该值由服务自动计算。请注意,该服务可能会按照规范的要求使用密钥填充,因此在解密有效载荷之前,长度可能不正确。

密钥用法

代表密钥的允许用途,例如 C0(卡片验证)或 B0(基础派生密钥)

不可修改

算法

表示底层密钥的算法。该标准支持多种密钥类型,例如 T (TDES)、A (AES) 和 E (ECC)。 AWS 支付密码学目前支持 T、H 和 A 的值

不可修改

这是按原样从 AWS 支付密码学中导出的。

密钥用法

表示它可以用于的操作类型。示例包括 “生成并验证” (C) 和 “加密/解密/打包/解包 (B)”

修改*

密钥版本

如果密钥被替换/轮换,则表示密钥的版本号。这是一个数值,如果未指定,则默认为 00。

Append

密钥可导出性

表示是否可以导出密钥。N 表示无可导出性,E 表示根据 X9.24(密钥块)导出,S 表示按密钥块或非密钥块格式导出。

修改*

可选的钥匙块

Append

可选密钥块是一系列名称/值对,可以神秘地绑定到密钥。一个常见的例子是DUKPT密钥的 KeySet ID。实际格式包括可选区块的数量、每个区块的长度和填充块 (PB),但是 P AWS ayment Cryptography 会根据输入的名称/值对自动计算这些内容。

*修改时,新值必须比 AWS 付款加密中的当前值更具限制性。例如,如果当前的密钥使用模式是 Generate=True、Verify=True,则在导出时,你可以将其更改为 Generate=True、Verify=False。同样,如果密钥已设置为不可导出,则无法将其更改为可导出。

导出密钥时,Paym AWS ent Cryptography 会自动应用正在导出的密钥的当前值,无需修改。但是,在某些情况下,即使 AWS 支付密码学允许这样做,您也可能希望在将这些值发送到接收系统之前修改或附加这些值。一个例子是,在将密钥导出到支付终端时,通常将其可导出性限制为,Not Exportable因为终端通常只用于导入密钥,因此不应该随后导出密钥。

另一个例子是,当你想将关联的密钥元数据传递给接收系统时。在 TR-31 之前,常见的做法是创建自定义负载来发送此类信息,但是使用 TR-31,您可以通过加密方式将其绑定到特定格式的密钥。可以使用KeyVersion字段设置密钥版本。TR-31/X9.143 指定了某些常用标头,但只要它符合 AWS 支付密码学参数并且接收系统能够接受,就不限制使用其他标头。有关在导出过程中指定按键块的更多信息,请参阅API指南中的按键块标题

在此示例中,我们正在导出BDK密钥(例如导出到 aKIF)。我们将密钥版本指定为 02,将设置 KeyExportability 为 NON _,EXPORTABLE并为 KeySet ID 00提供可选值,ABCDEFAB这意味着它是TDES密钥 (00),初始密钥是ABCDEFABCD。由于未指定密钥使用模式,因此此密钥将继承 arn: aws: payment-cryptography: us-east-2:111122223333: key/5rplquuwozodpwsp 的使用模式 DeriveKey = true

注意

尽管在本示例中KIF将可导出性设置为 “不可导出”,但仍然能够派生密钥,例如中使用的 IPEK/IK,DUKPT并且这些派生的密钥可以导出,以便安装在设备上。这是标准特别允许的。

$ aws payment-cryptography --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": "D0128B0TX02N0100BI1000ABCDEFABCD1A2C0EADE244321640E94FE3A3C9D33800D47CE64238D9327DDBFE25B902352B29511AED4EF9BF65AF1E812BE665210F", "KeyCheckValue": "A4C9B3", "KeyCheckValueAlgorithm": "ANSI_X9_24" } }

导出非对称 (RSA) 密钥

调用 get-public-key-certificate 以导出证书形式的公钥。API这将导出证书及其以 base64 格式编码的根证书。

NOTE: 这API不是等效的-即使底层密钥相同,后续调用也可能会生成不同的证书。

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