Tryb pracy z szyfrem blokowym - Block cipher mode of operation

W kryptografii tryb działania szyfru blokowego to algorytm, który wykorzystuje szyfr blokowy w celu zapewnienia bezpieczeństwa informacji, takiego jak poufność lub autentyczność . Sam szyfr blokowy nadaje się tylko do bezpiecznej transformacji kryptograficznej (szyfrowania lub deszyfrowania) jednej grupy bitów o stałej długości zwanej blokiem . Tryb działania opisuje sposób wielokrotnego stosowania operacji pojedynczego bloku szyfru w celu bezpiecznego przekształcania ilości danych większych niż blok.

Większość trybów wymaga unikalnej sekwencji binarnej, często nazywanej wektorem inicjującym (IV), dla każdej operacji szyfrowania. IV musi być niepowtarzalny, a w niektórych trybach również losowy. Wektor inicjujący służy do zapewnienia, że ​​różne szyfrogramy są tworzone nawet wtedy, gdy ten sam tekst jawny jest wielokrotnie szyfrowany niezależnie tym samym kluczem . Szyfry blokowe mogą działać na więcej niż jednym rozmiarze bloku , ale podczas transformacji rozmiar bloku jest zawsze stały. Tryby Cipher Block działają na całych bloków i wymagać, że ostatnia część danych jest wyściełana do pełnego bloku jeżeli jest ona mniejsza niż bieżący rozmiar bloku. Istnieją jednak tryby, które nie wymagają dopełnienia, ponieważ efektywnie wykorzystują szyfr blokowy jako szyfr strumieniowy .

Historycznie, tryby szyfrowania były szeroko badane pod kątem ich właściwości propagacji błędów w różnych scenariuszach modyfikacji danych. Późniejszy rozwój uważał ochronę integralności za całkowicie odrębny cel kryptograficzny. Niektóre nowoczesne tryby działania w efektywny sposób łączą poufność i autentyczność i są znane jako uwierzytelnione tryby szyfrowania .

Historia i standaryzacja

Najwcześniejsze tryby działania, ECB, CBC, OFB i CFB (wszystkie poniżej) pochodzą z 1981 roku i zostały określone w FIPS 81 , DES Modes of Operation . W 2001 roku amerykański Narodowy Instytut Standardów i Technologii (NIST) zrewidował swoją listę zatwierdzonych trybów działania, włączając AES jako szyfr blokowy i dodając tryb CTR w SP800-38A , Rekomendacja dotycząca trybów działania szyfru blokowego . Wreszcie, w styczniu 2010 r., NIST dodał XTS-AES w SP800-38E , zalecenie dotyczące trybów działania szyfrowania blokowego : tryb XTS-AES dla poufności na urządzeniach pamięci masowej . Istnieją inne tryby poufności, które nie zostały zatwierdzone przez NIST. Na przykład CTS jest trybem kradzieży zaszyfrowanego tekstu i jest dostępny w wielu popularnych bibliotekach kryptograficznych.

Tryby szyfrowania blokowego ECB, CBC, OFB, CFB, CTR i XTS zapewniają poufność, ale nie chronią przed przypadkową modyfikacją lub złośliwym manipulowaniem. Modyfikację lub manipulację można wykryć za pomocą oddzielnego kodu uwierzytelniania wiadomości, takiego jak CBC-MAC lub podpisu cyfrowego . Społeczność kryptograficzna uznała potrzebę dedykowanych gwarancji integralności, a NIST odpowiedział HMAC, CMAC i GMAC. HMAC został zatwierdzony w 2002 r. jako FIPS 198 , kod uwierzytelniania wiadomości z kluczem szyfrującym (HMAC) , CMAC został wydany w 2005 r. pod SP800-38B , zalecenie dotyczące trybów działania szyfrowania blokowego: tryb uwierzytelniania CMAC , a GMAC został sformalizowany w 2007 r. pod SP800-38D , Zalecenie dotyczące trybów działania szyfru blokowego : tryb Galois/Counter (GCM) i GMAC .

Społeczność kryptograficzna zauważyła, że ​​komponowanie (łączenie) trybu poufności z trybem autentyczności może być trudne i podatne na błędy. Dlatego zaczęli dostarczać tryby, które łączyły poufność i integralność danych w jeden prymityw kryptograficzny (algorytm szyfrowania). Te połączone tryby są określane jako szyfrowanie uwierzytelnione , AE lub „authenc”. Przykładami trybów AE są CCM ( SP800-38C ), GCM ( SP800-38D ), CWC , EAX , IAPM i OCB .

Sposoby działania są określane przez szereg krajowych i międzynarodowych uznanych organów normalizacyjnych. Godne uwagi organizacje normalizacyjne obejmują NIST , ISO (z ISO/IEC 10116), IEC , IEEE , ANSI i IETF .

Wektor inicjujący (IV)

Wektor inicjujący (IV) lub zmienna początkowa (SV) to blok bitów używany przez kilka trybów do losowego szyfrowania, a tym samym do tworzenia odrębnych tekstów zaszyfrowanych, nawet jeśli ten sam tekst jawny jest zaszyfrowany wiele razy, bez potrzeby wolniejszego -kluczowanie procesu.

