

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à.

# Genera e verifica MAC
<a name="crypto-ops-mac"></a>

I codici di autenticazione dei messaggi (MAC) vengono in genere utilizzati per autenticare l'integrità di un messaggio (indipendentemente dal fatto che sia stato modificato). Gli hash crittografici come HMAC (Hash-Based Message Authentication Code), CBC-MAC e CMAC (Cipher-Based Message Authentication Code) forniscono un'ulteriore garanzia del mittente del MAC utilizzando la crittografia. HMAC si basa su funzioni hash mentre CMAC si basa su cifrari a blocchi. Il servizio supporta anche ISO9797 gli algoritmi 1 e 3, che sono tipi di CBC-. MACs 

Tutti gli algoritmi MAC di questo servizio combinano una funzione hash crittografica e una chiave segreta condivisa. Accettano un messaggio e una chiave segreta, ad esempio il materiale chiave contenuto in una chiave, e restituiscono un tag o mac univoco. Se anche solo un carattere del messaggio cambia o se la chiave segreta cambia, il tag risultante è completamente diverso. Richiedendo una chiave segreta, la crittografia garantisce MACs anche l'autenticità; è impossibile generare un mac identico senza la chiave segreta. Le firme crittografiche MACs sono talvolta chiamate firme simmetriche, perché funzionano come le firme digitali, ma utilizzano un'unica chiave sia per la firma che per la verifica. 

AWS La crittografia dei pagamenti supporta diversi tipi di: MACs

**ISO9797 ALGORITMO 1**  
Denotato con `KeyUsage` di ISO9797 \$1ALGORITHM1. Se il campo non è un multiplo della dimensione del blocco (8 byte/16 caratteri esadecimali per TDES, 16 byte/32 caratteri per AES), Payment Cryptography applica automaticamente il metodo di riempimento 1. AWS ISO9797 Se sono necessari altri metodi di riempimento, è possibile applicarli prima di chiamare il servizio.

**ISO9797 ALGORITMO 3 (RETAIL MAC)**  
Denotato con `KeyUsage` o ISO9797 \$1ALGORITHM3. Le stesse regole di riempimento si applicano all'algoritmo 1

**ISO9797 ALGORITMO 5 (CMAC)**  
Denotato da \$1M6\$1ISO\$19797\$15\$1CMAC\$1KEY `KeyUsage` TR31

**HMAC**  
Denotato con `KeyUsage` TR31 \$1M7\$1HMAC\$1KEY che include HMAC\$1, HMAC\$1, HMAC\$1 e HMAC\$1 SHA224 SHA256 SHA384 SHA512

**AS28054.4.1 MAC**  
Denotato con `KeyUsage` TR31 \$1M0\$1ISO\$116609\$1MAC\$1KEY. Per ulteriori dettagli su, vedere AS2805 [AS2805](advanced.regional.as2805.md)

**DUMP MAC**  
DUKPT MAC viene in genere utilizzato per confermare la fonte e il payload dei terminali di pagamento dei messaggi. to/from Deriva una chiave utilizzando le tecniche di derivazione DUKPT e quindi esegue il MAC. Le chiavi utilizzate con questa opzione sono contrassegnate da \$1B0\$1BASE\$1DERIVATION\$1KEY. `KeyUsage` TR31 

**EMV MAC**  
EMV MAC viene generalmente definito come una chiave di integrità nella documentazione EMV. Deriva una chiave utilizzando tecniche di derivazione EMV e quindi utilizza \$1 internamente. ISO9797 ALGORITHM3 In genere viene utilizzato per inviare gli script dell'emittente a una chip card per la riprogrammazione. Le chiavi utilizzate con questa opzione sono contrassegnate da \$1E2\$1EMV\$1MKEY\$1INTEGRITY. `KeyUsage` TR31 Se state inviando uno script e aggiornando un pin offline, verificate che esegua entrambe queste operazioni. [GenerateMacEmvPinChange](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GenerateMacEmvPinChange) 

**Topics**
+ [Genera un MAC](generate-mac.md)
+ [Verifica MAC](verify-mac.md)

# Genera un MAC
<a name="generate-mac"></a>

L'API Generate MAC viene utilizzata per autenticare i dati relativi alle carte, come tenere traccia dei dati provenienti dalla banda magnetica di una scheda, utilizzando chiavi crittografiche note per generare un MAC (Message Authentication Code) per la convalida dei dati tra le parti che inviano e ricevono. I dati utilizzati per generare un MAC includono i dati dei messaggi, la chiave di crittografia MAC segreta e l'algoritmo MAC per generare un valore MAC univoco per la trasmissione. La parte ricevente del MAC utilizzerà gli stessi dati dei messaggi MAC, la stessa chiave di crittografia MAC e lo stesso algoritmo per riprodurre un altro valore MAC per il confronto e l'autenticazione dei dati. Anche se un carattere del messaggio cambia o la chiave MAC utilizzata per la verifica non è identica, il valore MAC risultante è diverso. L'API supporta ISO 9797-1 Algorithm 1 e ISO 9797-1 Algorithm 3 MAC (utilizzando una chiave MAC statica e una chiave DUKPT derivata), chiavi di crittografia MAC HMAC ed EMV MAC per questa operazione.

Il `message-data` valore di input per deve essere un dato HexBinary.

Per ulteriori informazioni su tutte le opzioni di questa API, consulta [GenerateMac](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GenerateMac.html)e [VerifyMac](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_VerifyMac.html).

