english

trochę historii i podstaw teoretycznych

Maszyna szyfrująca Enigma to urządzenie mechaniczno-elektryczne wyglądem przypominające trochę bardziej skomplikowaną maszynę do pisania. Powstało w latach 20-tych XX wieku jako urządzenie komercyjne do zabezpieczania komunikacji i/lub korespondencji. W latach 30-tych XX wieku przejęte i udoskonalane przez III Rzeszę dla potrzeb czysto militarnych. Podstawą działania maszyny jest mechanizm obracających się wirników (niem.Walzen), które dzięki zmieniającym się wciąż ustawieniom powodują przepływ prądu ciągle innymi ścieżkami. Wielokrotna zmiana ścieżki przepływu prądu implikuje za sobą wielokrotną zamianę znaku wejściowego. Wciśnięcie klawisza na klawiaturze powodowało przepływ prądu przez „tymczasowy obwód” utworzony z połączonych ze sobą wirników. W tym samym momencie następował także obrót pierwszego z wirników o jedną pozycję. Tutaj rozwiązano to w sposób czysto mechaniczny poprzez system zapadek i mechanizm "kołyski". Od spodu znajdowała się ruchoma rama. Wciśnięcie klawisza powodowało przechylenie się przedniej części ramy w dół i tym samym tylna część była kierowana ku górze, co powodowało popchnięcie mechanizmu zapadki. Dodatkowo, dzięki specjalnym wyżłobieniom w wirnikach pełny obrót pierwszego z nich wymuszał przesunięcie następnego o jedną pozycję itd. Wraz ze zmieniającymi się, w takt obrotów wirników, ścieżkami połączeń zmianom ulegał wciąż algorytm podstawieniowy dla każdej z wprowadzanych liter. Wyjście z ostatniego wirnika połączone było z tzw. wirnikiem powrotnym (odwracającym), zwanym także reflektorem (niem. Umkehrwalze, w skrócie UKW). Jego zadaniem było ponowne "przepuszczenie" sygnału przez trzy poprzednie wirniki, tyle że teraz w odwrotnej kolejności (i z innymi już ustawieniami). Dzięki tylu zmianom połączeń, ponowne wciśnięcie danego klawisza dawało zawsze inny rezultat na wyjściu. Jakby tego było mało, wirniki odwracające także występowały w kilku wariantach (A,B,C), które różniły się między sobą sposobem połączeń wewnętrznych. Na zdjęciu 1 przedstawiono otwartą Enigmę wraz z opisem poszczególnych jej elementów.


zdj. 1 - Enigma M3

W zależności od modelu w Enigmie znajdowały się trzy (modele M1, M2,M3) lub cztery (model M4) wirniki (niem. Walzen), których wybór, kolejność ułożenia (niem. Walzenlage) oraz ustawienie początkowe (niem. Grundstellung) miały znaczenie. Model M3 bazujący na cywilnej wersji Enigmy umożliwiał wybór trzech spośród pięciu dostępnych wirników. Wirniki różniły się między sobą nie tylko połączeniem wewnętrznym wyjść (inne mapowanie liter), ale także liczbą wyżłobień, co przekładało się na częstość zmian położenia winika leżącego w dalszej kolejnośći. Aby móc rozkodować wiadomość należało m.in wiedzieć który wirnik (1 z 5) występował w maszynie szyfrującej na której pozycji, a także jakie mial ustawienie początkowe. Wirniki numerowano liczbami rzymskimi: I, II, III, IV, V itd. Za wyjątkiem czwartych wirników Enigmy M4, które oznaczono greckimi literami Β (Beta) lub Γ (Gamma ). Wirnik odwracający (UKW) także występował w kilku wariantach połączeń i był oznaczany literami A, B, C. Oprócz wyżej wymienionych w Enigmie występował jeszcze walec wstępny (niem. Eintrittswalze / ETW). Był on nieruchomy i do niego dochodziły przewody przyłączoniowe z klawiatury. Dzięki połączeniu sprężynowemu przekazywał on sygnał dalej do obracającego się wirnika występującego na pierwszej pozycji (patrząc od prawej strony).

Cechą Enigmy było to, że szyfrowanie i deszyfrowanie przebiegało w ten sam sposób. Po stronie odbiorczej wprowadzano po kolei otrzymane litery szyfrogramu i jeśli tylko ustawienia początkowe obu stron zgadzały się - na panelu lampowym drugiej Enigmy kolejno pojawiały się litery odszyfrowanej wiadomości.

