Przeczytaj
Imprerium Rzymskie, I w. p.n.e. Państwem włada Juliusz CezarJuliusz Cezar. Przypuszcza się, że do komunikowania się ze swoimi przyjaciółmi używał szyfru, który później zyskał miano szyfru Cezara. W jaki sposób szyfrowano informacje w starożytności?
Szyfr przesuwający
Pod pojęciem „szyfr Cezara” kryje się szyfr przesuwający. To niezwykle prosta technika, będąca szczególnym przypadkiem szyfru podstawieniowegoszyfru podstawieniowego, w której każdy znak szyfrowanej wiadomości jest zastępowany innym, oddalonym od niego w alfabecie o określoną odległość. W przypadku tego algorytmu ignoruje się wielkość liter.
Posłużymy się przykładem, aby sprawdzić, jak działa taka technika. Załóżmy, że chcemy zorganizować niespodziewane przyjęcie urodzinowe dla naszego kolegi. Musimy wysłać wiadomość do jego znajomych, kiedy wyjdzie z domu, ale nie chcemy, by przypadkiem ją odczytał. Umówiliśmy się, że zakodujemy wiadomość jak Juliusz Cezar, który stosował przesunięcie o trzy pozycje do przodu. W przypadku tego algorytmu jest to klucz szyfru.
Przygotujemy sobie wiadomość do zaszyfrowania, czyli tekst jawny:
Polski alfabet liczy 32 litery, zatem przesuwając cały alfabet o trzy pozycje, otrzymamy następujący szyfr:
Podmieniając każdą literę tekstu jawnego jej zaszyfrowanym odpowiednikiem, otrzymamy następujący wynik, czyli tekst zaszyfrowany:
Tak zaszyfrowany tekst wygląda jak przypadkowa wiadomość, ale może zawierać istotne informacje – w tym wypadku czas, jaki pozostał do powrotu kolegi do domu. Niestety, ze względu na swoją prostotę szyfr Cezara znajduje zastosowanie jedynie tam, gdzie nie zależy nam na gwarancji bezpieczeństwa komunikacji. Czasem bywa również fragmentem bardziej złożonych algorytmów szyfrujących.
Odszyfrowanie wiadomości to operacja odwrotna do wykonanej na początku. Zatem jeśli wiadomość zaszyfrowano, przesuwając alfabet o trzy pozycje do przodu, to rozszyfrowanie sprowadza się do przesunięcia go o trzy pozycje do tyłu.
Kryptoanaliza
Istnieją dwie techniki łamania szyfru Cezara, zależne od tego, czy jesteśmy pewni, że to właśnie on został użyty. Przyjrzyjmy się najpierw przypadkowi, w którym wiemy, że użyto szyfru Cezara.
Liczbę możliwych przesunięć możemy wyrazić wzorem:
gdzie n jest liczbą znaków w alfabecie; w przypadku języka polskiego mamy do dyspozycji 32 litery.
W przypadku alfabetu łacińskiego mowa już tylko o 26 znakach. Jedno przesunięcie możemy pominąć, ponieważ wiadomość znajduje się już w stanie początkowym. Oczywiście moglibyśmy użyć znacznie bardziej skomplikowanego alfabetu i utrudniłoby to ręczne odszyfrowanie wiadomości. Programistycznie jednak przypadek ten sprowadza się do metody siłowej, gdzie w prosty sposób jesteśmy w stanie uzyskać wszystkie możliwe przesunięcia, a wśród nich będzie również to prawidłowe. Podchodząc do problemu matematycznie, moglibyśmy przyjąć, że każda litera alfabetu oznaczona jest liczbą, na przykład A→0, Ą→1, B→2. Szyfrowanie moglibyśmy zatem zapisać w postaci następującego równania:
gdzie:
SIndeks dolny ii – numer litery po zaszyfrowaniu,
xIndeks dolny ii – przyporządkowany numer litery,
t – przesunięcie,
mod – operator reszty z dzielenia (modulo),
n – liczba znaków w alfabecie.
Używając tego równania, moglibyśmy skonstruować następujący pseudokod:
A co zrobić, jeśli słowo było wielokrotnie szyfrowane? Przesunięcia się sumują, zatem przesunięcie o 10 do przodu, 3 do tyłu i 5 do przodu w rzeczywistości sprowadza się do jednego przesunięcia o 12 do przodu. Jedynym przypadkiem, w którym rozszyfrowanie może nie być skuteczne, są bardzo krótkie wiadomości. Dla nich może istnieć więcej niż jedno rozwiązanie.
Drugą techniką łamania szyfru jest sytuacja, w której nie mamy pewności, czy użyto szyfru Cezara. Stosuje się wtedy te same metody, co w przypadku innych szyfrów podstawieniowych, np. wykorzystuje się statystykę. Litery w różnych językach pojawiają się z pewnym prawdopodobieństwem. W języku polskim najczęściej występują litery A, I, O oraz E. Zatem w zaszyfrowanej wiadomości można czasem odnaleźć pewną zależność i wywnioskować, że użyto właśnie szyfru Cezara.
Słownik
(100 p.n.e. – 44 p.n.e.), rzymski polityk, wódz, dyktator i pisarz
szyfr, w którym każdy znak tekstu jawnego zastępowany jest innym znakiem szyfrogramu