

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 驗證 MAC
<a name="verify-mac"></a>

確認 MAC API 用於驗證 MAC （訊息驗證碼） 以進行卡片相關資料身分驗證。它必須使用與產生 MAC 期間相同的加密金鑰，以重新產生 MAC 值進行身分驗證。您可以透過呼叫 [CreateKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html) 來建立 MAC AWS 加密金鑰，或呼叫 [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 設定為 `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 設定為 `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"
}
```