1/55
Szyfrowanie konwencjonalne – techniki klasyczne
Cel slajdu: Slajd wprowadza w tematykę szyfrowania konwencjonalnego i zapowiada przegląd technik klasycznych.

Kryptologia i bezpieczna wymiana informacji

Część 2 – Szyfrowanie konwencjonalne: techniki klasyczne

Szyfrowanie konwencjonalne (ang. conventional encryption): Jest to symetryczna metoda ochrony informacji, w której nadawca i odbiorca posługują się tym samym tajnym kluczem do szyfrowania i odszyfrowywania. Obejmuje ona klasyczne techniki podstawieniowe i przestawieniowe, stanowiące historyczny fundament współczesnej kryptografii. Zrozumienie tych technik pozwala wyrobić intuicję dotyczącą permutacji, analizy statystycznej i roli klucza w nowoczesnych algorytmach.
2/55
Spis treści części 2
Cel slajdu: Slajd przedstawia spis treści części drugiej, porządkujący drogę od szyfrów prostych po maszynowe.

Plan materiału

Spis treści (ang. table of contents): Jest to uporządkowany plan części drugiej, prowadzący od modelu szyfrowania symetrycznego przez szyfry monoalfabetyczne i polialfabetyczne aż po maszyny szyfrujące i szyfr jednorazowy. Układa materiał w logiczny ciąg od pojedynczych liter do złożonych systemów mechanicznych i pojęć Shannona. Śledzenie tego planu ułatwia dostrzeżenie powiązań między technikami oraz zaplanowanie ćwiczeń ręcznych i programistycznych.
3/55
Cele i zakres
Cel slajdu: Slajd określa cele i zakres części, czyli wiedzę i umiejętności zdobywane przy szyfrach klasycznych.

Zakres opanowanych zagadnień

  • Zagrożenia: rozumie, dlaczego techniki klasyczne nie zabezpieczają współczesnej komunikacji i jakie ryzyko niosą (podatność na kryptoanalizę).
  • Dobór techniki: świadomie odróżnia podstawienie od przestawienia, mono- od polialfabetycznych; wie, kiedy techniki klasyczne nie są odpowiednie.
  • Kryptoanaliza: łamie szyfry Cezara, Vigenère’a i transpozycje metodami kryptoanalizy (brute force, analiza częstotliwości, metoda Kasiskiego, indeks zbieżności).
Opanowanie tej części pozwala posługiwać się narzędziami (Python, CrypTool) do szyfrowania i łamania szyfrów klasycznych.
Cele i zakres kształcenia (ang. learning objectives and scope): Jest to zestaw wiedzy i umiejętności zdobywanych przy szyfrach klasycznych, obejmujący rozumienie zagrożeń, dobór techniki oraz kryptoanalizę. Wymaga on nie tylko zapamiętania definicji, lecz także praktycznego łamania szyfrów Cezara, Vigenère’a i transpozycji metodami siłową i statystyczną. Opanowanie tego zakresu pozwala posługiwać się narzędziami takimi jak Python i CrypTool do szyfrowania i analizy.
4/55
Model szyfrowania konwencjonalnego
Cel slajdu: Slajd wyjaśnia model szyfrowania konwencjonalnego z jednym wspólnym kluczem tajnym obu stron.

Schemat szyfrowania symetrycznego

W kryptografii konwencjonalnej (symetrycznej) obie strony używają tego samego klucza:

TEKST JAWNY → [szyfrowanie (algorytm+klucz)] → SZYFROGRAM SZYFROGRAM → [odszyfrowywanie (algorytm+klucz)] → TEKST JAWNY
  • Symetria procesu: ten sam klucz po obu stronach (szyfrowanie i odszyfrowywanie są wzajemnie odwrotne).
  • Wymagania bezpiecznej komunikacji symetrycznej:
    • silny algorytm (bezpieczny, publicznie zweryfikowany),
    • tajny, losowy klucz znany tylko zaufanym stronom,
    • bezpieczny kanał dystrybucji klucza (najtrudniejszy problem – rozwiązuje go kryptografia asymetryczna, patrz część 4).
Model szyfrowania konwencjonalnego (ang. conventional encryption model): Jest to schemat, w którym tekst jawny jest przekształcany w szyfrogram przy użyciu jawnego algorytmu i tajnego wspólnego klucza, a odszyfrowanie jest operacją odwrotną z tym samym kluczem. Jego bezpieczeństwo wynika wyłącznie z poufności i losowości klucza, a nie z tajności samej procedury. Najtrudniejszym problemem tego modelu jest bezpieczna dystrybucja klucza, którą rozwiązuje dopiero kryptografia asymetryczna.
5/55
Klasyfikacja technik klasycznych
Cel slajdu: Slajd porządkuje klasyfikację technik klasycznych na podstawieniowe i przestawieniowe, mono- i polialfabetyczne.

Podział szyfrów klasycznych

  • Podstawieniowe (substitution) – litery tekstu jawnego są zastępowane innymi literami bądź znakami. W zależności od liczby alfabetów:
    • monoalfabetyczne – jeden stały klucz podstawień dla całego tekstu (Cezar, AtBash, afiniczny, dowolna permutacja); słabość: każda litera zawsze szyfruje się tak samo, więc rozkład częstotliwości pozostaje widoczny;
    • polialfabetyczne – wiele alfabetów, dobieranych wg pozycji lub klucza (Vigenère, Enigma); podstawienie digramów: Playfair, w którym jednostką szyfrowania jest para liter; ta sama litera tekstu jawnego może dać różne litery szyfrogramu.
  • Przestawieniowe (transposition) – zmiana kolejności liter, bez zmiany ich tożsamości (transpozycja kolumnowa, szablony, rail fence, route); litery pozostają te same, więc nie zmienia się rozkład ich częstotliwości.

Przegląd historyczny: skytale (scytale – przestawienie), Cezar (podstawienie), Vigenère (polialfabetyczne), Enigma (mechaniczne polialfabetyczne).

Klasyfikacja technik klasycznych (ang. classification of classical techniques): Jest to podział szyfrów na podstawieniowe, zmieniające tożsamość liter, oraz przestawieniowe, zmieniające tylko ich kolejność. Szyfry podstawieniowe dzielą się dalej na monoalfabetyczne o jednym stałym alfabecie oraz polialfabetyczne o wielu alfabetach wybieranych według pozycji lub klucza. Klasyfikacja ta przesądza o metodzie kryptoanalizy, ponieważ podstawienie zachowuje rozkład częstotliwości, a przestawienie pozostawia go nienaruszonym.
6/55
Szyfr Cezara – mechanizm
Cel slajdu: Slajd wyjaśnia mechanizm szyfru Cezara jako przesunięcia liter alfabetu o stałą liczbę pozycji.

Przesunięcie o stałą liczbę pozycji

  • Przykład przesunięcia o 3: A→D, B→E, Z→C (koniec alfabetu „zawija się” na jego początek – stąd operacja mod 26).
  • Wzór matematyczny: szyfrogram = (tekst + przesunięcie) mod 26; odszyfrowanie: tekst = (szyfrogram – przesunięcie) mod 26.

Tabela szyfrująca dla przesunięcia 3 (alfabet łaciński):

Tekst:ABCDEXYZ
Szyfr:DEFGHABC
Szyfr Cezara (ang. Caesar cipher): Jest to monoalfabetyczny szyfr podstawieniowy polegający na przesunięciu każdej litery alfabetu o stałą liczbę pozycji, czyli klucz, z zawinięciem po końcu alfabetu według arytmetyki modulo 26. Szyfrowanie opisuje wzór dodawania przesunięcia, a odszyfrowywanie jego odejmowania przy tym samym kluczu. Poprawne działanie wymaga uzgodnienia alfabetu i kodowania znaków, w tym transliteracji polskich liter diakrytycznych.
7/55
Szyfr Cezara – przykłady
Cel slajdu: Slajd ilustruje działanie szyfru Cezara na konkretnych przykładach szyfrowania i deszyfrowania.

Szyfrowanie i deszyfrowanie krok po kroku

Szyfrowanie (przesunięcie 4):

  • TEKST: T A T A → +4: X E X E. T(19)+4=23(X), A(0)+4=4(E).
  • Wynik szyfrogramu: XEXE.

Deszyfrowanie (klucz 4):

  • SZYFROGRAM: X E X E → -4: T A T A. Odszyfrowanie przywraca tekst jawny.

Łamanie szyfru brute force: wystarczy przetestować wszystkie 25 możliwych przesunięć (pomijając klucz 0):

$ for shift in 1..25: deszyfruj NUBSWRJUDILD i sprawdź sensowność
1: MTARVQITCHKC
...
3: KRYPTOGRAFIA  <-- zrozumiały tekst!
...
25: OVCTXSKVEJME
Wnioski: przy zaledwie 25 kluczach atak brute force jest natychmiastowy.
Przykład szyfru Cezara (ang. Caesar cipher example): Jest to krokowa ilustracja szyfrowania i odszyfrowywania polegająca na dodawaniu lub odejmowaniu wartości klucza od numerów liter tekstu. Każda litera jest przetwarzana niezależnie przy stałym kluczu, co widać na przykładzie zamiany słowa TATA przy przesunięciu 4 na XEXE. Łamanie metodą siłową polega na sprawdzeniu wszystkich 25 przesunięć i wybraniu wyniku o naturalnej strukturze językowej.
8/55
Kryptoanaliza szyfru Cezara
Cel slajdu: Slajd pokazuje kryptoanalizę szyfru Cezara poprzez przegląd wszystkich 25 możliwych przesunięć.

Dwie metody złamania szyfru Cezara

  • Brute force: tylko 25 możliwych kluczy (przesunięć). Przeszukanie wszystkich jest natychmiastowe dla komputera i możliwe ręcznie.
  • Analiza częstotliwości: jeżeli w szyfrogramie dominuje konkretna litera, to najpewniej odpowiada ona najczęstszej literze języka (w polskim A, I, E, O...). Różnica pozycji daje klucz. Metoda jest tym pewniejsza, im dłuższy jest szyfrogram.

Porównanie częstotliwości – język polski i angielski:

JęzykNajczęstsze litery (kolejno)
polskiA I E O N R Z S W C Y D
angielskiE T A O I N S H R D L C
Automatyzacja w Pythonie: policz częstotliwości liter, odgadnij najbardziej prawdopodobne przesunięcie, zweryfikuj na tekście.
Kryptoanaliza szyfru Cezara (ang. cryptanalysis of Caesar cipher): Jest to złamanie szyfru przez przeszukiwanie wyczerpujące wszystkich 25 kluczy albo przez wnioskowanie statystyczne z częstotliwości liter. Analiza częstotliwości zakłada, że dominująca litera szyfrogramu odpowiada najczęstszej literze danego języka, czyli na przykład A w polskim lub E w angielskim. Metoda ta jest tym pewniejsza, im dłuższy jest szyfrogram, a każdą hipotezę należy potwierdzić czytelnością całego tekstu.
9/55
Szyfr AtBash
Cel slajdu: Slajd opisuje szyfr AtBash jako odwrócenie alfabetu i przykład szyfru samoodwracalnego.

Lustrzany alfabet

  • Mechanizm: pozycja litery i = 25 – i (dla alfabetu 26-literowego).
  • Występował w kryptografii hebrajskiej (Księga Jeremiasza) i w średniowiecznych tekstach.
  • Klucz jest stały – tylko 1 możliwa konfiguracja, więc szyfr jest trywialny do złamania.
  • Szyfrowanie i odszyfrowywanie są identyczne (operacja jest samoodwracalna – involution).
