

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

La API Generate MAC se utiliza para autenticar los datos relacionados con las tarjetas, como rastrear los datos de una banda magnética de tarjetas, mediante el uso de claves criptográficas conocidas para generar un MAC (código de autenticación de mensajes) para la validación de los datos entre las partes remitentes y receptoras. Los datos utilizados para generar el MAC incluyen los datos de los mensajes, la clave de cifrado MAC secreta y el algoritmo MAC para generar un valor MAC único para la transmisión. La parte receptora del MAC utiliza los mismos datos del mensaje MAC, la misma clave de cifrado MAC y el mismo algoritmo para reproducir otro valor MAC con fines de comparación y autenticación de datos. Aunque cambie un carácter del mensaje o la clave MAC utilizada para la verificación no sea idéntica, el valor MAC resultante será diferente. La API admite las claves de cifrado MAC HMAC y EMV MAC (que utilizan una clave MAC estática y una clave DUKPT derivada) del algoritmo 1 de la ISO 9797-1 y el algoritmo 3 de la ISO 9797-1.

El valor de entrada para `message-data` debe ser un dato hexBinary.

Para obtener más información sobre todas las opciones de esta API, consulte y. [GenerateMac[VerifyMac](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_VerifyMac.html)](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GenerateMac.html)

El parámetro opcional mac-length te permite truncar el valor de salida (aunque esto también se puede hacer dentro del código). Una longitud de 8 se refiere a 8 bytes o 16 caracteres hexadecimales.

Las claves MAC se pueden crear con criptografía AWS de pago mediante una llamada [CreateKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html)o importarse mediante una llamada [ImportKey](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html). 

**nota**  
Los algoritmos CMAC y HMAC no requieren relleno. Todos los demás requieren que los datos se rellenen hasta el tamaño de bloque del algoritmo, que es múltiplos de 8 bytes (16 caracteres hexadecimales) para el TDES y 16 bytes (32 caracteres hexadecimales) para el AES. 

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

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

En este ejemplo, generaremos un HMAC (código de autenticación de mensajes basado en hash) para la autenticación de los datos de la tarjeta mediante el algoritmo HMAC `HMAC_SHA256` y la clave de cifrado HMAC. La clave debe estar KeyUsage configurada en `TR31_M7_HMAC_KEY` y KeyModesOfUse en. `Generate` La longitud del hash (por ejemplo, 256) se define cuando se crea la clave y no se puede modificar. 

El parámetro opcional mac-length recortará el MAC de salida, aunque también se puede realizar fuera del servicio. Este valor está en bytes, por lo que un valor de 16 esperará una cadena hexadecimal de 32 de longitud.

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

## Genere el MAC mediante el algoritmo ISO 9797-1 3
<a name="generate-mac-iso9797-alg3"></a>

En este ejemplo, generaremos un MAC utilizando el algoritmo 3 de la norma ISO 9797-1 (MAC minorista) para la autenticación de los datos de las tarjetas. La clave debe estar KeyUsage configurada en `TR31_M3_ISO_9797_3_MAC_KEY` y KeyModesOfUse en. `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"
}
```

## Genere MAC mediante CMAC
<a name="generate-mac-cmac"></a>

El CMAC se usa más comúnmente cuando las claves son AES, pero también es compatible con el TDES. En este ejemplo, generaremos un MAC mediante el CMAC (algoritmo 5 de la norma ISO 9797-1) para la autenticación de los datos de la tarjeta con una clave AES. La clave debe estar KeyUsage configurada en y en. `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"
}
```

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

En este ejemplo, generaremos una MAC utilizando la DUKPT (clave única derivada por transacción) con la CMAC para la autenticación de los datos de la tarjeta. La clave debe estar KeyUsage establecida `TR31_B0_BASE_DERIVATION_KEY` y establecida en KeyModesOfUse `DeriveKey` true. Las claves DUKPT obtienen una clave única para cada transacción mediante una clave de derivación básica (BDK) y un número de serie de la clave (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"
}
```