Le IV devono essere imprevedibili?

5

Sto crittografando una sequenza di messaggi con AES/CTR . Per ogni sequenza, genero un IV iniziale casuale, diciamo IV(0) . Definisci IV(i) = MD5(IV(i - 1)) per i = 1, ..., n . Quindi per ogni messaggio m(i) , Trasmetto IV(i) . e(key, IV(i), m(i)) sul canale, dove . indica l'operazione di aggiunta e e(.) è la funzione di crittografia. In altre parole, l'IV di ogni messaggio è derivato dal IV precedente applicando una funzione di hash e Trasmetto le IV lungo il testo cifrato. Perciò, le IV sono distinte (con alta probabilità), ma prevedibile, se hai il precedente.

C'è qualche problema con questo schema di crittografia?

Modifica

Devo usare CTR, a causa di alcuni vincoli di implementazione. Voglio memorizzare i dati crittografati su un dispositivo di archiviazione non sicuro e decrittografarlo, una volta recuperate le informazioni. La riservatezza è la mia priorità principale. L'integrità o la malleabilità del messaggio sono meno importanti. Infatti, il contenuto dei messaggi è la versione compressa di alcuni file altamente strutturati. Cioè, modificando alcuni byte del testo cifrato senza sapere che l'intero testo in chiaro rovina l'integrità del messaggio. Quindi, presumo che la struttura del file imponga una sorta di integrità.

    
posta Oxy 23.02.2015 - 23:59
fonte

1 risposta

2

Con la modalità CTR, gli IV non devono essere imprevedibili o casuali. Tuttavia, devono essere univoci per una determinata chiave, riutilizzare una IV è un difetto fatale per la modalità CTR. Va perfettamente bene per il IV per essere solo i (riempito alla lunghezza appropriata); va bene anche che chiami il tuo nemico mortale e chieda loro che cosa dovresti usare per il tuo messaggio, a condizione che controlli di non aver usato in precedenza la IV; finché lo controlli, non c'è nulla che possa fare per compromettere la crittografia. E dato che hai bisogno di più di "alta probabilità" - hai bisogno di certezza virtuale (per GCM, il NIST specifica una probabilità di 2^-32 che tu mai riusare la chiave e IV, e anche questo è permesso perché è accettabilmente improbabile e ti lascia andare con un po 'di casualità). Un modo decente sarebbe quello di avere i primi 32 bit univoci per la sequenza di messaggi (ad esempio, un valore contatore per la sequenza), e il prossimo 32 essere un indice del messaggio all'interno della sequenza, essendo anche un valore contatore.

Nota: si presume che il tuo IV sia solo una parte degli aspetti non crittografati per creare un keytream. Ad esempio, un modo comune per creare un keystream è concatenare un contatore a 64 bit su un IV a 64 bit; in tal caso, è sufficiente un semplice contatore per la flebo. Se la tua implementazione richiede un IV a 128 bit, probabilmente calcola il keystream come E(k,IV)||E(k,IV+1)||E(k,IV+2)||... , nel qual caso non puoi solo incrementare il IV di una sequenza: ciò renderebbe il keytream% del messaggio 2 co_de %. Se si cripta la stessa cosa con la stessa chiave per costruire due diversi keytreams, questo è male. Con GCM, un IV tipico è di 96 bit e devi solo assicurarti di non ripetere gli IV a 96 bit per due messaggi. Il punto è che se i tuoi messaggi possono essere lunghi fino a E(k,IV+1)||E(k,IV+2)... byte, i primi b bit del tuo IV dovrebbero essere unici tra tutti i messaggi. 96 bit è comune, così come 64 bit.

Detto questo, c'è un problema separato: non hai autenticazione sul tuo sistema. Ciò significa che un attaccante che sa quale parte di un messaggio dice può cambiarlo per dire quello che vuole, purché tutto ciò che vogliono sia della stessa lunghezza della parte del messaggio che conoscono. CTR, come tutti i codici di flusso, è particolarmente facile da fare con. Una modalità AEAD come GCM o CCM o EAX è migliore in quasi tutti i casi: protegge i tuoi messaggi da attacchi attivi. Credo che GCM abbia gli stessi requisiti IV del CTR (vale a dire usato una volta, ma a parte questo non ci sono requisiti) e sono disponibili molte buone implementazioni. (Con GCM, gli IV sono in genere a 96 bit).

    
risposta data 24.02.2015 - 00:34
fonte

Leggi altre domande sui tag