

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Generazione, traduzione e verifica dei dati PIN
<a name="data-operations.pindata"></a>

Le funzioni relative ai dati PIN consentono di generare pin casuali, valori di verifica dei pin (PVV) e convalidare i pin crittografati in entrata rispetto a PVV o PIN Offset. 

La traduzione dei pin consente di tradurre un pin da una chiave funzionante all'altra senza esporre il pin in testo non crittografato, come specificato dal requisito 1 del PCI PIN.

**Nota**  
 Poiché la generazione e la convalida del PIN sono in genere funzioni dell'emittente e la traduzione del PIN è una tipica funzione di acquisizione, si consiglia di prendere in considerazione l'accesso con privilegi minimi e di impostare politiche appropriate per il caso d'uso del sistema. 

**Topics**
+ [Traduci i dati del PIN](translate-pin-data.md)
+ [Genera dati PIN](generate-pin-data.md)
+ [Verifica i dati del PIN](verify-pin-data.md)

# Traduci i dati del PIN
<a name="translate-pin-data"></a>

Le funzioni Translate PIN data vengono utilizzate per tradurre i dati PIN crittografati da un set di chiavi a un altro senza che i dati crittografati escano dall'HSM. Viene utilizzato per la crittografia P2PE, in cui le chiavi di lavoro devono cambiare, ma il sistema di elaborazione non deve o non è autorizzato a decrittografare i dati. Gli input principali sono i dati crittografati, la chiave di crittografia utilizzata per crittografare i dati, i parametri utilizzati per generare i valori di input. L'altro set di input è costituito dai parametri di output richiesti, come la chiave da utilizzare per crittografare l'output e i parametri utilizzati per creare quell'output. Gli output principali sono un set di dati appena crittografato e i parametri utilizzati per generarlo. 

**Nota**  
Per la conformità PCI, i valori in entrata e in uscita PrimaryAccountNumber devono corrispondere. La traduzione di un PIN da un PAN a un altro non è consentita.

