

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

# 產生隨機接腳和相關聯的 PVV，然後驗證值
<a name="use-cases-issuers.generalfunctions.pvv"></a>

**Topics**
+ [建立 key(s)](#use-cases-issuers.generalfunctions.pvv.setup)
+ [產生隨機 PIN 碼、產生 PVV 並傳回加密的 PIN 碼和 PVV](#use-cases-issuers.generalfunctions.pvv.generate)
+ [使用 PVV 方法驗證加密的 PIN](#use-cases-issuers.generalfunctions.pvv.verify)

## 建立 key(s)
<a name="use-cases-issuers.generalfunctions.pvv.setup"></a>

為了產生隨機接腳和 [PVV](terminology.md#terms.pvv)，您需要兩個金鑰：用於產生 PVV 的[接腳驗證金鑰 (PVK)](terminology.md#terms.pvk)，以及用於加密接腳的[接腳加密金鑰](terminology.md#terms.pek)。接腳本身會在服務內安全地隨機產生，且與任一金鑰的密碼編譯無關。

PGK 必須是以 PVV 演算法本身為基礎的演算法 TDES\$12KEY 金鑰。PEK 可以是 TDES\$12KEY、TDES\$13KEY 或 AES\$1128。在這種情況下，由於 PEK 旨在供系統內部使用，因此 AES\$1128 是不錯的選擇。如果 PEK 用於與其他系統 （例如，卡網路、收單機構、ATMs) 交換，或作為遷移的一部分進行移動，則基於相容性原因，TDES\$12KEY 可能是更適當的選擇。

### 建立 PEK
<a name="use-cases-issuers.generalfunctions.pvv.setup.pek"></a>

```
$ aws payment-cryptography create-key \
               --exportable 
               --key-attributes KeyAlgorithm=AES_128,KeyUsage=TR31_P0_PIN_ENCRYPTION_KEY,\
                   KeyClass=SYMMETRIC_KEY,\
                   KeyModesOfUse='{Encrypt=true,Decrypt=true,Wrap=true,Unwrap=true}' --tags='[{"Key":"CARD_BIN","Value":"12345678"}]'
```

回應會回傳請求參數，包括後續呼叫的 ARN 以及金鑰檢查值 (KCV)。

```
{
               "Key": {
                   "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt",
                   "KeyAttributes": {
                       "KeyUsage": "TR31_P0_PIN_ENCRYPTION_KEY",
                       "KeyClass": "SYMMETRIC_KEY",
                       "KeyAlgorithm": "AES_128",
                       "KeyModesOfUse": {
                           "Encrypt": false,
                           "Decrypt": false,
                           "Wrap": false,
                           "Unwrap": false,
                           "Generate": true,
                           "Sign": false,
                           "Verify": true,
                           "DeriveKey": false,
                           "NoRestrictions": false
                       }
                   },
                   "KeyCheckValue": "7CC9E2",
                   "KeyCheckValueAlgorithm": "CMAC",
                   "Enabled": true,
                   "Exportable": true,
                   "KeyState": "CREATE_COMPLETE",
                   "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
                   "CreateTimestamp": "2023-06-05T06:41:46.648000-07:00",
                   "UsageStartTimestamp": "2023-06-05T06:41:46.626000-07:00"
               }
           }
```

請記下代表金鑰`KeyArn`的 ，例如 *arn：aws：payment-cryptography：us-east-2：111122223333：key/ivi5ksfsuplneuyt*。在下一個步驟中，您需要用到。

### 建立 PVK
<a name="use-cases-issuers.generalfunctions.pvv.setup.pvk"></a>

```
$ aws payment-cryptography create-key --exportable --key-attributes KeyAlgorithm=TDES_2KEY,KeyUsage=TR31_V2_VISA_PIN_VERIFICATION_KEY,KeyClass=SYMMETRIC_KEY,KeyModesOfUse='{Generate=true,Verify=true}'  --tags='[{"Key":"CARD_BIN","Value":"12345678"}]'
```

回應會回傳請求參數，包括後續呼叫的 ARN 以及金鑰檢查值 (KCV)。

```
{
                  "Key": {
                      "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza",
                      "KeyAttributes": {
                          "KeyUsage": "TR31_V2_VISA_PIN_VERIFICATION_KEY",
                          "KeyClass": "SYMMETRIC_KEY",
                          "KeyAlgorithm": "TDES_2KEY",
                          "KeyModesOfUse": {
                              "Encrypt": false,
                              "Decrypt": false,
                              "Wrap": false,
                              "Unwrap": false,
                              "Generate": true,
                              "Sign": false,
                              "Verify": true,
                              "DeriveKey": false,
                              "NoRestrictions": false
                          }
                      },
                      "KeyCheckValue": "51A200",
                      "KeyCheckValueAlgorithm": "ANSI_X9_24",
                      "Enabled": true,
                      "Exportable": true,
                      "KeyState": "CREATE_COMPLETE",
                      "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
                      "CreateTimestamp": "2023-06-05T06:41:46.648000-07:00",
                      "UsageStartTimestamp": "2023-06-05T06:41:46.626000-07:00"
                  }
              }
```

請記下代表金鑰`KeyArn`的 ，例如 *arn：aws：payment-cryptography：us-east-2：111122223333：key/ov6icy4ryas4zcza*。在下一個步驟中，您需要用到。

## 產生隨機 PIN 碼、產生 PVV 並傳回加密的 PIN 碼和 PVV
<a name="use-cases-issuers.generalfunctions.pvv.generate"></a>

**Example**  
在此範例中，我們將產生新的 （隨機） 4 位數接腳，其中輸出將是加密的 `PIN block`(PinData.PinBlock) 和 `PVV`(pinData.VerificationValue). 金鑰輸入為 `PAN`、 `Pin Verification Key`（也稱為 PIN 產生金鑰）、 `Pin Encryption Key`和 [PIN 區塊](terminology.md#terms.pinblock)格式。  
 此命令要求金鑰類型為 `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"
            }
        }
```

## 使用 PVV 方法驗證加密的 PIN
<a name="use-cases-issuers.generalfunctions.pvv.verify"></a>

**Example**  
在此範例中，我們將驗證指定 PAN 的 PIN。PIN 通常由持卡人或使用者在驗證的交易時間提供，並與檔案上的值進行比較 （持卡人的輸入會以終端機或其他上游提供者的加密值提供）。為了驗證此輸入，也會在執行時間提供下列值 - 加密的接腳、用來加密輸入接腳的金鑰 （通常稱為 [IWK](terminology.md#terms.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",
}
```