22.04.2014 Views

Wykład II: Klasyczne metody szyfrowania

Wykład II: Klasyczne metody szyfrowania

Wykład II: Klasyczne metody szyfrowania

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Rozdział 2<br />

Systemy kryptograficzne<br />

Podstawowym elementem, który odróżnia steganografię od kryptografii jest<br />

system kryptograficzny. W tym rozdziale postaramy się przybliżyć pojęcie<br />

system kryptograficzny.<br />

2.1 Podstawowe pojęcia<br />

Kryptografia dzieli się na kryptografię właściwą, która zajmuje się konstrukcją<br />

szyfrów oraz na kryptoanalizę, która zajmuje się łamaniem szyfrów. Z metodami<br />

konstrukcji szyfrów związane jest pojęcie kryptosystemu, czyli systemu<br />

kryptograficznego. Formalna definicja tego pojęcia nie jest łatwa do<br />

zrozumienia. Ograniczymy się tu tylko do wskazania pewnych intuicji. Najpierw<br />

sprecyzujemy dwa elementy, które każdy system kryptograficzny powinien<br />

posiadać. Od dobrego kryptosystemu wymagamy, żeby był on<br />

• poufny lub tajny, tj. w razie przechwycenia tekstu przez osobę niepowołaną,<br />

osoba ta nie byłaby w stanie odczytać tekstu.<br />

• autentyczny, tj. adresat nie tylko byłby w stanie przeczytać otrzymaną<br />

wiadomość, ale także miałby pewność, że pochodzi ona od osoby, która<br />

się pod nią podpisuje.<br />

Aby jednak wiadomość mogła być wysłana, najpierw trzeba ją w jakiś<br />

sposób napisać. W tym celu używamy alfabetu, który definiujemy jako<br />

dowolny zbiór skończony. Liczbę elementów zbioru A (alfabetu) będziemy<br />

oznaczać przez |A|, #A lub A. Do zapisywania wiadomości będziemy używać<br />

alfabetu<br />

1


A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,<br />

który utożsamimy z liczbami 0, 1, 2, . . . , 25. Jeśli rozważymy inny alfabet,<br />

to również jego elementy (litery) utożsamimy z liczbami 0, 1, 2, . . . , q,<br />

gdzie q jest liczbą liter w tym alfabecie. Tego rodzaju utożsamienie pozwala<br />

nam wykonywać na literach podstawowe działania arytmetyczne zgodnie z<br />

zasadami arytmetyki modularnej.<br />

Przyjmijmy, że dana jest liczba m > 1 (zwana modułem). Na zbiorze<br />

liczb {0, 1, 2, . . . , m} definiujemy dodawanie w następujący sposób.<br />

• Jeśli suma dwóch liczb jest mniejsza od m, to jest to wynik dodawania<br />

modularnego.<br />

• Jeśli suma ta jest większa od m, to wynikiem jest reszta z dzielenia<br />

tejże sumy przez m.<br />

Podobnie definiujemy odejmowanie i mnożenie.<br />

oznacza resztę z dzielenia liczby k przez m.<br />

Dodatkowo, k mod m<br />

Litery alfabetu można układać w bloki liter. Blok dwuliterowy nazywamy<br />

digramem, trzyliterowy trigramem i, ogólnie blok n–literowy nazywamy n–<br />

gramem. Litery i bloki liter układają się w tekst. Szyfrujemy tylko wiadomości,<br />

które coś oznaczają, więc nie mogą to być przypadkowe ciągi liter.<br />

Konieczna zatem jest decyzja, jakiego języka będziemy używać. W naszym<br />

przypadku będzie to głównie język polski, ale z literami łacińskimi.<br />

Załóżmy więc, że mamy wybrany konkretny język oraz pewien tekst w<br />

tym języku. Tekst ów nazywamy jawnym lub otwartym. Aby go przesłać,<br />

szyfrujemy go. Możemy w tym celu użyć jednego alfabetu (szyfry monoalfabetyczne),<br />

lub też wielu alfabetów (szyfry polialfabetyczne). Zawsze jednak<br />

potrzebne nam jest przekształcenie szyfrujące, czyli funkcja różnowartościowa<br />

E. Jeśli p jest tekstem jawnym, to E(p) nazywamy kryptotekstem,<br />

lub szyfrem.<br />

W dalszej części wykładu będziemy używać synonimów wymienionych<br />

wyżej pojęć, które oznaczać będą to samo, jeśli nie zostanie podana inna<br />

2


definicja. Na przykład, słowo ,,tekst” będziemy stosować zamiennie ze słowem<br />

,,wiadomość”.<br />

Kryptosystemem będziemy nazywać zbiór przekształceń szyfrujących, z<br />

których każde powstaje w oparciu o klucz, czyli zasadę lub przepis tworzenia.<br />

3


Rozdział 3<br />

<strong>Klasyczne</strong> <strong>metody</strong> <strong>szyfrowania</strong><br />

