Edellinen | Seuraava |
Edellä mainittu Encyclopedia International ei ehkä ole aivan niin huono 1960-luvun tietosanakirja kuin aiemmin ajattelin, joskin vanhentunut ja tekniikan yksityiskohdissa puutteellinen. Se lie kuulunut koulun kirjaston ainoastaan opettajien käyttöön varattuun aineistoon, eikä siten ole paljoa yleisön käsissä kulunut. Päätös dumpata se muutamassa erässä kaupunginkirjaston vaihtokirjahyllyyn on edelleen pitävä.
Jotakin mielenkiintoistakin löytyi kirjasarjan toisesta osasta ARIZONA - BICKELL, nimittäin BASIC ENGLISH. Itse kieltä en niinkään arvosta, mutta tuo enkusta karsittu yksinkertaistettu kieli voisi muodostaa perustan taloudelliselle (ja salatulle) viestintäjärjestelmälle. Sanojen merkitys lienee melko selkeä ja yksiselitteinen suppeahkonkin kielitaidon pohjalta. Voihan sitä tarvittaessa selventää omilla säännöillään.
En ole erikoisempi lingvisti, mutta ehkä tästä pystyisi ajan mittaan kehittelemään jotakin. Epäilemättä tämä suppea sanasto on tarkoitettu tavallisen arkielämän tarpeisiin, joskin eräät asiat ovat saattaneet vuosikymmenten varrella hiukan muuttua. Vanhassa sanastossa ei löydy esimerkiksi kännykkää, pankkiautomaattia ja tietokonetta.
BASIC ENGLISH -kielessä lie sanoja vain 850 erilaista, joten kolmella 10-järjestelmän numerolla pystynee ilmaisemaan minkä tahansa kielen sanan. Laskin kertoo että 210 = 1024, joten kymmenellä bitillä pitäisi pärjätä. Jos lyhyemmät koodit varataan yleisemmille sanoille, niin keskimääräinen sanan pituus saadaan alle kymmenen bitin, vaikka Huffman-enkoodauksen otsikko viekin hiukan tilaa.
Sata sanaa pitkä teksti mahtuisi suoraan 32-järjestelmään koodattuna 200 merkkiä pitkään viestiin, jossa kukin merkki oikeastaan tarvitsee vain viisi bittiä. Jopa 125 tavua riittäisi 100 sanaa pitkän tekstin esittämiseen. Ei paha! Normaalitekstinä 100 sanaa voisi viedä tilaa sopivan epätaloudellisessa Unicode-merkistössä jopa kilotavun verran.
Yksityiskohtaista taloudellisen salakielen kuvausta en voi vielä tässä yhteydessä esittää, mutta haluan kirjata ylös kielen sanat ennenkuin luovun ko. kirjasta. Onhan selvää että aina samojen koodien käyttö sanoille ei voi olla mitenkään kryptistä oikeasti. Minkä tahansa koodin pitäisi ihanteellisesti voida tarkoittaa mitä tahansa kielen sanaa samalla todennäköisyydellä, muuten koodatun viestin avaaminen on liian helppoa. Kryptograafisten periaatteiden mukaan viestin avaamiseen tarvitaan lisäksi myös oikea avain, jota ilman viestin tulee olla (viholliselle/ulkopuoliselle) jokseenkin mahdoton ymmärtää. Ihanteellisesti kryptogrammi on "valkoista kohinaa" jossa ei ole alkuperäisen viestin rakennetta.
Tavallisella enkulla en halua kirjoittaa paljon mitään mutta tällaisella tiiviillä kielellä voisin ehkä jotakin kirjoittaakin. Liian erikoisia ilmauksia ja tarpeettomia anglismeja on syytä välttää. Kommunikoinnissa käytetyn kielen tulee olla yksinkertaista, loogisuuteen pyrkivää ja yksiselitteistä, eikä mitään Shakespearen sonetteja.
Modernimpia ja erikoisempia sanoja tässä aikansa kansainväliseksi kieleksi tarkoitetussa kielessä ei tietenkään ole. Välilyönti, välimerkkejä, numeroita ja sanojen erilaisia taivutusmuotoja tarvitaan myös. Ongelmia ja puutteita voisi paikata jotenkin. Erikoisia sanoja ja nimiä voisi kirjoittaa kirjain tai tavu kerrallaan joka riittäisi niiden salaamiseen? En ole aivan varma riittääkö tämä esitys "täydelliseen" ja käyttökelpoiseen kieleen, mutta katsotaan mitä kissa on raahannut sisään ...
Tokihan kielen käyttöön on totuttava ennen sen vakavaa käyttöä. Nimisanoja, verbejä ja adjektiiveja ei pidä sotkea keskenään. Ääntämisellä ei ole merkitystä kunhan tiedetään mitä sanaa tarkoitetaan. On turhaa noudattaa kaikkia englannin kieliopin sääntöjä. Jonkinlainen kryptaus on toivottavaa, sillä tekstin ei pitäisi olla aivan helposti suoraan luettavissa.
Oikeastaan sellainen yleiskäyttöinen salakirjoitus olisi ehkä kaikkein toivottavinta joka koostuu järkevistä täydellisistä lauseista. Se näyttäisi aivan normaalilta tekstiltä, mutta todellinen merkitys olisi aivan erilainen. Se voisi näyttää vaikkapa normihenkilön kirjoittamalta vapaa-ajan viettoon liittyvältä blogilta tai harmittomalta suositulle julkiselle foorumille lähetetyltä anonyymiltä viestiltä, mutta sisältäisi EMP-pommin yksityiskohtaiset teko-ohjeet tai päämajan operaatiopäällikön maanalaiselle taistelusolulle antaman teloitusmääräyksen. Se ei näyttäisi lainkaan salakirjoitukselta, mutta merkitys olisi salattu normaalin vaarattoman näköisiin lauseisiin. Susi lampaan vaatteissa. Se vaan vaatisi sellaisen tekoälyn jota minun hallussani ei ole.
Eräs vaikeasti salattava seikka on se kuka lähettää viestin ja kenelle. Vaikka viestin sisältö olisi täysin käsittämätön, niin lähettäjä ja vastaanottaja voidaan näin yhdistää toisiinsa. Kun viesti on helposti havaittavissa salakirjoitetuksi niin sen murtamiseen voidaan kohdistaa resursseja. Lähettäjää ja vastaanottajaa voidaan erikoisesti tarkkailla, koska salattu viesti kertoo että heillä on jotakin salattavaa. Niinpä viestien pitäisi ihanteellisesti olla vaikeasti lähettäjään sidottavissa, niiden pitäisi olla kenen tahansa luettavissa, eikä niiden pitäisi näyttää salakirjoitetuilta vaikka ovatkin. Kanavan turvallisuuteen ei pidä luottaa tietokoneistetussa nettiympäristössä. Tämä on kylläkin aika kaukainen haavekuva ...
Structural Words 100 |
NOUNS | ADJECTIVES | ||||||
---|---|---|---|---|---|---|---|---|
400 General | 200 Pictured | 100 General | 50 Opposites | |||||
|
|
|
|
|
|
|
|
|
Lisäksi tarvitaan BASIC ENGLISH -sanojen päätteet sekä tarvittavat lisäsanat ja kieleen varsinaisesti kuulumattomat erikoissanat, erilaiset väli- ja erikoismerkit, erilliset kirjaimet A ... Ö sekä numerot 0 ... 9, että voitaisiin esim. kahdella 32-järjestelmän koodilla ilmaista kaikki tarvittavat 1024 sanaa ja merkkiä. Sanojen välillä ei välttämättä tarvitse käyttää välilyöntiä koska voidaan tulkita että erillisten sanojen välille normaalisti kuuluu välilyönti.
LISÄSANA | PÄÄTE | KIRJAIN | NUMERO | MERKKI | ERIKOISSANA |
---|---|---|---|---|---|
|
|
|
|
|
|
Systeemin kehittely on vielä kesken ... Erilaisia sanoja ja merkkejä täytyisi olla yhteensä 1024 kappaletta, niiden koodit välillä 0 ... 1023.
Sanojen ja merkkien muuntaminen luvuksi tapahtuu siten että ryhmälle nakitettuun peruslukuun lisätään sanan tai merkin järjestysnumero ryhmässään yhdellä vähennettynä. Esimerkiksi jos halutaan muuntaa toinen erikoissana {ERIKOISSANA#02} - mitä sitten merkinneekään - luvuksi ja sen ryhmän perusluku olkoon esimerkiksi tasan 1000 niin luku olisi 1000 + (2 - 1) = 1001.
Sanojen ja merkkien ryhmien peruslukujen porrastuksen avulla huolehditaan siitä että jokainen selväkielinen koodi on yksikäsitteinen molempiin suuntiin, jokaista sanaa ja merkkiä vastaa tietty uniikki numeerinen koodi.
Luvut 0 ... 1023 voidaan esittää 32-järjestelmässä kahdella 32-järjestelmän koodilla ( arvot välillä 0 ... 31 ) jotka saadaan yhdistämällä 10 numeroa ja sopivat 22 kirjainta joita ei voi käsin kirjoitettuna sekoittaa numeroihin (esim. isot kirjaimet O ja I helposti sekoittuisivat saman näköisiin numeroihin 0 ja 1). Nimittäin on 210 = 1024 = 25 * 25 = 32 * 32
Kerta-avaimen avulla viestin kryptaus ja avaus toimii yksinkertaisesti aina saman vakiomoduluksen 1024 kanssa. Olkoonpa esimerkiksi kryptattava sana jonka koodi on 666 ja kerta-avaimen vastaava periaatteessa satunnainen avainluku olkoon esimerkiksi 789. Nämä luvut lasketaan yhteen modulo 1024 : 666 + 789 (mod 1024) = 1455 (mod 1024)
ja kun saadusta - arvoltaan luvun 1023 ylittävästä - summasta vähennetään modulus 1024 saadaan 1455 (mod 1024) = 1455 - 1024 = 431
joten luku 431 siis edustaa tässä tapauksessa alkuperäistä sanaa. Muunnettuna 32-järjestelmään se voidaan esittää taloudellisemmin kahdella koodilla sovitussa merkistössä.
Viestin lähettäjä lähettää siis vastaanottajalle tämän esimerkin osalta kryptatun luvun 431. Sen todellinen merkitys on 666 - mikä sitä vastaava sana lieneekään - mutta edes tuota oikeaa lukua 666 ei ulkopuolinen voi ilman avainta tietää. Lähetettävä kryptattu luku voisi avaimesta riippuen aivan hyvin olla mikä tahansa luku välillä 0 ... 1023, riippumatta siitä mikä on sen selväkielinen merkitys.
Avainta ei suinkaan lähetetä kanavaan. Jos joku asiaankuulumaton sieppaa salatun viestin, hän ei saa siitä selkoa ilman avainta, vaikka tietäisi kaikki muut toteutuksen yksityiskohdat. Vaikka salakuuntelija tietäisikin että kanavassa siirtyvä luku täytyy olla viestisanan ja avainluvun summa modulo 1024, niin hän ei saa selville viestisanaa koska hän ei tiedä ko. avainlukua.
Esimerkin salattu viestiluku saapuu sitten oikealle vastaanottajalleen. Salauksen avaaminen tapahtuu niin että kryptatusta luvusta vähennetään se sama satunnainen avainluku 789 ja jos erotus on negatiivinen niin tarvittaessa lisätään modulus 1024. Esimerkin kryptattu luku 431 avautuu siis näin ikään : 431 - 789 (mod 1024) = -358 (mod 1024) = -358 + 1024 = 1024 - 358 = 666
joka on sen saman sanan koodi josta lähdettiin, kuten pitääkin olla. Avattaessa salakirjoitus osapuolten välillä siirretystä käsittämättömästä kryptogrammista syntyy sana tai merkki kerrallaan ymmärrettävä sisältö joka on sama kuin lähettäjän selväteksti.
Eri sanoille tietenkin käytetään erilaisia avainlukuja. Avain on kertakäyttöinen ja sisältää samalla todennäköisyydellä lukuja 0 ... 1023 tai 1 ... 1024. Avaimen lukuja on kryptattaessa ja avattaessa käytettävä samassa järjestyksessä. Avaimen on oltava vähintään yhtä pitkä kuin salakirjoitettava teksti. Samaa avainta ei käytetä eri viesteille eikä avainta toisteta samassa viestissä ; avaimen täytyy olla riittävän pitkä. Jos avain on pitempi kuin viesti niin viestin loppuun lisätään yhdentekeviä merkkejä niin että pituus tulee täyteen. Lyhyissä viesteissä on pelkästään hyvä ettei kryptogrammin pituus paljasta selkokielisen viestin asiasisällön tarkkaa pituutta.
Satunnaisen avaimen ansiosta mikä tahansa selväkielinen sana tai merkki voi kryptattaessa muuttua miksi tahansa saman systeemin sanaksi tai merkiksi samalla todennäköisyydellä. Tämä tekee salauksesta turvallisen kunhan avain ei joudu ulkopuolisiin käsiin. Avaimet täytyy osapuolille jakaa etukäteen ja ne on syytä tuhota käytön jälkeen.
Oikein toteutettua kerta-avaimella salausta ei pysty tietokoneella murtamaan, olkoon käytettävissä mikä tahansa määrä laskentatehoa. Kokeilemalla läpi kaikki mahdolliset avaimen yhdistelmät voi tietenkin tuottaa kaikki mahdolliset sen pituiset viestit. Osa tuloksista on luultavasti vääriä koska sisältävät pelkkää siansaksaa, mutta jäljelle jää suuri joukko mahdollisuuksia joista ei pysty osoittamaan sitä oikeaa. Kaikki eri mahdollisuudet ovat yhtä todennäköisiä.
Jos meillä on 1000 sanaa pitkä viesti jossa kukin sana voi olla jokin 1000:sta vaihtoehdosta, niin mahdollisten erilaisten viestien määrä on 10001000 eli (10 * 10 * 10)1000 joka on aika iso luku 101000 * 101000 * 101000 = 101000+1000+1000 = 103000. Siinä on siis 10-järjestelmässä ilmaistuna noin 3000 numeroa. Kaikki sanojen yhdistelmät eivät ehkä ole kovin järkeviä, mutta tuohon määrään sisältyy silti erittäin suuri joukko viestejä jotka voisivat merkitä jotakin. Tarkistettavaa on aika paljon. Jos pystyy täydellisesti käsittelemään yhden vaihtoehtoisen viestin nanosekunnissa (10-9 sekuntia eli sekunnin miljardisosa ; vaatinee koneelta terahertsitaajuuksia) niin vuorokaudessa pystyy käsittelemään noin 864 * 1011 viestiä ja vuodessa noin 315,576 * 1014 viestiä. Tuhannessa vuodessa pystyisi siis käsittelemään vain noin 3,2 * 1019 viestiä, olettaen että tietokone toimii häiriöttä niin pitkään. Siitä vaan on - tota noin - vielä aika tavalla matkaa lukuun 103000 kun miljoonassa vuodessakin tshekattaisiin vain 3 * 1022 viestiä eli kovin pieni murto-osa kokonaisuudesta.
Kärjistäen voisi ilmaista että alkuperäinen viesti on voinut olla samalla todennäköisyydellä sekä "NO F-WORD WAY" että "YES, YES, YES!!!" - tai mitä tahansa näiden väliltä - eikä ilman oikeaa avainta pysty sanomaan mikä näistä on se oikea. Viestin murtajan kannalta kaikki eri yhdistelmät ovat keskenään aivan yhtä oikeita, joten hän ei voi saada mitään varsinaista tietoa viestin todellisesta sisällöstä.
On ehkä hyvä ajatus välttää liiallista säännöllisyyttä viestin laadinnassa. Viestiin kannattaa ehkä tehdä tahallisia virheitä jotka eivät estä ydinsisällön ymmärtämistä. Jossakin tilanteessa murtaja saattaa nimittäin ehkä saada etua siitä jos hän voi luottaa että viesti on aivan tarkasti tietyn muotoinen. Epäsäännöllisyys ja vaihtelu on hyvästä. Kryptattaessa ei yleisesti ole hyvä ajatus noudattaa aina samaa kaavaa, samojen sanojen ei aina saa olla samalla kohdalla. Tämä voi auttaa sellaisissa rajatapauksissa että viesti on jostakin syystä osittain murtunut tai avain on osittain vuotanut.
Huffman-koodaus perustuu siihen että viestin pituutta voidaan ehkä lyhentää käyttämällä siinä eniten esiintyville koodeille lyhyempiä binäärisiä koodeja. Runsaasti esiintyvä sana voidaan koodata lyhyellä binäärisellä lukujonolla "1" tai "01" ja harvinainen sana pitemmällä binäärisellä lukujonolla "00000000000001". Lukujono loppuu aina ykköseen joten ykkönen on sanan lopun merkki silloinkin kun ykköset ja nollat ovat pitemmän kokonaisuuden sisällä. Viestissä esiintymättömiä sanoja ja merkkejä ei tarvitse koodata lainkaan. Periaatteessa sanojen binääriset lukujonot liitetään yhteen peräkkäin ja niistä muodostetaan esim. 32-järjestelmän lukuja niin että samaan 32-järjestelmän lukuun voi sisältyä useita lyhyiden sanojen binäärisiä esityksiä. Sanojen tavurajat eivät säily. Sanan loppu koodin sisällä tunnistetaan loppubitistä "1". Viestin otsikkotietoihin tarvitaan viestissä esiintyvien koodien esitystapa siten että lyhyemmät koodit tulevat ensin. Otsikossa esintyvät koodit tarkoittavat siis järjestyksessä binäärisiä lukujonoja "1", "01", "001", "0001", "00001", "000001" jne, vaikka näitä binäärisiä koodeja ei sinänsä olekaan otsikossa mainittu. Otsikon pituus on syytä esittää ihan ensimmäisenä että tiedetään missä otsikko loppuu ja varsinainen viesti alkaa.
Kerta-avaimen ("One-Time-Pad" eli OTP) salauksen ja Huffman-koodauksen järkevä yhdistäminen epäilemättä olisi jonkinlainen haaste. Luulisin että Huffman-koodaus menee hukkaan jos sitä ei tehdä ennen salakirjoitusta. Salakirjoitus levittää koodit tarpeettomasti laajemmalle alueelle.