Szyfry przestawieniowe — płotek i kolumny

🎯 Po co Ci to?

Cezar podmieniał litery, zostawiając je na miejscach. Można dokładnie odwrotnie: litery zostawić w spokoju, ale wymieszać ich kolejność — według przepisu, który zna tylko odbiorca. Spartanie robili to 2500 lat temu, owijając pasek skóry wokół drewnianego kija (skytale): tekst pisany wzdłuż kija, czytany po odwinięciu, stawał się bełkotem — chyba że miałeś kij o właściwej średnicy. Szyfry przestawieniowe to druga wielka rodzina szyfrów klasycznych; ich zaskakująco bliskim krewnym jest… anagram z jednostki 5.1. A ich analiza nauczy Cię myśleć o szyfrogramie jak detektyw: co zdradza, a co ukrywa.

✅ Czego się nauczysz

Po tej jednostce potrafisz:

  • zaszyfrować i odszyfrować tekst szyfrem płotkowym i kolumnowym (z kluczem);
  • zapisać oba jako operacje na indeksach — i zaprogramować je;
  • porównać podstawienie z przestawieniem: co każda rodzina zdradza przeciwnikowi.

📘 Wyjaśnienie

Szyfr płotkowy. Pisz tekst zygzakiem na dwóch (lub więcej) „szynach", a potem odczytaj szyny po kolei:

tekst: DO ZOBACZENIA JUTRO   (bez spacji: DOZOBACZENIAJUTRO)

szyna 1:  D   Z   B   C   E   I   J   T   O      (pozycje parzyste)
szyna 2:    O   O   A   Z   N   A   U   R        (pozycje nieparzyste)

szyfrogram: DZBCEIJTO OOAZNAUR  →  DZBCEIJTOOOAZNAUR

W kodzie dwuszynowy płotek to dwie zbiórki po indeksach: tekst[0::2] + tekst[1::2] (co drugi znak od zerowego, potem co drugi od pierwszego — zapis [start::krok] to wygodny skrót Pythona; wolno Ci też zwykłą pętlą z if i % 2 == 0). Deszyfrowanie: potnij szyfrogram z powrotem na szyny (pierwsza połowa — zaokrąglona w górę! — to szyna 1) i sklejaj na przemian.

Szyfr kolumnowy. Dojrzalsza wersja tej samej idei — z prawdziwym kluczem. Wpisz tekst wierszami do tabeli o tylu kolumnach, ile liter ma klucz; potem odczytaj kolumnami — w kolejności wyznaczonej przez alfabetyczny porządek liter klucza:

klucz:    K O T        kolejność czytania kolumn: K=1, O=2, T=3
          ─────
tekst:    D O Z        (DOZOBACZENIAJUTRO wierszami, po 3 znaki)
          O B A
          C Z E
          N I A
          J U T
          R O ␣        (ostatnie pole puste — tekst się skończył)

szyfrogram: kolumna K: DOCNJR, kolumna O: OBZIUO, kolumna T: ZAEAT
            → DOCNJROBZIUOZAEAT

Klucz „TOK" dałby inną kolejność kolumn (O=1? nie: K<O<T zawsze — ale litery klucza stoją w innych kolumnach!) — i inny szyfrogram. Liczba kluczy rośnie z liczbą kolumn jak silnia (permutacje kolumn): 8 kolumn to $8! = 40,320$ ustawień, 15 kolumn — ponad bilion. To już nie 25 Cezara — atak siłowy ołówkiem odpada, choć komputerowi wciąż niestraszny.

💭 Pomyśl: Przechwyciłeś dwa szyfrogramy tej samej wiadomości: jeden po Cezarze, drugi po szyfrze kolumnowym. Nie znasz kluczy. Co możesz powiedzieć o literach oryginału w każdym przypadku? Która rodzina szyfrów „przecieka" bardziej?

Sprawdź odpowiedź

Przestawienie nie zmienia liter — szyfrogram kolumnowy ma dokładnie te same litery co oryginał, z tymi samymi licznościami (to sprawdzisz… testem anagramowości z 5.1!). Zdradza więc wszystko o „czym pisano" na poziomie liter: język (polskie proporcje a/i/e/o), długość, a nawet obecność rzadkich liter jak ź. Podstawienie (Cezar) zmienia litery, ale zachowuje strukturę częstości — najczęstsza litera szyfrogramu odpowiada najczęstszej literze języka. Obie rodziny przeciekają, każda inaczej — i właśnie te przecieki wykorzystuje łamacz (jednostka 5.5). Dopiero złożenie obu operacji naraz, wielokrotnie — tak działają szyfry współczesne — zamyka oba kanały.

🧮 Prześledź

Zaszyfruj kolumnowo słowo LEGIONYCEZARA kluczem „RZYM" (4 kolumny; kolejność alfabetyczna liter klucza: M, R, Y, Z). Narysuj tabelę i wypisz szyfrogram.

Sprawdź odpowiedź

Tabela wierszami (13 znaków, 4 kolumny — ostatni wiersz niepełny):

R Z Y M
─────────
L E G I
O N Y C
E Z A R
A ␣ ␣ ␣

Czytanie: M (kol. 4): ICR; R (kol. 1): LOEA; Y (kol. 3): GYA; Z (kol. 2): ENZ → ICRLOEAGYAENZ. Niepełny ostatni wiersz to brzeg z zębami: przy deszyfrowaniu trzeba wyliczyć, które kolumny są krótsze (tu: wszystkie poza pierwszą), zanim się je potnie — spróbuj, a docenisz, czemu praktycy dopełniali tekst do pełnej tabeli znakami-wypełniaczami (X).

⚠️ Uwaga, pułapka