Przykład: TEKST → GVPHG (T→G, E→V, K→P, S→H, T→G). Dekodowanie GVPHG → TEKST.
Szyfr AtBash (ang. Atbash cipher): Jest to podstawienie lustrzane, w którym litera jest zastępowana literą z drugiego końca alfabetu według zasady A-Z, B-Y i tak dalej. Operacja jest samoodwracalna, więc szyfrowanie i odszyfrowywanie są identyczne, a klucz jest stały i ma tylko jedną możliwą konfigurację. Szyfr ten wywodzi się z kryptografii hebrajskiej i pokazuje, że bez przestrzeni kluczy system jest trywialny do złamania.
10/55
Szyfr afiniczny
Cel slajdu: Slajd wyjaśnia szyfr afiniczny jako uogólnienie Cezara łączące mnożenie i przesunięcie modulo 26.

Mnożenie plus przesunięcie

  • Warunek: a musi być względnie pierwsze z 26 (tzn. gcd(a,26)=1); w przeciwnym razie szyfr nie byłby odwracalny (różne litery mogłyby dać ten sam wynik).
  • Dozwolone wartości a: 1,3,5,7,9,11,15,17,19,21,23,25 (12 wartości) – razem z b (26 wartości) daje 12 × 26 = 312 możliwych kluczy.
  • Odszyfrowywanie: x = a-1(y – b) mod 26, gdzie a-1 to odwrotność a modulo 26.
Przykład (a=5, b=8): K(10)→(5·10+8) mod 26 = 58 mod 26 = 6 = G; A(0)→8 = I; T(19)→(95+8) mod 26 = 103 mod 26 = 25 = Z. Tekst „KAT” szyfruje się do „GIZ”.
Szyfr afiniczny (ang. affine cipher): Jest to uogólnienie szyfru Cezara łączące mnożenie i przesunięcie według wzoru e(x) równa się a razy x plus b modulo 26. Mnożnik a musi być względnie pierwszy z liczbą 26, aby istniała odwrotność modularna i funkcja była odwracalna, co daje łącznie 312 możliwych kluczy. Odszyfrowywanie wymaga użycia odwrotności modularnej współczynnika wyznaczanej na przykład rozszerzonym algorytmem Euklidesa.
11/55
Kryptoanaliza szyfru afinicznego
Cel slajdu: Slajd pokazuje kryptoanalizę szyfru afinicznego poprzez wyznaczenie parametrów z dwóch znanych liter.

Złamanie przez dwie pary liter i analizę częstotliwości

  • Układ równań z dwóch znanych par: wiedząc, że np. w szyfrogramie najczęstsza litera odpowiada najczęstszej literze języka, tworzymy układ równań i wyznaczamy a i b.
  • Przykład krok po kroku: przypuśćmy, że w tekście litery A i K (jawne) szyfrują się do liter I i G (szyfrogram). Z równań rozwiążemy a i b.
  • Analiza częstotliwości: najpierw ustalamy 2 najczęstsze litery szyfrogramu i utożsamiamy je z najczęstszymi literami języka, potem rozwiązujemy układ.
  • Przy tylko 312 kluczach dopuszczalne jest też proste przeszukanie wszystkich kluczy (brute force).
$ python3 -c "
A='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def aff(x,a,b): return (a*x+b)%26
# pary: jawna A->szyfr I, jawna K->szyfr G
# szukaj a,b:
for a in [1,3,5,7,9,11,15,17,19,21,23,25]:
    for b in range(26):
        if aff(0,a,b)==8 and aff(10,a,b)==6: print(a,b)"
5 8
# -> klucz znaleziony: a=5, b=8  (KAT -> GIZ)
Kryptoanaliza szyfru afinicznego (ang. cryptanalysis of affine cipher): Jest to odtworzenie parametrów a i b z dwóch znanych par liter jawnych i zaszyfrowanych poprzez rozwiązanie układu dwóch równań w arytmetyce modularnej. Pary te pozyskuje się zwykle z analizy częstotliwości, utożsamiając najczęstsze litery szyfrogramu z najczęstszymi literami języka. Ze względu na zaledwie 312 kluczy skuteczne jest także proste przeszukiwanie wszystkich możliwości skryptem w Pythonie.
12/55
Szyfry podstawieniowe monoalfabetyczne
Cel slajdu: Slajd charakteryzuje monoalfabetyczne szyfry podstawieniowe ze stałym przypisaniem liter alfabetu.

Dowolna permutacja alfabetu

  • Przestrzeń kluczy: 26! (permutacji) = ok. 4×1026 – astronomicznie dużo dla brute force.
  • Jednak szyfr zachowuje statystyki języka: litera A zawsze jest szyfrowana tak samo, więc częstotliwości tylko się „przemieszczają”.
  • Dzięki temu szyfr jest łatwy do złamania analizą częstotliwości – mimo ogromnej przestrzeni kluczy.
  • To ważna lekcja: duża przestrzeń kluczy sama w sobie nie gwarantuje bezpieczeństwa (struktura tekstu przecieka do szyfrogramu).
Szyfr monoalfabetyczny (ang. monoalphabetic cipher): Jest to system, w którym każda litera alfabetu ma jedno stałe podstawienie zgodne z ustaloną permutacją całego alfabetu. Przestrzeń kluczy wynosi 26 silnia, czyli około 4 razy 10 do potęgi 26, co wyklucza atak siłowy, lecz nie chroni przed statystyką. Ponieważ rozkład częstotliwości jedynie przemieszcza się między literami, szyfr jest łatwo łamany analizą częstotliwości mimo ogromnej liczby kluczy.
13/55
Analiza częstotliwości – teoria
Cel slajdu: Slajd wprowadza teorię analizy częstotliwości jako statystycznej metody łamania podstawień.

Częstotliwości liter, dwuznaków i trójznaków

Wynik analizy obliczono dla reprezentatywnych próbek tekstów:

  • Polski: najczęstsze A, I, E, O, N, R, Z, S, W, C... (kolejność zależy od próbki i normalizacji ogonków).
  • Angielski: najczęstsze E, T, A, O, I, N, S, H, R.

Dwuznaki (digramy) – w polskim np. „cz”, „sz”, „ie”, „en”; w angielskim „th”, „he”, „in”. Trójznaki (trigramy) – pol. „nie”, „prz”, „cie”; ang. „the”, „and”.

Warto zwracać uwagę na powtarzające się sekwencje, bo rozstrzygają one podstawienia, których nie wskazuje sama częstotliwość pojedynczych liter.

Zasada wnioskowania: najczęstsza litera szyfrogramu to najpewniej najczęstsza litera języka; dopasowanie kolejnych liter i n-gramów pozwala odtworzyć podstawienie.
Analiza częstotliwości w teorii (ang. frequency analysis theory): Jest to statystyczna metoda łamania podstawień oparta na stabilnych rozkładach liter, dwuznaków i trójznaków w danym języku. Dla polskiego typowa jest kolejność A, I, E, O, a dla angielskiego E, T, A, O, przy czym wyniki zależą od próbki i normalizacji znaków diakrytycznych. Wnioskowanie polega na hierarchicznym dopasowaniu najpierw liter najczęstszych, potem digramów i trigramów oraz wzorców całych wyrazów.
14/55
Analiza częstotliwości – praktyka
Cel slajdu: Slajd pokazuje praktyczne zastosowanie analizy częstotliwości do odtworzenia tekstu jawnego.

Łamanie szyfru monoalfabetycznego krok po kroku

  1. Policz częstotliwości liter szyfrogramu; wypisz od najczęstszej do najrzadszej.
  2. Przyporządkuj najczęstsze litery szyfrogramu najczęstszym literom języka (A, I, E...).
  3. Użyj wzorców słów: np. wzorzec „ABAB” to „tata” lub „mama”; spójrz na n-gramy i dwuznaki.
  4. Uzupełniaj podstawienie tak, aby powstał sensowny tekst; poprawiaj przy kontradykcjach.
  5. Weryfikacja: pełny odszyfrowany tekst musi być czytelny i spójny językowo.
  6. Przykład powyżej: DKJWZ IKEUQ HOJZTK JLYZBYKR DKJWZVQ LYZEYKRK → KAZDE HASLO TRZEBA ZMIENIAC KAZDEGO MIESIACA (sprawdzone: K=7, Z=5, J=4, Y=4; powtórzony pięcioliterowy fragment DKJWZ wskazuje słowo KAZDE).
$ python3 -c "
from collections import Counter
c='DKJWZ IKEUQ HOJZTK JLYZBYKR DKJWZVQ LYZEYKRK'
print(Counter(c.replace(' ','')).most_common(6))
# [('K',7),('Z',5),('J',4),('Y',4),('D',2),('W',2)]
# K -> 'A', Z -> 'E', J -> 'Z', Y -> 'I' (najczestsze litery polskie)
# fragment DKJWZ wystepuje 2x -> slowo KAZDE; reszta z kontekstu"
Analiza częstotliwości w praktyce (ang. frequency analysis in practice): Jest to krokowa procedura odtworzenia podstawienia poprzez ranking liter szyfrogramu, przypisanie ich najczęstszym literom języka oraz wykorzystanie wzorców słów i n-gramów. Każde przypuszczenie uzupełnia tabelę podstawień i musi współgrać z pozostałymi fragmentami tekstu, a sprzeczności wymagają wycofania błędnej hipotezy. Końcowa weryfikacja polega na odczytaniu pełnego czytelnego tekstu spójnego językowo.
15/55
Szyfry polialfabetyczne – wprowadzenie
Cel slajdu: Slajd wprowadza szyfry polialfabetyczne jako odpowiedź na słabość stałego podstawienia.

Idea: wiele alfabetów podstawieniowych

  • Eliminacja stałych wzorców częstotliwości: statystyki liter zostają „wymieszane”, przez co zwykła analiza częstotliwości zawodzi.
  • Szyfr Vigenère’a – najważniejszy przykład: klucz powtarzany cyklicznie przesuwa litery o wartość klucza (rodzina alfabetów Cezara).
  • Rozwinięcia: maszyny wirnikowe (Enigma). Pokrewny wariant: Playfair – podstawienie digramów, a nie szyfr polialfabetyczny.
Koszt: klucz musi być powtarzany cyklicznie, co tworzy strukturę, którą można wykryć (metoda Kasiskiego, indeks zbieżności).
Szyfr polialfabetyczny (ang. polyalphabetic cipher): Jest to system używający wielu alfabetów podstawieniowych wybieranych według pozycji litery lub klucza, dzięki czemu ta sama litera jawna może dawać różne litery szyfrogramu. Miesza on statystyki liter i unieważnia prostą analizę częstotliwości, czego wzorcowym przykładem jest szyfr Vigenère’a z cyklicznie powtarzanym kluczem. Ceną tej siły jest periodyczna struktura klucza, którą można wykryć metodą Kasiskiego i indeksem zbieżności.
16/55
Szyfr Vigenère’a – mechanizm
Cel slajdu: Slajd wyjaśnia mechanizm szyfru Vigenère’a ze zmieniającym się alfabetem sterowanym słowem kluczowym.

Klucz powtarzany cyklicznie

  • Wzór: szyfrogram_i = (tekst_i + klucz_i) mod 26; odszyfrowanie: tekst_i = (szyfrogram_i – klucz_i) mod 26.
  • Tabula recta (tablica Vigenère’a) – tabela 26 alfabetów przesuniętych, znana już z Polygraphii Tritemiusza (1518); wiersz = litera klucza, kolumna = litera tekstu.
  • Szyfrowanie polega na odczytaniu przecięcia wiersza (klucz) i kolumny (tekst).
  • Przykład interaktywny (boxentriq.com)

Szyfr Vigenère’a (ang. Vigenère cipher): Jest to polialfabetyczny system przesuwający każdą literę o wartość odpowiadającej jej litery klucza, przy czym klucz powtarza się cyklicznie, zgodnie z opisem Bellasa z 1553 roku. Działanie opisuje dodawanie modulo 26 dla szyfrowania i odejmowanie dla odszyfrowywania, a poglądowo przedstawia je tabula recta znana z Polygraphii Tritemiusza. Zrozumienie tego mechanizmu jest niezbędne do wykrywania długości klucza i odtwarzania samego klucza.
17/55
Szyfr Vigenère’a – przykład
Cel slajdu: Slajd ilustruje szyfrowanie Vigenère'em na przykładzie krok po kroku z tabula recta.