Wektor inicjujący ma inne wymagania bezpieczeństwa niż klucz, więc IV zwykle nie musi być tajny. W przypadku większości trybów szyfrowania blokowego ważne jest, aby wektor inicjalizacji nigdy nie był ponownie używany pod tym samym kluczem, tj. musi być kryptograficznym nonce . Wiele trybów szyfrowania blokowego ma większe wymagania, na przykład IV musi być losowy lub pseudolosowy . Niektóre szyfry blokowe mają szczególne problemy z niektórymi wektorami inicjalizacji, takimi jak wszystkie zero IV generujące brak szyfrowania (dla niektórych kluczy).

Zaleca się przejrzenie odpowiednich wymagań IV dla konkretnego trybu szyfrowania blokowego w odpowiedniej specyfikacji, na przykład SP800-38A .

W przypadku CBC i CFB ponowne użycie IV powoduje wyciek pewnych informacji o pierwszym bloku tekstu jawnego io dowolnym wspólnym prefiksie współdzielonym przez te dwie wiadomości.

W przypadku OFB i CTR ponowne użycie IV powoduje ponowne użycie strumienia bitów klucza, co łamie bezpieczeństwo. Można to zauważyć, ponieważ oba tryby skutecznie tworzą strumień bitów, który jest XOR z tekstem jawnym, a ten strumień bitów jest zależny tylko od klucza i IV.

W trybie CBC IV musi być nieprzewidywalny ( losowy lub pseudolosowy ) w czasie szyfrowania; w szczególności (wcześniej) powszechna praktyka ponownego wykorzystywania ostatniego bloku szyfrogramu wiadomości jako IV dla następnej wiadomości jest niebezpieczna (na przykład ta metoda była używana przez SSL 2.0). Jeśli atakujący zna IV (lub poprzedni blok zaszyfrowanego tekstu) przed określeniem następnego tekstu jawnego, może sprawdzić swoje przypuszczenia dotyczące tekstu jawnego jakiegoś bloku, który został wcześniej zaszyfrowany tym samym kluczem (jest to znane jako atak TLS CBC IV) .

W przypadku niektórych kluczy wektor inicjujący całkowicie zerowy może generować niektóre tryby szyfrowania blokowego (CFB-8, OFB-8), aby stan wewnętrzny utknął na zerowym poziomie. W przypadku CFB-8, całkowicie zerowe IV i całkowicie zerowy tekst jawny, powoduje, że 1/256 kluczy nie generuje żadnego szyfrowania, zwykły tekst jest zwracany jako tekst zaszyfrowany. W przypadku OFB-8 użycie całkowicie zerowego wektora inicjującego nie wygeneruje szyfrowania dla 1/256 kluczy. Szyfrowanie OFB-8 zwraca niezaszyfrowany tekst w przypadku kluczy, których dotyczy problem.

Niektóre tryby (takie jak AES-SIV i AES-GCM-SIV) są zbudowane tak, aby były bardziej odporne na niewłaściwe użycie, tj. odporne na scenariusze, w których generowanie losowości jest wadliwe lub znajduje się pod kontrolą napastnika.

  • Syntetyczny inicjalizacji wektora (SIV) syntezy wewnętrzną IV uruchamiając Pseudo-Random Function (PRF) konstrukcji zwanej S2V na wejściu (dodatkowe dane i słownym), uniemożliwiając jakiekolwiek dane wychodzące z bezpośredniego sterowania IV. Zewnętrzne identyfikatory / IV mogą być wprowadzone do S2V jako dodatkowe pole danych.
  • AES-GCM-SIV syntetyzuje wewnętrzne IV, uruchamiając tryb uwierzytelniania POLYVAL Galois na wejściu (dodatkowe dane i zwykły tekst), a następnie operację AES.

Wyściółka

Szyfr blokowy działa na jednostkach o stałej wielkości (znany jako rozmiar bloku ), ale wiadomości są w różnych długościach. Tak więc niektóre tryby (a mianowicie ECB i CBC ) wymagają dopełnienia ostatniego bloku przed szyfrowaniem. Istnieje kilka schematów dopełnienia . Najprostszym jest dodanie bajtów zerowych do tekstu jawnego, aby zwiększyć jego długość do wielokrotności rozmiaru bloku, ale należy uważać, aby można było odzyskać pierwotną długość tekstu jawnego; jest to trywialne, na przykład, jeśli tekst jawny jest ciągiem w stylu C , który nie zawiera bajtów null z wyjątkiem końca. Nieco bardziej złożona jest oryginalna metoda DES , która polega na dodaniu jednego bitu , a następnie wystarczającej liczby bitów zerowych, aby wypełnić blok; jeśli wiadomość kończy się na granicy bloku, zostanie dodany cały blok dopełnienia. Najbardziej wyrafinowane są schematy specyficzne dla CBC, takie jak kradzież zaszyfrowanego tekstu lub resztkowe zakończenie bloku , które nie powodują dodatkowego zaszyfrowanego tekstu kosztem pewnej dodatkowej złożoności. Schneier i Ferguson sugerują dwie możliwości, obie proste: dodaj bajt o wartości 128 (hex 80), a następnie tyle bajtów zerowych, ile potrzeba do wypełnienia ostatniego bloku, lub wypełnij ostatni blok n bajtami, wszystkie o wartości n .

