Perché ' t utilizzare la crittografia ECB?
Su Febbraio 18, 2021 da adminSto utilizzando Java per generare stringhe crittografate e ricevo questo avviso in fase di compilazione:
La modalità di crittografia ECB non dovrebbe essere utilizzata
Quindi mi chiedo perché non dovrei usare ECB e cosa posso usare invece ?
Commenti
- I commenti non sono per discussioni estese; questa conversazione è stata spostata in chat .
- Lavori con lo zoom?;)
Risposta
Perché non dovrei utilizzare la crittografia ECB?
Il motivo principale per non utilizzare la crittografia modalità ECB è che “non è id = “28664fc602”>
semanticamente sicuro — vale a dire che la semplice osservazione di un testo cifrato crittografato dalla BCE può far trapelare informazioni sul testo in chiaro (anche oltre la sua lunghezza, che tutti gli schemi di crittografia che accettano testi in chiaro arbitrariamente lunghi avranno una certa perdita).
Specifico ly, il problema con la modalità ECB è che crittografare lo stesso blocco (di 8 o 16 byte, o per quanto grande sia la dimensione del blocco del codice sottostante) di testo in chiaro utilizzando la modalità ECB produce sempre lo stesso blocco di testo cifrato. Ciò può consentire a un utente malintenzionato di:
- rilevare se due messaggi crittografati ECB sono identici;
- rilevare se due messaggi crittografati ECB condividono un prefisso comune;
- rilevare se due messaggi crittografati con ECB condividono altre sottostringhe comuni, a condizione che tali sottostringhe siano allineate ai confini del blocco; oppure
- rilevare se (e dove) un singolo messaggio crittografato con ECB contiene dati ripetitivi (come lunghe sequenze di spazi o byte nulli, campi di intestazione ripetuti o frasi ripetute casualmente nel testo).
Cè “una bella dimostrazione grafica di questa debolezza su Wikipedia, dove la stessa immagine (grezza, non compressa) è crittografata utilizzando sia la modalità ECB che una modalità di cifratura semanticamente sicura (come CBC, CTR, CFB o OFB):
Sebbene questo scenario sia alquanto artificiale (di solito non si crittografano immagini raw come questa), dimostra bene il problema con la modalità ECB: le aree ripetitive nellimmagine in ingresso risultano in schemi ripetitivi nelloutput crittografato, in modo che molte caratteristiche su larga scala dellimmagine rimangano riconoscibili nonostante la crittografia. Nel mondo reale, un crittoanalista che attacca un ECB- crittografia basata sarebbe più probabile che cerchi tali modelli in un dump esadecimale del testo cifrato, ma il principio è lo stesso.
Un caso reale di questa debolezza della crittografia della BCE che contribuisce a una compromissione dei dati del mondo reale è data dalla fuga di dati dal database delle password di Adobe del 2013, come descritto in questa risposta . In questo caso, un elemento che ha contribuito alla gravità della perdita era che, invece di hashing correttamente , Adobe aveva crittografato le password utilizzando la modalità ECB. Ciò ha consentito agli aggressori di individuare rapidamente le password condivise da più account o di condividere un prefisso comune con altre password (come password1 e password2 ) e ha anche rivelato la lunghezza approssimativa di ciascuna password.
La modalità di crittografia ECB presenta anche altri punti deboli, come il fatto che è altamente malleabile : poiché ogni il blocco di testo in chiaro è crittografato separatamente, un utente malintenzionato può facilmente generare nuovi testi cifrati validi mettendo insieme blocchi da testi cifrati osservati in precedenza.
Tuttavia, la malleabilità è un problema solo se la crittografia ECB viene utilizzata senza un codice di autenticazione del messaggio e, in questa situazione, è condiviso (in una certa misura) da tutte le altre modalità di crittografia non autenticate , come i summenzionati CBC, CTR, CFB e OFB. Pertanto, non può davvero essere considerato una debolezza specifica della modalità ECB, anche se tende a essere un problema aggiuntivo quando viene utilizzata la modalità ECB.
Cosa dovrei usare invece?
Dovresti usare una qualsiasi crittografia autenticata modalità, come GCM , EAX o OCB .
Personalmente, per i messaggi brevi, “amo piuttosto la modalità SIV ( RFC 5279 ), che fornisce un ulteriore livello di resistenza alluso improprio. (Molte altre modalità di crittografia si interromperanno piuttosto male se lo stesso IV / nonce viene utilizzato accidentalmente per crittografare più messaggi. La modalità SIV mantiene tutte le sue proprietà di sicurezza in questa situazione, tranne che per la perdita di dati se i messaggi crittografati sono identici.)
Puoi anche utilizzare qualsiasi modalità di crittografia semanticamente sicura tradizionale (come CBC o CTR ), combinato con un codice di autenticazione del messaggio (come HMAC ) utilizzando la crittografia -then-MAC . (Cioè, dovresti prima crittografare il messaggio, quindi calcolare un MAC del testo cifrato e aggiungerlo al testo cifrato.) Finché ti assicuri di verificare il MAC prima di tentare di decrittografare il messaggio, questa costruzione ti proteggerà da le varie vulnerabilità di queste modalità agli attacchi attivi (testo cifrato scelto).
Per crittografia del disco o applicazioni simili che richiedono la capacità di modificare parti del testo cifrato senza ricriptare tutti i dati, dovresti utilizzare una modalità di cifratura progettata a tale scopo, come XTS . Si noti che tali modalità generalmente mancano di resistenza agli attacchi attivi e possono avere altri punti deboli che dovrebbero essere compresi prima di utilizzarli. Se possibile, dovrebbero essere combinati con una qualche forma di protezione dellintegrità, come un MAC su un hash tree .
Commenti
- Cosa suggeriresti nei casi in cui si desidera essere in grado di leggere / scrivere blocchi di un archivio dati in sequenza arbitraria, preferibilmente mentre si effettua una mappa di blocco di tutti gli uno su un quelli bloccano? La mia inclinazione sarebbe quella di crittografare xorando i dati del blocco con un hash molto semplice del numero di blocco, annullando / ripetendo loperazione xor se produce un blocco di tutti gli uno, usando ECB sul risultato e xoring con il complemento del risultato di crittografare un blocco di tutti gli uno [quel complemento deve essere calcolato solo una volta per ogni chiave]. Sembrerebbe un buon approccio?
- @supercat: quella ‘ è fondamentalmente la crittografia del disco , quindi puoi usare modalità progettate per questo. Credo che XTS sia considerata una buona scelta, sebbene, come tutte le modalità di crittografia del disco, abbia i suoi limiti (che dovresti capire prima di usarlo). Se possibile, dovrebbe essere combinato con un MAC di qualche tipo per difendersi da attacchi attivi.
- @IlmariKaronen: penso che si dica ” don ‘ t utilizzare ECB ” è un po eccessivo. Capisco i rischi, ma molte volte (a meno che il tuo documento, ciò che stai crittografando, non sia ‘ molto segreto e lavversario non ‘ non ho troppe capacità, ecc.), dovresti essere a posto.
- @giorgim: ‘ non è davvero un buon motivo utilizzare ECB (tranne come elemento costitutivo per altre modalità). Quasi tutte le librerie crittografiche forniscono almeno la modalità CBC o CTR e, in caso contrario, ‘ sono banali da implementare. Sovrapponi un HMAC (o CMAC) e ‘ sei a posto.
- @giorgim: anche se non ‘ Per avere qualsiasi modalità MAC o AE disponibile, usare CBC è ancora decisamente migliore di ECB. Se hai una funzione MAC, CBC-then-MAC è una modalità AE perfettamente valida.
Answer
Non utilizzare la modalità ECB perché crittograferà blocchi di messaggi identici (cioè la quantità di dati crittografati in ogni invocazione del codice a blocchi) in blocchi di testo cifrato identici. Questo è un problema perché rivelerà se gli stessi blocchi di messaggi sono crittografati più volte. Wikipedia ha unottima illustrazione di questo problema .
Commenti
- Commenti non sono per discussioni estese; questa conversazione è stata spostata nella chat .
Risposta
Come menzionato da @Guut Boy, ECB non è semanticamente sicuro, nel senso che se un messaggio con blocchi identici è crittografato, un aggressore ottiene un certo vantaggio di avere informazioni in chiaro, osservando solo CipherText.
Usa preferibilmente la modalità CBC per crittografare messaggi lunghi. Questa modalità introduce un parametro aggiuntivo chiamato IV (valore iniziale), che si inizializza con il numero di sessione per prevenire attacchi nel caso di crittografare lo stesso messaggio due volte.
Commenti
- IV sta per vettore di inizializzazione, non valore iniziale.
- 1. Questo non è un buon consiglio. Usare la crittografia senza lautenticazione ignora circa un decennio di consigli dai crittografi. Sarebbe meglio utilizzare la crittografia autenticata, come consiglia Ilmari Karonen. 2. Questa risposta sembra essere stata sostituita da Ilmari Karonen ‘ s risposta.
- Oltre a ciò, il fatto è che lIV deve essere imprevedibile per un aggressore (ad es. indistinguibile da casuale), e questa risposta dice che dovresti usare il numero di sessione, che comunemente non è affatto casuale.
Lascia un commento