Obliczenie szyfrogramu krok po kroku (zweryfikowane)

Tekst jawny: KRYPTOGRAFIAJESTFASCYNUJACA (27 liter), klucz KLUCZ (długość 5).

Tekst:KRYPTOGRAFIAJESTFASCYNUJACA
Klucz:KLUCZKLUCZKLUCZKLUCZKLUCZKL
Szyfr:UCSRSYRLCESLDGRDQUUBIYOLZML

Wynikowy szyfrogram: UCSRSYRLCESLDGRDQUUBIYOLZML

$ python3 -c "
A='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
t='KRYPTOGRAFIAJESTFASCYNUJACA'; k='KLUCZ'
c=''.join(A[(A.index(x)+A.index(k[i%len(k)]))%26] for i,x in enumerate(t))
print(c)"
UCSRSYRLCESLDGRDQUUBIYOLZML
Przykład szyfru Vigenère’a (ang. Vigenère cipher example): Jest to krokowe obliczenie szyfrogramu poprzez dopasowanie kolejnych liter klucza KLUCZ do liter tekstu KRYPTOGRAFIAJESTFASCYNUJACA i sumowanie ich numerów modulo 26. Pokazuje ono, że ta sama litera jawna, na przykład A, szyfruje się na różne litery w zależności od pozycji w cyklu klucza. Porównanie wyniku ręcznego z wynikiem skryptu w Pythonie stanowi wzorcowy test poprawności implementacji kryptograficznej.
18/55
Właściwości i bezpieczeństwo Vigenère’a
Cel slajdu: Slajd omawia właściwości i pozorne bezpieczeństwo Vigenère’a, zwanego niegdyś szyfrem nie do złamania.

Tłumienie statystyk i problemy klucza

  • Tłumienie statystyk częstotliwości: zastosowanie różnych alfabetów powoduje, że najczęstsze litery nie wyróżniają się już jednoznacznie – prosta analiza częstotliwości jest zawodna.
  • Liczba możliwych kluczy dla ustalonej długości: dla klucza długości m każde z m miejsc może przyjąć 26 wartości, więc 26m kluczy – np. 265 ≈ 11,9 mln; po wykryciu długości m problem rozbija się na m niezależnych szyfrów Cezara.
  • Problemy: powtarzalność klucza (struktura cykliczna), krótkie klucze, możliwość odczytania klucza, gdy część tekstu znamy (known-plaintext attack).
  • „Szyfr niezniszczalny” – mit propagowany przez wieki: szyfr uznawano za niemożliwy do złamania aż do XIX wieku (Kasiski 1863, IC Friedman 1920).
Bezpieczeństwo szyfru Vigenère’a (ang. Vigenère security properties): Jest to zestaw właściwości obejmujący tłumienie statystyk jednoliterowych przy jednoczesnej słabości wynikającej z powtarzalności klucza. Dla klucza długości m liczba możliwości wynosi 26 do potęgi m, lecz po wykryciu długości problem rozpada się na m niezależnych szyfrów Cezara. System jest też podatny na atak ze znanym tekstem jawnym, a jego dawna sława szyfru niezniszczalnego upadła w XIX wieku dzięki pracom Kasiskiego i Friedmana.
19/55
Metoda Kasiskiego – wyznaczanie długości klucza
Cel slajdu: Slajd przedstawia metodę Kasiskiego wyznaczania długości klucza z odległości między powtórzeniami.

Friedrich Kasiski (1805–1881; publikacja 1863)

Przykłady na slajdach 19–21 korzystają z pliku szyfrogram.txt, który zawiera szyfrogram zapisany jednym ciągiem liter A–Z: bez spacji, znaków diakrytycznych i podziału na wiersze.
  1. Szukaj w szyfrogramie powtórzeń ciągów kilku liter (np. 3-literowych); im dłuższy powtórzony ciąg, tym mniejsze ryzyko przypadkowej zbieżności.
  2. Oblicz odległości między początkiem powtórzonych fragmentów.
  3. Zlicz, który dzielnik tych odległości pojawia się najczęściej – to najlepszy kandydat na długość klucza.

Dlaczego to działa? Jeżeli ten sam fragment tekstu szyfruje się tym samym fragmentem klucza (klucz powrócił do tej samej pozycji), to szyfrogram pokaże powtórzenie; odległość między powtórzeniami jest wielokrotnością długości klucza. Uwaga: nie licz ślepo NWD wszystkich odległości – jedno przypadkowe powtórzenie o odległości względnie pierwszej z długością klucza (np. 47 przy kluczu 10) obniża NWD do 1. Wariant licznikowy metody Kasiskiego polega właśnie na zliczaniu dzielników.

$ python3 -c "
from collections import Counter
c=open('szyfrogram.txt').read().strip()
pos={}; dist=[]
for i in range(len(c)-2):
    g=c[i:i+3]
    if g in pos: dist.append(i-pos[g])
    else: pos[g]=i
print('powtorzenia:', len(dist))
dz=Counter(m for d in dist for m in range(2,21) if d%m==0)
print('najczestsze dzielniki:', dz.most_common(3))"
# powtorzenia: 80
# najczestsze dzielniki: [(2, 74), (3, 72), (6, 69)]
# male dzielniki sa niejednoznaczne - dlatego patrzymy na odleglosci
# 240=12*20, 120=12*10, 96=12*8  -> dlugosc klucza m=12
Metoda Kasiskiego (ang. Kasiski examination): Jest to technika wyznaczania długości klucza Vigenère’a przez wyszukiwanie powtórzonych ciągów kilku liter w szyfrogramie i mierzenie odległości między nimi. Odległości te są wielokrotnościami długości klucza, gdy ten sam fragment jawny trafił na ten sam fragment klucza, więc najczęstszy dzielnik odległości wskazuje najlepszego kandydata. Nie należy ślepo liczyć największego wspólnego dzielnika wszystkich odległości, gdyż jedno przypadkowe powtórzenie może obniżyć wynik do jedności.
20/55
Test indeksu zbieżności (Index of Coincidence)
Cel slajdu: Slajd wyjaśnia test indeksu zbieżności jako statystyczną miarę potwierdzającą długość klucza.

Definicja i zastosowanie

  • Tekst losowy (równomierny): IC ≈ 0,038.
  • Tekst naturalny: angielski IC ≈ 0,066, polski ≈ 0,048–0,052 (wartość zależy od próbki tekstu).
  • Użycie: sprawdzamy kolejne kandydatki na długość klucza (z metody Kasiskiego). Dla poprawnej długości klucza kolumny (tekst z co m-tej litery) mają rozkład zbliżony do naturalnego, więc IC zbliża się do wartości właściwej dla danego języka; dla błędnej długości IC spada do ok. 0,038.
  • Warunek wiarygodności: test działa dla tekstów od ok. 300–500 znaków. Dla krótszych szyfrogramów wynik jest przypadkowy i nie pozwala odrzucić złych kandydatów.
$ python3 -c "
from collections import Counter
def ic(s):
    n=len(s); t=Counter(s)
    return sum(v*(v-1) for v in t.values())/(n*(n-1))
c=open('szyfrogram.txt').read().strip()
for m in (6,10,12,15):
    print(m, round(sum(ic(c[i::m]) for i in range(m))/m,4))"
# 6 0.0516
# 10 0.0412
# 12 0.0597   <- maksimum: poprawna dlugosc klucza
# 15 0.0471
Indeks zbieżności (ang. index of coincidence): Jest to prawdopodobieństwo, że dwie losowo wybrane litery tekstu są identyczne, obliczane ze zliczeń liter według wzoru z licznikiem n razy n minus 1. Dla tekstu losowego wynosi on około 0,038, dla angielskiego około 0,066, a dla polskiego około 0,048 do 0,052 w zależności od próbki. W kryptoanalizie potwierdza długość klucza, ponieważ przy poprawnym m kolumny co m-tych liter mają rozkład naturalny i wysoki indeks, a przy błędnym rozkład spłaszczony.
21/55
Kryptoanaliza Vigenère’a – kompletna procedura
Cel slajdu: Slajd porządkuje kompletną procedurę kryptoanalizy Vigenère’a od długości klucza po odtworzenie tekstu.

Cztery kroki złamania szyfru Vigenère’a

  1. Wyznacz długość klucza m: metoda Kasiskiego (zliczanie dzielników odległości powtórzeń, nie ślepe NWD) + weryfikacja indeksem zbieżności.
  2. Podziel szyfrogram na m podciągów („kolumn”): do kolumny j trafiają litery na pozycjach j, j+m, j+2m... (każda kolumna jest szyfrem Cezara ze wspólnym przesunięciem).
  3. Dopasuj każdą kolumnę do rozkładu liter języka: dla każdego z 26 przesunięć policz, jak dobrze zliczone litery pasują do oczekiwanych częstotliwości (test chi-kwadrat); przesunięcie z najmniejszą wartością daje literę klucza. Założenie „najczęstsza litera kolumny = A” zawodzi, gdy kolumna ma tylko kilkanaście liter.
  4. Odtwórz klucz i odszyfruj cały tekst; zweryfikuj sensowność.
$ python3 -c "
from collections import Counter
A='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
# częstotliwości liter w tekście polskim (A-Z, w %; wartości zaokrąglone, suma 100,4 - kod normalizuje)
F=[10.3,1.1,5.1,3.1,8.8,0.6,1.3,1.3,7.4,2.3,3.1,3.1,2.6,6.5,8.4,3.2,0.1,5.0,4.6,4.5,2.4,0.1,4.5,0.1,4.5,6.4]
c=open('szyfrogram.txt').read().strip(); m=12
def shift(s):
    n=len(s); t=Counter(s); e=[max(f*n/sum(F),0.5) for f in F]
    return min(range(26), key=lambda k: sum(
        (t.get(A[(A.index(x)+k)%26],0)-p)**2/p for x,p in zip(A,e)))
k=''.join(A[shift(c[i::m])] for i in range(m))
print('klucz:', k)
print('tekst:', ''.join(A[(A.index(x)-A.index(k[i%m]))%26] for i,x in enumerate(c))[:60])
# klucz: TROJSZYKLUCZ
# tekst: DOBRYSZYFRNIEJESTTYLKOKROKIEMWALGORYTMIEKAZDYUZYTKOWNIKPOWIN"
Kryptoanaliza Vigenère’a (ang. cryptanalysis of Vigenère): Jest to czterokrokowa procedura obejmująca wyznaczenie długości klucza metodą Kasiskiego i indeksem zbieżności, podział szyfrogramu na kolumny oraz dopasowanie każdej kolumny do rozkładu języka. Dopasowanie wykonuje się testem chi-kwadrat dla wszystkich 26 przesunięć, co daje kolejne litery klucza, a założenie o najczęstszej literze zawodzi przy krótkich kolumnach. Procedura kończy się odtworzeniem klucza, odszyfrowaniem całości i sprawdzeniem czytelności tekstu.
22/55
Szyfr Playfair – historia
Cel slajdu: Slajd przybliża historię szyfru Playfair jako pierwszego praktycznego szyfru digraficznego.

Wynaleziony przez Wheatstone'a, spopularyzowany przez Playfair

  • Wynaleziony przez Charlesa Wheatstone'a w 1854 r.; nazwa pochodzi od lorda Playfair, który go promował.
  • Szyfruje pary liter (digramy), nie pojedyncze litery – przełom w swojej epoce: utrudnia prostej analizie częstotliwości rozpoznanie pojedynczych liter.
  • Używany przez brytyjskie wojsko podczas I wojny światowej, także na późniejszych teatrach działań (np. w II wojnie światowej).
  • Wprowadza wiele podstawień par, dlatego statystyki jednoliterowe są silnie zniekształcone.