Tryby CFB, OFB i CTR nie wymagają żadnych specjalnych środków do obsługi komunikatów, których długość nie jest wielokrotnością rozmiaru bloku, ponieważ tryby działają poprzez XORowanie tekstu jawnego z wyjściem szyfru blokowego. Ostatni częściowy blok tekstu jawnego jest poddawany XOR z kilkoma pierwszymi bajtami ostatniego bloku strumienia klucza , tworząc końcowy blok zaszyfrowanego tekstu o takim samym rozmiarze jak końcowy blok częściowego tekstu jawnego. Ta cecha szyfrów strumieniowych sprawia, że ​​są one odpowiednie dla aplikacji, które wymagają, aby zaszyfrowane dane w postaci zaszyfrowanego tekstu miały taki sam rozmiar jak oryginalne dane w postaci zwykłego tekstu, oraz dla aplikacji, które przesyłają dane w postaci strumieniowej, gdzie niewygodne jest dodawanie bajtów dopełniających.

Wspólne tryby

Szyfrowanie uwierzytelnione z dodatkowymi trybami danych (AEAD)

Szereg trybów działania zostało zaprojektowanych w celu połączenia tajności i uwierzytelniania w jednym prymitywnym kryptograficznym. Przykładami takich trybów są łańcuchy bloków z rozszerzonym szyfrem (XCBC) , łańcuchy bloków z rozpoznawaniem integralności (IACBC) , tryb zrównoleglenia z uwzględnieniem integralności (IAPM), OCB , EAX , CWC , CCM i GCM . Tryby szyfrowania uwierzytelnionego są klasyfikowane jako tryby jednoprzebiegowe lub tryby dwuprzebiegowe. Niektóre algorytmy szyfrowania jednoprzebiegowego , takie jak tryb OCB , są obciążone patentami, podczas gdy inne zostały specjalnie zaprojektowane i wydane w taki sposób, aby uniknąć takiego obciążenia.

Ponadto niektóre tryby umożliwiają również uwierzytelnianie niezaszyfrowanych powiązanych danych i są one nazywane schematami AEAD (uwierzytelniane szyfrowanie z powiązanymi danymi). Na przykład tryb EAX to dwuprzebiegowy schemat AEAD, podczas gdy tryb OCB jest jednoprzebiegowy.

Galois/licznik (GCM)

GCM
Galois/licznik
Szyfrowanie zrównoleglone tak
Deszyfrowanie zrównoleglone tak
Dostęp do odczytu losowego tak

Tryb Galois/licznik (GCM) łączy dobrze znany tryb szyfrowania z licznikiem z nowym trybem uwierzytelniania Galois. Kluczową cechą jest łatwość równoległego obliczania mnożenia pola Galois używanego do uwierzytelniania. Ta funkcja umożliwia wyższą przepustowość niż algorytmy szyfrowania.

GCM jest zdefiniowany dla szyfrów blokowych o rozmiarze bloku 128 bitów. Kod uwierzytelniania wiadomości Galois (GMAC) to wariant GCM służący tylko do uwierzytelniania, który może tworzyć przyrostowy kod uwierzytelniania wiadomości. Zarówno GCM, jak i GMAC mogą akceptować wektory inicjujące o dowolnej długości. GCM może w pełni wykorzystać przetwarzanie równoległe, a wdrożenie GCM może wydajnie wykorzystać potok instrukcji lub potok sprzętowy. Tryb pracy CBC powoduje przestoje rurociągu, które zmniejszają jego wydajność i wydajność.

Podobnie jak w CTR, bloki są numerowane sekwencyjnie, a następnie ten numer bloku jest łączony z IV i szyfrowany szyfrem blokowym E , zwykle AES. Wynik tego szyfrowania jest następnie XOR-owany z tekstem jawnym w celu wytworzenia tekstu zaszyfrowanego. Podobnie jak wszystkie tryby liczników, jest to zasadniczo szyfr strumieniowy, dlatego ważne jest, aby dla każdego zaszyfrowanego strumienia użyto innego IV.

Operacja szyfrowania GCM

Bloki tekstu zaszyfrowanego są uważane za współczynniki wielomianu, który jest następnie oceniany w punkcie zależnym od klucza H , przy użyciu arytmetyki pól skończonych . Wynik jest następnie szyfrowany, tworząc znacznik uwierzytelniający, który można wykorzystać do weryfikacji integralności danych. Zaszyfrowany tekst zawiera następnie znacznik IV, zaszyfrowany i uwierzytelniający.

Licznik z kodem uwierzytelniania wiadomości w łańcuchu bloków szyfru (CCM)

Licznik z kodem uwierzytelniającym wiadomość w łańcuchu bloków szyfru (licznik z CBC-MAC; CCM) jest uwierzytelnionym algorytmem szyfrowania zaprojektowanym w celu zapewnienia zarówno uwierzytelniania, jaki poufności . Tryb CCM jest zdefiniowany tylko dla szyfrów blokowych o długości 128 bitów.

Syntetyczny wektor inicjujący (SIV)

Syntetyczny wektor inicjujący (SIV) jest trybem szyfrowania blokowego odpornym na nadużycia.

SIV syntetyzuje wewnętrzne IV przy użyciu funkcji pseudolosowej S2V. S2V to skrót z kluczem oparty na CMAC, a dane wejściowe funkcji to:

  • Dodatkowe uwierzytelnione dane (obsługiwane jest zero, jedno lub wiele pól AAD)
  • Zwykły tekst
  • Klucz autoryzacyjny (K 1 ).