ustawienia podstawowe: Walzenlage & Grundstellung

Pierwotnie by zaszyfrować lub odszyfrować wiadomość należało wybrać trzy wirniki (spośród 5 dostępnych) i osadzić je w maszynie w odpowiedniej kolejności. W języku niemieckim parametr ten określano mianem Walzenlage (dosłownie: położenie wirników) . Następnie na każdym z wirników wybierano ustawienie początkowe - tj. ustawiano odpowiednią literę (lub cyfrę - w zależności od modelu). Ustawienie początkowe w nomenklaturze Enigmy nazywano w j. niemieckim terminem Grundstellung (ustawienie podstawowe). Jako, że każdy z wirników zapewniał inne połączenia wewnętrzne oba powyższe parametry jak i rodzaj użytego reflektora (UKW-A, UKW-B lub UKW-C) musiały być wcześniej znane obu stronom komunikacji. We wczesnych wersjach Enigmy pierścień był na stałe przytwierdzony do wirnika i obracał się tylko wraz z nim.

Ringstellung

W celu zwiększenia liczby możliwych kombinacji ustawień w późniejszym okresie dodano możliwość ustawienia położenia pierścienia względem osi wirnika. Ustawienie to nosiło właśnie nazwę Ringstellung (niem. Ring - pierścień, Stellung - ustawienie) i wprowadzało dodatkowe przesunięcie (offset) względem standardowych ustawień wirników (sprzed modyfikacji). Aby ustawić pierścień we właściwej pozycji najpierw odhylano sworzeń sprężynowy w prawą stronę, tak by pierścień mógł się swobodnie przesuwać na korpusie wirnika. Następnie obracano pierścieniem tak by czerwony trójkąt wskazywał żądaną pozycję - patrz zdj. 2. Po zwolnieniu sworznia, zostaje on zatrzaśnięty w otworze z boku pierścienia, co uniemożliwia dalsze poruszanie się pierścienia względem osi wirnika.

Tutaj ważna uwaga, bo dla mnie to przez dłuższy czas nie było do końca jasne: przesunięcie pierścienia nie zmieniało układu wewnętrznych połączeń elektrycznych w wirniku!. Zmianie ulegała relacja pomiędzy wewnętrznymi połączeniami a literami wybitymi na pierścieniu. Następowało wówczas przesunięcie. Parametry maszyny odczytywane z książki kodów dla każdego dnia zawierały m.in ustawienie pierścieni dla każdego z wirników. Parametr ten ulegał częstej zmianie i jako taki stanowił element kodu zabezpieczeń. Na obracanym pierścieniu występowało też nacięcie (wyżłobienie), od którego zależał obrót następnego wirnika. Zatem zmiana położenia pierścienia determinowała też moment obrotu kolejnego wirnika, a to już miało przełożenie na obwód elektryczny. Szczegółowy opis działania tego mechanizmu znajdziesz tutaj.

zdj. 2 ustawienie pierścienia względem osi wirnika(Ringstellung)


zdj. 3 kompletny wirnik Enigmy (pierwszy od lewej strony) oraz jego części składowe na prawo. Źródło: Wikipedia

Steckerbrett

kolejne modyfikacje: dodanie łącznicy kablowej


zdj. 4 Steckerbrett - łącznica kablowa Enigmy (źródło: Wikipedia)

Kolejną modyfikacją znacząco zwiększającą liczbę permutacji podstawień było dodanie łącznicy kablowej usytuowanej od frontu urządzenia (w polskiej wersji maszyny znajdowała się ona z tyłu). Łącznica (krosownica) - zwana w j. niemieckim Steckerbrett (der Stecker - wtyk, das Brett - deska) umożliwiała dodatkową podmiane znaków poprzez dodanie połączeń krzyżowych (zamieniających litery). Użycie łącznicy nie było obligatoryjne. Technicznie zostało to zrealizowane w ten sposób, że w przypadku braku wpiętego wtyku przy danej literze, od tyłu deski wejście danej litery było zwarte metalowym stykiem z jego wyjściem, a więc w tym przypadku nie następowała żadna podmiana. Wciśnięcie wtyku odsuwało mechanicznie metal, który zwierał wejście z wyjściem rozwierając obwód i wymuszając przepływ prądu przez zewnętrzne połączenie kablowe. Po wyciągnięciu wtyku specjalne sprężyny przyciągały z powrotem metal, aby ponownie zwierał wejście litery z jej wyjściem (patrz zdj. 5).


