CBC-MAC: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
→Sicurezza con messaggi di lunghezza fissa e variabile: spazi; riformulo |
|||
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 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>.
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))}
# 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>
Questo problema non può essere risolto aggiungendo un blocco di lunghezza del messaggio (e.g., con [[Merkle-Damgård strengthening]]).
| |||