CBC-MAC: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: fix citazione web (v. discussione) |
|||
Riga 8:
==Lunghezza dei messaggi variabile==
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 CBC-MAC <math>(m,t)</math>, <math>(m',t')</math> può generare un terzo messaggio <math>m''</math> il cui CBC-MAC sia <math>t'</math>. Ciò è possibile semplicemente effettuando lo XOR tra il primo blocco di <math>m'</math> con <math>t</math> e quindi concatenando <math>m</math> con questa versione modificata di <math>m'</math>, es.facendo <math>m'' = m \| [(m_1' \oplus t) \| m_2' \| \dots \| m_x']</math>.
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, [[OMAC/CMAC|CMAC]] per proteggere l'integrità dei messaggi a lunghezza variabile.
Riga 15 ⟶ 14:
Un errore comune è riutilizzare la stessa chiave <math>k</math> 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 <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 è 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 <math>t =\ c_{x-1}</math> rimane valida e cos' il codice CBC-MAC è corretto.
Riga 22 ⟶ 21:
==Voci correlate==
* [[Cipher Block Chaining
* [[Message authentication code]]
* [[CMAC]]
==Riferimenti==
* {{
* {{en}}{{pdf}}[http://www.cs.ucdavis.edu/research/tech-reports/1997/CSE-97-15.pdf The security of the cipher block chaining message authentication code.]
{{Portale|crittografia}}
[[Categoria:Codici di autenticazione dei messaggi]]
| |||