Korzenie kryptografii sięgają czasów starożytnego Rzymu. Tam właśnie powstał<br />

i był używany pierwszy system kryptograficzny. System ten oraz jego<br />

ulepszenia opiszemy w tym rozdziale.<br />

3.1 Szyfry cykliczne<br />

Zostały wynalezione, a na pewno używane przez Juliusza Cezara. Mają one<br />

bardzo łatwy klucz, ale jednocześnie są łatwe do złamania.<br />

Oznaczmy przez p jednostkę tekstu jawnego i załóżmy że tych jednostek<br />

jest N. Wtedy funkcja szyfrująca E k jest określona wzorem<br />

E k (p) = p + k(mod N).<br />

Kluczem jest tu liczba k, którą dodajemy do wartości liczbowej jednostki<br />

tekstu jawnego. Jeśli k jest równe 3, to aby zaszyfrować słowo TAK, przekształcamy<br />

je w ciąg 19 0 12, następnie dodajemy do każdej z tych liczb<br />

3 modulo 26 otrzymując 24 3 15 i z powrotem przekształcamy liczby na<br />

litery by otrzymać WDN. Przekształcenie szyfrujące określone powyżej nazywamy<br />

przesunięciem. Wygodnie jest tutaj napisać alfabet, a pod nim liczby<br />

odpowiadające poszczególnym literom.<br />

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z<br />

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25<br />

Zajmiemy się teraz łamaniem szyfrów cyklicznych. Jeśli wiemy na pewno,<br />

że mamy do czynienia z szyfrem cyklicznym i znamy ilość liter w alfabecie<br />

4


(lub możliwych bloków), czyli N, łamanie polega na znalezieniu liczby k.<br />

Za k wystarczy podstawić każdą z N możliwości i sprawdzać po kolei sens<br />

otrzymanych w ten sposób wiadomości.<br />

Na przykład, przypuśćmy, że chcemy rozszyfrować wiadomość<br />

xolfd vhcdpnrzd.<br />

Wiemy, że N = 26. Sprawdzamy dla k = 1. Ponieważ trudno znaleźć słowo<br />

zaczynające się od YPM, podstawiamy k = 2 i podobnie, mamy trudny do<br />

wymówienia początek ZQ. Szczęście uśmiecha się do nas dosyć późno, ale na<br />

pewno nie później niż za 26 razem.<br />

Juliusz Cezar używał klucza 3, ale i tak dowódcy legionów raczej domyślali<br />

się treści przysłanych wiadomości niż je odszyfrowywali. Oktawian August<br />

używał już tylko kluczy 2 lub 1.<br />

3.2 Szyfr Vigimere’a z kluczem długości 2<br />

Dość sporym utrudnieniem szyfru cyklicznego jest wykorzystanie dwóch przesunięć,<br />

które przy szyfrowaniu tekstu stosujemy naprzemiennie. Na przykład:<br />

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z<br />

D E F G H I J K L M N O P Q R S T U V W X Y Z A B C<br />

K L M N O P Q R S T U V W X Y Z A B C D E F G H I J<br />

Tekst W Szczecinie pada. szyfrujemy jako ZCCMC OFSQS HZDND.<br />

Wszystkich kluczy jest w tym systemie 676, więc ewentualne łamanie metodą<br />

wyczerpania zbioru kluczy zajęłoby trochę czasu. Kto złamie szyfr WCCDU<br />

EEGSI UPK?<br />

3.3 Permutacje alfabetu<br />

Znacznie trudniejsze od wcześniejszych są szyfry, w których każda litera alfabetu<br />

jawnego jest zastąpiona literą alfabetu szyfrowego bez stosowania<br />

określonej reguły zamiany. Zatem przestrzeń kluczy jest równa zbiorowi<br />

wszystkich permutacji (przestawień) alfabetu. W celu ułatwienia zapamiętania<br />

przekształcenia szyfrującego stosujemy tu innego rodzaju klucz. Jest<br />

to słowo, którego litery zastępują początkowe litery alfabetu jawnego. Dalsze<br />

litery dopisujemy tak jak występują one w alfabecie jawnym przy czym<br />

5


pomijamy już wykorzystane znaki. Na przykład stosując klucz ,,szyfrowanie”<br />

dostajemy następujące przekształcenie szyfrujące:<br />

a b c d e f g h i j k l m n o p q r s t u v w x y z<br />

S Z Y F R O W A N I E B C D G H J K L M P Q T U V X<br />

Opisany powyżej kryptosystem nazywamy permutacyjnym. Jego odmianą<br />

jest stosowany w pierwszych maszynach szyfrujących kryptosystem transpozycyjny,<br />

tj. taki, który składa się z niezależnych przestawień dwóch liter.<br />

Przykładem tu jest następujące przekształcenie szyfrujące:<br />