zdj. 5 tył łącznicy podczas renowacji - zdjęcie pochodzi ze strony enigmamuseum.com


zdj. 6 tył łącznicy podczas renowacji - zdjęcie pochodzi ze strony enigmamuseum.com

Enigma M3 vs M4 - różnice oraz tryb kompatybilności.

W modelu M4 dołożono jeszcze jeden wirnik, zwiększając w ten sposób liczbę możliwych permutacji połączeń. Przy czym czwarty wirnik w trakcie pracy maszyny pozostawał nieruchomy i nie był kompatybilny gabarytowo z pozostałymi. Musiał być mniejszy aby upchnąć go w istniejącej przestrzeni. Z tego samego powodu Enigma M4 miała też mniejszy wirnik odwracający (reflektor / UKW). Na zdjęciu 7 przedstawiono Enigmę M4. Czwarty wirnik występował w dwóch wersjach - Beta i Gamma, różniącymi się wewnętrznym układem połączeń. Wirnik ten nazywano greckim (od oznaczeń Beta / Gamma) lub dodatkowym (ZW - Zusatzwalze).


zdj. 7 Enigma model M4.
Zwróć uwagę na 4 wirniki oraz znacznie mniejszy reflektor niż na zdjęciu 1 (zdjęcie pochodzi ze strony cdvandt.org)

Enigm M4 używano wyłącznie w marynarce wojennej (Kriegsmarine), m.in. na łodziach podwodnych. W celu zachowania możliwości komunikacji z oddziałami wyposażonymi w modele M3, przy pewnych ustawieniach model M4 jest zgodny (kompatybilny) z wcześniejszymi wersjami. W szczególności IV wirnik (beta lub gamma) musiał być ustawiony w pozycji A (Grundstellung oraz Ringstellung). I teraz w zależności czy po „drugiej stronie” używano reflektora typu B lub C należało użyć tego samego rodzaju reflektora (a w zasadzie odpowiednika, gdyż reflektory dla Enigmy M4 były mniejsze gabarytowo) o raz dobrać odpowiednio czwarty wirnik (beta dla reflektora typu B i gamma dla C). Czyli M4 UKW-B + Beta (A) = M3 UKW-B lub M4 UKW=C + Gamma (A) = M3 UKW-C.


deszyfrowanie wiadomości


ostatecznie aby móc odszyfrować otrzymaną (lub przechwyconą) wiadomość należało znać następujące parametry:


Warto zauważyć, że pierwsze trzy pozycje z powyższej listy wymagały otwarcia pokrywy Enigmy i ustawienie to było przeprowadzane przez oficera (lub kogoś wyższego rangą) na podstawie zapisu z księgi kodów dla danego dnia bieżącego miesiąca. Następnie można było zablokować dostęp do wnętrza maszyny, umożliwiając szyfrantowi zmianę tylko ustawień podstawowych (Grundstellnung), zmieniających się przy każdej depeszy.

Poniżej przedstawiono parametry prawdziwego szyfrogramu odebranego przez łódź U-516 30 kwietnia 1945

przykładowe rzeczywiste parametry ustawień dla Enigmy M4

Radiotelegrafista w trakcie odbioru zaszyfrowanej wiadomości zapisywał jej znaki na kartce (niem. schluessel Zettel) w postaci 4-ro lub 5-cio znakowych bloków. Następnie arkusz z zaszyfrowaną wiadomością (szyfrogramem) przekazywał do szyfranta. Ten z kolei wprowadzał go do swojej Enigmy wpisując odpowiednie znaki na klawiaturze, zapisując jednocześnie litery zapalających się kolejno żarówek na osobnej kartce.

Niemcy jeszcze przed wojną przyjęli zasadę, że pierwsze dwa bloki szyfrogramu stanowił zaszyfrowany powtórzony kulcz wiadomości. W tej konkretnej wiadomości bloki z zaszyfrowanem kodem zostały dopisane także na końcu wiadomości. Klucz ten należało rozszyfrować, zgodnie z ustawieniami książki kodów dla danego dnia i przyjętymi z nagłówka wiadomości ustawieniami początkowymi (Grundstellung). Po rozszyfrowaniu pierwszych 6 znaków szyfrogramu otrzymywano powtórzony 2x klucz wiadomości. Dla omawianego przykładu - z bloku HCALNU po rozszyfraowaniu orzymano ciąg ASTVASTV.

