bsk:kryptosystemy_symetryczne

13.2. Omów znane Ci kryptosystemy symetryczne oraz metody dystrybucji tajnych kluczy szyfrowania w systemach symetrycznych

Szyfry symetryczne dzieli się na dwa rodzaje:

## Blokowe (DES, IDEA, AES)

Procedury, które w jednym przejściu operują na blokach znaków zwykle o określonej wielkości, szyfrując niewielkie bloki danych - współcześnie jest to najczęściej 128 bitów (AES), choć do niedawna przeważały 64-bitowe bloki (DES, 3DES, Blowfish, IDEA). Klucze są znacznie mniejsze, mają zwykle od 128 do 256 bitów, przy czym wartości mniejsze od 80 (DES - 56) są uważane za niewystarczające. Typowy szyfr blokowy składa się z kilkunastu dość prostych rund przekształcających blok. Operacje używane w tych szyfrach są zwykle proste, ale są mocno zróżnicowane, np. używa się dodawania, XOR, przesunięć cyklicznych, różnego typu S-BOX-ów, mnożenia modulo liczb pierwszych itd. Już kilka rund takich operacji zupełnie zaburza jakikolwiek porządek i jest bardzo trudne do analizowania. Ponieważ szyfr blokowy szyfruje jedynie niewielką ilość informacji, używane są różne tryby szyfrowania, które umożliwiają szyfrowanie większych wiadomości. Niektóre z trybów szyfrów blokowych - CFB, OFB, CTR - działają jako szyfry strumieniowe, generując strumień szyfrujący i XOR-ując dane. Zależnie od trybu działania mogą być zaimplementowane jako samosynchronizujące się szyfry strumieniowe (tryb CFB).

### DES

DES (Digital Encription Standard) – został opracowany jeszcze w latach pięćdziesiątych przez pracowników firmy IBM na podstawie szyfru Lucifer i zastosowany w numerach PIN firmy ATM oraz układach scalonych przeznaczonych do szyfrowania danych przesyłanych przez sieć. DES jest algorytmem blokowym wykorzystującym klucz 56-bitowy, zaakceptowanym przez rząd Stanów Zjednoczonych jako standard szyfrowania danych bez klauzuli tajności; Z powodu słabości klucza (56 bitów) został w duże}}j mierze zastąpiony przez inne szyfry: modyfikacje DESa takie jak 3DES czy DESX, a ostatnio przez nowsze i bezpieczniejsze algorytmy jak AES, IDEA, Twofish itd.
DES ma 4 słabe i 12 półsłabych kluczy1). Szansa na wylosowanie takiego nie wpływa w istotny sposób na siłę szyfru. Klucze są rozpowszechniane w nietypowym formacie, w którym co 7 bitów jest dodawany bezużyteczny bit (który pierwotnie miał służyć kontroli parzystości).
Kryptograficznie rzecz biorąc klucze są jednak 56-bitowe.
DES był łamany wielokrotnie. 17 lipca 1998 zbudowany za 250 tysięcy dolarów EFF DES Cracker odszyfrował zakodowaną DESem wiadomość po 3 dniach poszukiwań, bijąc poprzedni rekord 39 dni. 18 stycznia 1999, złamanie DESa zajęło 22 godziny 15 minut wspólnym wysiłkiem EFF (maszyna do łamania DESa) i distributed.net (obliczenia rozproszone na tysiącach PCtów).

### 3DES

3DES to algorytm polegający na zaszyfrowaniu wiadomości DESem trzy razy.
Użycie dekodowania jako drugiej fazy nie wpływa na siłę algorytmu (dekodowanie w DESie jest identyczne jak kodowanie, tylko ma odwróconą kolejność rund), ale umożliwia używania 3DESa w trybie kompatybilności z DESem – za klucz pierwszy i drugi, lub drugi i trzeci przyjmujemy dowolny taki sam klucz, a za ostatni zwykły klucz DESowski. 3DES używa takich samych rozmiarów bloków oraz trybów jak zwykły DES. Siła 3DESa jest tylko dwukrotnie, nie trzykrotnie większa od siły zwykłego DESa, ze względu na atak meet in the middle.

