Codi d'Autenticació de missatge
Message Authentication Code
podem fer servir directament una funció de xifrat de bloc, d'aquesta manera:
$t = e(k, m)$
Nota: no podem fer servir xifrat de flux (directament), ja que el càlcul de $k$ seria trivial; però sí que podem fer servir AES-128-ECB
$t = e(k, m)$
aquesta construcció té una limitació:
només podem autenticar missatges de la longitud de bloc
Alternatives: ECBC i HMAC
derivat del mode d'operació CBC (Cipher Block Chaining)
(basat en Wikipedia)
però en lloc de fer servir un $\text{IV}$, iniciarem la cadena amb $0$ (equivalent a $\text{IV}=0$)
rawCBC-MAC és insegur però...
...rawCBC-MAC és insegur ja que un atacant pot combinar missatges bons per generar-ne de "bons"
per a evitar el problema podem canviar l'$\text{IV}=0$ per la longitud del missatge $\text{IV}=\ell$
...o habitualment el que es fa és fer servir una segona clau per a tancar el càlcul i impedir el
concatenat
(ECBC: Encrypted CBC)
(basat en Wikipedia)
ECBC-MAC és segur mentre sigui improbable trobar una col·lisió
la probabilitat de col·lisió és propera a $0.5$ per a un nombre de blocs d'aproximadament $\sqrt{|\text{bloc}|}$
e.g. en el cas de l'AES el bloc és de $128$ b, per tant, no podrem fer servir la mateixa clau:
$\text{ops} \ll \sqrt{2^{128}} = 2^{64}$
(valors acceptats per una clau AES-128/192/256:
$2^{48}$ missatges autenticats)
Poly1305-AES: longitud $\|t\| = 128 \text{b}$
Poly1305-ChaCha20: longitud $\|t\| = 128 \text{b}$
HMAC (Hash MAC): longitud = longitud hash base