Podstawa wykładowa: Część 2 - slajdy 33, 34, 35: maszyny szyfrujące, Enigma, wirniki I-III, walec odwracający (reflektor), łącznica kablowa (Steckerbrett),
klucz dzienny, brak stałych punktów (litera nie szyfruje się sama w sobie).
Cel
Celem zadania jest zapoznanie się z budową i działaniem elektromechanicznej maszyny szyfrującej Enigma przy użyciu symulatora internetowego. Student konfiguruje bębny
szyfrujące, reflektor oraz pozycje początkowe, szyfruje depeszę wojskową, weryfikuje samoodwracalność procesu oraz bada kluczową słabość konstrukcyjną polegającą na braku punktów stałych
(żadna litera nigdy nie szyfruje się sama w sobie).
Scenariusz – opis
W ostatnim zadaniu tego zestawu badasz działanie słynnej niemieckiej maszyny szyfrującej Enigma, stanowiącej szczytowe osiągnięcie techniki wirnikowej. Otwierasz w przeglądarce
darmowy symulator maszyny Enigma pod adresem 101computing.net/enigma-machine-emulator lub symulator Enigmy w CyberChef. W terminalu JSLinux uruchamiasz interpreter Pythona do porównania
znak po znaku tekstu jawnego i szyfrogramu. Zapoznajesz się z głównymi modułami maszyny: klawiaturą wejściową, łącznicą kablową (Steckerbrett), trzema wirnikami obrotowymi oraz bębnem
odwracającym (reflektorem). Ustawiasz konfigurację bazową maszyny: wirniki w kolejności I, II, III od lewej do prawej, reflektor B oraz pozycje pierścieni Ringstellung na wartości
domyślne A-A-A.
Co ma wykonać student / grupa
Ustawiasz pozycję początkową wirników (Grundstellung) na wybraną kombinację trzech liter, na przykład K-L-U. Na tym etapie pozostawiasz łącznicę kablową pustą bez żadnych
połączeń wtykowych. Wpisujesz powoli na klawiaturze symulatora komunikat testowy liczący co najmniej 40 liter, obserwując zapalające się lampki na tablicy świetlnej. Zwracasz uwagę na
mechanizm krokowego obracania się wirników: prawy wirnik obraca się przy każdym naciśnięciu klawisza, środkowy i lewy po osiągnięciu wycięć. Zapisujesz wygenerowany szyfrogram w
notatkach laboratoryjnych.
Teraz przestawiasz wirniki symulatora z powrotem na identyczną pozycję początkową K-L-U. Wpisujesz do maszyny uzyskany przed chwilą szyfrogram i obserwujesz rozświetlające
się lampki. Potwierdzasz, że maszyna natychmiast odszyfrowuje tekst, przywracając oryginalną wiadomość jawną dzięki obecności reflektora. W kolejnym kroku badasz fundamentalną wadę
konstrukcyjną Enigmy, która umożliwiła jej złamanie polskim matematykom pod kierunkiem Mariana Rejewskiego.
W konsoli JSLinux piszesz jednolinijkowy skrypt w
Pythonie, który porównuje tekst jawny i szyfrogram pozycja po pozycji i sprawdza, czy P[i]
== C[i]. Przekonujesz się, że na żadnej pozycji litera zaszyfrowana nie jest równa literze jawnej, co wynika z zamknięcia obwodu prądu przez reflektor.
Następnie modyfikujesz konfigurację maszyny, dodając 3 pary połączeń na łącznicy kablowej Steckerbrett (na przykład A-D, C-N, X-Z). Powtarzasz szyfrowanie tego samego
tekstu przy tej samej pozycji wirników i obserwujesz całkowicie odmienny szyfrogram. Wykonujesz zrzuty ekranu symulatora przedstawiające ustawienia wirników, łącznicę oraz panel
lampek. Sporządzasz sprawozdanie, w którym opisujesz mechanizm działania Enigmy, rolę reflektora oraz znaczenie braku punktów stałych dla kryptoanalizy. Podsumowujesz zdobyte
doświadczenie i weryfikujesz kompletność wszystkich materiałów raportu.
Przykładowe kroki do wykonania jako sugestia
- Wejdź na stronę symulatora Enigmy (
101computing.net/enigma-machine-emulator lub CyberChef Enigma).
- Uruchom konsolę JSLinux Alpine.
- Skonfiguruj kolejność wirników na I,
II, III oraz reflektor B.
-
Ustaw pozycje pierścieni (
Ringstellung) na A-A-A.
-
Ustaw pozycję początkową bębnów (
Grundstellung) na wybraną kombinację
(np. K-L-U).
- Pozostaw łącznicę kablową (
Plugboard) bez połączeń.
- Wprowadź tekst jawny (minimum 40 znaków) i zapisz pojawiający się szyfrogram.
- Zaobserwuj obrót prawego wirnika przy każdym naciśniętym znaku.
- Zresetuj bębny maszyny do pozycji wyjściowej K
-L-U.
- Wprowadź wygenerowany szyfrogram i zweryfikuj poprawne odszyfrowanie depeszy.
-
W JSLinux uruchom Pythona i porównaj ciągi znaków:
all(p !=
c for p, c in
zip( jawny, szyfrogram)).
- Potwierdź, że warunek p !=
c jest spełniony dla stu procent znaków (brak punktów stałych).
-
Dodaj 3 połączenia na łącznicy kablowej (
np. AD,
CN, XZ) i powtórz szyfrowanie.
- Zaobserwuj,
jak zmiana w łącznicy całkowicie modyfikuje wynik przy tych samych bębnach.
- Wykonaj zrzuty ekranu symulatora z widokiem wirników i tablicy wtykowej.
- Sformułuj wnioski wyjaśniające,
w jaki sposób brak punktów stałych ułatwił kryptoanalizę Enigmy.
Kontrola zaliczenia (checklist):
- Zachowano artefakt: zapis konfiguracji Enigmy (walce, ringi, pozycje startowe, reflektor, min. 2 pary Stecker) + szyfrogram depeszy + dowód samoodwracalności (ponowne szyfrowanie = tekst jawny) + test braku punktów stałych na min. 20 literach (E(x)≠x).
- Dołączono 2–3 zrzuty z podpisami: panel konfiguracji symulatora, szyfrowanie oraz weryfikacja zwrotna.
- Opisano w 2–3 zdaniach wybór symulatora i sposób kontroli ustawień (zrzut konfiguracji + log).
- Zapisano wnioski (3–5 zdań): reflektor = inwolucja kosztem punktów stałych, luka dla Rejewskiego/Turinga, łącznica zwiększa klucze lecz nie usuwa wady.
Wariant offline (fallback): Brak sieci/JSLinux: praca na wektorach ze startera w lokalnym terminalu/edytorze; narzędzia webowe (CyberChef, dCode, Boxentriq, symulator Enigmy) zastąp opisem z cache, obliczeniami ręcznymi i poleceniami tr/sort/uniq; do sprawozdania dołącz pliki .txt z kopiami wyników.
Sugerowane wnioski i podsumowanie - co student ma osiągnąć
Sprawozdanie z realizacji zadania musi zawierać następujące kluczowe wnioski i osiągnięcia:
- Jak obecność reflektora zapewnia samoodwracalność maszyny kosztem eliminacji punktów stałych.
- Dlaczego cecha E(x) != x stanowiła krytyczną lukę wykorzystaną przez Rejewskiego i Turinga.
- W jaki sposób łącznica kablowa radykalnie zwiększała przestrzeń kluczy, nie usuwając wad reflektora.
- Student potrafi poprawnie skonfigurować symulator Enigmy i wykazać jego specyficzne właściwości kryptoanalityczne.