Enigma-kone
Enigma-koodin suuri puute oli se, että kirjainta ei koskaan voitu koodata omana itsenään. Toisin sanoen kirjainta ”M” ei koskaan voitu koodata kirjaimeksi ”M”. Tämä oli valtava virhe Enigma-koodissa, koska se antoi koodinmurtajille tiedon, jota he pystyivät käyttämään viestien purkamiseen. Jos koodinmurtajat pystyivät arvaamaan sanan tai lauseen, joka todennäköisesti esiintyisi viestissä, he voisivat käyttää tätä tietoa aloittaakseen koodin murtamisen. Koska saksalaiset lähettivät aina säätiedotuksen viestin alussa ja lisäsivät yleensä lauseen ”Heil Hitler” viestin loppuun, koodinpurkajat tiesivät, mitä lauseita piti etsiä. Dekoodaajat pystyivät vertaamaan tiettyä lausetta koodin kirjaimiin, ja jos lauseen kirjain vastasi koodin kirjainta, he tiesivät, että kyseinen osa koodista ei sisältänyt lausetta. Tämän jälkeen dekooderit saattoivat aloittaa koodin murtamisen eliminointimenetelmällä.
Etsikää mahdollisia ehdokkaita sanan ”RAIN” koodaamiseksi alla olevasta koodatusta merkkijonosta. (Symbolia % käytetään merkitsemään tuntemattomia kirjaimia).
Koodattu viesti E R W N I K K O L K M M M M M Phrase R A I N % % % % % % % % % % % % % RAIN:ia ei voi koodata ERWN:ksi, koska RAIN:in N ja ERWN:in N täsmäävät. Koska N:ää ei voi koodata itsekseen, tämä ei ole koodaus.
Siirretään sanomaamme yksi korttipaikka oikealle ja katsotaan, onko tulos kelvollinen koodaus.
Koodattu viesti E R W N I K O L K M M M M M lause % R A I N % % % % % % % % % % RAIN:ia ei voida koodata RWNI:ksi, koska RAIN:in R vastaa RWNI:in R:ää. Siirretään uudelleen.
Koodattu viesti E R W N I K I K O L K M M M M M lause % % R A I N % % % % % % % % % RAIN:ia ei voi koodata WNIK:ksi, koska RAIN:in I täsmää WNIK:in I:n kanssa.
Koodattu viesti E R W N I K I K O L K M M M M M lause % % % R A I N % % % % % % RAIN voidaan koodata NIKO:ksi, koska näissä kahdessa lauseessa ei ole yhtään samanlaista kirjainta. NIKO on siis mahdollinen RAINin koodaus.
Jos toistamme tämän prosessin, huomaamme, että NIKO, IKOL, KOLK, OLKM, LKMM, KMMM ja MMMM ovat kaikki mahdollisia RAINin koodauksia, koska yksikään kirjain ei täsmää RAINin ja koodauksen välillä. On ihan ok, että MMMMMM voisi koodata RAINin, vaikka tämä tarkoittaakin, että M koodaisi R:n, A:n, I:n ja N:n, koska muistetaan, että jokaisella näppäimen painalluksella Enigma-koneen kirjainkuviointi muuttuu.
Ei ole kuitenkaan taattua, että RAIN on koodattu tähän merkkijonoon lainkaan, mutta se antoi dekoodaajille hyvän lähtökohdan viestien purkamiseen.
Alan Turing ja Gordon Welchman suunnittelivat Bombe-koneeksi kutsutun koneen, joka pystyi sähköpiirien avulla ratkaisemaan Enigma-koodatun viestin alle 20 minuutissa. Bombe-kone pyrki selvittämään Enigma-koneen roottorien ja pistokkeen asetukset, joita käytettiin tietyn koodatun viestin lähettämiseen.
Vakiomallinen brittiläinen Bombe-kone oli pohjimmiltaan 36 yhteen kytkettyä Enigma-konetta, ja tällä tavoin Bombe-kone simuloi useita Enigma-koneita samanaikaisesti. Useimmissa Enigma-koneissa oli kolme roottoria, ja tämän edustamiseksi Bombe-koneessa jokaisessa Bombe-koneen Enigma-simulaattorissa oli kolme rumpua, yksi kutakin roottoria varten.
Bombe-koneen rummut
Bomben rummut oli värikoodattu sen mukaan, mitä roottoria ne simuloivat. Vaikka 3-roottorinen Enigma-kone käytti vain kolmea roottoria kerrallaan, niitä on useampia. Rummut oli järjestetty siten, että kolmesta ylimmäinen simuloi Enigma-sekoituskoneen vasenta roottoria, keskimmäinen simuloi keskimmäistä roottoria ja alimmainen simuloi oikeanpuoleista roottoria. Rummut kääntyivät kokeillakseen uutta kokoonpanoa. Ylimmän rummun jokaisella täydellä kierroksella keskimmäistä rumpua kasvatettiin yhdellä asennolla, ja samoin keskimmäistä ja alinta rumpua, jolloin 3-roottorisen Enigma-salauslaitteen asentoja oli yhteensä 26 × 26 × 26 = 17 576.
Tällöin Bombe-kone arveli tietyn roottorikonfiguraation kohdalla (rumpujen jokaisella kierroksella) pistokekortin asetusta, vaikkapa ”A on kytketty Z:hen”. Sitten se kävi läpi ja määritteli, mihin kaikki muut kirjaimet on asetettava pistoketaulussa. Jos syntyi ristiriitoja, esimerkiksi se päätteli, että ”A on kytketty W:hen”, niin silloin on oltava niin, että A ei ole kytketty Z:hen pistorasiaan, syntyy ristiriita. Koska muut kirjainsovitukset, jotka kone juuri keksi, määriteltiin väärän oletuksen perusteella (nimittäin sen oletuksen perusteella, että A on kytketty Z:hen), kaikki nuo yhdistelmät ovat pätemättömiä, ja Bombe-kone tietää, ettei sen kannata tuhlata aikaa minkään tällaisen yhdistelmän tarkistamiseen myöhemmin. Oletetaan siis, että kone arvaa, että A on yhteydessä Z:hen, ja sitten kone päättelee, että jos A on yhteydessä Z:hen, niin B:n on oltava yhteydessä E:hen. Jos se myöhemmin toteaa, että A ei ole yhteydessä Z:hen, se tietää, että B ei ole yhteydessä E:hen. Tällaisen ristiriidan synnyttyä Bombe-kone ei arvaa enää, että A on yhteydessä Z:hen, ja se tietää, että se ei arvaa, että B on yhteydessä E:hen, ja niin edelleen. Bombe-kone siirtää roottorin asentoja ja valitsee uuden arvauksen ja toistaa tätä prosessia, kunnes saadaan tyydyttävä asetusten järjestely. Koska sähköpiirit pystyvät suorittamaan laskutoimituksia hyvin nopeasti, Bombe-kone voi käydä läpi kaikki roottoriyhdistelmät noin 20 minuutissa.
Kussakin rumpujen asennossa testattaisiin, johtaako asetelma loogiseen ristiriitaan, jolloin kyseinen asetus suljettaisiin pois. Jos testi ei johtaisi ristiriitaan, kone pysähtyisi ja dekooderi merkitsisi kyseisen konfiguraation ehdokasratkaisuksi. Sitten kone käynnistetään uudelleen ja testataan lisää konfiguraatioita. Nämä testit kaventaisivat mahdollisten konfiguraatioiden luetteloa, ja ratkaisukandidaatteja testattaisiin edelleen sellaisten ratkaisujen poistamiseksi, jotka eivät toimisi. Epäonnistuneita ratkaisukandidaatteja oli yleensä useita, ennen kuin oikea ratkaisu löytyi.