Enigma-maskinen
En stor brist med Enigma-koden var att en bokstav aldrig kunde kodas som sig själv. Med andra ord skulle ett ”M” aldrig kunna kodas som ett ”M”. Detta var en stor brist i Enigmakoden eftersom det gav kodbrytarna en bit information som de kunde använda för att avkryptera meddelanden. Om kodbrytarna kunde gissa ett ord eller en fras som troligen skulle förekomma i meddelandet kunde de använda denna information för att börja knäcka koden. Eftersom tyskarna alltid skickade en väderleksrapport i början av meddelandet och vanligtvis inkluderade frasen ”Heil Hitler” i slutet av meddelandet fanns det fraser som avkodarna visste att de skulle leta efter. Avkodare kunde jämföra en viss fras med bokstäverna i koden, och om en bokstav i frasen stämde överens med en bokstav i koden visste de att den delen av koden inte innehöll frasen. Avkodarna kunde sedan börja knäcka koden med hjälp av en elimineringsprocess.
Hitta möjliga kandidater för kodningen av ordet ”RAIN” i den kodade strängen nedan. (Symbolen % används för att beteckna okända bokstäver).
Kodat meddelande E R W N I K .
O L K M M M M M Phrase R A I N % % % % % % % % % % % % % RAIN kan inte kodas som ERWN eftersom N i RAIN och N i ERWN passar ihop. Eftersom N inte kan kodas som sig självt är detta inte kodningen.
Låt oss flytta vårt meddelande en slits till höger och se om resultatet är en giltig kodning.
Kodat meddelande E R W N I K .
O L K M M M M M Fras % R A I N % % % % % % % % % % RAIN kan inte kodas som RWNI eftersom R i RAIN matchar R i RWNI. Låt oss byta igen.
Kodat meddelande E R W N I K .
O L K M M M M M Fras % % R A I N % % % % % % % % % RAIN kan inte kodas som WNIK eftersom I:et i RAIN matchar I:et i WNIK.
Kodat meddelande E R W N I K .
O L K M M M M M Fras % % % R A I N % % % % % % RAIN kan kodas som NIKO eftersom de två fraserna inte har några bokstäver som passar ihop. Så NIKO är en möjlig kodning av RAIN.
Om vi upprepar denna process finner vi att NIKO, IKOL, KOLK, OLKM, LKMM, KMMM och MMMM alla är möjliga kodningar av RAIN eftersom det inte finns några bokstäver som stämmer överens mellan RAIN och kodningen. Det är okej att MMMMMM skulle kunna koda RAIN även om detta innebär att M skulle koda R, A, I och N eftersom man ska komma ihåg att vid varje tangenttryckning ändras bokstavsmappningen i en Enigma-maskin.
Det är dock inte garanterat att RAIN överhuvudtaget är kodat i denna sträng, men det gav avkodarna en bra utgångspunkt för att dekryptera meddelanden.
Alan Turing och Gordon Welchman konstruerade en maskin kallad Bombe-maskinen som med hjälp av elektriska kretsar löste ett Enigma-kodat meddelande på under 20 minuter. Bombe-maskinen skulle försöka bestämma inställningarna av rotorerna och pluggbrädan i Enigma-maskinen som användes för att skicka ett visst kodat meddelande.
Den vanliga brittiska Bombe-maskinen bestod i huvudsak av 36 Enigma-maskiner som var kopplade till varandra, på detta sätt kunde Bombe-maskinen simulera flera Enigma-maskiner samtidigt. De flesta Enigma-maskiner hade tre rotorer och för att representera detta i Bombe hade varje Enigma-simulator i Bombe tre trummor, en för varje rotor.
Bombe-maskinens trummor
Bombens trummor var färgkodade för att motsvara vilken rotor de simulerade. Även om en Enigma-maskin med tre rotorer endast använde tre rotorer åt gången finns det fler att välja mellan. Trummorna var arrangerade så att den översta av de tre simulerade den vänstra rotorn i Enigmaförvrängaren, den mellersta simulerade den mellersta rotorn och den nedersta simulerade den högra rotorn. Trummorna vände sig för att prova en ny konfiguration. För varje hel rotation av de övre trummorna ökades de mellersta trummorna med en position, och på samma sätt för de mellersta och nedre trummorna, vilket ger totalt 26 × 26 × 26 × 26 = 17 576 positioner för Enigmaförvrängaren med tre rotorer.
För en given rotorkonfiguration (vid varje rotation av trummorna) skulle Bombe-maskinen göra en gissning om en inställning av en pluggplatta, till exempel ”A är ansluten till Z”. Den gick sedan igenom och bestämde vad alla andra bokstäver måste vara inställda på på stickplattan. Om några motsägelser uppstod, till exempel om den drog slutsatsen att ”A var ansluten till W”, måste det vara så att A inte är ansluten till Z på stickplattan, en motsägelse uppstod. Eftersom de andra bokstavsmappningar som maskinen just kom fram till bestämdes utifrån ett falskt antagande (nämligen antagandet att A är ansluten till Z), är alla dessa kombinationer ogiltiga, och Bombe-maskinen vet att den inte ska slösa tid på att kontrollera någon av dessa kombinationer senare. Om maskinen senare fastställer att A inte är ansluten till Z, vet den att B inte är ansluten till E. Om den senare fastställer att A inte är ansluten till Z, vet den att B inte är ansluten till E. När en sådan motsägelse uppstår, kommer Bombe-maskinen inte att gissa att A är ansluten till Z igen, och den vet att den inte kommer att gissa att B är ansluten till E, och så vidare. Bombe-maskinen flyttar rotorernas positioner och väljer en ny gissning och upprepar denna process tills ett tillfredsställande arrangemang av inställningar uppstår. Eftersom elektriska kretsar kan utföra beräkningar mycket snabbt kan Bombe-maskinen gå igenom alla rotorkombinationer på cirka 20 minuter.
Vid varje position av trummorna skulle konfigurationen testas för att se om konfigurationen ledde till en logisk motsägelse, vilket utesluter den inställningen. Om testet inte ledde till en motsägelse skulle maskinen stanna och avkodaren skulle notera den konfigurationen som en möjlig lösning. Därefter startas maskinen på nytt och fler konfigurationer testas. Dessa tester skulle begränsa listan över möjliga konfigurationer och kandidatlösningarna skulle testas ytterligare för att eliminera dem som inte skulle fungera. Det fanns vanligtvis många misslyckade kandidatlösningar innan man hittade den rätta.