Sikkerhed af AES modmodus vs CBC-tilstand

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

For AES-CBC at være CPA sikre, at den IV, der bruges, skal vælges tilfældigt for hver pakke. Hvis IV er forudsigelig, end krypteringen ikke er CPA sikker. Er det samme tilfældet for AES-CTR-tilstand? det vil sige for AES-CTR-tilstand skal den første tæller være tilfældig, eller det kan være en nonce Tak

1 Answers


Patrick K 07/31/2017.

Kravet til AES-CTR-indgangsblokke er, at de skal være unique i løbet af en nøgles levetid. I de fleste tilfælde anvendes en tilfældig 96bit nonce med en 32bit-tæller, der starter fra 0. Hvis den samme indtastningsblok for AES-CTR forekommer to gange, er AES-CTR ikke længere CPA-sikret. I dette tilfælde kan dette skyldes en modstrømning efter $ 2 ^ {32} $ blokke eller på grund af at kollidere tilfældigt valgte 96bit nonces (fødselsdag paradoks: 50% chance efter $ \ sqrt {2 ^ {96}} $ messages. Overvej følgende tilfælde:

To forskellige 1-blokbeskeder $ P $ og $ P '$ sendes under den samme nøgle $ K $ (der kan forhandles på forhånd) og med samme $ N $. Attackeren ved, at de tilhørende chiffertekster $ C $ og $ C '$ hvor beregnes ved XORing dem med keystream (som er baseret på nonce og tælleren):

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

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

Så angriberen kan simpelthen xor chifferteksterne

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

og han får afstanden mellem de to enkle tekster. På grund af afskedigelser på engelsk kan han muligvis bestemme $ P $ og $ P '$.

Dette problem er også kendt som "to-times-pad". Når den samme keystream er XORed med plaintext, kommer vi ind i problemer. Derfor er det vigtigt, at input til AES-kryptering er unik i løbet af en nøgles levetid. Det behøver ikke at være uforudsigeligt, bare enestående.

5 comments
Evgeni Vaknin 07/31/2017
af sætningen "2 ^ 32 meddelelser" Jeg mener du mener 2 32 blokke med 16 byte hver i AES? Hvis det er tilfældet, er 2 ^ 32 blokke tid 2 ^ 32 * 128 bits, som er i 10Gbps, ca. 1 minut ... så hvert 1 minut skal en nøgleudvekslingsalgoritme udføres for at oprette en ny nøgle og nonce ?
1 Patrick K 07/31/2017
Ja du har ret. Jeg har redigeret svaret. Hvis du har en statisk nonce, så skal du gøre en nøgleudveksling hvert minut i dette tilfælde. Men da nonce normalt ændres med hver besked, er du begrænset til meddelelser med en maksimal længde på $ 2 ^ {32} \ cdot128 $ bits. Det maksimale antal beskeder, der kan sendes under en given nøgle, er begrænset af fødselsdags paradoks. Hvis 96bit nonce vælges ensartet tilfældigt for hver besked, er sandsynligheden for en nonce-kollision $ \ ca 0,5q ^ 2/2 ^ {96} $ for q meddelelser. Hvis du vil have dette udtryk højst 1%, er din $ q_ {max} = 4 \ cdot10 ^ {13} $.
Evgeni Vaknin 07/31/2017
Hvad sker der, hvis jeg ikke bruger tilfældig nonce, hellere bruger jeg en tilfældig værdi for nonce-startværdien og end forøg det hver pakke? Lad os f.eks. Sige, at hver pakke indeholder mindre end 256 AES-blokke (128 bit hver), og tælleren for AES-CTR er sammensat af nonce på 120 bits, der initialiseres tilfældigt, når nøglen udveksles, og end inden for pakken 8 bits tæller bruges til at tælle 128 bitblokkene. Og hver nye pakke, (fortsæt i næste kommentar)
Evgeni Vaknin 07/31/2017
Jeg øger nonce med 1, og fjern 8 bit tælleren. I dette tilfælde er fødselsdag paradoks ikke relevant, da kollision er umuligt (forudsat at jeg erstatter nøglen, før 120 bit-tælleren af ​​nonce udløb)
1 Patrick K 08/01/2017
Ja, hvis du på en eller anden måde sørger for, at du aldrig genbruger det samme (input-block, key) -par til nøgle generation, så er alt fint. (selvfølgelig forudsat at nøglen holdes hemmelig og vælges ensartet fra tilfældigt)

Related questions

Hot questions

Language

Popular Tags