

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

# 生成并验证 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"
}
```