**Topics**
+ [PIN da PEK a DUKPT](#crypto-ops-pindata.pektodukpt)
+ [PIN da PEK a PEK](#crypto-ops-pindata.pektopek)

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

**Example**  
In questo esempio, tradurremo un PIN da un blocco AES ISO 4 PIN utilizzando la crittografia TDES da [DUKPT](terminology.md#terms.dukpt) a PEK utilizzando il blocco PIN ISO 0. Questo è comune quando un terminale di pagamento cripta un pin in ISO 4 e poi può essere ritradotto in TDES per l'elaborazione a valle se la connessione successiva non supporta ancora AES.   

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

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

**Example**  
In questo esempio, traduciamo un PIN crittografato con un PEK (chiave di crittografia PIN) in un altro PEK. Viene comunemente utilizzato per instradare transazioni tra diversi sistemi o partner che utilizzano chiavi di crittografia diverse, mantenendo al contempo la conformità PCI PIN mantenendo il PIN crittografato durante tutto il processo. Entrambe le chiavi utilizzano la crittografia TDES 3KEY in questo esempio, ma sono disponibili diverse opzioni, tra cui da AES ISO-4 a TDES ISO-0, DUKPT a PEK o a PEK. AS2805   

```
$ 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"
}
```
Il blocco PIN di uscita è ora crittografato con il secondo PEK e può essere trasmesso in sicurezza al sistema a valle che contiene la chiave corrispondente.

# Genera dati PIN
<a name="generate-pin-data"></a>

Le funzioni di generazione dei dati PIN vengono utilizzate per generare valori relativi al PIN, ad esempio gli offset [PVV](terminology.md#terms.pvv) e pin block utilizzati per convalidare l'immissione dei pin da parte degli utenti durante la transazione o il momento dell'autorizzazione. Questa API può anche generare un nuovo pin casuale utilizzando vari algoritmi.

# Genera un pin casuale e un codice Visa PVV corrispondente
<a name="generate-pvv-random"></a>

**Example**  
In questo esempio, genereremo un nuovo pin (casuale) in cui gli output saranno crittografati `PIN block` (. PinData PinBlock) e un `PVV` (PinData.offset). Gli input chiave sono`PAN`, the, the e. `Pin Verification Key` `Pin Encryption Key` `PIN block format`   
 Questo comando richiede che la chiave sia di tipo`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"
            }
        }
```

# Genera un Visa PVV per un pin noto
<a name="generate-pvv-givenpin"></a>

**Example**  
In questo esempio, genereremo un PVV per un determinato pin (crittografato). Un pin crittografato può essere ricevuto a monte, ad esempio da un terminale di pagamento o dal titolare della carta, utilizzando il flusso di pin [selezionabile dall'utente](https://github.com/aws-samples/samples-for-payment-cryptography-service/tree/main/python_sdk_example/ecdh_flows). Gli input principali sono`PAN`, the`Pin Verification Key`, the e the`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"
            }
        }
```

# Genera l'offset dei IBM3624 pin per un pin
<a name="generate-ibm3624"></a>

 IBM 3624 PIN Offset è talvolta chiamato anche metodo IBM. Questo metodo genera un natural/intermediate PIN utilizzando i dati di convalida (in genere il PAN) e una chiave PIN (PVK). I pin naturali sono in effetti un valore derivato e, essendo deterministici, sono molto efficienti da gestire per l'emittente, perché non è necessario archiviare i dati relativi ai pin a livello del titolare della carta. Lo svantaggio più evidente è che questo schema non tiene conto dei pin selezionabili o casuali dal titolare della carta. Per consentire questi tipi di pin, è stato aggiunto allo schema un algoritmo di offset. L'offset rappresenta la differenza tra il pin selezionato dall'utente (o casuale) e la chiave naturale. Il valore di offset viene memorizzato dall'emittente della carta o dal processore della carta. Al momento della transazione, il servizio AWS Payment Cryptography ricalcola internamente il pin naturale e applica l'offset per trovare il pin. Quindi lo confronta con il valore fornito dall'autorizzazione della transazione. 

Esistono diverse opzioni per IBM3624:
+ `Ibm3624NaturalPin`emetterà il pin naturale e un blocco pin crittografato
+ `Ibm3624PinFromOffset`genererà un blocco pin crittografato dato un offset
+ `Ibm3624RandomPin`genererà un pin casuale e quindi l'offset corrispondente e il blocco pin crittografato.
+  `Ibm3624PinOffset`genera l'offset del pin in base a un pin selezionato dall'utente.

Internamente alla crittografia dei AWS pagamenti, vengono eseguiti i seguenti passaggi:
+ Riempi il riquadro fornito a 16 caratteri. Se vengono forniti <16, compatta sul lato destro usando il carattere di padding fornito.
+ Crittografa i dati di convalida utilizzando la chiave di generazione del PIN.
+ Decimalizza i dati crittografati utilizzando la tabella di decimalizzazione. Questo mappa le cifre esadecimali in cifre decimali, ad esempio «A» può essere mappato a 9 e 1 può essere mappato a 1.
+ Ottieni le prime 4 cifre da una rappresentazione esadecimale dell'output. Questa è la spilla naturale.
+ Se è stato generato un pin selezionato dall'utente o casuale, il modulo sottrae il pin naturale con il pin del cliente. Il risultato è l'offset del pin.

**Topics**
+ [Esempio: genera l'offset dei IBM3624 pin per un pin](#generate-ibm3624-random-example)

## Esempio: genera l'offset dei IBM3624 pin per un pin
<a name="generate-ibm3624-random-example"></a>

In questo esempio, genereremo un nuovo pin (casuale) in cui gli output saranno crittografati `PIN block` (. PinData PinBlock) e un valore di `IBM3624` offset (pinData.offset). Gli input sono i dati di convalida (in genere il pan)`PAN`, il carattere di riempimento, il, il e il. `Pin Verification Key` `Pin Encryption Key` `PIN block format`

 Questo comando richiede che la chiave di generazione del pin sia di tipo `TR31_V1_IBM3624_PIN_VERIFICATION_KEY` e che la chiave di crittografia sia di tipo `TR31_P0_PIN_ENCRYPTION_KEY` 

**Example**  
L'esempio seguente mostra la generazione di un pin casuale, quindi l'emissione del blocco pin crittografato e del valore di IBM3624 offset utilizzando Ibm3624 RandomPin   

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

# Verifica i dati del PIN
<a name="verify-pin-data"></a>

Le funzioni di verifica dei dati del PIN vengono utilizzate per verificare la correttezza di un pin. Ciò comporta in genere il confronto del valore del pin precedentemente memorizzato con quello inserito dal titolare della carta in un POI. Queste funzioni confrontano due valori senza esporre il valore sottostante di nessuna delle due fonti. 

## Convalida il PIN crittografato utilizzando il metodo PVV
<a name="verify-pin-data.pvv-example"></a>

**Example**  
In questo esempio, convalideremo un PIN per un determinato PAN. Il PIN viene in genere fornito dal titolare della carta o dall'utente durante il momento della transazione per la convalida e viene confrontato con il valore registrato (l'input del titolare della carta viene fornito come valore crittografato dal terminale o da altro provider a monte). Per convalidare questo input, in fase di esecuzione verranno forniti anche i seguenti valori: la chiave utilizzata per crittografare il pin di input (spesso si tratta di un`IWK`) `PAN` e il valore con cui eseguire la verifica (a o). `PVV` `PIN offset`   
Se AWS Payment Cryptography è in grado di convalidare il pin, viene restituito un http/200. Se il pin non è convalidato, restituirà un 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",
    
        }
```

## Convalida il PIN crittografato utilizzando il metodo PVV: errore: pin errato
<a name="verify-pin-data.pvv-example.badpin"></a>

**Example**  
In questo esempio, cercheremo di convalidare un PIN per un determinato PAN, ma l'operazione fallirà perché il pin non è corretto.   
Quando viene utilizzato SDKs, appare come \$1"Message» :"Verifica del blocco PIN non riuscita». , "Motivo» :"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. 
```

## Convalida il PIN crittografato utilizzando il metodo PVV: errore di input errati
<a name="verify-pin-data.pvv-example.badkey"></a>

**Example**  
In questo esempio, cercheremo di convalidare un PIN per un determinato PAN, ma l'operazione avrà esito negativo a causa di input errati e i dati in ingresso non erano un PIN valido. Le cause più comuni sono: 1/chiave errata utilizzata 2/parametri di input come il formato pan o pin block sono errati 3/il blocco pin è danneggiato.   

```
$ 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.
```

# Convalida un PIN rispetto all'offset del pin precedentemente memorizzato IBM3624
<a name="verify-pin-data.ibm3624-example"></a>

In questo esempio, convalideremo il PIN fornito dal titolare della carta confrontandolo con l'offset del pin archiviato presso l'emittente/processore della carta. Gli input sono simili all'[Genera l'offset dei IBM3624 pin per un pin](generate-ibm3624.md)aggiunta del pin crittografato fornito dal terminale di pagamento (o da un altro provider a monte come Card Network). Se il pin corrisponde, l'api restituirà http 200. dove gli output saranno crittografati (. `PIN block` PinData PinBlock) e un valore di `IBM3624` offset (pinData.offset). 

 Questo comando richiede che la chiave di generazione del pin sia di tipo `TR31_V1_IBM3624_PIN_VERIFICATION_KEY` e che la chiave di crittografia sia di tipo `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"
}
}
```