

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

# AWS 支付密码学入门
<a name="getting-started"></a>

要开始使用 AWS 支付加密，您首先需要创建密钥，然后在各种加密操作中使用它们。以下教程提供了生成用于 generating/verifying CVV2 值的密钥的简单用例。要尝试其他示例并探索 AWS 中的部署模式，请尝试以下[AWS 支付密码学研讨会](https://catalog.us-east-1.prod.workshops.aws/workshops/b85843d4-a5e4-40fc-9a96-de0a99312a4b/en-US)或浏览我们的示例项目 [GitHub](https://github.com/aws-samples/samples-for-payment-cryptography-service) 

本教程将引导您创建单个密钥并使用该密钥执行加密操作。之后，如果您不再需要密钥，则可以将其删除，从而完成密钥的生命周期。

**警告**  
 本用户指南中的示例可能使用示例值。我们*强烈建议*不要在生产环境中使用样本值，例如密钥序列号。

**Topics**
+ [

## 先决条件
](#getting-started-prerequisites)
+ [

## 步骤 1：创建密钥
](#getting-started-step1)
+ [

## 步骤 2：使用密钥生成 CVV2 值
](#getting-started-step2)
+ [

## 步骤 3：验证已在步骤 2 中生成的值
](#getting-started-step3)
+ [

## 第 4 步：进行阴性测试
](#getting-started-step4)
+ [

## 第 5 步：（可选）清除
](#getting-started-cleanup)

## 先决条件
<a name="getting-started-prerequisites"></a>

在您开始之前，请确保：
+ 您有权访问该服务。有关更多信息，请参阅 [IAM policy](security_iam_service-with-iam.md)。
+ 您已安装 [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。您也可以使用[AWS SDKs](https://aws.amazon.com/developer/tools/)或[AWS APIs](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/Welcome.html)访问 AWS 支付密码学，但本教程中的说明使用。 AWS CLI

## 步骤 1：创建密钥
<a name="getting-started-step1"></a>

第一步是创建一个密钥。在本教程中，您将创建一个用于生成和验证 [CVV/ 值的 CVK](terminology.md#terms.cvk) 双长度 3DES (2KEY TDES) 密钥。CVV2 

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

响应会回显请求参数，包括后续调用的 ARN 以及密钥检查值 (KCV)。

```
{
    "Key": {
        "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
        "KeyAttributes": {
            "KeyUsage": "TR31_C0_CARD_VERIFICATION_KEY",
            "KeyClass": "SYMMETRIC_KEY",
            "KeyAlgorithm": "TDES_2KEY",
            "KeyModesOfUse": {
                "Encrypt": false,
                "Decrypt": false,
                "Wrap": false,
                "Unwrap": false,
                "Generate": true,
                "Sign": false,
                "Verify": true,
                "DeriveKey": false,
                "NoRestrictions": false
            }
        },
        "KeyCheckValue": "CADDA1",
        "KeyCheckValueAlgorithm": "ANSI_X9_24",
        "Enabled": true,
        "Exportable": true,
        "KeyState": "CREATE_COMPLETE",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "CreateTimestamp": "2023-06-05T06:41:46.648000-07:00",
        "UsageStartTimestamp": "2023-06-05T06:41:46.626000-07:00"
    }
}
```

请注意代表密钥的 `KeyArn`，例如：*arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi*。您需要在下一步中执行该操作。

## 步骤 2：使用密钥生成 CVV2 值
<a name="getting-started-step2"></a>

在此步骤中，您将使用步骤 1 中的密钥 CVV2 为给定的`PAN`到期日期生成一个。

```
$  aws payment-cryptography-data generate-card-validation-data \
    --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi \
    --primary-account-number=171234567890123 \
    --generation-attributes CardVerificationValue2={CardExpiryDate=0123}
```

```
{
    "CardDataGenerationKeyCheckValue": "CADDA1",
    "CardDataGenerationKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
    "CardDataType": "CARD_VERIFICATION_VALUE_2",
    "CardDataValue": "144"
}
```

注意 `cardDataValue`，在本例中为 3 位数字 144。您需要在下一步中执行该操作。

## 步骤 3：验证已在步骤 2 中生成的值
<a name="getting-started-step3"></a>

在此示例中，您将使用在步骤 1 中创建的密钥验证 CVV2 来自步骤 2 的。

运行以下命令来验证 CVV2。

```
$  aws payment-cryptography-data  verify-card-validation-data \
    --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi \
    --primary-account-number=171234567890123 \
    --verification-attributes CardVerificationValue2={CardExpiryDate=0123} \
    --validation-data 144
```

```
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
    "KeyCheckValue": "CADDA1"
}
```

该服务返回 200 的 HTTP 响应，表示它已验证 CVV2。

## 第 4 步：进行阴性测试
<a name="getting-started-step4"></a>

在此步骤中，您将创建一个阴性测试，其中 CVV2 不正确且无法验证。您尝试 CVV2 使用在步骤 1 中创建的密钥来验证不正确的密钥。例如，如果持卡人在结账时输入了错误 CVV2 的内容，则这是预期的操作。

```
$  aws payment-cryptography-data  verify-card-validation-data \
    --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi \
    --primary-account-number=171234567890123 \
    --verification-attributes CardVerificationValue2={CardExpiryDate=0123} \
    --validation-data 999
```

```
Card validation data verification failed.
```

该服务返回 400 的 HTTP 响应，消息为“信用卡验证数据验证失败”，原因为 INVALID\$1VALIDATION\$1DATA。

## 第 5 步：（可选）清除
<a name="getting-started-cleanup"></a>

现在，您可以删除已在步骤 1 中创建的密钥。为最大限度地减少不可恢复的更改，默认密钥删除期为七天。

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

```
{
    "Key": {
        "CreateTimestamp": "2022-10-27T08:27:51.795000-07:00",
        "DeletePendingTimestamp": "2022-11-03T13:37:12.114000-07:00",
        "Enabled": true,
        "Exportable": true,
        "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
        "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_C0_CARD_VERIFICATION_KEY"
        },
        "KeyCheckValue": "CADDA1",
        "KeyCheckValueAlgorithm": "ANSI_X9_24",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "KeyState": "DELETE_PENDING",
        "UsageStartTimestamp": "2022-10-27T08:27:51.753000-07:00"
    }
}
```

请注意输出中的两个字段。默认情况下，`deletePendingTimestamp` 设置为未来的七天。keyState 设置为 `DELETE_PENDING`。您可以在预定删除时间之前的任何时间通过调用 [https://docs.aws.amazon.com/cli/latest/reference/payment-cryptography/restore-key.html](https://docs.aws.amazon.com/cli/latest/reference/payment-cryptography/restore-key.html) 取消此删除。