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

Podobne dokumenty