Esittely §
Enigma-salakirjoitus oli kenttäsalakirjoitus, jota saksalaiset käyttivät toisen maailmansodan aikana. Enigma on yksi tunnetuimmista historiallisista salauskoneista, ja se viittaa itse asiassa useisiin samankaltaisiin salauskoneisiin. Ensimmäisen Enigma-koneen keksi saksalainen insinööri Arthur Scherbius ensimmäisen maailmansodan lopussa. Sitä käytettiin kaupallisesti 1920-luvun alkupuolelta lähtien, ja sen ottivat käyttöön myös useiden maiden sotilas- ja hallintoviranomaiset – tunnetuimpana natsi-Saksa ennen toista maailmansotaa ja sen aikana. Enigmasta valmistettiin useita eri malleja, mutta saksalaisen armeijan malli, Wehrmacht Enigma, on versio, josta puhutaan yleisimmin.
Jos haluat salata joitakin omia Enigma-viestejäsi, katso javascript-esimerkki.
Algoritmi §
Tässä osiossa puhutaan Enigma I:stä eli Wehrmacht Enigmasta, muut variantit ovat toiminnaltaan samanlaisia. Enigman ”avain” koostuu useista elementeistä:
- roottorit ja niiden järjestys
- roottoreiden aloitusasennot
- Rengasasetukset eli ringstellung
- Steckerverbindungen eli tulppalevyasetukset
Tietoa menettelytavoista, joita saksalaiset käyttivät 2. maailmansodan aikana lähetettäessä Enigma-viestejä, mukaanlukien indikaattoreiden asetteluohjeet, löytyy tältä kuvaukselta.
Roottorit §
Asettele, että roottorimme ovat I,II,III, jotka liikkuvat vasemmalta oikealle, ja yritämme koodata kirjainta ’A’. Oletamme toistaiseksi, että kun kirjain ’A’ salakirjoitetaan, jokainen roottori on alkuasennossaan (’AAA’).Koska roottorit I,II,III liikkuvat vasemmalta oikealle, merkki A kulkee ensin roottorin III läpi. Jokainen roottori suorittaa yksinkertaisen korvausoperaation. Roottorin III substituutiotaulukko näkyy alla.
ABCDEFGHIJKLMNOPQRSTUVWXYZBDFHJLCPRTXVZNYEIWGAKMUSQO
B korvataan D:llä, C korvataan F:llä jne. Kun kirjain ”A” on läpäissyt roottorin, siitä tulee ulos kirjain ”B”. Kirjain ’B’ syötetään nyt roottorin II läpi, jossa se korvataan kirjaimella ’J’ jne. Tätä voidaan parhaiten havainnollistaa taulukon avulla (täydellinen kuvaus roottorien johdotuksista kunkin roottorin osalta löytyy tältä wikipedia-sivulta):
III | II | I | Reflektori | inv(I) | inv(II) | inv(III) |
A -> B | B – -> J | J -> Z | Z -> T | T -> L | L -> K | K -> U |
Kirjaimen mentyä roottoreiden läpi III,II,I se osuu heijastimeen ja käy läpi toisen yksinkertaisen substituution. Kun kirjain on poistunut heijastimesta, se lähetetään takaisin roottoreiden läpi päinvastaiseen suuntaan (tämä tarkoittaa, että käänteistä substituutiota sovelletaan).Taulukosta näemme, että kun salattu kirjain on lopussa poistunut roottorista III, jäljelle jää kirjain U. Yksi tärkeä vaihe, jota en ole vielä maininnut, on se tosiasia, että roottorit inkrementoituvat ennen kuin jokainen kirjain salataan. Jos roottoreiden alkuasento on ”FEQ”, ne kasvatetaan ensin ”FER:iin”, ennen kuin ensimmäinen kirjain salakirjoitetaan.
Roottoreiden inkrementointi §
Yleinen virhe arvoitusta toteutettaessa on olettaa, että roottorit toimivat tavallisen matkamittarin tavoin, siinä on kuitenkin muutama keskeinen ero. Jokaisessa roottorissa on lovi, joka saa sen vasemmalla puolella olevan roottorin astumaan. Roottori I saa seuraavan roottorin astumaan siirryttäessä Q:sta R:ään, roottori II siirryttäessä E:stä F:ään jne. Wermachtin arvoituksessa käytetään roottoreita I-V, myöhemmin lisättiin roottoreita, joissa oli kaksi lovea.
I | II | III | IV | V | VI | VII | VIII |
Q | E | V | J | Z | Z,M | Z,M | Z,M |
Tässä on yksi ylimääräinen hämmentävä yksityiskohta, ”kaksoisaskellus”. Kun roottori astuu, se saa myös sen oikealla puolella olevan roottorin astumaan. Tätä ei huomata, kun toinen roottori astuu, koska ensimmäinen roottori astuu aina, kun näppäintä painetaan. Kun kolmas (vasemmanpuoleisin) roottori astuu, se saa myös toisen roottorin astumaan. Tämä tarkoittaa, että koneen jakso ei ole 26x26x26, vaan ainoastaan 26x25x26.
Rengasasetukset §
Rengasasetukset (rengasasetukset) ilmoitetaan yleensä kolmen kirjaimen merkkijonona, esim. ”FAM” (tai vaihtoehtoisesti kirjaimia edustavina numeroina välillä 1-26). Edellisessä keskustelussa oletin, että kunkin roottorin yksinkertainen korvaussalaus oli kiinteä. Rengasasetuksessa on mahdollisuus siirtää korvaussalakirjoitusta seuraavasti. Kun rengasasetus on ”A” (tai 1), roottori I:n substituutio näyttää seuraavalta:
ABCDEFGHIJKLMNOPQRSTUVWXYZEKMFLGDQVZNTOWYHXUSPAIBRCJ
Kun rengasasasetus on ”B” (tai 2), roottori I:n substituutio näyttää seuraavalta:
ZABCDEFGHIJKLMNOPQRSTUVWXYEKMFLGDQVZNTOWYHXUSPAIBRCJ
Steckerverbindungen §
Steckerverbindungen (pistokelauta) on ylimääräinen turvatoimien kerros, joka muodostuu 13 johtimesta, jotka kytketään pistokepistokkeisiin Enigma-koneessa.Kukin johto yhdistää kaksi kirjainta, esim. P:n ja O:n. Nämä pariliitokset on määritelty osana avainmateriaalia. Kun kirjain kirjoitetaan, ennen kuin se menee ensimmäiseen roottoriin, se korvataan pistokepöydän mukaisesti, ja kun kirjain tulee ulos, se korvataan uudelleen pistokepöydällä ennen kuin se viedään ulos. Esimerkki plugboard-asetuksesta on seuraava: (Tämä tarkoittaa, että P ja O vaihdetaan, M ja L vaihdetaan jne.).
Jos käytämme edellä olevaa esimerkkiä, jossa kirjain ”A” salattiin roottoreilla I, II ja III alkuasennoilla AAA, meillä oli kirjain A salattuna U:ksi. Jos otamme nyt huomioon plugboardin käyttäen edellisessä kappaleessa esitettyjä plugboard-asetuksia, ”A” käännetään ensin ”C:ksi” ennen salakirjoitusta. Salakirjoitusta jatketaan tavalliseen tapaan, mutta tällä kertaa C-kirjain tulostetaan J-kirjaimena. Tämä kirjain ohjataan sitten jälleen pistoketaulun läpi korvattavaksi kirjaimella ”K”. Nyt meillä on siis A-kirjain, joka salakirjoitetaan K-kirjaimeksi, kun plugboard on käytössä. Plugboard lisää merkittävästi salakirjoituksen vahvuutta kokonaisuutena, enemmän kuin toisen roottorin lisääminen voisi.
Javascript Example §
Plaintext
avainasetukset:
rengasasetukset:
Roottorit:
Pistolevyn asetukset:
Salausteksti
Muut toteutukset §
Viestien salaamiseen pythonissa voi käyttää pycipher-moduulia. Voit asentaa sen käyttämällä pip install pycipher. Jos haluat salata viestejä Enigman salakirjoituksella (tai muulla salakirjoituksella, katso dokumentaatio täältä), katso esimerkki täältä.
Kryptoanalyysi §
Joitakin koodeja Enigma-viestien automaattiseen murtamiseen löydät kohdasta Enigman kryptoanalyysi.
Enigman murtamisen parissa on tehty paljon töitä, ja joitain menetelmiä, kuten roddingia ja buttoning upia käytettiin toisen maailmansodan aikana, mutta ne vaativat ’cribiä’ eli tunnettuja selvätekstin paloja. Näitä menetelmiä käsitellään wikipedia-sivulla.
Nykyaikaisempia lähestymistapoja ovat esimerkiksi Jim Gilloglyn artikkeli ’Ciphertext only Cryptanalysis of the Enigma’. Jatkokirje, jossa korjataan joitakin virheitä paperissa, löytyy täältä. Toinen Jim Gilloglyn artikkeliin perustuva artikkeli on Heidi Williamsin kirjoittama ’Applying Statistical Language Recognition Techniques in the Ciphertext only Cryptanalysis of Enigma’. Toinen mielenkiintoinen lähde on The Cryptographic Mathematics of Enigma.