Podwójny zapis tego kodu miał na celu zabezpieczenie przed ewentualnymi przekłamaniami powstałymi w drodze radiowego przesyłu wiadomości. Jak się jednak okazało - był to poważny błąd Niemców - rozpracowany później przez polskich kryptologów. Ci ostatni, ustaliwszy, że pierwsze 6 zakodowanych znaków szyfrogramu (np. HCALNU) zawierała zawsze dwa powtórzone trój-literowe bloki (jawnego tekstu), byli w stanie ustalić zależności pomiędzy znakami szyfrogramu (H-L / C-N / A-U) i na tej podstawie odtworzyć przebieg połączeń wirników w maszynie (tzw. teoria cyklów Mariana Rejewskiego).

W późniejszych latach wojny zrezygnowano z tej metody, gdyż Niemcy połapali się, że ich wiadomości najprawdopodobniej są odczytywane przez Aliantów. Wprowadzili wówczas coś, co nazywano grupy identyfikatorów (Kenngruppen). Więcej na ten temat opiszę w dalszej części.

Wróćmy jednak do rozszyfrowania tej wiadomości. W pierwszej kolejności szyfrant ustawiał wirniki i pozostałe parametry Enigmy zgodnie z książką kodów dla danego dnia bieżącego miesiąca (tutaj: Grundstellung: AMZI i Ringstellung: ASOD). Następnie rozszyfrowywał dwa pierwsze bloki, wprowadzając na klawiaturze sekwnecję HRQN i SMAD. Odszyfrowana wartość tych bloków to ciąg ASTVASTV.

Poniżej przedstawiam rozkodowanie tej wiadomości przy użyciu programu aenig4 (emulatora Enigmy):

marek@Enigma:~$ echo HRQNSMAD | /usr/local/enigma/bin/aenig4 -k "c gamma II I V 1 19 15 4 AMZI AD LR ZJ XI BU KV SW FH EN MY" --filter
ASTVASTV

Następnie jeśli powtórzony 2x kod zgadzał się (nie było przekłamań w odbiorze), operator zmieniał ustawienia podstawowe wirników na odczytaną wartość (tutaj ASTV). Przy czym zmieniano ustawienia samych wirników (Grundstellung) - pozostałych parametrów nie zmieniano. Dalsza część wiadomości została odszyfrowana jako

marek@Enigma:~$ echo "LVIODMMWJLKNGSRJVNLCIKGTMDRBIDAWYLIKIFIFCMCG" | /usr/local/enigma/bin/aenig4 -k "c gamma II I V 1 19 15 4 ASTV AD LR ZJ XI BU KV SW FH EN MY" --filter
DERFUEHRERISTTOTXDERKAMPFGEHTWEITERXDOENITZX

co możemy odczytać jako "Der Fuhrer ist tot. Der Kampf geht weiter Doenitz" (Führer nie żyje. Walka trwa dalej Dönitz).

Niemcy używali znaków X jako spacji, której normalnie w Enigmie nie przewidziano. Wiadomość ta została nadana przez Karla Dönitza oficera marynarki wojennej, naczelnego dowódcę Kriegsmarine w latach 1943–1945.
Na podstawie ustawień wirników możemy przypuszczać, że wiadomość została zakodowana w sposób umożliwiający odczyt także na maszynach M3 (Ringstallung dla wirnika gamma ustawiony na literę A oraz Grundstellung czwartego wirninka także ustawiono na literę A). Na potwierdzenie tej tezy na rysunku poninżej przedstawiłem wiadomość zdekodowaną w emulatorze Enigmy M3 dla Androida


Inna przykładowa (rzeczywista) wiadomość nadana przez Wehrmacht jeszcze przed wojną, w 39 roku Wiadomość została nadana zanim maszyny M4 w ogóle istniały, dlatego rozkodowując ją programem aenig4 musimy narzucić mu w tryb kompatybilności z M3. nagłówek wiadomości:

AN HEERESGRUPPENKOMMANDO 2 =
2109 -1750 - 3 TLE - FRX FRX - 1TL -172 =

Z nagłówka możemy dowiedzieć się, że wiadomośc została nadana 21/09 o godzinie 17:50. Składa się z trzech części (3 TLE). Pierwsza część (1TL - niem. Teil - część) zawiera 172 znaki. W nagłówku jawnym tekstem przekazano także ustawienia początkowe wirników (Grundstellung) - FRX, jakie należało ustawić aby odszyfrować klucz wiadomości. W późniejszym okresie zaniechano takich praktyk. Zatem mamy: