# ISO/IEC 9797-1

ISO/IEC 9797-1 Information technology – Security techniques – Message Authentication Codes (MACs) – Part 1: Mechanisms using a block cipher es un estándar internacional que define el método para calcular un código de autenticación de mensaje o Message Authentication Code en inglés (MAC) sobre datos.
En lugar de definir un algoritmo específico, el estándar define un modelo general a partir del cual se puede construir una variedad de algoritmos específicos. El modelo se basa en un cifrado de bloques con una clave simétrica secreta. Debido a que el estándar describe un modelo en lugar de un algoritmo específico, los usuarios del estándar deben especificar todas las opciones y parámetros particulares que se utilizarán para garantizar un cálculo MAC inequívoco.

## Modelo

El modelo para la generación del MAC consiste en seis pasos:
* Relleno de los datos a un múltiplo del tamaño del bloque de cifrado
* División de los datos en bloques.
* Transformación inicial del primer bloque de datos
* Iteración a través de los bloques de datos restantes
* Transformación de salida del resultado de la última iteración
* Truncamiento del resultado a la longitud requerida
En la mayoría de los pasos, el estándar proporciona varias opciones para elegir y/o permite cierta flexibilidad de configuración.

### Relleno

Es necesario que los datos de entrada sean completados con un múltiplo del tamaño del bloque de cifrado para asegurar que cada operación criptográfica subsiguiente tenga un bloque completo de datos. Se definen tres métodos de relleno. En cada caso, n es la longitud del bloque (en bits ):

#### Método de relleno 1

Si fuera necesario, añada bits con un valor de 0 al final de los datos hasta que los datos rellenados sean un múltiplo de n . (Si los datos originales eran ya un múltiplo de n, no se añade ningún bit. )

#### Método de relleno 2

Agregue un solo bit con valor 1 al final de los datos. Luego, si es necesario, agregue bits con valor 0 al final de los datos hasta que los datos rellenados sean un múltiplo de n .

#### Método de relleno 3

Los datos rellenados comprenden (en este orden):
* La longitud de los datos sin relleno (en bits) expresados en binario big-endian en n bits (es decir, un bloque de cifrado)
* Los datos sin rellenar
* Tantos (posiblemente ninguno) bits con valor 0 como sean necesarios para llevar la longitud total a un múltiplo de n bits
No es necesario transmitir o almacenar los bits de relleno, ya que el destinatario puede generarlos por sí mismo conociendo la longitud de los datos sin relleno y el método de relleno utilizado..

### División

Los datos rellenados D se dividen en q bloques D $_1$, D $_2$, . . . D $_q$, cada uno de longitud n, adecuado para el cifrado de bloque.

### Transformación inicial

Se realiza una operación criptográfica sobre el primer bloque ( D $_1$ ), para crear un bloque intermedio H $_1$ . Se definen dos transformaciones iniciales:

#### Transformación inicial 1

D $_1$ se cifra con la clave K :
    H$_1$ = e$_K$(D$_1$)

#### Transformación inicial 2

D $_1$ se cifra con la clave K, y luego con una segunda clave K ′′:
    H$_1$ = e$_{K′′}$(e$_K$(D$_1$))

### Iteración

Los bloques H $_2$ . . . Hq se calculan encriptando, con la clave K, el exclusivo bit a bit del bloque de datos correspondiente y el bloque H anterior.
    para i = 2 a q
       H$_i$ = e$_K$(D$_i$ ⊕ H$_i$$_{-1}$)
Si solo hay un bloque de datos ( q = 1), se omite este paso.

### Transformación de salida

Opcionalmente, se realiza una operación criptográfica en el bloque de salida H$_q$ de la última iteración para producir el bloque G. Se han definido tres transformaciones de salida:

#### Transformación de salida 1

H$_q$ se usa sin cambios:
    G = H$_q$

#### Transformación de salida 2

H$_q$ se cifra con la clave K ′:
    G = e$_{K′}$(H$_q$)

#### Transformación de salida 3

