AES CBC su TCP - quando è necessario un nuovo IV

3

Sto lavorando a un progetto in cui due dispositivi comunicheranno con AES con CBC su TCP. Abbiamo già un meccanismo sicuro per condividere la chiave di crittografia / decrittografia. Non sono sicuro che sia necessario avere una IV casuale o meno, o quanto spesso iniziare un nuovo "messaggio".

Ecco come penso che funzionerà:

Entrambe le parti inviano messaggi di saluto l'un l'altro per segnalare l'inizio del canale. Il messaggio di ogni lato inizierà con un IV casuale. Dopo questo punto, ciascuna parte invia occasionalmente un piccolo messaggio all'altro che sarà incatenato dai messaggi precedenti. Questo probabilmente continuerà per alcuni minuti ma potrebbe continuare all'infinito.

Funziona? Ogni messaggio ha bisogno di una nuova IV? Ogni sessione potenziale avrà una nuova chiave di crittografia, quindi sono necessari IV casuali?

    
posta hooby3dfx 24.09.2012 - 19:28
fonte

2 risposte

4

Ci sono tre punti da fare, penso:

  1. Non creare i tuoi protocolli! o, almeno, non credere che il risultato sia sicuro. Altrimenti, attenersi a protocolli ben studiati, come SSL. Se il tuo obiettivo è imparare, allora vai avanti.

  2. In CBC, l'IV (o blocco precedente) deve essere imprevedibile per l'attaccante. Considera SSL, in cui i dati sono suddivisi in record (i tuoi "messaggi"). Ogni record viene inviato atomicamente. In SSL 3.0 e TLS 1.0, l'ultimo blocco di un record è anche IV per il record successivo; ciò significa che un utente malintenzionato che osserva lo stream e essere in grado di immettere alcuni dati personali nel flusso di testo in chiaro può osservare un record, imparare l'IV per il record successivo e quindi calcola i dati in chiaro che desidera inserire nel prossimo record. Questa è la base per il attacco BEAST che è stato pubblicato l'anno scorso per SSL (in realtà un attacco più vecchio, ma NEAST significa renderlo plausibile nel contesto HTTPS). Quindi, per riassumere: devi scegliere una nuova IV casuale (con un generatore crittograficamente strong) ogni volta che stai per crittografare i dati in chiaro che sono stati ottenuti dopo dopo aver inviato sul filo il precedente blocco crittografato.

  3. Hai bisogno di un controllo di integrità; in caso contrario, un utente malintenzionato potrebbe modificare i propri messaggi e, a parte l'evidente problema dell'utilizzo di dati danneggiati, ciò potrebbe mettere a rischio anche la loro riservatezza. Fatti un favore e usa una modalità di crittografia che include l'integrità, ad es. EAX . Questo rende il problema molto più semplice:

    • L'IV non deve più essere imprevedibile, solo non ripetitivo. Un semplice contatore farà.
    • Hai bisogno di una nuova IV ogni volta che inizi un nuovo messaggio.
    • Per costruzione, il destinatario non può elaborare un messaggio senza averlo ricevuto completamente (perché il suo contenuto non può essere considerato attendibile fino a quando l'integrità non è stata verificata). Quindi il tuo incentivo a rompere i dati nei messaggi è limitare l'utilizzo della RAM sul ricevitore; e devi chiudere il messaggio corrente ogni volta che vuoi "svuotare" i dati.

    Il vecchio modo per aggiungere integrità consiste nell'utilizzare una costruzione MAC indipendente (come HMAC) ma combinando simmetrica la crittografia e un MAC possono essere complicati (vedi questa domanda per i dettagli), quindi è meglio usare EAX (o qualcosa di equivalente come GCM).

risposta data 24.09.2012 - 20:24
fonte
1

I vettori di inizializzazione sono solo progettati per fornire un modo per rendere ogni conversazione unica, in modo che blocchi identici di testo in chiaro non producano blocchi identici di testo cifrato, per la stessa chiave. Ogni nuovo messaggio non ha bisogno di un nuovo IV. Puoi semplicemente utilizzare un IV per conversazione.

Un problema di implementazione da tenere in considerazione è la trasmissione IV. Avrai bisogno di concordare una chiave inizialmente, tramite qualsiasi meccanismo (DH è buono), quindi fornire un MAC sull'IV per assicurarsi che non sia manomesso, in modo simile a come WPA2 (TKIP) esegue lo scambio IV.

Non sono a conoscenza di attacchi a sistemi come il tuo in cui la flebo è statica e la chiave è diversa, ma mi rende nervoso. Comunque non sono un crittografo, quindi non posso darti alcun valido ragionamento. Sono sicuro che qualcuno come Thomas Pornin sarebbe felice di dare una risposta!

    
risposta data 24.09.2012 - 20:16
fonte

Leggi altre domande sui tag