SIV szyfruje wyjście S2V i tekst jawny za pomocą AES-CTR z kluczem szyfrowania (K 2 ).

SIV może obsługiwać zewnętrzne uwierzytelnione szyfrowanie typu nonce, w którym to przypadku wykorzystywane jest do tego celu jedno z uwierzytelnionych pól danych. RFC5297 określa, że ​​do celów interoperacyjności ostatnie uwierzytelnione pole danych powinno być używane jako zewnętrzny identyfikator jednorazowy.

Dzięki zastosowaniu dwóch kluczy, klucz uwierzytelniania K 1 i szyfrowanie klucza K 2 , systemów nazewnictwa dla SIV AEAD-wariantów może prowadzić do dezorientacji; na przykład AEAD_AES_SIV_CMAC_256 odnosi się do AES-SIV z dwoma kluczami AES-128, a nie AES-256.

AES-GCM-SIV

AES-GCM-SIV to tryb działania dla Advanced Encryption Standard, który zapewnia podobną wydajność jak tryb Galois/licznik, a także odporność na niewłaściwe użycie w przypadku ponownego użycia kodu kryptograficznego . Konstrukcja jest zdefiniowana w RFC 8452.

AES-GCM-SIV syntetyzuje wewnętrzne IV. Wyprowadza skrót dodatkowych uwierzytelnionych danych i zwykłego tekstu za pomocą funkcji skrótu POLYVAL Galois. Skrót jest następnie szyfrowany kluczem AES i używany jako znacznik uwierzytelniający oraz wektor inicjujący AES-CTR.

AES-GCM-SIV jest ulepszeniem w stosunku do bardzo podobnie nazwanego algorytmu GCM-SIV , z kilkoma bardzo małymi zmianami (np. sposób inicjalizacji AES-CTR), ale który zapewnia praktyczne korzyści dla jego bezpieczeństwa „Ten dodatek pozwala na szyfrowanie do 2 50 wiadomości z tym samym kluczem, w porównaniu ze znacznym ograniczeniem tylko 2 32 wiadomości, które były dozwolone w GCM-SIV."

Tryby tylko poufności

Zdefiniowano wiele trybów działania. Niektóre z nich opisano poniżej. Celem trybów szyfrowania jest maskowanie wzorców występujących w zaszyfrowanych danych, co ilustruje opis słabości ECB .

Różne tryby szyfrowania maskują wzorce poprzez kaskadowe przesyłanie danych wyjściowych z bloku szyfrowania lub innych globalnie deterministycznych zmiennych do kolejnego bloku szyfrowania. Dane wejściowe wymienionych trybów są podsumowane w poniższej tabeli:

Podsumowanie trybów
Tryb Formuły Zaszyfrowany tekst
Elektroniczna książka kodów (EBC) Y i = F(Zwykły tekst i , klucz) Y i
Łączenie bloków szyfrów (CBC) Y i = zwykły tekst i XOR zaszyfrowany tekst i −1 F(Y, klucz); Zaszyfrowany tekst 0 = IV
Propagowanie CBC (PCBC) Y i = PlainText i XOR (Ciphertext i −1 XOR PlainText i −1 ) F(Y, klucz); Zaszyfrowany tekst 0 = IV
Informacje zwrotne dotyczące szyfrowania (CFB) Y i = szyfrogram i −1 Zwykły tekst XOR F(Y, klucz); Zaszyfrowany tekst 0 = IV
Wyjście sprzężenia zwrotnego (OFB) Y i = f (T I -1 Key); Y 0 = F(IV, klucz) Tekst jawny XOR Y i
Licznik (NS) Y i = F (IV + g ( i ), klucz); IV = token () Tekst jawny XOR Y i

Uwaga: g ( i ) to dowolna funkcja deterministyczna, często funkcja tożsamości .

Elektroniczna książka kodów (EBC)

EBC
Elektroniczna książka kodów
Szyfrowanie zrównoleglone tak
Deszyfrowanie zrównoleglone tak
Dostęp do odczytu losowego tak

Najprostszym z trybów szyfrowania jest tryb elektronicznej książki kodów (EBC) (nazwany tak od konwencjonalnych fizycznych książek kodów ). Wiadomość jest podzielona na bloki, a każdy blok jest szyfrowany osobno.

Szyfrowanie EBC.svg Odszyfrowanie EBC.svg

Wadą tej metody jest brak dyfuzji . Ponieważ EBC szyfruje identyczne bloki tekstu jawnego w identyczne bloki tekstu zaszyfrowanego , nie ukrywa dobrze wzorców danych. EBC nie jest zalecany do stosowania w protokołach kryptograficznych.

Uderzający przykład stopnia, w jakim EBC może pozostawić wzorce danych w postaci zwykłego tekstu w tekście zaszyfrowanym, można zobaczyć, gdy tryb EBC jest używany do szyfrowania obrazu bitmapowego, który wykorzystuje duże obszary o jednolitym kolorze. Chociaż kolor każdego pojedynczego piksela jest zaszyfrowany, ogólny obraz może być nadal rozpoznany, ponieważ wzór identycznie kolorowych pikseli w oryginale pozostaje w wersji zaszyfrowanej.

