Blog (48)
Komentarze (382)
Recenzje (0)
@karol221-10Kryptologia XX wieku — Enigma

Kryptologia XX wieku — Enigma

26.03.2016 12:18, aktualizacja: 29.05.2017 15:09

Ludzie od starożytności stosowali szyfry. Chcieli w ten sposób zabezpieczyć poufną informację przed wzrokiem osób trzecich. Potrzebę szyfrowania rozumiał już Juliusz Cezar, który jest uważany za autora sławnego szyfru Cezara. Żydzi używali szyfru AtBash, który polegał na zamianie litery leżącej w pewnej odległości od początku alfabetu na literę leżącą w tej samej odległości od jego końca. Kod AtBash spełniał w swoim czasie ogromną rolę. Dużo przykładów jego zastosowania znajdziemy w Biblii. Szyfr AtBash był bardzo ważny dla Żydów, gdyż w czasach niewoli babilońskiej można było dzięki niemu rozprowadzać treści o antybabilońskim charakterze.

Rozwój szyfrów doprowadził do powstania dziedziny wiedzy zwanej kryptologią. Gałąź zajmująca się szyfrowaniem danych to kryptografia. Skoro opracowywano nowe sposoby zabezpieczania danych przed niepowołanym dostępem, to musiała powstać także dziedzina wiedzy „przeciwna” do kryptografii. Nazywamy ją kryptoanalizą.

Poziom komplikacji szyfrów rósł wraz z odsetkiem ludzi, którzy umieli czytać i pisać. Wiadomo, w czasach Juliusza Cezara ten procent był bardzo nikły. Wystarczyło więc proste przesunięcie o 3 (np.: A w tekście jawnym zmieniało się w C, B w D itd.) aby uodpornić treść komunikatu przed odczytaniem. Postęp technologiczny wymagał stosowania coraz silniejszych szyfrów. Stosowano różne metody, ale większość kodów klasycznych opierała się na zasadzie „podstawiania” lub „przestawiania” znaków. Niosło to ze sobą pewien problem. Najbardziej znaną metodą kryptoanalityków było wyszukiwanie w szyfrogramie cech charakterystycznych dla danego języka. Np.: jeśli wiemy, że w danym języku najczęściej występującą literą jest A, a w szyfrogramie powtarza się litera D, to z dużą pewnością możemy powiązać ze sobą te dwie litery. W podobny sposób można było często rozszyfrować cały tekst. Z tego powodu bardzo cenieni byli lingwiści – osoby specjalizujące się w językach, potrafiące rozróżnić ich specyficzne cechy.

„Ojcem” zachodniej kryptografii jest włoski malarz, poeta i filozof – Leon Battista Alberti. Czym on się zasłużył dla tej dziedziny nauki? Wynalazł (w pewnym sensie) przełomowy szyfr polialfabetyczny.

Szyfr polialfabetyczny różni się od szyfru podstawieniowego jedną tylko, ale bardzo ważną kwestią. W prostym szyfrze podstawieniowym wykonujemy zawsze takie samo przekształcenie (np.: A zawsze przechodzi w D, B zawsze przechodzi w Z itd.). Battista to zmienił. Dzięki jego wynalazkowi – tarczy szyfrującej – każda litera tekstu jawnego mogła być szyfrowana za pomocą innego przekształcenia. W tym wypadku A nie zawsze musiało przejść w D.

Wynalazek Battisty – dysk szyfrowy składał się z dwóch kół. Na zewnętrznym znajdowały się litery alfabetu jawnego (24 znaki). Był to pierścień nieruchomy. Natomiast na wewnętrznym, ruchomym pierścieniu znajdowały się litery alfabetu szyfrowego. Przekształcenie możemy bardzo łatwo zmienić przez obrót wewnętrznego koła. Dzięki temu zmienia się także rozkład częstości występowania poszczególnych liter w szyfrogramie, co uodparnia szyfr polialfabetyczny na analizę występowania poszczególnych znaków.

