

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Hasilkan pin acak dan PVV terkait lalu verifikasi nilainya
<a name="use-cases-issuers.generalfunctions.pvv"></a>

**Topics**
+ [Buat kunci](#use-cases-issuers.generalfunctions.pvv.setup)
+ [Hasilkan pin acak, hasilkan PVV dan kembalikan PIN dan PVV terenkripsi](#use-cases-issuers.generalfunctions.pvv.generate)
+ [Validasi PIN terenkripsi menggunakan metode PVV](#use-cases-issuers.generalfunctions.pvv.verify)

## Buat kunci
<a name="use-cases-issuers.generalfunctions.pvv.setup"></a>

Untuk menghasilkan pin acak dan [ PVV](terminology.md#terms.pvv), Anda memerlukan dua kunci, Kunci Verifikasi [ Pin (PVK) ](terminology.md#terms.pvk) untuk menghasilkan PVV dan Kunci Enkripsi [ Pin ](terminology.md#terms.pek) untuk mengenkripsi pin. Pin itu sendiri dibuat secara acak dengan aman di dalam layanan dan tidak terkait dengan kunci mana pun secara kriptografis. 

PGK harus menjadi kunci algoritma TDES\_2KEY berdasarkan algoritma PVV itu sendiri. PEK dapat berupa TDES\_2KEY, TDES\_3KEY atau AES\_128. Dalam hal ini, karena PEK dimaksudkan untuk penggunaan internal dalam sistem Anda, AES\_128 akan menjadi pilihan yang baik. Jika PEK digunakan untuk pertukaran dengan sistem lain (misalnya jaringan kartu, pengakuis, ATM) atau dipindahkan sebagai bagian dari migrasi, TDES\_2KEY mungkin merupakan pilihan yang lebih tepat untuk alasan kompatibilitas. 

### Buat 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"}]'
```

Respons menggemakan kembali parameter permintaan, termasuk ARN untuk panggilan berikutnya serta Key Check Value (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"
               }
           }
```

Perhatikan `KeyArn` yang mewakili kunci, misalnya * arn:aws:payment-cryptography:us-east- 2:111122223333:. key/ivi5ksfsuplneuyt * Anda membutuhkannya di langkah berikutnya.

### Buat 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"}]'
```

Respons menggemakan kembali parameter permintaan, termasuk ARN untuk panggilan berikutnya serta Key Check Value (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"
                  }
              }
```

Perhatikan `KeyArn` yang mewakili kunci, misalnya * arn:aws:payment-cryptography:us-east- 2:111122223333:. key/ov6icy4ryas4zcza * Anda membutuhkannya di langkah berikutnya.

## Hasilkan pin acak, hasilkan PVV dan kembalikan PIN dan PVV terenkripsi
<a name="use-cases-issuers.generalfunctions.pvv.generate"></a>

**Example**  
Dalam contoh ini, kita akan menghasilkan pin 4 digit baru (acak) di mana outputnya akan terenkripsi `PIN block` (PinData.PinBlock) dan `PVV` (pinData.VerificationValue). Input kunci adalah`PAN`, `Pin Verification Key` (juga dikenal sebagai kunci pembuatan pin), `Pin Encryption Key` dan [ format Blok ](terminology.md#terms.pinblock) PIN.   
 Perintah ini mengharuskan kuncinya bertipe`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"
            }
        }
```

## Validasi PIN terenkripsi menggunakan metode PVV
<a name="use-cases-issuers.generalfunctions.pvv.verify"></a>

**Example**  
Dalam contoh ini, kita akan memvalidasi PIN untuk PAN tertentu. PIN biasanya disediakan oleh pemegang kartu atau pengguna selama waktu transaksi untuk validasi dan dibandingkan dengan nilai pada file (input dari pemegang kartu diberikan sebagai nilai terenkripsi dari terminal atau penyedia hulu lainnya). Untuk memvalidasi input ini, nilai-nilai berikut juga akan diberikan saat runtime - Pin terenkripsi, kunci yang digunakan untuk mengenkripsi pin input (sering disebut sebagai [ IWK](terminology.md#terms.iwk)), `PAN` dan nilai untuk diverifikasi (baik a `PVV` atau`PIN offset`).   
Jika AWS Kriptografi Pembayaran dapat memvalidasi pin, an http/200 dikembalikan. Jika pin tidak divalidasi, itu akan mengembalikan sebuah 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",
}
```