Oryginalny obraz
Szyfrowane w trybie EBC
Tryby inne niż EBC powodują pseudolosowość
Trzeci obraz pokazuje, jak obraz może wyglądać na zaszyfrowany za pomocą CBC, CTR lub dowolnego innego bezpieczniejszego trybu — nie do odróżnienia od losowego szumu. Zauważ, że losowy wygląd trzeciego obrazu nie gwarantuje, że obraz został bezpiecznie zaszyfrowany; Opracowano wiele rodzajów niezabezpieczonego szyfrowania, które generowałyby dane wyjściowe tak samo „losowo wyglądające”.

Tryb ECB może również sprawić, że protokoły bez ochrony integralności będą jeszcze bardziej podatne na powtarzające się ataki , ponieważ każdy blok jest odszyfrowywany w dokładnie ten sam sposób.

Szyfrowanie łańcuchów bloków (CBC)

CBC
Łączenie bloków szyfrów
Szyfrowanie zrównoleglone Nie
Deszyfrowanie zrównoleglone tak
Dostęp do odczytu losowego tak

Ehrsam, Meyer, Smith i Tuchman wynaleźli w 1976 roku tryb szyfrowania blokowego (CBC). W trybie CBC każdy blok tekstu jawnego jest przed zaszyfrowaniem poddany XOR z poprzednim blokiem zaszyfrowanego tekstu. W ten sposób każdy blok zaszyfrowanego tekstu zależy od wszystkich bloków tekstu jawnego przetworzonych do tego momentu. Aby każdy komunikat był unikalny, w pierwszym bloku musi być użyty wektor inicjujący .

Szyfrowanie w trybie szyfrowania blokowego (CBC)
Odszyfrowywanie w trybie łańcucha bloków szyfrów (CBC)

Jeśli pierwszy blok ma indeks 1, matematyczny wzór na szyfrowanie CBC to

podczas gdy matematyczny wzór na deszyfrowanie CBC to

Przykład
Przykład CBC z zabawkowym szyfrem 2-bitowym
Przykład CBC z zabawkowym szyfrem 2-bitowym

Najczęściej stosowanym trybem działania jest CBC. Jego główną wadą jest to, że szyfrowanie jest sekwencyjne (tj. nie może być zrównoleglone) i że wiadomość musi być uzupełniona do wielokrotności rozmiaru bloku szyfru. Jednym ze sposobów radzenia sobie z tym ostatnim problemem jest metoda znana jako kradzież tekstu zaszyfrowanego . Zauważ, że jednobitowa zmiana w tekście jawnym lub wektorze inicjującym (IV) wpływa na wszystkie kolejne bloki tekstu zaszyfrowanego.

Odszyfrowanie z niepoprawnym IV powoduje uszkodzenie pierwszego bloku tekstu jawnego, ale kolejne bloki tekstu jawnego będą poprawne. Dzieje się tak, ponieważ każdy blok jest XOR-owany za pomocą zaszyfrowanego tekstu poprzedniego bloku, a nie zwykłego tekstu, więc nie trzeba odszyfrowywać poprzedniego bloku przed użyciem go jako IV do odszyfrowania bieżącego. Oznacza to, że blok tekstu jawnego można odzyskać z dwóch sąsiednich bloków tekstu zaszyfrowanego. W konsekwencji deszyfrowanie może być zrównoleglone. Zauważ, że jednobitowa zmiana tekstu zaszyfrowanego powoduje całkowite uszkodzenie odpowiedniego bloku tekstu jawnego i odwraca odpowiedni bit w następnym bloku tekstu jawnego, ale pozostałe bloki pozostają nienaruszone. Ta osobliwość jest wykorzystywana w różnych atakach wyroczni , takich jak POODLE .

Jawne wektory inicjujące wykorzystują tę właściwość, dołączając pojedynczy losowy blok do tekstu jawnego. Szyfrowanie odbywa się normalnie, z wyjątkiem tego, że IV nie musi być przekazywane do procedury deszyfrowania. Niezależnie od tego, czego używa deszyfrowanie IV, tylko losowy blok jest „uszkodzony”. Można go bezpiecznie odrzucić, a reszta odszyfrowywania to oryginalny tekst jawny.

Propagujące tworzenie łańcuchów bloków szyfru (PCBC)
PCBC
Propagujące tworzenie łańcuchów bloków szyfru
Szyfrowanie zrównoleglone Nie
Deszyfrowanie zrównoleglone Nie
Dostęp do odczytu losowego Nie

Tryb łączenia łańcuchów bloków szyfru propagującego lub tryb łańcucha bloków szyfru w postaci zwykłego tekstu został zaprojektowany w celu powodowania niewielkich zmian w zaszyfrowanym tekście, które są propagowane w nieskończoność podczas odszyfrowywania, a także podczas szyfrowania. W trybie PCBC każdy blok tekstu jawnego jest XOR-owany z poprzednim blokiem tekstu jawnego i poprzednim blokiem tekstu zaszyfrowanego przed zaszyfrowaniem. Podobnie jak w trybie CBC, w pierwszym bloku używany jest wektor inicjujący.

Propagujące szyfrowanie w trybie łańcucha bloków szyfru (PCBC)
Propagujące odszyfrowywanie w trybie łańcucha bloków szyfru (PCBC)

Algorytmy szyfrowania i deszyfrowania są następujące:

