Sicurezza della modalità contatore AES rispetto alla modalità CBC

Evgeni Vaknin 09/05/2017. 1 answers, 401 views
aes cbc ctr nonce

Affinché AES-CBC sia protetto da CPA, l'IV utilizzato deve essere selezionato casualmente per ciascun pacchetto. Se l'IV è prevedibile, la crittografia non è sicura da CPA. Lo stesso vale per la modalità AES-CTR? cioè, per la modalità AES-CTR il primo contatore deve essere casuale o può essere un nonce? Grazie

1 Answers


Patrick K 07/31/2017.

Il requisito per i blocchi di input AES-CTR è che dovrebbero essere unique durante la vita di una chiave. Nella maggior parte dei casi, viene utilizzato un nonce a 96 bit casuale con un contatore a 32 bit che inizia da 0. Se lo stesso blocco di input per AES-CTR si verifica due volte, AES-CTR non è più protetto da CPA. In questo caso, ciò può essere dovuto a un overflow dopo $ 2 ^ {32} $ blocchi oa causa della collisione di nonce a 96 bit scelti casualmente (paradosso di compleanno: 50% di possibilità dopo $ \ sqrt {2 ^ {96}} $ messaggi. Considera il seguente caso:

Due distinti messaggi 1-Block $ P $ e $ P '$ sono inviati sotto la stessa chiave $ K $ (che potrebbe essere negoziata in anticipo) e con lo stesso nonce $ N $. L'utente malintenzionato sa che i testi cifrati relativi $ C $ e $ C '$ vengono calcolati da XOR con il keystream (che si basa sul nonce e sul contatore):

$ C = P \ oplus E_K (N, 0) $

$ C '= P' \ oplus E_K (N, 0) $

Quindi l'attaccante può semplicemente xor i testi cifrati

$ C \ oplus C '= P \ oplus E_K (N, 0) \ oplus P' \ oplus E_K (N, 0) = P \ oplus P '$

e ottiene la "distanza" tra i due testi in chiaro. A causa delle ridondanze nella lingua inglese, potrebbe essere in grado di determinare $ P $ e $ P '$.

Questo problema è anche noto come "two-time-pad". Una volta che lo stesso keystream è XORed con il testo in chiaro, ci mettiamo nei guai. Pertanto, è importante che l'input per la crittografia AES sia unico durante la vita di una chiave. Non deve essere imprevedibile, solo unico.

5 comments
Evgeni Vaknin 07/31/2017
dalla frase "2 ^ 32 messaggi" penso che tu intenda 2 ^ 32 blocchi di 16 byte ciascuno in AES? in tal caso, che il tempo di 2 ^ 32 blocchi è 2 ^ 32 * 128 bit, che è in 10 Gbps, circa 1 minuto ... quindi ogni 1 minuto deve essere eseguito un algoritmo di scambio chiavi per impostare una nuova chiave e nonce ?
1 Patrick K 07/31/2017
Sì hai ragione. Ho modificato la risposta. Se si dispone di un nonce statico, in questo caso è necessario eseguire uno scambio di chiavi ogni minuto. Ma poiché il nonce viene solitamente modificato con ogni messaggio, sei limitato a messaggi di una lunghezza massima di $ 2 ^ {32} \ cdot128 $ bit. Il numero massimo di messaggi che possono essere inviati con una determinata chiave è limitato dal paradosso del compleanno. Se il nonce a 96 bit viene scelto in modo uniforme a caso per ogni messaggio, la probabilità di una collisione non fisica è $ \ approx 0.5q ^ 2/2 ^ {96} $ per i messaggi q. Se vuoi che questo termine sia al massimo dell'1%, il tuo $ q_ {max} = 4 \ cdot10 ^ {13} $.
Evgeni Vaknin 07/31/2017
Cosa succede se non uso nonce casuale, piuttosto io uso un valore casuale per il valore iniziale nonce e lo incremento ogni pacchetto? Ad esempio, diciamo che ogni pacchetto contiene meno di 256 blocchi AES (128 bit ciascuno) e il contatore per AES-CTR è composto da nonce di 120 bit, inizializzati casualmente quando la chiave viene scambiata e che all'interno del pacchetto 8 bit contatore è usato per contare i blocchi a 128 bit. E ogni nuovo pacchetto, (continua nel prossimo commento)
Evgeni Vaknin 07/31/2017
Aumentare il nonce di 1 e azzerare il contatore a 8 bit. In questo caso, il paradosso del compleanno non è rilevante, poiché la collisione è impossibile (supponendo che sto sostituendo la chiave prima del contatore a 120 bit del nonce scaduto)
1 Patrick K 08/01/2017
Sì, se in qualche modo ti assicuri di non riutilizzare mai la stessa coppia (input-block, key) per la generazione di keystream, allora tutto va bene. (naturalmente supponendo che la chiave sia tenuta segreta e sia scelta in modo uniforme da casuale)

Related questions

Hot questions

Language

Popular Tags