Deszyfrowanie kolumnowego to najczęstsze miejsce błędów o jeden w tym dziale: przy $n$ znakach i $k$ kolumnach pierwszych $n \bmod k$ kolumn (w kolejności wpisywania, nie czytania!) jest dłuższych o jeden znak. Pomylisz długości — wszystkie litery od pewnego miejsca „przesuwają się" i wychodzi bełkot podobny do prawdy. Rada praktyczna: zanim potniesz szyfrogram, narysuj pustą tabelę i oznacz, które pola są zajęte. Kartka przed kodem — jak zawsze.

🌍 Powiązania

Szyfr przestawieniowy to kontrolowany anagram (5.1) — a wpisywanie wierszami i czytanie kolumnami spotkasz ponownie w zupełnie pokojowej roli: tak właśnie transponuje się tabele danych (dział 11) i obraca obrazy o 90 stopni (wiersze pikseli stają się kolumnami — dział 2.5 wie, że obraz to tabela). Jeden ruch indeksowy, trzy zastosowania. Skytale zaś doczekała się pomnika: to od niej pochodzi słowo „szyfr transpozycyjny" w połowie języków świata.

🛠️ Teraz Ty

Bez komputera: zaszyfruj płotkiem (2 szyny) swoje imię i nazwisko (bez spacji), a potem odszyfruj wynik kolegi. Z komputerem: napisz kolumnowy_szyfruj(tekst, klucz) — tabelę zrób listą wierszy (napisy), kolejność kolumn wyznacz sortując pary (litera klucza, numer kolumny). Przetestuj na przykładzie z 🧮 (musi wyjść ICRLOEAGYAENZ).

📐 Definicje tej lekcji

  • Szyfr przestawieniowy — zmiana kolejności znaków według przepisu-klucza; litery i ich liczności zostają.
  • Szyfr płotkowy — znaki rozdzielone na szyny (co $k$-ty), szyny sklejone po kolei.
  • Szyfr kolumnowy — tekst wpisany wierszami do tabeli, czytany kolumnami w porządku alfabetycznym liter klucza; kluczy tyle, ile permutacji kolumn.

📌 Najważniejsze w pigułce

  • Podstawienie zmienia litery, przestawienie — miejsca; każda rodzina co innego zdradza łamaczowi.
  • Kolumnowy: wpisuj wierszami, czytaj kolumnami wg klucza; diabeł mieszka w niepełnym ostatnim wierszu.
  • Współczesne szyfry składają obie operacje wielokrotnie — pojedyncza, choćby sprytna, zawsze przecieka.

🎒 Zadania

  1. Odszyfruj płotkowy (2 szyny) szyfrogram „IFRAYAETUENOMTKJSSPR". Policz najpierw: ile znaków ma szyna 1, a ile szyna 2?
Wskazówka i odpowiedź

20 znaków: szyny po 10. Szyna 1 = IFRAYAETUE, szyna 2 = NOMTKJSSPR. Przeplot (1-2-1-2…): I-N, F-O, R-M, A-T, Y-K, A-J, E-S, T-S, U-P, E-R → INFORMATYKAJESTSUPER. Trudność zaczyna się przy długości nieparzystej: dla 21 znaków szyna 1 ma 11 znaków ($\lceil 21/2 \rceil$), nie 10 — potnij źle, a wszystkie litery od połowy „przesuną się" o jeden i wyjdzie bełkot. Zanim potniesz, zawsze policz.

  1. Ile jest kluczy szyfru kolumnowego o 6 kolumnach? A ilu bitom to odpowiada? Porównaj z Cezarem i z „przyzwoitym" minimum współczesnym (128 bitów).
Wskazówka i odpowiedź

$6! = 720$ permutacji ≈ $2^{9{,}5}$ — niecałe 10 bitów. Lepiej niż 4,6 bita Cezara, ale od 128 bitów dzieli to przepaść $2^{118}$: komputer sprawdzający miliard kluczy na sekundę przejrzy 720 w mikrosekundę. Wniosek liczbowy: klucze muszą rosnąć wykładniczo (długość!), nie przez dokładanie kolumn — 20 kolumn to wciąż tylko 61 bitów, a tabela robi się niepraktyczna.

  1. Połącz szyfry: tekst najpierw zaszyfruj Cezarem ($k=3$), wynik — kolumnowo (klucz „ABC", czyli kolejność naturalna — celowo trywialna). Czy kolejność złożenia (najpierw Cezar czy najpierw kolumny) zmienia wynik? Sprawdź na „KOTY".
Wskazówka i odpowiedź

„KOTY" → Cezar: „NRWB"; kolumnowo 3 kolumny wierszami: N R W / B — czytanie kolumn: NB, R, W → „NBRW". W drugiej kolejności: „KOTY" kolumnowo → K Y? — tabela: KOT/Y → kolumny: KY, O, T → „KYOT"; Cezar: „NBRW"... policz: K→N, Y→B, O→R, T→W — „NBRW". Ten sam wynik! Przypadek? Nie: podstawienie działa na wartościach liter, przestawienie na pozycjach — operacje dotyczą różnych „współrzędnych" znaku i są przemienne. Głęboka obserwacja: dlatego właśnie składanie samych podstawień i przestawień w dowolnej kolejności nie daje nic ponad „jedno podstawienie + jedno przestawienie" — a szyfry współczesne muszą między rundami mieszać wartości z pozycjami, żeby złożenie naprawdę gęstniało.

🔍 Sprawdź, czy umiesz

  • Zaszyfrować i odszyfrować płotkiem, poprawnie dzieląc szyfrogram na szyny.
  • Przeprowadzić szyfr kolumnowy z kluczem-słowem na kartce, z niepełnym wierszem.
  • Wyjaśnić, co przestawienie zdradza przeciwnikowi, a co ukrywa.

Ucz się tej jednostki z asystentem