### DESX

DESX to prosta modyfikacja DESa. Klucz ma nietypowy rozmiar 184 bitów (64+56+64).
DESX jest co najmniej tak samo bezpieczny jak DES na wszystkie możliwe ataki, a na niektóre wydaje się być znacznie bardziej odporny. W szczególności klucz jest już na tyle duży, że sprawdzenie wszystkich kluczy jest niepraktyczne.
DESX jest też bardzo szybki (potrzeba tylko dwóch 64-bitowych XORów na blok), w przeciwieństwe do innych modyfikacji DESa takich jak 3DES (który potraja czas wykonywania).

### IDEA

IDEA (International Data Incription Algorithm) – został opracowany w Zurichu pod koniec lat 80-tych przez Jamesa L. Masseya i Xuejie Lai i opublikowany w roku 1990; algorytm blokowy operujący na 64-bitowych blokach wiadomości, stosujący jednak dłuższy klucz – 128-bitowy. IDEA używa operacji z 3 światów na 16-bitowych liczbach: XOR, Dodawanie modulo 216, Mnożenie modulo 216 + 1 (które jest liczbą pierwszą), przy czym liczba 0 jest traktowana jako 216.
IDEA była używana we wczesnych wersjach PGP. IDEA jest objęta patentem w USA, i jest dostępna do darmowego użytku tylko w celach niekomercyjnych. Ze względów patentowych oraz ze względu na powstanie lepszych algorytmów (AES) i postępy w kryptoanalizie IDEA znacznie straciła na popularności, choć nie została nigdy złamana.

### AES

AES (Advanced Encryption Standard) to symetryczny szyfr blokowy przyjęty przez NIST w wyniku konkursu ogłoszonego w roku 1997. Bezpośrednią przyczyna rozpisania konkursu była niewystarczająca siła algorytmu DES. EFF była w stanie złamać wiadomość zakodowaną DESem w ciągu 3 dni sprzętem o wartości 250 tysięcy dolarów w 1997 (obecnie można złamać DES-a jeszcze szybciej i taniej).
Do finału konkursu zakwalifikowało się pięć algorytmów szyfrujących (Rijndael, RC6, Mars, Serpent oraz Twofish), ze szczególnym wskazaniem na algorytm Rijndael. Możliwe jest w nim użycie kluczy o długościach 128, 192 i 256 bitów, i operuje on na blokach danych o długości 128 bitów (oryginalna specyfikacja Rijndael dopuszczała również bloki 192 i 256 bitowe).
AES wykonuje 10 rund szyfrujących substitution-permutation, składających się z substytucji wstępnej, permutacji macierzowej (mieszanie wierszy, mieszanie kolumn) i modyfikacji za pomocą klucza, przy czym funkcja substytucyjna ma bardzo oryginalną konstrukcję, która uodparnia go na znane ataki kryptoanalizy różnicowej i liniowej. Odmiany algorytmu Rijndael niebędące standardem AES, w zależności od długości klucza i bloku danych wykonują 12 lub 14 owych rund. Szyfr AES może operować na bloku o zmiennej długości, używając kluczy zmiennej długości. Oficjalna specyfikacja dopuszcza użycie bloków 128-, 192- lub 256-cio bitowych, szyfrowanych kluczami 128-, 192- lub 256-cio bitowymi. Dopuszczalne są wszystkie z 9 kombinacji.
Rijndael jest “iterowanym szyfrem blokowym”, co oznacza, że blok wejściowy oraz klucz przechodzą wielokrotne RUNDY transformacji, zanim wyprodukują wynik. Po każdej rundzie, powstaje szyfr pośredni, zwany STANEM (State).

### Blowfish

Blowfish to szyfr blokowy stworzony przez Bruce’a Schneier’a w 1993 roku jako szybka i bezpłatna alternatywa dla istniejących ówcześnie algorytmów.
Algorytm operuje na 64-bitowych blokach i używa kluczy od 32 do 448 bitów.
Algorytm ma postać szyfru Feistela2) z 16 rundami z SBOXami zależnymi od klucza. Każda zmiana klucza wymaga dość sporej ilości wstępnych obliczeń, żeby ustalić SBOXy. Z tego powodu atak brute-force trwa znacznie dłużej niż możnaby się spodziewać.
W typowych algorytmach jeśli długość klucza to k, a koszt zakodowania bloku to B, koszt ataku brute-force wynosi 2kB. W przypadku Blowfisha trzeba dla każdego klucza obliczyć SBOXy, co zajmuje tyle co zakodowanie ok. 29 bloków, a więc czas ataku brute-force wynosi około 2k + 9B (a zatem atak na 64-bitowy Blowfish zajmuje mniej więcej tyle czasu co na 73-bitowy bardziej tradycyjny szyfr). Wadą tego rozwiązania są dość duże wymagania pamięciowe – potrzebne są ponad 4kB pamięci, co nie jest problemem dla nawet słabych komputerów, ale jest już dla np. kart chipowych.
Nie istnieją znane ataki na Blowfisha o ilości rund większej niż 4. Są znane dość duże jak na symetryczny szyfr blokowy grupy słabych kluczy, czyli takich, dla których Blowfish jest słabszy niż dla typowych kluczy (większość szyfrów posiada takowe, jednak szansa na wylosowanie takiego klucza jest bardzo niska).

## Strumieniowe (RC4)

Szyfry strumieniowe szyfrują każdy znak tekstu jawnego osobno, generując znak strumienia szyfrującego i przekształcając go na przykład z użyciem funkcji XOR go ze znakiem danych, w związku z czym nie jest konieczne oczekiwanie na cały blok danych, jak w przypadku szyfrów blokowych. Przekształcają ciągły strumień znaków szyfrując znak po znaku. Popularne szyfry strumieniowe to A5/1 i A5/2 stosowane w telefonii komórkowej. Do szyfrów strumieniowych należą też historyczne szyfry polialfabetyczne i monoalfabetyczne. Mogą również być zastosowane do przetwarzania pojedynczych bloków jawnego tekstu na raz.

RC2, RC4 (Ron’s Code 2,4) – zostały opracowane przez Rona Rivesta z RSA na początku lat 90-tych; RC2 jest algorytmem blokowym umożliwiającym stosowanie klucza o długości od 1 do 2048 bitów; RC4 jest algorytmem strumieniowym o tej samej długości klucza co RC2.

## Dystrybucja kluczy

Dystrybucja kluczy z wykorzystaniem algorytmów symetrycznych:

- Klucz może zostać stworzony przez Alicję i fizycznie dostarczony Bobowi
- Strona trzecia może stworzyć klucz i fizycznie dostarczyć go Alicji i Bobowi
- Jeśli Alicja i Bob poprzednio i niedawno używali klucza, jedna strona może przekazać nowy klucz drugiej w postaci zaszyfrowanej starym kluczem
- Jeśli każda ze stron ma szyfrowane połączenie z trzecią stroną, Cezarym, to Cezary może dostarczyć klucz Alicji i Bobowi za pośrednictwem połączeń szyfrowanych.

## Kerberos

Kerberos jest implementacją Centrum Dystrybucji Kluczy stworzoną w Massachusetts Institute of Technology. Jako główną metodę kryptograficzną w projekcie zastosowano DES.
Powstało też wiele interfejsów programistycznych pozwalających wbudowywać mechanizmy bezpieczeństwa dostarczane przez serwer Kerberos do aplikacji.

1) Klucz półsłaby to klucz kryptograficzny, dla którego istnieje inny, równoważny klucz. Istnienie takich par kluczy stwierdzono w szyfrach z rodziny DES
2) do generacji szyfru Feistela wykorzystuje się sieć Feistela - pozwala na szyfrowanie i deszyfrowanie informacji tym samym algorytmem, mimo iż funkcja f nie jest odwracalna. Sieć Feistela generuje z tekstu jawnego szyfrogram, a z szyfrogramu tekst jawny. W ten sposób konstruowanie algorytmów szyfrujących znacznie się uprościło, ponieważ nie trzeba się troszczyć o odwracalność funkcji f.