Maszyna Enigma
Poważną wadą kodu Enigmy było to, że litera nigdy nie mogła być zakodowana jako ona sama. Innymi słowy, „M” nigdy nie zostanie zakodowane jako „M”. Była to ogromna wada kodu Enigmy, ponieważ dawała ona szyfrantom informację, którą mogli wykorzystać do odszyfrowania wiadomości. Jeśli szyfrantom udało się odgadnąć słowo lub frazę, która prawdopodobnie pojawi się w wiadomości, mogli użyć tej informacji, aby rozpocząć łamanie kodu. Ponieważ Niemcy zawsze wysyłali raport pogodowy na początku wiadomości, a na końcu wiadomości zwykle umieszczali frazę „Heil Hitler”, dekryptory wiedziały, jakich zwrotów szukać. Dekoderzy mogli porównać dany zwrot z literami w kodzie, a jeśli litera we frazie pasuje do litery w kodzie, wiedzieli, że ta część kodu nie zawierał zwrot. Dekodery mogły wtedy rozpocząć łamanie kodu metodą eliminacji.
Znajdź możliwych pretendentów do zakodowania słowa „RAIN” w zakodowanym łańcuchu poniżej. (Symbol % jest używany do oznaczania nieznanych liter).
Kodowana wiadomość E R W N I K .
O L K M M M M Fraza R A I N % % % % % % % % % % % RAIN nie może być zakodowany jako ERWN, ponieważ N w RAIN i N w ERWN pasują do siebie. Ponieważ N nie może być zakodowane jako samo w sobie, to nie jest to kodowanie.
Przesuńmy naszą wiadomość o jeden slot w prawo i zobaczmy, czy wynik jest poprawnym kodowaniem.
Kodowana wiadomość E R W N I K .
O L K M M M M Fraza % R A I N % % % % % % % % .
% % % RAIN nie może być zakodowany jako RWNI, ponieważ R w RAIN pasuje do R w RWNI. Przesuńmy jeszcze raz.
Zakodowana wiadomość E R W N I K .
O L K M M M M Phrase % % .
% .
% R A I N % % % % % % % RAIN nie może być zakodowany jako WNIK, ponieważ I w RAIN pasuje do I w WNIK.
Zakodowana wiadomość E R W N I K .
O L K M M M M Phrase % % % R A I N % % % % % % .
% % RAIN może być zakodowany jako NIKO, ponieważ te dwie frazy nie mają pasujących do siebie liter. Tak więc NIKO jest możliwym kodowaniem RAIN.
Jeśli powtórzymy ten proces, okaże się, że NIKO, IKOL, KOLK, OLKM, LKMM, KMMM i MMMM są wszystkie możliwe kodowania RAIN, ponieważ żadne litery nie pasują do siebie między RAIN i kodowania. W porządku jest, że MMMM może zakodować RAIN, nawet jeśli oznacza to, że M zakoduje R, A, I, i N, ponieważ pamiętaj, że przy każdym naciśnięciu klawisza, mapowanie liter w maszynie Enigma zmienia się.
Nie jest jednak zagwarantowane, że RAIN jest w ogóle zakodowany w tym ciągu, ale dało to dekoderom dobry punkt wyjścia do odszyfrowania wiadomości.
Alan Turing i Gordon Welchman zaprojektowali maszynę zwaną maszyną Bombe, która używała obwodów elektrycznych do rozwiązania zakodowanej wiadomości Enigmy w czasie poniżej 20 minut. Maszyna Bombe miała próbować określić ustawienia wirników i wtyczki maszyny Enigma użytej do wysłania danej zakodowanej wiadomości.
Standardowa brytyjska maszyna Bombe była w zasadzie 36 maszynami Enigma połączonymi razem, w ten sposób maszyna Bombe mogła symulować kilka maszyn Enigma jednocześnie. Większość maszyn Enigma miała trzy wirniki i aby odwzorować to w Bombe, każdy z symulatorów Enigmy w Bombe miał trzy bębny, po jednym dla każdego wirnika.
Bębny maszyn Bombe
Bębny Bombe były oznaczone kolorami, aby odpowiadały temu, który wirnik symulowały. Podczas gdy trójwirnikowa maszyna Enigma używała tylko trzech wirników naraz, jest ich więcej do wyboru. Bębny były ustawione w taki sposób, że górny z trzech symulował lewy wirnik scramblera Enigmy, środkowy symulował wirnik środkowy, a dolny symulował wirnik prawy. Bębny obracały się, aby wypróbować nową konfigurację. Dla każdego pełnego obrotu górnego bębna, środkowy bęben zwiększał się o jedną pozycję, podobnie dla środkowego i dolnego bębna, co w sumie dawało 26 × 26 × 26 = 17 576 pozycji trójwirnikowego scramblera Enigmy.
Następnie, dla danej konfiguracji wirnika (przy każdym obrocie bębnów), maszyna Bombe zgadywała ustawienie wtyczki, powiedzmy „A jest podłączone do Z”. Następnie sprawdzała i określała, do czego muszą być ustawione wszystkie pozostałe litery na tabliczce. Jeśli pojawiły się sprzeczności, powiedzmy, wydedukowała, że „A było połączone z W”, to musi być tak, że A nie jest połączone z Z na tablicy, powstaje sprzeczność. Ponieważ pozostałe połączenia liter, które maszyna właśnie wymyśliła, zostały określone na podstawie fałszywego założenia (mianowicie założenia, że A jest połączone z Z), wszystkie te kombinacje są nieważne, a maszyna Bombe wie, że nie powinna tracić czasu na późniejsze sprawdzanie tych kombinacji. Jeśli później okaże się, że A nie jest połączone z Z, to maszyna wie, że B nie jest połączone z E. Po pojawieniu się takiej sprzeczności maszyna Bombe nie zgadnie, że A jest połączone z Z, nie zgadnie też, że B jest połączone z E itd. Maszyna Bombe przesuwa pozycje wirnika, wybiera nowe przypuszczenie i powtarza ten proces, aż pojawi się satysfakcjonujący układ ustawień. Ponieważ obwody elektryczne mogą wykonywać obliczenia bardzo szybko, maszyna Bombe może przejść przez wszystkie kombinacje wirników w ciągu około 20 minut.
Na każdej pozycji bębnów, konfiguracja byłaby testowana, aby zobaczyć, czy konfiguracja prowadzi do logicznej sprzeczności, wykluczając to ustawienie. Jeśli test nie doprowadziłby do sprzeczności, maszyna zatrzymałaby się, a dekoder odnotowałby tę konfigurację jako rozwiązanie kandydujące. Następnie, maszyna jest ponownie uruchamiana i testowane są kolejne konfiguracje. Testy te zawężały listę możliwych konfiguracji, a rozwiązania kandydujące były dalej testowane w celu wyeliminowania tych, które nie zadziałały. Zwykle było wiele nieudanych rozwiązań kandydujących, zanim znaleziono właściwe.