

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

# 資料操作
<a name="data-operations"></a>

在您建立 AWS 付款密碼編譯金鑰之後，它可用於執行密碼編譯操作。不同的操作會執行不同類型的活動，範圍包括加密、雜湊，以及特定網域的演算法，例如產生 CVV2。

如果沒有相符的解密金鑰 （對稱金鑰或私有金鑰，取決於加密類型），則無法解密加密的資料。如果沒有對稱金鑰或公有金鑰，就無法驗證雜湊和網域特定的演算法。

如需特定操作的有效金鑰類型資訊，請參閱[密碼編譯操作的有效金鑰](crypto-ops-validkeys-ops.md)

**注意**  
我們建議在非生產環境中使用測試資料。在非生產環境中使用生產金鑰和資料 (PAN、BDK ID 等） 可能會影響您的合規範圍，例如 PCI DSS 和 PCI P2PE。

**Topics**
+ [加密、解密和重新加密資料](crypto-ops.encryptdecrypt.md)
+ [產生和驗證卡片資料](crypto-ops-carddata.md)
+ [產生、翻譯和驗證 PIN 資料](data-operations.pindata.md)
+ [驗證身分驗證請求 (ARQC) 密碼編譯](data-operations.verifyauthrequestcryptogram.md)
+ [產生和驗證 MAC](crypto-ops-mac.md)
+ [密碼編譯操作的有效金鑰](crypto-ops-validkeys-ops.md)

# 加密、解密和重新加密資料
<a name="crypto-ops.encryptdecrypt"></a>

加密和解密方法可用於使用各種對稱和非對稱技術加密或解密資料，包括 TDES、AES 和 RSA。這些方法也支援使用 [DUKPT](terminology.md#terms.dukpt) 和 [EMV](terminology.md#terms.emv) 技術衍生的金鑰。對於您想要在新金鑰下保護資料而不公開基礎資料的使用案例，也可以使用 ReEncrypt 命令。

**注意**  
 使用加密/解密函數時，所有輸入都假設為 hexBinary - 例如，值 1 將輸入為 31 （十六進位），小寫 t 表示為 74 （十六進位）。所有輸出也都使用 hexBinary。

如需所有可用選項的詳細資訊，請參閱適用於[加密](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_EncryptData.html)、[解密](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_DecryptData.html)和[重新加密](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ReEncryptData.html)的 API 指南。

**Topics**
+ [加密資料](encrypt-data.md)
+ [解密資料](decrypt-data.md)

# 加密資料
<a name="encrypt-data"></a>

 `Encrypt Data` API 用於使用對稱和非對稱資料加密金鑰以及 [DUKPT](terminology.md#terms.dukpt) 和 [EMV](terminology.md#terms.emv) 衍生的金鑰來加密資料。支援各種演算法和變化，包括 `TDES`、 `RSA`和 `AES`。

主要輸入是用來加密資料的加密金鑰、要加密的 hexBinary 格式純文字資料，以及加密屬性，例如初始化向量和 TDES 等區塊加密的模式。對於 ，純文字資料需要 8 個位元組的倍數`TDES`，對於 ，需要 16 個位元組`AES`，對於 ，需要 金鑰的長度`RSA`。如果輸入資料不符合這些要求，則應填充對稱金鑰輸入 (TDES、AES、DUKPT、EMV)。下表顯示每種類型金鑰的純文字長度上限，以及您在 `EncryptionAttributes` RSA 金鑰中定義的填補類型。


| 填補類型 | RSA\$12048 | RSA\$13072 | RSA\$14096 | 
| --- | --- | --- | --- | 
| OAEP SHA1 | 428 | 684 | 940 | 
| OAEP SHA256 | 380 | 636 | 892 | 
| OAEP SHA512 | 252 | 508 | 764 | 
| PKCS1 | 488 | 744 | 1000 | 
| None | 488 | 744 | 1000 | 

主要輸出包含 hexBinary 格式的加密資料做為加密文字，以及加密金鑰的檢查總和值。如需所有可用選項的詳細資訊，請參閱 [加密](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_EncryptData.html) API 指南。

**Topics**
+ [使用 AES 對稱金鑰加密資料](#w2aac15c16c11c13)
+ [使用 DUKPT 金鑰加密資料](#w2aac15c16c11c15)
+ [使用 EMV 衍生對稱金鑰加密資料](#w2aac15c16c11c17)
+ [使用 RSA 金鑰加密資料](#crypto-ops.encrypt-rsa)

## 使用 AES 對稱金鑰加密資料
<a name="w2aac15c16c11c13"></a>

**注意**  
 所有範例都假設相關的金鑰已存在。您可以使用 [CreateKey](create-keys.md) 操作建立金鑰，或使用 [ImportKey](keys-import.md) 操作匯入金鑰。

**Example**  
 在此範例中，我們將使用使用 [CreateKey](create-keys.md) 操作建立或使用 [ImportKey](keys-import.md) 操作匯入的對稱金鑰來加密純文字資料。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `Encrypt`，且 KeyUsage 設定為 `TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY`。如需更多選項，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  

```
$ aws payment-cryptography-data encrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --plain-text 31323334313233343132333431323334 --encryption-attributes 'Symmetric={Mode=CBC}'
```

```
         
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
    "KeyCheckValue": "71D7AE",
    "CipherText": "33612AB9D6929C3A828EB6030082B2BD"
}
```

## 使用 DUKPT 金鑰加密資料
<a name="w2aac15c16c11c15"></a>

**Example**  
 在此範例中，我們將使用 [DUKPT](terminology.md#terms.dukpt) 金鑰加密純文字資料。 AWS 付款密碼編譯支援 `TDES`和 `AES` DUKPT 金鑰。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `DeriveKey`，且 KeyUsage 設定為 `TR31_B0_BASE_DERIVATION_KEY`。如需更多選項，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  

```
$ aws payment-cryptography-data encrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --plain-text 31323334313233343132333431323334 --encryption-attributes 'Dukpt={KeySerialNumber=FFFF9876543210E00001}'
```

```
         
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
    "KeyCheckValue": "71D7AE",
    "CipherText": "33612AB9D6929C3A828EB6030082B2BD"
}
```

## 使用 EMV 衍生對稱金鑰加密資料
<a name="w2aac15c16c11c17"></a>

**Example**  
 在此範例中，我們將使用已建立的 EMV 衍生對稱金鑰來加密純文字資料。您可以使用這類命令將資料傳送至 EMV 卡。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `Derive`，且 KeyUsage 設定為 `TR31_E1_EMV_MKEY_CONFIDENTIALITY`或 `TR31_E6_EMV_MKEY_OTHER`。如需詳細資訊，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  

```
$ aws payment-cryptography-data encrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --plain-text 33612AB9D6929C3A828EB6030082B2BD --encryption-attributes 'Emv={MajorKeyDerivationMode=EMV_OPTION_A,PanSequenceNumber=27,PrimaryAccountNumber=1000000000000432,SessionDerivationData=02BB000000000000, InitializationVector=1500000000000999,Mode=CBC}'
```

```
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
    "KeyCheckValue": "71D7AE",
    "CipherText": "33612AB9D6929C3A828EB6030082B2BD"
}
```

## 使用 RSA 金鑰加密資料
<a name="crypto-ops.encrypt-rsa"></a>

**Example**  
 在此範例中，我們將使用已使用 [ImportKey](keys-import.md) 操作匯入的 [RSA 公有金鑰](terminology.md#terms.publickey)來加密純文字資料。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `Encrypt`，且 KeyUsage 設定為 `TR31_D1_ASYMMETRIC_KEY_FOR_DATA_ENCRYPTION`。如需更多選項，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  
 對於目前不支援的 PKCS \$17 或其他填補機制，請在呼叫服務之前套用，並透過省略填補指標 * 'Asymmetric=\$1\$1'* 來選取不填補   

```
$ aws payment-cryptography-data encrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/thfezpmsalcfwmsg --plain-text 31323334313233343132333431323334 --encryption-attributes 'Asymmetric={PaddingType=OAEP_SHA256}'
```

```
     
{
 "CipherText": "12DF6A2F64CC566D124900D68E8AFEAA794CA819876E258564D525001D00AC93047A83FB13 \ 
 E73F06329A100704FA484A15A49F06A7A2E55A241D276491AA91F6D2D8590C60CDE57A642BC64A897F4832A3930 \ 
 0FAEC7981102CA0F7370BFBF757F271EF0BB2516007AB111060A9633D1736A9158042D30C5AE11F8C5473EC70F067 \ 
 72590DEA1638E2B41FAE6FB1662258596072B13F8E2F62F5D9FAF92C12BB70F42F2ECDCF56AADF0E311D4118FE3591 \ 
 FB672998CCE9D00FFFE05D2CD154E3120C5443C8CF9131C7A6A6C05F5723B8F5C07A4003A5A6173E1B425E2B5E42AD \ 
 7A2966734309387C9938B029AFB20828ACFC6D00CD1539234A4A8D9B94CDD4F23A",
 "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/5dza7xqd6soanjtb",
 "KeyCheckValue": "FF9DE9CE"
}
```

# 解密資料
<a name="decrypt-data"></a>

 `Decrypt Data` API 用於使用對稱和非對稱資料加密金鑰以及 [DUKPT](terminology.md#terms.dukpt) 和 [EMV](terminology.md#terms.emv) 衍生的金鑰來解密資料。支援各種演算法和變化，包括 `TDES`、 `RSA`和 `AES`。

 主要輸入是用來解密資料的解密金鑰、要解密的 hexBinary 格式加密文字資料，以及初始化向量、做為區塊加密的模式等解密屬性。主要輸出包含 hexBinary 格式的純文字解密資料，以及解密金鑰的檢查總和值。如需所有可用選項的詳細資訊，請參閱 [解密](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_DecryptData.html) API 指南。

**Topics**
+ [使用 AES 對稱金鑰解密資料](#w2aac15c16c13b9)
+ [使用 DUKPT 金鑰解密資料](#w2aac15c16c13c11)
+ [使用 EMV 衍生對稱金鑰解密資料](#w2aac15c16c13c13)
+ [使用 RSA 金鑰解密資料](#crypto-ops.decrypt-rsa)

## 使用 AES 對稱金鑰解密資料
<a name="w2aac15c16c13b9"></a>

**Example**  
 在此範例中，我們將使用對稱金鑰解密加密文字資料。此範例顯示 `AES`金鑰，但也支援 `TDES_3KEY` `TDES_2KEY`和 。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `Decrypt`，且 KeyUsage 設定為 `TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY`。如需更多選項，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  

```
$ aws payment-cryptography-data decrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --cipher-text 33612AB9D6929C3A828EB6030082B2BD --decryption-attributes 'Symmetric={Mode=CBC}'
```

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

## 使用 DUKPT 金鑰解密資料
<a name="w2aac15c16c13c11"></a>

**注意**  
 將 decrypt-data 與 DUKPT for P2PE 交易搭配使用時，可能會將信用卡 PAN 和其他持卡人資料傳回至您的應用程式，這些資料在決定其 PCI DSS 範圍時需要考慮。

**Example**  
 在此範例中，我們將使用使用 [CreateKey](create-keys.md) 操作建立或使用 [ImportKey](keys-import.md) 操作匯入的 [DUKPT](terminology.md#terms.dukpt) 金鑰來解密加密文字資料。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `DeriveKey`，且 KeyUsage 設定為 `TR31_B0_BASE_DERIVATION_KEY`。如需更多選項，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。當您使用 時`DUKPT`，對於`TDES`演算法，加密文字資料長度必須是 16 個位元組的倍數。對於`AES`演算法，加密文字資料長度必須是 32 個位元組的倍數。  

```
$ aws payment-cryptography-data decrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --cipher-text 33612AB9D6929C3A828EB6030082B2BD --decryption-attributes 'Dukpt={KeySerialNumber=FFFF9876543210E00001}'
```

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

## 使用 EMV 衍生對稱金鑰解密資料
<a name="w2aac15c16c13c13"></a>

**Example**  
 在此範例中，我們將使用使用 [CreateKey](create-keys.md) 操作建立或使用 [ImportKey](keys-import.md) 操作匯入的 EMV 衍生對稱金鑰來解密加密文字資料。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `Derive`，且 KeyUsage 設定為 `TR31_E1_EMV_MKEY_CONFIDENTIALITY`或 `TR31_E6_EMV_MKEY_OTHER`。如需詳細資訊，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  

```
$ aws payment-cryptography-data decrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --cipher-text 33612AB9D6929C3A828EB6030082B2BD --decryption-attributes 'Emv={MajorKeyDerivationMode=EMV_OPTION_A,PanSequenceNumber=27,PrimaryAccountNumber=1000000000000432,SessionDerivationData=02BB000000000000, InitializationVector=1500000000000999,Mode=CBC}'
```

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

## 使用 RSA 金鑰解密資料
<a name="crypto-ops.decrypt-rsa"></a>

**Example**  
 在此範例中，我們將使用使用 [CreateKey](create-keys.md) 操作建立的 [RSA 金鑰對](terminology.md#terms.privatekey)來解密加密文字資料。對於此操作，金鑰必須已將 KeyModesOfUse 設定為啟用`Decrypt`，且 KeyUsage 設定為 `TR31_D1_ASYMMETRIC_KEY_FOR_DATA_ENCRYPTION`。如需更多選項，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  
 對於目前不支援的 PKCS \$17 或其他填補機制，請省略填補指標 * 'Asymmetric=\$1\$1'*，並在呼叫服務之後移除填補，以選取不填補。  

```
$ aws payment-cryptography-data decrypt-data \ 
        --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/5dza7xqd6soanjtb --cipher-text 8F4C1CAFE7A5DEF9A40BEDE7F2A264635C... \ 
        --decryption-attributes 'Asymmetric={PaddingType=OAEP_SHA256}'
```

```
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/5dza7xqd6soanjtb",
    "KeyCheckValue": "FF9DE9CE",
    "PlainText": "31323334313233343132333431323334"
}
```

# 產生和驗證卡片資料
<a name="crypto-ops-carddata"></a>

產生並驗證卡片資料包含衍生自卡片資料的資料，例如 CVV、CVV2、CVC 和 DCVV。

**Topics**
+ [產生卡片資料](generate-card-data.md)
+ [驗證卡片資料](verify-card-data.md)

# 產生卡片資料
<a name="generate-card-data"></a>

 `Generate Card Data` API 用於使用 CVV、CVV2 或動態 CVV2 等演算法產生卡資料。若要查看可用於此命令的金鑰，請參閱[密碼編譯操作的有效金鑰](crypto-ops-validkeys-ops.md)一節。

許多密碼編譯值，例如 CVV、CVV2、iCVV、CAV V7，都使用相同的密碼編譯演算法，但會改變輸入值。例如[CardVerificationValue1](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_CardVerificationValue1.html) 具有 ServiceCode、卡號和過期日期的輸入。雖然 [CardVerificationValue2](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_CardVerificationValue2.html) 僅有兩個輸入，這是因為對於 CVV2/CVC2，ServiceCode 固定為 000。同樣地，對於 iCVV，ServiceCode 固定為 999。有些演算法可能會重新利用現有的欄位，例如 CAVV V8，在這種情況下，您將需要參閱供應商手冊以取得正確的輸入值。

**注意**  
 必須以相同的格式輸入過期日期 （例如 MMYY 與 YYMM)，才能產生正確的結果。

# 產生 CVV2
<a name="generate-cvv2"></a>

**Example**  
在此範例中，我們將為輸入 `PAN`和卡片過期日期的指定 PAN 產生 CVV2。這會假設您[產生](create-keys.md#cvvkey-example)了卡片驗證金鑰。  

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

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

# 產生 iCVV
<a name="generate-iCVV"></a>

**Example**  
在此範例中，我們將為輸入為 、`PAN`服務代碼為 999 且卡片過期日期的指定 PAN 產生 [iCVV](terminology.md#terms.icvv)。這會假設您[產生](create-keys.md#cvvkey-example)了卡片驗證金鑰。  
如需所有可用的參數，請參閱 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/tqv5yij6wtxx64pi --primary-account-number=171234567890123 --generation-attributes CardVerificationValue1='{CardExpiryDate=1127,ServiceCode=999}'
```

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

# 驗證卡片資料
<a name="verify-card-data"></a>

`Verify Card Data` 用於驗證已使用依賴加密主體的付款演算法建立的資料，例如 `DISCOVER_DYNAMIC_CARD_VERIFICATION_CODE`。

輸入值通常作為傳入交易的一部分提供給發行者或支援平台合作夥伴。若要驗證 ARQC 密碼編譯 （用於 EMV 晶片卡），請參閱[驗證 ARQC](data-operations.verifyauthrequestcryptogram.md)。

如需詳細資訊，請參閱 API 指南中的 [VerifyCardValidationData](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_VerifyCardValidationData.html)。

如果該值已經過驗證，則 api 將傳回 http/200。如果未驗證該值，則會傳回 http/400。

# 驗證 CVV2
<a name="verify-cvv2"></a>

**Example**  
在此範例中，我們將驗證指定 PAN 的 CVV/CVV2。CVV2 通常由持卡人或使用者在交易期間提供以供驗證。為了驗證其輸入，將在執行時間提供下列值 - [用於驗證的金鑰 (CVK)](create-keys.md#cvvkey-example)、`PAN`、卡片過期日期和輸入的 CVV2。卡片過期格式必須符合用於產生初始值的格式。  
如需所有可用的參數，請參閱 API 參考指南中的 [CardVerificationValue2](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_CardVerificationValue2.html)。  

```
$ aws payment-cryptography-data verify-card-validation-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --primary-account-number=171234567890123 --verification-attributes CardVerificationValue2={CardExpiryDate=0123} --validation-data 801
```

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

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

**Example**  
在此範例中，我們將驗證指定 PAN 的 [iCVV](terminology.md#terms.icvv)，其中包含[用於驗證的金鑰 (CVK)](create-keys.md#cvvkey-example)、`PAN`、999 的服務碼、卡片過期日期，以及交易提供的 iCVV 以進行驗證。  
iCVV 不是使用者輸入的值 （例如 CVV2)，而是內嵌在 EMV 卡上。應考量是否應一律在提供時驗證。  
如需所有可用的參數，請參閱 API 參考指南中的 [CardVerificationValue1](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_CardVerificationValue1.html)。  

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

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

# 產生、翻譯和驗證 PIN 資料
<a name="data-operations.pindata"></a>

PIN 資料函數可讓您產生隨機接腳、接腳驗證值 (PVV)，並根據 PVV 或接腳位移驗證傳入加密接腳。

接腳轉換可讓您將接腳從一個工作金鑰轉換為另一個，而無需以 PCI PIN 要求 1 指定的純文字公開接腳。

**注意**  
 由於 PIN 產生和驗證通常是發行者函數，而 PIN 轉譯是典型的取得者函數，我們建議您考慮最低權限的存取，並根據您的系統使用案例適當設定政策。

**Topics**
+ [翻譯 PIN 資料](translate-pin-data.md)
+ [產生 PIN 資料](generate-pin-data.md)
+ [驗證 PIN 資料](verify-pin-data.md)

# 翻譯 PIN 資料
<a name="translate-pin-data"></a>

轉譯 PIN 資料函數用於將加密的 PIN 資料從一組金鑰轉譯到另一組金鑰，而不需要加密的資料離開 HSM。它用於 P2PE 加密，其中工作金鑰應該變更，但處理系統不需要或不允許解密資料。主要輸入是加密的資料、用來加密資料的加密金鑰、用來產生輸入值的參數。另一組輸入是請求的輸出參數，例如用於加密輸出的金鑰，以及用於建立該輸出的參數。主要輸出是新加密的資料集，以及用來產生資料集的參數。

**注意**  
為了 PCI 合規，傳入和傳出的 PrimaryAccountNumber 值必須相符。不允許將 PIN 從一個 PAN 轉譯為另一個 PAN。

**Topics**
+ [從 PEK 到 DUKPT 的 PIN](#crypto-ops-pindata.pektodukpt)
+ [從 PEK 到 PEK 的 PIN](#crypto-ops-pindata.pektopek)

## 從 PEK 到 DUKPT 的 PIN
<a name="crypto-ops-pindata.pektodukpt"></a>

**Example**  
在此範例中，我們將使用 [DUKPT](terminology.md#terms.dukpt) 將 PIN 從 AES ISO 4 PIN 區塊轉換為使用 ISO 0 PIN 區塊的 PEK TDES 加密。這在付款終端機加密 ISO 4 中的 PIN 時很常見，如果下一個連線尚未支援 AES，則可能會將其轉譯回 TDES 以進行下游處理。  

```
$ aws payment-cryptography-data translate-pin-data --encrypted-pin-block "AC17DC148BDA645E" --outgoing-translation-attributes=IsoFormat0='{PrimaryAccountNumber=171234567890123}' --outgoing-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt  --incoming-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/4pmyquwjs3yj4vwe --incoming-translation-attributes IsoFormat4="{PrimaryAccountNumber=171234567890123}" --incoming-dukpt-attributes KeySerialNumber="FFFF9876543210E00008"  
```

```
    {
            "PinBlock": "1F4209C670E49F83E75CC72E81B787D9",
            "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt",
            "KeyCheckValue": "7CC9E2"
        }
```

## 從 PEK 到 PEK 的 PIN
<a name="crypto-ops-pindata.pektopek"></a>

**Example**  
在此範例中，我們將在一個 PEK (PIN 加密金鑰） 下加密的 PIN 轉換為另一個 PEK。這通常用於在使用不同加密金鑰的不同系統或合作夥伴之間路由交易時，同時透過在整個過程中保持 PIN 加密來保持 PCI PIN 合規。這兩個金鑰在此範例中都使用 TDES 3KEY 加密，但有多種選項可用，包括 AES ISO-4 到 TDES ISO-0、DUKPT 到 PEK 或 AS2805 到 PEK。  

```
$ aws payment-cryptography-data translate-pin-data --encrypted-pin-block "AC17DC148BDA645E" \
    --incoming-translation-attributes IsoFormat0='{PrimaryAccountNumber=171234567890123}' \
    --incoming-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt \
    --outgoing-translation-attributes IsoFormat0='{PrimaryAccountNumber=171234567890123}' \
    --outgoing-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/alsuwfxug3pgy6xh
```

```
{
    "PinBlock": "E8F2A6C4D1B93E7F",
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/alsuwfxug3pgy6xh",
    "KeyCheckValue": "9A325B"
}
```
輸出 PIN 區塊現在會在第二個 PEK 下加密，並可安全地傳輸到保留對應金鑰的下游系統。

# 產生 PIN 資料
<a name="generate-pin-data"></a>

產生 PIN 資料函數用於產生與 PIN 相關的值，例如 [PVV](terminology.md#terms.pvv) 和 PIN 區塊位移，用於驗證使用者在交易或授權時間的 PIN 項目。此 API 也可以使用各種演算法產生新的隨機接腳。

# 產生隨機接腳並比對 Visa PVV
<a name="generate-pvv-random"></a>

**Example**  
在此範例中，我們將產生新的 （隨機） 接腳，其中輸出將是加密的 `PIN block`(PinData.PinBlock) 和 `PVV`(pinData.Offset). 金鑰輸入為 `PAN`、`Pin Verification Key`、 `Pin Encryption Key`和 `PIN block format`。  
 此命令要求金鑰類型為 `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"
            }
        }
```

# 為已知接腳產生 Visa PVV
<a name="generate-pvv-givenpin"></a>

**Example**  
在此範例中，我們將為指定的 （加密） 接腳產生 PVV。加密的 PIN 可在上游接收，例如從付款終端機，或使用[使用者可選取的 PIN 流程](https://github.com/aws-samples/samples-for-payment-cryptography-service/tree/main/python_sdk_example/ecdh_flows)從持卡人接收。金鑰輸入為 `PAN`、`Pin Verification Key`、`Pin Encryption Key`、 `Encrypted Pin Block`和 `PIN block format`。  

```
$ 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 VisaPinVerificationValue={PinVerificationKeyIndex=1,EncryptedPinBlock=AA584CED31790F37}
```

```
{
            "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"
            }
        }
```

# 產生接腳的 IBM3624 接腳位移
<a name="generate-ibm3624"></a>

 IBM 3624 PIN 位移有時也稱為 IBM 方法。此方法會使用驗證資料 （通常是 PAN) 和 PIN 金鑰 (PVK) 產生自然/中繼 PIN。自然接腳實際上是衍生的值，而且對於發行者來說，決定性非常有效率，因為不需要將接腳資料存放在持卡人層級。最明顯的缺點是，此機制不會考慮持卡人可選或隨機接腳。為了允許這些類型的接腳，已將偏移演算法新增至結構描述。偏移代表使用者選取 （或隨機） 接腳與自然金鑰之間的差異。位移值由卡片發行者或卡片處理器存放。在交易時間， AWS 付款密碼編譯服務會在內部重新計算自然接腳，並套用偏移來尋找接腳。然後，它會將此值與交易授權提供的值進行比較。

IBM3624 有幾個選項：
+ `Ibm3624NaturalPin` 將輸出自然接腳和加密接腳區塊
+ `Ibm3624PinFromOffset` 會在有位移的情況下產生加密的 PIN 區塊
+ `Ibm3624RandomPin` 會產生隨機接腳，然後產生相符的位移和加密接腳區塊。
+  `Ibm3624PinOffset` 會在使用者選取的接腳後產生接腳位移。

在 AWS 付款密碼編譯內部，會執行下列步驟：
+ 將提供的平移填補為 16 個字元。如果提供 <16，請使用提供的填補字元在右側進行填補。
+ 使用 PIN 產生金鑰加密驗證資料。
+ 使用小數表對加密的資料進行小數。這會將十六進位數字映射到執行個體「A」的小數位，可能映射到 9，而 1 可能映射到 1。
+ 從輸出的十六進位表示法取得前 4 位數。這是自然接腳。
+ 如果產生使用者選取或隨機接腳，模數會使用客戶接腳減去自然接腳。結果是接腳位移。

**Topics**
+ [範例：產生接腳的 IBM3624 接腳位移](#generate-ibm3624-random-example)

## 範例：產生接腳的 IBM3624 接腳位移
<a name="generate-ibm3624-random-example"></a>

在此範例中，我們將產生新的 （隨機） 接腳，其中輸出將是加密的 `PIN block`(PinData.PinBlock) 和`IBM3624`位移值 (pinData.Offset). 輸入為 `PAN`、驗證資料 （通常是平移）、填補字元`Pin Verification Key`、、 `Pin Encryption Key`和 `PIN block format`。

 此命令要求 PIN 產生金鑰為 類型，`TR31_V1_IBM3624_PIN_VERIFICATION_KEY`而加密金鑰為 類型 `TR31_P0_PIN_ENCRYPTION_KEY` 

**Example**  
下列範例顯示產生隨機接腳，然後使用 Ibm3624RandomPin 輸出加密接腳區塊和 IBM3624 偏移值 Ibm3624RandomPin   

```
$ 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 Ibm3624RandomPin="{DecimalizationTable=9876543210654321,PinValidationDataPadCharacter=D,PinValidationData=171234567890123}"
```

```
{
              "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": {
                  "PinOffset": "5507"
              }
          }
```

# 驗證 PIN 資料
<a name="verify-pin-data"></a>

驗證 PIN 資料函數用於驗證 PIN 是否正確。這通常涉及比較先前存放的接腳值與持卡人在 POI 中輸入的接腳值。這些函數會比較兩個值，而不會公開任一來源的基礎值。

## 使用 PVV 方法驗證加密的 PIN
<a name="verify-pin-data.pvv-example"></a>

**Example**  
在此範例中，我們將驗證指定 PAN 的 PIN。PIN 通常由持卡人或使用者在驗證的交易時間提供，並與檔案上的值進行比較 （持卡人的輸入會以終端機或其他上游提供者的加密值提供）。為了驗證此輸入，也會在執行時間提供下列值：用來加密輸入接腳的金鑰 （通常為 `IWK`)，`PAN`以及要驗證的值 ( `PVV`或 `PIN offset`)。  
如果 AWS 付款密碼編譯能夠驗證 PIN，則會傳回 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",
    
        }
```

## 使用 PVV 方法驗證加密的 PIN 碼 - 錯誤 PIN 碼錯誤
<a name="verify-pin-data.pvv-example.badpin"></a>

**Example**  
在此範例中，我們將嘗試驗證指定 PAN 的 PIN，但由於 PIN 不正確而失敗。  
使用 SDKs時，這會顯示為 \$1"Message"："Pin 區塊驗證失敗。"，"Reason"："INVALID\$1PIN"\$1  

```
$ 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=9999}" --encrypted-pin-block AC17DC148BDA645E 
```

```
        An error occurred (VerificationFailedException) when calling the VerifyPinData operation: Pin block verification failed. 
```

## 使用 PVV 方法驗證加密的 PIN 碼 - 錯誤輸入錯誤
<a name="verify-pin-data.pvv-example.badkey"></a>

**Example**  
在此範例中，我們將嘗試驗證指定 PAN 的 PIN，但由於輸入錯誤而失敗，而傳入的資料不是有效的 PIN。常見原因是：使用 1/錯誤金鑰 2/輸入參數，例如平移或接腳區塊格式不正確 3/接腳區塊損毀。  

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

```
        An error occurred (ValidationException) when calling the VerifyPinData operation: Pin block provided is invalid. Please check your input to ensure all field values are correct.
```

# 針對先前存放的 IBM3624 接腳位移驗證 PIN
<a name="verify-pin-data.ibm3624-example"></a>

在此範例中，我們將針對卡片發行者/處理器存放在檔案中的 PIN 偏移，驗證持卡人提供的 PIN。輸入類似於 [產生接腳的 IBM3624 接腳位移](generate-ibm3624.md)，其中包含付款終端機 （或其他上游提供者，例如卡片網路） 提供的額外加密 PIN 碼。如果接腳相符，api 將傳回 http 200。其中輸出將是加密 `PIN block`(PinData.PinBlock) 和`IBM3624`位移值 (pinData.Offset).

 此命令要求 PIN 產生金鑰為 類型，`TR31_V1_IBM3624_PIN_VERIFICATION_KEY`而加密金鑰為 類型 `TR31_P0_PIN_ENCRYPTION_KEY` 

**Example**  

```
$ 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 Ibm3624RandomPin="{DecimalizationTable=9876543210654321,PinValidationDataPadCharacter=D,PinValidationData=171234567890123}"
```

```
{
"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": {
  "PinOffset": "5507"
}
}
```

# 驗證身分驗證請求 (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"
}
```

# 產生和驗證 MAC
<a name="crypto-ops-mac"></a>

訊息驗證碼 (MAC) 通常用於驗證訊息的完整性 （無論是否經過修改）。密碼編譯雜湊，例如 HMAC （以雜湊為基礎的訊息驗證碼）、CBC-MAC 和 CMAC （以密碼為基礎的訊息驗證碼），透過使用密碼編譯提供額外的 MAC 寄件者保證。HMAC 是以雜湊函數為基礎，而 CMAC 是以區塊加密為基礎。此服務也支援 ISO9797 演算法 1 和 3，這是 CBC-MACs的類型。

此服務的所有 MAC 演算法會結合密碼編譯雜湊函數和共用私密金鑰。它們會接收訊息和私密金鑰，例如金鑰中的金鑰材料，並傳回唯一的標籤或 mac。如果訊息的某個字元變更，或私密金鑰變更，則產生的標籤會完全不同。透過要求私密金鑰，密碼編譯 MACs也提供真實性；如果沒有私密金鑰，就無法產生相同的 mac。密碼編譯 MACs 有時稱為對稱簽章，因為它們的運作方式與數位簽章類似，但使用單一金鑰進行簽署和驗證。

AWS 付款密碼編譯支援數種類型的 MACs：

**ISO9797 ALGORITHM 1**  
由 `KeyUsage` ISO9797\$1ALGORITHM1 表示。如果欄位不是區塊大小的倍數 (TDES 為 8 個位元組/16 個十六進位字元，AES 為 16 個位元組/32 個字元， AWS 付款加密會自動套用 ISO9797 填補方法 1。如果需要其他填補方法，您可以在呼叫服務之前套用它們。

**ISO9797 ALGORITHM 3 （零售 MAC)**  
由 `KeyUsage` ISO9797\$1ALGORITHM3 表示。適用與演算法 1 相同的填補規則

**ISO9797 演算法 5 (CMAC)**  
由 `KeyUsage` TR31\$1M6\$1ISO\$19797\$15\$1CMAC\$1KEY 表示

**HMAC**  
由 `KeyUsage` TR31\$1M7\$1HMAC\$1KEY 表示，包括 HMAC\$1SHA224、HMAC\$1SHA256、HMAC\$1SHA384 和 HMAC\$1SHA512

**AS2805.4.1 MAC**  
由 `KeyUsage` TR31\$1M0\$1ISO\$116609\$1MAC\$1KEY 表示。如需 AS2805 的詳細資訊，請參閱 [AS2805](advanced.regional.as2805.md)

**DUKPT MAC**  
DUKPT MAC 通常用於確認往返付款終端機的訊息來源和承載。它使用 DUKPT 衍生技術衍生金鑰，然後執行 MAC。與此選項搭配使用的金鑰會以 TR31\$1B0\$1BASE\$1DERIVATION\$1KEY `KeyUsage`的 表示。

**EMV MAC**  
EMV MAC 通常在 EMV 文件中稱為完整性金鑰。它使用 EMV 衍生技術衍生金鑰，然後在內部使用 ISO9797\$1ALGORITHM3。它通常用於將發行者指令碼傳送到晶片卡以進行重新程式設計。與此選項搭配使用的金鑰會以 TR31\$1E2\$1EMV\$1MKEY\$1INTEGRITY `KeyUsage`的 表示。如果您同時傳送指令碼和更新離線接腳，請參閱 [GenerateMacEmvPinChange](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GenerateMacEmvPinChange) 以執行這兩個操作。

**Topics**
+ [產生 MAC](generate-mac.md)
+ [驗證 MAC](verify-mac.md)

# 產生 MAC
<a name="generate-mac"></a>

產生 MAC API 用於驗證卡片相關資料，例如從卡片磁條追蹤資料，方法是使用已知的密碼編譯金鑰產生 MAC （訊息驗證碼），以便在傳送和接收方之間進行資料驗證。用於產生 MAC 的資料包括訊息資料、秘密 MAC 加密金鑰和 MAC 演算法，以產生唯一的 MAC 值進行傳輸。MAC 的接收方將使用相同的 MAC 訊息資料、MAC 加密金鑰和演算法來重現另一個 MAC 值，以進行比較和資料身分驗證。即使訊息的一個字元變更或用於驗證的 MAC 金鑰不同，產生的 MAC 值也不同。API 支援此操作的 ISO 9797-1 演算法 1 和 ISO 9797-1 演算法 3 MAC （使用靜態 MAC 金鑰和衍生的 DUKPT 金鑰）、HMAC 和 EMV MAC 加密金鑰。

的輸入值`message-data`必須是 hexBinary 資料。

如需此 API 所有選項的詳細資訊，請參閱 [GenerateMac](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GenerateMac.html) 和 [VerifyMac](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_VerifyMac.html)。

選用參數 mac-length 可讓您截斷輸出值 （不過這也可以在程式碼中完成）。長度為 8 是指 8 個位元組或 16 個十六進位字元。

您可以透過呼叫 [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) 來匯入。

**注意**  
CMAC 和 HMAC 演算法不需要填補。所有其他要求將資料填入演算法的區塊大小，這是 TDES 的 8 個位元組 (16 個十六進位字元） 和 AES 的 16 個位元組 (32 個十六進位字元） 的倍數。

**Topics**
+ [產生 HMAC](#generate-mac-hmac)
+ [使用 ISO 9797-1 演算法 3 產生 MAC](#generate-mac-iso9797-alg3)
+ [使用 CMAC 產生 MAC](#generate-mac-cmac)
+ [使用 DUKPT CMAC 產生 MAC](#generate-mac-dukpt-cmac)

## 產生 HMAC
<a name="generate-mac-hmac"></a>

在此範例中，我們將使用 HMAC 演算法`HMAC_SHA256`和 HMAC 加密金鑰，為卡片資料身分驗證產生 HMAC （以雜湊為基礎的訊息驗證碼）。金鑰必須將 KeyUsage 設定為 `TR31_M7_HMAC_KEY`，並將 KeyModesOfUse 設定為 `Generate`。雜湊長度 （例如 256) 是在建立金鑰時定義，且無法修改。

選用的 mac-length 參數會修剪輸出 MAC，但也可以在服務之外執行。此值以位元組為單位，因此值 16 預期十六進位字串長度為 32。

**Example**  

```
$ aws payment-cryptography-data generate-mac \ 
    --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/qnobl5lghrzunce6 \ 
    --message-data "3b313038383439303031303733393431353d32343038323236303030373030303f33" \
    --generation-attributes Algorithm=HMAC
```

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

## 使用 ISO 9797-1 演算法 3 產生 MAC
<a name="generate-mac-iso9797-alg3"></a>

在此範例中，我們將使用 ISO 9797-1 演算法 3 （零售 MAC) 來產生 MAC 以進行卡片資料驗證。金鑰必須將 KeyUsage 設定為 `TR31_M3_ISO_9797_3_MAC_KEY`，並將 KeyModesOfUse 設定為 `Generate`。

**Example**  

```
$ aws payment-cryptography-data generate-mac \ 
    --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h \ 
    --message-data "3b313038383439303031303733393431353d32343038323236303030373030303f33" \ 
    --generation-attributes="Algorithm=ISO9797_ALGORITHM3"
```

```
           
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h",
    "KeyCheckValue": "2976EA",
    "Mac": "A8F7A73DAF87B6D0"
}
```

## 使用 CMAC 產生 MAC
<a name="generate-mac-cmac"></a>

當金鑰為 AES 時，CMAC 最常使用，但也支援 TDES。在此範例中，我們將使用 CMAC (ISO 9797-1 演算法 5) 產生 MAC，以使用 AES 金鑰進行卡片資料驗證。金鑰必須將 KeyUsage 設定為 `TR31_M6_ISO_9797_5_CMAC_KEY`，並將 KeyModesOfUse 設定為 `Generate`。

**Example**  

```
$ aws payment-cryptography-data generate-mac \ 
    --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi \ 
    --message-data "3b313038383439303031303733393431353d32343038323236303030373030303f33" \ 
    --generation-attributes Algorithm="CMAC"
```

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

## 使用 DUKPT CMAC 產生 MAC
<a name="generate-mac-dukpt-cmac"></a>

在此範例中，我們將使用 DUKPT （每個交易衍生的唯一金鑰） 與 CMAC 產生 MAC，以進行卡片資料驗證。金鑰必須將 KeyUsage 設定為 `TR31_B0_BASE_DERIVATION_KEY`，且 KeyModesOfUse `DeriveKey`設定為 true。DUKPT 金鑰會使用基本衍生金鑰 (BDK) 和金鑰序號 (KSN)，為每個交易衍生唯一的金鑰。



**Example**  

```
$ aws payment-cryptography-data generate-mac --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/qnobl5lghrzunce6 --message-data "3b313038383439303031303733393431353d32343038323236303030373030303f33" --generation-attributes="DukptCmac={KeySerialNumber="932A6E954ABB32DD00000001",Direction=BIDIRECTIONAL}"
```

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

# 驗證 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"
}
```

# 密碼編譯操作的有效金鑰
<a name="crypto-ops-validkeys-ops"></a>

某些金鑰只能用於某些操作。此外，某些操作可能會限制金鑰使用的金鑰模式。如需允許的組合，請參閱下表。

**注意**  
雖然允許，某些組合可能會產生無法使用的情況，例如產生 CVV 代碼`(generate)`，但無法驗證它們`(verify)`。

**Topics**
+ [GenerateCardData](#w2aac15c31b9)
+ [VerifyCardData](#w2aac15c31c11)
+ [GeneratePinData （適用於 VISA/ABA 配置）](#w2aac15c31c15)
+ [GeneratePinData （適用於 `IBM3624`)](#w2aac15c31c17)
+ [VerifyPinData （適用於 VISA/ABA 配置）](#w2aac15c31c21)
+ [VerifyPinData （適用於 `IBM3624`)](#w2aac15c31c23)
+ [解密資料](#w2aac15c31c27)
+ [加密資料](#w2aac15c31c33)
+ [翻譯 PIN 資料](#w2aac15c31c39)
+ [產生/驗證 MAC](#crypto-ops-validkeys.generatemac)
+ [GenerateMacEmvPinChange](#crypto-ops-validkeys.generatemacemvpinchange)
+ [VerifyAuthRequestCryptogram](#w2aac15c31c51)
+ [匯入/匯出金鑰](#crypto-ops-validkeys.importexport)
+ [未使用的金鑰類型](#w2aac15c31c57)

## GenerateCardData
<a name="w2aac15c31b9"></a>


| API 端點 | 密碼編譯操作或演算法 | 允許的金鑰用量 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | --- | 
| GenerateCardData |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | TR31\$1C0\$1CARD\$1VERIFICATION\$1KEY |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | \$1 Generate = true \$1，\$1 Generate = true， Verify = true \$1 | 
| GenerateCardData |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | TR31\$1C0\$1CARD\$1VERIFICATION\$1KEY |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | \$1 Generate = true \$1，\$1 Generate = true， Verify = true \$1 | 
| GenerateCardData |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | TR31\$1E6\$1EMV\$1MKEY\$1OTHER |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | \$1 DeriveKey = true \$1 | 
| GenerateCardData |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | TR31\$1E4\$1EMV\$1MKEY\$1DYNAMIC\$1NUMBERS |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | \$1 DeriveKey = true \$1 | 
| GenerateCardData |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | TR31\$1E6\$1EMV\$1MKEY\$1OTHER |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | \$1 DeriveKey = true \$1 | 

## VerifyCardData
<a name="w2aac15c31c11"></a>


| 密碼編譯操作或演算法 | 允許的金鑰用量 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | TR31\$1C0\$1CARD\$1VERIFICATION\$1KEY |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | \$1 Generate = true \$1，\$1 Generate = true， Verify = true \$1 | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | TR31\$1C0\$1CARD\$1VERIFICATION\$1KEY |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | \$1 Generate = true \$1，\$1 Generate = true， Verify = true \$1 | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | TR31\$1E6\$1EMV\$1MKEY\$1OTHER |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | \$1 DeriveKey = true \$1 | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | TR31\$1E4\$1EMV\$1MKEY\$1DYNAMIC\$1NUMBERS |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | \$1 DeriveKey = true \$1 | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | TR31\$1E6\$1EMV\$1MKEY\$1OTHER |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | \$1 DeriveKey = true \$1 | 

## GeneratePinData （適用於 VISA/ABA 配置）
<a name="w2aac15c31c15"></a>

`VISA_PIN or VISA_PIN_VERIFICATION_VALUE`


| 金鑰類型 | 允許的金鑰用量 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | 
|  PIN 加密金鑰  |  TR31\$1P0\$1PIN\$1ENCRYPTION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  PIN 產生金鑰  |  TR31\$1V2\$1VISA\$1PIN\$1VERIFICATION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 

## GeneratePinData （適用於 `IBM3624`)
<a name="w2aac15c31c17"></a>

`IBM3624_PIN_OFFSET,IBM3624_NATURAL_PIN,IBM3624_RANDOM_PIN, IBM3624_PIN_FROM_OFFSET)`


| 金鑰類型 | 允許的金鑰用量 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | 
|  PIN 加密金鑰  |  TR31\$1P0\$1PIN\$1ENCRYPTION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  對於 IBM3624\$1NATURAL\$1PIN、IBM3624\$1RANDOM\$1PIN、IBM3624\$1PIN\$1FROM\$1OFFSET [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) 對於 IBM3624\$1PIN\$1OFFSET [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | 
|  PIN 產生金鑰  |  TR31\$1V1\$1IBM3624\$1PIN\$1VERIFICATION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 

## VerifyPinData （適用於 VISA/ABA 配置）
<a name="w2aac15c31c21"></a>

`VISA_PIN`


| 金鑰類型 | 允許的金鑰用量 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | 
|  PIN 加密金鑰  |  TR31\$1P0\$1PIN\$1ENCRYPTION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  PIN 產生金鑰  |  TR31\$1V2\$1VISA\$1PIN\$1VERIFICATION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 

## VerifyPinData （適用於 `IBM3624`)
<a name="w2aac15c31c23"></a>

`IBM3624_PIN_OFFSET,IBM3624_NATURAL_PIN,IBM3624_RANDOM_PIN, IBM3624_PIN_FROM_OFFSET)`


| 金鑰類型 | 允許的金鑰用量 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | 
|  PIN 加密金鑰  |  TR31\$1P0\$1PIN\$1ENCRYPTION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  對於 IBM3624\$1NATURAL\$1PIN、IBM3624\$1RANDOM\$1PIN、IBM3624\$1PIN\$1FROM\$1OFFSET [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | 
|  PIN 驗證金鑰  |  TR31\$1V1\$1IBM3624\$1PIN\$1VERIFICATION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 

## 解密資料
<a name="w2aac15c31c27"></a>


| 金鑰類型 | 允許的金鑰用量 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | 
|  DUKPT  |  TR31\$1B0\$1BASE\$1DERIVATION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  EMV  |  TR31\$1E1\$1EMV\$1MKEY\$1CONFIDENTIALITY TR31\$1E6\$1EMV\$1MKEY\$1OTHER  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | 
|  RSA  |  TR31\$1D1\$1ASYMMETRIC\$1KEY\$1FOR\$1DATA\$1ENCRYPTION  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  對稱金鑰  |  TR31\$1D0\$1SYMMETRIC\$1DATA\$1ENCRYPTION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 

## 加密資料
<a name="w2aac15c31c33"></a>


| 金鑰類型 | 允許的金鑰用量 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | 
|  DUKPT  |  TR31\$1B0\$1BASE\$1DERIVATION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  EMV  |  TR31\$1E1\$1EMV\$1MKEY\$1CONFIDENTIALITY TR31\$1E6\$1EMV\$1MKEY\$1OTHER  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  | 
|  RSA  |  TR31\$1D1\$1ASYMMETRIC\$1KEY\$1FOR\$1DATA\$1ENCRYPTION  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  對稱金鑰  |  TR31\$1D0\$1SYMMETRIC\$1DATA\$1ENCRYPTION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 

## 翻譯 PIN 資料
<a name="w2aac15c31c39"></a>


| Direction | 金鑰類型 | 允許的金鑰用量 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | --- | 
|  傳入資料來源  |  DUKPT  |  TR31\$1B0\$1BASE\$1DERIVATION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  傳入資料來源  |  非DUKPT (PEK、AWK、IWK 等）  |  TR31\$1P0\$1PIN\$1ENCRYPTION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  傳出資料目標  |  DUKPT  |  TR31\$1B0\$1BASE\$1DERIVATION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  傳出資料目標  |  非DUKPT (PEK、IWK、AWK 等）  |  TR31\$1P0\$1PIN\$1ENCRYPTION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 

## 產生/驗證 MAC
<a name="crypto-ops-validkeys.generatemac"></a>

 MAC 金鑰用於建立訊息/資料主體的密碼編譯雜湊。不建議建立金鑰模式有限的金鑰，因為您無法執行相符的操作。不過，如果另一個系統打算執行操作對的另一半，您可以匯入/匯出只有一個操作的金鑰。


| 允許的金鑰用量 | 允許的金鑰用量 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | 
|  MAC 金鑰   |  TR31\$1M1\$1ISO\$19797\$11\$1MAC\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  MAC 金鑰 （零售 MAC)   |  TR31\$1M1\$1ISO\$19797\$13\$1MAC\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  MAC 金鑰 (CMAC)   |  TR31\$1M6\$1ISO\$19797\$15\$1CMAC\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  MAC 金鑰 (HMAC)   |  TR31\$1M7\$1HMAC\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  MAC 金鑰 (AS2805)   |  TR31\$1M0\$1ISO\$116609\$1MAC\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 

## GenerateMacEmvPinChange
<a name="crypto-ops-validkeys.generatemacemvpinchange"></a>

 GenerateMacEmvPinChange 結合了 EMV 離線 PIN 變更操作的 MAC 產生和 PIN 加密。此操作需要兩種不同的金鑰類型：MAC 產生的完整性金鑰和 PIN 加密的機密性金鑰。


| 金鑰類型 | 允許的金鑰用量 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | 
|  安全訊息完整性金鑰   |  TR31\$1E2\$1EMV\$1MKEY\$1INTEGRITY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  安全傳訊機密性金鑰   |  TR31\$1E1\$1EMV\$1MKEY\$1CONFIDENTIALITY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  目前的 PIN PEK (PIN 加密金鑰）   |  TR31\$1P0\$1PIN\$1ENCRYPTION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  新的 PIN PEK (PIN 加密金鑰）   |  TR31\$1P0\$1PIN\$1ENCRYPTION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  ARQC 金鑰   僅適用於 Visa 和 Amex 衍生方案。   |  TR31\$1E0\$1EMV\$1MKEY\$1APP\$1CRYPTOGRAMS  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 

## VerifyAuthRequestCryptogram
<a name="w2aac15c31c51"></a>


| 允許的金鑰用量 | EMV 選項 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  TR31\$1E0\$1EMV\$1MKEY\$1APP\$1CRYPTOGRAMS  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 

## 匯入/匯出金鑰
<a name="crypto-ops-validkeys.importexport"></a>


| 操作類型 | 允許的金鑰用量 | 允許的金鑰演算法 | 允許的金鑰使用模式組合 | 
| --- | --- | --- | --- | 
|  TR-31 包裝金鑰  |  TR31\$1K1\$1KEY\$1BLOCK\$1PROTECTION\$1KEY TR31\$1K0\$1KEY\$1ENCRYPTION\$1KEY  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  匯入信任的 CA  |  TR31\$1S0\$1ASYMMETRIC\$1KEY\$1FOR\$1DIGITAL\$1SIGNATURE  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  匯入用於非對稱加密的公有金鑰憑證  |  TR31\$1D1\$1ASYMMETRIC\$1KEY\$1FOR\$1DATA\$1ENCRYPTION  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 
|  用於金鑰協議演算法的金鑰，例如 ECDH  |  TR31\$1K3\$1ASYMMETRIC\$1KEY\$1FOR\$1KEY\$1AGREEMENT  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html) | 

## 未使用的金鑰類型
<a name="w2aac15c31c57"></a>

 AWS 付款密碼編譯目前未使用下列金鑰類型
+  TR31\$1P1\$1PIN\$1GENERATION\$1KEY 