H$_q$ se descifra con la clave K ′ y el resultado se cifra con la clave K :
    G = e$_K$(d$_{K′}$(H$_q$))

### Truncamiento

El MAC se obtiene truncando el bloque G (manteniendo los bits más a la izquierda, descartando los bits más a la derecha), a la longitud requerida.

## Algoritmos específicos

El modelo general permite nominalmente cualquier combinación de opciones para cada uno de los pasos de relleno, transformación inicial, transformación de salida y truncamiento. Sin embargo, el estándar define cuatro combinaciones particulares de transformación inicial y de salida y (cuando corresponda) derivación de clave, y dos combinaciones adicionales basadas en cálculos paralelos duplicados. Las combinaciones están indicadas por el estándar como "Algoritmo MAC 1" a "Algoritmo MAC 6".

### Algoritmo MAC 1

Este algoritmo utiliza la transformación inicial 1 y la transformación de salida 1.
Solo se requiere una clave, K .
(Cuando el cifrado de bloque es DES, esto es equivalente al algoritmo especificado en FIPS PUB 113 Computer Data Authentication . )
El algoritmo 1 se conoce comúnmente como CBC-MAC .

### Algoritmo MAC 2

Este algoritmo utiliza la transformación inicial 1 y la transformación de salida 2.
Se requieren dos claves, K y K ′, pero K ′ puede derivarse de K .

### Algoritmo MAC 3

Este algoritmo utiliza la transformación inicial 1 y la transformación de salida 3.
Se requieren dos claves independientes, K y K ′.
El algoritmo 3 también se conoce como Retail MAC .

### Algoritmo MAC 4

Este algoritmo utiliza la transformación inicial 2 y la transformación de salida 2.
Se requieren dos claves independientes, K y K ′, con una tercera clave K ′ ′ derivada de K ′.

### Algoritmo MAC 5

El algoritmo MAC 5 comprende dos instancias paralelas del algoritmo MAC 1. La primera instancia opera sobre los datos de entrada originales. La segunda instancia opera en dos variantes de clave generadas a partir de la clave original a través de la multiplicación en un campo de Galois . El MAC final se calcula mediante el or exclusivo bit a bit de los MAC generados por cada instancia del algoritmo 1.
El algoritmo 5 también se conoce como CMAC .

### Algoritmo MAC 6

Este algoritmo comprende dos instancias paralelas del algoritmo MAC 4. El MAC final es el bit a bit exclusivo o de los MAC generados por cada instancia del algoritmo 4.
Cada instancia del algoritmo 4 utiliza un par de claves diferente ( K y K '), pero esas cuatro claves se derivan de dos claves base independientes.

## Derivación de claves

Los algoritmos MAC 2 (opcionalmente), 4, 5 y 6 requieren derivar una o más claves de otra clave. El estándar no exige ningún método particular de derivación de claves, aunque generalmente exige que las claves derivadas sean diferentes entre sí.
El estándar brinda algunos ejemplos de métodos de derivación de claves, como "subcadenas alternativas complementarias de cuatro bits de K que comienzan con los primeros cuatro bits". Esto es equivalente a bit a bit exclusivo-oring cada byte de la clave con F0 ( hexadecimal ).

## Especificación completa del cálculo MAC

Para definir completamente y sin ambigüedades el cálculo MAC, un usuario de ISO/IEC 9797-1 debe seleccionar y especificar:
* El algoritmo de cifrado de bloque e
* El método de relleno (1 a 3)
* El algoritmo MAC específico (1 a 6)
* La longitud de la MAC
* Los métodos de obtención de claves, si es necesario, para los algoritmos MAC 2, 4, 5 o 6

## Análisis de seguridad de los algoritmos

El Anexo B del estándar es un análisis de seguridad de los algoritmos MAC. Describe varios ataques criptográficos en los algoritmos, incluido el ataque de recuperación de clave, la recuperación de clave de fuerza bruta y el ataque de cumpleaños, y analiza la resistencia de cada algoritmo a esos ataques.