ου γαρ εστιν κρυπτον ο ου φανερον γενησεται ουδε αποκρυφον ο ου γνωσθησεται και εις φανερον ελθη
Wersja PL ENG Version

Szyfr Płotkowy

  • Ogólny opis
  • Algorytm
  • Implementacja
Szyfr Płotkowy jest szyfrem przestawieniowym. Jego działanie polega na przestawieniu kolejności liter, bazując na uproszczonym kształcie drewnianego płotku.
Szyfr Przestawieniowy
Szyfr Płotkowy był znany i często używany już w czasach starożytnych. Starożytni Grecy opracowali nawet specjalne narzędzie, nazywane scytale, aby ułatwić szyfrowanie i deszyfrowanie wiadomości. Obecnie, operacje za pomocą Szyfru Płotkowego przeprowadza się zwykle na kartce papieru. Litery są zapisywane w taki sposób, że układają się w kształt górnej krawędzi płotu.

Aby zaszyfrować wiadomość za pomocą Szyfru Płotkowego, litery tekstu jawnego należy zapisać zygzakiem, posuwając się na przemian w dół i w górę, pomiędzy najwyższym i najniższym poziomem schematycznego drewnianego płotku. Litery układają się w kształt, który odwzorowuje uproszczoną górną krawędź takiego płotu.

Następnie należy odczytać zapisane litery kolejno wierszami i zapisać w jednej linii, tworząc w ten sposób szyfrogram szyfrowanej wiadomości. Wiersze są zwykle czytane w kolejności od górnego do dolnego.

Klucz sekretny jest liczbą określającą ilość poziomów ogrodzenia, co z kolei przekłada się na ilość wierszy tekstu, które tworzone są podczas szyfrowania. Liczba ta nie może być zbyt duża, więc ilość wszystkich możliwych kluczy jest dość ograniczona.

Przykładowo, prześledźmy proces szyfrowania nazwy jednego ze znanych nam krajów europejskich: Rzeczpospolita Polska. Przyjmijmy klucz sekretny równy 3. Oznacza to, że w czasie szyfrowania otrzymamy trzy poziomy ogrodzenia.

Pierwszym krokiem jest usunięcie odstępów pomiędzy wyrazami, ponieważ szyfr będzie operować jedynie na wielkich literach:

RZECZPOSPOLITAPOLSKA

W kolejnym kroku algorytmu szyfrowania litery tekstu jawnego są zapisywane na schematycznym ogrodzeniu, z trzema poziomami. Układają się na kształt drewnianego płotku:

R...Z...P...T...L...
.Z.C.P.S.O.I.A.O.S.A
..E...O...L...P...K.

Następnie, litery powinny zostać odczytane wierszami, startując od najwyższego. Litery z kolejnych wierszy dopisywane są na końcu tworzonego szyfrogramu. Po zakończeniu szyfrowania powyższej wiadomości, otrzyma się następujący zakodowany tekst:

RZPTLZCPSOIAOSAEOLPK

W celu odszyfrowania wiadomości, odbiorca musi posłużyć się sekretnym kluczem, który określa na ile poziomów podzielono oryginalną wiadomość. Znając ilość wierszy oraz długość szyfrogramu, jest możliwe odtworzenie siatki schematycznego ogrodzenia i wypełnienie jej literami w poprawny (czyli taki, jakiego użył wcześniej nadawca) sposób.

Siła Szyfru Płotkowego

Szyfrogramy tworzone przez szyfry przestawieniowe są stosunkowo proste do rozpoznania. Zastosowanie analizy statystycznej szyfrogramu pozwala stwierdzić, że litery występują w nim w takiej samej częstotliwości, jak w niezaszyfrowanych tekstach w tym samym języku.

Z powodu stosunkowo niewielkiej liczby wszystkich możliwych kluczy, Szyfr Płotkowy może być złamany stosunkowo szybko przy użyciu ataków siłowych. Napastnik powinien w tym celu spróbować odszyfrować wiadomość z wykorzystaniem wszystkich praktycznie możliwych do użycia kluczy.

Funkcja szyfrująca w Szyfrze Płotkowym przeprowadza dwie główne operacje. Po pierwsze, litery wiadomości są zapisywane w tabeli, która reprezentuje płotek. Następnie, wszystkie zapisane litery są odczytywane z tabeli wierszami, z góry do dołu.

Poniżej przedstawiono funkcję JavaScript, która szyfruje dostarczony ciąg znaków i zwraca utworzony szyfrogram. Parametr iloscWierszy zależy od wartości sekretnego klucza:

function szyfruj(tekstJawny, iloscWierszy) {
  var szyfrogram = '';

  var tabelaPlotek = [];
  for (var poz = 0; poz < iloscWierszy; ++poz) {
    tabelaPlotek[poz] = [];
  }

  // Najpierw, wpisz litery do tabeli:

  var r = 0;
  var kierunek = 1;

  for (var c = 0; c < tekstJawny.length; ++c) {
    tabelaPlotek[r].push(tekstJawny[c]);

    if (((r == iloscWierszy - 1) && (kierunek == 1)) ||
        ((r == 0) && (kierunek == -1))) {
      kierunek = -kierunek;
    }

    r = r + kierunek;
  }

  // Następnie, odczytaj szyfrogram wierszami:

  var wiersz = 0;
  while (wiersz < iloscWierszy) {
    for (var poz = 0; poz < tabelaPlotek[wiersz].length; ++poz) {
      szyfrogram = szyfrogram.concat(tabelaPlotek[wiersz][poz]);
    }
    ++wiersz;
  }

  return szyfrogram;
}

Działanie Szyfru Płotkowego można wyprobować online na stronie Crypto-Online.