CBC-MAC

Da Wikipedia, l'enciclopedia libera.

In crittografia, un Cipher Block Chaining Message Authentication Code, abbreviato CBC-MAC, è una tecnica per costruire un codice di autenticazione di messaggio usando un cifrario a blocchi. Il messaggio è crittografato con qualche algoritmo di crittografia a blocchi in modalità CBC per creare una catena di blocchi in cui ognuno di essi dipende dalla cifratura del blocco precedente. Questa interdipendenza assicura che un cambiamento ad un qualsiasi bit del testo in chiaro causerà un cambiamento nel blocco finale crittografato che non può essere predetto o calcolato senza conoscere la chiave di codifica.

Per calcolare il CBC-MAC del messaggio m si cripta m in modalità CBC con il vettore di inizializzazione a zero. La figura seguente mostra il calcolo del CBC-Mac di un messaggio diviso in blocchi m_1\|m_2\|\dots\|m_x usando una chiave segreta k e un cifrario a blocchi E.

Cbc mac.png

Lunghezza dei messaggi variabile[modifica | modifica sorgente]

Dato un cifrario a blocchi sicuro, CBC-MAC è sicuro per messaggi a lunghezza fissa. Tuttavia, di per sé, non è sicuro per messaggi di lunghezza variabile. Un attaccante che conosce coppie messaggio-codice CBM-MAC (m,t), (m',t') può generare un terzo messaggio m'' il cui CBC-MAC sia t'. Ciò è possibile semplicemente effettuando lo XOR tra il primo blocco di m' con t e quindi concatenando m con questa versione modificata di m', es.facendo m'' = m \| [(m_1' \oplus t) \| m_2' \| \dots \| m_x'].


Questo problema non può essere risolto aggiungendo un blocco di lunghezza del messaggio (e.g., con Merkle-Damgård strengthening) ed è raccomandato l'uso di una differente modalità operativa, per esempio, CMAC per proteggere l'integrità dei messaggi a lunghezza variabile.

Utilizzo della stessa chiave per crittografare e autenticare[modifica | modifica sorgente]

Un errore comune è riutilizzare la stessa chiave k per la crittografia CBC e il CBC-MAC. Anche se un riutilizzo della chiave per scopi differenti è una pratica sconsigliata in generale, in questo caso particolare l'errore porta ad un attacco spettacolare.

Supponiamo che un utente effettui la crittografia di un messaggio m_0 \| m_1 \| \cdots \| m_{x-1} in modalità CBC usando un IV c_{-1} ed ottenendo il seguente testo cifrato: c_0 \| c_1 \| \cdots \| c_{x-1}, dove c_i = E_k(m_i \oplus c_{i-1}). Inoltre, genera il codice CBC-MAC per IV e per il messaggio: t=M(m_{-1} \| \cdots \| m_{x-1})..

Adesso un attaccante può cambiare ogni bit prima dell'ultimo blocco c_{x-1} e il codice MAC sarà ancora valido. La ragione è che t = E_k(m_{x-1} \oplus c_{x-2}) = c_{x-1} (questa è in effetti la ragione per cui le persone commettono questo errore così frequentemente—ciò permette di incrementare le performance di un fattore pari a due). Da adesso finché l'ultimo blocco non è cambiato l'equivalenza t =\ c_{x-1} rimane valida e cos' il codice CBC-MAC è corretto.

Questo esempio mostra, inoltre, che un CBC-MAC non può essere usato come funzione monodirezionale resistente alle collisioni: data una chiave è banale creare un messaggio differente che generi lo stesso codice.

Voci correlate[modifica | modifica sorgente]

Riferimenti[modifica | modifica sorgente]

crittografia Portale Crittografia: accedi alle voci di Wikipedia che trattano di crittografia