ECBC-MAC

Códigos de autenticación de mensaje basados en cipfradores de bloque
Cipher Block Chaining Message Authentication Code

Creative Commons License
“Curso de Introducción a la Criptografía” by Jordi Íñigo Griera is licensed under a
Creative Commons Attribution 4.0 International License.
Project hosted at github.com/jig/crypto

MAC: primera implementación

podemos utilizar directamente una función de cifrado de bloque, así:
$t = e(k, m)$

Layer 1 t m

Nota: no podemos utilizar cifrado de flujo (directamente), ya que el cálculo de $k$ sería trivial; pero sí que podemos usar AES-128-ECB

MAC: primera implementación

$t = e(k, m)$

esta construcción tiene una limitación:
sólo podemos autenticar mensajes de la longitud del bloque

rawCBC-MAC

derivado del modo de operación CBC (Cipher Block Chaining)


(basado en Wikipedia)

pero en lugar de utilizar un $\text{IV}$, iniciaremos la cadena con $0$ (equivalente a $\text{IV}=0$)

pero rawCBC-MAC es inseguro...

ECBC-MAC

...rawCBC-MAC es inseguro ya que un atacante puede combinar mensajes buenos para generar otros aparentemente "buenos"

para evitar el problema podemos cambiar el $\text{IV}=0$ por la longitud del mensaje $\text{IV}=\ell$

ECBC-MAC

...o habitualmente lo que se hace es utilizar una segunda clave para cerrar el cálculo y impedir el concatenado
(ECBC: Encrypted CBC)


(basat en Wikipedia)

ECBC-MAC: seguridad

ECBC-MAC es seguro mientras sea improbable encontrar una colisión

la probabilidad de colisión es cercana a $0.5$ para una cantidad de bloques generados de aproximadamente $\sqrt{|\text{bloque}|}$

e.g. en el caso de AES el bloque es de $128$ b, por tanto, no podremos usar la misma clave:
$\text{ops} \ll \sqrt{2^{128}} = 2^{64}$

(valores aceptados para una clave AES-128/192/256:
$2^{48}$ mensajes autenticados)

Otros MACs usados

Poly1305-AES: longitud $\|t\| = 128 \text{b}$

Poly1305-ChaCha20: longitud $\|t\| = 128 \text{b}$

cifrar y autenticar

estas dos funciones se utilizan juntas frecuentemente

enviaremos la concatenación $(c, t)$ donde:
$\begin{aligned} c &= e(k_e, m) \\ t &= \text{MAC}(k_t, c) \end{aligned}$

Nota: hacer $t = \text{MAC}(k_t, \color{red}{m})$ no garantiza que la función MAC no revele ningún de detalle de $m$ (en realidad sí lo hace: si dos mensajes son iguales, un atacante lo sabrá simplemente inspeccionando $t$ y $t'$

AEAD

Authenticated Encryption with Associated Data

cifrar y autenticar en un sólo paso

(Authenticated Encryption o AEAD)

Históricamente ha habido errores concatenando el cifrado y la firma

Con los algoritmos AEAD se trata de ofrecer primitivas combinadas que dan confidencialidad, integridad y autenticidad en un único algoritmo simétrico

Adicionalmente, la implementación combinada permite mayor rendimiento

  • CCM ó Counter with CBC-MAC, es la combinación de AES-CTR con un CBC-MAC: con una misma clave, se calcula el MAC sobre los datos en claro, y después se cifra esos mismos datos en claro.
  • ChaCha20/Poly1305 combina ambos algoritmos
  • GCM ó Galois Counter Mode, también una combinación de AES-CTR pero ahora con una multiplicación modular sobre los datos cifrados que se usan como MAC; permite velocidades superiores a CCM

(Teoría de números) $\rightarrow$