CBC-MAC: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m typo, cat
FixBot (discussione | contributi)
m Bot: sostituisco l'entitità '—' con '—'
Riga 17:
Supponiamo che un utente effettui la crittografia di un messaggio <math>m_0 \| m_1 \| \cdots \| m_{x-1}</math> in modalità CBC usando un IV <math>c_{-1}</math> ed ottenendo il seguente testo cifrato: <math>c_0 \| c_1 \| \cdots \| c_{x-1}</math>, dove <math>c_i = E_k(m_i \oplus c_{i-1})</math>. Inoltre, genera il codice CBC-MAC per IV e per il messaggio: <math>t=M(m_{-1} \| \cdots \| m_{x-1}).</math>.
 
Adesso un attaccante può cambiare ogni bit prima dell'ultimo blocco <math>c_{x-1}</math> e il codice MAC sarà ancora valido. La ragione è che <math>t = E_k(m_{x-1} \oplus c_{x-2}) = c_{x-1}</math> (questa è attualmente la ragione per cui le persone commettono questo errore così frequentemente&mdash;ciòfrequentemente—ciò permette di incrementare le performance di un fattore pari a due). Da adesso finchè l'ultimo blocco non è cambiato l'equivalenza <math>t =\ c_{x-1}</math> 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.