

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

# 管理密钥
<a name="keys-manage"></a>

要开始使用 AWS 支付加密，请创建 AWS 支付加密密钥。

本节介绍如何在整个生命周期中创建和管理各种 AWS 支付密码密钥类型。您将学习如何创建、查看和编辑密钥，以及如何标记密钥、创建密钥别名以及启用或禁用密钥。

 AWS 支付密码学密钥是一种区域资源。如果您打算在多个分区和帐户中使用给定的密钥 AWS 区域，则可以启用多区域密钥复制，这样可以安全地将密钥材料和元数据复制到 AWS 区域 您在同一个 AWS 分区和帐户中指定的密钥材料和元数据。多区域密钥复制中的源密钥被称为[主区域密钥](terminology.md#term.prk) (PRK)，它仍然是所有密钥管理活动的权威来源。复制的密钥称为[副本区域密钥](terminology.md#term.rrk) (RRK)，它是 PRK 的只读副本。您应该考虑在密钥中使用多区域密钥，以实现有关可用性、灾难恢复和低延迟的设计目标。

**Topics**
+ [创建密钥](create-keys.md)
+ [列出密钥](keys-list.md)
+ [启用和禁用 密钥](keys-enable-disable.md)
+ [复制 AWS 支付密码学密钥](keys-multi-region-replication.md)
+ [删除 密钥](keys-deleting.md)
+ [导入和导出密钥](keys-importexport.md)
+ [使用别名](keys-managealias.md)
+ [获取密钥](getkeys.md)
+ [标记密钥](tagging-keys.md)
+ [了解 AWS 支付密码学密钥的关键属性](keys-validattributes.md)

# 创建密钥
<a name="create-keys"></a>

 您可以使用 **CreateKey** API 操作创建 AWS 支付加密密钥。创建密钥时，需要指定诸如密钥算法、密钥用法、允许的操作以及密钥是否可导出等属性。创建 AWS 付款加密密钥后，您无法更改这些属性。

**注意**  
如果您启用了多区域密钥复制， AWS 账户 并且您创建了支付加密密钥，则该密钥将自动成为[主区域密钥 (PR](terminology.md#term.prk) K)。即使您未在**CreateKey**命令中指定`--replication-regions`参数，也会复制 PRK。有关更多信息，请参阅 [多区域密钥复制的工作原理](keys-multi-region-replication.md#how-mrr-works)。

**Topics**
+ [创建 3KEY TDES 基础派生密钥](#3des-deriv-mrr-example)
+ [为 CVV/ 创建 2KEY TDES 密钥 CVV2](#cvvkey-example)
+ [创建 HMAC 密钥](#hmac-example)
+ [创建 AES-256 密钥](#aes-example)
+ [创建 PIN 加密密钥 (PEK)](#pekkey-example)
+ [创建非对称 (RSA) 密钥](#asymmetrickey-example)
+ [创建 PIN 验证值 (PVV) 密钥](#pvv-example)
+ [创建非对称 ECC 密钥](#ECDH-example)

## 创建 3KEY TDES 基础派生密钥
<a name="3des-deriv-mrr-example"></a>

**Example**  
此命令创建一个 3KEY TDES 派生密钥，该密钥将[复制](keys-multi-region-replication.md#how-mrr-works)到美国东部（俄亥俄州）和美国西部（俄勒冈）区域。响应包括请求参数、后续调用的 Amazon 资源名称 (ARN) 和密钥检查值 (KCV)。  

```
$ aws payment-cryptography create-key --exportable --key-attributes \
     "KeyUsage=TR31_B0_BASE_DERIVATION_KEY, \ 
     KeyClass=SYMMETRIC_KEY,KeyAlgorithm=TDES_3KEY, \
     KeyModesOfUse={NoRestrictions=true}" \ 
     --replication-regions us-east-2 --region us-west-2
```
输出示例：  

```
{
    "Key": {
        "CreateTimestamp": "2022-10-26T16:04:11.642000-07:00",
        "Enabled": true,
        "Exportable": true,
        "KeyArn": "FE23D3",
        "KeyAttributes": {
            "KeyAlgorithm": "TDES_3KEY",
            "KeyClass": "SYMMETRIC_KEY",
            "KeyModesOfUse": {
                "Decrypt": false,
                "DeriveKey": true,
                "Encrypt": false,
                "Generate": false,
                "NoRestrictions": false,
                "Sign": false,
                "Unwrap": false,
                "Verify": true,
                "Wrap": false
            },
            "KeyUsage": "TR31_B0_BASE_DERIVATION_KEY"
        },
        "KeyCheckValue": "FE23D3",
        "KeyCheckValueAlgorithm": "ANSI_X9_24",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "KeyState": "CREATE_COMPLETE",
        "UsageStartTimestamp": "2022-10-26T16:04:11.559000-07:00"
}
```

## 为 CVV/ 创建 2KEY TDES 密钥 CVV2
<a name="cvvkey-example"></a>

**Example**  
此命令创建一个 2KEY TDES 密钥，用于生成和验证 CVVCVV2/值。响应包括请求参数、后续调用的 Amazon 资源名称 (ARN) 和密钥检查值 (KCV)。  

```
$ aws payment-cryptography create-key --exportable --key-attributes KeyAlgorithm=TDES_2KEY, \
    KeyUsage=TR31_C0_CARD_VERIFICATION_KEY,KeyClass=SYMMETRIC_KEY, \
    KeyModesOfUse='{Generate=true,Verify=true}'
```
输出示例：  

```
{
    "Key": {
        "CreateTimestamp": "2022-10-26T16:04:11.642000-07:00",
        "Enabled": true,
        "Exportable": true,
        "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/7f7g4spf3xcklhzu",
        "KeyAttributes": {
            "KeyAlgorithm": "TDES_2KEY",
            "KeyClass": "SYMMETRIC_KEY",
            "KeyModesOfUse": {
                "Decrypt": false,
                "DeriveKey": false,
                "Encrypt": false,
                "Generate": true,
                "NoRestrictions": false,
                "Sign": false,
                "Unwrap": false,
                "Verify": true,
                "Wrap": false
            },
            "KeyUsage": "TR31_C0_CARD_VERIFICATION_KEY"
        },
        "KeyCheckValue": "AEA5CD",
        "KeyCheckValueAlgorithm": "ANSI_X9_24",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "KeyState": "CREATE_COMPLETE",
        "UsageStartTimestamp": "2022-10-26T16:04:11.559000-07:00"
    }
}
```

## 创建 HMAC 密钥
<a name="hmac-example"></a>

**Example**  
HMAC 密钥用于生成或验证哈希消息身份验证码 (HMAC)。对于 HMAC 密钥，哈希类型是在创建密钥时分配的（例如 HMAC\$1 SHA224 和 HMAC\$1SHA512），并且无法修改。  

```
$ aws payment-cryptography create-key --exportable --key-attributes KeyAlgorithm=HMAC_SHA512,KeyUsage=TR31_M7_HMAC_KEY,KeyClass=SYMMETRIC_KEY,KeyModesOfUse='{Generate = true,Verify = true}'
```
输出示例：  

```
{
 "Key": {
 "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/qnobl5lghrzunce6",
 "KeyAttributes": {
 "KeyUsage": "TR31_M7_HMAC_KEY",
 "KeyClass": "SYMMETRIC_KEY",
 "KeyAlgorithm": "HMAC_SHA512",
 "KeyModesOfUse": {
 "Encrypt": false,
 "Decrypt": false,
 "Wrap": false,
 "Unwrap": false,
 "Generate": true,
 "Sign": false,
 "Verify": true,
 "DeriveKey": false,
 "NoRestrictions": false
 }
 },
 "KeyCheckValue": "2976E7",
 "KeyCheckValueAlgorithm": "HMAC",
 "Enabled": true,
 "Exportable": true,
 "KeyState": "CREATE_COMPLETE",
 "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
 "CreateTimestamp": "2025-07-30T10:06:12.142000-07:00",
 "UsageStartTimestamp": "2025-07-30T10:06:12.128000-07:00"
 }
}
```

## 创建 AES-256 密钥
<a name="aes-example"></a>

**Example**  
此命令创建用于数据加密和解密的 AES-256 对称密钥。AES 密钥为敏感数据提供强大的加密，通常用于支付处理以加密持卡人数据和其他敏感信息，但是 TDES 更常用于发卡机构用例，例如 EMV。  

```
$ aws payment-cryptography create-key --exportable --key-attributes KeyAlgorithm=AES_256,KeyUsage=TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY,KeyClass=SYMMETRIC_KEY,KeyModesOfUse='{Encrypt=true,Decrypt=true,Wrap=true,Unwrap=true}'
```
输出示例：  

```
{
    "Key": {
        "CreateTimestamp": "2025-02-02T10:15:30.142000-08:00",
        "Enabled": true,
        "Exportable": true,
        "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/kwapwa6qaifllw2h",
        "KeyAttributes": {
            "KeyAlgorithm": "AES_256",
            "KeyClass": "SYMMETRIC_KEY",
            "KeyModesOfUse": {
                "Decrypt": true,
                "DeriveKey": false,
                "Encrypt": true,
                "Generate": false,
                "NoRestrictions": false,
                "Sign": false,
                "Unwrap": true,
                "Verify": false,
                "Wrap": true
            },
            "KeyUsage": "TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY"
        },
        "KeyCheckValue": "2976F5",
        "KeyCheckValueAlgorithm": "CMAC",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "KeyState": "CREATE_COMPLETE",
        "UsageStartTimestamp": "2025-02-02T10:15:30.128000-08:00"
    }
}
```

## 创建 PIN 加密密钥 (PEK)
<a name="pekkey-example"></a>

**Example**  
此命令会创建用于加密 PIN 值的 3KEY TDES 密钥，但根据您的互操作性需求，pin 密钥也可以是 AES。 PINs 在验证期间（例如在交易中），您可以使用此密钥安全地存储 PINs 或解密。响应包括请求参数、后续调用的 ARN 和 KCV。  

```
$ aws payment-cryptography create-key --exportable --key-attributes \
    KeyAlgorithm=TDES_3KEY,KeyUsage=TR31_P0_PIN_ENCRYPTION_KEY, \
    KeyClass=SYMMETRIC_KEY,KeyModesOfUse='{Encrypt=true,Decrypt=true,Wrap=true,Unwrap=true}'
```
输出示例：  

```
{
    "Key": {
        "CreateTimestamp": "2022-10-27T08:27:51.795000-07:00",
        "Enabled": true,
        "Exportable": true,
        "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt",
        "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_P0_PIN_ENCRYPTION_KEY"
        },
        "KeyCheckValue": "7CC9E2",
        "KeyCheckValueAlgorithm": "ANSI_X9_24",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "KeyState": "CREATE_COMPLETE",
        "UsageStartTimestamp": "2022-10-27T08:27:51.753000-07:00"
    }
}
```

## 创建非对称 (RSA) 密钥
<a name="asymmetrickey-example"></a>

**Example**  
此命令生成一个新的非对称 RSA 2048 位密钥对。它会创建一个新的私钥及其匹配的公钥。您可以使用 [getPublicCertificate](keys.getpubliccertificate-example.md)API 检索公钥。  

```
$ aws payment-cryptography create-key --exportable \
    --key-attributes KeyAlgorithm=RSA_2048,KeyUsage=TR31_D1_ASYMMETRIC_KEY_FOR_DATA_ENCRYPTION, \
    KeyClass=ASYMMETRIC_KEY_PAIR,KeyModesOfUse='{Encrypt=true, Decrypt=True,Wrap=True,Unwrap=True}'
```
输出示例：  

```
{
    "Key": {
        "CreateTimestamp": "2022-11-15T11:15:42.358000-08:00",
        "Enabled": true,
        "Exportable": true,
        "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/nsq2i3mbg6sn775f",
        "KeyAttributes": {
            "KeyAlgorithm": "RSA_2048",
            "KeyClass": "ASYMMETRIC_KEY_PAIR",
            "KeyModesOfUse": {
                "Decrypt": true,
                "DeriveKey": false,
                "Encrypt": true,
                "Generate": false,
                "NoRestrictions": false,
                "Sign": false,
                "Unwrap": true,
                "Verify": false,
                "Wrap": true
            },
            "KeyUsage": "TR31_D1_ASYMMETRIC_KEY_FOR_DATA_ENCRYPTION"
        },
        "KeyCheckValue": "40AD487F",
        "KeyCheckValueAlgorithm": "SHA-1",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "KeyState": "CREATE_COMPLETE",
        "UsageStartTimestamp": "2022-11-15T11:15:42.182000-08:00"
    }
}
```

## 创建 PIN 验证值 (PVV) 密钥
<a name="pvv-example"></a>

**Example**  
此命令创建用于生成 PVV 值的 3KEY TDES 密钥。您可以使用此密钥生成 PVV，该PV可以与随后计算出的 PVV 进行比较。响应包括请求参数、后续调用的 ARN 和 KCV。  

```
$ aws payment-cryptography create-key --exportable \
    --key-attributes KeyAlgorithm=TDES_3KEY,KeyUsage=TR31_V2_VISA_PIN_VERIFICATION_KEY, \
    KeyClass=SYMMETRIC_KEY,KeyModesOfUse='{Generate=true,Verify=true}'
```
输出示例：  

```
{
    "Key": {
        "CreateTimestamp": "2022-10-27T10:22:59.668000-07:00",
        "Enabled": true,
        "Exportable": true,
        "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/37y2tsl45p5zjbh2",
        "KeyAttributes": {
            "KeyAlgorithm": "TDES_3KEY",
            "KeyClass": "SYMMETRIC_KEY",
            "KeyModesOfUse": {
                "Decrypt": false,
                "DeriveKey": false,
                "Encrypt": false,
                "Generate": true,
                "NoRestrictions": false,
                "Sign": false,
                "Unwrap": false,
                "Verify": true,
                "Wrap": false
            },
            "KeyUsage": "TR31_V2_VISA_PIN_VERIFICATION_KEY"
        },
        "KeyCheckValue": "7F2363",
        "KeyCheckValueAlgorithm": "ANSI_X9_24",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "KeyState": "CREATE_COMPLETE",
        "UsageStartTimestamp": "2022-10-27T10:22:59.614000-07:00"
    }
}
```

## 创建非对称 ECC 密钥
<a name="ECDH-example"></a>

**Example**  
此命令生成 ECC 密钥对，用于在双方之间建立 ECDH（Elliptic Curve Diffie-Hellman）密钥协议。使用 ECDH，各方生成自己的 ECC 密钥对，其中包含密钥用途 K3 和使用模式 X，然后交换公钥。然后，双方使用自己的私钥和收到的公钥来建立共享的派生密钥。  
为了保持支付中加密密钥的一次性使用原则，我们建议不要将ECC密钥对重复用于多种用途，例如ECDH密钥派生和签名。  

```
$ 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}'
```
输出示例：  

```
{
    "Key": {
        "CreateTimestamp": "2024-10-17T01:31:55.908000+00:00",
        "Enabled": true,
        "Exportable": true,
        "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/wc3rjsssguhxtilv",
        "KeyAttributes": {
            "KeyAlgorithm": "ECC_NIST_P256",
            "KeyClass": "ASYMMETRIC_KEY_PAIR",
            "KeyModesOfUse": {
                "Decrypt": false,
                "DeriveKey": true,
                "Encrypt": false,
                "Generate": false,
                "NoRestrictions": false,
                "Sign": false,
                "Unwrap": false,
                "Verify": false,
                "Wrap": false
            },
            "KeyUsage": "TR31_K3_ASYMMETRIC_KEY_FOR_KEY_AGREEMENT"
        },
        "KeyCheckValue": "7E34F19F",
        "KeyCheckValueAlgorithm": "SHA-1",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "KeyState": "CREATE_COMPLETE",
        "UsageStartTimestamp": "2024-10-17T01:31:55.866000+00:00"
    }
}
```

# 列出密钥
<a name="keys-list"></a>

 使用该**ListKeys**操作获取您的账户和地区中可供您访问的密钥列表。

**Example**  

```
$ aws payment-cryptography list-keys
```
输出示例：  

```
{
    "Keys": [
        {
            "CreateTimestamp": "2022-10-12T10:58:28.920000-07:00",
            "Enabled": false,
            "Exportable": true,
            "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/37y2tsl45p5zjbh2",
            "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_P1_PIN_GENERATION_KEY"
            },
            "KeyCheckValue": "7F2363",
            "KeyCheckValueAlgorithm": "ANSI_X9_24",
            "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
            "KeyState": "CREATE_COMPLETE",
            "UsageStopTimestamp": "2022-10-27T14:19:42.488000-07:00"
        }
    ]
}
```

# 启用和禁用 密钥
<a name="keys-enable-disable"></a>

您可以禁用和重新启用 AWS 支付加密密钥。密钥在创建完成后默认处于启用状态。如果您禁用了某个密钥，则在重新启用该密钥之前，该密钥将无法用于任何[加密操作](data-operations.md)。 Start/stop 使用命令立即生效，因此建议您在进行此类更改之前先查看使用情况。您也可以使用可选 `timestamp` 参数，将更改（开始或停止使用）设置为在将来生效。

由于付款加密密钥是临时的且易于撤消，因此禁用 AWS 支付加密密钥是比删除 AWS 付款加密密钥更安全的替代方法，后者具有破坏性和不可逆转性。如果您正在考虑删除 AWS 支付加密密钥，请先将其禁用，并确保将来无需使用该密钥来加密或解密数据。

**Topics**
+ [开始密钥使用](#keys-startusage)
+ [停止密钥使用](#keys-stopusage)

## 开始密钥使用
<a name="keys-startusage"></a>

 必须启用密钥使用才能使用密钥进行加密操作。如果密钥未启用，则可以通过此操作使其可用。该字段`UsageStartTimestamp`将表示密钥何时处于 became/will 活动状态。对于已启用的令牌，这将是过去，如果令牌待激活，则是将来。

**Example**  
在此示例中，要求启用密钥以使用密钥。响应中包含关键信息，并且启用标志已转换为 true。这也将反映在列表密钥响应对象中。  

```
$ aws payment-cryptography start-key-usage --key-identifier "arn:aws:payment-cryptography:us-east-2:111122223333:key/alsuwfxug3pgy6xh"
```

```
{
      "Key": {
      "CreateTimestamp": "2022-10-12T10:58:28.920000-07:00",
      "Enabled": true,
      "Exportable": true,
      "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/alsuwfxug3pgy6xh",
      "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_P1_PIN_GENERATION_KEY"
      },
      "KeyCheckValue": "369D",
      "KeyCheckValueAlgorithm": "ANSI_X9_24",
      "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
      "KeyState": "CREATE_COMPLETE",
      "UsageStartTimestamp": "2022-10-27T14:09:59.468000-07:00"
  }
}
```

## 停止密钥使用
<a name="keys-stopusage"></a>

 如果您不再打算使用密钥，则可以停止使用密钥以防止进一步的加密操作。此操作不是永久性的，因此您可以通过[开始密钥使用](#keys-startusage)来撤消该操作。您也可以将密钥设置为将来禁用。该字段`UsageStopTimestamp`将表示密钥何时被 became/will 禁用。

**Example**  
在此示例中，要求在将来停止使用密钥。执行后，除非通过[开始密钥使用](#keys-startusage)重新启用，否则该密钥不能用于加密操作。响应包含密钥信息，并且启用标志已转换为 false。这也将反映在列表密钥响应对象中。  

```
$ aws payment-cryptography stop-key-usage --key-identifier "arn:aws:payment-cryptography:us-east-2:111122223333:key/alsuwfxug3pgy6xh"
```

```
{
  "Key": {
      "CreateTimestamp": "2022-10-12T10:58:28.920000-07:00",
      "Enabled": false,
      "Exportable": true,
      "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/alsuwfxug3pgy6xh",
      "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_P1_PIN_GENERATION_KEY"
      },
      "KeyCheckValue": "369D",
      "KeyCheckValueAlgorithm": "ANSI_X9_24",
      "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
      "KeyState": "CREATE_COMPLETE",
      "UsageStopTimestamp": "2022-10-27T14:09:59.468000-07:00"
  }
}
```

# 复制 AWS 支付密码学密钥
<a name="keys-multi-region-replication"></a>

AWS Payment Cryptography 支持多区域密钥复制，允许您安全地将来自任何给定 AWS 支付密码密钥的密钥材料和元数据分发到同一 AWS 分区和账户 AWS 区域 中的一个或多个分区和账户。

源密钥被称为[主区域密钥 (PRK)](terminology.md#term.prk)，仍然是所有密钥管理活动的权威来源，而 PRK 和[副本区域密钥 (RRK)](terminology.md#term.rrk) 均可用于各自的加密操作。 AWS 区域

## 多区域密钥复制的好处
<a name="benefits"></a>

 下文概述了多区域密钥复制的一些好处。
+ *更轻松地设置高可用性应用程序*-P AWS ayment Cryptography 为您处理密钥分发，因此您 AWS 区域 无需为给定密钥创建分离副本即可使用多个密钥。
+ *高可用性和低延迟密钥*-通过多区域密钥复制，您可以分批访问密钥，从而 AWS 区域 提高密钥的可用性，从而降低延迟。
+ *密钥材料耐久性*-副本区域密钥是完整的密钥副本，在加密操作中可以独立于其主区域密钥使用。当 PRK 发生灾难性数据丢失时，RRK 可以提供耐用的副本。

## 多区域密钥复制的工作原理
<a name="how-mrr-works"></a>

启用多区域密钥复制后，Payment Cryptography 服务使用安全的密钥分发机制将密钥材料和元数据复制到 AWS 区域 您指定的副本。 AWS 对主要区域密钥元数据（例如密钥属性、状态和启用）的更改会自动复制到副本区域密钥。

## 限制和注意事项
<a name="limitations-considerations"></a>

以下是一些多区域密钥复制限制和注意事项。
+ 您必须为一个 AWS 区域 或特定的支付加密密钥启用此功能。
  + 如果为启用了此功能 AWS 区域，则启用后创建的所有 AWS 付款加密密钥都将复制到指定的。 AWS 区域在此区域创建的密钥将成为主区域密钥。此区域中的现有密钥不会被自动复制。您可以为密钥级别中的现有 AWS 区域 密钥启用多区域密钥复制。
  + 每个都 AWS 区域 可能具有唯一的多区域密钥复制设置。
  + 密钥的多区域复制设置优先于 AWS 区域 多区域密钥复制设置。
+ 副本区域密钥无法配置为复制到其他密钥 AWS 区域。
+ 多区域密钥复制可用于对称支付加密密钥，例如三重数据加密标准 (3DES)、高级加密标准 (AES) 和基于哈希的消息身份验证码 (HMAC)。
+ 非对称支付加密密钥不支持多区域密钥复制。
+ 副本区域密钥是只读密钥。对主区域密钥的所有更改都将应用于副本区域密钥。
+ 主区域密钥更改最终与副本区域密钥一致。
+ 付款加密密钥只能使用相同的 AWS 分区和账户进行复制。
+ 副本区域密钥计入您的 AWS 账户 等级 AWS 付款密码学限制。
+ 主区域密钥和副本区域密钥使用相同的密钥标识符，这使您可以在 IAM 策略中通过相同的 ARN 引用两个密钥。
+ 您必须拥有副本 AWS 区域 的`CreateKey`权限才能成功复制。

## 启用多区域密钥复制
<a name="enabling-mrr"></a>

您可以通过两种方式为 AWS 支付加密密钥启用多区域密钥复制。

1. **AWS 区域**：启用多区域密钥复制 AWS 区域 后，将应用于在该密钥中创建的所有新密钥。此方法为所有密钥提供一致的复制。

1. **特定 AWS 支付加密密钥**：您可以管理单个密钥的多区域密钥复制，从而实现更精细的控制。

启用多区域密钥复制后，您的付款加密密钥将复制到 AWS 区域 您指定的密钥。

**重要**  
无法暂停多区域密钥复制。启用复制后，您的密钥将自动复制到 AWS 区域 您指定的密钥。可以为特定密钥 AWS 区域 或付款加密密钥[禁用](#disabling-mrr)多区域密钥复制。您必须从主区域密钥中移除 AWS 区域 作为复制区域才能删除副本区域密钥。  
或者，您可以在 PRK 上调用 [https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_StopKeyUsage.html](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_StopKeyUsage.html)AP [https://docs.aws.amazon.com/cli/latest/reference/payment-cryptography/stop-key-usage.html](https://docs.aws.amazon.com/cli/latest/reference/payment-cryptography/stop-key-usage.html)I 或 CLI 命令来停止使用 PRK 和所有关联的 PRK RRKs。您将无法在加密操作中使用这些密钥。使用 `StopKeyUsage` API 或 **stop-key-usage** CLI 命令不会停止为您的 PRK 启用的持续多区域密钥复制。

您可以通过调用 `GetDefaultKeyReplicationRegions` API 或 CL **get-default-key-replication-regions** I 命令来检查特定区域中 AWS 支付加密密钥 AWS 区域 的多区域密钥复制设置。您调用此 API 操作或命令的 AWS 区域 位置中的密钥将成为您的 [PRK](terminology.md#term.prk)。

使用以下过程启用多区域密钥复制。

------
#### [ For AWS 区域 ]
+ 使用以下命令 AWS 区域 为您指定的启用多区域密钥复制。在此示例中，在美国东部（俄亥俄州）和美国西部（俄勒冈）启用了多区域密钥复制。要使用此命令，请将示例命令*italicized placeholder text*中的替换为您自己的信息。

  ```
  aws payment-cryptography enable-default-key-replication-regions \
      --replication-regions us-east-2 us-west-2
  ```

**注意**  
为启用多区域密钥复制 AWS 区域 不会更改任何现有 P AWS ayment Cryptography 密钥的复制配置。您可以在密钥级别为现有密钥启用此功能。只有在启用多区域密钥复制后创建的密钥才 AWS 区域 会使用区域复制设置。

------
#### [ For specific AWS Payment Cryptography keys ]
+ 使用以下命令为特定的支付加密密钥启用多区域密钥复制。在此示例中，美国东部（俄亥俄州）启用了多区域密钥复制。要使用此命令，请将示例命令*italicized placeholder text*中的替换为您自己的信息。

  ```
  aws payment-cryptography add-key-replication-regions \
      --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h \
      --replication-regions us-east-2
  ```

或者，您可以通过[在创建密钥请求 AWS 区域 中包含复制项来创建启用此功能的新支付加密](create-keys.md)密钥。

**注意**  
密钥复制设置优先于 AWS 区域 复制设置。

------

## 禁用多区域密钥复制
<a name="disabling-mrr"></a>

如果要禁用多区域密钥复制，可以调用**disable-default-key-replication**或 **remove-key-replication-regions** CLI 命令，具体取决于多区域密钥复制的启用方式。您需要指定密钥的 ARN，并指定 AWS 区域 以禁用多区域密钥复制。

**注意事项**  
复制区域密钥的删除最终是一致的。

您可以通过调用 `GetDefaultKeyReplicationRegions` API 或 CL **get-default-key-replication-regions** I 命令来检查特定区域中 AWS 支付加密密钥 AWS 区域 的多区域密钥复制设置。

使用以下过程禁用多区域密钥复制。

------
#### [ For AWS 区域 ]
+ 使用以下命令禁用 AWS 区域 您指定的多区域密钥复制。在此示例中，美国东部（俄亥俄州）禁用了多区域密钥复制。要使用此命令，请将示例命令*italicized placeholder text*中的替换为您自己的信息。

  ```
  aws payment-cryptography disable-default-key-replication-regions \
      --replication-regions us-east-2
  ```

------
#### [ For specific AWS Payment Cryptography keys ]
+ 使用以下命令禁用特定支付加密密钥的多区域密钥复制。在此示例中，美国东部（俄亥俄州）禁用了多区域密钥复制。要使用此命令，请将示例命令*italicized placeholder text*中的替换为您自己的信息。

  ```
  aws payment-cryptography remove-key-replication-regions \
      --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h \
      --replication-regions us-east-2
  ```

------

## 安全注意事项
<a name="security-considerations"></a>

以下是对付款加密密钥使用多区域密钥复制时的安全注意事项。有关更多信息，请参阅 [AWS 支付密码学安全最佳实践](security-best-practices.md)。
+ 限制共享密钥材料。
+ 创建 IAM 策略时，请遵循最低权限权限的委托人。
+ 您无法更改副本区域密钥，因为它是只读密钥。

## 最佳实践
<a name="best-practices"></a>

以下是将多区域密钥复制与 AWS 支付加密密钥配合使用时的一些最佳实践。
+ 即使多区域密钥复制到指定的密钥 AWS 区域 不是立即进行的，也要确保您的应用程序继续运行。如果您需要知道多区域密钥复制何时完成，可以使用 [GetKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetKey.html)API 操作进行监控。您可以使用监控密钥复制事件[AWS CloudTrail](https://docs.aws.amazon.com//awscloudtrail/latest/userguide/cloudtrail-user-guide.html)。
+ 测试并实施自动部署流程，以防从一个区域故障转移 AWS 区域 到另一个区域。

## 定价
<a name="pricing"></a>

您需要为使用 AWS 支付密码学创建的副本区域密钥付费。这些钥匙按每人收费 AWS 区域。有关最新的支付密码学定价信息，请参阅[AWS 支付密码定价页面](https://aws.amazon.com/payment-cryptography/pricing/)。

# 删除 密钥
<a name="keys-deleting"></a>

删除 AWS 支付加密密钥会删除密钥材料和与该密钥关联的所有元数据，除非在 AWS 支付密码学之外有该密钥的副本，否则该密钥的副本不可撤销。删除密钥后，您不能再解密用该密钥加密的数据，这意味着该数据将无法恢复。只有当您确定不再需要使用密钥且其他任何当事方不在使用此密钥时，才能将其删除。如果您不确定，可以考虑停止使用密钥，而不是将其删除。如果您以后需要再次使用已禁用的密钥，则可以重新启用该密钥，但是除非您可以从其他来源重新导入已删除的 AWS 付款加密密钥，否则无法恢复该密钥。

删除密钥之前，应确保不再需要该密钥。 AWS Payment Cryptography 不存储诸如 CVV2 此类的加密操作的结果，也无法确定任何永久加密材料是否需要密钥。

AWS Payment Cryptography 永远不会删除属于活跃 AWS 账户的密钥，除非您明确安排将其删除，并且强制等待期已到期。

但是，出于以下一个或多个原因，您可能会选择删除 AWS 付款加密密钥：
+ 完成不再需要的密钥的密钥生命周期
+ 为了避免与维护未使用的 AWS 支付加密密钥相关的管理开销

**注意**  
如果您[关闭或删除您的 AWS 账户](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/close-account.html)，则无法 AWS 访问您的付款加密密钥。在关闭账户的同时，您无需安排删除 AWS 支付密码密钥。

AWS Payment Cryptography 会在您计划删除 AWS 支付密码密钥以及实际删除支付密码密钥时在 AWS 您的[AWS CloudTrail](https://console.aws.amazon.com/cloudtrail)日志中记录一个条目。

使用多区域密钥复制、删除作为主区域密钥 (PRK) 的支付加密密钥 (PRK) 时，副本区域密钥 (RRK) 也将自动删除。无法像 PRK 那样删除 RRK。如果要删除 RRK，则需要[修改 PRK 的复制区域。](keys-multi-region-replication.md#disabling-mrr)

## 关于等待期限
<a name="deleting-keys-how-it-works"></a>

由于删除密钥是不可逆的，因此 AWS 支付密码学要求您将等待期设置为 3 到 180 天之间。默认的等待期限为七天。

但是，实际等待期限可能最多比您计划的时间长 24 小时。要获取删除 AWS 付款加密密钥的实际日期和时间，请使用 GetKey 操作。请务必记下时区。

在等待期间， AWS 付款加密密钥状态和密钥状态为 “**待删除**”。

**注意**  
待删除的 AWS 支付加密密钥不能用于任何[加密](data-operations.md)操作。

等待期结束后， AWS Payment Cryptography 会删除 AWS 支付加密密钥、其别名和所有相关的 AWS 支付密码学元数据。

使用等待期来确保你现在或将来都不需要 AWS 支付密码学密钥。如果您在等待期内发现确实需要密钥，可以在等待期限结束前取消密钥删除。等待期限结束后，将无法取消密钥删除， 将删除密钥。

**Topics**

**Example**  
在此示例中，请求删除密钥。除了基本的密钥信息外，还有两个相关的字段是密钥状态已更改为 DELETE\$1PENDING，以及 deletePendingTimestamp 表示当前计划删除密钥的时间。  

```
$ aws payment-cryptography delete-key \
                    --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h
```

```
  {
    "Key": {
        "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h",
        "KeyAttributes": {
            "KeyUsage": "TR31_V2_VISA_PIN_VERIFICATION_KEY",
            "KeyClass": "SYMMETRIC_KEY",
            "KeyAlgorithm": "TDES_3KEY",
            "KeyModesOfUse": {
                "Encrypt": false,
                "Decrypt": false,
                "Wrap": false,
                "Unwrap": false,
                "Generate": true,
                "Sign": false,
                "Verify": true,
                "DeriveKey": false,
                "NoRestrictions": false
            }
        },
        "KeyCheckValue": "0A3674",
        "KeyCheckValueAlgorithm": "ANSI_X9_24",
        "Enabled": false,
        "Exportable": true,
        "KeyState": "DELETE_PENDING",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "CreateTimestamp": "2023-06-05T12:01:29.969000-07:00",
        "UsageStopTimestamp": "2023-06-05T14:31:13.399000-07:00",
        "DeletePendingTimestamp": "2023-06-12T14:58:32.865000-07:00"
    }
}
```

**Example**  
在此示例中，待处理的删除被取消。成功完成后，密钥将不再按照之前的时间表被删除。响应包含基本的密钥信息；此外，两个相关字段已更改 - `KeyState` 和 `deletePendingTimestamp`。`KeyState` 返回到 CREATE\$1COMPLETE 的值，同时 `DeletePendingTimestamp` 被移除。  

```
$ aws payment-cryptography restore-key --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h
```

```
{
    "Key": {
        "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h",
        "KeyAttributes": {
            "KeyUsage": "TR31_V2_VISA_PIN_VERIFICATION_KEY",
            "KeyClass": "SYMMETRIC_KEY",
            "KeyAlgorithm": "TDES_3KEY",
            "KeyModesOfUse": {
                "Encrypt": false,
                "Decrypt": false,
                "Wrap": false,
                "Unwrap": false,
                "Generate": true,
                "Sign": false,
                "Verify": true,
                "DeriveKey": false,
                "NoRestrictions": false
            }
        },
        "KeyCheckValue": "0A3674",
        "KeyCheckValueAlgorithm": "ANSI_X9_24",
        "Enabled": false,
        "Exportable": true,
        "KeyState": "CREATE_COMPLETE",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "CreateTimestamp": "2023-06-08T12:01:29.969000-07:00",
        "UsageStopTimestamp": "2023-06-08T14:31:13.399000-07:00"
    }
}
```

# 导入和导出密钥
<a name="keys-importexport"></a>

您可以从其他解决方案导入 P AWS ayment Cryptography 密钥并将其导出到其他解决方案，例如 HSMs。许多客户使用导入和导出功能与服务提供商交换密钥。我们设计了 AWS 支付密码学，使用现代化的电子方法进行密钥管理，可帮助您保持合规性和控制力。我们建议使用基于标准的电子密钥交换，而不是纸质密钥组件。

**最低密钥优势以及对导入和导出功能的影响**  
PCI 需要特定的最低密钥强度才能进行加密操作、密钥存储和密钥传输。修订PCI标准后，这些要求可能会发生变化。规则规定，用于存储或传输的封装密钥的强度必须至少与受保护的密钥一样牢固。我们在导出过程中会自动强制执行此要求，并防止密钥受到较弱的密钥的保护，如下表所示。  
下表显示了支持的封装密钥、要保护的密钥和保护方法的组合。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/payment-cryptography/latest/userguide/keys-importexport.html)
有关更多信息，请参阅[附录 D-PCI HSM 标准中已批准算法的最小和等效密钥大小和优势](https://docs-prv.pcisecuritystandards.org/PTS/Derived%20Test%20Requirements/PCI_HSM_DTRs_v4.pdf)。

**密钥加密密钥 (KEK) 交换**  
我们建议使用 [ANSI X9.24 TR-34 标准](terminology.md#terms.tr34)。这种初始密钥类型可以称为密钥加密密钥 (KEK)、区域主密钥 (ZMK) 或区域控制主密钥 (ZCMK)。如果您的系统或合作伙伴尚不支持 TR-34，则可以使用 [RSA Wrap](terminology.md#terms.rsawrap) /Unwrap。如果您的需求包括交换 AES-256 密钥，则可以使用 [ECDH](terminology.md#terms.ecdh)。  
如果您需要继续处理 paper 密钥组件，直到所有合作伙伴都支持电子密钥交换，请考虑使用离线 HSM 或使用第三方[密钥保管人作为](terminology.md#terms.kcaas)服务。  
要导入您自己的测试密钥或将密钥与现有密钥同步 HSMs，请参阅上[GitHub](https://github.com/aws-samples/samples-for-payment-cryptography-service/tree/main/key-import-export)的 P AWS ayment Cryptography 示例代码。

**工作密钥 (WK) 交换**  
我们使用行业标准（[ANSI X9.24 TR 31-2018 和 X9.](terminology.md#terms.tr31) 143）来交换工作密钥。这要求你已经使用 TR-34、RSA Wrap、ECDH 或类似计划交换了 KEK。这种方法符合 PCI PIN 要求，即始终以加密方式将密钥材料与其类型和用法绑定。工作密钥包括收单机构工作密钥、发行人工作密钥、BDK 和 IPEK。

**Topics**
+ [导入密钥](keys-import.md)
+ [导出密钥](keys-export.md)
+ [高级主题](keyexchange-advanced.md)

# 导入密钥
<a name="keys-import"></a>

**重要**  
 示例需要最新版本的 AWS CLI V2。在开始之前，请确保您已升级到[最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

**Contents**
+ [导入密钥简介](#keys-import-introduction)
+ [导入对称密钥](#keys-import-symmetric)
  + [使用非对称技术导入密钥 (TR-34)](#keys-import-tr34)
  + [使用非对称技术 (ECDH) 导入密钥](#keys-import-ecdh)
  + [使用非对称技术导入密钥（RSA Unwrap）](#keys-import-rsaunwrap)
  + [使用预先建立的密钥交换密钥导入对称密钥 (TR-31)](#keys-import-tr31)
+ [导入非对称（RSA、ECC）公钥](#keys-import-asymmetric)
  + [导入 RSA 公钥](#keys-import-rsapublickey)
  + [导入 ECC 公钥](#keys-import-eccpublickey)

## 导入密钥简介
<a name="keys-import-introduction"></a>

**注意**  
使用 X9.143、TR-31 或 TR-34 密钥块导入密钥时，P AWS ayment Cryptography 通常会保留（但不使用）任何可选标头。HM（HMAC 哈希类型）标头用于加密操作。KP 标头（包装密钥的 KCV）特定于导入过程，不会保留。

与交易对手交换密钥时，通常是先交换密钥交换密钥 (KEK)。然后，此密钥将用于保护后续密钥。使用电子格式，可以使用非对称技术交换 KEK，例如 TR-34、ECDH 或 RSA 包装。后续密钥将使用对称密钥交换（例如 TR-31）进行交换。该KEK的使用寿命很长，并且只能根据政策及其定义的加密期限每隔几年更新一次。

如果只交换一两个密钥，您也可以选择使用非对称技术直接交换该密钥，例如 BDK。 AWS 支付密码学支持两种密钥交换方法。

## 导入对称密钥
<a name="keys-import-symmetric"></a>

### 使用非对称技术导入密钥 (TR-34)
<a name="keys-import-tr34"></a>

![\[AWS 付款密码学密钥加密密钥导入流程\]](http://docs.aws.amazon.com/zh_cn/payment-cryptography/latest/userguide/images/keyimport-process-kek-import.png)


 TR-34 使用 RSA 非对称加密技术对对称密钥进行加密和签名以进行交换。这样可以确保封装密钥的机密性（加密）和完整性（签名）。

 要导入自己的密钥，请查看上[GitHub](https://github.com/aws-samples/samples-for-payment-cryptography-service/tree/main/key-import-export)的 “ AWS 支付密码学” 示例项目。有关如何从其他平台获取 import/export 密钥的说明，可在这些平台上查看示例代码，[GitHub](https://github.com/aws-samples/samples-for-payment-cryptography-service/tree/main/key-import-export)也可以参阅这些平台的用户指南。

1. 

****调用 “初始化导入” 命令****  
调用 `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"
   }
   ```

1. 

****在密钥源系统上安装公共证书****  
大多数情况下 HSMs，您需要安装、加载或信任步骤 1 中生成的公共证书才能使用它导出密钥。这可能包括整个证书链，或者仅包括步骤 1 中的根证书，具体取决于 HSM。

1. 

****在源系统上生成 key pair 并为 AWS 支付密码学提供证书链****  
为确保传输的有效载荷的完整性，发送方（密钥分发主机或 KDH）对其进行签名。为此生成公钥并创建公钥证书 (X509) 以提供给 AWS 支付密码学。

    从 HSM 传输密钥时，请在该 HSM 上创建密钥对。HSM、第三方或诸如之类的服务 AWS 私有 CA 可以生成证书。

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

   对于中间证书，请使用带有 `importKey` of `TrustedCertificatePublicKey` 和 of KeyMaterialType KeyUsageType 的命令`TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE`。对多个中间证书重复此过程。使用链`KeyArn`中最后一次导入的证书作为后续导入命令的输入。
**注意**  
不要导入树叶证书。在导入命令期间直接提供它。

1. 

****从源系统导出密钥****  
许多 HSMs 及相关系统都支持使用 TR-34 标准导出密钥。将步骤 1 中的公钥指定为 KRD（加密）证书，将步骤 3 中的密钥指定为 KDH（签名）证书。要导入到 Paym AWS ent Cryptography，请将格式指定为 TR-34.2012 非 CMS 双通格式，也可以称为 TR-34 Diebold 格式。

1. 

****呼叫导入密钥****  
使用 of 调用 ImportKey API KeyMaterialType 。`TR34_KEY_BLOCK`使用步骤 3 中导入的最后一个 CA 的 KeyArn`certificate-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"
     }
   }
   ```

1. 

****使用导入的密钥进行加密操作或后续导入****  
如果导入 KeyUsage 的是 TR31 \$1K0\$1KEY\$1ENCRYPTION\$1KEY，则可以使用 TR-31 将此密钥用于后续的密钥导入。对于其他密钥类型（例如 TR31 \$1D0\$1SYMMETRIC\$1DATA\$1ENCRYPTION\$1KEY），您可以直接使用该密钥进行加密操作。

### 使用非对称技术 (ECDH) 导入密钥
<a name="keys-import-ecdh"></a>

![\[AWS 使用 ECDH 的支付密码学密钥加密密钥导入流程\]](http://docs.aws.amazon.com/zh_cn/payment-cryptography/latest/userguide/images/keyimport-ecdh-import.png)


Elliptic Curve Diffie-Hellman（ECDH）使用 ECC 非对称加密技术在双方之间建立共享密钥，无需预先交换密钥。ECDH 密钥是临时性的，因此 AWS 支付密码学不会存储它们。在此过程中，使用 ECDH 导出一次性的 [KBPK/KEK](terminology.md#terms.kbpk)。该派生密钥会立即用于包装您要传输的实际密钥，该密钥可能是另一个 KBPK、IPEK 密钥或其他密钥类型。

导入时，发送系统通常被称为U方（发起方）， AWS 支付密码学被称为第五方（响应方）。

**注意**  
 虽然 ECDH 可用于交换任何对称密钥类型，但它是唯一可以安全传输 AES-256 密钥的方法。

1. 

****生成 ECC 密钥对****  
调用`create-key`为该过程创建 ECC key pair。此 API 为密钥导入或导出生成密钥对。在创建时，请指定使用此 ECC 密钥可以派生哪种密钥。使用 ECDH 交换（封装）其他密钥时，请使用值。`TR31_K1_KEY_BLOCK_PROTECTION_KEY`
**注意**  
 尽管低级 ECDH 会生成可用于任何目的的派生密钥，但 P AWS ayment Cryptography 允许密钥仅用于单一派生密钥类型，从而限制了出于多种目的意外重复使用密钥。

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

1. 

****获取公钥证书****  
`get-public-key-certificate`致电接收由您账户的 CA 签署的 X.509 证书的公钥，该证书特定于特定地区的 AWS 支付密码学。  
**Example**  

   ```
   $ aws payment-cryptography get-public-key-certificate \
                    --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/wc3rjsssguhxtilv
   ```

   ```
   {
               "KeyCertificate": "LS0tLS1CRUdJTi...",
               "KeyCertificateChain": "LS0tLS1CRUdJT..."
         }
   ```

1. 

****在交易对手系统上安装公共证书（U 方）****  
对于许多证书 HSMs，您需要安装、加载或信任步骤 1 中生成的公共证书才能使用它导出密钥。这可能包括整个证书链，或者仅包括步骤 1 中的根证书，具体取决于 HSM。有关更多信息，请查阅您的 HSM 文档。

1. 

****在源系统上生成 ECC key pair 并为 AWS 支付密码学提供证书链****  
在 ECDH 中，各方生成一个密钥对，并就公用密钥达成一致。为了让 AWS 支付密码学派生密钥，它需要交易对手的公钥采用 X.509 公钥格式。

   从 HSM 传输密钥时，请在该 HSM 上创建密钥对。对于 HSMs 该支持按键块，按键标题将类似于`D0144K3EX00E0000`。创建证书时，您通常会在 HSM 上生成 CSR，然后 HSM、第三方或诸如之类的服务 AWS 私有 CA 可以生成证书。

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

   对于中间证书，请使用带有 `importKey` of `TrustedCertificatePublicKey` 和 of KeyMaterialType KeyUsageType 的命令`TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE`。对多个中间证书重复此过程。使用链`KeyArn`中最后一次导入的证书作为后续导入命令的输入。
**注意**  
不要导入树叶证书。在导入命令期间直接提供它。

1. 

****在 U 方 HSM 上使用 ECDH 获取一次性密钥****  
许多 HSMs 相关系统都支持使用 ECDH 建立密钥。将步骤 1 中的公钥指定为公钥，将步骤 3 中的密钥指定为私钥。有关允许的选项，例如派生方法，请参阅 [API](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportDiffieHellmanTr31KeyBlock.html) 指南。
**注意**  
 诸如哈希类型之类的派生参数在两边都必须完全匹配。否则，您将生成不同的密钥。

1. 

****从源系统导出密钥****  
最后，使用标准的 TR-31 命令将要传输的密钥导出到 AWS 支付密码学。将 ECDH 派生的密钥指定为 KBPK。要导出的密钥可以是任何受 TR-31 有效组合约束的 TDES 或 AES 密钥，前提是包装密钥的强度至少与要导出的密钥一样强。

1. 

****呼叫导入密钥****  
使用 of 调用 `import-key` API `DiffieHellmanTr31KeyBlock`。 KeyMaterialType 使用步骤 3 中导入的最后一个 CA 的 KeyArn，将步骤 4 中的封装密钥材料用`key-material`于，将步骤 3 `certificate-authority-public-key-identifier` 中的叶子证书用于。`public-key-certificate`包括步骤 1 中的私钥 ARN。

   ```
   $ aws payment-cryptography import-key \
             --key-material='{
               "DiffieHellmanTr31KeyBlock": {
                 "CertificateAuthorityPublicKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/swseahwtq2oj6zi5",
                 "DerivationData": {
                   "SharedInformation": "1234567890"
                 },
                 "DeriveKeyAlgorithm": "AES_256",
                 "KeyDerivationFunction": "NIST_SP800",
                 "KeyDerivationHashAlgorithm": "SHA_256",
                 "PrivateKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/wc3rjsssguhxtilv",
                 "PublicKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN....",
                 "WrappedKeyBlock": "D0112K1TB00E0000D603CCA8ACB71517906600FF8F0F195A38776A7190A0EF0024F088A5342DB98E2735084A7841CB00E16D373A70857E9A"
               }
             }'
   ```

   ```
   {
           "Key": {
             "CreateTimestamp": "2025-03-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": "2025-03-13T16:52:52.859000-04:00"
           }
         }
   ```

1. 

****使用导入的密钥进行加密操作或后续导入****  
如果导入 KeyUsage 的是 TR31 \$1K0\$1KEY\$1ENCRYPTION\$1KEY，则可以使用 TR-31 将此密钥用于后续的密钥导入。对于其他密钥类型（例如 TR31 \$1D0\$1SYMMETRIC\$1DATA\$1ENCRYPTION\$1KEY），您可以直接使用该密钥进行加密操作。

### 使用非对称技术导入密钥（RSA Unwrap）
<a name="keys-import-rsaunwrap"></a>

 概述：当 TR-34 不可行时， AWS 支付密码学支持 RSA wrap/unwrap 进行密钥交换。与 TR-34 一样，此技术使用 RSA 非对称加密来加密对称密钥以进行交换。但是，与 TR-34 不同，此方法不让发送方签署有效载荷。此外，这种 RSA 封装技术无法在传输过程中保持密钥元数据的完整性，因为它不包括密钥块。

**注意**  
 您可以使用 RSA 封装来导入或导出 TDES 和 AES-128 密钥。

1. 

****调用 “初始化导入” 命令****  
调用**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"
   }
   ```

1. 

****在密钥源系统上安装公共证书****  
对于许多证书 HSMs，您需要安装、加载或信任步骤 1 中生成的公共证书（和/或其根证书），才能使用它导出密钥。

1. 

****从源系统导出密钥****  
许多 HSMs 及相关系统都支持使用 RSA 封装导出密钥。将步骤 1 中的公钥指定为加密证书 (`WrappingKeyCertificate`)。如果您需要信任链，请使用 fro `WrappingKeyCertificateChain` m 步骤 1。从 HSM 导出密钥时，将格式指定为 RSA，填充模式 = PKCS \$11 v2.2 OAEP（使用 SHA 256 或 SHA 512）。

1. 

****打电话 **import-key******  
使用 of 调用 **import-key** API `KeyMaterial`。`KeyMaterialType`你需要步骤 1 `ImportToken` 中的和步骤 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"
     }
   }
   ```

1. 

****使用导入的密钥进行加密操作或后续导入****  
如果导入`KeyUsage`的是`TR31_K0_KEY_ENCRYPTION_KEY`或`TR31_K1_KEY_BLOCK_PROTECTION_KEY`，则可以使用 TR-31 使用此密钥进行后续密钥导入。如果密钥类型为任何其他类型（例如`TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY`），则可以直接使用该密钥进行加密操作。

### 使用预先建立的密钥交换密钥导入对称密钥 (TR-31)
<a name="keys-import-tr31"></a>

![\[AWS 支付密码学对称密钥导入流程\]](http://docs.aws.amazon.com/zh_cn/payment-cryptography/latest/userguide/images/keyimport-process-wk-import.png)


交换多个密钥或支持密钥轮换时，合作伙伴通常首先交换初始密钥加密密钥 (KEK)。您可以使用诸如 paper 密钥组件之类的技术来做到这一点，或者对于 AWS 支付密码学，可以使用 [TR-34](#keys-import-tr34)。

 建立 KEK 后，您可以使用它来传输后续密钥（包括其他 KEKs）。 AWS Payment Cryptography 使用 ANSI TR-31 支持这种密钥交换，HSM 供应商广泛使用和支持。

1. 

****导入密钥加密密钥 (KEK)****  
确保你已经导入了 KEK 并有 KeyArn（或 keyAlias）可用。

1. 

****在源平台上创建密钥****  
如果密钥不存在，请在源平台上创建密钥。或者，您可以在 “ AWS 支付密码学” 上创建密钥并使用**export**命令。

1. 

****从源平台导出密钥****  
导出时，将导出格式指定为 TR-31。源平台将要求提供要导出的密钥和要使用的密钥加密密钥。

1. 

****导入 AWS 支付密码学****  
调用**import-key**命令时，请使用密钥加密密钥的 KeyArn（或别名）。`WrappingKeyIdentifier`将源平台的输出用于`WrappedKeyBlock`。  
**Example**  

   ```
   $ 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、ECC）公钥
<a name="keys-import-asymmetric"></a>

导入的所有证书的强度必须至少与其在链中的颁发（前身）证书一样高。这意味着 RSA\$12048 CA 只能用于保护 RSA\$12048 树叶证书，而 ECC 证书必须由另一个具有同等强度的 ECC 证书保护。ECC P384 证书只能由 P384 或 P521 CA 颁发。所有证书在导入时必须处于未过期状态。

### 导入 RSA 公钥
<a name="keys-import-rsapublickey"></a>

AWS 支付密码学支持将 RSA 公钥作为 X.509 证书导入。要导入证书，请先导入其根证书。所有证书在导入时必须处于未过期状态。证书应采用 PEM 格式并采用 base64 编码。

1. 

****将根证书导入 AWS 支付密码学****  
使用以下命令导入根证书：  
**Example**  

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

1. 

****将公钥证书导入 AWS 支付密码学****  
现在，您可以导入公钥。由于 TR-34 和 ECDH 依赖于在运行时传递树叶证书，因此只有在使用来自其他系统的公钥加密数据时才使用此选项。 KeyUsage 将设置为 \$1D1\$1ASYMMETRIC\$1KEY\$1FOR TR31 \$1DATA\$1ENCRYPTION。  
**Example**  

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

### 导入 ECC 公钥
<a name="keys-import-eccpublickey"></a>

AWS 支付密码学支持将 ECC 公钥作为 X.509 证书导入。要导入证书，请先导入其根 CA 证书和所有中间证书。所有证书在导入时必须处于未过期状态。证书应采用 PEM 格式并采用 base64 编码。

1. 

****将 ECC 根证书导入 AWS 支付密码系统****  
使用以下命令导入根证书：  
**Example**  

   ```
   $ aws payment-cryptography import-key \
       --key-material='{"RootCertificatePublicKey": { \
       "KeyAttributes": { \
       "KeyAlgorithm": "ECC_NIST_P521", \
       "KeyClass": "PUBLIC_KEY", \
       "KeyModesOfUse": { \
       "Verify": true}, \
       "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE"}, \
       "PublicKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNQekNDQWFDZ0F3SUJBZ0lDSjNVd0NnWUlLb1pJemowRUF3UXdNakVlTUJ3R0ExVUVDd3dWVTJWc1psTnAKWjI1bFpFTmxjblJwWm1sallYUmxNUkF3RGdZRFZRUUREQWRMUkVnZ1EwRXhNQjRYRFRJMU1ETXlPREF3TURBdwpNRm9YRFRJMk1ETXlPREF3TURBd01Gb3dNakVlTUJ3R0ExVUVDd3dWVTJWc1psTnBaMjVsWkVObGNuUnBabWxqCllYUmxNUkF3RGdZRFZRUUREQWRMUkVnZ1EwRXhNSUdiTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFqQTRHR0FBUUEKRDVEUXc5RW1Tb1lJVkRnbUpmRm1wL1pzMXp1M0ZobThrdUdkYlA4NWgwNTdydkhHZ3VISW03V3N1aTlpdXNvNApFWEZnV3ZUdy85amhZcVJrMi9yY1RHb0JrS2NpV3Q2UHMxVmpSUVZhVEZmbmxPdjRNTURQUEFEUWthVU45cVNNCkF5MTF0RklKNlFGWDR0aGx3RzBaZkFwd0NMV1ZyMzFrRU45RDJhVUh6Mjg5WlM2all6QmhNQjhHQTFVZEl3UVkKTUJhQUZFMjhnay9QZnZ3NklsNm9yQzNwRmJtK280emxNQjBHQTFVZERnUVdCQlJOdklKUHozNzhPaUplcUt3dAo2Ulc1dnFPTTVUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lDeERBS0JnZ3Foa2pPClBRUURCQU9CakFBd2dZZ0NRZ0ZRRit5VUVSYTZoQ0RwSDVHeVhlaVFYYU0wc25Fd3o2TmlmOHlSTlF1dzJ5MUoKdTNoKzZYa2N6Y3lVT01NSzhaRnhBVDhFOERMVUtpdjM1VmdzSkFDN09RSkNBSWMzdEVNV01tZTVCV3ZXTFVxSQpnV3h5U3UxWDdRSTJrR2dUK1FqRGlhQ2E4b091NVlJTmZscW4reUswR29yNGJzMTBZaUh4SHhpV2t0UVRSdVp4CkhIU3UKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo="} \
       }'
   ```

   ```
   {
     "Key": {
       "CreateTimestamp": "2023-08-08T18:52:01.023000+00:00",
       "Enabled": true,
       "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/wv4gb6h3xcqjk6sm",
       "KeyAttributes": {
         "KeyAlgorithm": "ECC_NIST_P521",
         "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": "2025-03-08T18:52:01.023000+00:00"
     }
   }
   ```

1. 

****将中间证书导入 AWS 支付密码学****  
使用以下命令导入中间证书：  
**Example**  

   ```
   $ aws payment-cryptography import-key \
                   --key-material='{"TrustedCertificatePublicKey": { \
                   --certificate-authority-public-key-identifier='"arn:aws:payment-cryptography:us-east-2:111122223333:key/wv4gb6h3xcqjk6sm"  \
       "KeyAttributes": { \
       "KeyAlgorithm": "ECC_NIST_P521", \
       "KeyClass": "PUBLIC_KEY", \
       "KeyModesOfUse": { \
       "Verify": true}, \
       "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE"}, \
       "PublicKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQVkyZ0F3SUJBZ0lDVDAwd0NnWUlLb1pJemowRUF3UXdNakVlTUJ3R0ExVUVDd3dWVTJWc1psTnAKWjI1bFpFTmxjblJwWm1sallYUmxNUkF3RGdZRFZRUUREQWRMUkVnZ1EwRXhNQjRYRFRJMU1ETXlPREF3TURBdwpNRm9YRFRJMk1ETXlPREF3TURBd01Gb3dNREVlTUJ3R0ExVUVBd3dWUzBSSUlFbHVkR1Z5YldWa2FXRjBaU0JEClFTQXhNUTR3REFZRFZRUUZFd1V4TURJd01UQ0JtekFRQmdjcWhrak9QUUlCQmdVcmdRUUFJd09CaGdBRUFPOGwKZFM4c09YQlNWQlVINWxmRWZkNTZxYVVIenExZVN3VGZKdnI5eEFmb2hRNTNWZ2hLUlZoNzhNR2tJTjVCNTBJTAozbmhaU1JnUnRoS20xNkxwc084NEFGa1Z0ZEpOaEJpYUlQZlRlYXltOHh6OU44KzFWZ3RMTDZBcTBtNkwwMUFwCkUvUmxzUUJ3NWxoakM4VHVOWU1QaUpMYUNPbjJrZVh6SU5SSm01SjJtR3Q1bzFJd1VEQWZCZ05WSFNNRUdEQVcKZ0JSbklBNi9Vc3RMYUpzTzlpYjg1Zm9DWEcwRk96QWRCZ05WSFE0RUZnUVVaeUFPdjFMTFMyaWJEdlltL09YNgpBbHh0QlRzd0RnWURWUjBQQVFIL0JBUURBZ2JBTUFvR0NDcUdTTTQ5QkFNRUE0R0xBRENCaHdKQ0FmTnJjdXBkClpQd3ZqTGdVeFZiN1NtSXNhY2Z6MVZrNWZFYXZHNlVzdU95Y1lGbHlQQTlJZGgyK0lOcW5jSVg4VEo2cDFJRWkKN3RCTHpPb1l0ZWd2Q1dsL0FrRkRzWHFsWkI5bU93WnNEQy9HZEpEcm5uQ0ZkR29hM1NwZytqbGdhOGdQTmxLbAo1dE9IU0lVZnZxcFhEcWYrdXV6SEc1Z3FjdUhnQU8wOUhuMloyNUc4eVE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg=="} \
       }'
   ```

   ```
   {
     "Key": {
       "CreateTimestamp": "2025-03-20T18:52:01.023000+00:00",
       "Enabled": true,
       "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/swseahwtq2oj6zi5",
       "KeyAttributes": {
         "KeyAlgorithm": "ECC",
         "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": "2025-03-25T18:52:01.023000+00:00"
     }
   }
   ```

1. 

****将公钥证书（Leaf）导入 AWS 支付密码学****  
 尽管您可以导入 leaf ECC 证书，但目前 AWS 支付密码学中除了存储之外没有为其定义任何函数。这是因为在使用 ECDH 函数时，树叶证书是在运行时传递的。

# 导出密钥
<a name="keys-export"></a>

**Contents**
+ [导出对称密钥](#keys-export-symmetric)
  + [使用非对称技术导出密钥(TR-34)](#keys-export-tr34)
  + [使用非对称技术 (ECDH) 导出密钥](#keys-export-ecdh)
  + [使用非对称技术（RSA Wrap）导出密钥](#keys-export-rsawrap)
  + [使用预先建立的密钥交换密钥导出对称密钥 (TR-31)](#keys-export-tr31)
+ [导出 DUKPT 初始密钥 (IPEK/IK)](#keys-export-ipek)
+ [指定要导出的密钥块标题](#keys-export-optionalheaders)
  + [常用标题](#keys-export-commonheaders)
+ [导出非对称 (RSA) 密钥](#keys-export-publickey)

## 导出对称密钥
<a name="keys-export-symmetric"></a>

**重要**  
 在开始 AWS CLI 之前，请确保您拥有最新版本的。要升级，请参阅[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

### 使用非对称技术导出密钥(TR-34)
<a name="keys-export-tr34"></a>

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

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

1. 

****初始化导出流程****  
运行**get-parameters-for-export**为密钥导出生成密钥对。我们使用这个 key pair 对 TR-34 有效载荷进行签名。在 TR-34 术语中，这是 KDH 签名证书。这些证书的有效期很短，并且仅在中`ParametersValidUntilTimestamp`指定的期限内有效。
**注意**  
所有证书均采用 base64 编码。  
**Example**  

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

1. 

****将 AWS 付款密码学证书导入您的收款系统****  
将步骤 1 中的证书链导入您的接收系统。

1. 

****设置接收系统的证书****  
为了保护传输的有效载荷，发送方 (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`是因为这是签名叶证书的根密钥。您无需将树叶证书导入 P AWS ayment Cryptography，您可以内联传递它们。
**注意**  
如果您之前导入了根证书，请跳过此步骤。对于中间证书，请使用`TrustedCertificatePublicKey`。

1. 

****导出您的密钥****  
在`KeyMaterialType`设置为**ExportKey**的情况下调用 API `TR34_KEY_BLOCK`。你需要提供：
   + 步骤 3 中根 CA 的 keyArn 是 `CertificateAuthorityPublicKeyIdentifier`
   + 步骤 3 中的叶子证书是 `WrappingKeyCertificate`
   + 要导出的密钥的 keyArn（或别名）`--export-key-identifier`
   + 步骤 1 中的导出代币  
**Example**  

   ```
   $ 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) 导出密钥
<a name="keys-export-ecdh"></a>

![\[AWS 使用 ECDH 的支付密码学密钥加密密钥导入流程\]](http://docs.aws.amazon.com/zh_cn/payment-cryptography/latest/userguide/images/keyimport-ecdh-export.png)


Elliptic Curve Diffie-Hellman（ECDH）使用 ECC 非对称加密技术在双方之间建立共享密钥，无需预先交换密钥。ECDH 密钥是临时性的，因此 AWS 支付密码学不会存储它们。在此过程中，使用 ECDH 导出一次性的 [KBPK/KEK](terminology.md#terms.kbpk)。该派生密钥会立即用于封装您要传输的密钥，该密钥可能是另一个 KBPK、BDK、IPEK 密钥或其他密钥类型。

导出时， AWS 支付密码学被称为U方（发起方），接收系统称为第五方（响应方）。

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

1. 

****生成 ECC 密钥对****  
调用`create-key`为该过程创建 ECC key pair。此 API 为密钥导入或导出生成密钥对。在创建时，请指定使用此 ECC 密钥可以派生哪种密钥。使用 ECDH 交换（封装）其他密钥时，请使用值。`TR31_K1_KEY_BLOCK_PROTECTION_KEY`
**注意**  
 尽管低级 ECDH 会生成可用于任何目的的派生密钥，但 P AWS ayment Cryptography 允许密钥仅用于单一派生密钥类型，从而限制了出于多种目的意外重复使用密钥。

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

1. 

****获取公钥证书****  
`get-public-key-certificate`致电接收由您账户的 CA 签署的 X.509 证书的公钥，该证书特定于特定地区的 AWS 支付密码学。  
**Example**  

   ```
   $ aws payment-cryptography get-public-key-certificate \
              --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/wc3rjsssguhxtilv
   ```

   ```
   {
         "KeyCertificate": "LS0tLS1CRUdJTi...",
         "KeyCertificateChain": "LS0tLS1CRUdJT..."
       }
   ```

1. 

****在交易对手系统上安装公共证书（第五方）****  
对于许多证书 HSMs，您需要安装、加载或信任步骤 1 中生成的公共证书才能建立密钥。这可能包括整个证书链，也可以仅包括根证书，具体取决于 HSM。有关具体说明，请参阅您的 HSM 文档。

1. 

****在源系统上生成 ECC key pair 并为 AWS 支付密码学提供证书链****  
在 ECDH 中，各方生成一个密钥对，并就公用密钥达成一致。为了让 AWS 支付密码学派生密钥，它需要交易对手的公钥采用 X.509 公钥格式。

   从 HSM 传输密钥时，请在该 HSM 上创建密钥对。对于 HSMs 该支持按键块，按键标题将类似于`D0144K3EX00E0000`。创建证书时，通常会在 HSM 上生成 CSR，然后 HSM、第三方或诸如之类的服务 AWS 私有 CA 可以生成证书。

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

   对于中间证书，请使用带有 `importKey` of `TrustedCertificatePublicKey` 和 of KeyMaterialType KeyUsageType 的命令`TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE`。对多个中间证书重复此过程。使用链`KeyArn`中最后一次导入的证书作为后续导出命令的输入。
**注意**  
不要导入树叶证书。在导出命令期间直接提供它。

1. 

****从 AWS 支付密码学中获取密钥和导出密钥****  
导出时，该服务使用 ECDH 派生密钥，然后立即将其用作 [KBPK](terminology.md#terms.kbpk) 来封装密钥以使用 TR-31 进行导出。要导出的密钥可以是任何受 TR-31 有效组合约束的 TDES 或 AES 密钥，前提是包装密钥的强度至少与要导出的密钥一样强。

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

1. 

****在第五方 HSM 上使用 ECDH 获取一次性密钥****  
许多 HSMs 相关系统都支持使用 ECDH 建立密钥。将步骤 1 中的公钥指定为公钥，将步骤 3 中的密钥指定为私钥。有关允许的选项，例如派生方法，请参阅 [API](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ExportDiffieHellmanTr31KeyBlock.html) 指南。
**注意**  
 诸如哈希类型之类的派生参数在两边都必须完全匹配。否则，您将生成不同的密钥。

1. 

****将密钥导入目标系统****  
最后，使用标准的 TR-31 命令从 “ AWS 支付密码学” 中导入密钥。将 ECDH 派生的密钥指定为 KBPK，并使用之前从 Payment Cryptography 中 AWS 导出的 TR-31 密钥块。

### 使用非对称技术（RSA Wrap）导出密钥
<a name="keys-export-rsawrap"></a>

 当 TR-34 不可用时，您可以使用 RSA wrap/unwrap 进行密钥交换。与 TR-34 一样，此方法使用 RSA 非对称加密来加密对称密钥。但是，RSA 包装不包括：
+ 发送方对有效载荷进行签名
+ 在传输过程中保持密钥元数据完整性的密钥块

**注意**  
你可以使用 RSA 封装来导出 TDES 和 AES-128 密钥。

1. 

****在接收系统上创建 RSA 密钥和证书****  
创建或标识用于接收封装密钥的 RSA 密钥。我们要求密钥采用 X.509 证书格式。确保证书由根证书签名，您可以将其导入 AWS 支付密码学。

1. 

****将根公共证书导入 AWS 支付密码学****  
**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"
     }
   }
   ```

1. 

****导出您的密钥****  
让 Pay AWS ment Cryptography 使用你的叶子证书导出你的密钥 你需要指定：
   + 您在步骤 2 中导入的根证书的 ARN
   + 出口树叶证书
   + 要导出的对称密钥

   输出是对称密钥的十六进制编码二进制包装（加密）版本。  
**Example 示例-导出密钥**  

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

1. 

****将密钥导入您的接收系统****  
许多 HSMs 及相关系统都支持使用 RSA unwrap（包括 AWS 支付加密）导入密钥。导入时，请指定：
   + 步骤 1 中的公钥作为加密证书
   + 格式为 RSA
   + 填充模式为 PKCS \$11 v2.2 OAEP（使用 SHA 256）
**注意**  
我们以 HexBinary 格式输出封装后的密钥。如果您的系统需要不同的二进制表示形式，例如 base64，则可能需要转换格式。

### 使用预先建立的密钥交换密钥导出对称密钥 (TR-31)
<a name="keys-export-tr31"></a>

交换多个密钥或支持密钥轮换时，通常首先使用 paper 密钥组件交换初始密钥加密密钥 (KEK)，或者在使用 AWS 支付密码学时使用 [TR-34](#keys-export-tr34) 交换初始密钥加密密钥 (KEK)。建立 KEK 后，您可以使用它来传输后续密钥，包括其他密钥 KEKs。我们使用 ANSI TR-31 支持这种密钥交换，HSM 供应商广泛支持该密钥交换。

1. 

****设置您的密钥加密密钥 (KEK)****  
确保你已经交换了 KEK 并有 KeyArn（或 KeyAlias）可用。

1. 

****在 “ AWS 支付密码学” 上创建您的密钥****  
如果密钥尚不存在，请创建它。或者，您可以在其他系统上创建密钥并使用 [impor](#keys-export-tr31) t 命令。

1. 

****从 “ AWS 支付密码学” 中导出您的密钥****  
以 TR-31 格式导出时，请指定要导出的密钥和要使用的包装密钥。  
**Example 示例-使用密钥块导出 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"
     }
   }
   ```

1. 

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

## 导出 DUKPT 初始密钥 (IPEK/IK)
<a name="keys-export-ipek"></a>

使用 [DUKPT](terminology.md#terms.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 和 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"
}
}
```

## 指定要导出的密钥块标题
<a name="keys-export-optionalheaders"></a>

以 ASC TR-31 或 TR-34 格式导出时，您可以修改或附加密钥块信息。下表描述了 TR-31 密钥块格式以及在导出过程中可以修改哪些元素。


| 按键方块属性 | 用途 | 你能在导出过程中修改吗？ | 注意 | 
| --- | --- | --- | --- | 
| 版本 ID |  定义用于保护密钥材料的方法。该标准包括： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/payment-cryptography/latest/userguide/keys-export.html)  | 否 |  我们对 TDES 封装密钥使用版本 B，将 D 版本用于 AES 封装密钥。我们仅支持版本 A 和 C 进行导入操作。  | 
| 密钥块长度 | 指定剩余消息的长度 | 否 |  我们会自动计算这个值。在解密有效载荷之前，长度可能看起来不正确，因为我们可能会根据规范的要求添加密钥填充。  | 
| 密钥用法 |  定义密钥的允许用途，例如： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/payment-cryptography/latest/userguide/keys-export.html)  | 否 |  | 
| 算法 |  指定底层密钥的算法。我们支持： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/payment-cryptography/latest/userguide/keys-export.html)  | 否 | 我们按原样导出此值。 | 
| 密钥用法 |  定义允许的操作，例如： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/payment-cryptography/latest/userguide/keys-export.html)  | 是\$1 |  | 
| 密钥版本 | 表示密钥替换/轮换的版本号。如果未指定，则默认为 00。 | 是-可以追加 |  | 
| 密钥可导出性 |  控制是否可以导出密钥： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/payment-cryptography/latest/userguide/keys-export.html)  | 是\$1 |  | 
| 可选的按键块 | 是-可以追加 |  可选密钥块是以加密方式绑定到密钥的 name/value 对。例如，DUKPT 密钥的 KeySet ID。我们会根据您的 name/value 配对输入自动计算方块数、每个方块的长度和填充块 (PB)。  |  | 

*\$1修改值时，您的新值必须比 AWS 付款密码学中的当前值更具限制性。*例如：
+ 如果当前的密钥使用模式是 Generate=True、Verify=True，你可以将其更改为 Generate=True、Verify=False
+ 如果密钥已设置为不可导出，则无法将其更改为可导出

当您导出密钥时，我们会自动应用正在导出的密钥的当前值。但是，在将这些值发送到接收系统之前，您可能需要修改或附加这些值。以下是一些常见的情况：
+ 将密钥导出到支付终端时，请将其可导出性设置为，`Not Exportable`因为终端通常只导入密钥而不应导出密钥。
+ 当您需要将关联的密钥元数据传递给接收系统时，请使用 TR-31 可选标头以加密方式将元数据绑定到密钥，而不是创建自定义负载。
+ 使用`KeyVersion`字段设置密钥版本以跟踪密钥轮换。

TR-31/X9.143 定义了常用标头，但您可以使用其他标头，前提是它们符合 AWS 付款加密参数并且您的接收系统可以接受它们。有关导出期间密钥块标头的更多信息，请参阅 API 指南中的[密钥块标头](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_KeyBlockHeaders.html)。

以下是按照以下规范导出 BDK 密钥（例如，导出 KIF）的示例：
+ 密钥版本：02
+ KeyExportability: 不可出口
+ KeySetID：00ABCDEFAB（00 表示 TDES 密钥，ABCDEFABCD 是初始密钥）

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

**注意**  
即使在本示例中将可导出性设置为 “不可导出”，[K](terminology.md#terms.kif) IF 仍可以：  
派生密钥，例如 DUKPT 中使用的 [IPEK/IK](terminology.md#terms.ipek)
导出这些派生密钥以安装在设备上
这是标准特别允许的。

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

### 常用标题
<a name="keys-export-commonheaders"></a>

X9.143 为常见用例定义了某些标头。除了 HM（HMAC Hash）标头外，P AWS ayment Cryptography 不解析或使用这些标头。


| 标头名称 | 用途 | 典型验证 | 注意 | 
| --- | --- | --- | --- | 
| 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 操作的哈希类型 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/payment-cryptography/latest/userguide/keys-export.html)  | 该服务在导出时会自动填充此字段，并在导入时对其进行解析。服务不支持的哈希类型，例如 SHAKE128 可以导入，但可能不适用于加密函数。 | 
| IK |  AES DUKPT 的初始密钥序列号 | 16 十六进制字符  | 此值用于实例化接收设备上初始 DUKPT 密钥的使用，并标识从 BDK 派生的初始密钥。此字段通常包含派生数据，但不包含计数器。使用 KS 获得 TDES DUKPT。 | 
| KS |  TDES 的初始密钥序列号 DUKPT | 20 个十进制字符  | 此值用于实例化接收设备上初始 DUKPT 密钥的使用，并标识从 BDK 派生的初始密钥。此字段通常包含派生数据 \$1 一个归零的计数器值。使用 IK 获得 AES DUKPT。 | 
| KP | 包装@@ [密钥的 KCV](terminology.md#terms.kcv) | 2 个十六进制字符表示 KCV 方法（0 表示 X9.24 方法，01 表示 CMAC 方法）。后面是 KCV 值，通常为 6 个十六进制字符。例如，010 FA329 表示使用 01 (CMAC) FA329 方法计算得出的 0 的 KCV。  | 此值用于实例化接收设备上初始 DUKPT 密钥的使用，并标识从 BDK 派生的初始密钥。此字段通常包含派生数据 \$1 一个归零的计数器值。使用 IK 获得 AES DUKPT。 | 
| PB | 填充块 | 随机可打印的 ASCII 字符  | 该服务在导出时会自动填充此字段，以确保可选标头是加密区块长度的倍数 | 

## 导出非对称 (RSA) 密钥
<a name="keys-export-publickey"></a>

要以证书形式导出公钥，请使用**get-public-key-certificate**命令。此命令返回：
+ 该证书
+ 根证书

两个证书均采用 base64 编码。

**注意**  
此操作不是等效的，即使使用相同的底层密钥，后续调用也可能会生成不同的证书。

**Example**  

```
$ aws payment-cryptography get-public-key-certificate \
     --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/5dza7xqd6soanjtb
```

```
{
"KeyCertificate": "LS0tLS1CRUdJTi...",
"KeyCertificateChain": "LS0tLS1CRUdJT..."
}
```

# 高级主题
<a name="keyexchange-advanced"></a>

本节介绍高级密钥交换场景和配置。

**Topics**
+ [自带证书颁发机构 (BYOCA)](keyexchange-byoca.md)

# 自带证书颁发机构 (BYOCA)
<a name="keyexchange-byoca"></a>

默认情况下，当服务中创建的非对称（RSA、ECC）密钥需要公钥证书时，这些证书由 AWS 支付密码学和账户唯一证书颁发机构 (CA) 颁发。这旨在简化使用 X.509，而不必承担识别或设置 CA 或管理证书签名请求 (CSR) 的负担。

AWS Payment Cryptography 还允许您在出于政策或合规原因需要时使用您自己的 CA。

## 概述
<a name="keyexchange-byoca.overview"></a>

BYOCA 功能允许您在任何使用证书的地方使用自己的证书颁发机构，包括 TR-34 导入/导出、RSA Unwrap 和基于 ECDH 的密钥传输。当您需要在整个组织中维护一致的证书链或与需要特定 CA 证书的合作伙伴合作时，这非常有用。以下示例演示了使用 TR-34 密钥导出的 BYOCA 工作流程。

与标准 TR-34 导出流程相比，三个主要区别是：

1. 签名 RSA 密钥是使用[CreateKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html)显式创建的。以前，它是通过[GetParametersForExport](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetParametersForExport.html)隐式创建的。

1. 新的 API [GetCertificateSigningRequest](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetCertificateSigningRequest.html)会创建证书签名请求 (CSR)，该请求可由您的外部 CA 签名。

1. [ExportKey](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ExportKey.html)API 已扩展为允许在运行时提供证书。以前，这是由隐式提供的`import-token`，它变成了可选字段。

**重要注意事项**  
这些示例使用 RSA-2048 密钥并封装一个 TDES-2KEY 密钥。导出 AES-128 时，请确保所有密钥都是 RSA-3072 或 RSA-4096。
最常见的错误是`SigningKeyIdentifier`和表示的密钥`SigningKeyCertificate`不匹配。

## BYOCA 工作流程
<a name="keyexchange-byoca.workflow"></a>

以下步骤演示了 TR-34 导出的完整 BYOCA 工作流程。

**Topics**
+ [步骤 1：创建 RSA 密钥](#keyexchange-byoca.create-rsa)
+ [步骤 2：生成证书签名请求](#keyexchange-byoca.generate-csr)
+ [步骤 3：查看 CSR（可选）](#keyexchange-byoca.review-csr)
+ [步骤 4：与证书颁发机构签署 CSR](#keyexchange-byoca.sign-csr)
+ [步骤 5：导入 CA 证书](#keyexchange-byoca.import-ca)
+ [步骤 6：获取 KRD 加密证书](#keyexchange-byoca.get-krd)
+ [步骤 7：使用 BYOCA 导出密钥](#keyexchange-byoca.export-key)

### 步骤 1：创建 RSA 密钥
<a name="keyexchange-byoca.create-rsa"></a>

首先，创建一个 RSA 密钥对，该密钥对最终将成为 KDH 签名证书。您可以添加标签来标识密钥的用途。

**Example 创建用于签名的 RSA 密钥**  

```
$ aws payment-cryptography create-key --exportable \
    --key-attributes KeyAlgorithm=RSA_2048,KeyUsage=TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE,KeyClass=ASYMMETRIC_KEY_PAIR,KeyModesOfUse='{Sign=True}'
```

```
{
    "Key": {
        "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/xgmq6fs6uow736uc",
        "KeyAttributes": {
            "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE",
            "KeyClass": "ASYMMETRIC_KEY_PAIR",
            "KeyAlgorithm": "RSA_2048",
            "KeyModesOfUse": {
                "Sign": true
            }
        },
        "KeyCheckValue": "41E3723C",
        "KeyCheckValueAlgorithm": "SHA_1",
        "Enabled": true,
        "Exportable": true,
        "KeyState": "CREATE_COMPLETE",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY"
    }
}
```

记下来，`KeyArn`因为你将在下一步中需要它。

### 步骤 2：生成证书签名请求
<a name="keyexchange-byoca.generate-csr"></a>

使用 [GetCertificateSigningRequest](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetCertificateSigningRequest.html)API 生成证书签名请求 (CSR)，由您的外部 CA 签名。输出是一个 base64 编码的 PEM 文件。如果您对内容进行 base64 解码并保存，则将获得一个 PEM 格式的有效 CSR。

**Example 生成企业社会责任**  

```
$ aws payment-cryptography-data get-certificate-signing-request \
    --key-identifier arn:aws:payment-cryptography:us-east-1:111122223333:key/xgmq6fs6uow736uc \
    --signing-algorithm SHA512 \
    --certificate-subject '{
        "CommonName": "MyCertificateAWSUSEAST",
        "Organization": "Amazon",
        "OrganizationUnit": "PaymentCryptography",
        "Country": "US",
        "StateOrProvince": "Virginia",
        "City": "Arlington"
    }'
```

```
{
    "CertificateSigningRequest": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..."
}
```

该`CertificateSigningRequest`字段包含 base64 编码的 CSR，您将发送给您的 CA 进行签名。

### 步骤 3：查看 CSR（可选）
<a name="keyexchange-byoca.review-csr"></a>

您可以选择使用 OpenSSL 来查看 CSR 内容并确保其有效且符合预期。

**Example 使用 OpenSSL 查看企业社会责任**  

```
$ echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." | base64 -d | openssl req -text
```

### 步骤 4：与证书颁发机构签署 CSR
<a name="keyexchange-byoca.sign-csr"></a>

生成 CSR 后，您需要由证书颁发机构 (CA) 对其进行签名。在生产环境中，您通常会使用 AWS 私有 CA 或贵组织已建立的 CA 基础架构。出于测试目的，您可以使用 OpenSSL 创建自签名证书。

#### 使用 AWS 私有 CA
<a name="keyexchange-byoca.sign-csr-pca"></a>

要使用签署 CSR AWS 私有 CA，请先解码 base64 编码的 CSR 并将其保存到文件中，然后使用 API。[IssueCertificate](https://docs.aws.amazon.com/acm-pca/latest/APIReference/API_IssueCertificate.html)

**Example 与之签署 CSR AWS 私有 CA**  

```
$ echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." | base64 -d > csr.pem

$ aws acm-pca issue-certificate \
    --certificate-authority-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \
    --csr fileb://csr.pem \
    --signing-algorithm SHA256WITHRSA \
    --validity Value=365,Type=DAYS
```

```
{
    "CertificateArn": "arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012/certificate/abcdef1234567890"
}
```

然后检索签名的证书：

**Example 检索签名证书**  

```
$ aws acm-pca get-certificate \
    --certificate-authority-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \
    --certificate-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012/certificate/abcdef1234567890
```

```
{
    "Certificate": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----",
    "CertificateChain": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----"
}
```

保存证书内容以便在导出步骤中使用。在将其提供给 API 时，您需要对其进行 base64 编码。`ExportKey`

#### 使用 OpenSSL 进行测试
<a name="keyexchange-byoca.sign-csr-openssl"></a>

出于测试目的，您可以使用 OpenSSL 创建自签名 CA 并签署 CSR。首先，创建 CA 私钥和自签名证书：

**Example 使用 OpenSSL 创建测试 CA**  

```
$ # Generate CA private key
openssl genrsa -out ca-key.pem 4096

$ # Create self-signed CA certificate
openssl req -new -x509 -days 3650 -key ca-key.pem -out ca-cert.pem \
    -subj "/C=US/ST=Virginia/L=Arlington/O=TestOrg/CN=Test CA"
```

然后解码上一步中的 CSR，并使用您的测试 CA 进行签名：

**Example 使用 OpenSSL 签署 CSR**  

```
$ # Decode the base64-encoded CSR
echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." | base64 -d > csr.pem

$ # Sign the CSR with the CA
openssl x509 -req -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem \
    -CAcreateserial -out signed-cert.pem -days 365 -sha512
```

```
Certificate request self-signature ok
subject=C=US, ST=Virginia, L=Arlington, O=Amazon, OU=PaymentCryptography, CN=MyCertificateAWSUSEAST
```

已签名的证书现已启用`signed-cert.pem`。在向 API 提供此证书时，您需要对该证书进行 base64 编码：`ExportKey`

**Example Base64 对签名的证书进行编码**  

```
$ cat signed-cert.pem | base64 -w 0
```

### 步骤 5：导入 CA 证书
<a name="keyexchange-byoca.import-ca"></a>

必须首先信任正在使用的任何 CA，以防止使用任意证书。使用 [ImportKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html)API 导入外部 CA 的根证书。如果使用中间 CA，请`import-key`再次调用，但要`TrustedPublicKey`改为指定`RootCertificatePublicKey`并指定根 CA ARN。

**Example 导入根 CA 证书**  

```
$ 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": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t..."
    }
}'
```

```
{
    "Key": {
        "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/xivpaqy7qbbm7cdw",
        "KeyAttributes": {
            "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE",
            "KeyClass": "PUBLIC_KEY",
            "KeyAlgorithm": "RSA_4096",
            "KeyModesOfUse": {
                "Verify": true
            }
        },
        "Enabled": true,
        "KeyState": "CREATE_COMPLETE",
        "KeyOrigin": "EXTERNAL"
    }
}
```

记下要在导出步骤中使用的 CA。`KeyArn`

### 步骤 6：获取 KRD 加密证书
<a name="keyexchange-byoca.get-krd"></a>

在此示例中，我们正在重新导入 AWS 支付密码学，因此我们调用该服务以使用 API 接收 KRD 公钥证书。[GetParametersForImport](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GetParametersForImport.html)在实际场景中，这将由其他系统提供，例如HSM、ATM、支付终端或支付终端管理系统。

**Example 获取导入的参数**  

```
$ aws payment-cryptography-data get-parameters-for-import \
    --key-material-type "TR34_KEY_BLOCK" \
    --wrapping-key-algorithm RSA_2048
```

```
{
    "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...",
    "WrappingKeyCertificateChain": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...",
    "WrappingKeyAlgorithm": "RSA_2048",
    "ImportToken": "import-token-v2rxpl6drxeptn7w",
    "ParametersValidUntilTimestamp": "2025-11-01T18:45:31.271000-07:00"
}
```

### 步骤 7：使用 BYOCA 导出密钥
<a name="keyexchange-byoca.export-key"></a>

最后，使用 API 使用 TR-34 导出带有您自己的 CA 签名证书的[ExportKey](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ExportKey.html)密钥。提供由您的外部 CA 签名的签名证书。

**Example TR-34 使用 BYOCA 导出**  

```
$ aws payment-cryptography-data export-key \
    --export-key-identifier arn:aws:payment-cryptography:us-east-1:111122223333:key/iox73p5f4c4yjiod \
    --key-material '{
        "Tr34KeyBlock": {
            "CertificateAuthorityPublicKeyIdentifier": "arn:aws:payment-cryptography:us-east-1:111122223333:key/j625deyfqlwctu57",
            "SigningKeyIdentifier": "arn:aws:payment-cryptography:us-east-1:111122223333:key/xgmq6fs6uow736uc",
            "SigningKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...",
            "KeyBlockFormat": "X9_TR34_2012",
            "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t..."
        }
    }'
```

```
{
    "WrappedKey": {
        "WrappedKeyMaterialFormat": "TR34_KEY_BLOCK",
        "KeyMaterial": "3082055A06092A864886F70D010702A082054B30820547...",
        "KeyCheckValue": "3DCA31",
        "KeyCheckValueAlgorithm": "ANSI_X9_24"
    }
}
```

现在，接收系统可以使用标准的 TR-34 导入流程导入导出的密钥块。

## 附加说明
<a name="keyexchange-byoca.notes"></a>
+ 这些示例是使用 AWS CLI 显示的。所有 AWS 都提供相同的功能， SDKs 包括 Java、Python、Go 和 Rust。
+ 如果您使用自签名 CA 进行测试，则可以使用 OpenSSL 创建测试 CA 并签署 CSR。在生产环境中，使用贵组织已建立的 CA 基础架构。

# 使用别名
<a name="keys-managealias"></a>

 *别名*是 AWS 支付加密密钥的友好名称。例如，别名允许您将密钥引用为 `alias/test-key`，而不是 `arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h`。

在大多数密钥管理（控制平面）操作和[加密（数据平面）操作中，您可以使用别名来标识密钥](data-operations.md)。

您还可以根据其别名允许和拒绝对 AWS 支付密码密钥的访问，而无需编辑政策或管理授权。此功能是[基于属性的访问权限控制 (ABAC)](security.md) 的支持的一部分。

别名的大部分功能来自于您随时更改与别名关联的密钥的能力。别名可以使您的代码更易于编写和维护。例如，假设您使用别名来指代特定的 AWS 支付加密密钥，并且想要更改 AWS 付款加密密钥。在这种情况下，只需将别名与其他密钥关联即可。您无需更改代码或应用程序配置。

别名还您更容易在不同 AWS 区域中重用相同代码。在多个区域中创建同名别名，并将每个别名与其所在地区的 AWS 支付加密密钥相关联。当代码在每个区域运行时，别名是指该区域中关联的 AWS 支付加密密钥。

您可以使用 `CreateAlias` API 为 AWS 支付加密密钥创建别名。

 AWS 支付密码学 API 可以完全控制每个账户和地区的别名。**API 包括创建别名 (CreateAlias)、查看别名和链接的 KeyArn（**列表别名）、更改与别名关联的 AWS 支付加密密钥（更新别名）以及删除****别名（删除别名**）的操作。**

**Topics**
+ [关于别名](alias-about.md)
+ [在应用程序中使用别名](alias-using.md)
+ [相关 APIs](#w2aac12c30c23)

# 关于别名
<a name="alias-about"></a>

了解别名在 AWS 支付密码学中的工作原理。

**别名是一种独立的 AWS 资源**  
别名不是 AWS 支付密码学密钥的属性。您对别名执行的操作不会影响其关联的密钥。您可以为 AWS 支付加密密钥创建别名，然后更新别名，使其与不同的 AWS 支付加密密钥相关联。您甚至可以删除别名，而不会对关联的 AWS 支付加密密钥产生任何影响。如果您删除 AWS Payment Cryptography 密钥，则会取消分配与该密钥关联的所有别名。  
如果您在 IAM 策略中将别名指定为资源，则该策略指的是别名，而不是关联的 AWS 支付加密密钥。

**每个别名都有友好名称**  
在创建别名时，您指定前缀为 `alias/` 的别名。例如 `alias/test_1234`

**每个别名一次都与一个 AWS 支付密码密钥相关联**  
别名及其 AWS 支付密码密钥必须位于同一个账户和地区中。  
一个 AWS 支付密码学密钥可以同时与多个别名关联，但每个别名只能映射到一个密钥   
例如，此 `list-aliases`输出显示`alias/sampleAlias1` 别名仅与一个目标 AWS Payment Cryptography 密钥相关联，该密钥由 `KeyArn` 属性表示。  

```
$ aws payment-cryptography list-aliases
```

```
  {
    "Aliases": [
        {
            "AliasName": "alias/sampleAlias1",
            "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h"
        }
    ]
}
```

**多个别名可以与同一个 AWS 支付密码密钥相关联**  
例如，您可以将 `alias/sampleAlias1;` 和 `alias/sampleAlias2` 别名与同一个密钥关联。  

```
$ aws payment-cryptography list-aliases
```

```
{
        "Aliases": [
            {
                "AliasName": "alias/sampleAlias1",
                "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h"
            },
            {
                "AliasName": "alias/sampleAlias2",
                "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h"
            }
        ]
    }
```

**别名在给定的账户和区域中必须是唯一的**  
例如，您在每个账户和区域中只能有一个 `alias/sampleAlias1` 别名。别名区分大小写，但我们建议不要使用仅大小写不同的别名，因为这样很容易出错。您不能更改别名名称。但是，您可以删除别名并使用所需名称创建新别名。

**您可以在不同的区域中创建具有相同名称的别名。**  
例如，您可以在美国东部（弗吉尼亚州北部）拥有 `alias/sampleAlias2` 别名，在美国西部（俄勒冈州）拥有 `alias/sampleAlias2` 别名。每个别名都将与其所在地区的 AWS 支付加密密钥相关联。如果您的代码引用 `alias/finance-key` 之类的别名名称，您可以在多个区域中运行它。在每个区域中，它使用不同的别名 /sampleAlias2。有关更多信息，请参阅 [在应用程序中使用别名](alias-using.md)。

**您可以更改与别名关联的 AWS 支付加密密钥**  
您可以使用该`UpdateAlias`操作将别名与不同的 AWS 支付加密密钥相关联。例如，如果`alias/sampleAlias2`别名与`arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h ` AWS 支付加密密钥相关联，则可以对其进行更新，使其与`arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi`密钥关联。  
AWS Payment Cryptography 无法验证新旧密钥是否具有所有相同的属性，例如密钥用法。使用不同的密钥类型进行更新可能会导致应用程序出现问题。

**有些密钥没有别名**  
别名是一项可选功能，除非您选择以这种方式操作环境，否则并非所有密钥都有别名。可以使用 `create-alias` 命令将密钥与别名相关联。此外，您还可以使用 UpdateAlias 操作来更改与别名关联的 AWS Payment Cryptography 密钥，并使用 delete-alias 操作来删除别名。因此，某些 AWS 支付密码学密钥可能有多个别名，而有些可能没有别名。

**将密钥映射到别名**  
您可以使用 `create-alias` 命令将密钥（由 ARN 表示）映射到一个或多个别名。此命令不是幂等的，要更新别名，请使用 update-alias 命令。  

```
$ aws payment-cryptography create-alias --alias-name alias/sampleAlias1 \
             --key-arn arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h
```

```
{
    "Alias": {
        "AliasName": "alias/alias/sampleAlias1",
        "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h"
    }
}
```

# 在应用程序中使用别名
<a name="alias-using"></a>

您可以使用别名来表示应用程序代码中的 AWS 支付加密密钥。 AWS 支付密码学[数据操作以及其他操作](data-operations.md)（如列表密钥）中的`key-identifier`参数接受别名或别名 ARN。

```
$ aws payment-cryptography-data generate-card-validation-data --key-identifier alias/BIN_123456_CVK --primary-account-number=171234567890123 --generation-attributes CardVerificationValue2={CardExpiryDate=0123}
```

使用别名 ARN 时，请记住，映射到 AWS 支付加密密钥的别名是在拥有 AWS 支付密码密钥的账户中定义的，每个区域可能有所不同。

别名的最强大用途之一是在多个 AWS 区域中运行的应用程序中。

您可以在每个区域创建不同版本的应用程序，也可以使用字典、配置或切换语句为每个区域选择正确的 AWS 支付密码密钥。但在每个区域中创建具有相同别名名称的别名可能要容易得多。请记住，别名名称区分大小写。

## 相关 APIs
<a name="w2aac12c30c23"></a>

**[标签](tagging-keys.md)**  
标签是密钥和值对，它们充当元数据，用于组织您的 AWS 支付加密密钥。它们可用于灵活识别密钥，或将一个或多个密钥组合在一起。

# 获取密钥
<a name="getkeys"></a>

P AWS ayment Cryptography 密钥代表加密材料的单个单元，只能用于此服务的加密操作。 GetKeys API 将 KeyIdentifier 作为输入并返回密钥元数据，包括属性、状态和时间戳，但不返回实际的加密密钥材料。

**Example**  

```
$ aws payment-cryptography get-key --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h
```

```
{
  "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": "AWS_PAYMENT_CRYPTOGRAPHY",
      "CreateTimestamp": "2023-06-02T07:38:14.913000-07:00",
      "UsageStartTimestamp": "2023-06-02T07:38:14.857000-07:00"
  }
}
```

# 让公众 key/certificate 与密钥对（key pair）相关联
<a name="keys.getpubliccertificate-example"></a>

获取公钥会 Key/Certificate 返回由指示的公钥`KeyArn`。这可以是在 P AWS ayment Cryptography 上生成的密钥对的公钥部分，也可以是之前导入的公钥。最常见的用例是向将加密数据的外部服务提供公钥。然后，这些数据可以传递到利用 AWS 支付密码学的应用程序，并且可以使用支付密码学中保护的私钥对数据进行解密。 AWS 

该服务返回公钥作为公共证书。API 结果包含 CA 和公钥证书。两个数据元素均采用 base64 编码。

**注意**  
 返回的公共证书是短暂的，而不是幂等的。即使公钥本身未更改，您也可能会在每次 API 调用中收到不同的证书。

**Example**  

```
$ aws payment-cryptography get-public-key-certificate  --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/nsq2i3mbg6sn775f
```

```
{
  "KeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUV2VENDQXFXZ0F3SUJBZ0lSQUo1OWd2VkpDd3dlYldMNldYZEpYYkl3RFFZSktvWklodmNOQVFFTkJRQXcKZ1lreEN6QUpCZ05WQkFZVEFsVlRNUmt3RndZRFZRUUtEQkJCVjFNZ1EzSjVjSFJ2WjNKaGNHaDVNU0V3SHdZRApWUVFMREJoQlYxTWdVR0Y1YldWdWRDQkRjbmx3ZEc5bmNtRndhSGt4RVRBUEJnTlZCQWdNQ0ZacGNtZHBibWxoCk1SVXdFd1lEVlFRRERBdzFNamt3TWpjME5UVTBPVFV4RWpBUUJnTlZCQWNNQ1VGeWJHbHVaM1J2YmpBZUZ3MHkKTXpBMk1EWXdNalEzTlRWYUZ3MHlNekE1TURRd016UTNOVFZhTUN3eEZUQVRCZ05WQkFNTUREVXlPVEF5TnpRMQpOVFE1TlRFVE1CRUdBMVVFQlJNS05EUTBPREV4TnpZMU1UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCkFEQ0NBUW9DZ2dFQkFOZ0loOS9lckd2azJTbHJ6K1ZaVkl0WXpEMDh3QkoxWVZKaDY1Z1J3NkFzbWJ4RUpYc1cKMjI5b3B1ZjhlOFU5TlBQbXU4TSs1YlRkcUxlbmI0cUowMm5abEtKWmVsdjdpVmQ5YjBmRnV6azlWb1RMMVN4dwpqeTBRd0ZDcTZUUlZveGE2d21PMGRwMHVMV2NBSm9UcENBc2U4ckk4czUxczlFMERaanZqald2cHhwOVRwMUhQClhBNmlzQ2lyUTR2b2FwWlpQNENLTjR6Wm13TE5oaUtuSDVhVnRyWkgyeXBzSll4aGIrTWcwUHZUUnRrRE9VTDcKKzdjb2diUWVlNWx1NDZJWDlyN1ZyRWVTYjEraENrQW5vb1JOL3k1aCtremYySzU4WWxpSWJEdE5aemlYRldIWgpXUnhYK1BWMnhwMFhGMmJUZTVEd2gyVWZ6U1JlNzhqZXlya0NBd0VBQWFOOE1Ib3dDUVlEVlIwVEJBSXdBREFmCkJnTlZIU01FR0RBV2dCUXVpSzJoYkc3VTlOUmYyM0FodTRMVkJtV3QwekFkQmdOVkhRNEVGZ1FVZTFLbWJqby8KOVMwVDZKOUVzT2R2bHRuKzNGb3dEZ1lEVlIwUEFRSC9CQVFEQWdXZ01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRgpCd01CQmdnckJnRUZCUWNEQWpBTkJna3Foa2lHOXcwQkFRMEZBQU9DQWdFQXNndUZpOVNsZmxCMHVTc2pySXFDCmQ2S3ZSZUdwSmlEZjVjVW4xZmJCeXlzL3NHVzI0dWRkeEc4SDdzQXp0MnlTZnM5L3hTZ1NIOFlqM25sU2l3clkKcS80R2x3Zk5FajBnanY2K1crNk1BazNWK2tjUVhMaUtwZlFrN3Z5OGMvcWRwK2tYd2N2K1pxUG1IUk5yNGl6eQpDSU5zVm04cDl5M0pZWlkwZWZrZU52bDR6enI4RGtNa3hva0liMVcyZVA0cm1BR2w2UHhLYVZmNnNLT1NoYlFXCm1heDBPalg2azdWNWdvbXdSMGVaVEtNQXhTUWpQRU5OSDllMi9kZTRJNG5WVXRFbWU2RjM5SWdiZmZicEhjMEkKNXdsN3FidUMvYnprcnNsNGRzOXB6Q3lQcFVUZjVQOWg5MkVqMzNURzJ1VEZURzRVQm0wMUVMYzFaTjhXbW12WgpWUk92M1VUSWlmQnd2em16OUpjUUZ5R3Nsa2prOTBJdkV0U3lld2psYW52cy9kanRJL2JzRFFPKzI1M2ltOFFRClJkSWVaUTRleWI5YTJxeDVtWDZHOWJ6RDBVRkVxN2JoTlppZlhzNE1YWEFjS051TnpYS1Zja1hKM0trYWt1TUcKVE5BTzc4T01qUUlTWk5NeXE2WmM2MVJVcFBVZ1R1K2Vhd1FGRzBBU0Yxb2w4Wjc4cEFSeE9Oc1lGdkQ5Y3BnUQpzSnlzeDB0Zjl6aTR5Zi80aWNOSkVlWVVNY0lGSXlFKzE0eDBpcFVSRTRGenRad2orYlZFeHdiM0h4aVJQMncyCkJLSnVKeXd4ZGx2L1hTZU1XaDl3UkNCb3lLeXFxWVdWcDcweW15N01oSFlVSERUWEFPL1NJN3B5VnVLaDBReUYKR1pEOHRibi9TR2RqQ0pETEM4bWlmNk09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=",
  "KeyCertificateChain": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUY0VENDQThtZ0F3SUJBZ0lSQUtlN2piaHFKZjJPd3FGUWI5c3VuOEV3RFFZSktvWklodmNOQVFFTkJRQXcKZ1lreEN6QUpCZ05WQkFZVEFsVlRNUmt3RndZRFZRUUtEQkJCVjFNZ1EzSjVjSFJ2WjNKaGNHaDVNU0V3SHdZRApWUVFMREJoQlYxTWdVR0Y1YldWdWRDQkRjbmx3ZEc5bmNtRndhSGt4RVRBUEJnTlZCQWdNQ0ZacGNtZHBibWxoCk1SVXdFd1lEVlFRRERBdzFNamt3TWpjME5UVTBPVFV4RWpBUUJnTlZCQWNNQ1VGeWJHbHVaM1J2YmpBZUZ3MHkKTXpBMk1EWXdNalEzTlRKYUZ3MHlPREEyTURZd016UTNOVEphTUlHSk1Rc3dDUVlEVlFRR0V3SlZVekVaTUJjRwpBMVVFQ2d3UVFWZFRJRU55ZVhCMGIyZHlZWEJvZVRFaE1COEdBMVVFQ3d3WVFWZFRJRkJoZVcxbGJuUWdRM0o1CmNIUnZaM0poY0doNU1SRXdEd1lEVlFRSURBaFdhWEpuYVc1cFlURVZNQk1HQTFVRUF3d01OVEk1TURJM05EVTEKTkRrMU1SSXdFQVlEVlFRSERBbEJjbXhwYm1kMGIyNHdnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDRHdBdwpnZ0lLQW9JQ0FRQzJyMld2eGJxZjJSUHhOem1JUk5ZeWZRQ2labGxYUVBQSDQycnAyQ1VtTk1VMkc2ZzdFRUZBCm5TWnNvRlN6Z1NJaEhUSWU4UDdUd1l3ckpPL3VNcEtka3lac1ppTEhUNGo4M1l1VkNlT1dSVERjdnRWMFV0M1IKaCs5UWVyaHhRQnVrK2dnZkRkT0FFUkR3S1pWckZqM3diT1FFMXY2WnRYSmpVZytWTXZKcEphUTg0WkFvYnpyUgpuY2JaL0hnbFhDM09xampSSk1laGJFaE93ZFJCTU4yQ2dTNHlhWTB3YlBvazhMSlRORVp5ZnkxUEtkaTd1UmxxCm9qeEdjc3pCRHFvdCsvTURBNVdZUjd5NVhiOGdOdSt0alkrMWdQSGRkWHFhRTR2bXV2cEtsQUttcml2SDRYWXQKZk9sa1kzYnRJckVuWDEwQkp1UXVGN0dRNyt3ZjN6TDZ4NFNIcGpiQWxpMDQyUmdXTVpibmlscW15YnhuUkRrUwpjZXZ3aEx2L0tnT09WM05KZlplWlVzT1N6NWNzTmRLME4rM2FCUlZQcVc5b2k3dDJ2dTc5eCtvb1pIS2FibFdiCmJDMDJxR1VDaTE3cHhDQ0JJdUVDZWJiWDhSS3dLa3RwbTRSOUZWYjBXZGFqNUc1ekdudTBsUlRMUVNaZ0QyU1EKSjRmQjh2em9Bb3BYenpSSStMSjNBaC9NcThXSTNHTHFIakhzcm5vdVJzMmNzcjVBYnNMbXUyUTlvMFJmNTd1RApwK1R1cXpKTysrNFpUWDlsb0N3UXdzKzNEZWUyL1pUSmJCNkFCdy9xdnovQjhsL2duY29Wc3lHTFhkaXdleTV1CjJHNnl2NGgrN0FBQldvdjhwWVBPUlRMY1FkanhVdWNDdllRYjJiRXY4ZGh1anN6TWo2ZDBDUUlEQVFBQm8wSXcKUURBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJRdWlLMmhiRzdVOU5SZjIzQWh1NExWQm1XdAowekFPQmdOVkhROEJBZjhFQkFNQ0FZWXdEUVlKS29aSWh2Y05BUUVOQlFBRGdnSUJBSS9Ta1NaS0pyMm1JakJ6ClJxQXQ3dmJ4eWNhQXhCU3VqbDlqVSttYkh1RDg4Qyt3TDh4TzNYRHJ1Vm9IZTdYanhrNXpaN0RWMjMza3haQlEKR3BET1hWaGNZdE5UNzk2YXd1K0VNU2kzK3RzTVJBMmMxODJ2ZVNDSE9HQmVseTlRS3FHWkJBZGU2ZGNzTkpMTwpiRE10NlB3NXpiRHNqalJnMGY5SGQrRFZheXV6QzBtdXVGWEZkT0txU0VWZVNmZWVNOUl5KzFMWDMzOFlVd05zCjdhS2ppaFVFSkg4ZkVFU1NEUGE5OGNOSEsyZ0t5UENrRUorMGlNZkJiTi9yUE1CYlhqTUtHYWpXSFFhWWtieDUKalVRUmdvd25ZbStycDRwRnNhalpSTFB0NE9mbkswNWYvRHdCUXVGWUUzUFJ2d2NQSWxJNHpkcWh0NE9ZSVY4RAo2MktleVEzb3R6eTdsVXIxamNrZldkSHpHc3NKVjYxc0xRTTBudVFNUnRTZjlHeEpYTEkyNjFaRWFMYVY5WFduCnY3YnByb090UTNiYk9RbjI0elJDVm5kZ0Z3aCtUVHMzVmFOQjhURmY2QjFoV1R5aTYzOCtoa1FTRnJTbXI1WTcKTXNGUXZXSVZVbjQ2cWNjVGNuNlc2Y2JIUlhyQkRiR0tlWUJiVjVXSkJwRUtSN0JuQ25HNnJCbmxGNjZ5eTUyLwpSbWZLRWZwWG1qbkh0WW94UnlQVlJZWDhPcnkzUFQrYSt0REtlMDBXY1MyM0U3MWl2QTBNdnVrODlwTzJIUVorCjNHUU9xdWJpQ3RMbVppdVFCZC9aN1NGWGlzcUxyTE5aOW52Q2VRSkxTckVDajRpZjV2dmJkWVhLdkozamhtSjkKeVZvc0xZVzA3SklzSFE0aDAwVWphSnhrVjdoWgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t"
}
```

# 标记密钥
<a name="tagging-keys"></a>

在 P AWS ayment Cryptography 中，您可以在[创建密钥时为 AWS 支付加密密钥](create-keys.md)添加标签，也可以标记或取消标记现有密钥，除非这些密钥待删除。标签是可选的，但它们可能非常有用。

 有关标签的一般信息，包括最佳做法、标记策略以及标签的格式和语法，请参阅中的[标记 AWS 资源](/tag-editor/latest/userguide/tagging.html)。*Amazon Web Services 一般参考*

**Topics**
+ [关于 AWS 支付密码学中的标签](tags-about.md)
+ [在控制台中查看密钥标签](manage-tags-console.md)
+ [使用 API 操作管理密钥标签](manage-tags-api.md)
+ [控制对标签的访问](tag-permissions.md)
+ [使用标签控制对密钥的访问](tag-authorization.md)

# 关于 AWS 支付密码学中的标签
<a name="tags-about"></a>

*标签*是您可以为 AWS 资源分配（或 AWS 可以分配）的可选元数据标签。每个标签都包含一个*标签键*和一个*标签值*，它们都是区分大小写的字符串。标签值可为空 (null) 字符串。资源上的每个标签必须具有不同的标签密钥，但您可以为多个 AWS 资源添加相同的标签。每个资源最多可以有 50 个用户创建的标签。

不要在标签键或标签值中包含机密或敏感信息。许多人都可以访问标签 AWS 服务，包括账单。

在 P AWS ayment Cryptography 中，您可以在[创建密钥时为密钥](create-keys.md)添加标签，也可以标记或取消标记现有密钥，除非这些密钥待删除。无法标记别名。标签是可选的，但它们可能非常有用。

例如，您可以为用于 Alpha 项目的所有 AWS 付款加密密钥和 Amazon S3 存储桶添加`"Project"="Alpha"`标签。另一个例子是为与特定银行识别码 (BIN) 关联的所有密钥添加 `"BIN"="20130622"` 标签。

```
      [
      {
        "Key": "Project",
        "Value": "Alpha"
      },
      {
        "Key": "BIN",
        "Value": "20130622"
      }
    ]
```

有关标签的一般信息，包括格式和语法，请参阅中的[*Amazon Web Services 一般参考*标记 AWS 资源](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)。

标签可帮助您：
+ 识别和整理您的 AWS 资源。许多 AWS 服务都支持标记，因此您可以为来自不同服务的资源分配相同的标签，以表明这些资源是相关的。例如，您可以为 AWS 支付加密密钥和亚马逊弹性区块存储 (Amazon EBS) 卷或密钥分配相同的标签。 AWS Secrets Manager 您还可以使用标签来标识密钥以实现自动化。
+ 追踪您的 AWS 成本。向 AWS 资源添加标签时， AWS 会生成一份成本分配报告，其中包含按标签汇总的使用量和成本。您可以使用此功能来跟踪项目、应用程序或成本中心的 AWS 支付加密成本。

  有关对成本分配使用标签的更多信息，请参阅 *AWS Billing 用户指南*中的[使用成本分配标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。有关适用于标签键和标签值的规则的信息，请参阅 *AWS Billing 用户指南*中的[用户定义的标签限制](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html)。
+ 控制对 AWS 资源的访问权限。根据密钥的标签允许和拒绝访问密钥是 AWS 支付密码学对基于属性的访问控制 (ABAC) 的支持的一部分。有关基于 AWS Payment Cryptography 的标签控制对其访问的更多信息，请参阅 [基于 AWS 支付密码标签的授权](security_iam_service-with-iam.md#security_iam_service-with-iam-tags)。有关使用标签控制 AWS 资源访问权限的更多一般信息，请参阅 *IAM 用户指南*中的[使用 AWS 资源标签控制对资源的访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)。

AWS 当您使用 TagResource、 UntagResource或 ListTagsForResource 操作时，Payment Cryptography 会在您的 AWS CloudTrail 日志中写入一个条目。

# 在控制台中查看密钥标签
<a name="manage-tags-console"></a>

要在控制台中查看标签，您需要在包含该密钥的 IAM policy 中拥有密钥的标记权限。除了在控制台中查看密钥的权限之外，您还需要这些权限。

# 使用 API 操作管理密钥标签
<a name="manage-tags-api"></a>

您可以使用 [AWS Payment Cryptography API](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/Welcome.html) 为您管理的密钥添加、删除和列出标签。这些示例使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)，但您可以使用任何受支持的编程语言。您无法标记 AWS 托管式密钥。

要添加、编辑、查看和删除密钥的标签，您必须具有所需的权限。有关更多信息，请参阅 [控制对标签的访问](tag-permissions.md)。

**Topics**
+ [CreateKey: 为新密钥添加标签](#tagging-keys-create-key)
+ [TagResource: 为密钥添加或更改标签](#tagging-keys-tag-resource)
+ [ListResourceTags: 获取密钥的标签](#tagging-keys-list-resource-tags)
+ [UntagResource: 从密钥中删除标签](#tagging-keys-untag-resource)

## CreateKey: 为新密钥添加标签
<a name="tagging-keys-create-key"></a>

您可以在创建密钥时向其添加标签。要指定标签，请使用[CreateKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html)操作的`Tags`参数。

要在创建密钥时添加标签，调用方必须具有 IAM policy 中的 `payment-cryptography:TagResource` 权限。权限至少必须涵盖账户和区域中的所有密钥。有关更多信息，请参阅 [控制对标签的访问](tag-permissions.md)。

`CreateKey` 的 `Tags` 参数的值是区分大小写的标签键和标签值对的集合。密钥上的每个标签都必须具有不同的标签名称。标签值可为 null 或空字符串。

例如，以下 AWS CLI 命令创建带有`Project:Alpha`标签的对称加密密钥。指定多个键值对时，请使用空格分隔每个对。

```
$ aws payment-cryptography create-key --exportable --key-attributes KeyAlgorithm=TDES_2KEY, \
        KeyUsage=TR31_C0_CARD_VERIFICATION_KEY,KeyClass=SYMMETRIC_KEY, \
        KeyModesOfUse='{Generate=true,Verify=true}' \
        --tags '[{"Key":"Project","Value":"Alpha"},{"Key":"BIN","Value":"123456"}]'
```

当此命令成功时，它会返回一个 `Key` 对象以及有关新密钥的信息。但是，`Key` 不包括标签。要获取标签，请使用[ListResourceTags](#tagging-keys-list-resource-tags)操作。

## TagResource: 为密钥添加或更改标签
<a name="tagging-keys-tag-resource"></a>

该[TagResource](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_TagResource.html)操作向密钥添加一个或多个标签。此操作不能用于添加或编辑不同 AWS 账户中的标签。

要添加标签，请指定新标签键和标签值。要编辑标签，请指定现有标签键和新标签值。密钥上的每个标签都必须具有不同的标签键。标签值可为 null 或空字符串。

例如，以下命令将 **UseCase** 和 **BIN** 标签添加到示例密钥中。

```
$ aws payment-cryptography tag-resource --resource-arn arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h --tags '[{"Key":"UseCase","Value":"Acquiring"},{"Key":"BIN","Value":"123456"}]' 
```

此命令成功执行后，不会返回任何输出。要查看密钥上的标签，请使用[ListResourceTags](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ListTagsForResource.html)操作。

您也可以使用 **TagResource** 来更改现有标签的标签值。要替换标签值，请指定具有不同值的相同标签键。修改命令中未列出的标签不会被更改或删除。

例如，此命令会将 `Project` 标签的值从 `Alpha` 更改为 `Noe`。

该命令将返回 http/200，但不包含任何内容。要查看您的更改，请使用 `ListTagsForResource`

```
$ aws payment-cryptography tag-resource --resource-arn arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h \ 
        --tags '[{"Key":"Project","Value":"Noe"}]'
```

## ListResourceTags: 获取密钥的标签
<a name="tagging-keys-list-resource-tags"></a>

该[ListResourceTags](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ListTagsForResource.html)操作会获取密钥的标签。`ResourceArn`（keyArn 或 keyAlias）参数是必需的。此操作不能用于查看其他 AWS 账户中的密钥上的标签。

例如，以下命令获取示例密钥的标签。

```
$ aws payment-cryptography list-tags-for-resource --resource-arn arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h
       
  {
    "Tags": [
        {
            "Key": "BIN",
            "Value": "20151120"
        },
        {
            "Key": "Project",
            "Value": "Production"
        }
    ]
}
```

## UntagResource: 从密钥中删除标签
<a name="tagging-keys-untag-resource"></a>

该[UntagResource](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_UntagResource.html)操作会从密钥中删除标签。要标识要删除的标签，请指定标签键。此操作不能用于从其他 AWS 账户中的密钥中删除标签。

当它成功时，`UntagResource` 操作不返回任何输出。此外，如果在密钥上未找到指定的标签键，则不会抛出异常或返回响应。要确认操作是否奏效，请使用该[ListResourceTags](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ListTagsForResource.html)操作。

例如，此命令将从指定的密钥中删除 **Purpose** 标签及其值。

```
$ aws payment-cryptography untag-resource \ 
        --resource-arn arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h --tag-keys Project
```

# 控制对标签的访问
<a name="tag-permissions"></a>

要通过使用 API 来添加、查看和删除标签，主体需要在 IAM policy 中获取标记权限。

您也可以通过对标签使用 AWS 全局条件键来限制这些权限。在 AWS 支付密码学中，这些条件可以控制对标记操作（例如[TagResource](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_TagResource.html)和）的访问。[UntagResource](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_UntagResource.html)

有关示例策略和更多信息，请参阅 *IAM 用户指南*中的[根据标签键控制访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-tag-keys)。

用于创建和管理标签的权限如下所示。

**支付密码学：TagResource**  
允许主体添加或编辑标签。要在创建密钥时添加标签，主体必须在 IAM policy 中具有不限于特定密钥的权限。

**支付密码学：ListTagsForResource**  
允许主体查看密钥上的标签。

**支付密码学：UntagResource**  
允许主体从密钥中删除标签。

## 标记策略中的权限
<a name="tag-permission-examples"></a>

您可以在密钥政策或 IAM policy 中提供权限标记。例如，以下示例密钥政策向选定用户授予标记密钥的权限。它为所有可以担任示例管理员或开发人员角色的用户授予查看标签的权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "example-key-policy",
  "Statement": [
    { 
      "Sid": "EnableIAMUserPermissions",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
      "Action": "payment-cryptography:*",
      "Resource": "*"
    },
    {
      "Sid": "AllowAllTaggingPermissions",
      "Effect": "Allow",
      "Principal": {"AWS": [
        "arn:aws:iam::111122223333:user/LeadAdmin",
        "arn:aws:iam::111122223333:user/SupportLead"
      ]},
      "Action": [
        "payment-cryptography:TagResource",
        "payment-cryptography:ListTagsForResource",
        "payment-cryptography:UntagResource"
      ],
      "Resource": "*"
    },
    {
      "Sid": "Allow roles to view tags",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:role/Administrator",
          "arn:aws:iam::111122223333:role/Developer"
        ]
      },
      "Action": "payment-cryptography:ListTagsForResource",
      "Resource": "*"
    }
  ]
}
```

------

要授予主体对多个密钥的标记权限，您可以使用 IAM policy。为使此策略生效，每个密钥的密钥政策都必须允许账户使用 IAM policy 来控制对密钥的访问。

例如，以下 IAM policy 允许主体创建密钥。它还允许他们在指定账户中的所有密钥上创建和管理标签。这种组合允许委托人在创建密钥时使用[CreateKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html)操作的 tags 参数向密钥添加标签。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPolicyCreateKeys",
      "Effect": "Allow",
      "Action": "payment-cryptography:CreateKey",
      "Resource": "*"
    },
    {
      "Sid": "IAMPolicyTags",
      "Effect": "Allow",
      "Action": [
        "payment-cryptography:TagResource",
        "payment-cryptography:UntagResource",
        "payment-cryptography:ListTagsForResource"
      ],
      "Resource": "arn:aws:payment-cryptography:*:111122223333:key/*"
    }    
  ]
}
```

------

## 限制标签权限
<a name="tag-permissions-conditions"></a>

您可以通过使用策略条件限制标记权限。以下策略条件可应用于 `payment-cryptography:TagResource` 和 `payment-cryptography:UntagResource` 权限。例如，您可以使用 `aws:RequestTag/tag-key` 条件来允许主体仅添加特定标签，或阻止主体添加具有特定标签键的标签。
+ [aws：RequestTag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)
+ a@@ [ws:ResourceTag/*tag-key（仅*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag)限 IAM 策略）
+ [aws：TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tag-keys)

作为使用标签控制对密钥的访问的最佳实践，请使用 `aws:RequestTag/tag-key` 或 `aws:TagKeys` 条件键来确定允许哪些标签（或标签键）。

例如，以下 IAM policy 与上一个类似。但是，此策略允许主体为具有 `Project` 标签键的标签创建标签 (`TagResource`) 并删除标签 `UntagResource`。

由于`TagResource`和`UntagResource`请求可以包含多个标签，因此您必须使用 aws[: TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys) 条件指定`ForAllValues`或`ForAnyValue`设置运算符。`ForAnyValue` 运算符要求请求中至少有一个标签键与策略中的其中一个标签键匹配。`ForAllValues` 运算符要求请求中所有的标签键与策略中的其中一个标签键匹配。`true`如果请求中没有标签，则`ForAllValues`运算符也会返回，但 TagResource 如果未指定标签，则会 UntagResource失败。有关集合运算符的详细信息，请参阅 *IAM 用户指南*中的[使用多个键和值](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPolicyCreateKey",
      "Effect": "Allow",
      "Action": "payment-cryptography:CreateKey",
      "Resource": "*"
    },
    {
      "Sid": "IAMPolicyViewAllTags",
      "Effect": "Allow",
      "Action": "payment-cryptography:ListTagsForResource",
      "Resource": "arn:aws:payment-cryptography:*:111122223333:key/*"
    },
    {
      "Sid": "IAMPolicyManageTags",
      "Effect": "Allow",
      "Action": [
        "payment-cryptography:TagResource",
        "payment-cryptography:UntagResource"
      ],
      "Resource": "arn:aws:payment-cryptography:*:111122223333:key/*",
      "Condition": {
          "ForAllValues:StringEquals": {"aws:TagKeys": "Project"}
      }
    }
  ]
}
```

------

# 使用标签控制对密钥的访问
<a name="tag-authorization"></a>

您可以根据密钥上的标签控制对 AWS 支付密码的访问权限。例如，您可以编写 IAM policy，以允许主体仅启用和禁用具有特定标签的密钥。或者，您可以使用 IAM policy 防止主体在加密操作中使用密钥，除非密钥具有特定标签。

此功能是基于属性的访问控制 (ABAC) 的 AWS 支付密码学支持的一部分。有关使用标签控制 AWS 资源访问的信息，请参阅 [ABAC 有什么用 AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)？ 以及[使用 *IAM 用户指南*中的资源标签控制对资源的访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)权限。 AWS 

AWS Payment Crypto [graph *y 支持 aws: ResourceTag /tag-*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) key 全局条件上下文密钥，它允许您根据密钥上的标签控制对密钥的访问权限。由于多个密钥可以具有相同的标签，此功能可使您将权限应用于一组选定的密钥。您还可以通过更改密钥的标签轻松更改集合中的 KMS 密钥。

在 AWS 支付密码学中，`aws:ResourceTag/tag-key`条件密钥仅在 IAM 策略中受支持。密钥策略（仅适用于一个密钥）或不使用特定密钥的操作（例如[ListKeys](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ListKeys.html)或[ListAliases](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ListAliases.html)操作）不支持它。

使用标签控制访问提供了一种简单、可扩展且灵活的方式来管理权限。但是，如果设计和管理不当，它可能会无意中允许或拒绝对您的密钥的访问。如果您使用标签来控制访问，请考虑以下做法。
+ 使用标签来强化[最低权限访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)的最佳实践。仅为 IAM 主体授予他们对必须使用或管理的密钥的所需权限。例如，使用标签来标记用于项目的密钥。然后授予项目团队仅使用带有项目标签的密钥的权限。
+ 谨慎为主体提供 `payment-cryptography:TagResource` 和 `payment-cryptography:UntagResource` 权限，以允许他们添加、编辑和删除标签。当您使用标签控制对密钥的访问时，更改标签可以授予主体使用他们没有权限使用的密钥的权限。它还可以拒绝对其他主体执行其工作所需的密钥的访问。不具有更改密钥策略或创建授权权限的密钥管理员可以控制对密钥的访问，前提是他们有权管理标签。

  如有可能，请使用策略条件，例如 `aws:RequestTag/tag-key` 或 `aws:TagKeys`，以[将主体的标记权限限制](tag-permissions.md#tag-permissions-conditions)为特定 密钥上的特定标签或标签模式。
+ 查看您中当前拥有标记和取消标记权限 AWS 账户 的委托人，并在必要时对其进行调整。IAM policy 可能允许对所有密钥的标记和取消标记权限。例如，*管理员*托管策略允许主体标记、取消标记和列出所有密钥上的标签。
+ 在设置依赖于标签的策略之前，请查看您的密钥上的标签 AWS 账户。请确保您的策略仅适用于您要包含的标签。使用[CloudTrail 日志](monitoring-cloudtrail.md)和 CloudWatch 警报提醒您注意可能影响密钥访问权限的标记更改。
+ 基于标签的策略条件使用模式匹配；它们不绑定到标签的特定实例。使用基于标签的条件键的策略会影响与模式匹配的所有新标签和现有标签。如果删除并重新创建与策略条件匹配的标签，则该条件将应用于新标签，就像对旧标签一样。

例如，请考虑以下 IAM policy。它允许主体仅对您账户中位于美国东部（弗吉尼亚州北部）地区且带有 `"Project"="Alpha"` 标签的密钥调用 [Decrypt](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_Decrypt.html) 操作。您可以将此策略附加到示例 Alpha 项目中的角色。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPolicyWithResourceTag",
      "Effect": "Allow",
      "Action": [
        "payment-cryptography:DecryptData"
      ],
      "Resource": "arn:aws:payment-cryptography:us-east-1:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Project": "Alpha"
        }
      }
    }
  ]
}
```

------

以下示例 IAM policy 允许主体使用账户中的密钥执行特定加密操作。但它禁止主体对具有 `"Type"="Reserved"` 标签或不包含 `"Type"` 标签的密钥使用这些加密操作。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMAllowCryptographicOperations",
      "Effect": "Allow",
      "Action": [
        "payment-cryptography:EncryptData",
        "payment-cryptography:DecryptData",
        "payment-cryptography:ReEncrypt*"
      ],
      "Resource": "arn:aws:payment-cryptography:*:111122223333:key/*"
    },
    {
      "Sid": "IAMDenyOnTag",
      "Effect": "Deny",
      "Action": [
        "payment-cryptography:EncryptData",
        "payment-cryptography:DecryptData",
        "payment-cryptography:ReEncrypt*"
      ],
      "Resource": "arn:aws:payment-cryptography:*:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Type": "Reserved"
        }
      }
    },
    {
      "Sid": "IAMDenyNoTag",
      "Effect": "Deny",
      "Action": [
       "payment-cryptography:EncryptData",
       "payment-cryptography:DecryptData",
       "payment-cryptography:ReEncrypt*"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*",
      "Condition": {
        "Null": {
          "aws:ResourceTag/Type": "true"
        }
      }
    }
  ]
}
```

------

# 了解 AWS 支付密码学密钥的关键属性
<a name="keys-validattributes"></a>

正确管理密钥的原则是，密钥的范围必须适当，并且只能用于允许的操作。因此，某些密钥只能在特定密钥使用模式下创建。只要有可能，这就与 [TR-31](terminology.md#terms.tr31) 定义的可用使用模式保持一致。

 尽管 AWS 支付密码学可以防止您创建无效密钥，但为了方便起见，此处提供了有效的密钥组合。

## 对称密钥
<a name="w2aac12c39b7"></a>
+ TR31\$1B0\$1BASE\$1DERIATION\$1KEY
  + **允许的密钥算法**：TDES\$12KEY ,TDES\$13KEY ,AES\$1128 ,AES\$1192 ,AES\$1256
  + **允许的按键使用模式组合**：\$1 DeriveKey = true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1C0\$1CARD\$1VERIFICATION\$1KEY
  + **允许的密钥算法**：TDES\$12KEY、TDES\$13KEY、AES\$1128\$1、AES\$1192\$1、AES\$1256\$1
  + **允许的密钥使用模式组合**：\$1生成 = true\$1、\$1Verify = true\$1、\$1Generate = true、Verify= true\$1、\$1= true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1D0\$1SYMMETRIC\$1DATA\$1加密密钥
  + **允许的密钥算法**：TDES\$12KEY ,TDES\$13KEY ,AES\$1128 ,AES\$1192 ,AES\$1256
  + **允许的密钥使用模式组合**：\$1Encrypt = true、Decrypt = true、Wrap = true、Unwrap = true\$1、\$1encrypt = true、Unwrap = true\$1、\$1= true\$1、\$1= true\$1 NoRestrictions 
+ TR31\$1E0\$1EMV\$1MKEY\$1APP\$1CRYPTOGRAMS
  + **允许的密钥算法**：TDES\$12KEY、TDES\$13KEY\$1、AES\$1128\$1、AES\$1192\$1、AES\$1256\$1
  + **允许的按键使用模式组合**：\$1 DeriveKey = true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1E1\$1EMV\$1mkey\$1机密
  + **允许的密钥算法**：TDES\$12KEY、TDES\$13KEY、AES\$1128\$1、AES\$1192\$1、AES\$1256\$1
  + **允许的按键使用模式组合**：\$1 DeriveKey = true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1E2\$1EMV\$1mkey\$1INTEGRITY
  + **允许的密钥算法**：TDES\$12KEY、TDES\$13KEY、AES\$1128\$1、AES\$1192\$1、AES\$1256\$1
  + **允许的按键使用模式组合**：\$1 DeriveKey = true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1E4\$1EMV\$1MKEY\$1DYNAMIC\$1NUMBERS
  + **允许的密钥算法**：TDES\$12KEY、TDES\$13KEY、AES\$1128\$1、AES\$1192\$1、AES\$1256\$1
  + **允许的按键使用模式组合**：\$1 DeriveKey = true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1E5\$1EMV\$1MKEY\$1CARD\$1PERSONALIZATION
  + **允许的密钥算法**：TDES\$12KEY、TDES\$13KEY、AES\$1128\$1、AES\$1192\$1、AES\$1256\$1
  + **允许的按键使用模式组合**：\$1 DeriveKey = true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1E6\$1EMV\$1MKEY\$1OTHER
  + **允许的密钥算法**：TDES\$12KEY、TDES\$13KEY、AES\$1128\$1、AES\$1192\$1、AES\$1256\$1
  + **允许的按键使用模式组合**：\$1 DeriveKey = true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1K0\$1KEY\$1NECRYPTION\$1KEY
  + 建议使用 TR31 \$1K1\$1KEY\$1BLOCK\$1PROTECTION\$1KEY。**允许的密钥算法**：TDES\$12KEY ,TDES\$13KEY ,AES\$1128 ,AES\$1192 ,AES\$1256
  + **允许的密钥使用模式组合**：\$1Encrypt = true、Decrypt = true、Wrap = true、Unwrap = true\$1、\$1encrypt = true、Unwrap = true\$1、\$1= true\$1、\$1= true\$1 NoRestrictions 
+ TR31\$1K1\$1KEY\$1BLOCK\$1PROTECTION\$1K
  + **允许的密钥算法**：TDES\$12KEY ,TDES\$13KEY ,AES\$1128 ,AES\$1192 ,AES\$1256
  + **允许的密钥使用模式组合**：\$1Encrypt = true、Decrypt = true、Wrap = true、Unwrap = true\$1、\$1encrypt = true、Unwrap = true\$1、\$1= true\$1、\$1= true\$1 NoRestrictions 
+ TR31\$1M1\$1ISO\$19797\$11\$1MAC\$1KEY
  + **允许的密钥算法**：TDES\$12KEY、TDES\$13KEY
  + **允许的密钥使用模式组合**：\$1生成 = true\$1、\$1Verify = true\$1、\$1Generate = true、Verify= true\$1、\$1= true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1M3\$1ISO\$19797\$13\$1MAC\$1KEY
  + **允许的密钥算法**：TDES\$12KEY、TDES\$13KEY
  + **允许的密钥使用模式组合**：\$1生成 = true\$1、\$1Verify = true\$1、\$1Generate = true、Verify= true\$1、\$1= true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1M6\$1ISO\$19797\$15\$1CMAC\$1KEY
  + **允许的密钥算法**：TDES\$12KEY ,TDES\$13KEY ,AES\$1128 ,AES\$1192 ,AES\$1256
  + **允许的密钥使用模式组合**：\$1生成 = true\$1、\$1Verify = true\$1、\$1Generate = true、Verify= true\$1、\$1= true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1m7\$1HMAC\$1KEY
  + **允许的密钥算法**：TDES\$12KEY ,TDES\$13KEY ,AES\$1128 ,AES\$1192 ,AES\$1256
  + **允许的密钥使用模式组合**：\$1生成 = true\$1、\$1Verify = true\$1、\$1Generate = true、Verify= true\$1、\$1= true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1P0\$1PIN\$1加密密钥
  + **允许的密钥算法**：TDES\$12KEY ,TDES\$13KEY ,AES\$1128 ,AES\$1192 ,AES\$1256
  + **允许的密钥使用模式组合**：\$1Encrypt = true、Decrypt = true、Wrap = true、Unwrap = true\$1、\$1encrypt = true、Unwrap = true\$1、\$1= true\$1、\$1= true\$1 NoRestrictions 
+ TR31\$1V1\$1 \$1PIN\$1VERIFICATION\$1KEY IBM3624
  + **允许的密钥算法**：TDES\$12KEY ,TDES\$13KEY ,AES\$1128 ,AES\$1192 ,AES\$1256
  + **允许的密钥使用模式组合**：\$1生成 = true\$1、\$1Verify = true\$1、\$1Generate = true、Verify= true\$1、\$1= true\$1、\$1 NoRestrictions = true\$1
+ TR31\$1V2\$1VISA\$1PIN\$1PIN\$1VERIFICATION\$1KEY
  + **允许的密钥算法**：TDES\$12KEY ,TDES\$13KEY ,AES\$1128 ,AES\$1192 ,AES\$1256
  + **允许的密钥使用模式组合**：\$1生成 = true\$1、\$1Verify = true\$1、\$1Generate = true、Verify= true\$1、\$1= true\$1、\$1 NoRestrictions = true\$1

## 非对称密钥
<a name="w2aac12c39b9"></a>
+ TR31\$1D1\$1用于数据加密的非对称密钥
  + **允许的密钥算法**：RSA\$12048 ,RSA\$13072 ,RSA\$14096
  + **允许的密钥使用模式组合**：\$1 Encrypt = true, Decrypt = true, Wrap = true, Unwrap = true \$1 ,\$1 Encrypt = true, Wrap = true \$1 ,\$1 Decrypt = true, Unwrap = true \$1
  + **注意::** \$1encrypt = true，Wrap = true\$1 是导入用于加密数据或封装密钥的公钥时唯一有效的选项
+ TR31\$1S0\$1ASYMETRIC\$1KEY\$1FOR \$1DIGITAL\$1SIGNATURE
  + **允许的密钥算法**：RSA\$12048 ,RSA\$13072 ,RSA\$14096
  + **允许的按键使用模式组合**：\$1Sign = true\$1、\$1Verify = true\$1
  + **注意：：**在导入用于签名的密钥（例如 TR-34 的根证书、中间证书或签名证书）时，\$1Verify = true\$1 是唯一有效的选项。
+ TR31\$1K3\$1ASYMETRIC\$1KEY\$1FOR \$1KEY\$1AGEMENT
  + 用于密钥协议算法，例如 ECDH
  + **允许的密钥算法**：ECC\$1NIST\$1P256、ECC\$1NIST\$1P384、ECC\$1NIST\$1P521
  + **允许的按键使用模式组合**：\$1 DeriveKey = true\$1。
  + **注意：**DeriveKeyUsage 用于指定将从该基本密钥派生出哪种密钥。这在创建/导入密钥时已修复。
+ TR31\$1K2\$1 \$1ASYMMETRIC\$1KEY TR34
  + 用于兼容 X9.24 的密钥交换机制（例如 TR-34）的非对称密钥
  + **允许的密钥算法**：RSA\$12048、RSA\$13072、RSA\$14096
  + **允许的按键使用模式组合**：\$1 DeriveKey = true\$1。
  + **允许的密钥使用模式组合**：\$1 Encrypt = true, Decrypt = true, Wrap = true, Unwrap = true \$1 ,\$1 Encrypt = true, Wrap = true \$1 ,\$1 Decrypt = true, Unwrap = true \$1
  + **注意::** \$1encrypt = true，Wrap = true\$1 是导入用于加密数据或封装密钥的公钥时唯一有效的选项

\$1 目前任何加密操作都不支持这种 algorithm/key 类型组合