Nie będę tłumaczył czym jest szyfrowanie. Skoro tutaj trafiliście to znaczy, że dostrzegacie, z takiego czy innego powodu, potrzebę uczynienia pewnych informacji zupełnie nieczytelnymi dla nieuprawnionych osób.
Na przestrzeni stuleci narzędzia służące do tego celu, tj. zmiany informacji z czytelnej postaci na nieczytelną i na odwrót, zmieniały się wraz z rozwojem naukowym, technicznym i ogólnym wzrostem świadomości tego zagadnienia.
Nie wszystko co jest nieczytelne zostało uprzednio zaszyfrowane. Aby coś zaszyfrować (a raczej ukryć), można do tego celu użyć pewnego języka znanego stronom biorącym udział w komunikacji, ale nieznanego osobom chcącym poznać treść przekazu.
- Wojna sześciodnowa (5 czerwca 1967 -- 10 czerwca 1967)
- Historia amerykańskich "code talkers", Indian używających m.in. języka nawaho do szyfrowanej komunikacji podczas II wojny światowej na Pacyfiku jest już dobrze znana, opowiedziana m.in. w filmie "The Windtalkers" z 2002 r. Indianie nie stworzyli szyfru. Oni porozumiewali się swoim, tylko sobie znanym, językiem.
- Kamień z Rosetty.
Na kamieniu wyryty został tekst dwujęzyczny w trzech wersjach –- po egipsku pismem hieroglificznym i demotycznym oraz po grecku. Tekst zapisany greką został szybko odczytany przez filologów. Ponieważ tekst grecki był znany, możliwe stało się odczytanie hieroglifów, czego dokonali w 1822 roku Jean-François Champollion i w 1823 roku Thomas Young.
Zalety:
- Łatwość użycia (przy założeniu uprzedniej znajomości języka).
Wady:
- Duża podatność na złamanie szyfru.
Wniosek 1:
"Szyfrowanie" przez ukrywanie może być skuteczne, ale z pewnością jest bardzo ryzykowne.
Istnieje pewien szczególny rodzaj tajnego przekazu, który z biegiem wieków stopniowo wychodził z użycia. Polega on na zastąpieniu całych słów lub zwrotów innym słowem, liczbą lub symbolem. Na przykład komnikat
Prezes założył marynarkę. Czeka na auto.
może oznaczać
Oddział komandosów zajął pozycje. Oczekuje na rozkaz rozpoczęcia ataku.
W takiej sytuacji będzimy mówić raczej o kodowaniu niż o szyfrowaniu.
Zalety:
- Nie ma możliwości "odszyfrowania" takiego przekazu. Pod zwrotem
A
może być "zaszyfrowany" dowolny zwrotB
, zależnie od przyjętej umowy.
Wady:
- Zdolność do przekazywania informacji ograniczona jedynie do wcześniej ustalonego zbioru "komunikatów" -- brak uniwersalności.
- Konieczność aktualizacji zbioru dopuszczalnych kodów.
Wniosek 2:
Metoda szyfowania powinna być tak ogólna jak tylko jest to możliwe, pozwalając szyfrować dowolne komunikaty.
Dzisiaj zamiast kodów stosuje się szyfry. Jest to mechanizm działajcy na niższym poziomie (pojedynczych znaków zamiast słów lub zwrotów), polegający na zastąpieniu poszczegolnych znaków innymi znakami (zamiast słów innymi słowami).
Metody kryptografii (szyfrowania) dzielą się na dwie kategorie, w zależności od tego czy szyfrowanie polega na przestawieniu, czy podstawieniu.
Przestawienie polega na zmianie uporządkowania znaków tekstu, czyli stworzeniu anagramu. W przypadku krótkich wiadomości, metoda ta nie zapewnia bezpieczeństwa, ponieważ liczba wsystkich możliwych sekwencji ograniczonego zbioru liter jest stosunkowo mała. Na przykład, trzy litry można uporządkować tylko na sześć sposobów:
1 2 3 4 5 6 7 8 |
nie nei ine ien eni ein |
Jednak w miarę jak rośnie liczba znaków, liczba sekwencji gwałtownie wzrasta i odtworzenie oryginalnego tekstu staje się niemożliwe bez znajomości procedury przestawiania (obliczenia wykonane w Wolfram Alpha):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
liczba maksymalna liczba sekwencji znaków 3 3! 6 (six) 5 5! 120 (one hundred twenty) 7 7! 5040 (five thousand, forty) 9 9! 362880 (three hundred sixty-two thousand, eight hundred eighty) 11 11! 39916800 3.99168 × 10^7 (39 million 916 thousand 800) 13 13! 6227020800 6.2270208 × 10^9 (6 billion 227 million 20 thousand 800) 15 15! 1307674368000 1.307674368 × 10^12 (1 trillion 307 billion 674 million 368 thousand) 17 17! 355687428096000 3.55687428096 × 10^14 (355 trillion 687 billion 428 million 96 thousand) 19 19! 121645100408832000 1.21645100408832 × 10^17 (121 quadrillion ...) 21 21! 51090942171709440000 5.109094217170944 × 10^19 (51 quintillion ...) 23 23! 25852016738884976640000 2.585201673888497664 × 10^22 (25 sextillion ...) 25 25! 15511210043330985984000000 1.5511210043330985984 × 10^25 (15 septillion ...) 27 27! 10888869450418352160768000000 1.0888869450418352160768 × 10^28 (10 octillion ...) 29 29! 8841761993739701954543616000000 8.841761993739701954543616 × 10^30 (8 nonillion ...) 31 31! 8222838654177922817725562880000000 8.22283865417792281772556288 × 10^33 (8 decillion ...) 8 decillion 222 nonillion 838 octillion 654 septillion 177 sextillion 922 quintillion 817 quadrillion 725 trillion 562 billion 880 million |
Jak więc widać, istotna jest umiejętność określenia sposbu tworzenia anagramu, gdyż bez jego znajomości otrzymujemy tekst owszem niemożliwy praktycznie do odczytania przez osobę niepowołaną, ale także i przez adresata. Musimy zatem w jakiś sposób kontrolować tworzony anagram -- mówiąc inaczej, musimy wymyślić schemat budowy anagramu, czyli skonstruować konkretny szyfr.
W najprostszej postaci ta technika szyfrowania polega na zapisywaniu kolejnych znaków na zmianę w dwóch wierszach, po czym dolny wiersz dołączany jest na zakończenie górnego wiersza. Oto przykład
1 2 3 4 5 6 7 8 |
TEKST_JAWNY T K T J W Y => TKTJWY E S _ A N => ES_AN TKTJWY ES_AN TKTJWYES_AN TKTJWYES_AN |
W metodzie można zwiększyć liczbę wierszy, na przykład do 4
1 2 3 4 5 6 7 8 9 10 11 |
TEKST_JAWNY T J => TJ E _ A => E_A K T W Y => KTWY S N => SN TJ E_A KTWY SN TJE_AKTWYSN TJE_AKTWYSN |
Zamiast zaczynać "wpisywanie" tekstu od górnego wiersza, można od dowolnego innego (ustalonego), na przykład szyforwanie na 4 wierszach z offsetem (przesunięciem) o 5
1 2 3 4 5 6 7 8 9 10 |
TEKST_JAWNY . E A. => EA . T K J W => TKJW . . S _ N => S_N . T Y => TY EA TKJW S_N TY EATKJWS_NTY EATKJWS_NTY |
Szyfr taki jest bardzo łatwy do złamania, szczególnie w dzisiejszych czasach, gdy mamy komputery. Spróbujmy rozszyfrować następujący szyfrogram
1 |
NTEUT_I_AI_RDEOEKTN |
W szyfrogramie mamy 19 znaków. Pozwala to oszacować z góry liczbę wszystkich testów jakie należy wykonać. Przy szyfrowaniu tym sposobem sens ma tylko rozpatrywanie połowy łącznej liczby znaków zaokrąglonej w dół do liczby całkowitej, czyli w naszym przypadku 9. Maksymalne przesunięcie to 9*2-1=17. Tak więc po wykonaniu 9*17=153 testów powinniśmy znaleźć rozwiązanie. W najgorszym razie trzeba będzie wykonać 19*37=703 testów, przy czym w tym drugim przypadku już po częściowej analizie szyfrogramu można wpaść na rozwiązanie.
Procedura odszyfrowania wymaga określenia (odgadnięcia) liczyb wierszy $R$ i przesunięcia $O$. Spróbujmy rozszyfrować tekst przyjmując, że do jego zaszyfrowania użyto następującej liczyb wierszy $R$ i przesunięcia $O
1 2 3 4 |
R=2, O=0 R=2, O=1 R=3, O=0 R=3, O=1 |
- R=2, O=0
Gdyby użyto 2 wierszy bez przesunięcia, wówczas 19 znaków podczas szyfrowania zostałoby rozmieszczonych jak poniżej
121 3 5 7 9 1 3 5 7 92 4 6 8 0 2 4 6 8
co dałoby szyfrogram postaci
1234561 1 1 1 1 1 1 1 1 11 3 5 7 9 1 3 5 7 9 2 4 6 8 0 2 4 6 8N T E U T _ I _ A I _ R D E O E K T NN T E U T _ I _ A I_ R D E O E K T N
Zatem tekstem oryginalnym musiałoby być:
1N_TREDUETO_EIK_TANI - R=2, O=1
Gdyby użyto 2 wierszy z przesunięciem równym 1, wówczas 19 znaków podczas szyfrowania zostałoby rozmieszczonych jak poniżej
12. 2 4 6 8 0 2 4 6 81 3 5 7 9 1 3 5 7 9
co dałoby szyfrogram postaci
1234561 1 1 1 1 1 1 1 1 1 1 1 1 1 12 4 6 8 0 2 4 6 8 1 3 5 7 9 1 3 5 7 9N T E U T _ I _ A I _ R D E O E K T N. N T E U T _ I _ AI _ R D E O E K T N
Zatem tekstem oryginalnym musiałoby być:
1IN_TREDUETO_EIK_TAN - R=3, O=1
Gdyby użyto 3 wierszy bez przesunięcia, wówczas 19 znaków podczas szyfrowania zostałoby rozmieszczonych jak poniżej
1231 5 9 3 72 4 6 8 0 2 4 6 83 7 1 5 9
co dałoby szyfrogram postaci
12345671 1 1 1 1 1 1 1 1 11 5 9 3 7 2 4 6 8 0 2 4 6 8 3 7 1 5 9N T E U T _ I _ A I _ R D E O E K T NN T E U T_ I _ A I _ R D EO E K T N
Zatem tekstem oryginalnym musiałoby być:
1N_OIT_EAEIK_URTDTEN - R=3, O=1
Gdyby użyto 3 wierszy z przesunięciem równym 1, wówczas 19 znaków podczas szyfrowania zostałoby rozmieszczonych jak poniżej
123. 4 8 2 61 3 5 7 9 1 3 5 7 92 6 0 4 8
co dałoby szyfrogram postaci
12345671 1 1 1 1 1 1 1 1 14 8 2 6 1 3 5 7 9 1 3 5 7 9 2 6 0 4 8N T E U T _ I _ A I _ R D E O E K T N. N T E UT _ I _ A I _ R D EO E K T N
Zatem tekstem oryginalnym musiałoby być:
1TO_NIE_TAKIE_TRUDNE
Jak więc widać, stosując wyłącznie metodę siłową, sprawdzając kolejne możliwe "parametry" szyfru (kolejne "hasła") otzymujemy ciąg odszyfrowanych wiadomości, z których sensowna będzie najpardopodobniej tylko jedna.
1 2 3 4 |
R=2, O=0: N_TREDUETO_EIK_TANI R=2, O=1: IN_TREDUETO_EIK_TAN R=3, O=0: N_OIT_EAEIK_URTDTEN R=3, O=1: TO_NIE_TAKIE_TRUDNE |
Wniosek 3
Metoda powinna być tak skonstruowan aby znajomość sposobu szyfrowania nie była wystarczająca do odszyfrowania tekstu.
Ewentualnie i znacznie lepiej: upublicznić (odtajnić) samą metodę i jej opis, ale wprowadzić do niej mechanizm klucza, który ze względu na złożoność i mnogość alternatywnych rozwiązań zabezpiecza tekst.
Podstawowa zasada kryptologii: dla bezpieczeństwa istotny jest klucz, a nie algorytm.
Ostateczną postać nadał jej holenderski lingwista Auguste Kerckhoffs von Nieuwenhof w książce La Cryptographie militaire:
Bezpieczeństwo systemu kryptogtaficznego nie może zależeć od zachowania w tajemnicy algorytmu szyfrującego. Bezpieczeństwo zależy wyłącznie od zachowania w tajemnicy klucza.
Cytat z: Simon Singh, Księga szyfrow, Wydawnictwo Albatros A. Kuryłowicz, Warszawa 2001.
Jak możemy zauważyć, w przestawieniowych metodach szyfrowania każdy znak zachowuje tożsamość (nie zmienia się na żaden inny znak), ale zmienia położenie. Komplementarnym (uzupełniającym) do przestawieniowej powyżej metody szyfrowania jest szyfrowanie podstawieniowe. W metodzie tej zmienia się tożsamość litery, ale jej położenie jest ustalone.
Jedna z najprostszych metod polega na losowym połączeń liter alfabetu w pary, a następnie zastąpieniu w jawnym tekście kolejnych liter przez literę z danej pary.
1 2 |
znak ABCDEFGHIJKLMNOPQRSTUVWXYZ_ zamiennik BCDEUGFYNIJKLOMPAQR_STZVWHX |
Zauważmy, że w tym sposobie tworzenia par nie ma możliwości aby jakiś znak pojawił się więcej niż jeden raz; mowiąc dokładniej, każdy dopuszczalny znak musi pojawić się dokładnie jeden raz jako każdy z elementów pary. Na przykład litera A
występuje w parach (A
, B
) oraz (Q
, A
) -- raz na pierwszej pozycji i raz na drugiej.
Używając powyższych podstawień do zaszyfrowania tekstu TEKST_JAWNY
, otrzymujemy:
1 2 3 |
TEKST_JAWNY _UJR_XIBZOW |
Kompletny zestaw par staje się w tym przypadku kluczem, czyli elementem niezbędnym do zaszyfrowania i odszyfrowania treści. Problem w tym, że taki klucz, jeśli jest losowy, jest trudny do zapamiętania.
Względnie łatwo możemy określać podstawienie dokonując przesunięcia całego alfabetu (listy znaków) o zadaną ilość znaków. W przypadku szyfru Cezara przesunięcie to wynosiło 3 znaki
1 2 3 |
znak ABCDEFGHIJKLMNOPQRSTUVWXYZ_ przesunięcie o 3 ABC|DEFGHIJKLMNOPQRSTUVWXYZ_ zamiennik DEFGHIJKLMNOPQRSTUVWXYZ_ABC |
Używając powyższych podstawień do zaszyfrowania tekstu TEKST_JAWNY
, otrzymujemy:
1 2 3 |
TEKST_JAWNY WHNVWCMDZQA |
Słabością tego szyfru jest bardzo mała liczba kluczy, wynosząca w podanym przykładzie 26 (27 różnych znaków). Możemy zatem próbować wszystkich możliwych kluczy aż do uzyskania sensownej odpowiedzi. Podobnie jak wcześniej, sensowna będzie najpardopodobniej tylko jedna wiadomość.
Spróbujmy rozszyfrować następujący szyfrogram
1 |
XSDRMIDXEOMIDXVYHRI |
Po kolei będziemy sprawdzać wyniki otrzymane przy użyciu alfabetu przesuniętego o 1, 2, 3 itd znaki
1 2 3 4 5 6 7 8 9 10 11 |
BCDEFGHIJKLMNOPQRSTUVWXYZ_A XSDRMIDXEOMIDXVYHRI ABCDEFGHIJKLMNOPQRSTUVWXYZ_ WRCQLHCWDNLHCWUWGQH CDEFGHIJKLMNOPQRSTUVWXYZ_AB XSDRMIDXEOMIDXVYHRI ABCDEFGHIJKLMNOPQRSTUVWXYZ_ VQBPKGBVCMKGBVTWFPG DEFGHIJKLMNOPQRSTUVWXYZ_ABC XSDRMIDXEOMIDXVYHRI ABCDEFGHIJKLMNOPQRSTUVWXYZ_ UPAOJFAUBLJFAUSVEOF EFGHIJKLMNOPQRSTUVWXYZ_ABCD XSDRMIDXEOMIDXVYHRI ABCDEFGHIJKLMNOPQRSTUVWXYZ_ TO_NIE_TAKIE_TRUDNE |
W kroku czwartm otrzymujemy sensownie brzmiący tekst TO_NIE_TAKIE_TRUDNE
i najprawdopodobniej będzie to jedyny sensownie brzmiący tekst otzymany podczas sprawdzania wszystkich możliwych kluczy powstałych w wyniku przesunięcia.
We względnie prosty sposób można zmodyfikować sposób tworzenia podstawienia tak aby z jednej strony dawał znacznie większy zestaw potencjalnych kluczy a z drugiej był łatwy do zapamietania. W tym celu posłużymy się słowem kluczowym nazywanym także wyrażeniem kluczowym -- za jego pomocą wygenerujemy właściwy klucz. Na przykład wykorzystując jako wyrażenie kluczowe zwrot STAR_WARS
, otrzymujemy
1 2 3 4 5 6 7 8 9 10 11 12 13 |
1. wyrażenie kluczowe.........STAR_WARS 2. wyrażenie z usuniętymi powtórzeniami..............STAR_W 3. zbiór znaków (znaki).......ABCDEFGHIJKLMNOPQRSTUVWXYZ_ 4. zbiór znaków z usuniętymi znakami z wyrażenia kluczowego.................*BCDEFGHIJKLMNOPQ***UV*XYZ* BCDEFGHIJKLMNOPQUVXYZ 5. 2.+ 4. = zamiennik.........STAR_WBCDEFGHIJKLMNOPQUVXYZ Ostatecznie: znaki.........................ABCDEFGHIJKLMNOPQRSTUVWXYZ_ zamiennik.....................STAR_WBCDEFGHIJKLMNOPQUVXYZ |
Używając powyższych podstawień do zaszyfrowania tekstu TEKST_JAWNY
, otrzymujemy:
1 2 3 |
TEKST_JAWNY O_FNOZESUIX |
W tym przypadku odszyfrowanie tesktu jest zadaniem znacznie trudniejszym w porównaniu z szyfrem Cezara -- ze względu na występowanie wyrażenia kluczowego liczba potencjalnych kluczy jest znacznie większa.
Wniosek 4
W metodzie szyfrującej zapewnić aby ilość możliwych kluczy była na tyle duża aby nie było możliwe sprawdzenie ich wszystkich metodą siłową w akceptowalnym czasie.
UWAGA: Efektywna możliwość sprawdzenia wszystkich kluczy w akceptowalnym czasie ulega zmianom wraz z rozwojem techniki.
Niestety wciąż obowiązuje zasada, że wybranemu znakowi zawsze odpowiada ten sam zamiennik. Cecha ta pozwala efektywnie łamać szyfry tego rodzaju dzięki analizie częstotliwościowej występowania znaków.
Wniosek 5.1
Dokument zaszyfrowany nie powinien zawierać w sposób jawny (czytelny) żadnej charakterystyki dokumentu jawnego.
Charakterystykę dokumentu jawnego ukryjemy, gdy jeden znak tekstu jawnego będzie zastępowany różnymi znakami w zależności od miejsca występowania znaku w tekście i znaków go poprzedzających. Ten sam znak występujący na przykład trzykrotnie po sobie powinien być zawsze szyfrowany jako trzy różne znaki.
Przyjrzyjmy się następującemu przykładowi.
Podstawienie utworzone powyżej w oparciu o wyrażenie kluczowe START_WARS
1 2 |
znaki.........................ABCDEFGHIJKLMNOPQRSTUVWXYZ_ zamiennik.....................STAR_WBCDEFGHIJKLMNOPQUVXYZ |
zakoduje tekst DDD
jako RRR
. W tym podstawieniu na przykład litera D
zastępowana jest oddaloną od niej o 14 pozycji na prawo (pisać będziemy +14) literą R
a litera R
zastepowana jest oddaloną od niej o 5 na lewo (pisać będziemy -5) literą M
. Skrótowo będziemy to zapisywać jako D+14=R
, R-5=M
. Stąd podstawienie to możemy zapisać w innej równoważnej postaci jako
1 2 3 |
znaki.......... 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 _ oddalenie......+18 +18 -2 +14 +22 +17 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -2 -2 -1 -1 -1 zamiennik...... S T A R _ W B C D E F G H I J K L M N O P Q U V X Y Z |
Jesli teraz po każdym wprowadzonym znaku dokonamy przesunięcia oddalenia o 1 wówczas będziemy otrzymywać następujące warianty podstawienia
- Krok 1: oddalenia w pozycji wyjściowej (nieprzesunięte)
123znaki.......... 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 _oddalenie......+18 +18 -2 +14 +22 +17 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -2 -2 -1 -1 -1zamiennik...... S T A R _ W B C D E F G H I J K L M N O P Q U V X Y Z
Pozwoli to zakodować pierwszą literęD
jakoR
.Ponieważ wiemy, że będziemy kodować znak
D
, dlatego w praktyce wystarczy znaleźć zamiennik tylko dlaD
, czyli policzyćD+14
. Pozostałe zamienniki podane zostały tylko dla celów ilustracyjnych. - Krok 2: oddalenia przesunięte o 1 w prawo w stosnku do Kroku 1
123znaki.......... 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 _oddalenie...... -1 +18 +18 -2 +14 +22 +17 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -2 -2 -1 -1zamiennik...... _ T U B S A X C D E F G H I J K L M N O P Q U V W Y Z
Pozwoli to zakodować drugą literę
D
jakoB
. Podobnie jak poprzednio, wstarczy policzyćD+(-2)
. - Krok 3: oddalenia przesunięte o 1 w prawo w stosnku do Kroku 2
123znaki.......... 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 _oddalenie...... -1 -1 +18 +18 -2 +14 +22 +17 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -2 -2 -1zamiennik...... _ A U V C T B Y D E F G H I J K L M N O P Q U V W X Z
Pozwoli to zakodować trzecią literę
D
jakoV
. Podobnie jak poprzednio, wstarczy policzyćD+18
.
Tak więc ciąg DDD
został zakodowany jako RBV
. Jak więc widać sama procedura szyfrowania nie stała się dużo bardziej złożona od poprzednich. Deszyfrowanie (przy znajomości klucza, a więc oddalenia z Kroku 1) jest jak najbardziej wykonalne, choć wymaga więcej czasu, gdyż należy przeprowadzić proces odwrotny, a więc trzeba wyszukać w zamiennikach zaszyfrowany znak co pozwoli wyznaczyć odpowiadający jemu znak jawny.
Aby móc wykorzystać tą samą procedurę do szyfowania i deszyfrowania musimy wprowadzić pewne drobne usprawnienie całego procesu. Zauważmy, że zawsze mamy zależność
1 2 3 |
znak_1 + oddalenie = znak_2 znak_2 - oddalenie = znak_1 |
Wprowadźmy teraz odwracacz łączący w pary każde kolejne dwie litery (nie muszą to być dwie kolejne litery -- pary mogą stanowić znaki niesąsiadujące bezpośrednio ze sobą; tutaj robimy tak aby ułatwić zrozumienie idei):
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), (_) |
i szyfrujmy tekst w następujący sposób
znak+oddalenie=zamiennik_1
znajdź parę w której wystepuje zamiennik_1
znajdź w zamiennikach drugi element pary i nazwij go zamiennik_2
zamiennik_2-oddalenie=znak_zaszyfrowany
Spróbujmy teraz zaszyfrować ciąg DDD
- Krok 1: oddalenia w pozycji wyjściowej (nieprzesunięte)
1234567znaki.......... 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 _oddalenie......+18 +18 -2 +14 +22 +17 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -2 -2 -1 -1 -1zamiennik...... S T A R _ W B C D E F G H I J K L M N O P Q U V X Y Zznak+oddalenie=zamiennik_1 czyli D+14=Rpara ze znakiem R: (Q, R), drugi znak z pary: Q a więc zamiennik_2=Qznak_zaszyfrowany =zamiennik_2-oddalenie = Q-(-5) = V
Pozwoli to zakodować pierwszą literęD
jakoV
. Zauważmy, że przeprowadzając tę procedurę dlaV
(czyli tak, jak gdybyśmy chcieli zaszyfrowaćV
) otrzymujemy znakD
:
123znak+oddalenie=zamiennik_1 czyli V-5=Qpara ze znakiem Q: (Q, R), drugi znak z pary: R a więc zamiennik_2=Rznak_zaszyfrowany =zamiennik_2-oddalenie = R-14 = D - Krok 2: oddalenia przesunięte o 1 w prawo w stosnku do Kroku 1
1234567znaki.......... 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 _oddalenie...... -1 +18 +18 -2 +14 +22 +17 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -2 -2 -1 -1zamiennik...... _ T U B S A X C D E F G H I J K L M N O P Q U V W Y Zznak+oddalenie=zamiennik_1 czyli D+(-2)=Bpara ze znakiem B: (A, B), drugi znak z pary: A a więc zamiennik_2=Aznak_zaszyfrowany =zamiennik_2-oddalenie = A-22 = F
Pozwoli to zakodować drugą literęD
jakoF
. - Krok 3: oddalenia przesunięte o 1 w prawo w stosnku do Kroku 2
1234567znaki.......... 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 _oddalenie...... -1 -1 +18 +18 -2 +14 +22 +17 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -2 -2 -1zamiennik...... _ A U V C T B Y D E F G H I J K L M N O P Q U V W X Zznak+oddalenie=zamiennik_1 czyli D+18=Vpara ze znakiem V: (U, V), drugi znak z pary: U a więc zamiennik_2=Uznak_zaszyfrowany =zamiennik_2-oddalenie = U-(-5) = W
Pozwoli to zakodować trzecią literęD
jakoW
.
Tak więc ciąg DDD
został zakodowany jako VFW
. Choć pozornie po wprowadzonej modyfikacji mamy więcej pracy, to jednak zrealizowana w oparciu o te założenia fizyczna maszyna szyfrująca okazuje się być prostsza w przypadku przeprowadzania deszyfrowania wiadomości.
Na zmodyfikowanej wersji tej metody, opisanej w ramce "informacyjnej" powyżej, oparta była niemiecka maszyna szyfrująca Enigma. Jednak ona także posiadała słabe punkty i została złamana na początku lat 30-tych ubiegłego wieku przez Marian Rejewski oraz Henryka Zygalskiego i Jerzego Różyckiego.
Amerykański historyk i dziennikarz David Kahn napisał (David Kahn, Łamacze kodów. Tajemnice kryptologii, Barbara Kołodziejczyk (tłum.), Warszawa: WNT, 2004), że rozwiązanie tej zagadki było oszałamiającym osiągnięciem, które wyniosło Rejewskiego do panteonu największych kryptoanalityków wszech czasów.
Jak czytamy w Księdze szyfrów (Simon Singh, Księga szyfrow, Wydawnictwo Albatros A. Kuryłowicz, Warszawa 2001)
Jego [Rejewskiego] atak na Enigmę był jednym z największych osiągnięć w historii kryptoanalizy. Musiałem tu streścić jego pracę na kilku stronach, dlatego pominąłem wiele szczegółów matematycznych i wszystkie ślepe zaułki. Enigma jest bardzo złożoną maszyną szyfrującą i złamanie niemieckeigo szyfru wymagało ogromnej siły intelektu. Moje uproszczenia nie powinny nikogo skłonić do zlekceważenia ogromnego osiągnięcia Rejewskiego. [s. 171]
Srategia Rejewskiego polegała na wykorzystaniu faktu, że powtórzenie jest wrogiem bezpieczeństwa: powtórzenia prowadzą do regularności, a tego właśnie trzeba kryptoanalitykom. [s. 165]
Wniosek 5.2
Sposób szyfrowania nie powinien dopuszczać tworzenia powtórzeń.
Wszystkie dotychczas opisane metody, jak i wiele innych używanych współcześnie, mają jedną zasadniczą wadę: możliwe są do odszyfrowania jeśli tylko będziemy mieć wystarczająco dużo czasu. Potrzebny czas może być bardzo duży, ale zawsze będzie skończony.
Istnieje jednak pewna metoda, która ukrywa sekret na zawsze bez możliwości jego ujawnienia w przypadku niedysponowania kluczem. Co może dziwić, metoda ta jest bardzo prosta.
Najpierw nadajmy każdemu znakowi numer równy pozycji znaku w ciagu znaków dopuszczalnych (alfabecie).
1 2 3 |
11111111112222222 pozycja.....012345678901234567890123456 znak........ABCDEFGHIJKLMNOPQRSTUVWXYZ_ |
Na przykład A
ma numer 0, K
ma numer 10 a X
ma numer 23. Teraz każdy numer zapiszmy jako ciąg dwójkowy 5-bitowy (zbiór dopuszczalnych symboli, ze względów technicznych, musiał zostać rozszerzony do wielkości $2^5=32$; dodane zostały symbole 1
, 2
, 3
, 4
oraz 5
)
1 2 3 4 5 6 7 8 9 |
1111111111222222222231 pozycja.....01234567890123456789012345678901 znak........ABCDEFGHIJKLMNOPQRSTUVWXYZ_12345 |||||||||||||||||||||||||||||||| 00000000000000001111111111111111 00000000111111110000000011111111 00001111000011110000111100001111 00110011001100110011001100110011 kod.........01010101010101010101010101010101 |
Następnie na każdym ciagu dwójkowym odpowiadajacym znakowi tekstu jawnego oraz ciągu dwójkowym klucza przeprowadzamy pewnego rodzaju operację dodawania według poniższych reguł:
- Jeśli odpowiednie bity tekstu jawnego i klucza są jednakowe (to znaczy oba mają wartość 0 albo oba mają wartość 1), to w tekście zaszyfrowanym stawiamy 0.
- Jeśli odpowiednie bity tekstu jawnego i klucza są różne (to znaczy jeden z nich ma wartość 0 a drugi wartość 1), to w tekście zaszyfrowanym stawiamy 1.
Taka operacja nazwyana jest w informatyce operacja XOR. Przeprowadzając ją na bitach tekstu jawnego TEKST_JAWNY
i klucza DK_SERK_QCV
otrzymamy tekst zaszyfrowany. Co istone, w tym przypadku klucz nie musi być permutacją (wymieszaniem) zbioru dopuszczalnych symboli, ale może być dowolną ich kombinacją
1 2 3 4 5 6 7 |
tekst jawny T E K S T _ J A W N Y 10011 00100 01010 10010 10011 11010 01001 00000 10110 01101 11000 klucz D K _ S E R K _ Q C V 00011 01010 11010 10010 00100 10001 01010 11010 10000 00010 10101 XOR 10000 01110 10000 00000 10111 01011 00011 11010 00110 01111 01101 tekst zaszyfrowany Q O Q A X L D _ G P N |
Tak więc tekst jawny TEKST_JAWNY
przy pomocy klucza DK_SERK_QCV
został zaszyfrowwany jako QOQAXLD_GPN
Deszyfrowanie przebiega dokładnie analogicznie. Spróbujmy odszyfrować tekst QEYLSHXRL5CEVJBZJOK
wiedząc, że został zaszyfrowany kluczem DKCG_DNCLVKAP_QNKDO
.
1 2 3 4 5 6 7 |
tekst zaszyfrowany Q E Y L S H X R L 5 C E V J B Z J O K 10000 00100 11000 01011 10010 00111 10111 10001 01011 11111 00010 00100 10101 01001 00001 11001 01001 01110 01010 klucz D K C G _ D N C L V K A P _ Q N K D O 00011 01010 00010 00110 11010 00011 01101 00010 01011 10101 01010 00000 01111 11010 10000 01101 01010 00011 01110 XOR 10011 01110 11010 01101 01000 00100 11010 10011 00000 01010 01000 00100 11010 10011 10001 10100 00011 01101 00100 tekst jawny T O _ N I E _ T A K I E _ T R U D N E |
Zauważmy jednak, iż w tej metodzie szyfrowania nie ma możliwości siłowego znalezienia poprawnego klucza metodą próbowania wszystkich możliwych kluczy i eliminowania wiadomości bezsensownych. Problem polega na tym, że wykonując próby, otrzymamy wszystkie możliwe wiadomości jakie dają się zapisać na liczbie znaków równej liczbie znaków szyfrogramu (w naszym przypadku 19). Poniżej dla wiadomości QEYLSHXRL5CEVJBZJOK
podaję kilka kluczy wraz z wynikiem "deszyfrowania"
1 2 3 4 5 6 7 |
wiadomość klucz tekst jawny QEYLSHXRL5CEVJBZJOK T3QZIOTDYFNMRDMRNUQ DZIS_JEST_PIEKNIE__ QEYLSHXRL5CEVJBZJOK T3QZIOTDYFDVMRCTHUQ DZIS_JEST_BRZYDKO__ QEYLSHXRL5CEVJBZJOK WPWZGOTLG5YXVD1DTUQ GLOSUJE_NA_TAK_____ QEYLSHXRL5CEVJBZJOK WPWZGOTLG5YJ3N1DTUQ GLOSUJE_NA_NIE_____ QEYLSHXRL5CEVJBZJOK T3QZIOTDYFQP1EF1QDS DZIS_JEST_SLONECZNY QEYLSHXRL5CEVJBZJOK T3QZIOTDYFNKXONNYDS DZIS_JEST_POCHMURNY |
1 2 3 4 5 6 7 |
tekst zaszyfrowany Q E Y L S H X R L 5 C E V J B Z J O K 10000 00100 11000 01011 10010 00111 10111 10001 01011 11111 00010 00100 10101 01001 00001 11001 01001 01110 01010 klucz T 3 Q Z I O T D Y F N M R D M R N U Q 10011 11101 10000 11001 01000 01110 10011 00011 11000 00101 01101 01100 10001 00011 01100 10001 01101 10100 10000 XOR 00011 11001 01000 10010 11010 01001 00100 10010 10011 11010 01111 01000 00100 01010 01101 01000 00100 11010 11010 tekst jawny D Z I S _ J E S T _ P I E K N I E _ _ |
1 2 3 4 5 6 7 |
tekst zaszyfrowany Q E Y L S H X R L 5 C E V J B Z J O K 10000 00100 11000 01011 10010 00111 10111 10001 01011 11111 00010 00100 10101 01001 00001 11001 01001 01110 01010 klucz T 3 Q Z I O T D Y F D V M R C T H U Q 10011 11101 10000 11001 01000 01110 10011 00011 11000 00101 00011 10101 01100 10001 00010 10011 00111 10100 10000 XOR 00011 11001 01000 10010 11010 01001 00100 10010 10011 11010 00001 10001 11001 11000 00011 01010 01110 11010 11010 tekst jawny D Z I S _ J E S T _ B R Z Y D K O _ _ |
1 2 3 4 5 6 7 |
tekst zaszyfrowany Q E Y L S H X R L 5 C E V J B Z J O K 10000 00100 11000 01011 10010 00111 10111 10001 01011 11111 00010 00100 10101 01001 00001 11001 01001 01110 01010 klucz W P W Z G O T L G 5 Y X V D 1 D T U Q 10110 01111 10110 11001 00110 01110 10011 01011 00110 11111 11000 10111 10101 00011 11011 00011 10011 10100 10000 XOR 00110 01011 01110 10010 10100 01001 00100 11010 01101 00000 11010 10011 00000 01010 11010 11010 11010 11010 11010 tekst jawny G L O S U J E _ N A _ T A K _ _ _ _ _ |
1 2 3 4 5 6 7 |
tekst zaszyfrowany Q E Y L S H X R L 5 C E V J B Z J O K 10000 00100 11000 01011 10010 00111 10111 10001 01011 11111 00010 00100 10101 01001 00001 11001 01001 01110 01010 klucz W P W Z G O T L G 5 Y J 3 N 1 D T U Q 10110 01111 10110 11001 00110 01110 10011 01011 00110 11111 11000 01001 11101 01101 11011 00011 10011 10100 10000 XOR 00110 01011 01110 10010 10100 01001 00100 11010 01101 00000 11010 01101 01000 00100 11010 11010 11010 11010 11010 tekst jawny G L O S U J E _ N A _ N I E _ _ _ _ _ |
1 2 3 4 5 6 7 |
tekst zaszyfrowany Q E Y L S H X R L 5 C E V J B Z J O K 10000 00100 11000 01011 10010 00111 10111 10001 01011 11111 00010 00100 10101 01001 00001 11001 01001 01110 01010 klucz T 3 Q Z I O T D Y F Q P 1 E F 1 Q D S 10011 11101 10000 11001 01000 01110 10011 00011 11000 00101 10000 01111 11011 00100 00101 11011 10000 00011 10010 XOR 00011 11001 01000 10010 11010 01001 00100 10010 10011 11010 10010 01011 01110 01101 00100 00010 11001 01101 11000 tekst jawny D Z I S _ J E S T _ S L O N E C Z N Y |
1 2 3 4 5 6 7 |
tekst zaszyfrowany Q E Y L S H X R L 5 C E V J B Z J O K 10000 00100 11000 01011 10010 00111 10111 10001 01011 11111 00010 00100 10101 01001 00001 11001 01001 01110 01010 klucz T 3 Q Z I O T D Y F N K X O N N Y D S 10011 11101 10000 11001 01000 01110 10011 00011 11000 00101 01101 01010 10111 01110 01101 01101 11000 00011 10010 XOR 00011 11001 01000 10010 11010 01001 00100 10010 10011 11010 01111 01110 00010 00111 01100 10100 10001 01101 11000 tekst jawny D Z I S _ J E S T _ P O C H M U R N Y |
Jak widać, każda z tych wiadomości ma sens i nie wiadomo, która jest prawdziwa.
Ostania metoda wydaje się być idealną metodą szyfrowania -- jest bardzo prosta i nie daje szans na odczytanie wiadomości. Jedyny problem z nią związany dotyczy samego klucza -- aby, zgodnie z wnioskiem 5.2 ten sposób szyfrowania nie dopuszczał do tworzenia powtórzeń, klucz powinien być długości równej długości szyfrowanego tekstu. W ten oto sposób natrafiamy na zagadnienie bezpiecznego sposobu dystrybucji (przekazywania) kluczy, które jednakże samo w sobie jest zupełnie inną historią wymagającą osobnej opowieści.