PCBC jest używany przede wszystkim w Kerberos v4 i WASTE , ale poza tym nie jest powszechny. W wiadomości zaszyfrowanej w trybie PCBC, jeśli dwa sąsiednie bloki szyfrogramu są wymieniane, nie ma to wpływu na odszyfrowanie kolejnych bloków. Z tego powodu PCBC nie jest używany w Kerberos v5.

Informacja zwrotna o szyfrowaniu (CFB)

Pełny blok CFB
CFB
Informacje zwrotne dotyczące szyfrowania
Szyfrowanie zrównoleglone Nie
Deszyfrowanie zrównoleglone tak
Dostęp do odczytu losowego tak

Tryb sprzężenia zwrotnego szyfru (CFB), w swojej najprostszej postaci, wykorzystuje całe dane wyjściowe szyfru blokowego. W tej odmianie jest bardzo podobny do CBC, przekształca szyfr blokowy w samosynchronizujący się szyfr strumieniowy . Deszyfrowanie CFB w tej odmianie jest prawie identyczne z szyfrowaniem CBC wykonywanym w odwrotnej kolejności:

szyfrowanie CFB.svg Odszyfrowywanie CFB.svg

CFB-1, CFB-8, CFB-64, CFB-128 itd.

NIST SP800-38A definiuje CFB z szerokością bitową. Tryb CFB wymaga również parametru całkowitego, oznaczonego s, tak że 1 ≤ s ≤ b. W poniższej specyfikacji trybu CFB każdy segment tekstu jawnego (Pj) i segment tekstu zaszyfrowanego (Cj) składa się z s bitów. Wartość s jest czasami włączana do nazwy trybu, np. 1-bitowy tryb CFB, 8-bitowy tryb CFB, 64-bitowy tryb CFB lub 128-bitowy tryb CFB.

Te tryby obcinają wyjście bazowego szyfru blokowego.

CFB-1 jest uważany za samosynchronizujący się i odporny na utratę zaszyfrowanego tekstu; „Kiedy używany jest 1-bitowy tryb CFB, synchronizacja jest automatycznie przywracana b+1 pozycji po wstawionym lub usuniętym bicie. Dla innych wartości sw trybie CFB oraz dla innych trybów poufności w tym zaleceniu synchronizacja musi zostać przywrócony zewnętrznie." (NIST SP800-38A). Tzn. utrata 1 bitu w szyfrze blokowym o szerokości 128 bitów, takim jak AES, spowoduje renderowanie 129 nieważnych bitów przed wyemitowaniem poprawnych bitów.

CFB może również synchronizować się samoczynnie w niektórych szczególnych przypadkach, innych niż określone. Na przykład jednobitowa zmiana w CFB-128 z bazowym 128-bitowym szyfrem blokowym zostanie ponownie zsynchronizowana po dwóch blokach. (Jednak CFB-128 itp. nie poradzi sobie z utratą bitów z wdziękiem; utrata jednego bitu spowoduje utratę zgodności deszyfratora z szyfratorem)

CFB w porównaniu do innych trybów

Podobnie jak w trybie CBC, zmiany w tekście jawnym rozchodzą się w nieskończoność w tekście zaszyfrowanym, a szyfrowanie nie może być zrównoleglane. Podobnie jak CBC, deszyfrowanie może być zrównoleglone.

CFB, OFB i CTR mają dwie zalety w porównaniu z trybem CBC: szyfr blokowy jest zawsze używany tylko w kierunku szyfrowania, a wiadomość nie musi być dopełniana do wielokrotności rozmiaru bloku szyfru (chociaż kradzież tekstu zaszyfrowanego może być również używana do tryb CBC, aby wypełnienie nie było konieczne).

Wyjście sprzężenia zwrotnego (OFB)

OFB
Wyjście sprzężenia zwrotnego
Szyfrowanie zrównoleglone Nie
Deszyfrowanie zrównoleglone Nie
Dostęp do odczytu losowego Nie

Tryb wyjściowego sprzężenia zwrotnego (OFB) przekształca szyfr blokowy w synchroniczny szyfr strumieniowy . Generuje bloki strumienia klucza , które są następnie XOR-owane z blokami tekstu jawnego, aby uzyskać tekst zaszyfrowany. Podobnie jak w przypadku innych szyfrów strumieniowych, odwrócenie bitu w tekście zaszyfrowanym daje odwrócony bit w tekście jawnym w tym samym miejscu. Ta właściwość umożliwia normalne działanie wielu kodów korygujących błędy, nawet po zastosowaniu przed szyfrowaniem.

Ze względu na symetrię operacji XOR szyfrowanie i deszyfrowanie są dokładnie takie same:

Szyfrowanie OFB.svg Deszyfrowanie OFB.svg

Każda operacja szyfru blokowego ze sprzężeniem zwrotnym zależy od wszystkich poprzednich, a zatem nie może być wykonywana równolegle. Ponieważ jednak tekst jawny lub tekst zaszyfrowany jest używany tylko do końcowego XOR, operacje szyfrowania blokowego mogą być wykonywane z wyprzedzeniem, co pozwala na równoległe wykonanie ostatniego kroku, gdy tekst jawny lub tekst zaszyfrowany jest dostępny.