Szyfr Playfair w historii (ang. Playfair cipher history): Jest to pierwszy praktyczny szyfr digraficzny wynaleziony przez Charlesa Wheatstone'a w 1854 roku i spopularyzowany przez lorda Playfaira. Szyfrował on pary liter zamiast pojedynczych znaków, co w swojej epoce silnie utrudniało analizę częstotliwości monogramów. Był używany przez wojsko brytyjskie w czasie pierwszej wojny światowej i stanowi przełom w myśleniu o jednostce szyfrowania.
23/55
Szyfr Playfair – konstrukcja
Cel slajdu: Slajd wyjaśnia konstrukcję szyfru Playfair opartą na kwadracie liter i szyfrowaniu par liter.

Macierz 5×5 i zasady szyfrowania par

  1. Macierz 5×5: wpisuj literę klucza bez powtórzeń, potem pozostałe litery alfabetu (I i J w jednej komórce).
  2. Podziel tekst na pary; jeśli para ma dwie identyczne litery (np. XX), wstaw między nie literę wypełniającą różną od litery powtórzonej (np. XX → XQX, a nie XXX). Jeśli na końcu zostaje samotna litera, dopisz na końcu X.
  3. Zasady szyfrowania pary (a,b):
    • ta sama kolumna: każda litera przesuwa się o jedną pozycję w dół;
    • ten sam wiersz: każda litera przesuwa się w prawo;
    • prostokąt: litera jest zastępowana przez literę w rogu własnego wiersza w kolumnie drugiej litery.
Przykład: klucz „PLAYFAIR”; para „TA” w macierzy daje QF wg zasady prostokąta. Przy odszyfrowywaniu wykonujemy ruchy odwrotne: literę z wiersza bierzemy o jedną pozycję w górę, z kolumny – o jedną w lewo, a dla prostokąta – drugi wierzchołek poziomy.
Konstrukcja szyfru Playfair (ang. Playfair construction): Jest to budowa macierzy 5 na 5 poprzez wpisanie liter klucza bez powtórzeń, a potem pozostałych liter alfabetu przy połączeniu I z J w jednej komórce. Tekst dzieli się na pary różnych liter, rozbijając powtórzenia literą wypełniającą i dopisując ją na końcu przy nieparzystej długości. Szyfrowanie pary zależy od położenia: ten sam wiersz oznacza ruch w prawo, ta sama kolumna ruch w dół, a pozostałe położenia regułę prostokąta.
24/55
Szyfr Playfair – przykłady
Cel slajdu: Slajd ilustruje szyfrowanie Playfair na przykładach z regułami wierszy, kolumn i prostokąta.

Szyfrowanie par i obsługa powtórzeń

Dla macierzy z klucza PLAYFAIR (P L A Y F / I R B C D / E G H K M / N O Q S T / U V W X Z):

  • Para TA: T(3,4), A(0,2) – prostokąt: T→Q (wiersz T, kolumna A), A→F (wiersz A, kolumna T). Wynik: QF.
  • Para AA (ta sama litera): rozbij na AX, wstawiając literę wypełniającą, i szyfruj pary osobno.
  • Para HE: ten sam wiersz (współrzędne liczone od 0, czyli trzeci wiersz): H(2,2)→K, E(2,0)→G. Wynik: KG.
  • Para PI: ta sama kolumna (kol. 0): P(0,0)→I, I(1,0)→E. Wynik: IE.
Zweryfikuj samodzielnie: zasady wiersza, kolumny i prostokąta działają tak samo na dowolnej macierzy – warto przećwiczyć je na przykładzie własnym.
Przykłady szyfru Playfair (ang. Playfair examples): Jest to ilustracja trzech reguł macierzy na kluczu PLAYFAIR, gdzie para TA daje QF według prostokąta, para HE daje KG według wiersza, a para PI daje IE według kolumny. Pary z identycznych liter rozbija się literą wypełniającą i szyfruje osobno, a odszyfrowywanie wykonuje ruchy odwrotne w górę i w lewo. Samodzielne przeliczenie tych par uczy szybkiego lokalizowania liter i weryfikacji krok po kroku.
25/55
Kryptoanaliza Playfair
Cel slajdu: Slajd pokazuje kryptoanalizę Playfair poprzez analizę digrafów i częstotliwości par liter.

Analiza digramów i odtworzenie macierzy

  • Analiza digramów (par): częstotliwość par (digramów) zamiast liter; statystyki par są zróżnicowane, ale nadal przeciekają.
  • Para odwrotna: para XY nigdy nie jest szyfrowana do YX. Dotyczy to wszystkich trzech reguł: w wierszu i w kolumnie przesunięcie jest jednokierunkowe (XY → YZ), a w prostokącie litery zamieniają się kolumnami, nie kolejnością.
  • Odtwarzanie struktury macierzy: wiedząc, które litery muszą być w tych samych wierszach/kolumnach (podstawienia par), układamy macierz krok po kroku.
  • Metody łamania: analiza statystyczna + znane teksty (cribs); znane ataki poprawiające jakość (np. algorytmy przeszukiwania metaheurystycznego).
Playfair nie jest wystarczająco bezpieczny dla współczesnych danych – ma zbyt małą przestrzeń podstawień i daje się złamać komputerowo.
Kryptoanaliza Playfair (ang. Playfair cryptanalysis): Jest to łamanie oparte na analizie częstotliwości par liter, czyli digramów, zamiast pojedynczych znaków. Wykorzystuje ona własność, że para XY nigdy nie szyfruje się do YX, oraz odtwarzanie struktury macierzy z informacji o wspólnych wierszach i kolumnach. Mimo postępu względem szyfrów jednoliterowych system ma zbyt małą przestrzeń i regularne reguły, więc jest łamany komputerowo metodami statystycznymi i metaheurystycznymi.
26/55
Szyfry przestawieniowe (transpozycyjne) – wprowadzenie
Cel slajdu: Slajd wprowadza szyfry przestawieniowe jako zmianę kolejności liter bez zmiany ich tożsamości.

Przestawienie zamiast podstawienia

  • Zasada: ta sama częstotliwość liter co w tekście jawnym (bo to te same litery) – statystyki 1-literowe nie zmieniają się.
  • Efekt: łatwo wykryć, że nie jest to szyfr homofoniczny (statystyki = naturalne), trudniej odróżnić przestawienie od podstawienia i odtworzyć strukturę.
  • Rodzaje: transpozycja prosta (np. odwrócenie), kolumnowa (odczyt wg klucza), szablonowa (grille), szyfr płotowy (rail fence), ścieżki (route).
Szyfr przestawieniowy (ang. transposition cipher): Jest to system zmieniający kolejność liter tekstu przy zachowaniu ich tożsamości, w odróżnieniu od podstawienia zmieniającego same litery. Zachowuje on naturalny rozkład częstotliwości jednoliterowych, co od razu zdradza jego rodzaj, lecz niszczy strukturę wyrazów i utrudnia odtworzenie porządku. Obejmuje transpozycję prostą i kolumnową, szablony, szyfr płotowy oraz szyfry ścieżkowe, a współcześnie stanowi składnik dyfuzji w szyfrach blokowych.
27/55
Transpozycja kolumnowa
Cel slajdu: Slajd wyjaśnia transpozycję kolumnową z zapisem w wierszach i odczytem kolumn według klucza.

Zapis w tabeli, odczyt wg klucza

  1. Wpisz tekst jawny do tabeli o liczbie kolumn równej długości klucza (wiersze uzupełnione, często literami wypełniającymi).
  2. Klucz (np. liczba 3124) określa kolejność odczytu kolumn: czytamy kolumny w kolejności cyfr klucza (dla klucza 3124: kolumna 3, potem 1, potem 2, potem 4).
  3. Odszyfrowanie: zapisujemy szyfrogram z powrotem kolumna po kolumnie, a odczytujemy wierszami.
Przykład (klucz 3124, 4 kolumny; pełna tabela na następnym slajdzie): klucz 3124 oznacza kolejność czytania kolumn: 3,1,2,4 (cyfry klucza = numery porządkowe kolumn).
Transpozycja kolumnowa (ang. columnar transposition): Jest to przestawienie polegające na wpisaniu tekstu wierszami do tabeli o liczbie kolumn równej długości klucza i odczytaniu kolumn w kolejności wyznaczonej permutacją klucza. Odszyfrowywanie odwraca procedurę poprzez zapisanie szyfrogramu kolumnami i odczytanie wierszami po przywróceniu kolejności. Ostatni wiersz uzupełnia się uzgodnionymi literami wypełniającymi, usuwanymi po odszyfrowaniu.
28/55
Transpozycja kolumnowa – przykład
Cel slajdu: Slajd ilustruje transpozycję kolumnową na przykładzie liczbowym krok po kroku.

Pełny przykład szyfrowania i deszyfrowania

Szyfrowanie (tekst jawny: KRYPTOGRAFIAJESTFASCYNUJACA, klucz 3124, 4 kolumny):

kol 1kol 2kol 3kol 4
KRYP
TOGR
AFIA
JEST
FASC
YNUJ
ACAX

Odczyt wg klucza 3124 (kol. 3, potem 1, potem 2, potem 4):

Y G I S S U A   K T A J F Y A   R O F E A N C   P R A T C J X

Szyfrogram: YGISSUAKTAJFYAROFEANCPRATCJX

Przykład transpozycji kolumnowej (ang. columnar transposition example): Jest to pełne szyfrowanie tekstu KRYPTOGRAFIAJESTFASCYNUJACA przy kluczu 3124 poprzez wpisanie do czterech kolumn i odczytanie ich w porządku trzecia, pierwsza, druga i czwarta. Wynikowy szyfrogram YGISSUAKTAJFYAROFEANCPRATCJX zawiera literę wypełniającą X wyrównującą tabelę do pełnych wierszy. Odszyfrowanie polega na ponownym zapisaniu szyfrogramu kolumnami zgodnie z kluczem i odczytaniu wierszami.
29/55
Transpozycja szablonowa (grille)
Cel slajdu: Slajd opisuje transpozycję szablonową z kratką Cardano jako mechanicznym ukrywanie wiadomości.

Szablony z oknami – karta Cardano

  • Przykład historyczny – karta Cardano: szablon z otworami; tajna wiadomość wpisywana przez otwory, pozostałe pola wypełniane tekstem-przykrywką (niewinna treść). To steganografia połączona z transpozycją: bez szablonu czytelnik nie domyśli się ukrytej wiadomości.
  • Szyfrowanie: układanie liter w oknach szablonu wg zadanego klucza (kolejność), następnie obrót szablonu (klucz przesunięcia).
  • Deszyfrowanie: nałożenie szablonu i odczyt liter z okien przy obrotach.
  • Szyfry szablonowe są klasycznym przykładem steganografii i transpozycji równocześnie.
Transpozycja szablonowa (ang. grille cipher): Jest to technika z maską o wyciętych oknach, której obrót i przesunięcie decydują o miejscach zapisu liter tajnej wiadomości. Historycznym przykładem jest karta Cardano, w której tekst wpisywano przez otwory, a pozostałe pola wypełniano tekstem przykrywką dla zmylenia czytelnika. Łączy ona cechy transpozycji i steganografii, ponieważ bez znajomości szablonu ukryta treść pozostaje niewidoczna.
30/55
Szyfr płotowy (rail fence)
Cel slajdu: Slajd wyjaśnia szyfr płotowy jako zapis zygzakiem odczytywany wierszami według liczby poziomów.

Zapis zygzakiem i odczyt liniami

  • 2 tory: tekst rozdziela się na litery parzyste i nieparzyste.
  • 3 tory: tekst przepleciony po trzech ścieżkach daje mocniejsze wymieszanie niż wariant dwutorowy.
  • Przykład (2 tory), tekst: KRYPTOGRAFIAJESTFASCYNUJACA (wyliczone):
