Lorenz SZ-40/42

Lorenz Schlüssel-Zusatz SZ42 tai Lorenz SZ-40/42 (tunnetaan myös lempinimillä Tunny ja Lorenz-kone) oli Natsi-Saksan sotilasyksiköiden käyttämä korkeantason salauslaite. Britannian viestitiedustelu käytti akselivaltojen salatusta muusta kuin Morse-sähkötysliikenteestä nimeä Fish, matkien saksalaisten käyttämää nimeä ”Sägefisch” eli ”sahakala”. Lorenzin lempinimeksi annettiin Tunny, jota käytettiin ensin vain Berliinin ja Thessalonikin välisestä yhteydestä, jonka nimeksi vaihdettiin sittemmin Codfish. Siemens & Halsken T43 ja T52 saivat vastaavasti nimet Thrasher ja Sturgeon.

Saksalaisten varhaisempi salauslaite Enigma toimi viestiyhteyksistä erillään: liikenne koodattiin ja dekoodattiin Enigmalla ja lähetettiin sähkötysyhteydellä. Lorenz SZ-40/42 oli puolestaan integroitu kaukokirjoittimeen: laite käytti Vernam-koodausta eli muunsi kaukokirjoittimen lähettämää liikennettä generoimalla avainvirran ja yhdistämällä sen alkuperäiseen viestiin Boolen algebran ”ehdoton tai” -operaatiolla (XOR). Vastaanottavassa päässä generoitiin sama avainvirta ja yhdistettiin se jälleen XOR-operaatiolla vastaanotettuun viestiin lähetyksen dekoodaamiseksi. Salaus oli siis symmetrinen.

Lorenz-yhtiö valmisti kaukokirjoittimia vuodesta 1900 alkaen ja 1930-luvun lopulla Natsi-Saksan hallitus tilasi yhtiöltä Enigmaa vahvemmaksi suunnitellun salauslaitteen. Paradoksaalisesti Lorenz oli tuolloin amerikkalaisen ITT-yhtiön omistuksessa saksalaisen tytäryhtiön Standard Elektrizitätsgesellschaft kautta.

Rakenne

Lorenz SZ-laitteen looginen toiminta selvitettiin Bletchley Parkissa ja toimintaa täydellisesti matkiva laite rakennettiin huomattavasti ennen kuin kryptoanalysoijat saivat käsiinsä ensimmäisen aidon laitteen, joka tapahtui vasta toisen maailmansodan loppumetreillä. Toisin kuin Enigmassa, Lorenzin roottorit eivät toimineet muuttuvana virtapiirinä joka ohjasi näppäinpainalluksia merkkilampuille. Bletchley Parkin tutkijat antoivat konetta analysoidessaan roottoreille nimet niiden arvellun ja sittemmin arvellun mukaiseksi havaitun toimintaperiaatteen mukaan: 1-5, 1-5 ja 37/61.

Oheinen taulukko on lainattu ja suomennettu englanninkielisestä wikipediasta. Tästä eteenpäin -roottorista käytetään nimeä K, -roottorista P ja -roottorista M.

Salauslaite oli sisäänrakennettu normaaliin kaukokirjoittimeen, joka käytti Baudot-koodia, tarkkaan ottaen ITA2 -koodausta joka on mm. radioamatöörien käytössä nykyäänkin. Itse salausosa generoi näennäisesti satunnaisen avainvirran joka yhdistettiin salausta varten XOR-operaation avulla alkuperäiseen viestiin. Avainvirran kunkin merkin viisi bittiä tuotettiin K- ja P-pyörillä kahdessa osassa, jotka yhdistettiin XOR-operaatiolla lopulliseksi avaimeksi A:

A = K-avain ⊕ P-avain

Jokaisessa pyörässä oli oma määränsä nokkia jotka saatettiin asettaa käyttöön tai pois. K-pyörät siirtyivät yhdessä askelen jokaista syötettyä merkkiä kohti ja niiden antamat 1/0-tilat määräytivät asetetuista nokista. Myös P-pyörät kääntyivät yhtä aikaa, mutta eivät joka merkillä, vaan M-pyörien ohjaamana. M61-pyörä eteni askelen joka merkillä ja sen käyttöön asetetut nokat ohjasivat M37-pyörän askellusta, tämä ohjasi vastaavasti P-pyöräpakan askellusta. Koska pyörien nokkaluvuilla ei ollut yhteistä tekijää, avaimen kiertoaika saatiin hyvin pitkäksi. On kuitenkin huomattava, että vain puolet K- ja P-pakan mahdollisista nokka-asetuksista tuottaa erilaisia lopullisia avaimia, sillä toinen puolet on edellisten käänteisarvoja, joista XOR-operaatio tuottaa samat tulokset.

Käyttö

