MAC - Message Authentication Codes
Il Message Authentication Code è paragonabile ad una funzione hash segreta. Usa una chiave.
Con MAC puoi garantire l’autenticità, e quindi il mittente legittimato, che è una persona che ha accesso alla chiave segreta.

La funzione MAC, che prende come input il messaggio e la chiave, genera un tag. Chi riceve il messaggio, ricalcola il tag con la chiave e il messaggio, e li compara. Se il tag è lo stesso, il messaggio è autentico.
Il livello di sicurezza di un MAC dipende dalla lunghezza del tag e dalla lunghezza della chiave. L’attacco più efficiente è un attacco brute force sulla chiave. La dimensione del tag, invece, indica quanti dati si possono autenticare con la stessa chiave.
Replay attack
L’attaccante intercetta il messaggio che sta arrivando a Bob, e poi lo invia più volte a Bob. Il messaggio è autentico, ma non Bob può essere sicuro che sia stato inviato da Alice. Questo può essere utilizzato ad esempio con messaggi di spostamento di denaro.
Per ovviare a questo problema, si aggiungono i metadati, e in particolare un id univoco. Ogni messaggio con un id già visto verrà scartato dal ricevente.
Reflection attack
L’attaccante rimanda indietro il messaggio al mittente, che lo valida e può dare accesso all’attaccante se non implementato nel modo giusto. Per ovviare a questo problema, si può aggiungere un altro metadato per la direzione della comunicazione, ma solitamente si implementano due chiavi, una per un verso e una per l’altro, implementando così due half-duplex sicuri. Questa soluzione è implementata anche in TLS.
MAC sono delle primitive. HMAC sono funzioni MAC basate su funzioni Hash. Se si hanno delle chiavi si utilizzano funzioni HMAC.
MAC design
Utilizzate da sole
- HMAC: basato su funzioni hash resistenti a collisioni
- CMAC: basato su block cipher
Usate in cifrature autenticate:
- GMAC, AES-GCM: basate su funzioni hash universali
- Poly1305: variante di funzioni hash universali
HMAC
Composizione per crittografia autenticata
Ci sono 3 approcci:
Encrypt-and-MAC

MAC-then-Encrypt
Se si utilizza la funzione sbagliata e non si utilizzano gli input giusti può essere pericoloso e molto insicuro. Netflix ad esempio lo usa.

Encrypt-then-MAC
La più utilizzata e quella che effettivamente si dovrebbe utilizzare.

⚠️ Usare due chiavi diverse per il mac e per la crittografia.
- Il MAC deve autenticare il ciphertext e il Nonce.
- Lo schema di crittografia simmetrico e il MAC devono usare due chiavi diverse
- Quando si fa il decriptano i dati il MAC deve essere verificato PRIMA di decriptare il ciphertext, e la verifica deve essere time constant.