tor1 (wierzchołki zigzaga): K Y T G A I J S F S Y U A A
tor2 (dolny rząd):           R P O R F A E T A C N J C
szyfrogram (2 tory):         KYTGAIJSFSYUAARPORFAETACNJC

Siła: prosta, szybka. Słabość: mało kluczy (liczba torów), łatwe do rozpoznania przez anagramowanie i testowanie.

Szyfr płotowy (ang. rail fence cipher): Jest to proste przestawienie zapisujące tekst zygzakiem na n torów i odczytujące szyfrogram tor po torze. W wariancie dwutorowym sprowadza się ono do rozdzielenia liter parzystych i nieparzystych, a w wariancie trzytorowym daje silniejsze wymieszanie. Kluczem jest liczba torów, więc przestrzeń kluczy jest bardzo mała, a szyfr jest łatwy do rozpoznania przez anagramowanie.
31/55
Kryptoanaliza szyfrów przestawieniowych
Cel slajdu: Slajd pokazuje kryptoanalizę szyfrów przestawieniowych poprzez anagramowanie i analizę długości klucza.

Anagramy, statystyki, przeszukiwanie

  • Częstotliwości liter pozostają naturalne (te same litery!), więc już na wejściu wiemy, że to nie szyfr homofoniczny; odróżnienie przestawienia od podstawienia wymaga dodatkowej analizy, bo podstawienie również zachowuje częstotliwości.
  • Rekonstrukcja struktury tabeli: jeżeli znamy liczbę kolumn/torów, wiemy, gdzie kończą się wiersze – układamy szyfrogram z powrotem i szukamy czytelnych wierszy.
  • Zadania anagramowe: sprawdzanie przestawień bloków (kolumn, torów) aż do uzyskania sensownego tekstu.
  • Kombinacje i przeszukiwanie: liczba permutacji torów/klucza jest zwykle niewielka – służą testy komputerowe wszystkich możliwości (dla małych kluczy).
Wskazówka: w transpozycji kolumnowej długość bloku = długość klucza; dzieląc szyfrogram na bloki tej długości i porządkując wg klucza, odzyskujemy tekst.
Kryptoanaliza szyfrów przestawieniowych (ang. cryptanalysis of transposition ciphers): Jest to odtwarzanie pierwotnej kolejności poprzez anagramowanie bloków, rekonstrukcję struktury tabeli oraz przeszukiwanie permutacji klucza. Rozpoczyna się od rozpoznania naturalnego rozkładu liter, który wyklucza szyfr homofoniczny, a następnie dzieli szyfrogram według znanej liczby kolumn lub torów. Dla małych kluczy skuteczne jest komputerowe sprawdzenie wszystkich możliwości z oceną zgodności wyniku ze słownikiem.
32/55
Szyfr ścieżkowy (Route)
Cel slajdu: Slajd opisuje szyfr ścieżkowy jako odczyt macierzy liter według ustalonej trasy i punktu startu.

Szyfrowanie według ścieżki po siatce

  • Przykłady ścieżek: spirala od środka, spirala od rogu, zygzak, kolumnami i wierszami, diagonalnie.
  • Zmienność ścieżek jako klucza: wystarczy umowa co do obu porządków zapisu i odczytu.
  • Przykład praktyczny: wpisujemy tekst wierszami do siatki 4×5, odczytujemy spiralą od lewego górnego rogu.
Szyfr ścieżkowy (ang. route cipher): Jest to przestawienie wpisujące tekst do siatki jednym porządkiem i odczytujące go inną ścieżką, która stanowi klucz wraz z punktem startu. Typowe ścieżki to spirala od środka lub od rogu, zygzak, odczyt kolumnami, wierszami albo diagonalnie. Złamanie wymaga wyobrażenia przepływu danych w siatce oraz systematycznego odtworzenia wymiarów i przebiegu trasy.
33/55
Wprowadzenie do maszyn szyfrujących
Cel slajdu: Slajd wprowadza maszyny szyfrujące jako odpowiedź na powolność i błędy szyfrowania ręcznego.

Od technik ręcznych do mechanizacji

  • Motywacja: szyfry ręczne są wolne i podatne na błędy; potrzeba szyfrowania dużych wolumenów depesz wojskowych i dyplomatycznych wymusiła maszyny.
  • Enigma – szczyt inżynierii kryptograficznej epoki mechanicznej: elektromechaniczna maszyna wirnikowa, przenośna, używana w latach 30. i 40. XX w.
  • Budowa i zasada działania: klawiatura → prąd przechodzi przez łącznicę (plugboard), wirniki, reflektor i wraca – każda litera daje inne podstawienie.
  • Rotory jako zamienniki podstawień: każdy wirnik realizuje permutację; obrót wirników po każdej literze tworzy polialfabetyczne podstawienie.
Maszyny szyfrujące (ang. cipher machines): Jest to klasa elektromechanicznych urządzeń automatyzujących szyfrowanie, powstała z potrzeby szybkiej i bezbłędnej obsługi dużych wolumenów depesz wojskowych i dyplomatycznych. Najsłynniejszym przykładem jest Enigma, w której prąd przechodził przez łącznicę, wirniki i reflektor, a obrót wirników tworzył długookresowe podstawienie polialfabetyczne. Historia tych maszyn uczy, że o bezpieczeństwie decydują nie tylko matematyka, lecz także procedury obsługi i zarządzanie kluczami.
34/55
Enigma – szczegóły działania
Cel slajdu: Slajd wyjaśnia szczegóły działania Enigmy: wirniki, reflektor i łącznicę zwielokrotniające liczbę ustawień.

Wirniki, reflektor, łącznica

  • Łącznica (plugboard): zamiana par liter przed i po przejściu przez wirniki; ogromnie zwiększa przestrzeń kluczy (ok. 1011 kombinacji z 6 kablami; ok. 1,5×1014 z 10 kablami).
  • Wirniki (rotory): w wersji wojskowej (Enigma I, armia i lotnictwo) pracowały 3 wirniki wybierane z 3 dostępnych do 1938 r., z 5 od grudnia 1938 r., z 8 od 1942 r. (wersja morska M4); wersja morska M3 miała 3 wirniki z 8, a M4 (od 1942 r.) – 4 wirniki, przy czym dodatkowy, cienki wirnik ustawia się ręcznie i on nie przeskakuje. Stan po naciśnięciu: pierwszy wirnik obraca się o 1 pozycję, kolejne wg mechanizmu zapadkowego.
  • Reflektor: posyła prąd z powrotem przez wirniki – dzięki temu ta operacja jest samoodwracalna (szyfrowanie = deszyfrowanie).
  • Brak samokalibracji: klucz dzienny (ustawienia wirników, łącznicy, pierścieni) ustala się w księdze kluczy; po każdym naciśnięciu stan się zmienia.
  • Przestrzeń do przeszukania: ok. 1,07×1023 ustawień - tyle realnie rozpatrywali kryptolodzy; wartość obejmuje nieznany wybór i kolejność wirników (czynnik 60) oraz czynnik 676 z ustawień pierścieni i znaczników przy 10 kablowitach łącznicy (liczba wszystkich konfiguracji maszyny jest rzędu 3×10114). To wciąż zbyt dużo na brute force w latach 40.
Enigma w szczegółach (ang. Enigma details): Jest to niemiecka maszyna wirnikowa, której działanie opierało się na współdziałaniu łącznicy zamieniającej pary liter, zestawu wirników realizujących permutacje oraz reflektora zapewniającego samoodwracalność. Klucz dzienny obejmował wybór i kolejność wirników, ustawienia pierścieni i połączenia kabli, co dawało praktyczną przestrzeń rzędu 10 do potęgi 23 przy pełnej przestrzeni rzędu 10 do potęgi 114. Obrót pierwszego wirnika po każdym naciśnięciu i mechanizm zapadkowy kolejnych tworzyły polialfabetyczność o bardzo długim okresie.
35/55
Kryptoanaliza Enigmy
Cel slajdu: Slajd przedstawia kryptoanalizę Enigmy od prac polskiego Biura Szyfrów po Bletchley Park.

Polskie i brytyjskie osiągnięcia

  • Marian Rejewski (1932): matematycznie odtworzył wirniki dzięki metodom teorii permutacji i niemieckim procedurom (podwójnie szyfrowany klucz wiadomości).
  • „Bomba” Rejewskiego – urządzenie przeszukujące ustawienia wirników (przełom 1938).
  • Karty perforowane Zygalskiego – zestaw kart wspomagających wyszukiwanie ustawień (przyspieszenie pracy).
  • Bletchley Park i Turing: dalsze prace prowadzone przez kryptologów brytyjskich i amerykańskich; „bomby” elektromechaniczne, analiza sygnałów, złamanie Enigmy na skalę operacyjną.
  • Znaczenie: skrócenie wojny (szacunki: o 2–4 lata), koniec zaufania do „niezniszczalnych” maszyn.
Kryptoanaliza Enigmy (ang. cryptanalysis of Enigma): Jest to złamanie maszyny zapoczątkowane w 1932 roku przez Mariana Rejewskiego metodami teorii permutacji przy wykorzystaniu podwójnie szyfrowanego klucza wiadomości. Narzędziami praktycznymi były bomba kryptologiczna Rejewskiego oraz karty perforowane Zygalskiego do wyszukiwania ustawień wirników. Prace kontynuowano w Bletchley Park pod kierunkiem Turinga na skalę operacyjną, co według szacunków skróciło wojnę o dwa do czterech lat.
36/55
Szyfr jednorazowy (one-time pad, Vernam)
Cel slajdu: Slajd wprowadza szyfr jednorazowy Vernama jako jedyny teoretycznie doskonały system szyfrowania.

Idealna tajność Shannona

  • Wynalazek: Gilbert Vernam (1917) – komercyjny; Joseph Mauborgne (1919) – doprecyzował losowy klucz.
  • Wzór: szyfrogram = tekst XOR klucz (bit po bicie); tekst = szyfrogram XOR klucz.
  • Dowód bezpieczeństwa (Shannon, 1949): OTP posiada perfect secrecy – szyfrogram nie daje żadnej informacji o tekście, o ile klucz jest naprawdę losowy, tak długi jak tekst i używany jednokrotnie.
Szyfr jednorazowy (ang. one-time pad): Jest to szyfr Vernama z 1917 roku doprecyzowany przez Mauborgne'a, używający losowego klucza o długości tekstu i stosowany tylko raz. Działa on według operacji różnicy symetrycznej bit po bicie, a jego idealną tajność udowodnił Shannon w 1949 roku. Warunkiem dowodu jest prawdziwa losowość klucza, jego długość równa wiadomości oraz jednokrotne tajne użycie.
37/55
Właściwości i ograniczenia one-time padu
Cel slajdu: Slajd omawia właściwości i ograniczenia one-time padu, zwłaszcza problem dystrybucji klucza.

Nie do złamania, ale trudny w użyciu

  • Warunki bezpieczeństwa: klucz losowy (z prawdziwego generatora losowego), klucz o długości tekstu, klucz użyty jednokrotnie, klucz utajniony (bezpieczna dystrybucja).
  • Przy naruszeniu choć jednego warunku (np. powtórne użycie klucza) szyfr przestaje zapewniać idealną tajność: dwa szyfrogramy z tego samego klucza dają po XOR-ze różnicę tekstów (tzw. two-time pad, np. sprawa Venony), co umożliwia statystyczne odzyskanie treści. OTP nie zapewnia też integralności ani uwierzytelnienia – do tego potrzebne są MAC lub AEAD.
  • Praktyczne trudności: dystrybucja kluczy (przesłanie „taśmy” klucza tak dużego jak wiadomość), zarządzanie jednorazowymi kluczami.
  • Zastosowania w praktyce: najwyższe szczeble dyplomacji, wybrane kanały rządowe; w użyciach specjalnych, gdy dystrybucja klucza jest możliwa.
