Säkerhet för AES-modläge vs CBC-läge

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

För att AES-CBC ska vara CPA-säker, måste den IV som används slumpmässigt väljas för varje paket. Om IV är förutsägbar än krypteringen är inte CPA säker. Är det samma för AES-CTR-läge? det vill säga för AES-CTR-läget måste den första räknaren vara slumpmässig eller det kan vara en nonce? Tack

1 Answers


Patrick K 07/31/2017.

Kravet på AES-CTR-inmatningsblocken är att de borde vara unique under en nyckels livstid. I de flesta fall används en slumpvis 96bit nonce med en 32bit-räknare som startar från 0. Om samma inmatningsblock för AES-CTR uppträder två gånger är inte AES-CTR längre CPA-säker. I det här fallet kan detta bero på ett motflöde efter $ 2 ^ {32} $ block eller på grund av att man slumpmässigt valt 96bit nonces (födelsedags paradox: 50% chans efter $ \ sqrt {2 ^ {96}} $ messages. Tänk på följande fall:

Två separata 1-Block-meddelanden $ P $ och $ P '$ skickas under samma nyckel $ K $ (som kan förhandlas fram på förhand) och med samma nonce $ N $. Attackeren vet att de relaterade chiffertexterna $ C $ och $ C '$ där de beräknas genom att XORing dem med nyckelströmmen (som är baserad på nonce och disken):

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

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

Då kan angriparen helt enkelt uttrycka chiffertexten

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

och han får "avståndet" mellan de två rena texterna. På grund av uppsägningar på engelska kan han bestämma $ P $ och $ P '$.

Detta problem är också känt som "två-time-pad". När samma nyckelström är XORed med plaintext kommer vi in ​​i problem. Därför är det viktigt att ingången för AES-kryptering är unik under en tangents livstid. Det behöver inte vara oförutsägbart, bara unikt.

5 comments
Evgeni Vaknin 07/31/2017
av uttalandet "2 ^ 32 meddelanden" Jag tror du betyder 2 ^ 32 block med 16 byte vardera i AES? Om så är fallet är 2 ^ 32 * 128 bitar 2 ^ 32 * 128 bitar, vilket är i 10 Gbps, ca 1 minut ... så varje 1 minut måste en nyckelväxlingsalgoritm utföras för att skapa en ny nyckel och nonce ?
1 Patrick K 07/31/2017
Ja du har rätt. Jag har redigerat svaret. Om du har en statisk nonce, skulle du behöva göra en nyckelbyte varje minut i det här fallet. Men eftersom nonceen vanligtvis ändras med varje meddelande, är du begränsad till meddelanden med en maximal längd på $ 2 ^ {32} \ cdot128 $ bits. Det maximala antalet meddelanden som kan skickas under en viss nyckel begränsas av födelsedagsparoxen. Om 96bit nonce är vald slumpmässigt för varje meddelande är sannolikheten för en nonce-kollision $ \ ca 0,5q ^ 2/2 ^ {96} $ för q meddelanden. Om du vill att den här terminen ska vara högst 1%, är din $ q_ {max} = 4 \ cdot10 ^ {13} $.
Evgeni Vaknin 07/31/2017
Vad händer om jag inte använder slumpmässigt nonce, hellre använder jag ett slumpmässigt värde för nonce initialvärdet och ökar det varje paket? Låt oss säga att varje paket innehåller mindre än 256 AES-block (128 bitar vardera), och räknaren för AES-CTR är sammansatt av nonce 120 bitar, som initialiseras slumpmässigt när nyckeln byts ut och än inom paketet 8 bitar räknaren används för att räkna 128 bitarna. Och varje nytt paket, (fortsätt i nästa kommentar)
Evgeni Vaknin 07/31/2017
Jag ökar nonce med 1 och rensar 8 biträknaren. I detta fall är födelsedagsparoxen inte relevant, eftersom kollisionen är omöjlig (förutsatt att jag ersätter nyckeln innan 120 biträknaren av nonceen utgått)
1 Patrick K 08/01/2017
Ja, om du på något sätt ser till att du aldrig återanvända samma (inmatningsblock, nyckel) par för nyckelströmgenerationen, så är allt bra. (naturligtvis förutsatt att nyckeln hålls hemlig och väljs enhetligt från slumpmässigt)

Related questions

Hot questions

Language

Popular Tags