a b c d e f g h i j k l m n o p q r s t u v w x y z<br />

Z C B F R D W K N J H M L I O P T E Y Q X V G U S A<br />

Ponieważ szyfry tego rodzaju były zaprogramowane w maszynach jako<br />

<strong>metody</strong> standardowe, nikt nie musiał pamiętać klucza. Zaletą szyfrów transpozycyjnych<br />

jest fakt, że klucze szyfrujący i rozszyfrowujący są identyczne.<br />

Zatem ta sama maszyna służyła zarówno do <strong>szyfrowania</strong> jak i do rozszyfrowywania<br />

wiadomości.<br />

3.4 Analiza częstości występowania liter<br />

Ta metoda łamania szyfrów opiera się na prawach rachunku prawdopodobieństwa.<br />

Wiadomo, że pewne litery występują w tekście częściej niż inne.<br />

Oto alfabet angielski poukładany według częstości występowania liter: E –<br />

12.5%, T, A, O, I, N – 9.2-7%, S, R – 6%, L, D– 4%, C, U, M, F, P, G, W,<br />

Y, B – 3-1.5%, V, K, X, J, Q, Z – 1-0.1%,<br />

Jeżeli więc przechwycimy wiadomość na tyle długą (lub na tyle dużo<br />

wiadomości), aby wyeliminować przypadkowość, możemy przypuszczać, że<br />

najczęściej powtarzająca się litera to zakodowane E, T, A, O, I lub N. Jeżeli<br />

mamy do czynienia z kodem cyklicznym, nasze sprawdzanie możliwości dla<br />

b ogranicza się do sześciu przypadków. Okazuje się, że na podstawie badania<br />

entropii języka, czyli ilości informacji zawartej w jednym symbolu zaszyfrowanego<br />

tekstu, można złamać każdy szyfr, który szyfruje tekst angielski<br />

mający więcej niż 25 liter.<br />

Oczywiście metoda ta nie działa, jeśli przechwytywane wiadomości są<br />

krótkie (mają mniej niż 25 liter) i klucz często się zmienia. Na przykład, jeśli<br />

6


przechwycimy tylko xolfd vhcdpnrzd. jak w rozważanym wyżej szyfrze cyklicznym,<br />

to nie widać tu, która litera pojawia się najczęściej. Z drugiej strony<br />

jednak, jak się okazuje, klucze są bardzo niechętnie zmieniane. Rząd Stanów<br />

Zjednoczonych nie zdecydował się na zmianę kluczy nawet po tym, jak wszystkie<br />

zginęły w tajemniczej kradzieży w Zagrzebiu na początku drugiej wojny<br />

światowej.<br />

Kiedy już wiemy, które litery pojawiają się najczęściej, zwracamy uwagę<br />

na powtarzające się pary. Na przykład EA jest najczęściej pojawiającym<br />

się digramem samogłosek. Dosyć częsty jest też digram IO. Natomiast OI,<br />

IA, AI, OA i AO są już znacznie rzadsze. Digram AE nie pojawia się prawie<br />

nigdy. Ogólnie, dziesięć najczęstszych digramów w języku angielskim, to TH,<br />

HE, AN, IN, ER, RE, ON, ES, TI oraz AT.<br />

Dla przykładu spróbujmy rozszyfrować następujący tekst<br />

wktqr ziqzd xlzwt lsoet rvozi qfqbo<br />

lwktq rziqz olzgg fgxko liofu sqkut<br />

fqatr kqveq kkgzl qktqe ethzq wstql<br />

yggrg fsnzg ziglt vigso ctofi xzeit<br />

ltqut ksnqv qozof utqlz tk<br />

Aby ułatwić nieco łamanie, przypuśćmy że wiemy już, iż najczęściej pojawiającą<br />

się w tekście jawnym literą nie jest e.<br />

Z analizy częstości wynika, że najczęstszymi literami w zaszyfrowanym<br />

tekście są q, t, z, g, k, l, o, i i f. Tworzymy teraz tak zwaną tabelę kontaktów:<br />

q t z g k l o i f<br />

q 0 0 2 0 3 2 1 0 1<br />

t 6 0 0 0 2 2 1 0 1<br />

z 2 1 0 2 0 1 2 4 0<br />

g 0 0 2 2 0 1 0 0 2<br />

k 1 3 0 1 1 0 1 0 0<br />

l 1 2 3 0 0 0 0 1 0<br />

o 0 0 2 0 0 3 0 0 3<br />

i 3 1 0 1 0 0 1 0 0<br />

f 2 0 0 1 0 0 0 1 0<br />

Podaje ona jak często w zaszyfrowanym tekście występują digramy złożone<br />

z najczęściej występujących liter. Na przykład digram kq występuje 3 razy<br />