OTP pokazuje ograniczenie „matematycznie idealnego” szyfrowania: jego kosztem jest zarządzanie ogromnymi jednorazowymi kluczami – dlatego nie jest szyfrem codziennego użytku.
Właściwości szyfru jednorazowego (ang. one-time pad properties): Jest to zestaw czterech rygorystycznych warunków bezpieczeństwa obejmujących losowość, długość, jednokrotność i tajną dystrybucję klucza. Ponowne użycie klucza tworzy tak zwany two-time pad, w którym różnica szyfrogramów ujawnia różnicę tekstów, co historycznie wykorzystano w sprawie Venony. System nie zapewnia też integralności ani uwierzytelnienia, dlatego w praktyce jest ograniczony do kanałów dyplomatycznych i rządowych o najwyższej poufności.
38/55
Notacja matematyczna szyfrów klasycznych
Cel slajdu: Slajd porządkuje notację matematyczną szyfrów klasycznych: tekst jawny, szyfrogram i operacje modulo.

Modulo, NWD, permutacje, odwrotności

  • Modulo (mod): reszta z dzielenia; w szyfrach „zawijanie” liter: (25 + 1) mod 26 = 0 (Z→A).
  • Największy wspólny dzielnik (NWD): gcd(a,b); dla szyfru afinicznego warunek jest taki, że a musi być względnie pierwsze z 26 (gcd(a, 26) = 1).
  • Odwrotność modularna: a·x ≡ 1 (mod m) – potrzebna do odszyfrowania afinicznego i w kluczach RSA.
  • Permutacje i kombinacje: permutacja alfabetu w szyfrze monoalfabetycznym to 26! ≈ 4×1026 permutacji; współczynnik dwumianowy służy do liczenia kluczy łącznicy Enigmy, a liczba kombinacji z powtórzeniami – do liczenia kluczy transpozycji.
$ python3 -c "
print((25+1)%26)          # 0  (Z->A)
print(pow(3,-1,26))      # 9  (odwrotność 3 mod 26)
print(3*9%26)           # 1  (potwierdzenie)
import math; print(math.gcd(7,26))  # 1 -> a=7 dozwolony"
Notacja matematyczna szyfrów (ang. mathematical notation of ciphers): Jest to zbiór pojęć obejmujący arytmetykę modulo do zawijania liter, największy wspólny dzielnik do oceny odwracalności oraz odwrotność modularną do odszyfrowywania. Obejmuje ona także permutacje i kombinacje do liczenia przestrzeni kluczy, na przykład 26 silnia dla permutacji alfabetu. Opanowanie tych narzędzi w Pythonie przygotowuje do czytania definicji algorytmów współczesnych, w tym klucza publicznego.
39/55
Praca z klasycznymi szyframi – zadania
Cel slajdu: Slajd zachęca do ręcznej pracy z klasycznymi szyframi poprzez zadania szyfrowania i łamania.

Zadania do wykonania

  1. Zaszyfruj tekst „KRYPTOGRAFIA” szyfrem Cezara (przesunięcie 5), a potem odszyfruj go bez klucza metodą częstotliwości. Odpowiedź: PWDUYTLWFKNF.
  2. Zaszyfruj wybrany wyraz szyfrem Vigenère’a (klucz: INFORMATYKA) i zbuduj krótką tablicę szyfrogramu. Przy polskich literach (Ą, Ę, Ł, Ó) najpierw ustal jawną regułę transliteracji na A-Z albo praca na rozszerzonym alfabecie.
  3. Wykonaj transpozycję kolumnową krótkiego zdania (klucz 2413), potem odszyfruj bez klucza metodą anagramową.
  4. Ręczne łamanie: złam szyfrogram Cezara lub Vigenère’a analizą częstotliwości (użyj tekstu dłuższego niż 300 znaków).
Wskazówki: weryfikuj wynik odszyfrowania – tekst docelowy musi być czytelny; zapisuj kroki do notatek.
Zadania z szyfrów klasycznych (ang. classical ciphers exercises): Jest to zestaw ćwiczeń ręcznych obejmujący szyfrowanie szyfrem Cezara, Vigenère’a i transpozycją kolumnową oraz ich łamanie bez klucza. Wymaga on ustalenia jawnej konwencji transliteracji polskich znaków diakrytycznych na alfabet A do Z albo pracy na alfabecie rozszerzonym. Każde rozwiązanie należy zweryfikować czytelnością tekstu docelowego i zapisać kroki w notatkach wraz z analizą błędów.
40/55
Wykorzystanie języka Python do szyfrów klasycznych
Cel slajdu: Slajd pokazuje wykorzystanie Pythona do automatyzacji szyfrowania i analizy klasycznych szyfrów.

Implementacje Cezara, Vigenère’a i analizy częstotliwości

Szyfr Cezara (10 linii):

$ python3 -c "
A='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def cae(t,k): return ''.join(A[(A.index(c)+k)%26] for c in t)
print(cae('KRYPTOGRAFIA',3))  # NUBSWRJUDILD"

Szyfr Vigenère’a (pełna funkcja):

$ python3 -c "
A='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def vig(t,k,dec=False):
    r=''; ki=0
    for c in t:
        p=A.index(c); s=A.index(k[ki%len(k)]); ki+=1
        r+=A[(p-s)%26] if dec else A[(p+s)%26]
    return r
print(vig('KRYPTO','KLUCZ'))  # UCSRSY"

Analiza częstotliwości: licznik Counter, sortowanie liter, wykrywanie najczęstszych liter.

Python do szyfrów klasycznych (ang. Python for classical ciphers): Jest to automatyzacja szyfrowania i analizy przy użyciu krótkich funkcji realizujących dodawanie modulo 26 oraz zliczanie liter licznikiem Counter. Kilkulinijkowe implementacje Cezara i Vigenère’a wiążą wzory matematyczne z działającym kodem i ułatwiają testowanie na zweryfikowanych przykładach. Organizacja kodu w czytelne funkcje z testami chroni przed drobnymi błędami logicznymi i przygotowuje do procedur łamania Vigenère’a.
41/55
Narzędzia do łamania szyfrów klasycznych
Cel slajdu: Slajd przedstawia narzędzia do łamania szyfrów klasycznych, od arkuszy po programy analityczne.

CrypTool, dcode.fr, biblioteki Pythona

  • CrypTool – darmowe narzędzie edukacyjne: CrypTool 2 (następca CrypTool 1, wersja dla Windows) oraz CrypTool-Online, działające w przeglądarce bez instalacji (cryptool.org).
  • Narzędzia online: dcode.fr (katalog szyfrów i automatyczne łamanie), cryptii.com (kreator własnych szyfrów), Rumkin ciphers – szybkie testy interaktywne.
  • Biblioteki Pythona: własne implementacje (najlepsza droga nauki), pycipher – wygodna, ale nieutrzymywana od 2016 r. (wersja 0.5.2, status alpha); pycryptodome dla algorytmów nowoczesnych; collections.Counter do statystyk.
  • Ograniczenia narzędzi automatycznych: wyniki wymagają weryfikacji językowej (język, słownik), niepoprawnie wybrany alfabet/język daje błędne wyniki, szyfry bez jednoznacznego rozwiązania wymagają analizy człowieka.
Narzędzia do łamania szyfrów (ang. tools for breaking ciphers): Jest to przegląd programów graficznych takich jak CrypTool 2 i CrypTool-Online, serwisów internetowych takich jak dcode i cryptii oraz bibliotek Pythona z licznikami statystycznymi. Narzędzia graficzne i przeglądarkowe umożliwiają szybkie testy bez pisania kodu, natomiast własne implementacje dają pełną kontrolę i najlepszą drogę nauki. Wyniki automatyczne zawsze wymagają weryfikacji językowej, ponieważ błędny alfabet lub język prowadzi do fałszywych odszyfrowań.
42/55
Ograniczenia technik klasycznych
Cel slajdu: Slajd wskazuje ograniczenia technik klasycznych: mała przestrzeń klucza i podatność na statystykę języka.

Dlaczego klasyka przegrywa z cyfrowym światem

  • Mała przestrzeń kluczy: Cezar – 25, afiniczny – 312, Vigenère – 26m (ale m z metodą Kasiskiego); klasyczne szyfry z wyjątkiem szyfru jednorazowego nie osiągają poziomu bezpieczeństwa rzędu 2128. Szyfr jednorazowy zapewnia idealną tajność, ale wymaga klucza długości wiadomości i nie działa przy ponownym użyciu klucza.
  • Brak cech dyfuzji i konfuzji: klasyczne szyfry nie mieszają dobrze bitów (konfuzja – zależność bitów wyjścia od wielu bitów wejścia, dyfuzja – zmiana jednego bitu wejścia zmienia wiele bitów wyjścia).
  • Wrażliwość na ataki statystyczne: analiza częstotliwości, n-gramy, znane teksty działają błyskawicznie.
  • Niedopasowanie do nowoczesnej komunikacji: dane binarne, wielkie wolumeny, wymóg silnej kryptograficznej odporności (integralność, uwierzytelnianie) – klasyka nie dostarcza.
Ograniczenia technik klasycznych (ang. limitations of classical techniques): Jest to wyjaśnienie, dlaczego klasyka przegrywa z cyfrowym światem z powodu małych przestrzeni kluczy, braku konfuzji i dyfuzji oraz wrażliwości na ataki statystyczne. Nawet najsilniejsze szyfry ręczne nie osiągają poziomu 2 do potęgi 128, a szyfr jednorazowy jest idealny, lecz niepraktyczny przy kluczach długości wiadomości. Klasyka nie obsługuje też danych binarnych, integralności ani uwierzytelniania wymaganych we współczesnej komunikacji.
43/55
Konfuzja i dyfuzja – teoria Shannona
Cel slajdu: Slajd wprowadza teorię Shannona o konfuzji i dyfuzji jako fundament nowoczesnych szyfrów.

Dwie zasady projektowe Claude'a Shannona

  • Efekt lawinowy (avalanche effect): zmiana 1 bitu danych (lub klucza) zmienia przeciętnie ok. 50% bitów wyjściowych – cecha dobrego szyfru; w najprostszych szyfrach klasycznych zmiana jednej litery zmienia tylko tę jedną literę. Wyjątkiem jest Playfair (jedna litera wpływa na całą parę) oraz szyfry stanowe, np. Enigma, gdzie każde naciśnięcie zmienia stan maszyny.
  • Związek z projektowaniem nowoczesnych szyfrów: DES i AES budowane są przez wiele rund podstawień i permutacji (konfuzja + dyfuzja), aby ukryć statystyki.
  • Dlaczego klasyczne szyfry zawodzą: podstawienie pojedynczej litery daje konfuzję lokalną, ale brak dyfuzji – stąd przeciek statystyk.
Konfuzja i dyfuzja (ang. confusion and diffusion): Jest to para zasad projektowych Shannona stanowiąca fundament nowoczesnych szyfrów blokowych. Konfuzja oznacza złożoną zależność między kluczem a szyfrogramem, a dyfuzja rozprzestrzenianie zmiany jednego bitu wejścia na wiele bitów wyjścia. Ich miarą jest efekt lawinowy, w którym zmiana jednego bitu zmienia około połowy bitów wyjścia, czego klasyczne podstawienia pojedynczych liter nie zapewniają.
44/55
Porównanie technik klasycznych
Cel slajdu: Slajd porównuje techniki klasyczne pod względem przestrzeni klucza, odporności i złożoności.

Tabela porównawcza szyfrów

