Enigma gép
Az Enigma-kód egyik fő hibája az volt, hogy egy betűt soha nem lehetett önmagában kódolni. Más szóval, egy “M” betűt soha nem lehetett “M”-ként kódolni. Ez hatalmas hiba volt az Enigma-kódban, mert a kódtörők így egy olyan információt kaptak, amelyet felhasználhattak az üzenetek dekódolásához. Ha a kódtörők ki tudtak találni egy szót vagy kifejezést, amely valószínűleg szerepelt az üzenetben, akkor ezt az információt felhasználhatták a kód feltörésének megkezdéséhez. Mivel a németek az üzenet elején mindig időjárásjelentést küldtek, és az üzenet végén általában a “Heil Hitler” kifejezés szerepelt, a dekódolók tudták, hogy milyen kifejezéseket kell keresniük. A dekódolók össze tudtak hasonlítani egy adott kifejezést a kód betűivel, és ha a kifejezés egy betűje megegyezett a kód egy betűjével, akkor tudták, hogy a kódnak az a része nem tartalmazza a kifejezést. A dekódolók ezután elkezdhették feltörni a kódot a kieséses módszerrel.
Keresd meg a “RAIN” szó kódolásának lehetséges ellenfeleit az alábbi kódolt karakterláncban. (A % szimbólumot ismeretlen betűk jelölésére használjuk).
Kódolt üzenet E R W N I K K O L K M M M M M Frázis R A I N % % % % % % % % % % % % % % RAIN nem kódolható ERWN-ként, mert a RAIN-ban lévő N és az ERWN-ben lévő N megegyezik. Mivel az N nem kódolható önmagaként, nem ez a kódolás.
Toljuk el az üzenetünket egy résszel jobbra, és nézzük meg, hogy az eredmény egy érvényes kódolás lesz-e.
Kódolt üzenet E R W N I K K O L K M M M M M Frázis % R A I N % % % % % % % % % % A RAIN nem kódolható RWNI-ként, mert a RAIN-ban lévő R megegyezik az RWNI-ban lévő R-vel. Váltsunk újra.
Kódolt üzenet E R W N I K K O L K M M M M M Frázis % % R A I N % % % % % % % % % RAIN nem kódolható WNIK-ként, mert a RAIN-ban lévő I megegyezik a WNIK-ban lévő I-vel.
Kódolt üzenet E R W N I K K O L K M M M M M Frázis % % % R A I N % % % % % % RAIN NIKO-ként kódolható, mert a két kifejezésben nincs egyező betű. Tehát a NIKO a RAIN egy lehetséges kódolása.
Ha megismételjük ezt a folyamatot, akkor azt találjuk, hogy a NIKO, IKOL, KOLK, OLKM, LKMM, KMMM és MMMM mind a RAIN lehetséges kódolásai, mivel a RAIN és a kódolás között nincs egyező betű. Az rendben van, hogy az MMMM kódolhatta a RAIN-t, még akkor is, ha ez azt jelenti, hogy az M kódolná az R, A, I és N betűket, mert ne feledjük, hogy minden billentyű lenyomásakor az Enigma gépben a betűk leképezése megváltozik.
Az azonban nem garantált, hogy a RAIN egyáltalán kódolva van ebben a stringben, de a dekódolóknak jó kiindulási pontot adott az üzenetek dekódolásához.
Alan Turing és Gordon Welchman megtervezte a Bombe gép nevű gépet, amely elektromos áramkörök segítségével 20 perc alatt megoldott egy Enigma kódolt üzenetet. A Bombe gép megpróbálta meghatározni az Enigma gép rotorjainak és a dugaljnak a beállításait, amelyeket egy adott kódolt üzenet elküldéséhez használtak.
A szabványos brit Bombe gép lényegében 36 Enigma gép volt összedrótozva, így a Bombe gép egyszerre több Enigma gépet szimulált. A legtöbb Enigma gépnek három rotorja volt, és hogy ezt a Bombe-ban is megjelenítsék, a Bombe minden egyes Enigma-szimulátorának három dobja volt, minden rotorhoz egy-egy.
Bombe gép dobjai
A Bombe dobjai színkóddal voltak ellátva, hogy megfeleljenek annak, hogy melyik rotor melyik rotorját szimulálták. Míg egy 3 rotoros Enigma gép egyszerre csak három rotorral dolgozott, addig több rotor közül lehetett választani. A dobok úgy voltak elrendezve, hogy a három közül a legfelső az Enigma kódoló bal oldali rotorját, a középső a középső rotorját, az alsó pedig a jobb oldali rotorját szimulálta. A dobok elfordultak, hogy új konfigurációt próbáljanak ki. A felső dobok minden egyes teljes elfordulásakor a középső dobok egy pozícióval növekedtek, és ugyanígy a középső és az alsó dobok is, így összesen 26 × 26 × 26 × 26 = 17 576 pozíciója volt a 3 rotoros Enigma kódolónak.
Ezután egy adott rotor-konfigurációhoz (a dobok minden egyes elfordulásakor) a Bombe gép megtippelt egy dugaljbeállítást, mondjuk “A csatlakozik Z-hez”. Ezután végigfutott, és meghatározta, hogy az összes többi betűnek mire kell állnia a dugaljzaton. Ha bármilyen ellentmondás merült fel, mondjuk, arra következtetett, hogy “A W-hez csatlakozik”, akkor az kell, hogy legyen, hogy A nem kapcsolódik Z-hez a dugólapon, ellentmondás merül fel. Mivel a többi betűkapcsolatot, amit a gép az imént kitalált, egy hamis feltételezés alapján határozta meg (nevezetesen azt a feltételezést, hogy A kapcsolódik Z-hez), ezek a kombinációk mind érvénytelenek, és a Bombe gép tudja, hogy később nem vesztegeti az idejét egyik ilyen kombináció ellenőrzésére sem. Tegyük fel tehát, hogy a gép kitalálta, hogy A kapcsolódik Z-hez, majd a gép arra következtet, hogy ha A kapcsolódik Z-hez, akkor B-nek kapcsolódnia kell E-höz. Ha később megállapítja, hogy A nem kapcsolódik Z-hez, akkor tudja, hogy B nem kapcsolódik E-höz. Miután egy ilyen ellentmondás felmerül, a Bombe gép nem fogja újra kitalálni, hogy A kapcsolódik Z-hez, és tudja, hogy nem fogja kitalálni, hogy B kapcsolódik E-höz, és így tovább. A Bombe-gép eltolja a rotor pozícióit, és új találgatást választ, és ezt a folyamatot addig ismétli, amíg a beállítások kielégítő elrendezése meg nem jelenik. Mivel az elektromos áramkörök nagyon gyorsan képesek számításokat végezni, a Bombe gép körülbelül 20 perc alatt képes végigmenni az összes rotor-kombináción.
A dobok minden egyes pozíciójánál megvizsgálná, hogy az elrendezés nem vezet-e logikai ellentmondáshoz, kizárva ezzel az adott beállítást. Ha a teszt nem vezetett ellentmondáshoz, a gép leállt, és a dekóder megjegyezte az adott konfigurációt, mint lehetséges megoldást. Ezután a gép újraindul, és további konfigurációkat tesztel. Ezek a tesztek leszűkítenék a lehetséges konfigurációk listáját, és a megoldásjelölteket tovább tesztelnék, hogy kizárják azokat, amelyek nem működnének. Általában sok sikertelen megoldásjelölt volt, mire megtalálták a helyes megoldást.