CBC-MAC: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Botcrux (discussione | contributi)
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}}[cita web|url=http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=31136&ICS1=35&ICS2=40&ICS3= |titolo=ISO/IEC 9797-2:2002]|lingua=en}}
* {{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]]