SzyfrTypPrzestrzeń kluczyOdpornośćMetoda kryptoanalizy
Cezarpodstawienie monoalf.25nikłabrute force / częstotliwości
AtBashpodstawienie monoalf.1zeroodwrotna permutacja
Afinicznypodstawienie monoalf.312nikłaukład równań / brute
Permutacja alfabetupodstawienie monoalf.26!słabaanaliza częstotliwości
Vigenèrepodstawienie poli.26msłabaKasiski + IC + częstotliwość
Playfairpodstawienie par25! (ok. 1,6×1025)słabaanaliza digramów
Rail fenceprzestawienieliczba torów (mała)bardzo słabawzorce zygzaga
Transpozycjaprzestawieniezależna od kluczasłabaanagramy / struktura tabeli
One-time padstrumieniowyqL (np. 26L dla liter)idealna*bezpieczny przy warunkach

Wnioski: podstawienie zachowuje częstotliwości (można łamać statystycznie), przestawienie zmienia porządek (anagramy); OTP idealny, lecz niepraktyczny. Wielkość przestrzeni kluczy nie wystarcza do oceny siły szyfru: 25! Playfaira to ok. 1,6×1025, czyli mniej niż 2128 dla AES-128, a mimo to Playfair daje się złamać analizą digramów – liczy się struktura, nie sam rzut liczby.

Porównanie technik klasycznych (ang. comparison of classical techniques): Jest to tabelaryczne zestawienie szyfrów według typu, przestrzeni kluczy, odporności i metody kryptoanalizy od Cezara po szyfr jednorazowy. Pokazuje ono, że podstawienie zachowuje częstotliwości i jest łamane statystycznie, a przestawienie zmienia porządek i jest łamane anagramami. Głównym wnioskiem jest, że sama wielkość przestrzeni kluczy nie wystarcza, gdyż nawet 25 silnia Playfaira jest łamane analizą digramów.
45/55
Od klasyki do nowoczesności – motywacja
Cel slajdu: Slajd wyjaśnia motywację przejścia od klasyki do nowoczesności: komputery, sieci i standaryzacja.

Czego nauczyły nas szyfry klasyczne

  • Co wynosimy: model szyfrowania, klasyfikacja technik, metody kryptoanalizy (statystyka, częstość), pojęcia konfuzji i dyfuzji, przestrzeń kluczy.
  • Następny krok: szyfry blokowe (DES, AES) i strumieniowe (ChaCha20) – duże bloki, wiele rund, twardsza kryptoanaliza.
  • DES jako następca klasyki: pierwszy „nowoczesny” szyfr blokowy (1977), sieć Feistela, 64-bitowe bloki – wprowadza konfuzję i dyfuzję w praktyce.
  • Zapowiedź części 3: szczegóły DES/3DES, AES, tryby pracy, szyfry strumieniowe i funkcje skrótu.
Klasyka nie zginęła bez śladu: jej terminologia (podstawienie, permutacja, S-box = nietajne podstawienie) żyje w projektowaniu AES.
Od klasyki do nowoczesności (ang. from classical to modern cryptography): Jest to motywacja przejścia do szyfrów blokowych i strumieniowych wynikająca z komputerów, sieci i potrzeby standaryzacji. Z klasyki przejmuje się model szyfrowania, klasyfikację, metody statystyczne oraz pojęcia konfuzji, dyfuzji i przestrzeni kluczy. Bezpośrednim następcą jest DES z 1977 roku z siecią Feistela i blokami 64-bitowymi, a jego terminologia podstawień i permutacji żyje w tablicach S-boksów algorytmu AES.
46/55
Studium przypadku – łamanie szyfru Vigenère’a
Cel slajdu: Slajd przedstawia studium łamania Vigenère’a od wykrycia długości klucza po odczyt wiadomości.

Autentyczny szyfrogram do złamania (krok po kroku)

Szyfrogram: kluczowy warunek to długość – metody statystyczne zawodzą poniżej ok. 300 znaków. Poniższe wyniki pochodzą z poniższego, samowystarczalnego skryptu dla tekstu polskiego długości 878 znaków zaszyfrowanego kluczem 12-literowym. Dane wejściowe czytane są z pliku szyfrogram.txt (jeden ciąg liter A-Z).

  1. Długość klucza: powtórzone trigramy (Kasiski) → kandydat m; potwierdzenie indeksem zbieżności (musi zbliżyć się do wartości dla polskiego, ok. 0,05, a nie do 0,038 jak przy złym m).
  2. Podział na kolumny: tekst c[i], c[i+m], c[i+2m]… dla każdego i=0..m-1.
  3. Częstotliwości kolumn: dopasowanie rozkładu litery metodą chi-kwadrat → przesunięcie → litera klucza.
  4. Odszyfruj i zweryfikuj czytelność tekstu.
$ python3 -c "
from collections import Counter
A='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
F=[10.3,1.1,5.1,3.1,8.8,0.6,1.3,1.3,7.4,2.3,3.1,3.1,2.6,6.5,8.4,3.2,0.1,5.0,4.6,4.5,2.4,0.1,4.5,0.1,4.5,6.4]
c=open('szyfrogram.txt').read().strip()
pos={}; dist=[]
for i in range(len(c)-2):
    g=c[i:i+3]
    if g in pos: dist.append(i-pos[g])
    else: pos[g]=i
dz=Counter(d for d in dist for k in range(2,21) if d%k==0)
print('1. powtorzonych trigramow:',len(dist))
print('2. najczestsze odleglosci:',' '.join('%d (%dx)'%(d,n) for d,n in dz.most_common(3)))
def ic(s):
    n=len(s)
    return sum(v*(v-1) for v in Counter(s).values())/(n*(n-1)) if n>1 else 0
print('3. IC:',' | '.join('m=%d -> %.4f'%(m,sum(ic(c[i::m]) for i in range(m))/m) for m in (6,12,15)))
m=12
def shift(s):
    n=len(s); t=Counter(s); e=[max(f*n/sum(F),0.5) for f in F]
    return min(range(26), key=lambda k: sum((t.get(A[(A.index(x)+k)%26],0)-p)**2/p for x,p in zip(A,e)))
k=''.join(A[shift(c[i::m])] for i in range(m))
print('4. klucz odczytany:',k)
print('5. tekst:',''.join(A[(A.index(x)-A.index(k[i%m]))%26] for i,x in enumerate(c))[:60])"
1. powtorzonych trigramow: 80
2. najczestsze odleglosci: 240 (88x) 96 (70x) 120 (50x)
    # 240=12*20, 120=12*10, 96=12*8  ->  kandydat m=12
3. IC: m=6 -> 0.0516 | m=12 -> 0.0597 | m=15 -> 0.0471
    # maksimum przy m=12  ->  potwierdzone dlugosci klucza
4. klucz odczytany: TROJSZYKLUCZ
5. tekst: DOBRYSZYFRNIEJESTTYLKOKROKIEMWALGORYTMIEKAZDYUZYTKOWNIKPOWIN...
Wniosek: klucz odzyskano w całości, a tekst okazał się czytelny – to jedyny test, który naprawdę potwierdza sukces ataku.
Studium łamania Vigenère’a (ang. Vigenère breaking case study): Jest to kompletny atak krok po kroku na polskim szyfrogramie długości 878 znaków z pliku szyfrogram.txt zaszyfrowanym kluczem 12-literowym. Obejmuje wykrycie długości metodą Kasiskiego, potwierdzenie indeksem zbieżności oraz odtworzenie liter klucza dopasowaniem chi-kwadrat w kolumnach. Jedynym rozstrzygającym potwierdzeniem sukcesu jest odzyskanie pełnego klucza TROJSZYKLUCZ i uzyskanie czytelnego tekstu jawnego.
47/55
Studium przypadku – atak na szyfr Cezara w praktyce
Cel slajdu: Slajd pokazuje praktyczny atak na szyfr Cezara z użyciem przeglądu kluczy i analizy częstotliwości.

Brute force vs analiza częstotliwości

Szyfrogram: NUBSWRJUDILD (przesunięcie 3, tekst jawny KRYPTOGRAFIA).

Metoda 1 – brute force: przetestuj wszystkie 25 przesunięć; tylko jedno daje czytelny tekst.

Metoda 2 – częstotliwości: najczęstsze litery szyfrogramu to U i D (po 2 wystąpienia). W polskim najczęstsza to A/I/E..., ale w tak krótkiej próbce statystyka bywa myląca, a samo U nie wskazuje jednoznacznie klucza. Przy dłuższym tekście litera najczęstsza → przesunięcie → klucz. Dla krótkiego tekstu częstotliwości bywają zawodne – dlatego brute force bywa pewniejszy.

$ python3 -c "
c='NUBSWRJUDILD'; A='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for k in range(1,26):
    d=''.join(A[(A.index(x)-k)%26] for x in c)
    print(k,d)
    # k=3 -> KRYPTOGRAFIA  (czytelny!)"
Atak na Cezara w praktyce (ang. practical attack on Caesar cipher): Jest to porównanie ataku siłowego ze statystycznym na krótkim szyfrogramie NUBSWRJUDILD odpowiadającym tekstowi KRYPTOGRAFIA. Przeszukanie wszystkich 25 przesunięć natychmiast wskazuje klucz 3, natomiast analiza częstotliwości zawodzi, gdyż próbka kilkunastu liter nie odzwierciedla rozkładu języka. Studium to uczy doboru strategii ataku do długości materiału i liczby możliwych kluczy.
48/55
Podsumowanie części 2 – techniki klasyczne
Cel slajdu: Slajd podsumowuje część drugą, utrwalając podział na podstawienia, transpozycje i maszyny.

Przegląd poznanych szyfrów i wnioski

  • Podstawienie: Cezar (przesunięcie), AtBash (lustrzany), afiniczny (mnożenie + przesunięcie), permutacja alfabetu, polialfabetyczny Vigenère oraz podstawienie digramów Playfair.
  • Przestawienie: transpozycja kolumnowa, szablony (Grille/Cardano), rail fence, route.
  • Maszyny i schematy: Enigma (przykład mechanizacji), one-time pad (schemat kryptograficzny – idea idealnej tajności).
  • Kluczowe pojęcia: podstawienie, przestawienie, mono-/polialfabetyczne, konfuzja, dyfuzja, avalanche, przestrzeń kluczy.
  • Metody kryptoanalizy: brute force, analiza częstotliwości, metoda Kasiskiego, indeks zbieżności, anagramy.
  • Wniosek przewodni: klasyka nie sprosta dzisiejszym wymogom; most do nowoczesności prowadzi przez konfuzję i dyfuzję (podstawienie + permutacja) oraz duże przestrzenie kluczy.
Zapowiedź części 3: algorytmy kryptograficzne – DES, AES, szyfry strumieniowe i funkcje skrótu.
Podsumowanie technik klasycznych (ang. summary of classical techniques): Jest to przegląd poznanych podstawień od Cezara przez AtBash i afiniczny po Vigenère’a i Playfaira, przestawień od transpozycji po rail fence oraz maszyn i schematów takich jak Enigma i one-time pad. Utrwala ono kluczowe pojęcia monoalfabetyczności, polialfabetyczności, konfuzji, dyfuzji i przestrzeni kluczy wraz z metodami łamania. Przewodnim wnioskiem jest konieczność przejścia do nowoczesności przez wielorundowe połączenie podstawień z permutacjami.
49/55
Słownik pojęć – techniki klasyczne
Cel slajdu: Slajd systematyzuje słownik pojęć technik klasycznych od tekstu jawnego po indeks zbieżności.

Najważniejsze pojęcia części 2