Możliwe jest uzyskanie strumienia klucza trybu OFB przy użyciu trybu CBC ze stałym ciągiem zer jako wejściem. Może to być przydatne, ponieważ pozwala na użycie szybkich sprzętowych implementacji trybu CBC do szyfrowania w trybie OFB.

Używanie trybu OFB z częściowym blokiem jako sprzężenia zwrotnego, takiego jak tryb CFB, zmniejsza średnią długość cyklu o współczynnik 2 32 lub więcej. Model matematyczny zaproponowany przez Daviesa i Parkina i poparty wynikami eksperymentalnymi wykazał, że tylko przy pełnym sprzężeniu zwrotnym można osiągnąć średnią długość cyklu zbliżoną do możliwego do uzyskania maksimum. Z tego powodu obsługa obciętej informacji zwrotnej została usunięta ze specyfikacji OFB.

Licznik (CTR)

NS
Licznik
Szyfrowanie zrównoleglone tak
Deszyfrowanie zrównoleglone tak
Dostęp do odczytu losowego tak
Uwaga: tryb CTR (CM) jest również znany jako tryb licznika liczb całkowitych (ICM) i tryb segmentowego licznika liczb całkowitych (SIC).

Podobnie jak OFB, tryb licznika zamienia szyfr blokowy w szyfr strumieniowy . Generuje następny blok strumienia klucza , szyfrując kolejne wartości „licznika”. Licznikiem może być dowolna funkcja, która tworzy sekwencję, która na pewno nie będzie się powtarzać przez długi czas, chociaż rzeczywisty licznik przyrostowy jest najprostszy i najpopularniejszy. Użycie prostej deterministycznej funkcji wejściowej było kontrowersyjne; krytycy twierdzili, że „celowe wystawianie kryptosystemu na znane, systematyczne dane wejściowe stanowi niepotrzebne ryzyko”. Jednak obecnie tryb CTR jest powszechnie akceptowany, a wszelkie problemy są uważane za słabość podstawowego szyfru blokowego, który ma być bezpieczny niezależnie od systemowego błędu w jego danych wejściowych. Wraz z CBC tryb CTR jest jednym z dwóch trybów szyfrowania blokowego zalecanych przez Nielsa Fergusona i Bruce'a Schneiera.

Tryb CTR został wprowadzony przez Whitfielda Diffie i Martina Hellmana w 1979 roku.

Tryb CTR ma podobną charakterystykę do OFB, ale pozwala również na losowy dostęp podczas deszyfrowania. Tryb CTR jest dobrze przystosowany do pracy na maszynie wieloprocesorowej, gdzie bloki mogą być szyfrowane równolegle. Co więcej, nie ma problemu z krótkim cyklem, który może mieć wpływ na OFB.

Jeśli IV/nonce są losowe, można je połączyć z licznikiem za pomocą dowolnej odwracalnej operacji (konkatenacja, dodawanie lub XOR), aby wygenerować rzeczywisty unikalny blok licznika do szyfrowania. W przypadku nielosowej wartości jednorazowej (takiej jak licznik pakietów), wartość jednorazową i licznik należy połączyć (np. zapisanie wartości jednorazowej w górnych 64 bitach, a licznika w dolnych 64 bitach bloku licznika 128-bitowego) . Zwykłe dodanie lub XOR jednokrotności i licznika do pojedynczej wartości w wielu przypadkach złamałoby zabezpieczenia w przypadku ataku z wybranym tekstem jawnym , ponieważ atakujący może być w stanie manipulować całą parą IV-licznik, aby spowodować kolizję. Gdy atakujący kontroluje parę liczników IV i tekst jawny, XOR zaszyfrowanego tekstu ze znanym tekstem jawnym da wartość, która po przeprowadzeniu XOR z tekstem zaszyfrowanym z drugiego bloku dzielącego tę samą parę liczników IV odszyfruje ten blok.

Zauważ, że nonce na tym diagramie jest równoważne wektorowi inicjującemu (IV) na innych diagramach. Jednakże, jeśli informacje o przesunięciu/lokalizacji są uszkodzone, częściowe odzyskanie takich danych będzie niemożliwe ze względu na zależność od przesunięcia bajtów.

Szyfrowanie CTR 2.svg Deszyfrowanie CTR 2.svg

Propagacja błędów

Właściwości „Propagacja błędów” opisują, jak zachowuje się odszyfrowywanie podczas błędów bitowych, tj. jak błąd w jednym bicie przechodzi kaskadowo do różnych odszyfrowanych bitów.

Błędy bitowe mogą wystąpić losowo z powodu błędów transmisji.

Błędy bitowe mogą występować celowo w atakach.

  • Specyficzne błędy bitowe w trybach szyfrowania strumieniowego (OFB, CTR, itp.) są trywialne, wpływają tylko na określony bit.
  • Specyficzne błędy bitowe w bardziej złożonych trybach (np. CBC): adaptacyjny atak z wybranym szyfrogramem może inteligentnie łączyć wiele różnych specyficznych błędów bitowych, aby złamać tryb szyfrowania. W ataku Padding oracle , CBC można odszyfrować podczas ataku, odgadując tajemnice szyfrowania na podstawie odpowiedzi na błędy. Wariant ataku Padding Oracle „CBC-R” (CBC Reverse) umożliwia atakującemu skonstruowanie dowolnej prawidłowej wiadomości.