W 1553 Blaise de Vigenere na podstawie pracy włoskiego malarza opracował własny mechanizm szyfrowania, który został zresztą nazwany jego nazwiskiem. Metoda ta bardzo długo leżała w szufladzie. Przede wszystkim ze względu na dość skomplikowaną operację szyfrowania i deszyfrowania. Nawet w czasie pierwszej wojny światowej Niemcy używali tradycyjnej, nieco zmodyfikowanej tablicy Poliblusza, która była w istocie szyfrem podstawieniowym.

Sytuacja zmieniła się w roku 1918, kiedy niemiecki inżynier Artur Scherblus złożył patent na wirnikową maszynę szyfrującą oraz założył firmę, której celem była produkcja tego urządzenia.

Enigma – początek legendy

Zimne jesienne popołudnie roku 1918. Pierwsza wojna światowa zmierza ku końcowi. Matthias Erzberger, w imieniu cesarza Wilhelma II podpisuje, 11 listopada 1918, w wagonie pociągu stojącego w miejscowości Compiegne rozejm. W tym samym czasie Arthur Schriebius w zaciszu swojego domu pracuje nad projektem pierwszej niemieckiej maszyny wirnikowej. Projekt został określony mianem Enigma (tajemnica, zagadka). Zakłada firmę Scherblus & Rittler, której celem jest produkcja tego urządzenia. Firma próbowała zainteresować swoim wynalazkiem zarówno Kriegsmarine, jak i Ministerstwo Spraw Zagranicznych. W Republice Weimarskiej nie zauważono potencjału nowego urządzenia, toteż zarówno MSZ jak i marynarka odrzuciły projekt.

Enigma A (źródło: cryptomuseum.com)
Enigma A (źródło: cryptomuseum.com)

Pierwsze wersje Enigmy (A i B) były maszynami do pisania. Zaszyfrowany tekst drukowany był na papierze. Wersja A została wprowadzona do użytku w roku 1923. posiadała cztery wirniki, które były niewymienialne. Każdy wirnik miał 28 styków. Wersja ta zawierała specjalny mechanizm, który zapewniał nieregularne obroty wirników. Wczesne odmiany nie miały bębna odwracającego. Stąd też wymagana była obecność przycisku szyfr-deszyfr. Maszyna mogła pracować w trybie szyfrowania, deszyfrowania oraz tzw. tekstu jawnego. W ostatnim wypadku Enigma A pracowała jako zwykła maszyna do pisania.

