Algorytmy szyfrowania, takie jak Blowfish, AES, RC4, DES i Seal, są zaimplementowane w jednej z dwóch kategorii szyfrów. Jakie są zalety / wady tego typu szyfrów?
Odpowiedź
Chociaż oba są szyframi symetrycznymi, szyfry strumieniowe są oparte na generowanie „nieskończonego” kryptograficznego strumienia klucza i używanie go do szyfrowania jednego bitu lub bajtu na raz (podobnie do jednorazowego bloku), podczas gdy szyfry blokowe działają na większych porcjach danych (tj. blokach) naraz, często łącząc bloki dla dodatkowego bezpieczeństwa (np. AES w trybie CBC).
- Szyfry strumieniowe są zwykle szybsze niż blokowe, ale ma to swoją cenę.
- Szyfry blokowe zwykle wymagają więcej pamięci, ponieważ działają na większych porcjach danych i często mają „przeniesienie” z poprzednich bloków, podczas gdy ponieważ szyfry strumieniowe działają tylko na kilku bitach naraz, mają stosunkowo niskie wymagania dotyczące pamięci (a zatem są tańsze do wdrożenia w ograniczonych scenariuszach, takich jak urządzenia wbudowane, oprogramowanie układowe i w szczególności sprzęt) .
- Szyfry strumieniowe są trudniejsze do poprawnego zaimplementowania i podatne na słabości wynikające z użycia – ponieważ zasady są podobne do jednorazowych padów, strumień klucza ma bardzo surowe wymagania. Z drugiej strony to „ jest zwykle trudną częścią i można ją odciążyć np pudełko zewnętrzne.
- Ponieważ szyfry blokowe szyfrują cały blok na raz (a ponadto mają tryby „sprzężenia zwrotnego”, które są najbardziej zalecane), są bardziej podatne na szum podczas transmisji, to znaczy jeśli zepsujesz jedną część danych, cała reszta jest prawdopodobnie nie do odzyskania. Podczas gdy w przypadku szyfrów strumieniowych bajty są indywidualnie szyfrowane bez połączenia z innymi fragmentami danych (w większości szyfrów / trybów) i często mają obsługę przerwań na linii.
- Ponadto szyfry strumieniowe nie zapewniają ochrony integralności ani uwierzytelniania, podczas gdy niektóre szyfry blokowe (w zależności od trybu) mogą zapewniać ochronę integralności, oprócz poufności.
- Ze względu na powyższe Szyfry strumieniowe są zwykle najlepsze w przypadkach, gdy ilość danych jest nieznana lub ciągła – na przykład strumienie sieciowe. Z drugiej strony, szyfry blokowe lub bardziej przydatne, gdy ilość danych jest wcześniej znana – na przykład plik, pola danych lub protokoły żądań / odpowiedzi, takie jak HTTP, gdzie całkowita długość wiadomości jest znana już na początku początek.
Komentarze
- Drugi punktor nie jest dokładny. Różnica w pamięci spowodowana ” przeniesieniem ” z poprzednich bloków jest nieistotna i znacznie mniejsza niż różnica w pamięci między algorytmem a algorytmem ( np. porównaj RC4, z jego 256 bajtami stanu wewnętrznego, z AES, z 0 bajtami stanu wewnętrznego w niektórych implementacjach). Ostatni punkt zawiera fałszywe rozróżnienia i jest złą radą.
- @ D.W. Drugi punkt to ” ogólnie mówiąc „, jak to zwykle bywa (ale akceptuję, że nie jest to ściśle dokładne).
- @DW czy masz jakieś podstawy do komentarza na temat ostatniego punktu? Gdzie jest fałszywe rozróżnienie i dlaczego mówisz, że to zła rada?
- tak, mam podstawy do mojego komentarza do ostatniego punktu. Po prostu wydaje się zdezorientowany na całej planszy. Szyfry blokowe nadają się do przesyłania strumieniowego danych; patrz, np. tryb CBC, tryb CTR itp., aby zapoznać się z różnymi trybami działania, które działają dobrze w przypadku przesyłania strumieniowego danych. Szyfry blokowe nie są ograniczone do przypadków, w których ilość danych jest znana z góry. ' Nie znam żadnego powodu, by uważać szyfry strumieniowe za lepsze niż szyfry blokowe do przesyłania strumieniowego danych (pomimo nazwy).
- D.W. jest poprawne: słowo ' Strumień ' w Stream Cipher odzwierciedla, że istnieje strumień klucza – strumień bitów, który jest połączony z tekstem jawnym tworzy szyfrogram. Nie odzwierciedla składu tekstu jawnego. Oczywiście jest to szczegół, który często myli programistów i inżynierów, z którymi zwykle sugeruje się to drugie. Szyfry blokowe mogą być używane do manipulowania przesyłanym strumieniowo zwykłym tekstem. Często mylące jest również to, że szyfry blokowe mogą być używane jako szyfry strumieniowe z odpowiednim trybem działania i gdy rozmiar bloku jest atomowy (np. 1 bajt).
Odpowiedź
A szyfr blokowy to wszechstronny algorytm, który implementuje klucz zależna permutacja wartości, które są sekwencjami o ustalonej liczbie bitów (zwane „blokami”). Może być używany do różnych ról w wielu rodzajach protokołów kryptograficznych. Jedną z takich ról jest masowe szyfrowanie długich strumieni danych; aby to osiągnąć, szyfr blokowy musi być używany z odpowiednim trybem działania (znanym również jako „tryb łączenia”), tradycyjnym jest CBC, a modny nowszy tryb to CTR.
szyfr strumieniowy to wyspecjalizowany algorytm służący do masowego szyfrowania długich strumieni danych. Chodzi o to, że tracąc wszechstronność szyfru blokowego, możliwe byłoby stworzenie bardziej wydajnego algorytmu (tj. Czegoś, co szyfruje dane szybciej ).
Oba szyfry blokowe z trybem szyfrowania strumieniowego i szyframi strumieniowymi mogą napotkać problemy z bezpieczeństwem, jeśli ten sam klucz jest używany dwukrotnie, dla dwóch różnych strumieni, bez odpowiedniego, unikalnego / wystarczająco losowego wektora inicjującego . W przypadku szyfrowania CBC, IV musi być nową, jednakowo losową sekwencją bitów, tej samej wielkości co blok, dla każdej nowej wiadomości. Dobre szyfry strumieniowe również akceptują IV. Tradycyjny szyfr strumieniowy o nazwie RC4 jest bez IV (jego specyfikacja nie określa, gdzie ani jak można wstawić IV), co doprowadziło do wielu chaosu i spowodowało zła nazwa koncepcji szyfrów strumieniowych.
Nowsze, bezpieczniejsze (i szybsze) szyfry strumieniowe można znaleźć w portfolio eSTREAM . Algorytmy te przeszły dość dokładną analizę przez wielu kryptologów i są uważane za „całkiem bezpieczne”.
Szyfr strumieniowy można przekształcić w Generator liczb pseudolosowych przez szyfrowanie długiej sekwencji bajtów o wartości zero. W rzeczywistości wiele (ale nie wszystkie) szyfrów strumieniowych działa wewnętrznie jako PRNG, generując długą sekwencję zależnych od klucza pseudolosowych bajtów, które są następnie łączone (za pomocą bitowego XOR) z danymi do zaszyfrowania (lub odszyfrowania), więc szyfrowanie bajtów zerowych jest wtedy równoznaczne z całkowitym pominięciem XOR. Dlatego szyfry strumieniowe są często używane jako niestandardowe PRNG.
Komentarze
- Zapomniałeś wspomnieć, który jest ogólnie bezpieczniejszy (strumień czy blok).
- Nie zapomniałem, ponieważ stwierdzenie nie ma ogólnego sensu. Zarówno szyfry blokowe, jak i szyfry strumieniowe mogą zapewnić odpowiednie bezpieczeństwo, jeśli są stosowane prawidłowo i nie ' nie mają wad strukturalnych.
- ” wszechstronność szyfru blokowego ” Mam problem z tą częścią. Co sprawia, że szyfr blokowy jest z natury bardziej wszechstronny? Szyfry blokowe mogą być używane do szyfrowania i uwierzytelniania zarówno strumieni (np. TLS), jak i danych pakietowych (np. ESP) i to samo dla szyfrów strumieniowych (np. TLS lub DTLS). Są przypadki, w których szyfr strumieniowy wydaje się bardziej ” naturalny ” (np. Szyfrowanie dźwięku) lub szyfr blokowy wydaje się bardziej ” naturalne ” (np. Szyfrowanie dysków), ale po prostu nie ' nie widzę dużej luki w rozsądnych zastosowaniach dla jednego z nich.
Odpowiedź
Jedną z zalet szyfrów strumieniowych, o których wcześniej nie wspominano, jest to, że nie „Nie wymaga dopełniania (szyfry blokowe działają na całych blokach, więc jeśli nie masz wystarczającej ilości danych, musisz jakoś wygenerować więcej). I niespodzianka (niezupełnie, kryptografia jest dziedziną, w której Murphy jest wszędzie), można wykonać dopełnienie źle, jak pokazano na przykład w Practical Padding Oracle Attacks .
Również bezpieczeństwo szyfrów blokowych zależy w dużym stopniu od ich trybu działania, nadal widzę EBC używane tu i ówdzie i nie jest dużo lepsze niż brak kryptowalut t wszystkich.
Zasadniczo nie można powiedzieć, że jeden jest lepszy od drugiego, trzeba spojrzeć na kompletny system kryptograficzny, aby dokonać oceny bezpieczeństwa.
Komentarze
- w pierwszym akapicie: istnieją tryby działania szyfrów blokowych, które nie ' nie wymagają dopełnienia, np. tryb CTR. Nie jest to więc wyjątkowa zaleta szyfrów strumieniowych. Ale +1 do twojego ostatniego akapitu – dobrze powiedziane!
- Cóż, ' d mówię, że CTR i OFB to konstrukcje, które tworzą szyfr strumieniowy z szyfru blokowego. To ' to kolejna wspaniała rzecz w przypadku szyfrów blokowych. Można ich z łatwością używać jako elementów budulcowych do innych rzeczy, czy to szyfrów strumieniowych, czy też skrótów jednokierunkowych. Szyfry strumieniowe nie są tak wszechstronne.
- Zapomniałeś wspomnieć, który jest ogólnie bezpieczniejszy (strumień czy blok).
- Żaden z nich nie jest bardziej bezpieczny z natury, ' tak naprawdę ich używasz.
Odpowiedź
Szyfry strumieniowe szyfrują dane w postaci zwykłego tekstu z losowym strumieniem bitów (zwykle z XOR, ponieważ można go łatwo odwrócić). Jeśli masz 128-bitowe dane, do szyfrowania użyjesz 128-bitowego psedurandom strem (twojego klucza).
Block Ciphers szyfruje dane zwykłego tekstu po jednym bloku z tą samą transformacją (na podstawie klucza ).Więc masz swoje 128-bitowe dane, szyfr dzieli je na bloki (jak 4 bloki po 32 bity) i stosuje tę samą transformację do każdego bloku, uzyskując 4 zaszyfrowane bloki, które razem utworzą ostateczny kryptogram.
Oczywiście z tego powodu szyfry blokowe są bezpieczniejsze, ale kosztowne w użyciu pod względem złożoności sprzętowej. Szyfry strumieniowe są szybsze i „tanie”, ale mogą być podatne na problemy z bezpieczeństwem , jeśli zostaną zastosowane nieprawidłowo.
Komentarze
- Ostatni akapit zawiera szereg błędów rzeczowych. Szyfry blokowe nie są generalnie bezpieczniejsze, ani też gorsze sprzętowo. Szyfry strumieniowe niekoniecznie są szybsze lub tańsze.
- @DW: niezależnie od tego, szyfry strumieniowe są zwykle szybsze lub tańsze niż szyfry blokowe, ponieważ ' s układ: mniej wszechstronny algorytm sprzedawany w celu poprawy wydajności. Szyfr strumieniowy, który jest wolniejszy i droższy niż AES / CTR, po prostu w ogóle nie jest używany.
- Zapomniałeś wspomnieć, który jest ogólnie bezpieczniejszy (strumień czy blok).
Odpowiedź
Dane (dane do zaszyfrowania) zwykle są przesyłane strumieniowo. Aby to zaszyfrować, musimy zastosować szyfr strumieniowy, czyli algorytm szyfrowania odpowiedni do użycia w strumieniu danych. Strumień to sekwencja bitów (lub bajtów) o dowolnej, zmiennej lub nieokreślonej długości.
Najlepsze szyfry, jakie do tej pory wymyśliliśmy, to zwykle szyfry blokowe. Szyfr blokowy jest w stanie zaszyfrować pojedynczy blok danych o ustalonym rozmiarze; i, z otaczających nas dowodów, najwyraźniej łatwiej jest zbudować dobre szyfry blokowe niż szyfry strumieniowe.
Jednak dobra wiadomość. Używając danego szyfru blokowego w pewnych określonych wzorach („tryb działania”) i przy pomocy określonych strategii wypełniania, możemy przekształcić dowolny szyfr blokowy w szyfr strumieniowy! Oznacza to, że możemy używać lepszych szyfrów, którymi są szyfry blokowe, do szyfrowania dowolnych danych, z których większość jest przesyłana strumieniowo.
Komentarze
- drugie zdanie wydaje się mylące. Dane przesyłane strumieniowo można zaszyfrować za pomocą szyfru blokowego, wykorzystując jeden z wielu standardowych trybów działania, np. Tryb CBC, tryb CTR itp. AES-CBC nadal jest szyfrem blokowym. W rzeczywistości prawie każdy standardowy tryb działania szyfrów blokowych obsługuje już przesyłanie strumieniowe danych. Co więcej, szyfr blokowy nie jest bezpieczny bez trybu działania, więc ' nie przypomina trybu działania jest czymś opcjonalnym, którego potrzebujesz tylko wtedy, gdy chcesz zaszyfrować dane przesyłane strumieniowo .