Proste szyfry permutacyjne i podstawieniowe monoalfabetyczne są pierwszymi szyframi wykorzystywanymi w historii ludzkości. Słynny szyfr Cezara jest prostym szyfrem podstawieniowym monoalfabetycznym, a przez wiele lat był nie do złamania. Powszechnie uważa się, że kolebką kryptografii jest Europa. Oczywiście jest to nie prawda, w momencie kiedy europejczycy głowili się nad banalnymi szyframi i kodami, na bliskim wschodzie kryptologia przeżywała prawdziwy renesans.
Jako pierwsze zaprezentuję szyfry permutacyjne (przestawieniowe).
1. Szyfr Płotkowy
Szyfry przestawieniowe - polegają na pewnej ustalonej z góry permucacji znaków w szyfrowanym tekście. Szyfr płotkowy jest jednym z najprostrzych szyfrów permutacyjnych. Kluczem szyfru płotkowego jest liczba określająca jego głębokość. Dla przykładu tekst jawny:
PROGRAMOWANIE BY ANUBIS
zakodowany opisywanym algorytmem będzie miał postać:
PMEBRAOIBUIORWNYNSGAAX
Proces szyfrowania można przedstawić w sposób następujący:
Najpierw z tekstu jawnego tworzymy płotek o głebokości równej K=3.

..: Powiększ :..
Zgodnie z zasadami kryptografii usunęłem z tekstu białe znaki (spacje), aby nie zakłócały szyfrogramu, a na koniec płotka dodałem literę X.
Dodana została, gdyż bez niej płotek jest niepełny, a szyfrowanie i późniejsze deszyfrowanie wymaga pełnego (symetrycznego) płotka.
Z tak utworzonej struktury odczytujemy litery wierszami, co da nam przedstawiony szyfrogram.
Do implementacji struktury płotka w programie, najwygodniej jest użyć macierzy, o wymiarach NxM.
gdzie M=K+1
a N=len(C)/3
len(C) - długość tekstu jawnego C
W przypadku naszego tekstu, tworzymy macierz:
N=7 i M=4

..: Powiększ :..
Jak widać tekst jawny zapisujemy kolumnami a zczytujemy wierszami. Bardzo ważną rzeczą jest, aby parzyste kolumny macierzy były niepełne (niewypełnione elementy pierwszy i ostatni). Niezachowanie tej reguły spowoduje, że nie powstanie prawidłowy płotek.
Deszyfrowanie wiadomości tak zaszyfrowanej, jest równie proste jak jej zaszyfrowanie. Ponownie musimy obliczyć rozmiar macierzy w sposób już znany, a następnie wypełnić ją wierszami i odczytać kolumnami (pamiętając o pustych komórkach w parzystych kolumnach).
2. Szyfr oparty na macierzy
Jeżeli utworzymy sobie macierz o określonych wymiarach MxN, i będziemy wypełniać ją szyfrowanym tekstem otrzymamy prosty szyfr blokowy oparty na macierzy. Ideą takiego algorytmu, jest zastosowanie pewnej permutacji kolumn macierzy podczas odczytu z niej tekstu. Inaczej mówiąc - zapisujemy wierszami, odczytujemy kolumnami w pewnej ustalonej kolejności.
Ustalmy sobie że blokiem szyfrowania będzie macierz wielkości 4x3 a kluczem (kolejnością odczytywania kolumn) K={4,1,3,2}. Zaszyfrujmy tekst:
PROGRAMOWANIE BY ANUBIS
Tworzymy macierz i wypełniamy ją znakami:

..: Powiększ :..
Jak widać, nie zmieścił się nam cały szyfrowany tekst. Odczytujemy więc kolumny wg. klucza K - czyli najpierw 4, później 1, 3 a nakońcu 2.
GOIPRWOMNRAA
Teraz ładujemy do tej macierzy kolejny blok tekstu:

..: Powiększ :..
Jak widać blok jest niepełny. Są dwa rozwiązania, brakujące elementy można zastąpić znakami takimi jak np "X", co jest metodą prostszą.
Po odczycie kolumn otrzymany cały szyfrogram
GOIPRWOMNRAAAIXENSYBXBUX
Jak teraz odszyfrować wiadomość?
W pierwszej kolejności należy policzyć długość szyfrogramu oraz ilość bloków kodowania, oraz odczytać wierszami. W tej metodzie jednak, na końcu odszyfrowanego tekstu jawnego pojawią się trzy znaki X.
Podsumowanie
Przedstawiłem tu tylko dwa algorytmy szyfrowania przestawieniowego, jednakże możliwości wykorzystania macierzy są ogromne - można swobodnie stosować kombinacje przestawiania kolumn, wierszy, lub wszystkiego na raz - to tylko zależy od wyobraźni.
Źródło:
Autor: Anubis
http://binboy.sphere.pl/index.php?show=71
|