Crittografia utilizzando AES 256, ho bisogno di IV? [duplicare]

18

Sto esaminando la crittografia con AES usando una chiave a 256 bit, e noto che un certo numero di metodi in varie lingue, ad esempio link , e noto che il parametro IV è facoltativo. Questo significa che posso implementare completamente la crittografia / decrittografia AES con una singola stringa a 256 bit come chiave? Quale scopo serve l'IV e la sicurezza verrà significativamente ridotta se la ometto?

Scusa per la mia ignoranza, sono stato buttato a capofitto in un compito che mi sento piuttosto disorientato, cercando di mettere tutto insieme:)

Grazie!

    
posta DanH 02.05.2013 - 10:53
fonte

2 risposte

10

Se si utilizza ogni chiave solo una volta, non si utilizza una IV. Se usi più volte una chiave, dovresti usare una IV diversa ogni volta, quindi una coppia (chiave, IV) non viene riutilizzata.

I requisiti esatti per l'IV dipendono dalla modalità di concatenazione scelta, ma un valore casuale a 128 bit di solito va bene. Dovrebbe essere diverso per ogni messaggio che crittografate. Memorizzalo accanto al testo cifrato, in genere come prefisso.

    
risposta data 02.05.2013 - 10:57
fonte
17

Supponete di crittografare due messaggi con la stessa chiave, ei due messaggi iniziano con gli stessi 16 byte di testo in chiaro. (16 byte è la dimensione del blocco per AES, indipendentemente dalla dimensione della chiave.) Il primo blocco di testo cifrato sarà lo stesso? Se lo è, stai già perdendo alcune informazioni all'attaccante. Se questa informazione è sensibile o meno dipende dalla tua applicazione, ma è già un brutto segno. Se la crittografia perde più del segno dei messaggi, non sta facendo il suo lavoro.

L'idea di base di un IV è di anteporre un po 'di contenuto casuale a ciascun messaggio, in modo di principio. Come funziona esattamente dipende dalla modalità. (L'operazione di base di AES funziona solo su blocchi di 16 byte. Una modalità è un modo per estenderlo a messaggi più lunghi.) Ad esempio, con CBC , la crittografia di ogni blocco è calcolata dalla chiave, dal blocco di testo in chiaro e dal testo cifrato del blocco precedente; per il primo blocco, l'IV viene usato al posto del testo cifrato del blocco precedente inesistente. L'IV viene normalmente inviato in chiaro accanto al testo cifrato, di solito viene inviato un primo 16 byte del messaggio crittografato.

La modalità

CTR utilizza tecnicamente un contatore e non una IV, ma operativamente funzionano in modo molto simile : un valore casuale di 16 byte viene generato a caso dal mittente e inviato all'inizio del messaggio crittografato. Con la modalità CTR, riutilizzare quel valore per un altro messaggio è catastrofico, in quanto il CTR funziona con XORing del testo in chiaro con uno stream pseudocasuale dedotto dalla chiave e dal contatore. Se hai due messaggi cifrati che usano lo stesso valore contatore, il loro XOR è lo XOR dei due testi in chiaro.

Ci sono più attacchi contro le IV scelte in modo improprio di quanto non abbia elencato qui. Genera un IV casuale per ogni messaggio (usando un generatore casuale di qualità crittografica, lo stesso che utilizzerai per generare una chiave), e starai bene.

C'è un'eccezione: se si genera una nuova chiave per ogni messaggio, è possibile selezionare una IV prevedibile (all-bit 0 o qualsiasi altra cosa). È comunque necessario utilizzare una modalità con una IV (ECB non è soddisfacente, ad esempio espone le ripetizioni nel testo in chiaro poiché due blocchi di input identici avranno la stessa crittografia). Questo è un caso raro (si verifica per l'archiviazione, non per la comunicazione).

Si noti che la crittografia a priori garantisce solo la riservatezza dei dati, non la sua integrità. A seconda di cosa fai con i dati, questo potrebbe essere un problema. In particolare, se un utente malintenzionato può inviare decrittografati provvisori per essere decifrato, o può fornire ulteriori testi in chiaro da crittografare, questo può esporre alcune informazioni. Alcune modalità come EAX e GCM fornisce crittografia autenticata : un testo cifrato verrà decifrato solo se è autentico. Utilizzare uno di questi se possibile.

Nota anche che AES-128 è praticamente sicuro in pratica come AES-256 .

Se non ti senti a tuo agio con ciò che stai facendo, prova a utilizzare alcune librerie di alto livello anziché cimentarti direttamente con la crittografia.

    
risposta data 02.05.2013 - 12:14
fonte

Leggi altre domande sui tag