Jokaisessa Tunny-yhteydessä oli neljä SZ-laitetta, lähettävä ja vastaanottava laite molemmissa päissä. Jotta koodaus ja purku onnistuisi, lähettävä ja vastaanottava laite piti asetella samoihin alkuarvoihin: Päälle ja pois asetetut nokat sekä pyörien alkuasennot. Nokkien asetuksia vaihdeltiin harvoin ennen kesää 1944. P-pyörien nokka-asetukset vaihdettiin alun perin neljännesvuosittain mutta myöhemmin kuukausittain. K-pyörien asetukset vaihtuivat kuukausittain mutta M-pyörien päivittäin.

Lähetyksen aluksi viestikohtaiset pyörien aloitusasennot ilmoitettiin salaamattomalla 12-merkkisellä indikaattorilla jota verrattiin koodikirjaan, josta luettiin pyörien alkuasennot. Lokakuusta 1942 alkaen siirryttiin käyttämään QEP-kirjaa, joka saattoi sisältää sadasta ylöspäin eri koodia ja joka vaihdettiin kun koodit oli käytetty. QEP-kirjasta valittiin koodi jonka kaksi viimeistä merkkiä lähetettiin vastaanottajalle asetusten tekoa varten. Samoja viestiasetuksia ei ollut tarkoitus käyttää kahdesti, mutta joskus niin tehtiin silti, mistä oli seurauksena päällekkäisyys (engl. depth) jota kryptoanalyytikot saattoivat käyttää apuna salauksen murtamiseen.

Kuten kaukokirjoituksessa oli tapana, selkoteksti kirjoitettiin ensin reikänauhalle. Tämän jälkeen koneenkäyttäjä otti yhteyden vastaanottavaan käyttäjään, kytki salausosan toimintaan ja ajoi nauhan lukijan läpi. Vastaanottaja kytki vastaavasti salausosan toimintaan ja purettu selkoteksti tulostui nauhalle.

Tunnyn kryptoanalyysi

Eräs saksalainen salauskoneen käyttäjä teki virheen lähettämällä kaksi viestiä samalla avaimella koodattuna. Pitkälti tämän virheen avulla Bletchley Parkin kryptoanalyytikot pystyivät selvittämään salauskoneen perustoiminnan.

Viestien sieppaus

Morse-viestintää kuuntelevilla Y Station -asemilla tarkkailijat käyttivät Tunny-liikenteestä nimitystä new music. Tätä alettiin siepata ulkoministeriön Y-asemalla Camberwellissä. Resurssien puutteen vuoksi se ei vielä vuonna 1941 ollut tärkeysjärjestyksessä korkealla. Kentiin perustettiin uusi Y-asema kuuntelemaan erityisesti Tunny-liikennettä.

Koodin murtaminen

30. elokuuta 1941 noin 4 000 merkin pituinen viesti lähetettiin Ateenasta Wieniin. Vastaanotto epäonnistui ja vastaanottaja lähetti salaamattoman pyynnön lähettää viesti uudestaan. Lähettäjä lähetti uuden, lähes samansisältöisen viestin samoilla aloitusarvoilla (HQIBPEXEZMUG), mikä oli kielletty toimintatapa. Näiden kahden päällekkäisyyksiä sisältävän viestin perusteella John Tiltman selvitti avainvirran sisällön.

Oletettakoon että kaksi selkoviestiä V1 ja V2 on koodattu samalla avaimella A ja on saatu kaksi salaviestiä S1 ja S2. 
S1 = XOR(V1,A)
S2 = XOR(V2,A)
Koska salaviestivirrat S1 ja S2 sisältävät saman avainvirran, niiden XOR-vertailu eliminoi avainkomponentin ja jäljelle jää viestien eroavaisuuksia kuvaava merkkivirta E:
E = XOR(S1,S2) = XOR(V1,V2)
joten jos voidaan selvittää salaviestien S1 ja S2 eroavuudet, sama erotusmerkkivirta pätee myös selkoviestien välillä:
V1 = XOR(E,V2) ja V2 = XOR(E,V1)
S1 = XOR(E,S2) ja S2 = XOR(E,S1)
Sovittamalla jommaksikummaksi viestiksi arveltua tai tunnettua selkotekstiä C (crib) erotusvirtaan, oikean olettaman tuloksena on myös ymmärrettävää tekstiä:
XOR(C1,E) = V2 tai XOR(C2,E) = V1
edelleen voidaan ratkaista avain A:
A = XOR(S1,V1) = XOR(S2,V2)