Il parametro opzionale mac-length consente di troncare il valore di output (sebbene ciò possa essere fatto anche all'interno del codice). Una lunghezza di 8 si riferisce a 8 byte o 16 caratteri esadecimali.

Le chiavi MAC possono essere create con AWS Payment Cryptography chiamando [CreateKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html)o importate chiamando. [ImportKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html) 

**Nota**  
Gli algoritmi CMAC e HMAC non richiedono il padding. Tutti gli altri richiedono che i dati vengano sommati alla dimensione del blocco dell'algoritmo, ovvero multipli di 8 byte (16 caratteri esadecimali) per TDES e 16 byte (32 caratteri esadecimali) per AES. 

**Topics**
+ [Genera HMAC](#generate-mac-hmac)
+ [Genera MAC usando l'algoritmo ISO 9797-1 3](#generate-mac-iso9797-alg3)
+ [Genera MAC usando CMAC](#generate-mac-cmac)
+ [Genera MAC usando DUKPT CMAC](#generate-mac-dukpt-cmac)

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

In questo esempio, genereremo un HMAC (Hash-Based Message Authentication Code) per l'autenticazione dei dati delle carte utilizzando l'algoritmo `HMAC_SHA256` HMAC e la chiave di crittografia HMAC. La chiave deve essere KeyUsage impostata su e su. `TR31_M7_HMAC_KEY` KeyModesOfUse `Generate` La lunghezza dell'hash (ad esempio 256) viene definita al momento della creazione della chiave e non può essere modificata. 

Il parametro opzionale mac-length taglierà l'output MAC, sebbene ciò possa essere eseguito anche all'esterno del servizio. Questo valore è in byte, quindi un valore di 16 si aspetterà una stringa esadecimale di lunghezza 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"
}
```

## Genera MAC usando l'algoritmo ISO 9797-1 3
<a name="generate-mac-iso9797-alg3"></a>

In questo esempio, genereremo un MAC utilizzando l'algoritmo 3 ISO 9797-1 (Retail MAC) per l'autenticazione dei dati delle carte. La chiave deve essere KeyUsage impostata su e su. `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"
}
```

## Genera MAC usando CMAC
<a name="generate-mac-cmac"></a>

CMAC è più comunemente usato quando le chiavi sono AES, ma supporta anche TDES. In questo esempio, genereremo un MAC utilizzando CMAC (ISO 9797-1 Algorithm 5) per l'autenticazione dei dati delle carte con una chiave AES. La chiave deve essere KeyUsage impostata su e su. `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"
}
```

## Genera MAC usando DUKPT CMAC
<a name="generate-mac-dukpt-cmac"></a>

In questo esempio, genereremo un MAC utilizzando DUKPT (Derived Unique Key Per Transaction) con CMAC per l'autenticazione dei dati delle carte. La chiave deve essere impostata su `TR31_B0_BASE_DERIVATION_KEY` e KeyUsage KeyModesOfUse `DeriveKey` impostata su true. Le chiavi DUKPT derivano una chiave unica per ogni transazione utilizzando una Base Derivation Key (BDK) e un Key Serial Number (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"
}
```

# Verifica MAC
<a name="verify-mac"></a>

L'API Verify MAC viene utilizzata per verificare il MAC (Message Authentication Code) per l'autenticazione dei dati relativi alla carta. Deve utilizzare la stessa chiave di crittografia utilizzata durante la generazione del MAC per riprodurre il valore MAC per l'autenticazione. La chiave di crittografia MAC può essere creata con AWS Payment Cryptography chiamando [CreateKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html)o importata chiamando. [ImportKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html) L'API supporta le chiavi di crittografia DUKPT MAC, HMAC ed EMV MAC per questa operazione.

Se il valore è verificato, `MacDataVerificationSuccessful` verrà restituito il parametro di risposta`Http/200`, altrimenti `Http/400` con un messaggio che lo indica. `Mac verification failed`

**Topics**
+ [Verifica HMAC](#verify-mac-hmac)
+ [Verifica il MAC utilizzando DUKPT CMAC](#verify-mac-dukpt-cmac)

## Verifica HMAC
<a name="verify-mac-hmac"></a>

In questo esempio, verificheremo un HMAC (Hash-Based Message Authentication Code) per l'autenticazione dei dati delle carte utilizzando l'algoritmo `HMAC_SHA256` HMAC e la chiave di crittografia HMAC. La chiave deve essere impostata su `TR31_M7_HMAC_KEY` e KeyUsage KeyModesOfUse `Verify` impostata su 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"
}
```

## Verifica il MAC utilizzando DUKPT CMAC
<a name="verify-mac-dukpt-cmac"></a>

In questo esempio, verificheremo un MAC utilizzando DUKPT (Derived Unique Key Per Transaction) con CMAC per l'autenticazione dei dati delle carte. La chiave deve essere impostata su `TR31_B0_BASE_DERIVATION_KEY` e KeyUsage KeyModesOfUse `DeriveKey` impostata su true. Le chiavi DUKPT derivano una chiave unica per ogni transazione utilizzando una Base Derivation Key (BDK) e un Key Serial Number (KSN). Il valore di DukptKeyVariant deve corrispondere tra mittente e destinatario. REQUEST verrà in genere utilizzato da terminale a backend, VERIFY da backend a terminale e BIDIRECTIONAL quando viene utilizzata una singola chiave in entrambe le direzioni. 

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