

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

# 驗證身分驗證請求 (ARQC) 密碼編譯
<a name="data-operations.verifyauthrequestcryptogram"></a>

 驗證身分驗證請求密碼編譯 API 用於驗證 [ARQC](terminology.md#terms.arqc)。ARQC 的產生超出 AWS 付款密碼編譯的範圍，通常在交易授權期間在 EMV Chip 卡 （或行動錢包等數位卡） 上執行。ARQC 對每個交易都是唯一的，旨在以密碼編譯方式顯示卡片的有效性，並確保交易資料完全符合目前的 （預期） 交易。

AWS 付款密碼編譯提供各種選項，用於驗證 ARQC 和產生選用的 ARPC 值，包括 [EMV 4.4 Book 2 中定義的值，](https://www.emvco.com/specifications/?post_id=80377)以及 Visa 和 Mastercard 使用的其他方案。如需所有可用選項的完整清單，請參閱 [API 指南](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_VerifyCardValidationData.html)中的 VerifyCardValidationData 一節。

ARQC 密碼編譯通常需要以下輸入 （雖然這可能因實作而有所不同）：
+ [PAN](terminology.md#terms.pan) - 在 PrimaryAccountNumber 欄位中指定
+ [PAN 序號 (PSN)](terminology.md#terms.psn) - 在 PanSequenceNumber 欄位中指定
+ 金鑰衍生方法，例如通用工作階段金鑰 (CSK) - 在 SessionKeyDerivationAttributes 中指定
+ 主金鑰衍生模式 （例如 EMV 選項 A) - 在 MajorKeyDerivationMode 中指定
+ 交易資料 - 各種交易、終端機和卡片資料的字串，例如金額和日期 - 在 TransactionData 欄位中指定
+ [發行者主金鑰](terminology.md#terms.imk) - 用於衍生加密法 (AC) 金鑰的主金鑰，用於保護個別交易，並在 KeyIdentifier 欄位中指定

**Topics**
+ [建置交易資料](#w2aac15c25c13)
+ [交易資料填補](#w2aac15c25c15)
+ [範例](#w2aac15c25c17)

## 建置交易資料
<a name="w2aac15c25c13"></a>

交易資料欄位的確切內容 （和順序） 會因實作和網路方案而有所不同，但最低建議欄位 （和串連序列） 是在 [EMV 4.4 Book 2 Section 8.1.1 - Data Selection](https://www.emvco.com/specifications/?post_id=80377) 中定義。如果前三個欄位是金額 (17.00)、其他金額 (0.00) 和購買國家/地區，則會導致交易資料開始，如下所示：
+ 000000001700 - 金額 - 12 個位置隱含兩位數小數位數
+ 000000000000 - 其他金額 - 12 個位置隱含兩位數小數位數
+ 0124 - 四位數國碼 
+  輸出 （部分） 交易資料 - 0000000017000000000000000124 

## 交易資料填補
<a name="w2aac15c25c15"></a>

交易資料應在傳送至服務之前填入。大多數方案使用 ISO 9797 方法 2 填補，其中十六進位字串附加 hex 80 後接 00，直到 欄位是加密區塊大小的倍數；TDES 為 8 位元組或 16 個字元，AES 為 16 位元組或 32 個字元。替代方案 （方法 1) 並不常見，但僅使用 00 做為填補字元。

### ISO 9797 方法 1 填補
<a name="w2aac15c25c15b5"></a>

 未填入：00000000170000000000000008400080008000084016051700000000093800000B03011203 (74 個字元或 37 個位元組） 

 填充：00000000170000000000000008400080008000084016051700000000093800000B03011203**0000000** (80 個字元或 40 個位元組） 

### ISO 9797 方法 2 填補
<a name="w2aac15c25c15b7"></a>

 未填補：00000000170000000000000008400080008000084016051700000000093800000B1F220103000000 (80 個字元或 40 個位元組） 

 填充：00000000170000000000000008400080008000084016051700000000093800000B1F220103000000**8000000000000000** (88 個字元或 44 個位元組） 

## 範例
<a name="w2aac15c25c17"></a>

### Visa CVN10
<a name="w2aac15c25c17b3"></a>

**Example**  
在此範例中，我們將驗證使用 Visa CVN10 產生的 ARQC。  
如果 AWS 付款密碼編譯能夠驗證 ARQC，則會傳回 http/200。如果未驗證 ARCQ (Authorization Request Cryptogram)，則會傳回 http/400 回應。  

```
$ aws payment-cryptography-data verify-auth-request-cryptogram --auth-request-cryptogram D791093C8A921769 \
--key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/pw3s6nl62t5ushfk \
--major-key-derivation-mode EMV_OPTION_A \ 
--transaction-data 00000000170000000000000008400080008000084016051700000000093800000B03011203000000 \
--session-key-derivation-attributes='{"Visa":{"PanSequenceNumber":"01" \ 
,"PrimaryAccountNumber":"9137631040001422"}}'
```

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

### Visa CVN18 和 Visa CVN22
<a name="w2aac15c25c17b5"></a>

**Example**  
在此範例中，我們將驗證使用 Visa CVN18 或 CVN22 產生的 ARQC。CVN18 和 CVN22 之間的密碼編譯操作相同，但交易資料中包含的資料有所不同。與 CVN10 相比，即使使用相同的輸入，也會產生完全不同的密碼編譯。  
如果 AWS 付款密碼編譯能夠驗證 ARQC，則會傳回 http/200。如果未驗證 ARCQ，則會傳回 http/400。  

```
$ 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 00000000170000000000000008400080008000084016051700000000093800000B1F22010300000000000 \
00000000000000000000000000000000000000000008000000000000000
--session-key-derivation-attributes='{"EmvCommon":{"ApplicationTransactionCounter":"000B", \
"PanSequenceNumber":"01","PrimaryAccountNumber":"9137631040001422"}}'
```

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