(szukamy w tabeli miejsca, gdzie krzyżuje się wiersz k z kolumną q.<br />

7


Wiemy, że q nie jest zaszyfrowanym E. Zgadujemy zatem, że to t odpowiada<br />

E. Ponieważ mamy 6 par tq, a t ma być E, więc q odpowiada<br />

zapewne A. Trzecią literą z kolei jest Z. Ponieważ T jest jeszcze ,,wolne”,<br />

przyporządkujmy z → T . Ponieważ zi pojawia się 4 razy, a iz w ogóle się<br />

nie pojawia, przypuszczamy, że i → H. Na koniec zauważamy jeszcze, że gg<br />

pojawia się dwa razy. Dobrze jest więc postawić, że g to O. Podstawiamy<br />

teraz odgadnięte litery do naszego kryptogramu i odgadujemy resztę liter na<br />

zasadzie ,,co pasuje”. Tekstem jawnym jest więc: BREAD THAT MUST<br />

BE SLICED WITH AN AX IS A BREAD THAT IS TOO NOURISHING<br />

LARGE NAKED CARROTS ARE ACCEPTABLE AS FOOD ONLY TO<br />

THOSE WHO LIVE IN HUTCHES EAGERLY AWAITING EASTER.<br />

3.5 Homofony i nulle<br />

kiedy przekonano się, że analiza częstości występowania liter jest potężną<br />

bronią, zaczęto się zastanawiać, jak utrudnić tę analizę. Nasuwają się tutaj<br />

dwie dosyć oczywiste <strong>metody</strong>. Jedną z nich jest ,,dokładanie” liter, a drugą<br />

zmniejszanie ilości najczęściej powtarzających się znaków. Prowadzi to do<br />

dwóch definicji. Nullem nazywamy jednostkę tekstu zaszyfrowanego, której<br />

nie odpowiada żadna jednostka tekstu jawnego. Oczywiście, nasze przekształcenie<br />

szyfrujące musi być w dalszym ciągu wzajemnie jednoznaczne.<br />

Zatem, w praktyce, do alfabetu jawnego dorzucamy ,,znak pusty”, któremu<br />

odpowiada pewien znak w alfabecie zaszyfrowanym. Na przykład<br />

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ∅ ∅ ′<br />

s z y f r o w a n i e 3 c d g h j k 4 m p q t u v x b l<br />

W powyższym szyfrze, występują dwa nulle: b i l. Wtajemniczeni wiedzą, że<br />

po otrzymaniu zaszyfrowanej wiadomości, należy te dwa znaki zignorować.<br />

Na przykład zaszyfrowane wiadomości esmsbhp13m1s oraz e1sbmsh1pb3ms<br />

oznaczają to samo, a mianowicie wiadomość KATAPULTA.<br />

Druga definicja jest następująca: homofonem nazywamy jednostkę tekstu<br />

jawnego, której odpowiada więcej niż jedna jednostka tekstu zaszyfrowanego.<br />

I tym razem mamy problemy z wieloznacznością funkcji szyfrującej. Problem<br />

ten pokonujemy powtarzając elementy w alfabecie jawnym. A oto przykład<br />

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A A T<br />

s z y f r o w a n i e 3 c d g h j k 4 m p q t u v x b 5 l<br />

8


Trzy homofony powyższego alfabetu to A, A i T. Dzięki nim wiadomość KAT-<br />

APULTA możemy zaszyfrować tak, że żadna litera alfabetu zaszyfrowanego<br />

nie powtarza się: esm5hp31b.<br />

Przy układaniu przekształcenia szyfrującego możemy stosować zarówno<br />

nulle jak i homofony. Łamanie szyfru jest wtedy jeszcze bardziej utrudnione.<br />

Oprócz tych dwóch utrudnień stosowane są też i inne bardziej skomplikowane.<br />

Niektóre z nich opiszemy poniżej.<br />

3.6 Jednostki dwuliterowe czyli digramy<br />

Digramy jako alfabet po raz pierwszy zastosował niejaki Giovanni Battista<br />

Porta w 1563 roku. Alfabet taki składał się z czterystu digramów i do każdego<br />

z nich Porta z niebywałą inwencją dobrał pewien szczególny znak.<br />

Ogólnie, stosując digramy jako jednostki tekstu jawnego, mamy alfabet<br />

złożony z N 2 liter. Jego symbole zastępujemy bądź pojedynczymi znakami,<br />

jak to zrobił Porta, bądź też digramami. Nasze przekształcenie szyfrujące<br />

przedstawiamy w postaci tabeli, jak na przykład w tabeli Porty.<br />

3.7 Jednostki wieloliterowe<br />

Aby złamać kod digramowy możemy stosować analizę częstości występowania<br />

jednostek dwuliterowych. Aby metoda ta się powiodła, przechwycony<br />

tekst musi być bardzo długi. Jeżeli dla tekstu o jednostkach jednoliterowych<br />

potrzebowaliśmy N znaków, aby łamanie się powiodło, to teraz potrzebujemy<br />

około N 2 znaków. Dla języka angielskiego jest to już ponad 525 liter.<br />

Aby jeszcze bardziej utrudnić łamanie tekstu możemy zastosować trigramy,<br />

czyli jednostki trzyliterowe. Pojawia się tu jednak problem odpowiedniego<br />

zapisania przekształcenia szyfrującego – tabelka musi być trzywymiarowa.<br />

Tym gorszy jest ten problem im dłuższe są jednostki tekstu. Prowadzi to w<br />

końcu do tworzenia jednostek o różnych długościach, a samymi jednostkami<br />

tekstu jawnego są często powtarzające się sekwencje liter. W dalszej perspektywie<br />

oznacza to tworzenie swego rodzaju ,,słowników” zwanych książkami<br />

kodowymi. I tu pojawia się kolejny problem. Nikt nie jest w stanie pamiętać<br />

całej treści takiej książki. Zatem musi ona zawsze być pod ręką zarówno<br />

kodującego jak i dekodującego. Stwarza to duże pole manewru dla szpiegów<br />

i nie tylko. W sierpniu 1914 roku niemiecki krążownik Magdeburg próbował<br />

9


uciec od rosyjskiego pancernika i sztuka ta mu się nie udała. Co gorsza, statek<br />

zamiast zatonąć, osiadł na mieliźnie i w związku z tym wszystkie książki<br />

kodowe niemieckiej marynarki zamiast zatonąć, trafiły w ręce Rosjan, którzy<br />

po przestudiowaniu ich ,,podali dalej”. W rezultacie książki dostały się w<br />

ręce niejakiego Winstona Churchilla, który wiedział jak je wykorzystać.<br />

3.8 Szyfr Plaifaira<br />

Problem zapamiętania dużej ilości znaków doprowadził w 1854 roku niejakiego<br />

Charlesa Wheatstone’a do wynalezienia prostej <strong>metody</strong> zastępowania<br />

jednego bloku liter drugim. Litery alfabetu umieszczone są w kwadracie,<br />

a blok liter tekstu jawnego tworzy w tym kwadracie przekątną prostokąta.<br />

Blok dwuliterowy odczytany z drugiej przekątnej jest odpowiadającym blokiem<br />

kryptotekstu. Jeśli litery znajdują się w tym samym wierszu lub w tej<br />

samej kolumnie, szyfrowanie jest nieco trudniejsze. Ogólnie po krótkiej praktyce,<br />

łatwo jest posługiwać się opisanym szyfrem. Szyfr ten nazwany szyfrem<br />

Playfaira, był stosowany przez Anglików od czasów wojny krymskiej aż do<br />

końca pierwszej wojny światowej. Wiadomo jednak, że od połowy 1915 roku,<br />

Niemcy nie mieli problemów z jego złamaniem.<br />

Szyfr ten używa digramów jako jednostek tekstu. Kluczem jest macierz<br />

5 × 5 zawierająca 25 liter (bez j). Do jej ułożenia użyjemy słowa kluczowego<br />

,,szyfrowanie”.<br />

s z y f r<br />

o w a n i<br />

e b c d g<br />

h k l m p<br />

q t u v x<br />

Digram (x, y) = (k ij , k mn ), gdzie x ≠ y szyfrujemy jako<br />

⎧<br />

⎪⎨ (k in , k mj ) jeśli i ≠ m oraz j ≠ n;<br />

(k i,j+1 , k i,n+1 ) jeśli i = m oraz j ≠ n;<br />

⎪⎩<br />

(k i+1,j , k m+1,j ) jeśli i ≠ m oraz j = n.<br />

(Wskaźniki dodajemy modulo 5.) Jeżeli x = y, digram rozdzielamy, tzn.<br />

wtykamy pomiędzy x i y literę q, która jest różna od x i od y.<br />

10


3.9 Szyfry Viginére’a i Beauforta<br />

Jest pewną ironią, że kryptosystem wynaleziony przez F. Beauforta nosi dziś<br />

nazwę szyfru Viginére’a i vice versa. Kryptosystem zwany dziś Beauforta<br />

został wynaleziony przez B. de Viginére’a i w roku 1586 został opisany<br />

w książce Traicté des Chiffres. Natomiast szyfr zwany dzisiaj Viginére’a<br />

został opisany dwa wieki później przez F. Beauforta. Ten ostatni szyfr składa<br />

się z r szyfrów cyklicznych stosowanych okresowo. Dokładnie,<br />

E = { E k0 k 1 ...k r<br />

: k 0 , k 1 , . . . , k r ∈ K = Z r q}<br />

,<br />

przy czym przekształcenie szyfrujące definiujemy jako<br />

E k0 k 1 ...k r<br />

(m 0 m 1 m 2 . . . ) = c 0 c 1 c 2 . . . ,<br />

gdzie<br />

c i = (m i + k i mod r ) mod q.<br />

Stosując utożsamienie liter alfabetu z liczbami modulo 26 możemy utożsamić<br />

klucz jako słowo. Na przykład zaszyfrujmy ,,FUNKCJA POLIALFABETY-<br />

CZNA” stosując klucz ,,anulka”. W tym celu ułóżmy tabelę przesunięć:<br />

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z<br />

a b c d e f g h i j k l m n o p q r s t u v w x y z<br />

n o p q r s t u v w x y z a b c d e f g h i j k l m<br />

u v w x y z a b c d e f g h i j k l m n o p q r s t<br />

l m n o p q r s t u v w x y z a b c d e f g h i j k<br />

k l m n o p q r s t u v w x y z a b c d e f g h i j<br />

a b c d e f g h i j k l m n o p q r s t u v w x y z<br />

Pierwszy wiersz powyższej tabeli to alfabet, a każdy następny wiersz, to<br />

alfabet pisany począwszy od odpowiedniej litery słowa–klucza.<br />

Następnie nasz tekst dzielimy na bloki długości słowa ,,anulka” i szyfrujemy<br />

pierwszą literę każdego bloku według pierwszego szyfru, drugą według<br />

drugiego itd.<br />

11


F U N K C J<br />

a n u l k a<br />

f h h v m j<br />

A P O L I A<br />

a n u l k a<br />

a c i w s a<br />

L F A B E T<br />

a n u l k a<br />

l s u m o t<br />

Y C Z N A<br />

a n u l k<br />

y p t y k<br />

Otrzymaliśmy zatem kryptogram fhhvmjaciwsalsumotyptyk.<br />

Opiszemy teraz kryptosystem Beauforta. Różnica polega na tym, że alfabet<br />

szyfrujący zapisujemy w odwrotnej kolejności. Mamy więc<br />

E = { E k0 k 1 ...k r<br />

: k 0 , k 1 , . . . , k r ∈ K = Z r q}<br />

,<br />

przy czym przekształcenie szyfrujące definiujemy jako<br />

gdzie<br />

E k0 k 1 ...k r<br />

(m 0 m 1 m 2 . . . ) = c 0 c 1 c 2 . . . ,<br />

c i = (m i − k i mod r ) mod q.<br />

Stosując utożsamienie liter alfabetu z liczbami modulo 26 możemy utożsamić<br />

klucz jako słowo. Na przykład zaszyfrujmy ,,FUNKCJA POLIALFABETY-<br />

CZNA” stosując klucz ,,anulka”. W tym celu ułóżmy tabelę alfabetów szyfrujących:<br />

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z<br />

a z y x w v u t s r q p o n m l k j i h g f e d c b<br />

n m l k j i h g f e d c b a z y x w v u t s r q p o<br />

u t s r q p o n m l k j i h g f e d c b a z y x w v<br />

l k j i h g f e d c b a z y x w v u t s r q p o n m<br />

k j i h g f e d c b a z y x w v u t s r q p o n m l<br />

a z y x w v u t s r q p o n m l k j i h g f e d c b<br />

Zaletą tego szyfru jest fakt, że żadne z przkształceń składowych nie<br />

jest identycznością. Następnie nasz tekst dzielimy na bloki długości słowa<br />

,,anulka” i szyfrujemy pierwszą literę każdego bloku według pierwszego szyfru,<br />

drugą według drugiego itd.<br />

12


F U N K C J<br />

a n u l k a<br />

v t h b i r<br />

A P O L I A<br />

a n u l k a<br />

a y g a c a<br />

L F A B E T<br />

a n u l k a<br />

p i u k g h<br />

Y C Z N A<br />

a n u l k<br />

c l v y k<br />

Otrzymaliśmy zatem kryptogram vthbiraygacapiukghclvyk.<br />

Jako przekształcenia szyfrowe, możemy stosować tu także inne szyfry<br />

niż wykorzystane powyżej. Idea szyfrów Viginére’a została użyta w ENIG-<br />

MIE, gdzie zastosowano kilkaset tysięcy szyfrów transpozycyjnych jako szyfry<br />

składowe. W każdym razie, aby złamać szyfr Viginére’a długości r potrzebujemy<br />

tekstu (angielskiego) długości przynajmniej 25r. Wynika to stąd, że<br />

stosujemy analizę częstości występowania liter dla co r–tej litery tekstu i, co<br />

gorsza, tworzenie tabeli kontaktów jest bardziej skomplikowane. Głównym<br />

problemem jest tutaj jednak znalezienie r. I to jest zapewne główna przyczyna,<br />

dla której szyfr Viginére’a był ,,niełamalny” przez prawie trzysta lat!<br />

Dopiero w 1863 roku, oficer armii pruskiej, F. W. Kasiski wynalazł metodę<br />

wypadkowej przypadkowości 1 , której nie opiszemy z uwagi na zbyt skomplikowany<br />

aparat statystyczny.<br />

3.10 Łańcuch szyfrów i DES<br />

Dość istotną wadą schematu opisanego w poprzednim paragrafie, jest fakt,<br />

że ten sam tekst szyfruje się tak samo, jeśli użyty jest ten sam klucz. Chodzi<br />

o to, że potencjalny intruz wcale nie musi znać tekstu jawnego, by wymusić<br />

na odbiorcy szyfru określone działanie – wystarczy, że prześle mu przechwycony<br />

wcześniej (zaszyfrowany) tekst. Ponieważ intruz wie jaka reakcja<br />

była wcześniej, podejrzewa, że taka sama będzie i tym razem. Jednym ze<br />

sposobów ominięcia tej niedogodności jest zastosowanie Łańcuch szyfrów 1 .<br />

Pomysł jest następujący:<br />

Dzielimy tekst jawny (zakodowany w strumień bitów) na bloki M i po n<br />

bitów. Potrzebny jest inicjujący wektor zero-jedynkowy C 0 o n bitach oraz<br />

1 ang. the incidence of coincidences<br />

1 ang. cipherblock chaining<br />

13


klucz K tej samej długości. Pierwszy blok tekstu jawnego szyfrujemy jako<br />

C 1 = M 1 ⊕ C 0 ⊕ K, drugi jako C 2 = M 2 ⊕ C 1 ⊕ K, i tak dalej. Ogólnie,<br />

C j = M j ⊕ C j−1 ⊕ K. W celu roz<strong>szyfrowania</strong>, dzielimy tekst zaszyfrowany<br />

na n-bitowe kawałki C i i otrzymujemy kolejno M 1 = C 1 ⊕ C 0 ⊕ K, następnie,<br />

M 2 = C 2 ⊕ C 1 ⊕ K itd. Jeśli któryś z C i jest błędny, to otrzymujemy błąd<br />

w co najwyżej dwóch kawałkach tekstu jawnego, mianowicie M i oraz M i+1 .<br />

Wektor C 0 musi być przesłany innym kanałem niż wiadomość jawna i klucz.<br />

Przy odpowiednio dużym n istnieje bardzo mała szansa, że wiadomość, klucz<br />

i wektor inicjujący powtórzą się.<br />

Łańcuch szyfrów jest wykorzystany w systemie DES 1 , który był używany<br />

od 1977 roku do końca lat osiemdzisiątych. W 1974 roku, National Bureau<br />

of Standards zobowiazało firmy amerykańskie do napisania programu szyfrującego,<br />

który będzie standardem w kodowaniu wiadomości rządowych. Miał<br />

on zastapić niewygodne w użyciu książki kodowe. Odpowiedzią firmy IBM<br />

był system LUCIFER, który po uproszczeniu i modyfikacji stał się standardem.<br />

Program szyfrujący został rozpowszechniony w postaci kości, którą<br />

każdy zainteresowany mógł wmontować w swój komputer. Rozszyfrowywanie<br />

polegało na użyciu tej samej kości.<br />

Opiszemy teraz zasadę działania algorytmu DES. Wejściowe 64 bity są<br />

najpierw pomieszane przez początkową permutację IP . Pierwsze 32 bity<br />

tworzą wektor L 0 , a następne 32 tworzą R 0 . Po szesnastu rundach manipulacji,<br />

wektory lewy i prawy łączą się w całość i przechodzą przez permutację<br />

IP −1 generując ostateczną wersję szyfru.<br />

Podczas 16 rund <strong>szyfrowania</strong> tworzą się kolejno wektory L 1 , L 2 , . . . , L 16<br />

oraz R 1 , R 2 , . . . , R 16 . Dla 1 ≤ i ≤ 16, mamy<br />

L i = R i−1 , R i = L i−1 ⊕ f(R i−1 , K i ),<br />

gdzie f(R i−1 , K i ) jest wektorem dwójkowym o 32 współrzędnych, a wektory<br />

K i są 48-bitowymi wektorami generowanymi przez klucz K według procedury,<br />

którą opiszemy później.<br />

Dekodowanie odbywa się w odwrotną stronę, tj. najpierw zaszyfrowany<br />

tekst jest poddawany permutacji IP −1 , tworzą się L 16 i R 16 , a następnie<br />

obliczane są kolejno<br />

R 15 = L 16 , L 15 = R 16 ⊕ f(R 15 , K 16 ) . . . , R 0 = L 1 , L 0 = R 1 ⊕ f(R 0 , K 1 ).<br />

1 Data Encryption Standard<br />

14


32 1 2 3 4 5<br />

4 5 6 7 8 9<br />

8 9 10 11 12 13<br />

12 13 14 15 16 17<br />

16 17 18 19 20 21<br />

20 21 22 23 24 25<br />

24 25 26 27 28 29<br />

28 29 30 31 32 1<br />

Rysunek 3.1: Tabela selekcji bitów<br />

Połączony wektor L 0 R 0 jest poddany permutacji IP i powstaje ciąg 64 bitów<br />

wiadomości jawnej.<br />

Wartością funkcji f jest 32-bitowy ciąg. Procedura jego powstawania<br />

wygląda następująco. Jak już wspominaliśmy, K i ma 48 bitów, a R i−1 - 32<br />

bity. Aby te wektory dodać, musimy rozszerzyć R i−1 do 48 bitów. Rozszerzenie<br />

R i−1 odbywa się według Tabeli selekcji bitów. Powstały 48-bitowy<br />

strumień jest podzielony na 8 wektorow 6-bitowych, które są przepuszczone<br />

przez S-boksy (Tabela S-boksów). Aby przybliżyć metodę działania S-<br />

boksów, rozważmy wektor sześciobitowy a 1 a 2 a 3 a 4 a 5 a 6 , na przykład 010011,<br />

który trafia na S 4 . Bity a 1 a 6 to numer wiersza (i), a a 2 a 3 a 4 a 5 to numer<br />

kolumny (j) zapisane w układzie dwójkowym. Strumień wyjściowy (w układzie<br />

dziesiętnym) jest na pozycji (i, j) S-boksa. W naszym przypadku,<br />

01 2 = 1 oraz 1001 2 = 9 i w S 4 znajduje się na pozycji (1, 9) liczba 7 = 0111 2 .<br />

Zatem strumieniem wyjściowym jest 0111. Po wyjściu z S-boksów, strumienie<br />

4-bitowe łączą się tworząc 32-bitowy wektor, który dodatkowo przechodzi<br />

przez permutację P .<br />

Klucz K ma 64 bity podzielone na 8-bitowe części, z których każda ma<br />

7 efektywnych bitów, a ósmy bit sprawdza parzystość. Dokładnie, jest on<br />

ustalony tak, by w całej ósemce liczba jedynek była parzysta. W przypadku,<br />

gdyby wystąpił błąd w transmisji klucza, zostaje on wykryty z dokładnym<br />

wskazaniem ósemki, w której wystąpił. Z 64 bitów klucza, po sprawdzeniu<br />

poprawności, 8 bitów sprawdzających jest odrzuconych, a pozostałe 56 bitów<br />

przechodzi przez permutację początkową P C1. Spermutowany strumień 56<br />

bitów jest podzielony na pół. Pierwsze 28 bitów tworzy wektor C 0 , a następne<br />

D 0 . Wektory C 1 i D 1 powstają przez (cykliczne) przesunięcie zawartości<br />

C 0 , odpowiednio, D 0 o LS 1 = 1 pozycji w lewo. Ogólnie, C i oraz D i powstają<br />

przez przesunięcie zawartości, odpowiednio, C i−1 , D i−1 o LS i pozycji w lewo.<br />

15


kolumna<br />

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />

wiersz 0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7<br />

1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8<br />

S 1 2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0<br />

3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13<br />

0 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10<br />

1 3 13 4 7 1 2 8 14 12 0 1 10 6 9 11 5<br />

S 2 2 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15<br />

3 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9<br />

0 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8<br />

1 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1<br />

S 3 2 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7<br />

3 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12<br />

0 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15<br />

1 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9<br />

S 4 2 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4<br />

3 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14<br />

0 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9<br />

1 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6<br />

S 5 2 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14<br />

3 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3<br />

0 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11<br />

1 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8<br />

S 6 2 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6<br />

3 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13<br />

0 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1<br />

1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6<br />

S 7 2 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2<br />

3 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12<br />

0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7<br />

1 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2<br />

S 8 2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8<br />

3 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11<br />

Rysunek 3.2: Tabela S-boksów<br />

16


Wektory C i oraz D i są następnie łączone i po przejściu selekcji P C 2 tworzą<br />

48-bitowy strumień K i .<br />

Główne zarzuty wobec DES, to, po pierwsze, zbyt krótki klucz, co powoduje,<br />

że może on być znaleziony w miarę szybko metodą sprawdzenia wszystkich<br />

2 56 możliwości. Po drugie, nie wiadomo, jakie kryteria kierowały konstruktorami<br />

S-boksów. Testy statystyczne pokazują, że liczby w S-boksach<br />

nie są przypadkowe. Niewykluczone, że kryje się tu pewna furtka pozwalająca<br />

łatwo rozszyfrować zakodowaną wiadomość.<br />

Mimo swoich wad DES był dość długo używany, aż w końcu ustąpił on<br />

miejsca kryptosystemom o kluczu publicznym. Rozpowszechnienie szybkich,<br />

łatwo programowalnych komputerów doprowadziło do sytuacji, w której kość<br />

szyfrująca okazała się zbędna: Po co montować do komputera dodatkowe<br />

urządzenie, jeśli można napoisać program, który powoduje takie samo działanie,<br />

a jeszcze dodatkowo można go w każdej chwili ulepszyć.<br />

17

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!