Rozdział 2 Systemy kryptograficzne

Transkrypt

Rozdział 2 Systemy kryptograficzne
Rozdział 2
Systemy kryptograficzne
Podstawowym elementem, który odróżnia steganografię od kryptografii jest
system kryptograficzny. W tym rozdziale postaramy się przybliżyć pojęcie
system kryptograficzny.
2.1
Podstawowe pojęcia
Kryptografia dzieli się na kryptografię właściwą, która zajmuje się konstrukcją szyfrów oraz na kryptoanalizę, która zajmuje się łamaniem szyfrów. Z metodami konstrukcji szyfrów związane jest pojęcie kryptosystemu, czyli systemu kryptograficznego. Formalna definicja tego pojęcia nie jest łatwa do
zrozumienia. Ograniczymy się tu tylko do wskazania pewnych intuicji. Najpierw sprecyzujemy dwa elementy, które każdy system kryptograficzny powinien posiadać. Od dobrego kryptosystemu wymagamy, żeby był on
• poufny lub tajny, tj. w razie przechwycenia tekstu przez osobę niepowołaną, osoba ta nie byłaby w stanie odczytać tekstu.
• autentyczny, tj. adresat nie tylko byłby w stanie przeczytać otrzymaną
wiadomość, ale także miałby pewność, że pochodzi ona od osoby, która
się pod nią podpisuje.
Aby jednak wiadomość mogła być wysłana, najpierw trzeba ją w jakiś
sposób napisać. W tym celu używamy alfabetu, który definiujemy jako
dowolny zbiór skończony. Liczbę elementów zbioru A (alfabetu) będziemy
oznaczać przez |A|, #A lub A. Do zapisywania wiadomości będziemy używać alfabetu
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,
który utożsamimy z liczbami 0, 1, 2, . . . , 25. Jeśli rozważymy inny alfabet, to również jego elementy (litery) utożsamimy z liczbami 0, 1, 2, . . . , q,
gdzie q jest liczbą liter w tym alfabecie. Tego rodzaju utożsamienie pozwala
nam wykonywać na literach podstawowe działania arytmetyczne zgodnie z
zasadami arytmetyki modularnej.
Przyjmijmy, że dana jest liczba m > 1 (zwana modułem). Na zbiorze
liczb {0, 1, 2, . . . , m} definiujemy dodawanie w następujący sposób.
• Jeśli suma dwóch liczb jest mniejsza od m, to jest to wynik dodawania
modularnego.
• Jeśli suma ta jest większa od m, to wynikiem jest reszta z dzielenia
tejże sumy przez m.
Podobnie definiujemy odejmowanie i mnożenie. Dodatkowo, k mod m
oznacza resztę z dzielenia liczby k przez m.
Litery alfabetu można układać w bloki liter. Blok dwuliterowy nazywamy
digramem, trzyliterowy trigramem i, ogólnie blok n–literowy nazywamy n–
gramem. Litery i bloki liter układają się w tekst. Szyfrujemy tylko wiadomości, które coś oznaczają, więc nie mogą to być przypadkowe ciągi liter.
Konieczna zatem jest decyzja, jakiego języka będziemy używać. W naszym
przypadku będzie to głównie język polski, ale z literami łacińskimi.
Załóżmy więc, że mamy wybrany konkretny język oraz pewien tekst w
tym języku. Tekst ów nazywamy jawnym lub otwartym. Aby go przesłać,
szyfrujemy go. Możemy w tym celu użyć jednego alfabetu (szyfry monoalfabetyczne), lub też wielu alfabetów (szyfry polialfabetyczne). Zawsze jednak
potrzebne nam jest przekształcenie szyfrujące, czyli funkcja różnowartościowa E. Jeśli p jest tekstem jawnym, to E(p) nazywamy kryptotekstem,
lub szyfrem.
W dalszej części wykładu będziemy używać synonimów wymienionych
wyżej pojęć, które oznaczać będą to samo, jeśli nie zostanie podana inna
2
definicja. Na przykład, słowo ,,tekst” będziemy stosować zamiennie ze słowem
,,wiadomość”.
Kryptosystemem będziemy nazywać zbiór przekształceń szyfrujących, z
których każde powstaje w oparciu o klucz, czyli zasadę lub przepis tworzenia.
3
Rozdział 3
Klasyczne metody szyfrowania
Korzenie kryptografii sięgają czasów starożytnego Rzymu. Tam właśnie powstał i był używany pierwszy system kryptograficzny. System ten oraz jego
ulepszenia opiszemy w tym rozdziale.
3.1
Szyfry cykliczne
Zostały wynalezione, a na pewno używane przez Juliusza Cezara. Mają one
bardzo łatwy klucz, ale jednocześnie są łatwe do złamania.
Oznaczmy przez p jednostkę tekstu jawnego i załóżmy że tych jednostek
jest N . Wtedy funkcja szyfrująca Ek jest określona wzorem
Ek (p) = p + k(mod N ).
Kluczem jest tu liczba k, którą dodajemy do wartości liczbowej jednostki
tekstu jawnego. Jeśli k jest równe 3, to aby zaszyfrować słowo TAK, przekształcamy je w ciąg 19 0 12, następnie dodajemy do każdej z tych liczb
3 modulo 26 otrzymując 24 3 15 i z powrotem przekształcamy liczby na
litery by otrzymać WDN. Przekształcenie szyfrujące określone powyżej nazywamy przesunięciem. Wygodnie jest tutaj napisać alfabet, a pod nim liczby
odpowiadające poszczególnym literom.
ABCDEFGHIJ K L M N O P Q R S T U V W X Y Z
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
Zajmiemy się teraz łamaniem szyfrów cyklicznych. Jeśli wiemy na pewno,
że mamy do czynienia z szyfrem cyklicznym i znamy ilość liter w alfabecie
4
(lub możliwych bloków), czyli N , łamanie polega na znalezieniu liczby k.
Za k wystarczy podstawić każdą z N możliwości i sprawdzać po kolei sens
otrzymanych w ten sposób wiadomości.
Na przykład, przypuśćmy, że chcemy rozszyfrować wiadomość
xolfd vhcdpnrzd.
Wiemy, że N = 26. Sprawdzamy dla k = 1. Ponieważ trudno znaleźć słowo
zaczynające się od YPM, podstawiamy k = 2 i podobnie, mamy trudny do
wymówienia początek ZQ. Szczęście uśmiecha się do nas dosyć późno, ale na
pewno nie później niż za 26 razem.
Juliusz Cezar używał klucza 3, ale i tak dowódcy legionów raczej domyślali
się treści przysłanych wiadomości niż je odszyfrowywali. Oktawian August
używał już tylko kluczy 2 lub 1.
3.2
Szyfr Vigimere’a z kluczem długości 2
Dość sporym utrudnieniem szyfru cyklicznego jest wykorzystanie dwóch przesunięć, które przy szyfrowaniu tekstu stosujemy naprzemiennie. Na przykład:
AB C DEFGH I J KL MNOPQR S T UVWXYZ
DE F GH I J KLMNO P QRS TUVWXY Z ABC
KLMNOPQRS T UVWXYZABC D EF G H I J
Tekst W Szczecinie pada. szyfrujemy jako ZCCMC OFSQS HZDND.
Wszystkich kluczy jest w tym systemie 676, więc ewentualne łamanie metodą
wyczerpania zbioru kluczy zajęłoby trochę czasu. Kto złamie szyfr WCCDU
EEGSI UPK?
3.3
Permutacje alfabetu
Znacznie trudniejsze od wcześniejszych są szyfry, w których każda litera alfabetu jawnego jest zastąpiona literą alfabetu szyfrowego bez stosowania
określonej reguły zamiany. Zatem przestrzeń kluczy jest równa zbiorowi
wszystkich permutacji (przestawień) alfabetu. W celu ułatwienia zapamiętania przekształcenia szyfrującego stosujemy tu innego rodzaju klucz. Jest
to słowo, którego litery zastępują początkowe litery alfabetu jawnego. Dalsze litery dopisujemy tak jak występują one w alfabecie jawnym przy czym
5
pomijamy już wykorzystane znaki. Na przykład stosując klucz ,,szyfrowanie”
dostajemy następujące przekształcenie szyfrujące:
ab c d e f g h i jk l mn o pq r s t u vwx y z
SZYFROWANIEBCDGHJKLMPQTUVX
Opisany powyżej kryptosystem nazywamy permutacyjnym. Jego odmianą jest stosowany w pierwszych maszynach szyfrujących kryptosystem transpozycyjny, tj. taki, który składa się z niezależnych przestawień dwóch liter.
Przykładem tu jest następujące przekształcenie szyfrujące:
a b c d e f g h i j k l mn o p q r s t u v w x y z
ZCBFRDWKNJHM L I OPTEYQXVGUSA
Ponieważ szyfry tego rodzaju były zaprogramowane w maszynach jako
metody standardowe, nikt nie musiał pamiętać klucza. Zaletą szyfrów transpozycyjnych jest fakt, że klucze szyfrujący i rozszyfrowujący są identyczne.
Zatem ta sama maszyna służyła zarówno do szyfrowania jak i do rozszyfrowywania wiadomości.
3.4
Analiza częstości występowania liter
Ta metoda łamania szyfrów opiera się na prawach rachunku prawdopodobieństwa. Wiadomo, że pewne litery występują w tekście częściej niż inne.
Oto alfabet angielski poukładany według częstości występowania liter: E –
12.5%, T, A, O, I, N – 9.2-7%, S, R – 6%, L, D– 4%, C, U, M, F, P, G, W,
Y, B – 3-1.5%, V, K, X, J, Q, Z – 1-0.1%,
Jeżeli więc przechwycimy wiadomość na tyle długą (lub na tyle dużo
wiadomości), aby wyeliminować przypadkowość, możemy przypuszczać, że
najczęściej powtarzająca się litera to zakodowane E, T, A, O, I lub N. Jeżeli
mamy do czynienia z kodem cyklicznym, nasze sprawdzanie możliwości dla
b ogranicza się do sześciu przypadków. Okazuje się, że na podstawie badania entropii języka, czyli ilości informacji zawartej w jednym symbolu zaszyfrowanego tekstu, można złamać każdy szyfr, który szyfruje tekst angielski
mający więcej niż 25 liter.
Oczywiście metoda ta nie działa, jeśli przechwytywane wiadomości są
krótkie (mają mniej niż 25 liter) i klucz często się zmienia. Na przykład, jeśli
6
przechwycimy tylko xolfd vhcdpnrzd. jak w rozważanym wyżej szyfrze cyklicznym, to nie widać tu, która litera pojawia się najczęściej. Z drugiej strony
jednak, jak się okazuje, klucze są bardzo niechętnie zmieniane. Rząd Stanów
Zjednoczonych nie zdecydował się na zmianę kluczy nawet po tym, jak wszystkie zginęły w tajemniczej kradzieży w Zagrzebiu na początku drugiej wojny
światowej.
Kiedy już wiemy, które litery pojawiają się najczęściej, zwracamy uwagę
na powtarzające się pary. Na przykład EA jest najczęściej pojawiającym
się digramem samogłosek. Dosyć częsty jest też digram IO. Natomiast OI,
IA, AI, OA i AO są już znacznie rzadsze. Digram AE nie pojawia się prawie
nigdy. Ogólnie, dziesięć najczęstszych digramów w języku angielskim, to TH,
HE, AN, IN, ER, RE, ON, ES, TI oraz AT.
Dla przykładu spróbujmy rozszyfrować następujący tekst
wktqr
lwktq
fqatr
yggrg
ltqut
ziqzd
rziqz
kqveq
fsnzg
ksnqv
xlzwt
olzgg
kkgzl
ziglt
qozof
lsoet
fgxko
qktqe
vigso
utqlz
rvozi
liofu
ethzq
ctofi
tk
qfqbo
sqkut
wstql
xzeit
Aby ułatwić nieco łamanie, przypuśćmy że wiemy już, iż najczęściej pojawiającą się w tekście jawnym literą nie jest e.
Z analizy częstości wynika, że najczęstszymi literami w zaszyfrowanym
tekście są q, t, z, g, k, l, o, i i f. Tworzymy teraz tak zwaną tabelę kontaktów:
q
t
z
g
k
l
o
i
f
q
0
6
2
0
1
1
0
3
2
t
0
0
1
0
3
2
0
1
0
z
2
0
0
2
0
3
2
0
0
g
0
0
2
2
1
0
0
1
1
k
3
2
0
0
1
0
0
0
0
l
2
2
1
1
0
0
3
0
0
o
1
1
2
0
1
0
0
1
0
i
0
0
4
0
0
1
0
0
1
f
1
1
0
2
0
0
3
0
0
Podaje ona jak często w zaszyfrowanym tekście występują digramy złożone
z najczęściej występujących liter. Na przykład digram kq występuje 3 razy
(szukamy w tabeli miejsca, gdzie krzyżuje się wiersz k z kolumną q.
7
Wiemy, że q nie jest zaszyfrowanym E. Zgadujemy zatem, że to t odpowiada E. Ponieważ mamy 6 par tq, a t ma być E, więc q odpowiada
zapewne A. Trzecią literą z kolei jest Z. Ponieważ T jest jeszcze ,,wolne”,
przyporządkujmy z → T . Ponieważ zi pojawia się 4 razy, a iz w ogóle się
nie pojawia, przypuszczamy, że i → H. Na koniec zauważamy jeszcze, że gg
pojawia się dwa razy. Dobrze jest więc postawić, że g to O. Podstawiamy
teraz odgadnięte litery do naszego kryptogramu i odgadujemy resztę liter na
zasadzie ,,co pasuje”. Tekstem jawnym jest więc: BREAD THAT MUST
BE SLICED WITH AN AX IS A BREAD THAT IS TOO NOURISHING
LARGE NAKED CARROTS ARE ACCEPTABLE AS FOOD ONLY TO
THOSE WHO LIVE IN HUTCHES EAGERLY AWAITING EASTER.
3.5
Homofony i nulle
kiedy przekonano się, że analiza częstości występowania liter jest potężną
bronią, zaczęto się zastanawiać, jak utrudnić tę analizę. Nasuwają się tutaj
dwie dosyć oczywiste metody. Jedną z nich jest ,,dokładanie” liter, a drugą
zmniejszanie ilości najczęściej powtarzających się znaków. Prowadzi to do
dwóch definicji. Nullem nazywamy jednostkę tekstu zaszyfrowanego, której
nie odpowiada żadna jednostka tekstu jawnego. Oczywiście, nasze przekształcenie szyfrujące musi być w dalszym ciągu wzajemnie jednoznaczne.
Zatem, w praktyce, do alfabetu jawnego dorzucamy ,,znak pusty”, któremu
odpowiada pewien znak w alfabecie zaszyfrowanym. Na przykład
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 ∅ ∅0
s z y f r ow a ni e 3 c d g h j k 4mp q t u v xb l
W powyższym szyfrze, występują dwa nulle: b i l. Wtajemniczeni wiedzą, że
po otrzymaniu zaszyfrowanej wiadomości, należy te dwa znaki zignorować.
Na przykład zaszyfrowane wiadomości esmsbhp13m1s oraz e1sbmsh1pb3ms
oznaczają to samo, a mianowicie wiadomość KATAPULTA.
Druga definicja jest następująca: homofonem nazywamy jednostkę tekstu
jawnego, której odpowiada więcej niż jedna jednostka tekstu zaszyfrowanego.
I tym razem mamy problemy z wieloznacznością funkcji szyfrującej. Problem
ten pokonujemy powtarzając elementy w alfabecie jawnym. A oto przykład
ABCDEFGH I JKLMNOPQRSTUVWXYZAAT
s z y f r ow a ni e 3 c d g h j k 4mp q t u v x b 5 l
8
Trzy homofony powyższego alfabetu to A, A i T. Dzięki nim wiadomość KATAPULTA możemy zaszyfrować tak, że żadna litera alfabetu zaszyfrowanego
nie powtarza się: esm5hp31b.
Przy układaniu przekształcenia szyfrującego możemy stosować zarówno
nulle jak i homofony. Łamanie szyfru jest wtedy jeszcze bardziej utrudnione.
Oprócz tych dwóch utrudnień stosowane są też i inne bardziej skomplikowane.
Niektóre z nich opiszemy poniżej.
3.6
Jednostki dwuliterowe czyli digramy
Digramy jako alfabet po raz pierwszy zastosował niejaki Giovanni Battista
Porta w 1563 roku. Alfabet taki składał się z czterystu digramów i do każdego
z nich Porta z niebywałą inwencją dobrał pewien szczególny znak.
Ogólnie, stosując digramy jako jednostki tekstu jawnego, mamy alfabet
złożony z N 2 liter. Jego symbole zastępujemy bądź pojedynczymi znakami,
jak to zrobił Porta, bądź też digramami. Nasze przekształcenie szyfrujące
przedstawiamy w postaci tabeli, jak na przykład w tabeli Porty.
3.7
Jednostki wieloliterowe
Aby złamać kod digramowy możemy stosować analizę częstości występowania jednostek dwuliterowych. Aby metoda ta się powiodła, przechwycony
tekst musi być bardzo długi. Jeżeli dla tekstu o jednostkach jednoliterowych
potrzebowaliśmy N znaków, aby łamanie się powiodło, to teraz potrzebujemy około N 2 znaków. Dla języka angielskiego jest to już ponad 525 liter.
Aby jeszcze bardziej utrudnić łamanie tekstu możemy zastosować trigramy,
czyli jednostki trzyliterowe. Pojawia się tu jednak problem odpowiedniego
zapisania przekształcenia szyfrującego – tabelka musi być trzywymiarowa.
Tym gorszy jest ten problem im dłuższe są jednostki tekstu. Prowadzi to w
końcu do tworzenia jednostek o różnych długościach, a samymi jednostkami
tekstu jawnego są często powtarzające się sekwencje liter. W dalszej perspektywie oznacza to tworzenie swego rodzaju ,,słowników” zwanych książkami
kodowymi. I tu pojawia się kolejny problem. Nikt nie jest w stanie pamiętać
całej treści takiej książki. Zatem musi ona zawsze być pod ręką zarówno
kodującego jak i dekodującego. Stwarza to duże pole manewru dla szpiegów
i nie tylko. W sierpniu 1914 roku niemiecki krążownik Magdeburg próbował
9
uciec od rosyjskiego pancernika i sztuka ta mu się nie udała. Co gorsza, statek
zamiast zatonąć, osiadł na mieliźnie i w związku z tym wszystkie książki
kodowe niemieckiej marynarki zamiast zatonąć, trafiły w ręce Rosjan, którzy
po przestudiowaniu ich ,,podali dalej”. W rezultacie książki dostały się w
ręce niejakiego Winstona Churchilla, który wiedział jak je wykorzystać.
3.8
Szyfr Plaifaira
Problem zapamiętania dużej ilości znaków doprowadził w 1854 roku niejakiego Charlesa Wheatstone’a do wynalezienia prostej metody zastępowania jednego bloku liter drugim. Litery alfabetu umieszczone są w kwadracie,
a blok liter tekstu jawnego tworzy w tym kwadracie przekątną prostokąta.
Blok dwuliterowy odczytany z drugiej przekątnej jest odpowiadającym blokiem kryptotekstu. Jeśli litery znajdują się w tym samym wierszu lub w tej
samej kolumnie, szyfrowanie jest nieco trudniejsze. Ogólnie po krótkiej praktyce, łatwo jest posługiwać się opisanym szyfrem. Szyfr ten nazwany szyfrem
Playfaira, był stosowany przez Anglików od czasów wojny krymskiej aż do
końca pierwszej wojny światowej. Wiadomo jednak, że od połowy 1915 roku,
Niemcy nie mieli problemów z jego złamaniem.
Szyfr ten używa digramów jako jednostek tekstu. Kluczem jest macierz
5 × 5 zawierająca 25 liter (bez j). Do jej ułożenia użyjemy słowa kluczowego
,,szyfrowanie”.
s z y f r
o w a n i
e b c d g
h k l m p
q t u v x
Digram (x, y) = (kij , kmn ), gdzie x 6= y szyfrujemy jako


jeśli i 6= m oraz j 6= n;
(kin , kmj )
(ki,j+1 , ki,n+1 ) jeśli i = m oraz j 6= n;


(ki+1,j , km+1,j ) jeśli i =
6 m oraz j = n.
(Wskaźniki dodajemy modulo 5.) Jeżeli x = y, digram rozdzielamy, tzn.
wtykamy pomiędzy x i y literę q, która jest różna od x i od y.
10
3.9
Szyfry Viginére’a i Beauforta
Jest pewną ironią, że kryptosystem wynaleziony przez F. Beauforta nosi dziś
nazwę szyfru Viginére’a i vice versa. Kryptosystem zwany dziś Beauforta
został wynaleziony przez B. de Viginére’a i w roku 1586 został opisany
w książce Traicté des Chiffres. Natomiast szyfr zwany dzisiaj Viginére’a
został opisany dwa wieki później przez F. Beauforta. Ten ostatni szyfr składa
się z r szyfrów cyklicznych stosowanych okresowo. Dokładnie,
©
ª
E = Ek0 k1 ...kr : k0 , k1 , . . . , kr ∈ K = Zrq ,
przy czym przekształcenie szyfrujące definiujemy jako
Ek0 k1 ...kr (m0 m1 m2 . . . ) = c0 c1 c2 . . . ,
gdzie
ci = (mi + ki mod r ) mod q.
Stosując utożsamienie liter alfabetu z liczbami modulo 26 możemy utożsamić
klucz jako słowo. Na przykład zaszyfrujmy ,,FUNKCJA POLIALFABETYCZNA” stosując klucz ,,anulka”. W tym celu ułóżmy tabelę przesunięć:
AB CDEFGHI J KLMNOPQR S TUVWXY Z
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
n o p q r s t u vw x y z a b c d e f g h i j k l m
u v w x y z a b cd e f g h i j k l mn o p q r s t
l m n o p q r s t u vw x y z a b c d e f g h i j k
k l mn o p q r s t u v w x y z a b c d e f g h i j
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
Pierwszy wiersz powyższej tabeli to alfabet, a każdy następny wiersz, to
alfabet pisany począwszy od odpowiedniej litery słowa–klucza.
Następnie nasz tekst dzielimy na bloki długości słowa ,,anulka” i szyfrujemy pierwszą literę każdego bloku według pierwszego szyfru, drugą według
drugiego itd.
11
F U N K C J
a n u l k a
f h h v m j
A P O L I A
a n u l k a
a c i w s a
L F A B E T
a n u l k a
l s u m o t
Y C Z N A
a n u l k
y p t y k
Otrzymaliśmy zatem kryptogram fhhvmjaciwsalsumotyptyk.
Opiszemy teraz kryptosystem Beauforta. Różnica polega na tym, że alfabet szyfrujący zapisujemy w odwrotnej kolejności. Mamy więc
©
ª
E = Ek0 k1 ...kr : k0 , k1 , . . . , kr ∈ K = Zrq ,
przy czym przekształcenie szyfrujące definiujemy jako
Ek0 k1 ...kr (m0 m1 m2 . . . ) = c0 c1 c2 . . . ,
gdzie
ci = (mi − ki mod r ) mod q.
Stosując utożsamienie liter alfabetu z liczbami modulo 26 możemy utożsamić
klucz jako słowo. Na przykład zaszyfrujmy ,,FUNKCJA POLIALFABETYCZNA” stosując klucz ,,anulka”. W tym celu ułóżmy tabelę alfabetów szyfrujących:
ABCDEFGH I JKLMNOPQRSTUVWXY Z
a z y xwv u t s r q p o nm l k j i h g f e d c b
nm l k j i h g f e d c b a z y x wvu t s r q p o
u t s r q p o nm l k j i h g f e d c b a z y x w v
l k j i h g f e d c b a z y x wv u t s r q p o n m
k j i h g f e d c b a z y x w v u t s r q p o nm l
a z y xwv u t s r q p o nm l k j i h g f e d c b
Zaletą tego szyfru jest fakt, że żadne z przkształceń składowych nie
jest identycznością. Następnie nasz tekst dzielimy na bloki długości słowa
,,anulka” i szyfrujemy pierwszą literę każdego bloku według pierwszego szyfru,
drugą według drugiego itd.
12
F U N K C J
a n u l k a
v t h b i r
A P O L I A
a n u l k a
a y g a c a
L F A B E T
a n u l k a
p i u k g h
Y C Z N A
a n u l k
c l v y k
Otrzymaliśmy zatem kryptogram vthbiraygacapiukghclvyk.
Jako przekształcenia szyfrowe, możemy stosować tu także inne szyfry
niż wykorzystane powyżej. Idea szyfrów Viginére’a została użyta w ENIGMIE, gdzie zastosowano kilkaset tysięcy szyfrów transpozycyjnych jako szyfry
składowe. W każdym razie, aby złamać szyfr Viginére’a długości r potrzebujemy tekstu (angielskiego) długości przynajmniej 25r. Wynika to stąd, że
stosujemy analizę częstości występowania liter dla co r–tej litery tekstu i, co
gorsza, tworzenie tabeli kontaktów jest bardziej skomplikowane. Głównym
problemem jest tutaj jednak znalezienie r. I to jest zapewne główna przyczyna, dla której szyfr Viginére’a był ,,niełamalny” przez prawie trzysta lat!
Dopiero w 1863 roku, oficer armii pruskiej, F. W. Kasiski wynalazł metodę
wypadkowej przypadkowości1 , której nie opiszemy z uwagi na zbyt skomplikowany aparat statystyczny.
3.10
Łańcuch szyfrów i DES
Dość istotną wadą schematu opisanego w poprzednim paragrafie, jest fakt,
że ten sam tekst szyfruje się tak samo, jeśli użyty jest ten sam klucz. Chodzi
o to, że potencjalny intruz wcale nie musi znać tekstu jawnego, by wymusić
na odbiorcy szyfru określone działanie – wystarczy, że prześle mu przechwycony wcześniej (zaszyfrowany) tekst. Ponieważ intruz wie jaka reakcja
była wcześniej, podejrzewa, że taka sama będzie i tym razem. Jednym ze
sposobów ominięcia tej niedogodności jest zastosowanie Łańcuch szyfrów 1 .
Pomysł jest następujący:
Dzielimy tekst jawny (zakodowany w strumień bitów) na bloki Mi po n
bitów. Potrzebny jest inicjujący wektor zero-jedynkowy C0 o n bitach oraz
1
1
ang. the incidence of coincidences
ang. cipherblock chaining
13
klucz K tej samej długości. Pierwszy blok tekstu jawnego szyfrujemy jako
C1 = M1 ⊕ C0 ⊕ K, drugi jako C2 = M2 ⊕ C1 ⊕ K, i tak dalej. Ogólnie,
Cj = Mj ⊕ Cj−1 ⊕ K. W celu rozszyfrowania, dzielimy tekst zaszyfrowany
na n-bitowe kawałki Ci i otrzymujemy kolejno M1 = C1 ⊕ C0 ⊕ K, następnie,
M2 = C2 ⊕ C1 ⊕ K itd. Jeśli któryś z Ci jest błędny, to otrzymujemy błąd
w co najwyżej dwóch kawałkach tekstu jawnego, mianowicie Mi oraz Mi+1 .
Wektor C0 musi być przesłany innym kanałem niż wiadomość jawna i klucz.
Przy odpowiednio dużym n istnieje bardzo mała szansa, że wiadomość, klucz
i wektor inicjujący powtórzą się.
Łańcuch szyfrów jest wykorzystany w systemie DES1 , który był używany
od 1977 roku do końca lat osiemdzisiątych. W 1974 roku, National Bureau
of Standards zobowiazało firmy amerykańskie do napisania programu szyfrującego, który będzie standardem w kodowaniu wiadomości rządowych. Miał
on zastapić niewygodne w użyciu książki kodowe. Odpowiedzią firmy IBM
był system LUCIFER, który po uproszczeniu i modyfikacji stał się standardem. Program szyfrujący został rozpowszechniony w postaci kości, którą
każdy zainteresowany mógł wmontować w swój komputer. Rozszyfrowywanie
polegało na użyciu tej samej kości.
Opiszemy teraz zasadę działania algorytmu DES. Wejściowe 64 bity są
najpierw pomieszane przez początkową permutację IP . Pierwsze 32 bity
tworzą wektor L0 , a następne 32 tworzą R0 . Po szesnastu rundach manipulacji, wektory lewy i prawy łączą się w całość i przechodzą przez permutację
IP −1 generując ostateczną wersję szyfru.
Podczas 16 rund szyfrowania tworzą się kolejno wektory L1 , L2 , . . . , L16
oraz R1 , R2 , . . . , R16 . Dla 1 ≤ i ≤ 16, mamy
Li = Ri−1 ,
Ri = Li−1 ⊕ f (Ri−1 , Ki ),
gdzie f (Ri−1 , Ki ) jest wektorem dwójkowym o 32 współrzędnych, a wektory
Ki są 48-bitowymi wektorami generowanymi przez klucz K według procedury, którą opiszemy później.
Dekodowanie odbywa się w odwrotną stronę, tj. najpierw zaszyfrowany
tekst jest poddawany permutacji IP −1 , tworzą się L16 i R16 , a następnie
obliczane są kolejno
R15 = L16 , L15 = R16 ⊕ f (R15 , K16 ) . . . , R0 = L1 , L0 = R1 ⊕ f (R0 , K1 ).
1
Data Encryption Standard
14
32
4
8
12
16
20
24
28
1
5
9
13
17
21
25
29
2
6
10
14
18
22
26
30
3
7
11
15
19
23
27
31
4
8
12
16
20
24
28
32
5
9
13
17
21
25
29
1
Rysunek 3.1: Tabela selekcji bitów
Połączony wektor L0 R0 jest poddany permutacji IP i powstaje ciąg 64 bitów
wiadomości jawnej.
Wartością funkcji f jest 32-bitowy ciąg. Procedura jego powstawania
wygląda następująco. Jak już wspominaliśmy, Ki ma 48 bitów, a Ri−1 - 32
bity. Aby te wektory dodać, musimy rozszerzyć Ri−1 do 48 bitów. Rozszerzenie Ri−1 odbywa się według Tabeli selekcji bitów. Powstały 48-bitowy
strumień jest podzielony na 8 wektorow 6-bitowych, które są przepuszczone przez S-boksy (Tabela S-boksów). Aby przybliżyć metodę działania Sboksów, rozważmy wektor sześciobitowy a1 a2 a3 a4 a5 a6 , na przykład 010011,
który trafia na S4 . Bity a1 a6 to numer wiersza (i), a a2 a3 a4 a5 to numer
kolumny (j) zapisane w układzie dwójkowym. Strumień wyjściowy (w układzie dziesiętnym) jest na pozycji (i, j) S-boksa. W naszym przypadku,
012 = 1 oraz 10012 = 9 i w S4 znajduje się na pozycji (1, 9) liczba 7 = 01112 .
Zatem strumieniem wyjściowym jest 0111. Po wyjściu z S-boksów, strumienie 4-bitowe łączą się tworząc 32-bitowy wektor, który dodatkowo przechodzi
przez permutację P .
Klucz K ma 64 bity podzielone na 8-bitowe części, z których każda ma
7 efektywnych bitów, a ósmy bit sprawdza parzystość. Dokładnie, jest on
ustalony tak, by w całej ósemce liczba jedynek była parzysta. W przypadku,
gdyby wystąpił błąd w transmisji klucza, zostaje on wykryty z dokładnym
wskazaniem ósemki, w której wystąpił. Z 64 bitów klucza, po sprawdzeniu
poprawności, 8 bitów sprawdzających jest odrzuconych, a pozostałe 56 bitów
przechodzi przez permutację początkową P C1. Spermutowany strumień 56
bitów jest podzielony na pół. Pierwsze 28 bitów tworzy wektor C0 , a następne D0 . Wektory C1 i D1 powstają przez (cykliczne) przesunięcie zawartości
C0 , odpowiednio, D0 o LS1 = 1 pozycji w lewo. Ogólnie, Ci oraz Di powstają
przez przesunięcie zawartości, odpowiednio, Ci−1 , Di−1 o LSi pozycji w lewo.
15
wiersz 0
1
S1
2
3
0
1
S2
2
3
0
1
S3
2
3
0
1
S4
2
3
0
1
S5
2
3
0
1
S6
2
3
0
1
S7
2
3
0
1
S8
2
3
kolumna
0
14
0
4
15
15
3
0
13
10
13
13
1
7
13
10
3
2
14
4
11
12
10
9
4
4
13
1
6
13
1
7
2
1
4
15
1
12
1
13
14
8
0
7
6
10
13
8
6
15
12
11
2
8
1
15
14
3
11
0
4
11
2
15
11
1
2
13
7
14
8
8
4
7
10
9
0
4
13
14
11
9
0
4
2
1
12
10
4
15
2
2
11
11
13
8
13
4
14
3
1
4
8
2
14
7
11
1
14
9
9
0
3
5
0
6
1
12
11
7
15
2
5
12
14
7
13
8
4
8
1
7
4
2
14
13
4
6
1
10
3
6
3
8
6
0
6
12
10
7
4
10
1
9
7
2
9
15
4
12
1
6
10
9
4
5
15
2
6
9
11
2
4
15
3
4
15
9
6
15
11
1
10
7
13
14
2
12
8
5
0
9
3
4
15
3
12
10
6
11
13
2
1
3
8
13
4
15
6
3
8
9
0
7
13
11
13
7
2
6
9
12
15
8
1
7
10
11
7
14
8
7
8
1
11
7
4
14
1
2
5
10
0
7
10
3
13
8
6
1
8
13
8
5
3
10
13
10
14
7
1
4
2
13
8
3
10
15
5
9
12
5
11
1
2
11
4
1
4
15
9
8
5
15
6
0
6
7
11
3
14
10
9
10
12
0
15
9
10
6
12
11
7
0
8
6
13
8
1
15
2
7
1
4
5
0
9
15
13
1
0
14
12
3
15
5
9
5
6
12
10
6
12
9
3
2
1
12
7
12
5
2
14
8
2
3
5
3
15
12
0
3
13
4
1
9
5
6
0
3
6
10
9
Rysunek 3.2: Tabela S-boksów
16
11
12
11
7
14
13
10
6
12
7
14
12
3
5
12
14
11
15
10
5
9
4
14
10
7
7
12
8
15
14
11
13
0
12
5
9
3
10
12
6
9
0
11
12
5
11
11
1
5
12
13
3
6
10
14
0
1
6
5
2
0
14
5
0
15
3
13
9
5
10
0
0
9
3
5
4
11
10
5
12
10
2
7
0
9
3
4
7
11
13
0
10
15
5
2
0
14
3
5
14
0
3
5
6
5
11
2
14
2
15
14
2
4
14
8
2
14
8
0
5
5
3
11
8
6
8
9
3
12
9
5
6
15
7
8
0
13
10
5
15
9
8
1
7
12
15
9
4
14
9
6
14
3
11
8
6
13
1
6
2
12
7
2
8
11
Wektory Ci oraz Di są następnie łączone i po przejściu selekcji P C2 tworzą
48-bitowy strumień Ki .
Główne zarzuty wobec DES, to, po pierwsze, zbyt krótki klucz, co powoduje, że może on być znaleziony w miarę szybko metodą sprawdzenia wszystkich 256 możliwości. Po drugie, nie wiadomo, jakie kryteria kierowały konstruktorami S-boksów. Testy statystyczne pokazują, że liczby w S-boksach
nie są przypadkowe. Niewykluczone, że kryje się tu pewna furtka pozwalająca łatwo rozszyfrować zakodowaną wiadomość.
Mimo swoich wad DES był dość długo używany, aż w końcu ustąpił on
miejsca kryptosystemom o kluczu publicznym. Rozpowszechnienie szybkich,
łatwo programowalnych komputerów doprowadziło do sytuacji, w której kość
szyfrująca okazała się zbędna: Po co montować do komputera dodatkowe
urządzenie, jeśli można napoisać program, który powoduje takie samo działanie, a jeszcze dodatkowo można go w każdej chwili ulepszyć.
17