Kodowanie i kompresja 1 Kryptografia: wst˛ep 2 Kryptografia
Transkrypt
Kodowanie i kompresja 1 Kryptografia: wst˛ep 2 Kryptografia
Kodowanie i kompresja Streszczenie Wieczorowe Studia Licencjackie Wykład 14, 12.06.2007 1 Kryptografia: wst˛ep Wyróżniamy algorytmy: • symetryczne: ten sam klucz jest stosowany do szyfrowania i deszyfrowania; • asymetryczne: klucze do szyfrowania i deszyfrowania sa˛ 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˛epu; • “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˛estotliwości. 1 2.1 One-time pad Metoda: dla danych a1 . . . an i klucza k1 . . . kn , kryptogram jest równy (a1 ⊕ k1 )(a2 ⊕ k2 ) . . . (an ⊕ kn ). gdzie operacja ⊕ oznacza dodawanie modulo 2 (inaczej operacj˛e xor). UWAGI: • klucz stosujemy tylko jeden raz! • klucz powinien być losowym ciagiem ˛ bitów. Przy zachowaniu tych warunków i poufności klucza, kryptogram stanowi losowy ciag ˛ bitów. Dlaczego klucz należy stosować tylko jeden raz: • Załóżmy, że klucz k0 . . . kn−1 jest stosowany do zaszyfrowania tekstu a0 . . . am dla m À n w ten sposób, że ci = ai ⊕ ki mod n , gdzie c to zaszyfrowana postać tekstu. Inaczej mówiac, ˛ stosujemy k dla kolejnych bloków tekstu o długości n. • Wówczas, zachodzi własność: cj ⊕ cj+n = (aj ⊕ kj ) ⊕ (aj+n ⊕ kj ) = aj ⊕ aj+n To pozwala wyliczyć z kryptogramu wartość aj na podstawie aj+in dla i ∈ N i odwrotnie. Przyjmujac ˛ hipotez˛e, ż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˛e to na fakcie, że: • przyjmujac ˛ pewna˛ wartość aj możemy (z kryptogramu) wyznaczyć aj+n – tu założenie o spacjach może dać jakieś sensowne słowa; • znajac ˛ (na pewno) wartość aj i cj możemy odtworzyć kj 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 256 ); • najlepsze sa˛ implementacje hardware’owe; • wieloletni standard amerykański; • na obecne czasy (chyba) za krótki klucz. Etapy i parametry: • Tworzenie podkluczy K1 , . . . , K16 , 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˛ecenie do implementacji software’owych). • 16 rund: Runda i + 1: dla danych 32 bitowych argumentów Li i Ri wyznacza Li+1 i Ri+1 w nast˛epujacy ˛ sposób: Li+1 = Ri , Ri+1 = Li ⊕ f (Ri , Ki+1 ), (1) gdzie L0 i R0 to dwie cz˛eści kodowanego bloku danych. • Permutacja odwrotna do permutacji zastosowanej na poczatku. ˛ Jak działa funkcja f (Ri , Ki+1 ): • Rozszerzenie Ri do rozmiaru 48 bitów (niektóre bity powielane). Niech ta rozszerzona wartość to Ri0 • Wyliczenie S = Ri0 ⊕ Ki+1 • Zastosowanie wybranych S-boksów S1 , . . . , S8 do kolejnych 6-bitowych bloków ciagu ˛ S. Każdy S-box daje w wyniku 4 bity, a zatem na koniec uzyskujemy ciag ˛ 32-bitowy. Co to jest S-box: • Tablica liczb o 4 wierszach i 16 kolumnach. • Każdy wiersz zawiera (pewna) ˛ permutacj˛e liczb 0, 1, . . . , 15. 3 • Dla 6-bitowego argumentu, wartościa˛ jest liczba z wiersza wyznaczonego przez pierwsze dwa bity i kolumny wyznaczonej przez pozostałe cztery bity. Uwagi na temat S-boxów: • definiuja˛ funkcje nieodwracalne; • w DES stosuje si˛e z góry zadane S-boxy; brak jest formalnych argumentów uzasadniajacych ˛ taki właśnie wybór. Jak deszyfrować DESa, skoro S-boxy sa˛ nieodwracalne: • Z (1) uzyskujemy: Ri−1 = Li , Li−1 = Ri ⊕ f (Ri−1 , Ki ) = Ri ⊕ f (Li , Ki ) • Powyższa zależność pozwala na zastosowanie kolejnych rund DESa “od końca” do deszyfrowania (o ile znamy klucz!). UWAGA: DES zast˛epowany przez AES (Advanced Encryption Standard). Trzykrotny DES, dla kluczy S1 , S2 : 1. najpierw tekst jawny szyfrowany kluczem S1 ; 2. wynik powyższego kroku jest deszyfrowany kluczem S2 ; 3. wynik kroku 2 jest szyfrowany kluczem S1 . Dlaczego nie stosuje si˛e tzw. “podwójnego DESa” polegajacego ˛ na szyfrowaniu DESK1 (DESK2 (x))? Czyli atak dla znanej pary (tekst jawny x; kryptogram y): • tworzymy tablic˛e rozmiaru 256 , dla każdego klucza tworzymy DES(x). • tworzymy tablic˛e rozmiaru 256 , dla każdego klucza tworzymy DES−1 (y). • te same wartości w obu tablicach pozwalaja˛ wyznaczyć kandydatów na pary kluczy K1 , K2 ; pary te możemy zweryfikować na innych danych. EFEKT: złożoność przeszukiwania całej przestrzeni nie wzrasta z 256 do 2112 lecz do 2 · 256 . 4 2.3 Szyfrowanie dowolnie długich tekstów (przy pomocy jednego klucza) 1. Elektroniczna ksia˛ż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 P1 , P2 , P3 , . . ., klucz to K. Kolejne bloki kryptogramu wyznaczane sa˛ według wzoru: C1 = EK (P1 ⊕ I), Ci = EK (Pi ⊕ Ci−1 ) dla i > 1, gdzie EK oznacza operacj˛e szyfrowania z kluczem K, a I to losowy (jawny) ciag ˛ o długości jednego bloku. Deszyfrowanie: (dane C1 , C2 , . . ., chcemy odtworzyć P1 , P2 , . . .) −1 • P1 = EK (C1 ) ⊕ I; −1 • Pi = EK (Ci ) ⊕ Ci−1 . −1 gdzie EK to operacja deszyfrowania DESa, z użyciem klucza K. ZALETY: nie można podmienić pojedynczego bloku; bład ˛ transmisji propaguje si˛e 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 P1 , P2 , . . ., gdzie Pi to blok 8 bitów, wynik C1 , C2 . . .) • na poczatku ˛ znany blok I długości 64 bitów umieszczamy w rejestrze przesuwajacym ˛ R = R1 . . . R8 = EK (I) (Ri to 8 bitów); • każde kolejne 8 bitów wyjściowych Ci powstaje w nast˛epujacy ˛ sposób: – szyfrujemy rejestr przesuwajacy: ˛ R10 . . . R80 = EK (R1 . . . R8 ) – tworzymy kolejne 8 bitów wyjściowych: Ci = R10 ⊕ Pi ; – te bity wyjściowe umieszczane sa˛ w rejestrze przesuwajacym ˛ (przesuwamy pozostałe, żeby zrobić im miejsce): R := R2 R3 . . . R8 Ci ; Deszyfrowanie (dane C1 , C2 , . . ., oraz I wynik P1 , P2 , . . ., gdzie Pi , Ci to bloki 8-bitowe): 5 • poczatkowa ˛ zawartość rejestru to I; • kolejny znak Pi odtwarzamy w nast˛epujacy ˛ sposób: – szyfrujemy zawartość rejestru: R10 . . . R80 = EK (R1 . . . R8 ); – odtwarzamy kolejne 8 bitów wejściowych: Pi = R10 ⊕ Ci ; – w rejestrze przesuwajacym ˛ umieszczamy kolejne bity kryptogramu: R := R2 R3 . . . R8 Ci ; Literatura: M.Kutyłowski, W. Strothmann, Kryptografia, Read Me, 1999. 6