CBC-MAC: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 9:
Se il cifrario a blocchi impiegato è sicuro, CBC-MAC è sicuro per messaggi a lunghezza fissa. Tuttavia, di per sé, non è sicuro per messaggi a lunghezza variabile.
 
Detto tag il codice CBC-MAC di un messaggio <math>m</math>, e indicato il tag con <math>t</math>, un attaccante che conosce coppie messaggio-tag <math>(m,t)</math> e <math>(m',t')</math> può generare un terzo messaggio <math>m''</math> il cui tag coincida con <math>t'</math>.
 
Si può ottenere <math>m''</math>procedendo può essere ottenuto come segue:
# :<math>m'' = m \| [(m_1' \oplus t) \| m_2' \| \dots \| m_x']</math>: si concatena ad <math>m</math> la versione modificata di <math>m'</math>.
 
Si può ottenere <math>m''</math>procedendo come segue:
# <math>(m_1' \oplus t)</math>: si effettua lo XOR tra il primo blocco di <math>m'</math>e <math>t</math>;
# <math>m' = (m_1' \oplus t) \| m_2' \| \dots \| m_x'</math>: si crea una versione modificata di <math>m'</math>dove il primo blocco originale <math>m_1'</math> è sostituito con il blocco <math>(m_1' \oplus t)</math>, calcolato al punto 1;
# <math>m'' = m \| [(m_1' \oplus t) \| m_2' \| \dots \| m_x']</math>: si concatena ad <math>m</math> la versione modificata di <math>m'</math>.
Il calcolo del CBC-MAC per il messaggio <math>m''</math>procede come segue:
# viene calcolato il MAC fino a <math>m</math>, che equivale a <math>t</math>: <math>E_{K_\text{MAC}}(m) = t</math>
# viene calcolato il MAC del blocco <math>(m_1' \oplus t)</math>, effettuando lo XOR del valore ottenuto al passo 1 con il primo blocco modificato di <math>m'</math> e quindi sottoponendo il risultato al cifrario a blocchi: <math>{\displaystyle E_{K_{\text{MAC}}}(t\oplus (m_{1}'\oplus t))} </math> per le proprietà di <math>\oplus </math> i due tag <math>t</math> si annullano, viene quindi eliminato il contributo di <math>t</math> al MAC finora calcolato: <math>E_{K_\text{MAC}}(t\oplus (m_1' \oplus t)) = E_{K_\text{MAC}}(m_1' \oplus t \oplus t) = E_{K_\text{MAC}}(m_1')</math>
# continuando da <math>E_{K_\text{MAC}}(m_1')</math>, si procede con il calcolo del MAC sui blocchi restanti <math> m_2' \| \dots \| m_x'</math>, che coincide dunque con il MAC di <math>m'</math>: <math>E_{K_\text{MAC}}(m') = t'</math> ottenendo pertanto <math>t'</math> e quindi che il tag di <math>m''</math> coincide con <math>t'</math>.
Questo problema non può essere risolto aggiungendo un blocco di lunghezza del messaggio (e.g., con [[Merkle-Damgård strengthening]]).