W przypadku nowoczesnego szyfrowania uwierzytelnionego (AEAD) lub protokołów z kodami uwierzytelniania wiadomości połączonymi w kolejności MAC-Then-Encrypt, każdy błąd bitowy powinien całkowicie przerwać odszyfrowywanie i nie może generować żadnych konkretnych błędów bitowych dla deszyfratora. Tzn. jeśli odszyfrowanie się powiodło, nie powinno być żadnego błędu bitowego. Ponieważ takie propagacje błędów są mniej ważne w nowoczesnych trybach szyfrowania niż w tradycyjnych trybach tylko poufnych.

Tryb Wpływ błędów bitowych w C i Wpływ błędów bitowych w IV
EBC Losowe błędy bitowe w P i Nie dotyczy
CBC Losowe błędy bitowe w P i
Określone błędy bitowe w P i+1
Określone błędy bitowe w deszyfrowaniu C 1
CFB Określone błędy bitowe w P i
Losowe błędy bitowe w P i+1
Losowe błędy bitowe w deszyfrowaniu C 1
OFB Określone błędy bitowe w P i Losowe błędy bitowe w deszyfrowaniu C 1 , C 2 , .., C n
NS Określone błędy bitowe w P i Nie dotyczy (błędy bitowe w j-tym bloku licznika, T j , powodują losowe błędy bitowe w deszyfrowaniu C j )

(Źródło: SP800-38A Tabela D.2: Podsumowanie wpływu błędów bitowych na deszyfrowanie)

Można na przykład zaobserwować, że błąd jednego bloku w przesyłanym tekście zaszyfrowanym skutkowałby błędem jednego bloku w zrekonstruowanym tekście jawnym dla szyfrowania w trybie EBC, podczas gdy w trybie CBC taki błąd miałby wpływ na dwa bloki. Niektórzy uważali, że taka odporność jest pożądana w obliczu losowych błędów (np. szumów linii), podczas gdy inni twierdzili, że korygowanie błędów zwiększa możliwość złośliwego manipulowania wiadomością przez atakujących.

Jednak przy zastosowaniu odpowiedniej ochrony integralności taki błąd spowoduje (z dużym prawdopodobieństwem) odrzucenie całej wiadomości. Jeżeli pożądana jest odporność na błąd losowy, przed transmisją do zaszyfrowanego tekstu należy zastosować kody korekcji błędów .

Inne tryby i inne prymitywy kryptograficzne

Zasugerowano znacznie więcej trybów działania szyfrów blokowych. Niektóre zostały zaakceptowane, w pełni opisane (nawet znormalizowane) i są w użyciu. Inne okazały się niepewne i nigdy nie powinny być używane. Jeszcze inni nie kategoryzują jako poufność, autentyczność lub uwierzytelnione szyfrowanie – na przykład tryb informacji zwrotnej od klucza i haszowanie Daviesa-Meyera .

NIST utrzymuje listę proponowanych trybów dla szyfrów blokowych w Modes Development .

Szyfrowanie dysku często wykorzystuje tryby specjalnego przeznaczenia zaprojektowane specjalnie dla aplikacji. Modyfikowalne tryby szyfrowania wąskich bloków ( LRW , XEX i XTS ) oraz tryby szyfrowania szerokiego bloku ( CMC i EME ) są przeznaczone do bezpiecznego szyfrowania sektorów dysku (patrz teoria szyfrowania dysku ).

Wiele trybów używa wektora inicjującego (IV), który w zależności od trybu może mieć wymagania, takie jak użycie tylko raz (jednorazowe) lub nieprzewidywalność przed publikacją itp. Ponowne użycie IV z tym samym kluczem w CTR, GCM lub tryb OFB powoduje XORowanie tego samego strumienia klucza z dwoma lub więcej tekstami jawnymi, wyraźne niewłaściwe użycie strumienia z katastrofalną utratą bezpieczeństwa. Deterministyczne uwierzytelnione tryby szyfrowania, takie jak algorytm NIST Key Wrap i tryb SIV (RFC 5297) AEAD nie wymagają IV jako danych wejściowych i zwracają ten sam tekst zaszyfrowany i znacznik uwierzytelniania za każdym razem dla danego tekstu jawnego i klucza. Inne tryby odporne na nadużycia IV, takie jak AES-GCM-SIV, korzystają z wejścia IV, na przykład w maksymalnej ilości danych, które można bezpiecznie zaszyfrować za pomocą jednego klucza, bez katastrofalnej awarii, jeśli ta sama IV jest używana wielokrotnie.

Szyfry blokowe mogą być również używane w innych protokołach kryptograficznych . Są one zwykle używane w trybach działania podobnych do opisanych tutaj trybów blokowych. Podobnie jak w przypadku wszystkich protokołów, aby zapewnić bezpieczeństwo kryptograficzne, należy zadbać o prawidłowe zaprojektowanie tych trybów działania.

Istnieje kilka schematów wykorzystujących szyfr blokowy do zbudowania kryptograficznej funkcji skrótu . Zobacz funkcję kompresji jednokierunkowej dla opisów kilku takich metod.

Za pomocą szyfrów blokowych można również zbudować kryptograficznie bezpieczne generatory liczb pseudolosowych (CSPRNG).

Kody uwierzytelniania wiadomości (MAC) są często budowane z szyfrów blokowych. CBC-MAC , OMAC i PMac przykłady.

Zobacz też

Bibliografia