Message authentication code

En criptografía, un **Message authentication code**, de cutiu llamáu poles sos sigles **MAC** o pola so traducción al asturianu **Códigu de Autenticación de Mensaxe**, ye una porción d'información utilizada pa autenticar un mensaxe.

Los valores MAC calcular por aciu l'aplicación d'una función hash criptográfica con clave secreta *K*, que namái conocen el remitente y destinatario, pero non los atacantes. Dizse que la función hash tien que ser criptográfica porque tien que cumplir ciertes propiedá de seguridá que les faen resistentes frente ataques d'adversarios. Matemáticamente la función hash criptográfica toma dos argumentos: una clave *K* de tamañu fixu y un mensaxe *M* de llargor arbitrariu. La resultancia ye un códigu MAC de llargor fixu:

:*MAC* = *C*K(*M*)

onde:
* *M* ye un mensaxe de llargor arbitrariu *
*C*K ye la función que tresforma'l mensaxe nun valor *MAC* y qu'utiliza una clave secreta *K* como parámetru *
*MAC* ye'l valor MAC calculáu de llargor fixu

Si'l valor MAC unviáu coincide col valor que'l destinatario calcula, ésti puede garantizar que:
* El mensaxe nun foi alteriáu *
El mensaxe provién del remitente indicáu nel mensaxe *
Si'l mensaxe inclúi un númberu de secuencia, que'l mensaxe sigue la secuencia correuta

## Seguridá

### Función MAC ideal

Defínese la función MAC ideal como un mapeo aleatoriu de tolos posibles valores del mensaxe d'entrada *M* en salíes de tamañu de *n* bits.

### Propiedá de seguridá

Por que una función MAC pueda ser usada ye necesariu que sía resistente a la computación de nuevos valores hash.

## Tipos de funciones MAC

Anguaño, esisten 3 grandes grupos de funciones MAC: 

* **CBC-MAC**: La idea detrás d'esti algoritmu ye la de convertir un algoritmu de cifráu simétricu nuna función MAC. El funcionamientu básicu consiste en cifrar el mensaxe usando un algoritmu en manera CBC y tirar tou la resultancia de testu cifráu a esceición del últimu bloque. 
* **[[HMAC]]**: Yá que una función MAC ye un mapeo aleatoriu, y que les funciones hash pórtense como tales, podemos esplotar la idea d'utilizar una función hash pa implementar una función MAC. La opción más popular anguaño ye la d'usar HMAC-SHA-256. 
* **UMAC**: Les funciones UMAC parten de la premisa de que l'atacante precisa interactuar col sistema pa comprobar si la resultancia MAC que xeneró ye válidu o non. Esto ye, nun esiste nada asemeyao a un ataque refechu off-line contra les funciones MAC. Asina, argumenten que puede amenorgase la resultancia a tan solo 64 bits. Sicasí, nun esiste un estándar bien definíu de funciones MAC como asocede coles funciones hash, lo que tien efeutos contraproducentes al llargu plazu dende'l puntu de vista de la implementación.

## Debilidá. Aplicación del principiu de Horton
L'usu de valores MAC pa autenticar aprove cierta seguridá pero nun ye la panacea. Por casu podría haber un ataque que consistiera n'interceptar el mensaxe y el valor MAC pa poder reutilizalo pa autenticarse.

Polo xeneral el principiu de Horton establez que se debe autenticar el significáu del mensaxe, y non el códigu del mensaxe. Aplicando'l principiu a autenticación de mensaxe con MAC, deberíamos autenticar non yá el valor MAC, sinón tamién cierta información que sía usada pa formar un valor MAC que nun sía ambiguu. Por casu, pue ser bona idea incorporar dalgún tipu de sellu de tiempu cuando calculo'l valor MAC (por casu concatenándolo al mensaxe). Esti sellu de tiempu unviar al verificador. Si'l verificador recibe un sellu de tiempu antiguu entós decide que ye falsu (caducó). Si l'adversariu decide actualizar el sellu de tiempu entós el valor MAC interceptáu yá nun sería válidu pa manda-y lo al verificador.

Otru sistemes proponen concatenar al mensaxe (pa calcular el valor MAC) ciertu datos relativos al contestu nel que se ta (númberu de mensaxe, tamaños de campos negociaos, númberu de versión del protocolu,...). Estos datos nun habría qu'unvia-y los al verificador porque yá tán nel contestu y conocer.

## Aplicaciones

Les MAC suélense usar para autenticación (d'ende'l so nome). El que se quier autenticar y el verificador comparten la clave de la función MAC y caltener de callao. D'esta forma cuando'l verificador recibe'l valor MAC puede verificar si esi valor MAC corresponder col que se tien que xenerar a partir d'un mensaxe dau.

Hai dos formes principales de funcionar, según onde se xenere'l mensaxe:
* El mensaxe ye xeneráu pol que se quier autenticar y dempués ésti manda al verificador el mensaxe y el valor MAC asociáu. Nel pasu siguiente'l verificador verifica la validez del valor MAC y al empar asegúrase de la integridá del mensaxe recibíu.
* El mensaxe ye xeneráu pol verificador y mándase-y al que se quier autenticar por que ésti xenere'l valor MAC y mandar al verificador. Esti tipu de protocolu encuadrar nos llamada protocolo desafío-respuesta

## Ver tamién
* Función hash criptográfica
* Data Authentication Code, un algoritmu de cálculu de valores MAC d'ANSI basáu nel cifrador simétricu DES
* UMAC
* HMAC
* CMAC
* Poly1305-AES
* Poly1305-AED
* Hash

## Referencies