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
- 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.
- 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.
- 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.