

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

# 验证 MAC
<a name="verify-mac"></a>

Verify MAC API 用于验证与卡片相关的数据身份验证的 MAC（消息身份验证代码）。它必须使用生成 MAC 期间使用的相同加密密钥来重新生成用于身份验证的 MAC 值。MAC 加密密钥既可以通过 Payment Crypto AWS graphy 通过调用创建，[CreateKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html)也可以通过调用[ImportKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html)来导入。该 API 支持用于此操作的 DUKPT MAC、HMAC 和 EMV MAC 加密密钥。

如果该值已通过验证，则响应参数`MacDataVerificationSuccessful` 将返回 `Http/200`，否则将为 `Http/400`，消息表示 `Mac verification failed`。

**Topics**
+ [验证 HMAC](#verify-mac-hmac)
+ [使用 DUKPT CMAC 验证 MAC](#verify-mac-dukpt-cmac)

## 验证 HMAC
<a name="verify-mac-hmac"></a>

在此示例中，我们将使用 HMAC 算法 `HMAC_SHA256` 和 HMAC 加密密钥来验证用于卡数据身份验证的 HMAC（基于哈希的消息身份验证代码）。密钥必须 KeyUsage 设置为 true `TR31_M7_HMAC_KEY` 并 KeyModesOfUse `Verify`设置为 true。

**Example**  

```
$ aws payment-cryptography-data verify-mac \ 
     --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/qnobl5lghrzunce6 \ 
     --message-data "3b343038383439303031303733393431353d32343038323236303030373030303f33" \ 
     --mac ED87F26E961C6D0DDB78DA5038AA2BDDEA0DCE03E5B5E96BDDD494F4A7AA470C \ 
     --verification-attributes Algorithm=HMAC_SHA256
```

```
       
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/qnobl5lghrzunce6",
    "KeyCheckValue": "2976E7"
}
```

## 使用 DUKPT CMAC 验证 MAC
<a name="verify-mac-dukpt-cmac"></a>

在此示例中，我们将使用 DUKPT（每笔交易派生的唯一密钥）和 CMAC 来验证 MAC 以进行卡数据身份验证。密钥必须 KeyUsage 设置为 true `TR31_B0_BASE_DERIVATION_KEY` 并 KeyModesOfUse `DeriveKey`设置为 true。DUKPT 密钥使用基本派生密钥 (BDK) 和密钥序列号 (KSN) 为每笔交易派生一个唯一的密钥。发送方和接收方之间的值 DukptKeyVariant 必须匹配。通常在终端到后端之间使用 REQUEST，从后端到终端使用 VERIFY，当双向使用单个密钥时，则使用双向。

**Example**  

```
$ aws payment-cryptography-data verify-mac \ 
     --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi \ 
     --message-data "3b343038383439303031303733393431353d32343038323236303030373030303f33" \ 
     --mac D8E804EE74BF1D909A2C01C0BDE8EF34 \ 
     --verification-attributes DukptCmac='{"KeySerialNumber":"932A6E954ABB32DD00000001","DukptKeyVariant":"BIDIRECTIONAL"}'
```

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