Enigma B (źródło: cryptomuseum.com
Enigma B (źródło: cryptomuseum.com

Wersja B miała swoją premierę rok po Enigmie A – w 1924 r. Wirniki miały 24 styki, co umożliwiało szyfrowanie jedynie liter od A do Z. Podobnie jak wersja A, posiadała zintegrowaną maszynę do pisania. Po prawej stronie znajdował się szereg pokręteł, które mogły być użyte do zmiany bieżących ustawień maszyny. Aktualne ustawienia można było odczytać z okna znajdującego się pośrodku.

Istniało sporo problemów z tymi wersjami niemieckiej maszyny szyfrującej. Przede wszystkim, produkcja obydwu modeli była niezwykle droga. Przez to zainteresowane nią mogły być tylko dość bogate firmy. Jak wiadomo, jest to dość niewielki rynek zbytu. Wersja A dodatkowo miała dość często problemy z mechanizmem drukowania. Waga i wymiary tego mechanizmu były dość wielkie (65x45x35 cm, 50kg), przez co same urządzenie nie było zbyt poręczne. Do dzisiejszych czasów nie przetrwał żaden egzemplarz Enigmy w wersjach A i B.

Kolejna wersja Enigmy oznaczona literką C, zawierała sporo modyfikacji. Przede wszystkim, zrezygnowano z wbudowanej maszyny do pisania. Zaszyfrowane znaki były wyświetlane za pomocą żarówek, umieszczonych powyżej klawiatury do pisania. Przez to wersja ta zdobyła sobie przydomek „świecącej” Enigmy. Wymiary i waga maszyny zostały zmniejszone. Była także o wiele tańsza w produkcji (kosztowała 1000 marek niemieckich. Natomiast wersja A to cena około 8000 RM).

Istniała jeszcze jedna zasadnicza różnica między tą wersją, a poprzednimi. W wersji C zastosowano po raz pierwszy tzw. walec odwracający (UKW). Dzięki temu można było pozbyć się przycisku szyfr-deszyfr, a także (wg projektanta) zwiększyć skuteczność szyfrowania. Dzięki zastosowaniu tego mechanizmu każda litera mogła być zamieniona na każdą inną w szyfrogramie, ale nigdy na tą samą (np.: A mogło przejść w B,C,D (…) Z, ale nigdy w A).

Wersja ta była także jedną z najczęściej klonowanych. Swoje wersje Enigmy opracowali m.in. Szwedzi (Hagelin B‑211) oraz Polacy (Lacida).

Kolejna Enigma, zwana „komercyjną” oznaczona została literką K. Pojawił się w niej bardzo ciekawy mechanizm, którego zasada działania jest bardzo podobna do tradycyjnego licznika na wodę. Po naciśnięciu dowolnego klawisza pierwszy z trzech bębnów wykonywał 1/26 pełnego obrotu. Gdy pierwszy z bębnów zatoczył pełne koło, drugi z nich wykonywał krok. Podobnie trzeci, gdy drugi obrócił się wokół własnej osi. Mechanizm ten bardzo dobrze wpływał na złożoność szyfru, gdyż ilość kombinacji wynikająca z samych wyników wynosiła 26!*25!*26!.

Enigma na wystawie w Muzeum Techniki w Warszawie (źródło: Wikipedia.pl)
Enigma na wystawie w Muzeum Techniki w Warszawie (źródło: Wikipedia.pl)

Rok 1926. Od czterech lat podpisany jest układ w Rapallo, który oficjalnie jedynie przywracał stosunki dyplomatyczne między Republiką Weimarską a RFSRR. W rozszerzeniu traktatu, podpisanego 29 lipca 1922 zacieśniono współpracę między wojskami obydwu narodów. Od tego czasu niemieccy czołgiści mogli trenować na rosyjskich poligonach, a w zamian otrzymywali od Rzeszy Niemieckiej technologie. W obliczu takiego rozwoju sytuacji Kriegsmarine zainteresowała się nowym wynalazkiem i wstępnie przyjęła go do służby. Dwa lata później Reichswehra również podjęła się próby wprowadzenia Enigmy. W stosunku do poprzednich wersji wprowadzono tzw. łącznicę kablową, która umożliwiała zamianę liter miejscami. Znacznie zwiększało to złożoność szyfru.

Enigma T (źródło: cryptomuseum.com)
Enigma T (źródło: cryptomuseum.com)

W późniejszych latach, powstało wiele innych wersji Enigmy. Jedną z najciekawszych była Enigma M4, która posiadała 4 wirniki. Ostatni, czwarty był ustawiany ręcznie. Inną ciekawą wersją była Enigma T. Wersja ta była przygotowana specjalnie z myślą o kraju wschodzącego słońca. Okablowanie wirników było inne niż w niemieckich wersjach maszyny. Rotory posiadały także więcej wcięć na swoim obwodzie co umożliwiało częstsze obracanie pozostałych bębenków.

Zasada działania Enigmy

Mechanizm działania niemieckiej maszyny szyfrującej, wbrew pozorom, był bardzo prosty. Jak już wcześniej wspominałem, opierał się na szyfrze polialfabetycznym. Na szyfr Enigmy składało się kilka zasadniczych części:

  • Kolejność wirników (Walzenlage) – w przypadku większości typów, musieliśmy wybrać 3 z pośród 5, a nawet 9 wirników. Każdy z nich był okablowany w inny sposób i w efekcie szyfrogram także był inny.
  • Początkowa pozycja wirników – była wybierana przez operatora. Powinna być inna dla każdej szyfrowanej wiadomości.
  • Ustawienie wirników (Ringstellung) –każdy wirnik posiadał pierścień z wygrawerowanymi literami, który można było obracać. Ringstellung określał ustawienie tego pierścienia.
  • Ustawienia łącznicy kablowej (Steckerverbindungen) – pozwalała zamienić litery miejscami. Przykładowo, jeśli połączyliśmy za pomocą wtyczek litery A i S na łącznicy, to w momencie naciśnięcia litery A do pierwszego pierścienia szyfrującego szła informacja, jakobyśmy nacisnęli literkę S. Wbrew pozorom, największą ilość kombinacji, (i w efekcie największą złożoność) można było uzyskać przy dziesięciu połączeniach na łącznicy kablowej. Zwiększenie lub zmniejszenie ilości połączeń na tablicy wtyczkowej powodowało zmniejszenie złożoności szyfru.
  • Sposób okablowania walca odwracającego – Do roku 1943 stosowano jedynie jeden rodzaj walca odwracającego, zwany UKW B. W 1943 wprowadzono UKW C, który różnił się sposobem okablowania. Nie mniej, drugi typ wirnika był raczej rzadko używany.

Dla uproszczenia przyjmijmy, że w naszym opisie pominiemy łącznicę kablową, Początkowa pozycja wirników to AAZ. Załóżmy, że do naszej maszyny zostały zamontowane następujące wirniki:

585818

Zastosujemy następujący pierścień odwracający: UKW‑B

585820

Chcemy zaszyfrować tekst TATA. Spójrzmy, jaki sygnał pójdzie do pierwszego pierścienia, jeśli naciśniemy literkę T. Pamiętajmy, że w Enigmie po naciśnięciu klawisza najpierw wykonywany jest obrót bębenków, a potem zestawiane jest połączenie elektryczne. W związku z tym w czasie „szyfrowania” pozycją wirników będzie nie AAZ tylko AAA. Spójrzmy, jaki sygnał pójdzie do pierwszego bębna szyfrującego. Będzie to literka P, jak widzimy na powyższym schemacie. P przejdzie w C na drugim pierścieniu szyfrującym, natomiast C w F na trzecim bębnie szyfrującym. Następnie sygnał trafia do bębna odwracającego, gdzie litera F jest zamieniana na S. Następnie prąd wędruje w drugą stronę – od bębna trzeciego do wyjścia. Na pierścieniu trzecim S zostanie przekształcone na X, następnie X na I, a ostatecznie I na V.

Spróbujmy teraz zaszyfrować kolejną literkę: A.

585823
585824

Wejściowy pierścień I został obrócony o jedną pozycję w lewo. Więc, klawisz A jest połączony z sygnałem litery B na pierwszym pierścieniu szyfrującym, C z D itd. Przez pierścień pierwszy B zostaje zamienione na K. Jednakże to nie K pójdzie na wejście drugiego pierścienia. Pamiętajmy, że P I jest obrócony o jedną pozycję w lewo, więc następny pierścień dostanie literkę znajdującą się o jedną pozycję przed K, czyli J. Dalsze zasady postępowania są podobne jak w przy szyfrowaniu poprzedniej literki, gdyż P II i P III nie wykonały obrotu. J zostanie zamienione na B przez pierścień II, natomiast B na D przez pierścień trzeci. D przejdzie w H na pierścieniu odwracającym, a potem kolejno H w D i D w C. Teraz po raz kolejny zaczyna się ciekawsza część historii. Normalnie C przeszłoby w Y, ale pamiętajmy, że pierścień I obrócony jest o jedną pozycję w lewo. W takim wypadku sygnał zostanie przekazany do litery D, która przejdzie w G, lecz to nie ta litera zostanie przekazana na wyjście. Pamiętając, że pierścień jest obrócony o jedną pozycję w lewo, na wyjście zostanie przekazana litera znajdująca się na wcześniejszej pozycji, czyli F. I Voila, mamy już dwie litery szyfrogramu: VF.

Analogicznie przebiega procedura podczas szyfrowania ostatnich dwóch liter. W efekcie otrzymamy szyfrogram wyglądający tak: VFAZ.

Procedury obsługi Enigmy w Wermachcie i Kriegsmarine

Przykładowa karta z kluczami dziennymi dla Wehrmachtu (users.telenet.be)
Przykładowa karta z kluczami dziennymi dla Wehrmachtu (users.telenet.be)

Każdego dnia Enigma była ustawiana wg danych zawartych w kluczu dziennym. Informacje, które były tam zawarte, obejmowały kolejność i typy wirników, ich ustawienie oraz połączenia na łącznicy kablowej. Lista zaczynała się od 31 dnia miesiąca. Ostatnia kolumna – Kenngruppen służyła do identyfikacji klucza użytego przy szyfrowaniu danej wiadomości. Dzięki temu operator odbierający wiadomość na podstawie Buchstabenkenngruppe mógł zidentyfikować, jaki klucz dzienny został użyty do zaszyfrowania wiadomości.

Procedura szyfrowania stosowana w czasie wojny wyglądała następująco: Operator, po ustawieniu maszyny wg klucza dziennego, na początku wiadomości zapisywał dwie losowe litery. Następnie wybierał jeden z ciągów znajdujących się w kolumnie Kenngrupppen. Ten 5‑literowy ciąg nazywał się Buchstabenkenngruppe. Przykładowe, poprawne ciągi dla 31 października z powyższej karty to: DFJKM, KLNCJ, XSGLP. Ta część wiadomości była pomijana podczas szyfrowania i deszyfrowania. Służyła jedynie zorientowaniu się, jaki klucz dzienny został użyty do zaszyfrowania wiadomości.

Jeśli wiadomość była podzielona na kilka części, lub była zbyt długa, aby zapisać ją w jednym szyfrogramie (W procedurach ujęto, że wiadomość szyfrowana za pomocą Enigmy powinna mieć długość nie większą niż 250 znaków) dla każdej z części należało użyć innego klucza indywidualnego i innego numeru identyfikacyjnego grupy. Po wybraniu Buchstabenkenngruppe operator wybierał losowy klucz (np.: ASD) i losowe bazowe ustawienie wirników (Grundstellung) i losowy indywidualny klucz wiadomości (Spruchschlussel). Załóżmy, że wybrane ciągi to: DSC i FGT. Następnie wirniki maszyny były ustawiane wg wybranego wcześniej bazowego ustawienia wirników. Operator szyfrował indywidualny klucz wiadomości, otrzymując np.: BNZ. Następnie wirniki były ustawiane w pozycji BNZ i zabierano się za szyfrowanie właściwej wiadomości. Początkowa pozycja wirników (Grundstellung) była wysyłana tekstem jawnym do odbiorcy, wraz z zaszyfrowaną treścią wiadomości.

Aby odszyfrować wiadomość, odbiorca wykonywał powyższe kroki w odwrotnej kolejności: Najpierw maszyna była ustawiana zgodnie z kluczem dziennym. Odpowiedni klucz był wybierany na podstawie buchstabenkenngruppe odebranej wiadomości. Następnie operator ustawiał wirniki w pozycji startowej zapisanej w odebranej wiadomości. (W naszym wypadku DSC). Następnie odszyfrowywany był indywidualny klucz wiadomości (Ciąg TBS, kluczem jest FGT). Potem wirniki były ustawiane wg tego klucza i następowało odszyfrowanie właściwej wiadomości.

Przykładowe ustawienia Triton (źródło:http://users.telenet.be/)
133465

Procedura używana w niemieckiej marynarce wojennej była o wiele bardziej skomplikowana. Na początku wybierane były odpowiednie wirniki oraz ustalana ich kolejność. Informacje te były zapisane w Schusseltafel Allgemein. Część Innere Einstellung zawierała informacje na temat zastosowanych wirników, ich ustawień oraz kolejności. Część Aussere Einstellung pozwalała ustalić połączenia na łącznicy kablowej oraz początkowe ustawienie wirników.

Zwykle wiadomość kodowano wstępnie za pomocą specjalnej księgi kodów, zwanej Kurzsignalheft. Za jej pomocą dowolny tekst opisujący sytuację na morzu mógł być zamieniony na czteroliterowe grupy tekstu. Każda czynność czy możliwa sytuacja bojowa miała swój odpowiednik w czteroliterowej grupie. Potem konstruowany był klucz wiadomości. Wybierany był na podstawie Kennengrupenbuch. Książka ta składała się z kilku części:

  • Zuteilungslite – która mówiła, których wierszy z Kenngruppen operator może użyć dla swojej maszyny szyfrującej,
  • Tauschtafelplan – wskazywała kolumny, z których należy odczytać Kenngruppen dla aktualnego dnia
  • Spalten – część zawierająca Kenngruppen
tabela kluczy kenngruppen
Tablica bigramów (users.telenet.be)

Operator wybierał dwie dowolne wartości spośród dostępnych, np.: LJG i MKY. Pierwszy z kluczy zwany był Schlusselkenngruppe, natomiast drugi Verfahrenkenngruppe. Na początku pierwszego ciągu i na końcu drugiego ciągu dodawana jest dowolna litera, np.: CLJG i MKYF. Potem były one odpowiednio przekształcane. Zapiszmy te dwa klucze jeden pod drugim: CLJG MKYF Za pomocą tzw. tabeli bigramów (zwanej Doppelbuchstabentauschtafel B) klucz wiadomości był szyfrowany. W naszym przypadku mogłoby to wyglądać następująco: CM=WA, LK=EM, JY=TU, GF=SA.

Ciąg ten (WAEM TUSA) jest nadawany na początku i na końcu szyfrowanej wiadomości. Następnie operator zaglądał do Schlusseltafel M Allgemein – Aussere Einstellung. Z tej karty mógł odczytać ustawienie początkowe wirników – Grundstellung. Po ustawieniu bębnów na pozycje wskazywane przez Grundstellung szyfrowany był indywidualny klucz wiadomości. Potem ustawiano maszynę wg otrzymanego ciągu i szyfrowano właściwą wiadomość.

Procedura deszyfrowania była odwróceniem działań podjętych wcześniej. Klucz zapisany na początku wiadomości odczytywano i zapisywano jeden pod drugim. Następnie za pomocą Doppelbuchstabentauschtafel zamieniano odczytane dwuznaki na bazowe. Potem patrzono na pierwszy ciąg (Schluselkenngruppe). Zaglądano do Gruppenliste i szukano numeru odpowiadającego odczytanemu kluczowi.

Gruppenliste (enigma.hoerenberg.com)
Zuteilungsliste (enigma.hoerenberg.com)

Następnie zaglądano do Zuteilungsliste – była to ostatnia część Kengruppenbuch. Szukano, jakiej grupie maszyn odpowiada odczytana wcześniej cyfra. Na tej podstawie można było odnaleźć kartę z ustawieniami i kolejnością wirników, a także ustawieniem bazowym wirników. Następnie ustawiano bębny i ich pozycję wg odczytanych danych. Deszyfrowano właściwy klucz wiadomości z Schlusselkenngruppe. Następnie ustawiano pozycję wirników na odczytany klucz i deszyfrowano właściwą wiadomość.

W wiadomościach stosowano różne skróty, które miały przede wszystkim zmniejszyć czas przesyłania szyfrogramu, oraz utrudnić ewentualną kryptoanalizę. W Wermachcie i Luftwaffe stosowane były następujące skróty:

  • KLAM – nawias
  • ZZ – przecinek
  • X – koniec sentencji
  • YY – punkt lub kropka
  • FRAGE/FRAGEZ/FRAQ – różne zapisy znaku ?
  • CH było często zapisywane jako Q, np.: AQTUNG

W Kriegsmarine stosowane były nieco inne skróty:

  • X – kropka
  • Y – przecinek
  • UD – znak zapytania
  • XX – dwukropek
  • YY – ukośnik/myślnik/łącznik
  • KK***KK – nawias

Słowem zakończenia

Enigma jest maszyną, która fascynuje mnie cały czas. Jej zasada działania jest bardzo prosta, a ilość kombinacji niewyobrażalnie duża. Mechanizacja szyfrowania stanowiła spory krok do przodu w stosunku do tego, co obserwowaliśmy w pierwszej wojnie światowej. Nowy mechanizm był na tyle dobry, że nie pokonali go ani Francuzi, ani Anglicy. Udaną walkę stoczyli natomiast polscy kryptolodzy z Oddziału II Biura Szyfrów. Tajemnica Enigmy została poznana już w 1932 roku. Niemcy posiadali również inne, równie ciekawe maszyny szyfrujące, takie jak maszyna Lorenza. To jednakże temat już na inny odcinek.

Wybrane dla Ciebie
Komentarze (22)