1 Kryptografia: wstęp Wyróżniamy algorytmy: Kodowanie i kompresja Streszczenie Wieczorowe Studia Licencjackie Wykład 14, 12.06.2007 symetryczne: ten sam klucz jest stosowany do szyfrowania i deszyfrowania; asymetryczne: klucze do szyfrowania i deszyfrowania są różne; nie powinno być (w praktyce) możliwe odtworzenie jednego z tych kluczy na podstawie drugiego. Wiele podstawowych zastosowań kryptografii wymaga też stosowania funkcji haszujacych. Podstawowe zastosowania: poufność danych (na dysku, przesyłanych w sieci,...); uwierzytelnianie (możliwość weryfikacji autorstwa danych); autoryzacja dostępu; elektroniczny notariusz ; weryfikacja integralności danych (wykrywalność zmian). itd. Podstawowe kryteria jakości metod kryptograficznych: algorytm powszechnie znany; bezpieczeństwo oparte na tajności kluczy, nie algorytmu; podejmowano wiele nieskutecznych prób kryptoanalizy. 2 Kryptografia: algorytmy symetryczne Metody podstawieniowe: możliwość ataku opartego na analizie częstotliwości. 1
2.1 One-time pad Metoda: dla danych kryptogram jest równy a 1... a n i klucza k 1... k n, (a 1 k 1 )(a 2 k 2 )... (a n k n ). gdzie operacja oznacza dodawanie modulo 2 (inaczej operację xor). UWAGI: klucz stosujemy tylko jeden raz! klucz powinien być losowym ciągiem bitów. Przy zachowaniu tych warunków i poufności klucza, kryptogram stanowi losowy ciąg bitów. Dlaczego klucz należy stosować tylko jeden raz: Załóżmy, że klucz k 0... k n 1 jest stosowany do zaszyfrowania tekstu a 0... a m dla m n w ten sposób, że c i = a i k i mod, gdzie c to zaszyfrowana postać n tekstu. Inaczej mówiąc, stosujemy k dla kolejnych bloków tekstu o długości n. Wówczas, zachodzi własność: c j c j+n = (a j k j ) (a j+n k j ) = a j a j+n To pozwala wyliczyć z kryptogramu wartość a j na podstawie a j+in dla i N i odwrotnie. Przyjmując hipotezę, że pewne fragmenty tekstu to np. bloki spacji (być może) odtworzymy fragmenty tekstu, z których z kolei poznamy pewne bity klucza, a to z kolei pozwoli odkodować kolejne symbole itd. Opiera się to na fakcie, że: przyjmując pewną wartość a j możemy (z kryptogramu) wyznaczyć a j+n tu założenie o spacjach może dać jakieś sensowne słowa; znając (na pewno) wartość a j i c j możemy odtworzyć k j mod n. 2
2.2 DES=Data Encryption Standard Cechy ogólne: szyfruje bloki o długości 64 bitów; klucz jest 64-bitowy, ale 8 bitów to bity parzystości (czyli liczba możliwych kluczy to 2 56 ); najlepsze są implementacje hardware owe; wieloletni standard amerykański; na obecne czasy (chyba) za krótki klucz. Etapy i parametry: Tworzenie podkluczy K 1,..., K 16, każdy o długości 48 bitów, uzyskany w ustalony sposób z klucza głównego (w którym usuwamy bity parzystości). Permutacja bitów danych: ustalona (cel: zniechęcenie do implementacji software owych). 16 rund: Runda i + 1: dla danych 32 bitowych argumentów L i i R i wyznacza L i+1 i R i+1 w następujący sposób: L i+1 = R i, R i+1 = L i f(r i, K i+1 ), (1) gdzie L 0 i R 0 to dwie części kodowanego bloku danych. Permutacja odwrotna do permutacji zastosowanej na początku. Jak działa funkcja f(r i, K i+1 ): Rozszerzenie R i do rozmiaru 48 bitów (niektóre bity powielane). Niech ta rozszerzona wartość to R i Wyliczenie S = R i K i+1 Zastosowanie wybranych S-boksów S 1,..., S 8 do kolejnych 6-bitowych bloków ciągu S. Każdy S-box daje w wyniku 4 bity, a zatem na koniec uzyskujemy ciąg 32-bitowy. Co to jest S-box: Tablica liczb o 4 wierszach i 16 kolumnach. Każdy wiersz zawiera (pewną) permutację liczb 0, 1,..., 15. 3
Dla 6-bitowego argumentu, wartością jest liczba z wiersza wyznaczonego przez pierwsze dwa bity i kolumny wyznaczonej przez pozostałe cztery bity. Uwagi na temat S-boxów: definiują funkcje nieodwracalne; w DES stosuje się z góry zadane S-boxy; brak jest formalnych argumentów uzasadniających taki właśnie wybór. Jak deszyfrować DESa, skoro S-boxy są nieodwracalne: Z (1) uzyskujemy: R i 1 = L i, L i 1 = R i f(r i 1, K i ) = R i f(l i, K i ) Powyższa zależność pozwala na zastosowanie kolejnych rund DESa od końca do deszyfrowania (o ile znamy klucz!). UWAGA: DES zastępowany przez AES (Advanced Encryption Standard). Trzykrotny DES, dla kluczy S 1, S 2 : 1. najpierw tekst jawny szyfrowany kluczem S 1 ; 2. wynik powyższego kroku jest deszyfrowany kluczem S 2 ; 3. wynik kroku 2 jest szyfrowany kluczem S 1. Dlaczego nie stosuje się tzw. podwójnego DESa polegającego na szyfrowaniu DES K1 (DES K2 (x))? Czyli atak dla znanej pary (tekst jawny x; kryptogram y): tworzymy tablicę rozmiaru 2 56, dla każdego klucza tworzymy DES(x). tworzymy tablicę rozmiaru 2 56, dla każdego klucza tworzymy DES 1 (y). te same wartości w obu tablicach pozwalają wyznaczyć kandydatów na pary kluczy K 1, K 2 ; pary te możemy zweryfikować na innych danych. EFEKT: złożoność przeszukiwania całej przestrzeni nie wzrasta z 2 56 do 2 112 lecz do 2 2 56. 4
2.3 Szyfrowanie dowolnie długich tekstów (przy pomocy jednego klucza) 1. Elektroniczna książka kodowa: Tekst dzielimy na bloki (w przypadku DESa 64-bitowe). Każdy blok szyfrowany osobno. WADA: możliwość podmieniania bloków. 2. CBC (Cipher Block Chaining): Niech dane (po podziale na bloki) to P 1, P 2, P 3,..., klucz to K. Kolejne bloki kryptogramu wyznaczane są według wzoru: C 1 = E K (P 1 I), C i = E K (P i C i 1 ) dla i > 1, gdzie E K oznacza operację szyfrowania z kluczem K, a I to losowy (jawny) ciąg o długości jednego bloku. Deszyfrowanie: (dane C 1, C 2,..., chcemy odtworzyć P 1, P 2,...) P 1 = E 1 K (C 1) I; P i = E 1 K (C i) C i 1. gdzie E 1 K to operacja deszyfrowania DESa, z użyciem klucza K. ZALETY: nie można podmienić pojedynczego bloku; błąd transmisji propaguje się tylko do jednego bloku do przodu. 3. CFB (Cipher Feedback): ma działać on-line (przesyłamy znak po znaku), np. dla transmisji danych z klawiatury do terminala. Idea kodowania z kluczem K: (dane P 1, P 2,..., gdzie P i to blok 8 bitów, wynik C 1, C 2...) na początku znany blok I długości 64 bitów umieszczamy w rejestrze przesuwajacym R = R 1... R 8 = E K (I) (R i to 8 bitów); każde kolejne 8 bitów wyjściowych C i powstaje w następujący sposób: szyfrujemy rejestr przesuwający: R 1... R 8 = E K (R 1... R 8 ) tworzymy kolejne 8 bitów wyjściowych: C i = R 1 P i ; te bity wyjściowe umieszczane są w rejestrze przesuwającym (przesuwamy pozostałe, żeby zrobić im miejsce): R := R 2 R 3... R 8 C i ; Deszyfrowanie (dane C 1, C 2,..., oraz I wynik P 1, P 2,..., gdzie P i, C i to bloki 8-bitowe): 5
początkowa zawartość rejestru to I; kolejny znak P i odtwarzamy w następujący sposób: szyfrujemy zawartość rejestru: R 1... R 8 = E K (R 1... R 8 ); odtwarzamy kolejne 8 bitów wejściowych: P i = R 1 C i ; w rejestrze przesuwającym umieszczamy kolejne bity kryptogramu: R := R 2 R 3... R 8 C i ; Literatura: M.Kutyłowski, W. Strothmann, Kryptografia, Read Me, 1999. 6