WykÅad II: Klasyczne metody szyfrowania
WykÅad II: Klasyczne metody szyfrowania
WykÅad II: Klasyczne metody szyfrowania
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