AES 256, IV ripetute e carico utile per lo più costante: come va bene / male?

5

Recentemente mi sono imbattuto in un'applicazione che più o meno fa questo:

  • inizia da un tasto (apparentemente sconosciuto agli altri)
  • genera un IV casuale
  • crittografa alcuni payload di dimensioni ridotte (~ 160 byte) con la chiave e genera IV utilizzando AES256 in modalità CBC
  • [> = il 60% del carico utile è composto da due o tre parole ASCII, scelti da un elenco apparentemente sconosciuto ma più o meno facilmente ipotizzabile di alcune dozzine di elementi]
  • ottiene un'altra IV semplicemente facendo qualche calcolo matematico sulla chiave. Questo IV sarà lo stesso per ogni pacchetto, in assoluto, e il codice per generarlo dalla chiave è pubblicamente noto.
  • crittografa un'intestazione piccola (32 byte) con la chiave e IV derivata utilizzando AES256 in modalità CBC
  • [la maggior parte di questa intestazione è costituita da dati fissi come "versione di protocollo" che dovrebbero essere considerati pubblicamente noti, quindi contiene un timestamp unix (dati noti se si conosce quando il pacchetto è stato trasmesso) e l'IV casuale utilizzato prima per la parte del payload]
  • trasmette l'intestazione e il carico utile crittografati risultanti sul filo

La parte ricevente conosce la chiave (pre-condivisa), rigenera la "intestazione IV" da quella, decrittografa l'intestazione, ottiene il carico utile IV da lì, decrittografa il carico utile.

L'intera roba si ripete per ogni pacchetto, e l'applicazione tipica avrebbe da 5 a 50 pacchetti al secondo sul filo, e dal momento che molti di loro sono solo "informazioni sullo stato", l'unica differenza tra il loro testo chiaro sarebbe unix timestamp e il (pseudo) carico utile generato a caso IV.

Non sono sicuramente un esperto di crittografia, ma per quanto ne so "l'IV derivato dalla chiave utilizzata per crittografare 32 byte, 28 dei quali sono fissi e / o facilmente ipotizzabili" dovrebbe almeno suonare un allarme.

Come potrebbe essere considerata la sicurezza di tale approccio? - "sicurezza" definita come mantenere la chiave e / o il payload segreto anche se qualcuno potesse intercettare pacchetti dal filo.

    
posta Luke404 15.07.2014 - 07:58
fonte

3 risposte

4

Le conseguenze di un riutilizzo IV vanno da "gravi" a "drammatiche", a seconda della modalità di crittografia. AES, di per sé, è una cifra di blocco : elabora blocchi di 128 bit. Quando si crittografa un messaggio (con una lunghezza diversa da esattamente 16 byte), si deve usare una modalità di cifratura a blocco di operazione . Molte di queste modalità sono "sequenziali" in qualche modo, con uno stato di esecuzione, e la IV è il valore iniziale per quello stato.

Se la modalità di crittografia è CTR (come è comune in molte moderne modalità estese come < a href="http://en.wikipedia.org/wiki/Galois/Counter_Mode"> GCM ), il riutilizzo IV è mortale, perché quindi la crittografia degrada al famigerato pad multifunzione . Con la modalità CBC , il riutilizzo IV è un po 'meno critico, ma serio. In particolare, una IV riutilizzata è anche, per definizione, una prevedibile IV, che può essere sfruttata in attacchi di testo in chiaro scelti come l'attacco BEAST.

Un commento più generale è che un IV riutilizzato è un segno di incompetenza; è improbabile che la suddetta incompetenza si sia fermata al riutilizzo IV. È probabile che altri elementi dell'intero protocollo siano mal progettati in modo simile. I punti deboli non viaggiano da soli ...

    
risposta data 15.07.2014 - 14:55
fonte
1

Ciò che hai spiegato sembra simile alla crittografia WEP per 802.11. Anch'io non sono un crittologo, ma ho letto i documenti Aircrack-ng parecchie volte. L'utilizzo di questa tecnica di crittografia per un set di dati statici apre l'applicazione a attacchi basati su statistiche come Korek e FMS. Una spiegazione approfondita di come questi attacchi vengono eseguiti su WEP può essere trovata qui . E ci sono molte più risorse che possono essere trovate qui che spiegano altri attacchi ai protocolli di crittografia 802.11.

    
risposta data 15.07.2014 - 09:39
fonte
0

Non sono nemmeno esperto, ma da quello che ho capito, il carico utile effettivo è crittografato con una IV casuale (apparentemente unica) per ogni pacchetto, che è il modo giusto di fare le cose. Non importa che i carichi utili siano molto simili.

L'intestazione, al contrario, è molto suscettibile agli attacchi (vedi questa domanda per una spiegazione più approfondita), ma dal momento che sono comunque dati pubblici, non credo che questo sia un problema: la chiave AES non può essere recuperata da note ciphertexts per quanto ne so.

La mia preoccupazione principale è che l'IV fisso viene generato tramite "matematica" non descrittiva eseguita sulla chiave. A seconda di ciò che accade realmente qui, alcune informazioni potrebbero far trapelare la chiave e davvero non la vuoi.

Per riassumere, questo non è sicuramente il modo standard per fare le cose, e il modo in cui l'intestazione è crittografata mi sembra altamente insicuro. È abbastanza insicuro da rivelare anche il contenuto del carico utile? Forse avremmo bisogno di più informazioni da raccontare. La crittografia del payload mi sembra comunque valida. Che ne dici di mantenere le cose semplici? Se questa intestazione è composta da dati pubblici, non dovrebbe essere crittografata e, in ogni caso, non ha senso utilizzare diversi IV per l'intestazione e il payload. Utilizza la IV casuale per l'intero pacchetto o non crittografare l'intestazione (e il canale che ha risolto IV)!

    
risposta data 15.07.2014 - 10:56
fonte

Leggi altre domande sui tag