Formalna analiza została przeprowadzona przez Phila Rogaway'a w 2011 roku tutaj . Sekcja 1.6 zawiera podsumowanie, które tutaj transkrybuję, dodając pogrubiony nacisk (jeśli jesteś niecierpliwy, to jego zaleceniem jest użycie trybu CTR, ale sugeruję przeczytanie moich akapitów na temat integralności wiadomości kontra szyfrowania poniżej).
Zauważ, że większość z nich wymaga losowości IV, co oznacza nieprzewidywalność i dlatego powinno być generowane z bezpieczeństwem kryptograficznym. Jednak niektóre wymagają tylko „nonce”, który nie wymaga tej właściwości, ale zamiast tego wymaga tylko, aby nie była ponownie wykorzystywana. Dlatego projekty, które opierają się na nonce, są mniej podatne na błędy niż projekty, które tego nie robią (i wierzcie mi, widziałem wiele przypadków, w których CBC nie jest zaimplementowane z odpowiednim wyborem IV). Zobaczysz więc, że dodałem pogrubienie, gdy Rogaway mówi coś takiego: „poufność nie jest osiągana, gdy IV jest nonce”, oznacza to, że jeśli wybierzesz swoje IV bezpieczne kryptograficznie (nieprzewidywalne), to nie ma problemu. Ale jeśli tego nie zrobisz, tracisz dobre właściwości bezpieczeństwa. Nigdy nie używaj ponownie IV w żadnym z tych trybów.
Ważne jest również zrozumienie różnicy między integralnością wiadomości a szyfrowaniem. Szyfrowanie ukrywa dane, ale osoba atakująca może zmodyfikować zaszyfrowane dane, a wyniki mogą zostać zaakceptowane przez oprogramowanie, jeśli nie sprawdzisz integralności wiadomości. Podczas gdy programista powie „ale zmodyfikowane dane wrócą jako śmieci po odszyfrowaniu”, dobry inżynier bezpieczeństwa odkryje prawdopodobieństwo, że śmieci spowodują niepożądane zachowanie w oprogramowaniu, a następnie przekształci tę analizę w prawdziwy atak. Widziałem wiele przypadków, w których zastosowano szyfrowanie, ale integralność wiadomości była naprawdę potrzebna bardziej niż szyfrowanie. Zrozum, czego potrzebujesz.
Powinienem powiedzieć, że chociaż GCM ma zarówno szyfrowanie, jak i integralność wiadomości, jest to bardzo delikatna konstrukcja: jeśli ponownie użyjesz IV, to wkręcisz się - atakujący może odzyskać twój klucz. Inne projekty są mniej delikatne, więc osobiście boję się polecić GCM w oparciu o ilość słabego kodu szyfrującego, który widziałem w praktyce.
Jeśli potrzebujesz zarówno integralności wiadomości, jak i szyfrowania, możesz połączyć dwa algorytmy: zwykle widzimy CBC z HMAC, ale nie ma powodu, aby wiązać się z CBC. Ważne jest, aby wiedzieć, najpierw zaszyfruj, a następnie MAC zaszyfrowaną zawartość , a nie na odwrót. Ponadto IV musi być częścią obliczeń MAC.
Nie znam problemów z IP.
A teraz dobre rzeczy profesora Rogaway'a:
Blokuj tryby szyfrów, szyfrowanie, ale nie integralność wiadomości
ECB : Blockcipher, tryb szyfruje wiadomości będące wielokrotnością n bitów, osobno szyfrując każdy n-bitowy kawałek. Właściwości bezpieczeństwa są słabe , metoda przecieka równość bloków w obu pozycjach bloku i czasie. Ma znaczną starszą wartość i ma wartość jako element składowy innych schematów, ale tryb nie osiąga żadnego ogólnie pożądanego celu bezpieczeństwa sam w sobie i należy go używać ze znaczną ostrożnością; EBC nie powinien być traktowany jako tryb poufności „ogólnego zastosowania” .
CBC : schemat szyfrowania oparty na IV, tryb jest bezpieczny jako probabilistyczny schemat szyfrowania, osiągając nie do odróżnienia od losowych bitów, zakładając losowy IV. Poufność nie jest osiągana, jeśli IV jest jedynie nonce , lub jeśli jest nonce zaszyfrowane pod tym samym kluczem, którego używa schemat, jak błędnie sugeruje to standard. Teksty zaszyfrowane są bardzo plastyczne. Brak wybranych zabezpieczeń przed atakiem zaszyfrowanym tekstem (CCA). Poufność przepada w przypadku wyroczni poprawnego wypełniania dla wielu metod wypełniania. Szyfrowanie nieefektywne, ponieważ jest z natury szeregowe. Powszechnie używane, właściwości bezpieczeństwa trybu prywatności tylko powodują częste niewłaściwe użycie. Może być stosowany jako element składowy algorytmów CBC-MAC. Nie mogę zidentyfikować żadnych istotnych zalet w porównaniu z trybem CTR.
CFB : schemat szyfrowania oparty na IV, tryb jest bezpieczny jako probabilistyczny schemat szyfrowania, osiągając nie do odróżnienia od losowych bitów, zakładając losowy IV. Poufność nie jest osiągana, jeśli IV jest przewidywalny , ani jeśli nie jest dokonywany przez nonce zaszyfrowane pod tym samym kluczem używanym przez system, co norma sugeruje, aby to zrobić. Teksty zaszyfrowane są ciągliwe. Brak zabezpieczeń CCA. Szyfrowanie nieefektywne, ponieważ jest z natury szeregowe. Schemat zależy od parametru s, 1 ≤ s ≤ n, zwykle s = 1 lub s = 8. Nie wystarczy, aby jedno wywołanie blockcipher mogło przetwarzać tylko bity. Tryb osiąga interesującą właściwość „samosynchronizacji”; wstawienie lub usunięcie dowolnej liczby s-bitowych znaków w tekście zaszyfrowanym tylko tymczasowo zakłóca prawidłowe odszyfrowanie.
OFB : tryb szyfrowania oparty na IV, tryb jest bezpieczny jako probabilistyczny schemat szyfrowania, osiągając nie do odróżnienia od losowych bitów, zakładając losowy IV. Poufność nie jest osiągana, jeśli IV jest nonce, chociaż ustalona sekwencja IV (np. Licznik) działa dobrze. Teksty zaszyfrowane są bardzo plastyczne. Brak bezpieczeństwa CCA. Szyfrowanie i deszyfrowanie jest nieefektywne, ponieważ jest z natury szeregowy. Natywnie szyfruje ciągi o dowolnej długości (nie wymaga wypełniania). Nie mogę zidentyfikować żadnych istotnych zalet w porównaniu z trybem CTR.
CTR : schemat szyfrowania oparty na IV, tryb osiąga nie do odróżnienia od losowych bitów przy założeniu nonce IV. Jako bezpieczny schemat nonce, tryb może być również używany jako schemat szyfrowania probabilistycznego z losowym IV. Całkowity brak prywatności, jeśli kod jednorazowy zostanie ponownie wykorzystany do szyfrowania lub deszyfrowania. Paralelność trybu często sprawia, że jest on szybszy, w niektórych ustawieniach znacznie szybszy, niż inne tryby poufności. Ważny element składowy schematów szyfrowania uwierzytelnionego. Ogólnie rzecz biorąc, zwykle najlepszy i najnowocześniejszy sposób na uzyskanie szyfrowania opartego tylko na prywatności.
XTS : tryb szyfrowania oparty na IV, tryb działa poprzez zastosowanie modyfikowalnego bloku blokującego (bezpieczny jako silny PRP) do każdego n-bitowego fragmentu. W przypadku wiadomości o długości niepodzielnej przez n dwa ostatnie bloki są traktowane specjalnie. Jedynym dozwolonym zastosowaniem tego trybu jest szyfrowanie danych na blokowym urządzeniu magazynującym. Wąska szerokość leżącego u podstaw PRP i złe traktowanie ułamkowych bloków końcowych stanowią problemy. Byłby bardziej wydajny, ale mniej pożądany niż (blok blokujący) PRP-bezpieczny.
MAC (integralność wiadomości, ale nie szyfrowanie)
ALG1–6 : Zbiór adresów MAC, wszystkie oparte na CBC-MAC. Za dużo schematów. Niektóre są możliwe do udowodnienia jako VIL PRF, niektóre jako FIL PRF, a niektóre nie mają żadnego możliwego do udowodnienia bezpieczeństwa. Niektóre programy dopuszczają szkodliwe ataki. Niektóre tryby są datowane. W trybach, które go mają, niedostatecznie przestrzegana jest separacja klawiszy. Nie powinny być przyjmowane masowo, ale możliwe jest wybiórcze wybranie „najlepszych” systemów. Byłoby również w porządku przyjęcie żadnego z tych trybów na korzyść CMAC. Niektóre MAC ISO 9797-1 są szeroko znormalizowane i stosowane, szczególnie w bankowości. Zmieniona wersja normy (ISO / IEC FDIS 9797-1: 2010) wkrótce zostanie wydana [93].
CMAC : MAC oparty na CBC-MAC, tryb jest pewnie bezpieczny (aż do daty urodzin) jako PRF (VIL) (zakładając, że leżący u podstaw blockcipher jest dobrym PRP). Zasadniczo minimalny narzut dla schematu opartego na CBCMAC. Z natury szeregowy problem występujący w niektórych domenach aplikacji, a korzystanie z 64-bitowego programu blokującego wymagałoby sporadycznego ponownego kluczowania. Czystszy niż kolekcja MAC 9797-1.
HMAC : MAC oparty na funkcji skrótu kryptograficznego, a nie na blockcipher (chociaż większość funkcji skrótu kryptograficznego jest oparta na blockcipherach). Mechanizm ma silne granice bezpieczeństwa do udowodnienia, choć nie z preferowanych założeń. Wiele ściśle powiązanych wariantów w literaturze komplikuje zrozumienie tego, co jest znane. Nigdy nie sugerowano szkodliwych ataków. Szeroko znormalizowany i używany.
GMAC : MAC oparty na nonce, który jest specjalnym przypadkiem GCM. Dziedziczy wiele dobrych i złych cech GCM. Ale niepotrzebny wymóg jest niepotrzebny dla MAC, a tutaj przynosi niewielką korzyść. Praktyczne ataki, jeśli tagi są obcinane do ≤ 64 bitów, a zakres deszyfrowania nie jest monitorowany i ograniczany. Całkowity błąd przy jednorazowym użyciu. W każdym razie użycie jest niejawne, jeśli GCM zostanie przyjęty. Niezalecane do oddzielnej standaryzacji.
uwierzytelnione szyfrowanie (zarówno szyfrowanie, jak i integralność wiadomości)
CCM : nieoparty na schemacie AEAD, który łączy szyfrowanie w trybie CTR i surowy CBC-MAC. Z natury szeregowy, ograniczający prędkość w niektórych kontekstach. Pewnie bezpieczny, z dobrymi granicami, przy założeniu, że bazowy blockcipher jest dobrym PRP. Nieudolna konstrukcja, która w oczywisty sposób spełnia swoje zadanie. Łatwiejszy do wdrożenia niż GCM. Może być używany jako MAC nieoparty na jednostkach. Szeroko znormalizowany i używany.
GCM : Nieoparty na schemacie AEAD, który łączy szyfrowanie w trybie CTR i uniwersalną funkcję skrótu opartą na GF (2128). Dobra charakterystyka wydajności dla niektórych środowisk wdrożeniowych. Dobre, możliwe do udowodnienia, wyniki przy minimalnym skracaniu znaczników. Ataki i słabe granice bezpieczeństwa do udowodnienia w obecności znacznego obcięcia tagu. Może być używany jako nieoparty na MACach, który następnie nazywa się GMAC. Wątpliwy wybór, aby zezwolić na jednostki inne niż 96 bitów. Zalecamy ograniczenie wartości jednorazowych do 96 bitów i znaczników do co najmniej 96 bitów. Szeroko znormalizowany i używany.