Oheinen englanninkielisestä Wikipediasta lainattu ja hieman muokattu taulukko sisältää 15 ensimmäistä merkkiä alun perin siepatuista päällekkäisistä viesteistä sekä niiden vertailuvirran. Taulukossa vinoviiva tarkoittaa ”nollamerkkiä” (binääriarvo 00000). Erotusvirrassa nollamerkit osoittavat kohdat joissa molemmat salaviestit sisältävät saman merkin. Sovittamalla oletettua sisältöä ”SPRUCHNUMMER” (viestinumero) viestien erotusvirtaan Tiltman havaitsi, että toisen viestin teksti alkoi ”SPRUCHNR” ja kymmenen päivän kokeilujen jälkeen hän oli selvittänyt noin 4 000 merkkiä viesteille yhteistä avainvirtaa.

Oheisessa kuvassa on vertailtu kaksi päällekkäisyyksiä sisältävää salaviestiä ja saatu näiden erotusvirta. Tähän on sovellettu arveltua sisältöä ”SPRUCHNUMMER” ja saatu tulokseksi ”SPRUCHNR (FIG)(FIG)7027”. FIG-merkki ohjaa vastaanottajan kirjoittimen tulostamaan erikoismerkkejä tai numeroita kirjainten sijaan. FIG-merkin jälkeiset merkit on käännetty selkotekstiin vastaaviksi merkeiksi. Salateksteissä, erotusvirrassa ja avaimissa komentomerkkejä FIG, LTR, LF ja CR ei ole tarkoituksenmukaista tulkita, sillä näitä merkkivirtoja ei ole tarkoitus tulostaa paperille lopulliseksi viestiksi. Ne vain kuuluvat järjestelmän 5-bittiseen koodaustapaan ja salausprosessi voi toiminnassaan tuottaa mitä tahansa 32 yhdistelmästä missä tahansa järjestyksessä. 
Olisi hyvin epätodennäköistä, vaikkakaan ei mahdotonta, että järjestelmä tuottaisi avainvirrassa kaksi samaa merkkiä peräkkäin. Sellainen olisi heikko kohta avaimessa.
Vielä epätodennäköisempää tämän vuoksi on, että sekä salatekstissä että selkotekstissä olisi samassa kohtaa kaksi samaa merkkiä peräkkäin.
Saksankielisessä selkotekstissä kuitenkin esiintyy paljon kirjainpareja (EE, SS, NN, MM...) ja kaukokirjoittajat tapasivat varmuuden vuoksi toistaa FIG- ja LTR-merkit, joten cribejä ja salatekstiä alustavasti yhteen koetettaessa voitiin hylätä sentyyppiset yhteensattumat epätodennäköisinä.
Enigmassa vastaavasti cribejä sovitettaessa voitiin hylätä yhteensattumat, joissa crib ja salateksti olisivat sisältäneet saman kirjaimen samassa kohdassa.

Kun avainvirran perusteella ei kolmen kuukauden työn jälkeen saatu selvitettyä koneen toimintaa, tehtävä siirtyi matemaatikko Bill Tutten harteille. Hän sovelsi aiemmin oppimaansa Kasiski-menetelmää ja kirjoitti avainvirran paperille käsin, etsien toistoja, ja lopulta havaitsi 41 merkin pituisen syklin. Tammikuuhun 1942 mennessä Tutte ja kollegat olivat selvittäneet koneen toimintalogiikan täysin.

Kun Tunnyn logiikka oli selvitetty, erityinen koodinmurtajien työryhmä perustettiin Ralph Testerin alaisuuteen. Alkuperäisistä jäsenistä suurin osa oli lähtöisin Alan Turingin Hut 8 -mökistä. Työryhmä tunnettiin nimellä Testery ja se toteutti seuraavan työvaiheen Tunny-viestien murtamisessa Max Newmanin Newmanry-ryhmän koneiden avustamana.

Turingery

Alan Turing kiinnostui Tunnyn murtamisesta päällekkäisyyksistä selvitettyjen avainten avulla. Heinäkuussa 1942 hän kehitti menetelmän jolla pyörien nokka-asetukset voitiin selvittää avainvirrasta. Menetelmä sai nimityksen Turingery, Testeryn ja Newmanryn mukaisesti, ja sitä kautta kehittyi muutosten tarkkailu eli "muutostaminen", differencing. Menetelmälle annettiin myös saksalaiselta kuulostava lempinimi Turingismus.

Muutostamismenetelmässä käytiin merkkivirta X läpi vertaamalla vuoroon kutakin merkkiä seuraavaan:
ΔX = XOR(X,X)
jossa X voi olla jokin merkki avainvirrasta A, selkotekstistä V, salatekstistä S, tai avainvirran P- tai K-komponentista. X on seuraava merkki samassa virrassa. Muutostettujen virtojen vertailusuhteet ovat samat kuin alkuperäisten. Menetelmän idea oli korostaa peräkkäisten merkkien tilastollista vaihtelevuutta, jota koodausprosessi pyrki minimoimaan.

Lähteet

Viitteet

Salakirjoitustekniikka