Szyfr Cezara
podstawieniowy, przesunięcie o stały klucz; 25 kluczy.
Szyfr Vigenère’a
polialfabetyczny, klucz powtarzany; łamany przez Kasiskiego i IC.
Szyfr Playfair
szyfruje pary liter na macierzy 5×5.
Transpozycja
zmiana kolejności liter bez zmiany ich tożsamości.
Rail fence
przestawienie zygzakiem przez n torów.
Monoalfabetyczny
jeden alfabet podstawień dla całego tekstu.
Polialfabetyczny
wiele alfabetów zależnych od pozycji/klucza.
One-time pad
szyfr z losowym, jednorazowym kluczem o długości tekstu; perfect secrecy.
Analiza częstotliwości
wykrywanie podstawień przez statystyki liter.
Metoda Kasiskiego
wyznaczanie długości klucza Vigenère’a: najczęstszy dzielnik odległości powtórzonych trigramów (NWD wszystkich odległości często daje 1).
Indeks zbieżności (IC)
miara naturalności tekstu: 0,038 dla rozkładu losowego, ok. 0,066 dla angielskiego, ok. 0,048–0,052 dla polskiego.
Konfuzja i dyfuzja
zasady Shannona: złożoność związku klucz-szyfrogram i rozpraszanie zmian.
Słownik technik klasycznych (ang. glossary of classical techniques): Jest to systematyzacja najważniejszych haseł od szyfru Cezara i Vigenère’a przez transpozycję po metodę Kasiskiego i indeks zbieżności. Porządkuje ona różnice między podstawieniem a przestawieniem oraz między systemami monoalfabetycznymi a polialfabetycznymi wraz z narzędziami analizy. Układ haseł odpowiada kolejności slajdów, więc słownik służy jako lista kontrolna opanowania materiału.
50/55
Pytania kontrolne – część 2
Cel slajdu: Slajd sprawdza zrozumienie technik klasycznych poprzez pytania od Cezara po one-time pad.

Sprawdź zrozumienie

  1. Zaszyfruj „ALGORYTM” szyfrem Cezara (klucz 5) i odszyfruj wynik.
  2. Dlaczego szyfr monoalfabetyczny z 26! kluczy jest łatwy do złamania?
  3. Wyjaśnij, czym różni się podstawienie mono- od polialfabetycznego na przykładzie Cezara i Vigenère’a.
  4. Na czym polega metoda Kasiskiego i co wyznacza indeks zbieżności?
  5. Zaszyfruj parę liter w szyfrze Playfair, gdy leżą w tym samym wierszu.
  6. Podaj cztery warunki bezpieczeństwa one-time padu i uzasadnij konieczność każdego.
  7. Zadanie praktyczne: przechwycono szyfrogram „VCBIUXMH” (Cezar). Znajdź klucz i tekst jawny.
Odpowiedź do zadania: szyfrogram „VCBIUXMH” przy odszyfrowaniu z przesunięciem o 3 w tył daje „SZYFRUJE” (powstał przez zaszyfrowanie tekstu jawnego przesunięciem o 3 do przodu). Z Q1: „ALGORYTM” z kluczem 5 szyfruje się do „FQLTWDYR”. Z Q6 (OTP): klucz losowy, klucz o długości tekstu, użycie jednorazowe i tajna dystrybucja klucza.
Pytania kontrolne (ang. review questions): Jest to zestaw zadań sprawdzających zrozumienie od szyfrowania Cezarem po warunki bezpieczeństwa szyfru jednorazowego. Obejmuje obliczenia ręczne, wyjaśnianie różnic między systemami oraz praktyczne łamanie krótkich szyfrogramów z weryfikacją wyniku. Przykładowo szyfrogram VCBIUXMH odszyfrowany przesunięciem 3 daje SZYFRUJE, a słowo ALGORYTM przy kluczu 5 daje FQLTWDYR.
51/55
Zadania do samodzielnej pracy – część 2
Cel slajdu: Slajd zadaje pracę samodzielną: szyfrowanie, łamanie i programowanie klasycznych szyfrów.

Praca samodzielna

  1. Złam szyfrogram Vigenère’a: przygotuj szyfrogram długości co najmniej 400 liter (im dłuższy, tym wiarygodniejszy wynik). Wykonaj Kasiskiego, indeks zbieżności i dopasowanie częstotliwości kolumn; zapisz klucz i uzasadnienie.
  2. Implementacja w Pythonie: napisz funkcje szyfrowania/odszyfrowania Vigenère’a oraz funkcję łamania (wyznaczanie długości klucza IC i odtwarzanie klucza). Przetestuj na wygenerowanych tekstach.
  3. Ćwiczenia z CrypTool: zaszyfruj i złam szyfry Cezara, Vigenère’a i transpozycję kolumnową; zapisz raport z obserwacjami.
  4. Opcjonalnie: notatka z opisem metody Kasiskiego i indeksu zbieżności wraz z policzonym przykładem.
Kryteria poprawności: działający kod, odzyskany klucz, czytelny tekst jawny i udokumentowany tok kryptoanalizy (lista kontrolna na slajdzie 54).
Zadania samodzielne (ang. homework assignments): Jest to praca własna obejmująca złamanie szyfrogramu Vigenère’a o długości co najmniej 400 liter, implementację szyfrowania i łamania w Pythonie oraz ćwiczenia z CrypTool. Wymaga ona udokumentowania toku analizy od metody Kasiskiego przez indeks zbieżności po odtworzenie klucza i tekst jawny. Kryteriami poprawności są działający kod, odzyskany klucz, czytelny tekst i opisana lista kontrolna ze slajdu 54.
52/55
Literatura i źródła – część 2
Cel slajdu: Slajd porządkuje literaturę i źródła do pogłębienia wiedzy o szyfrach klasycznych.

Materiały do lektury i ćwiczeń

  • Simon Singh – Księga szyfrów (historia kryptologii, Enigma, metodologia łamania).
  • David Kahn – The Codebreakers – klasyczne kompendium historii kryptografii.
  • William Stallings – Cryptography and Network Security: Principles and Practice (Pearson) – rozdziały o szyfrach klasycznych i analizie.
  • Alfred Menezes i in. – Handbook of Applied Cryptography (rozdz. o szyfrach klasycznych, IC); dostępny bezpłatnie online: cacr.uwaterloo.ca/hac.
  • Christof Paar, Jan Pelzl – Understanding Cryptography (Springer) – rozdziały o szyfrach klasycznych i atakach na nie.
  • Zasoby internetowe: CrypTool i CrypTool-Online (cryptool.org), dcode.fr, cryptii.com, pycipher (PyPI, nieutrzymywany).
  • Artykuły o Enigmie: Biuro Szyfrów – polskie archiwa; British Library – „Polish mathematicians and cracking the Enigma” (bl.uk).
Literatura i źródła (ang. literature and sources): Jest to uporządkowany wykaz książek Singha, Kahna, Stallingsa, Menezesa oraz Paara i Pelzla wraz z zasobami CrypTool, dcode i pycipher. Łączy pozycje historyczno-narracyjne ukazujące kontekst Enigmy z podręcznikami akademickimi o formalnych definicjach i analizie. Uzupełnieniem są archiwa Biura Szyfrów i materiały British Library, przy czym informacje internetowe wymagają krytycznej weryfikacji.
53/55
Materiały do samodzielnej nauki – część 2
Cel slajdu: Slajd wskazuje materiały do samodzielnej nauki: filmy, symulatory i ćwiczenia interaktywne.

Filmy, ćwiczenia interaktywne i wskazówki

  • Filmy i wykłady online: film „The Imitation Game” (2014) o złamaniu Enigmy, wykłady Christofa Paara „Understanding Cryptography”, materiały Khan Academy – cryptography.
  • Ćwiczenia interaktywne: praktyczne szyfrowanie Cezara/Vigenère’a na stronach edukacyjnych (np. cryptii.com, dCode), zadania flagowe (CTF) dla początkujących – klasyczne szyfry.
  • Wskazówki do praktycznej pracy: zawsze sprawdzaj czytelność tekstu; eksperymentuj z różnymi długościami kluczy; przy transpozycji – sprawdzaj liczbę kolumn z klucza.
  • Zapisz w notatkach: 3 przykłady szyfrowania i 3 przebiegi kryptoanalizy z komentarzem.
Materiały do nauki (ang. self-study materials): Jest to wskazanie filmów, wykładów i ćwiczeń interaktywnych wspierających samodzielne opanowanie szyfrów klasycznych. Obejmuje film o złamaniu Enigmy, wykłady z kryptografii, symulatory szyfrowania oraz zadania dla początkujących w formule przejmowania flag. Praktyczna wskazówka nakazuje zawsze sprawdzać czytelność tekstu, eksperymentować z długościami kluczy i notować przykłady szyfrowania z przebiegami kryptoanalizy.
54/55
Autokontrola rozwiązań – część 2
Cel slajdu: Slajd umożliwia autokontrolę rozwiązań poprzez kryteria poprawności i typowe pułapki.

Kryteria poprawnego rozwiązania

Poniższa lista służy do sprawdzenia własnej pracy – każde zadanie można ocenić w skali 0–2 pkt (0: brak, 1: częściowo, 2: poprawnie).

ZadanieNa co zwrócić uwagę
Złamanie szyfrogramu Vigenère’apoprawny klucz, jawnie opisany tok (Kasiski, IC, kolumny), czytelny tekst odszyfrowany
Kod Python (szyfrowanie i łamanie)poprawne wyniki dla znanych przypadków, czytelność, nazewnictwo zmiennych, brak „magii” w kodzie
Praca w narzędziu (CrypTool)zgodność konfiguracji alfabetu i języka z zadaniem, opis obserwacji
Notatka z Kasiskiego i ICwzory, przykład liczbowy policzony ręcznie i potwierdzony kodem

Najczęstsze błędy: brak jawnej konwencji dla liter polskich, testowanie na tekstach krótszych niż 300 znaków, brak weryfikacji odczytanego klucza na czytelnym tekście.

Forma zapisu: kod w pliku .py z komentarzami, raport w pliku .md lub .pdf, opis uruchomionych poleceń.

Autokontrola rozwiązań (ang. solution self-check): Jest to lista kryteriów poprawności umożliwiająca ocenę własnej pracy w skali od zera do dwóch punktów za każde zadanie. Obejmuje poprawny klucz i opisany tok łamania Vigenère’a, czysty kod w Pythonie bez magicznych stałych oraz zgodność alfabetu i języka w CrypTool. Wskazuje typowe błędy, takie jak brak konwencji dla polskich liter i testowanie na tekstach krótszych niż 300 znaków.
55/55
Uwagi końcowe i zapowiedzi – część 2
Cel slajdu: Slajd zamyka część drugą i zapowiada przejście do nowoczesnej kryptografii symetrycznej.

Podsumowanie zdobytych umiejętności

  • Szyfrowanie i odszyfrowywanie szyfrów Cezara, Vigenère’a, Playfair i transpozycji – ręcznie i w Pythonie.
  • Rozumienie ograniczeń klasyki: statystyka, małe klucze, brak konfuzji i dyfuzji.
  • Łamanie szyfrów Cezara (brute force), Vigenère’a (Kasiski + IC) i transpozycji (anagramy).
  • Posługiwanie się narzędziami (Python, CrypTool, dcode.fr) i krytyczna ocena ich wyników.
Zaproszenie do części 3: kryptografia symetryczna – algorytmy DES, AES, ChaCha20, tryby pracy oraz funkcje skrótu (SHA-2/SHA-3) i HMAC.

Materiał warto kontynuować samodzielnie: powtórzyć obliczenia z tabel, wykonać studium przypadku ze slajdu 46 na własnym tekście i sprawdzić każdy wynik kodem.

Uwagi końcowe (ang. concluding remarks): Jest to zamknięcie części drugiej podsumowujące umiejętność ręcznego i programistycznego szyfrowania oraz łamania Cezara, Vigenère’a, Playfaira i transpozycji. Podkreśla rozumienie ograniczeń klasyki, takich jak statystyka, małe klucze i brak konfuzji z dyfuzją, oraz krytyczną ocenę narzędzi. Zapowiada część trzecią o kryptografii symetrycznej z algorytmami DES, AES i ChaCha20 oraz funkcjami skrótu.