Bezpieczeństwo trybu licznika AES względem trybu CBC

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

Aby AES-CBC było bezpieczne dla CPA, używane IV musi być losowo wybrane dla każdego pakietu. Jeśli IV jest przewidywalny, to szyfrowanie nie jest bezpieczne dla CPA. Czy to samo dotyczy trybu AES-CTR? to znaczy, dla trybu AES-CTR pierwszy licznik musi być losowy lub może być jednorazowy? Dzięki

1 Answers


Patrick K 07/31/2017.

Wymaganie dotyczące bloków wejściowych AES-CTR polega na tym, że powinny one być unique przez cały okres istnienia klucza. W większości przypadków losowy 96-bitowy nonce jest używany z 32-bitowym licznikiem rozpoczynającym się od 0. Jeśli ten sam blok wejściowy dla AES-CTR występuje dwa razy, AES-CTR nie jest już bezpieczny CPA. W tym przypadku może to być spowodowane przepełnieniem po $ 2 ^ {32} $ bloki lub z powodu kolizji losowo wybranych 96-bitowych noncesów (paradoks urodzinowy: 50% szans po $ \ sqrt {2 ^ {96}} $ wiadomości. Rozważmy następujący przypadek:

Dwa odrębne komunikaty 1-Block $ P $ i $ P '$ są wysyłane pod tym samym kluczem $ K $ (który może być wcześniej wynegocjowany) iz tym samym $ N $. Atakujący wie, że powiązane teksty szyfrów $ C $ i $ C '$ zostały obliczone poprzez Xorowanie ich strumieniem klucza (który opiera się na nonce i liczniku):

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

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

Następnie atakujący może po prostu napisać tekst szyfrów

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

i uzyskuje "odległość" pomiędzy dwoma zwykłymi tekstami. Ze względu na zwolnienia w języku angielskim, może on być w stanie określić $ P $ i $ P '$.

Ten problem jest również znany jako "podwójny pad". Kiedy ten sam strumień klucza zostanie XORed z tekstem jawnym, wpadamy w kłopoty. Dlatego ważne jest, aby dane wejściowe do szyfrowania AES były unikalne przez cały okres istnienia klucza. To nie musi być nieprzewidywalne, tylko wyjątkowe.

5 comments
Evgeni Vaknin 07/31/2017
przez stwierdzenie "2 ^ 32 wiadomości" Myślę, że masz na myśli 2 ^ 32 bloki po 16 bajtów każdy w AES? jeśli tak, to 2 2 32 bloków czas wynosi 2 ^ 32 * 128 bitów, czyli 10 Gb / s, około 1 minuty ... więc co 1 minutę musi być wykonany algorytm wymiany klucza w celu ustawienia nowego klucza i jednorazowo ?
1 Patrick K 07/31/2017
Tak, masz rację. Edytowałem odpowiedź. Jeśli masz statyczny nonce, to w tym przypadku musisz wykonać wymianę kluczy co minutę. Ale ponieważ nonce jest zwykle zmieniany przy każdej wiadomości, jesteś ograniczony do wiadomości o maksymalnej długości $ 2 ^ {32} \ cdot128 $ bitów. Maksymalna liczba wiadomości, które można wysłać pod danym kluczem, jest ograniczona przez paradoks urodzin. Jeśli 96-bitowy nonce jest wybierany losowo dla każdej wiadomości losowo, prawdopodobieństwo wystąpienia kolizji bez znaku wynosi $ \ approx 0.5q ^ 2/2 ^ {96} $ dla q wiadomości. Jeśli chcesz, aby ten termin wynosił co najwyżej 1%, Twoje $ q_ {max} = 4 \ cdot10 ^ {13} $.
Evgeni Vaknin 07/31/2017
Co się stanie, jeśli nie użyję losowej wartości jednorazowej, a zamiast tego użyję losowej wartości początkowej wartości i zwiększę ją o każdy pakiet? Na przykład, powiedzmy, że każdy pakiet zawiera mniej niż 256 bloków AES (po 128 bitów), a licznik dla AES-CTR składa się z 120 bitów, które są inicjowane losowo po wymianie klucza, a następnie w pakiecie 8 bitów licznik służy do zliczania bloków 128-bitowych. I każdy nowy pakiet, (kontynuuj w następnym komentarzu)
Evgeni Vaknin 07/31/2017
Zwiększam wartość o 1 i usuwam licznik 8-bitowy. W tym przypadku paradoks urodzin nie jest istotny, ponieważ kolizja jest niemożliwa (zakładając, że wymieniam klucz przed upływem 120-bitowego licznika)
1 Patrick K 08/01/2017
Tak, jeśli w jakiś sposób upewnisz się, że nigdy nie użyjesz ponownie tej samej pary (input-block, key) do generowania klucza, to wszystko jest w porządku. (oczywiście przy założeniu, że klucz jest trzymany w tajemnicy i wybierany losowo z losowego)

Related questions

Hot questions

Language

Popular Tags