

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

# 常规函数
<a name="use-cases-issuers.generalfunctions"></a>

**Topics**
+ [生成一个随机引脚和关联的 PVV，然后验证该值](use-cases-issuers.generalfunctions.pvv.md)
+ [生成或验证给定卡片的 CVV](use-cases-issuers.generalfunctions.cvv.md)
+ [CVV2 为特定卡片生成或验证](use-cases-issuers.generalfunctions.cvv2.md)
+ [为特定卡生成或验证 iCvV](use-cases-issuers.generalfunctions.icvv.md)
+ [验证 EMV ARQC 并生成 ARPC](use-cases-issuers.generalfunctions.arqc.md)
+ [生成并验证 EMV MAC](use-cases-issuers.generalfunctions.emvmac.md)
+ [生成 EMV MAC 以更改 PIN](use-cases-issuers.generalfunctions.emvpinchange.md)

# 生成一个随机引脚和关联的 PVV，然后验证该值
<a name="use-cases-issuers.generalfunctions.pvv"></a>

**Topics**
+ [创建密钥](#use-cases-issuers.generalfunctions.pvv.setup)
+ [生成一个随机密码，生成 PVV 并返回加密的 PIN 和 PVV](#use-cases-issuers.generalfunctions.pvv.generate)
+ [使用 PVV 方法验证加密的 PIN](#use-cases-issuers.generalfunctions.pvv.verify)

## 创建密钥
<a name="use-cases-issuers.generalfunctions.pvv.setup"></a>

为了生成随机 PIN 和 [PVV](terminology.md#terms.pvv)，你需要两个密钥，一个用于生成 PVV 的 P [in 验证密钥 (PVK)](terminology.md#terms.pvk) 和一个用于加密 PIN 的 P [in 加密密钥](terminology.md#terms.pek)。PIN 本身是在服务内部安全地随机生成的，并且在加密方面与任何一个密钥都没有关系。

PGK 必须是基于 PVV 算法本身的算法 TDES\$12KEY 的密钥。PEK 可以是 TDES\$12KEY、TDES\$13KEY 或 AES\$1128。在这种情况下，由于 PEK 仅供系统内部使用，因此 AES\$1128 将是一个不错的选择。如果PEK用于与其他系统（例如卡网络、收单机构 ATMs）交换或作为迁移的一部分进行移动，则出于兼容性考虑，TDES\$12KEY可能是更合适的选择。

### 创建 PEK
<a name="use-cases-issuers.generalfunctions.pvv.setup.pek"></a>

```
$ aws payment-cryptography create-key \
               --exportable 
               --key-attributes KeyAlgorithm=AES_128,KeyUsage=TR31_P0_PIN_ENCRYPTION_KEY,\
                   KeyClass=SYMMETRIC_KEY,\
                   KeyModesOfUse='{Encrypt=true,Decrypt=true,Wrap=true,Unwrap=true}' --tags='[{"Key":"CARD_BIN","Value":"12345678"}]'
```

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

```
{
               "Key": {
                   "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt",
                   "KeyAttributes": {
                       "KeyUsage": "TR31_P0_PIN_ENCRYPTION_KEY",
                       "KeyClass": "SYMMETRIC_KEY",
                       "KeyAlgorithm": "AES_128",
                       "KeyModesOfUse": {
                           "Encrypt": false,
                           "Decrypt": false,
                           "Wrap": false,
                           "Unwrap": false,
                           "Generate": true,
                           "Sign": false,
                           "Verify": true,
                           "DeriveKey": false,
                           "NoRestrictions": false
                       }
                   },
                   "KeyCheckValue": "7CC9E2",
                   "KeyCheckValueAlgorithm": "CMAC",
                   "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/ivi5ksfsupln* euyt。您需要在下一步中执行该操作。

### 创建 PVK
<a name="use-cases-issuers.generalfunctions.pvv.setup.pvk"></a>

```
$ aws payment-cryptography create-key --exportable --key-attributes KeyAlgorithm=TDES_2KEY,KeyUsage=TR31_V2_VISA_PIN_VERIFICATION_KEY,KeyClass=SYMMETRIC_KEY,KeyModesOfUse='{Generate=true,Verify=true}'  --tags='[{"Key":"CARD_BIN","Value":"12345678"}]'
```

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

```
{
                  "Key": {
                      "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza",
                      "KeyAttributes": {
                          "KeyUsage": "TR31_V2_VISA_PIN_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": "51A200",
                      "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/ov6icy4r* yas4ryas4zcza。您需要在下一步中执行该操作。

## 生成一个随机密码，生成 PVV 并返回加密的 PIN 和 PVV
<a name="use-cases-issuers.generalfunctions.pvv.generate"></a>

**Example**  
在此示例中，我们将生成一个新的（随机）4 位数引脚，其中的输出将是加密的 `PIN block` (PinData. PinBlock) 和 a `PVV` (pinData。 VerificationValue)。密钥输入是 `PAN``Pin Verification Key`（也称为引脚生成密钥）、`Pin Encryption Key`和 [PIN 块](terminology.md#terms.pinblock)格式。  
 此命令要求密钥的类型为`TR31_V2_VISA_PIN_VERIFICATION_KEY`。  

```
$ aws payment-cryptography-data generate-pin-data --generation-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/37y2tsl45p5zjbh2 --encryption-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt --primary-account-number 171234567890123 --pin-block-format ISO_FORMAT_0 --generation-attributes VisaPin={PinVerificationKeyIndex=1}
```

```
{
            "GenerationKeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/37y2tsl45p5zjbh2",
            "GenerationKeyCheckValue": "7F2363",
            "EncryptionKeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt",
            "EncryptionKeyCheckValue": "7CC9E2",
            "EncryptedPinBlock": "AC17DC148BDA645E",
            "PinData": {
                "VerificationValue": "5507"
            }
        }
```

## 使用 PVV 方法验证加密的 PIN
<a name="use-cases-issuers.generalfunctions.pvv.verify"></a>

**Example**  
在此示例中，我们将验证给定 PAN 的 PIN。PIN 通常由持卡人或用户在交易期间提供以进行验证，并与存档的值进行比较（持卡人的输入以加密值形式由终端或其他上游提供商提供）。为了验证此输入，还将在运行时提供以下值：加密的 pin 码、用于加密输入 pin 的密钥（通常称为 [IWK](terminology.md#terms.iwk)）`PAN`以及要验证的值（a `PVV` 或`PIN offset`）。  
如果 P AWS ayment Cryptography 能够验证密码，则会返回 http/200。如果 pin 未经过验证，将返回 http/400。  

```
$ aws payment-cryptography-data verify-pin-data --verification-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/37y2tsl45p5zjbh2 --encryption-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt --primary-account-number 171234567890123 --pin-block-format ISO_FORMAT_0  --verification-attributes VisaPin="{PinVerificationKeyIndex=1,VerificationValue=5507}" --encrypted-pin-block AC17DC148BDA645E 
```

```
{
        "VerificationKeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/37y2tsl45p5zjbh2",
        "VerificationKeyCheckValue": "7F2363",
        "EncryptionKeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt",
        "EncryptionKeyCheckValue": "7CC9E2",
}
```

# 生成或验证给定卡片的 CVV
<a name="use-cases-issuers.generalfunctions.cvv"></a>

[CVV](terminology.md#terms.cvv) 或 CVV1 是传统上嵌入在卡片磁条中的值。它与 CVV2 （持卡人可见，也可用于在线购物）不同。

第一步是创建一个密钥。在本教程中，您将创建一个 [CVK](terminology.md#terms.cvk) 双长度 3DES (2KEY TDES) 密钥。

**注意**  
CVV CVV2 和 iCvV 都使用相似甚至相同的算法，但输入数据会有所不同。所有密钥都使用相同的密钥类型 TR31 \$1C0\$1CARD\$1VERIFICATION\$1KEY，但建议为每种目的使用不同的密钥。可以使用别名 and/or 标签来区分它们，如下例所示。

## 创建密钥
<a name="use-cases-issuers.generalfunctions.cvv.setup"></a>

```
$ 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":"KEY_PURPOSE","Value":"CVV"},{"Key":"CARD_BIN","Value":"12345678"}]'
```

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

```
{
            "Key": {
                "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/r52o3wbqxyf6qlqr",
                "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": "DE89F9",
                "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/r52o3wbqx* yf6qlqr。您需要在下一步中执行该操作。

## 生成 CVV
<a name="use-cases-issuers.generalfunctions.cvv.generate"></a>

**Example**  
在此示例中，我们将为给定的 PAN 生成一个 [CVV](terminology.md#terms.cvv)，其输入为`PAN`，服务代码（由 ISO/IEC 7813 定义）为 121，信用卡到期日期。  
有关所有可用参数，请参阅 API 参考指南中的 [CardVerificationValue1](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_CardVerificationValue1.html)。  

```
$ aws payment-cryptography-data generate-card-validation-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/r52o3wbqxyf6qlqr --primary-account-number=171234567890123 --generation-attributes CardVerificationValue1='{CardExpiryDate=1127,ServiceCode=121}'
```

```
                  {
                      "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/r52o3wbqxyf6qlqr",
                      "KeyCheckValue": "DE89F9",
                      "ValidationData": "801"
                  }
```

## 验证 CVV
<a name="use-cases-issuers.generalfunctions.cvv.verify"></a>

**Example**  
在此示例中，我们将使用输入 [CV](terminology.md#terms.cvv) K、服务代码 121 `PAN`、卡到期日期和交易期间提供的 CVV 来验证给定 PAN 的 CVV 以进行验证。  
有关所有可用参数，请参阅 API 参考指南中的 [CardVerificationValue1](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_CardVerificationValue1.html)。  
CVV 不是用户输入的值（比如 CVV2），但通常嵌入在磁条上。应考虑在提供时是否应始终进行验证。

```
$ aws payment-cryptography-data verify-card-validation-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/r52o3wbqxyf6qlqr --primary-account-number=171234567890123 --verification-attributes CardVerificationValue1='{CardExpiryDate=1127,ServiceCode=121} --validation-data 801
```

```
{
                    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/r52o3wbqxyf6qlqr",
                    "KeyCheckValue": "DE89F9",
                    "ValidationData": "801"
}
```

# CVV2 为特定卡片生成或验证
<a name="use-cases-issuers.generalfunctions.cvv2"></a>

[CVV2](terminology.md#terms.cvv2)是传统上在卡背面提供的价值，用于在线购物。对于虚拟卡，它也可能显示在应用程序或屏幕上。从密码学上讲，它与服务代码值相同， CVV1 但具有不同的服务代码值。

## 创建密钥
<a name="use-cases-issuers.generalfunctions.cvv2.setup"></a>

```
$ 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":"KEY_PURPOSE","Value":"CVV2"},{"Key":"CARD_BIN","Value":"12345678"}]'
```

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

```
{
               "Key": {
                   "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/7f7g4spf3xcklhzu",
                   "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": "AEA5CD",
                   "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/7f7g4spf3xcklhzu。您需要在下一步中执行该操作。

## 生成一个 CVV2
<a name="use-cases-issuers.generalfunctions.cvv2.generate"></a>

**Example**  
在此示例中，我们将[CVV2](terminology.md#terms.cvv2)为给定的 PAN 生成一个，其输入值为`PAN`和卡片到期日期。  
有关所有可用参数，请参阅 API 参考指南中的 [CardVerificationValue2](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_CardVerificationValue2.html)。  

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

```
                     {
                         "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/7f7g4spf3xcklhzu",
                         "KeyCheckValue": "AEA5CD",
                         "ValidationData": "321"
                     }
```

## 验证 CVV2
<a name="use-cases-issuers.generalfunctions.cvv2.verify"></a>

**Example**  
在此示例中，我们将使用输入的 CVK、卡到期日期`PAN`和交易期间提供的 CVV 来验证给定的 PAN 以进行验证。[CVV2](terminology.md#terms.cvv2)  
有关所有可用参数，请参阅 API 参考指南中的 [CardVerificationValue2](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_CardVerificationValue2.html)。  
CVV2 其他输入是用户输入的值。因此，这不一定是定期无法验证的问题的迹象。

```
$ aws payment-cryptography-data verify-card-validation-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/7f7g4spf3xcklhzu --primary-account-number=171234567890123 --verification-attributes CardVerificationValue2='{CardExpiryDate=1127} --validation-data 321
```

```
{
                       "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/7f7g4spf3xcklhzu",
                       "KeyCheckValue": "AEA5CD",
                       "ValidationData": "801"
   }
```

# 为特定卡生成或验证 iCvV
<a name="use-cases-issuers.generalfunctions.icvv"></a>

[iCvV](terminology.md#terms.icvv) 使用的算法与 CVV/ 相同，CVV2 但是 iCvV 嵌入在芯片卡中。它的服务代码是 999。

## 创建密钥
<a name="use-cases-issuers.generalfunctions.icvv.setup"></a>

```
$ 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":"KEY_PURPOSE","Value":"ICVV"},{"Key":"CARD_BIN","Value":"12345678"}]'
```

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

```
{
               "Key": {
                   "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/c7dsi763r6s7lfp3",
                   "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": "1201FB",
                   "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/c7dsi763r6* s7s7lfp3。您需要在下一步中执行该操作。

## 生成一个 iCvV
<a name="use-cases-issuers.generalfunctions.icvv.generate"></a>

**Example**  
在此示例中，我们将为给定的 PAN 生成一个 [ICvV](terminology.md#terms.icvv)，其输入为`PAN`，服务代码（由 ISO/IEC 7813 定义）为 999，卡到期日期。  
有关所有可用参数，请参阅 API 参考指南中的 [CardVerificationValue1](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_CardVerificationValue1.html)。  

```
$ aws payment-cryptography-data generate-card-validation-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/c7dsi763r6s7lfp3 --primary-account-number=171234567890123 --generation-attributes CardVerificationValue1='{CardExpiryDate=1127,ServiceCode=999}'
```

```
                     {
                         "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/c7dsi763r6s7lfp3",
                         "KeyCheckValue": "1201FB",
                         "ValidationData": "532"
                     }
```

## 验证 iCvV
<a name="use-cases-issuers.generalfunctions.icvv.verify"></a>

**Example**  
为了进行验证，输入的是CVK `PAN`、服务代码为999、卡到期日期以及交易期间提供的待验证的iCVV。  
有关所有可用参数，请参阅 API 参考指南中的 [CardVerificationValue1](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_CardVerificationValue1.html)。  
iCvV 不是用户输入的值（比如 CVV2），但通常嵌入在卡片上。 EMV/chip 应考虑在提供时是否应始终进行验证。

```
$ aws payment-cryptography-data verify-card-validation-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/c7dsi763r6s7lfp3 --primary-account-number=171234567890123 --verification-attributes CardVerificationValue1='{CardExpiryDate=1127,ServiceCode=999} --validation-data 532
```

```
{
                       "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/c7dsi763r6s7lfp3",
                       "KeyCheckValue": "1201FB",
                       "ValidationData": "532"
   }
```

# 验证 EMV ARQC 并生成 ARPC
<a name="use-cases-issuers.generalfunctions.arqc"></a>

[ARQC](terminology.md#terms.arqc)（授权请求密码）是由EMV（芯片）卡生成的密码，用于验证交易细节以及授权卡的使用。它包含来自卡、终端和交易本身的数据。

在后端进行验证时，会向 P AWS ayment Cryptography 提供相同的输入，在内部重新创建密码，并将其与交易中提供的价值进行比较。从这个意义上讲，它类似于MAC。[EMV 4.4 Book 2](https://www.emvco.com/specifications/?post_id=80377) 定义了此函数的三个方面——用于生成一次性交易密钥的密钥派生方法（称为通用会话密钥——CSK）、最小有效载荷和生成响应的方法 (ARPC)。

 个别信用卡方案可以指定要合并的其他交易字段或这些字段的显示顺序。还存在其他（通常不推荐使用的）特定于方案的派生方案，本文档的其他部分对此进行了介绍。

有关更多信息，请参阅 API 指南[VerifyCardValidationData](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_VerifyCardValidationData.html)中的。

## 创建密钥
<a name="use-cases-issuers.generalfunctions.arqc.setup"></a>

```
$ aws payment-cryptography create-key --exportable --key-attributes KeyAlgorithm=TDES_2KEY,KeyUsage=TR31_E0_EMV_MKEY_APP_CRYPTOGRAMS,KeyClass=SYMMETRIC_KEY,KeyModesOfUse='{DeriveKey=true}' --tags='[{"Key":"KEY_PURPOSE","Value":"CVN18"},{"Key":"CARD_BIN","Value":"12345678"}]'
```

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

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

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

## 生成 ARQC
<a name="use-cases-issuers.generalfunctions.arqc.generate"></a>

ARQC 完全由 EMV 卡生成。因此， AWS 支付密码学没有生成此类有效载荷的工具。出于测试目的，在线提供了许多库，这些库可以生成适当的有效载荷以及各种方案通常提供的已知值。

## 验证 ARQC
<a name="use-cases-issuers.generalfunctions.arqc.verify"></a>

**Example**  
如果 AWS 支付密码学能够验证 ARQC，则会返回 http/200。在验证 ARQC 后，可以选择提供 ARPC（响应）并将其包含在响应中。  

```
$ aws payment-cryptography-data verify-auth-request-cryptogram --auth-request-cryptogram 61EDCC708B4C97B4 --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/pw3s6nl62t5ushfk --major-key-derivation-mode EMV_OPTION_A --transaction-data 00000000170000000000000008400080008000084016051700000000093800000B1F2201030000000000000000000000000000000000000000000000000000008000000000000000 --session-key-derivation-attributes='{"EmvCommon":{"ApplicationTransactionCounter":"000B", "PanSequenceNumber":"01","PrimaryAccountNumber":"9137631040001422"}}' --auth-response-attributes='{"ArpcMethod2":{"CardStatusUpdate":"12345678"}}'
```

```
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/pw3s6nl62t5ushfk",
    "KeyCheckValue": "08D7B4",
    "AuthResponseValue":"2263AC85"
}
```

# 生成并验证 EMV MAC
<a name="use-cases-issuers.generalfunctions.emvmac"></a>

EMV MAC 是 MAC，使用 EMV 派生的密钥的输入，然后对生成的数据执行 ISO9797 -3（零售）MAC。EMV MAC 通常用于向 EMV 卡发送命令，例如解锁脚本。

**注意**  
 AWS 支付密码学无法验证脚本的内容。有关要包含的特定命令的详细信息，请查阅您的方案或卡片手册。

有关更多信息，请参阅 API 指南[MacAlgorithmEmv](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_MacAlgorithmEmv.html)中的。

**Topics**
+ [创建密钥](#use-cases-issuers.generalfunctions.emvmac.setup)
+ [生成 EMV MAC](#use-cases-issuers.generalfunctions.emvmac.generate)

## 创建密钥
<a name="use-cases-issuers.generalfunctions.emvmac.setup"></a>

```
$ aws payment-cryptography create-key --exportable --key-attributes KeyAlgorithm=TDES_2KEY,KeyUsage=TR31_E2_EMV_MKEY_INTEGRITY,KeyClass=SYMMETRIC_KEY,KeyModesOfUse='{DeriveKey=true}' --tags='[{"Key":"KEY_PURPOSE","Value":"CVN18"},{"Key":"CARD_BIN","Value":"12345678"}]'
```

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

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

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

## 生成 EMV MAC
<a name="use-cases-issuers.generalfunctions.emvmac.generate"></a>

典型的流程是，后端进程将生成 EMV 脚本（例如卡片解除封锁），使用此命令（派生特定于某张卡的一次性密钥）对其进行签名，然后返回 MAC。然后，命令\$1 MAC被发送到要应用的卡。向卡发送命令超出了 AWS 支付加密的范围。

**注意**  
 此命令适用于未发送加密数据（例如 PIN）时的命令。EMV Encrypt 可以与该命令结合使用，以便在调用此命令之前将加密的数据附加到发行者脚本中 

消息数据  
消息数据包括 APDU 标头和命令。虽然这可能因实现而异，但此示例是解除封锁 (84 24 00 00 08) 的 APDU 标头，其次是 ATC (0007)，然后是前一笔交易 (999E57 F47CACE) 的 ARQC。FD0该服务不验证此字段的内容。

会话密钥派生模式  
此字段定义会话密钥的生成方式。EMV\$1COMMON\$1SESSION\$1KEY 通常用于新的实现，而 EMV2000 \$1 AMEX \$1 MASTERCARD\$1SESSION\$1KEY \$1 也可以使用 VISA。

MajorKeyDerivationMode  
EMV 定义模式 A、B 或 C。模式 A 是最常见的， AWS 支付密码学目前支持模式 A 或模式 B。

PAN  
账号，通常在芯片字段 5A 或字 ISO8583 段 2 中可用，但也可以从卡系统中检索。

PSN  
卡片序列号。如果未使用，请输入 00。

SessionKeyDerivationValue  
这是每个会话的派生数据。根据推导方案，它可以是场 9F26 中的最后一个 ARQC (ApplicationCryptogram)，也可以是 9F36 中的最后一个 ATC。

Padding  
自动应用填充并使用 ISO/IEC 9797-1 填充方法 2。

**Example**  

```
$ aws payment-cryptography-data generate-mac --message-data 84240000080007999E57FD0F47CACE --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/pw3s6nl62t5ushfk --message-data 8424000008999E57FD0F47CACE0007 --generation-attributes EmvMac="{MajorKeyDerivationMode=EMV_OPTION_A,PanSequenceNumber='00',PrimaryAccountNumber='2235521304123282',SessionKeyDerivationMode=EMV_COMMON_SESSION_KEY,SessionKeyDerivationValue={ApplicationCryptogram='999E57FD0F47CACE'}}"
```

```
{
"KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/pw3s6nl62t5ushfk",
"KeyCheckValue": "08D7B4",
"Mac":"5652EEDF83EA0D84"
}
```

# 生成 EMV MAC 以更改 PIN
<a name="use-cases-issuers.generalfunctions.emvpinchange"></a>

EMV PIN 更改结合了两个操作：为发行者脚本生成 MAC 和加密新 PIN 以在 EMV 芯片卡上进行离线 PIN 更改。只有在芯片卡上存储密码的某些国家/地区才需要此命令（这在欧洲国家很常见）。这通常用于持卡人需要更改其 PIN，并且必须将新 PIN 与 MAC 一起安全地传输到信用卡以验证命令的真实性时。

**注意**  
 如果您只需要向卡发送命令而不需要更改 PIN，请考虑改用 [ARPC CSU](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_VerifyAuthRequestCryptogram.html) 或[生成 EMV MAC](use-cases-issuers.generalfunctions.emvmac.md) 命令。

有关更多信息，请参阅 API 指南[GenerateMacEmvPinChange](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GenerateMacEmvPinChange.html)中的。

## 生成 EMV MAC 和加密的 PIN 以更改 PIN
<a name="use-cases-issuers.generalfunctions.emvpinchange.generate"></a>

此操作需要两个密钥：一个用于生成 MAC 的 EMV 完整性密钥（KeyUsage: TR31 \$1E2\$1EMV\$1MKEY\$1INTEGRITY）和一个用于 PIN 加密的 EMV 机密密钥（: \$1E4\$1EMV\$1MKEY\$1MKEY\$1CENTRITY）。KeyUsage TR31典型的流程是，后端进程将生成 EMV PIN 更改脚本，其中包括颁发者脚本的 MAC 和加密的新 PIN。然后，命令和加密的 PIN 将发送到卡上，以更新离线 PIN。向卡发送命令超出了 AWS 支付加密的范围。

消息数据  
消息数据包括发行者脚本的 APDU 命令。该服务不验证此字段的内容。

新的加密 PIN 块  
新的加密 PIN 区块将发送到信用卡。必须使用 PIN 加密密钥将其作为加密值提供。

新的 PIN PEK 标识符  
用于在新 PIN 传递给此 API 之前对其进行加密的密钥。

安全消息完整性密钥  
用于生成 MAC 的 EMV 完整性密钥 (KeyUsage: TR31 \$1E2\$1EMV\$1MKEY\$1INTEGRITY)。

安全消息保密密钥  
用于 PIN 加密的 EMV 机密密钥 (KeyUsage: TR31 \$1E4\$1EMV\$1MKEY\$1MKEY\$1Converity)。

MajorKeyDerivationMode  
EMV 定义模式 A、B 或 C。模式 A 是最常见的， AWS 支付密码学目前支持模式 A 或模式 B。

Mode  
加密模式，通常是用于密码更改操作的 CBC。

PAN  
账号，通常在芯片字段 5A 或字 ISO8583 段 2 中可用，但也可以从卡系统中检索。

PanSequenceNumber  
卡片序列号。如果未使用，请输入 00。

ApplicationCryptogram  
这是每个会话的派生数据，通常是字段 9F26 中的最后一个 ARQC。

PinBlockLengthPosition  
指定 PIN 区块长度的编码位置。通常设置为 “无”。如果您不确定，请查看您的信用卡计划规格。

PinBlockPaddingType  
指定 PIN 块的填充类型。通常设置为 NO\$1PADDING。如果您不确定，请查看您的信用卡计划规格。

**Example**  

```
$ aws payment-cryptography-data generate-mac-emv-pin-change \
    --message-data 00A4040008A000000004101080D80500000001010A04000000000000 \
    --new-encrypted-pin-block 67FB27C75580EFE7 \
    --new-pin-pek-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt \
    --pin-block-format ISO_FORMAT_0 \
    --secure-messaging-confidentiality-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi \
    --secure-messaging-integrity-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/pw3s6nl62t5ushfk \
    --derivation-method-attributes 'EmvCommon={ApplicationCryptogram=1234567890123457,MajorKeyDerivationMode=EMV_OPTION_A,Mode=CBC,PanSequenceNumber=00,PinBlockLengthPosition=NONE,PinBlockPaddingType=NO_PADDING,PrimaryAccountNumber=171234567890123}'
```

```
{
    "SecureMessagingIntegrityKeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/pw3s6nl62t5ushfk",
    "SecureMessagingIntegrityKeyCheckValue": "08D7B4",
    "SecureMessagingConfidentialityKeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
    "SecureMessagingConfidentialityKeyCheckValue": "C1EB8F",
    "Mac": "5652EEDF83EA0D84",
    "EncryptedPinBlock": "F1A2B3C4D5E6F7A8"
}
```