10.07.2015 Views

Lukuteoriaa ja salakirjoitusta, osa 2

Lukuteoriaa ja salakirjoitusta, osa 2

Lukuteoriaa ja salakirjoitusta, osa 2

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

2 Solmu 2/2008jännitysseikkailua. Niihin liittyviä lukuelämyksiä voietsiä ehkä parhaiten alan klassikosta [CodeB]. Hiirennapsauttamisen päässä olevaa historiatietoa on tutussalähteessä [Wiki].Toisen maailmansodan jälkeisiin aikoihin saakka salakirjoitusmenetelmätperustuivat viestin kir<strong>ja</strong>imien jonkinlaiseenuudelleen järjestämiseen tai sekoittamiseen.Tietotekniikan kehittymisen myötä mekaaniset laitteetvoitiin korvata tietokoneohjelmilla.Alan vallankumouksellinen käännekohta ajoittuu1970−luvun lopulle. Vuonna 1976 Stanfordin yliopistontutki<strong>ja</strong>t Withfield Diffie <strong>ja</strong> Martin Hellman esittivätjulkaisussaan [DH] ns. julkisen avaimen menetelmän.Ensimmäisen konkreettisen esimerkin toimivasta julkisenavaimen salausjärjestelmästä esittivät mit:n tutki<strong>ja</strong>tR. Rivest, A. Shamir, L. Adelmann [RSA]. Heidänsukunimiensä alkukir<strong>ja</strong>inten mukaan sai nimensä rsasalausmenetelmä.Kannattaa myös mainita, että alalla on suomalaisia,kansainvälisesti arvostettu<strong>ja</strong> tutkijoita, kuten akateemikko,emeritusprofessori Arto Salomaa tutkimusryhmineen<strong>ja</strong> professori Kaisa Nyberg, jonka kirjoitus [KN]on kattava, monipuolinen <strong>ja</strong> a<strong>ja</strong>ntasainen katsaus kryptologiaan.Salomaan julkaisut <strong>ja</strong> monografiat, joistaviitteenä [AS], ovat runsaasti referoitu<strong>ja</strong>, alan kansainvälistähuippua edustavia klassikoita.1900-luvun puolestavälistä lähtien salausmenetelmätovat alkaneet käyttää enenevässä määrin matematiikkaa,erityisesti abstraktia algebraa <strong>ja</strong> lukuteoriaa,kombinatoriikkaa, todennäköisyyslaskentaa <strong>ja</strong> tilastotiedettä,algoritmien vaativuusanalyysiä, jne.Tietokoneiden prosessoritehon <strong>ja</strong>tkuva kasvaminen antaa”ilmaiseksi” kryptoanalyytikoille raakaan voimaanperustuvia työkalu<strong>ja</strong> salakoodien murtamiseen. Tämäpitää kryptografia-joukot vireinä <strong>ja</strong> pakottaa suunnittelemaanentistä nerokkaampia <strong>ja</strong> mielikuvituksellisempiamenetelmiä. Kvanttitietokonelaskennan mahdollisuuksiinon jo alettu varautua, kts. [Wiki] <strong>ja</strong> MikkoMöttönen: Kvantti-informaatio – tämän vuosisadanvallankumous !?, Arkhimedes 1/2008.Salaustieteen <strong>ja</strong> -tekniikan käytön painopiste on siirtynytpuolustusvoimiin <strong>ja</strong> tiedusteluun liittyvästäkäytöstä selkeästi jokaisen kansalaisen arkipäiväänkuuluvaksi asiaksi. Kaikki luottamuksellisten tietojenvälittäminen Internetissä, sähköposti, sähköinenkaupankäynti, pankkitoiminta, tietojärjestelmien salasanat,matkapuhelinliikenne, sähköinen allekirjoitus,äänestys, sirukortit jne. ovat täysin salaamistekniikastariippuvaisia.Kirjoitukseni tarkoituksena ei ole antaa kattavaa katsaustaalaan muuten kuin tarjoilemalla kiinnostuneillelisäviitteitä eri suuntiin. Varsinainen päämäärä on avataalkeista lähtien yksityiskohtainen matemaattistenpäättelyiden ketju näyttääkseni, miten rsa-menetelmätoimii <strong>ja</strong> valaista sitä esimerkein. Tätä varten joudunvielä jonkinverran täydentämään kirjoituksen <strong>osa</strong>ssa 1kehiteltyä lukuteorian välineistöä.Parhaassa tapauksessa kirjoitus voisi inspiroida jotakutamatematiikan opetta<strong>ja</strong>a kehittamään aineksia lukionerikoiskurssille tai matematiikkakerholle (jos sellaisiajossain on).Kertaustietoisku mod-laskennastaModulaariaritmetiikka on keskeisessä <strong>osa</strong>ssa, joten kerrataanvielä:a ≡ b (mod n) tarkoittaa, että on olemassa kokonaislukuk siten, että a = b+k n. Toisin sanoen, n | (a −b)eli a − b on <strong>ja</strong>ollinen n :llä.Kun puhutaan luvusta b (mod n), tarkoitetaan yleensäpienintä ei-negatiivista muotoa b ± k n olevaa lukua,toisin sanoen <strong>ja</strong>kojäännöstä <strong>ja</strong>kolaskussa b/n. Näintoimivat myös alla olevissa esimerkeissä käytettävätMatlab- <strong>ja</strong> Maple-ohjelmistojenmod- funktiot: Matlab:ssamod(b,n) <strong>ja</strong> Maple:ssa b mod n.Symmetrisistä salakirjoitusmenetelmistäMonet lukijoista lienevät joskus nuoruudessaan kokeilleetjotain tapaa välittää viestiä salatussa muodossasekoittamalla sopivasti viestin kir<strong>ja</strong>imia. Kenties yksinkertaisinmenetelmä on korvata sanan kukin kir<strong>ja</strong>inaakkosissa seuraavalla kir<strong>ja</strong>imella. Tätä menetelmääkäytettiin myös kuuluisassa, vuonna 1968 valmistuneessaelokuvassa ”2001: A Space Odyssey” (A.C. Clarke,S. Kubrick), jossa vallankaappausta avaruusaluksenmiehistöltä yrittänyt tietokone oli nimeltäänHAL 9000.Toki tässä nimessä oli kyse vain pienestä pikantista kuriositeetista,joka aukeni <strong>osa</strong>lle katsojia.Vakaviin sotilaallisiin tarkoituksiin menetelmää lieneekäyttänyt ensimmäisenä Julius Caesar. Hänon tiettävästi soveltanut kolmen kir<strong>ja</strong>imen siirtoaeteenpäin viestin salaamiseen <strong>ja</strong> vastaavasti samanmäärän siirto<strong>ja</strong> taaksepäin salakoodin avaamiseen.Tämän tyyppisiä menetelmiä, jossa kir<strong>ja</strong>inta siirretäänaakkosissa määrätty määrä, kutsutaankin yleisestiCaesarin menetelmiksi.Esimerkki Caesarin menetelmästäSuoritin itse esimerkin Matlab-ohjelmaa hyödyntäen,mutta en paneudu ohjelman syntaksiin. Otan vain joitakinMatlab-näytteitä <strong>ja</strong> sanonto<strong>ja</strong>, jotka ovat itsensäselittäviä.


Solmu 2/2008 3Muodostetaan merkkivektorit>> AAKKOSET=’ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ ’>> viesti=’SAMMONRYÖSTÖ’Muutetaan viestin kir<strong>ja</strong>imet numeeriseksi vektoriksilaskemalla kunkin kir<strong>ja</strong>imen si<strong>ja</strong>inti AAKKOSETvektorissa.Siis esim. A = 0,B = 1,...,Z = 26,...Saadaan:18 0 12 12 14 13 17 24 28 18 19 28Alkuperäisessä Caesarin menetelmässä lisäämme jokaiseenvektorin komponenttiin luvun 3. Lienee aikaselvää, että Ö, jota vastaa numero 28, siirretään syklisestiaakkosten alkupäähän <strong>ja</strong> siitä tulee siis B (koskavalitsimme aakkosvektorimme viimeiseksi merkiksivälilyönnin).Tämä syklinen siirto tarkoittaa, että redusoimme tuloksenmodulo N = 30, koska aakkosvektorin pituuson 30. (Voidaan a<strong>ja</strong>tella aakkosvektori kierretyksi ympyränmuotoon, jonka kehällä liikutaan.) Toisin sanoenlasku numeroilla on (28 + 3)(mod 30) = 1.Yleisesti salausfunktiomme on siis (x + 3) (mod N),missä x on viestin numeerisen esitysvektorin komponentti(viestin kir<strong>ja</strong>inmerkkiä vastaava numero), <strong>ja</strong> Non aakkosvektorin pituus. Matlab-istuntomme <strong>ja</strong>tkuisinäin, kun a<strong>ja</strong>tellaan, että edellä oleva viestin numeerinenesitysvektori on muuttu<strong>ja</strong>ssa nviesti.>> nsalaviesti=mod(nviesti+3,30)21 3 15 15 17 16 20 27 1 21 22 1>> AAKKOSET(nsalaviesti+1)VDPPRQUÄBVWB salaviesti kir<strong>ja</strong>imillaSalaviestin avausViestin vastaanotta<strong>ja</strong>lla on tieto menetelmästä <strong>ja</strong>avainluvusta 3. Sehän voisi yhtä hyvin olla jotainmuutakin. Viestin avaaminen tapahtuu salausfunktionkäänteisfunktiolla, joka on mitä ilmeisimminf −1 (y) = (y − 3)mod N.>> avattu=mod(nsalaviesti-3,N)18 0 12 12 14 13 17 24 28 18 19 28>> AAKKOSET(avattu+1)SAMMONRYÖSTÖSalaviestin avaus tuotti alkuperäisen viestin, joten hyvinkävi.Niille, joita kiinnostaa Matlab-syntaksi mainitsen,että AAKKOSET(avattu+1)-komento tarkoittaaAAKKOSET-merkkivektorin indeksointia numeerisellavektorilla, jonka komponentteihin pitää lisätä 1, koskaMatlab:ssa vektorin indeksointi aloitetaan luvusta1, kun taas <strong>ja</strong>kojäännöksillä laskenta vaatii indeksinalkamaan 0:sta. Sama ilmiö on tietysti lausekkeessaAAKKOSET(nsalaviesti+1).Yleisesti menetelmä voitaisiin esittää tähän tapaan:Merkitään Z n = {0,...,n − 1}. SalausfunktioS e : Z n → Z n ;S e (x) = (x + e) (mod n), missä e:tävoidaan kutsua salausavaimeksi <strong>ja</strong> funktiota S e salausfunktioksi,joskus itse funktiota kutsutaan myössalausavaimeksi.Salakoodi saadaan avatuksi salausfunktion S ekäänteisfunktiolla Se−1 (y) = (y − e) (mod n).Menetelmä on symmetrinen siinä mielessä, että kunsalaus(avain)funktio tunnetaan, niin salakoodin avaamisensuorittava käänteisfunktio voidaan välittömästimäärittää.Kehittyneempiä symmetrisiä menetelmiäCaesarin menetelmä yleisessäkin muodossaan on luonnollisestihyvin haavoittuva.Erilaisten mahdollisuuksien (salausavaimien) määräävoidaan huikeasti lisätä ottamalla salausfunktioksi jokinmuu tapa sekoittaa kir<strong>ja</strong>imia. Jos otetaan mielivaltainenaakkosten ”permutaatio”, eli uusi järjestys, niinkaikkien mahdollisten salausavainten lukumäärä on N!,missä N on edelleen aakkosvektorin pituus. Yllä olevassatapauksessa N = 30, jolloin saadaan kaikkiaan30! mahdollisuutta. Kyseessä on luku, jossa on 33 numeroa,joten raakaan voimaan perustuva kaikkien erimahdollisuuksien läpikäyminen ei onnistu.Huolimatta avainten lähes äärettömästä määrästä,tämäkin menetelmä on monin tavoin haavoittuvainen.Kun on tiedossa kieli, jolla viestintä tapahtuu, voidaankir<strong>ja</strong>inten esiintymäfrekvenssien perusteella päästä oikeistakir<strong>ja</strong>imista selville. Esimerkiksi Suomen kielessäkir<strong>ja</strong>in A on yleisin, joten (pitkässä) salakirjoitetussaviestissä suurimman esiintymäfrekvenssin omaava kir<strong>ja</strong>inon todennäköisesti A. Ja niin edelleen. Frekvenssianalyysinkäytöstä salausavaimen selvittämiseksi onhyviä esimerkkejä <strong>ja</strong> opastettu<strong>ja</strong> harjoitustehtäviä mm.kir<strong>ja</strong>ssa [Kob] luvussa III.Frekvenssianalyysin vaikeuttamiseksi viesti voidaanmyös koodata <strong>ja</strong>kamalla se ensin osiin, lohkoihin, jotkanumeroidaan. Jos vaikka käytettäisiin 2:n pituisia lohko<strong>ja</strong>,niin kunkin komponentin numerot olisivat välillä0,...,N 2 − 1 = 899, <strong>ja</strong> kyseessä olisi 2-kir<strong>ja</strong>imistentavujen tunnistaminen. Kasvattamalla lohkon kokoa,sanokaamme suuremmaksi kuin 4, frekvenssianalyysiinperustuva tunnistus vaikeutuu olennaisesti.Caesarin menetelmää on kehitetty ottamalla mukaanavainsana, joka määrää kir<strong>ja</strong>imien muuntumisen.Jos otetaan avaimeksi satunnainen merkkijono,joka on lähetettävän viestin pituinen, niin lasketaanyhteen viestivektorin <strong>ja</strong> avainvektorin numeeriset esityksvektoritkomponenteittain (mod N). Yllättävääkyllä, tämä menetelmä, englanninkieliseltä nimeltään


4 Solmu 2/2008”one time pad”, on ainoa tunnettu informaatioteorianmielessä luotettavaksi todistettu salausmenetelmä.Käytännössä se on kuitenkin monin tavoin hankala <strong>ja</strong>epäluotettava, avain on yhtä pitkä kuin viesti, avainvektoritovat periaatteessa kertakäyttöisiä, <strong>ja</strong> avaintenvaihto on työläs <strong>ja</strong> riskialtis operaatioVaikka salausmenetelmien ”avantgarde” onepäsymmetristen menetelmien puolella, symmetrisiämenetelmiä kehitellään myös edelleen. Kohta esiteltävätepäsymmetriset menetelmät, joihin edellä mainittursa kuuluu, ovat pitkien viestien käsittelyssä raskaita.Siksi joudutaan usein käyttämään yhdistelmää,jossa esimerkiksi lähetetään symmetrisen menetelmänavain salattuna epäsymmetrisellä menetelmällä <strong>ja</strong> symmetriselläsalattu (pitkä) viesti.Lukuteorian täydennystäOsassa I käsiteltiin kokonaislukujen <strong>ja</strong>ollisuusasiota<strong>ja</strong> modulaariaritmetiikkaa. Kannattaa kaivaa aktiivimuistiinnuo asiat, ainakin määritelmät <strong>ja</strong> lauseidenjohtopäätökset. Tärkeimpiä: Jakoyhtälö (Lause I.1),SYT-lause (I.5), Eukleideen algoritmi, Fermat’n pienilause (Lause I.13). Perusasioita lukuteoriasta löytyymyös Jukka Pihkon Solmun verkkolehteen kirjoittamasta”lukuteorian helmiä”-artikkelista [JP]. Tarvitsemme<strong>osa</strong>ssa I esitetyn lisäksi vielä lukuteoreettisenjälkiruoka-annoksen.Eukleideen algoritmin laajennusPalautetaan mieleen lause I.8, joka sanoo, ettäsyt(a,b) = syt(b,r), kun a esitetään <strong>ja</strong>koyhtälön (lauseI.1) ilmaisemassa muodossa: a = bq + r, 0 ≤ r < b.Tämä edustaa askelta, joka riittävän monta kertaa toistettunajohtaa syt(a,b) :n arvoon. Menettelyä kutsutaanEukleideen algoritmiksi.Edelleen muistellaan erityisellä lämmöllä ”SYTlausetta”I.5.Sehän pal<strong>ja</strong>staa, että syt(a,b) :lle saadaan esitysmuodossa x a+y b, missä x <strong>ja</strong> y ovat kokonaislukukertoimia.Tähän mennessä olemme <strong>osa</strong>nneet nautiskellapelkästään siitä tiedosta, että tuollaiset luvut x <strong>ja</strong>y ovat olemassa, menettelyä niiden määrittämiseksiemme ole esittäneet. Nyt on sen aika!Katsotaanpa esimerkin valossa:Esimerkki 1. Määrättävä syt(171,30).171 = 5 · 30 + 21.Euklalgo: syt(171,30) = syt(30,21).Jakoyhtälö: 30 = 1 · 21 + 9.Euklalgo: syt(30,21) = syt(21,9).Jakoyhtälö: 21 = 2 · 9 + 3.Euklalgo: syt(21,9) = syt(9,3) = 3.(Seuraava <strong>ja</strong>koyhtälö: 9 = 3 · 3 + 0 johtaisi <strong>ja</strong>kojäännökseenr = 0, joka on algoritmin lopetusehto.)Siis syt(171,30) = 3.Tähän saakka kerrattiin vanhaa. Johtaaksemme tavoitellunesityksen, käytämme luvuille kir<strong>ja</strong>insymole<strong>ja</strong>asian selkeyttämiseksi. Merkitään a = 171,b = 30,<strong>ja</strong> syntyvät <strong>ja</strong>kojäännökset olkoot r 1 ,r 2 ,r 3 ,.... Tässär 1 = 21,r 2 = 9,r 3 = 3,r 4 = 0.Päämääränä on siis lausua viimeinen nollasta poikkeava<strong>ja</strong>kojäännös (tässä r 3 ) muodossa r 3 = x a + y b.Kirjoitetaan yllä olevat <strong>ja</strong>koyhtälöt näitä merkintöjäkäyttäen: ⎧⎪⎨ a = 5 · b + r 1b = r⎪ 1 + r 2⎩r 1 = 2 · r 2 + r 3 .Kun tämä puretaan alhaalta ylöspäin, saadaan haluttuesitys. Tarkemmin sanottuna:1. Ratkaistaan alimmasta yhtälöstä r 3 r 1 :n <strong>ja</strong> r 2 :navulla.2. Sijoitetaan tähän r 3 :n lausekkeeseen r 2 ratkaistunatoiseksi alimmaisesta yhtälöstä r 1 :n <strong>ja</strong> b:n avulla.3. Sijoitetaan näin saatuun r 3 :n lausekkeeseen r 1yhtälöstä 1 lausuttuna a:n <strong>ja</strong> b:n avulla. Tämä strategiakonkretisoituu esimerkkimme tilanteessa näin:r 3 = r 1 − 2 · r 2 .r 2 = b − r 1 sij. (3):een =⇒ r 3 = r 1 − 2 · b + 2 · r 1 =3 · r}{{} 1 −2 · ba−5·bSieventämällä: syt(a,b) = r 3 = 3 · a − 17 · b.Menettely on nimeltään Laajennettu Eukleideen algoritmi.Huomautan, että kirjoituksessa [JP] on toinen vastaavanlainenesimerkki laskettuna auki. Samaisessa kirjoituksessa[JP] ss. 6–7 esiintyy myös hauska konstruktiivinentodistus SYT-lauseelle. Todistus etenee Eukleideenalgoritmin tahdissa, toisin kuin se, jonka esitin<strong>osa</strong>ssa I. Vastaavanlaisia esimerkkejä on myös kirjoissa[I. Lukio1] <strong>ja</strong> [I. Lukio2] aihepiireissä Eukleideen algoritmi<strong>ja</strong> Diophantoksen yhtälöt.Ohjelma laajennettuun Eukleideen algoritmiin.Nämä esimerkit huolella läpikäytyään luki<strong>ja</strong> varmastivakuuttuu siitä, että tällainen tehtävä voidaan ainaratkaista, <strong>ja</strong> <strong>osa</strong>a pyydettäessä ratkaisun suorittaa.En muotoile lausetta matemaattiseksi algoritmiksitai lauseeksi, vaan kirjoitan sen suoraan tietokoneohjelmaksi,jollaisena se tietysti käytännön sovelluksissaesiintyy.Kirjoituksen <strong>osa</strong>ssa I esitin rekursiivisen ohjelmanEukleideen algoritmille. Siitä sopivasti laajentamallasaadaan ällistyttävän yksinkertainen koodi laajennetulle.Koodi noudattaa Maple-kielen syntaksia, mutta


Solmu 2/2008 5voidaan muokata helposti mille tahansa rekursion sallivallekielelle.EEukleides:=proc(a,b)if b=0 then [a,1,0]else L:=EEukleides(b,mod(a,b));d:=L[1]; x:=L[2]; y:=L[3];L:=[d,y,x - iquo(a,b)*y] #iquo:<strong>osa</strong>määräend ifend procTämä rekursiivinen (itseään kutsuva) ohjelma laskeesiis luvun d = syt(a,b) <strong>ja</strong> kertoimet x <strong>ja</strong> y siten, ettäd = ax + by (vrt. SYTlause).Edellä oleva esimerkki laskettaisiin näin:> tulos := EEukleides(171, 30);> d := tulos[1]: x := tulos[2]: y := tulos[3]:> d,x,y;3, 3, -17Saatiin kuin saatiinkin sama kuin käsin laskemalla!Algoritmi on kirjoitettu sovittamalla [I. Algo]-kir<strong>ja</strong>ssaannettu ”pseudokielinen” ohjelma Maple-syntaksinmukaiseksi. Elegantti tapa laajennetun Eukleideenalgoritmin yleiselle matemaattiselle todistukselle onyllä olevan ohjelman oikeaksi todistaminen, joka onkinyllättävän lyhyt <strong>ja</strong> ytimekäs ([I. Algo] Ch. 33. s. 812.Kuten sanottu, käytän esimerkeissäni symbolilaskentaohjelmaaMaple. Esimerkkien lukeminen ei edellytälainkaan ohjelman tuntemista. Selitän tarvitsemanikomennot, joita on vain muutama. Ohjelmanottaminen mukaan on sikäli mielekästä, ettävoidaan esittää asiat ihan oikean kokoisilla luvuilla.Se myös antaa konkretiaa teoreettisesti kuvailtavillealgoritmeille, <strong>ja</strong> osoittaa, että hyvä symbolilaskentaohjelmaon hyödyllinen kryptologiatyökalu.SekäMaple:n että Mathematica:n käyttäjäryhmissäon suuri määrä kryptologian esimerkkityöarkke<strong>ja</strong>.(http://www.maplesoft.com/applications/ →mathematics → Cryptography (23 kpl.) <strong>ja</strong>http://www.wolfram.com/)Toisaalta kannattaa mainita vapaasti saatava ohjelmaMaxima, jolla kiinnostuneet voivat kokeillavastaavien asioiden toteuttamista, ellei Maple- taiMathematica-ohjelma ole käytettävissä. Viimemainituistapainotan enemmän edellistä siksi, että se onitselleni tutumpi.Huomautan vielä, että Maple:ssa on sisäänrakennettunalaajennettu Eukleideen algoritmi nimellä igcdex.Nimi koostuu osista: i - integer, gcd = greatestcommon divisor = syt <strong>ja</strong> ex - extended Komentod:=igcdex(a,b,’x’,’y’) palauttaa tuloksend=syt(a,b) <strong>ja</strong> lisäksi muuttujissa x <strong>ja</strong> y kertoimet, joillad = ax + by.Edellinen esimerkki laskettaisiin näin:> d:=igcdex(171,30,’x’,’y’):> d,x,y;3, 3, -17Jatkossa käytämme valmista igcdex-funktiota esimerkeissämmeedellä esitetynEEukleides-funktion si<strong>ja</strong>sta.Yhtälön ax ≡ 1 (mod n) ratkaiseminenKyseessähän on mahdollisimman yksinkertainen ns.Diophantoksen yhtälö, jota käsiteltiin <strong>osa</strong>ssa I. LauseenI.12 mukaan yhtälöllä on aina yksikäsitteinen ratkaisu(mod n), mikäli syt(a,n) = 1. Ratkaisu saadaan laajennetullaEukleideen algoritmilla laskemalla luvut x<strong>ja</strong> y siten, että ax + ny = 1. Kiinnostava on vain lukux. Kun se tunnetaan, niinax = 1 − ny ≡ 1 (mod n).Yllä olevalla Maple-funktiolla ratkaisu saadaan siisnäin:> igcdex(a,n,’x’,’y’):Kuten sanottu, olemme kiinnostuneita vain x:stä, d:ntiedämme 1:ksi, y voidaan heittää romukoppaan. Joshalutaan minimaalinen x, ts. redusoida (mod n), niinei muuta kuin x:=x mod n :Kiinalainen jäännöslauseAiheeseen liittyy monta tarinaa erityisesti kiinalaisen(<strong>ja</strong> kreikkalaisen) matematiikan historiasta. Löytöjä voitehdä Googlella hakusanalla Chinese remainder theorem.Eräs tarinoista on [I. Algo]-kir<strong>ja</strong>ssa:Noin vuonna 100 a<strong>ja</strong>nlaskumme alkuhetken jälkeen kiinalainenmatemaatikko Sun-Tsu ratkaisi seuraavan ongelman:Määritä kokonaisluvut x, jotka antavat <strong>ja</strong>kojäännökset2,3,2 <strong>ja</strong>ettaessa luvuilla 3,5,7. Ratkaisuiksi hän sai luvutx = 23 + k · 105.Huomattakoon, että <strong>ja</strong>ka<strong>ja</strong>t n 1 = 3,n 2 = 5,n 3 = 7ovat pareittain yhteistekijättömät <strong>ja</strong> 3 · 5 · 7 = 105,mutta miksi näin, <strong>ja</strong> mistä tulee 23 ? Nykykielellä siisratkaisu: x ≡ 23 (mod n), missä n = n 1 · n 2 · n 3 .Miten hän ratkaisuunsa päätyi, <strong>ja</strong> <strong>osa</strong>siko yleistää?Nykyluki<strong>ja</strong>lla on helppoa, sovelletaan kiinalaistajäännöslausetta, jota tässä ei kuitenkaan esitetä. Mainittakoonkuitenkin, että lauseen muotoili <strong>ja</strong> todistiyleisessa muodossaan – kukas muu kuin Euler v. 1734.rsa-algoritmin todistuksessa tarvittava kiinalaisenjäännöslauseen seuraus on siinä määrin erikoistapausitse lauseesta, että sen suora todistus on milteiitsestäänselvyys. Kiinalaista jännöslausetta voidaankyllä käyttää mm. rsa-menetelmän tehokkaampaantoteutukseen <strong>ja</strong> myös rsa-menetelmän murtamisyrityksiin,joten sen esittäminen olisi hyvinkin perusteltuatässä yhteydessä. Katson kuitenkin kirjoitukselleniolevan hyväksi keventää työkalupakkia, kun se on mahdollista.Kutsun tarvitsemaamme seurausta ”kiinalaiseksi selviöksi”.


6 Solmu 2/2008Lause 1 (Kiinalainen selviö). Olkoonn = n 1 n 2 · · · n k , missä syt(n i ,n j ) = 1, kun i ≠ j.Olkoon a mielivaltainen kokonaisluku. Nytx ≡ a (mod n) ⇐⇒ x ≡ a (mod n i ),i = 1,...,k.Tod. (1) Olkoon x ≡ a (mod n). Jatko jääköön luki<strong>ja</strong>lleharjoitustehtäväksi.(2) Olkoon x ≡ a(mod n i ),i = 1,...,k. Tällöin jokainenn i on tekijänä (x − a) :ssa. Koska syt(n i ,n j ) = 1,kun i ≠ j, niin myös tulo n = n 1 n 2 · · · n k on tekijänä(x−a):ssa, eli x ≡ a(mod n). Tämä viimeinen päätelmäjätetään taas luki<strong>ja</strong>lle harjoitustehtäväksi (miltei valmiiksiohjeistettuna).Tehtävä 1. Olkoon syt(n 1 ,n 2 ) = 1 <strong>ja</strong> olkoon n 1 | a <strong>ja</strong>n 2 | a. Osoita, että n 1 n 2 | a.Vihje Taas kerran päästään liikkeelle SYTlauseen I.5avulla: 1 = n 1 x + n 2 y. Kerro puolittain a:lla, niin alatolla perillä.On selvää, että tämä yleistyy useampaan tekijään (formaalistiinduktiolla, jota esitellään mm. kirjoituksessa[JP]) . Toisaalta tarvitsemme ”kiinalaista selviötä”vain tapauksessa n = n 1 n 2 .ModulaaripotenssilaskentaTässä on kaksi näkökulmaa, 1) laskentakaava ”potenssipotenssiin” <strong>ja</strong> 2) tehokas potenssiinkorotusmenetelmä.1. Potenssi potenssiin. Silloinhan eksponentit kerrotaan.Päteekö sääntö myös (mod )-laskennassa? Mitäon siis (a k mod n) j ?a k mod n = a k + in jollain i.Siis (a k mod n) j = (a k + in) j = a k j + termejä, joissajokaisessa on in tekijänä. (Joko binomikaavalla taisuoraan tulosta (a k + in)(a k + in) · · · (a k + in), jossakaikkiin muihin termeihin paitsi siihen, jossa jokaisestabinomista otetaan ensimmäinen, tulee tekijäksi (in):npotenssi.) Eli saadaan muotoa a k j +K n oleva lauseke,missä K on jokin kokonaisluku. Siis(a k mod n) j ≡ a k j (mod n),<strong>ja</strong> potenssi potenssiin sääntö toimii kauneimmalla mahdollisellatavalla.Modulaarinen potenssiinkorotusUsein näissä yhteyksissä tulee vastaan tehtäväa b (mod n), missä esiintyvät luvut saattavat olla hyvinsuuria. Jos vaikka a on luokkaa 10 4 <strong>ja</strong> b luokkaa 10 5 ,mikä on huimasti alakanttiin tyypillistä rsa-salaustaa<strong>ja</strong>tellen, niin a b on luokkaa 10 400000 . Tämänkokoisillaluvuilla laskenta alkaa olla epätoivoista mille tahansalaskentamyllylle, puhumattakaan ihan normaalista tapauksesta,kuten esimerkissämme, jossa a tai b voi ollaluokkaa 10 100 .Operaatioon on olemassa tehokas ratkaisu, nimeltään”toistettu neliöön korottaminen” tai ”neliöön korotus<strong>ja</strong> kerolasku”. Algoritmi kuvataan [I. Algo]-kir<strong>ja</strong>ssa ss.829 <strong>ja</strong> [Kob] ss. 23 – 24: Pääperiaate on, että kerätääntuloa, jossa edellisellä kierroksella saatu tulos korotetaanneliöön <strong>ja</strong> lisäksi kerrotaan sopivalla luvulla,mikäli n:n binääriesityksessä on ao. kohdalla 1. Kunkinoperaation jälkeen redusoidaan modulo n, jolloin suurinlaskennassa esiintyvä luku on kaiken aikaa ≤ n 2 .(Oletetaan, että a < n.) Jätän tilan säästämiseksi kuvauksenylimalkaiseksi, yksityiskohdat on annettu mm.yllä mainituissa viitteissä.Maple-ohjelmassa algoritmi on suoraan sisäänrakennettunakomentona: > c:=a&^b mod n: Jos tätä verrataankomentoon c:=(a^b) mod n, jota en suosittele,niin ero saattaa olla huikea, sanoisinko ääretön, <strong>ja</strong> ensinkannattaa varmistaa, että ohjelman STOP-nappulatoimii.Algoritmien vaativuusLaskennallisten algoritmien suhteen on tärkeää arvioidaniiden vaatimaa laskenta-aikaa (<strong>ja</strong> tilaa) suhteessasyötteenä olevien lukujen kokoon. Tällaisia arvioitaesiintyy kaikissa numeerisen analyysin kirjoissa, alansystemaattisen tutkimuksen katsotaan kuuluvan teoreettisentietojenkäsittelytieteen piiriin. Tässä kirjoituksessaesiintyviin lukuteoreettisiin algoritmeihin paneutuvaavaativuusanalyysia käsitellään kir<strong>ja</strong>ssa [Kob]huolellisesti <strong>ja</strong> perusteellisesti. Myös toinen peruskir<strong>ja</strong>mme[I. Algo] sisältää runsaasti vastaavaa analyysia.Tähän kirjoitukseen en voi enää mahduttaa uutta asiaaenempää, joten joudun tyytymään tämän tärkeän komponentin<strong>osa</strong>lta kir<strong>ja</strong>llisuusviitteisiin. Mainitsen vainesimerkin <strong>ja</strong> ulkonäön vuoksi, missä muodossa näitä arvioitaannetaan. Eukleideen algoritmin suoritusaika onO(log 3 a), kun etsitään syt(a,b), a > b. Lyhyesti tämä”iso-O”-notaatio tarkoittaa suluissa olevaan lausekkeeseenverrannollisuutta, eli arvioon kuuluu tarkemminmääräämätön vakiokerroin.Aikaperspektiivin kannalta mainitsen, että viime marraskuutavoidaan pitää numeerisen analyysin <strong>ja</strong> laskennallistennumeeristen algoritmien tutkimuksen 60- vuotisjuhlakuukautena,sillä marraskuussa vuonna 1947 ilmestyivon Neumann’n <strong>ja</strong> Goldstine’n uraauurtava julkaisuaiheesta.Epäsymmetriset menetelmät, julkinensalakirjoitusKaikki vuoteen 1976 mennessä käytetyt kryptosysteemitlasketaan klassisiin menetelmiin kuuluviksi. Niilleon ominaista, että salausavaimesta S e voidaan kohtuullisellalaskentatyöllä johtaa purkuavain S d . Siksi


Solmu 2/2008 7niitä kutsutaan myös symmetrisiksi menetelmiksi, kutenedellä oli puhe. Käytän tulevaa ennakoiden kir<strong>ja</strong>imiae <strong>ja</strong> d, jotka liittyvät sanoihin ”encrypt”(salata) <strong>ja</strong>”decrypt” avata salaua, dekryptata.Nykyisin, kun sähköinen luottamuksellisen tiedonvälitystarve on räjähdysmäisesti kasvanut sotilas<strong>ja</strong>diplomaattialueen ulkopuolelle, on suoranainenvälttämättömyys suunnitella yhtenäinen salaustekniikka,jotta laajojen järjestelmien yhteesopivuus olisimahdollinen. Niinpä tarve yleiseen käyttöön sopivanjulkisen salakirjoitusjärjestelmän kehittämiseen nousi1970-luvulla voimakkaasti esiin.Julkisen salakirjoituksen periaateJokaisella tiedonvaihtoon <strong>osa</strong>llistuvalla <strong>osa</strong>puolella onkaksi avainta, julkinen <strong>ja</strong> salainen. Kryptologian esityksissäon tullut yleiseksi tavaksi kutsua kahta kommunikoivaa<strong>osa</strong>puolta nimillä Alice <strong>ja</strong> Bob.Käytetään edellä olevien e- <strong>ja</strong> d- symbolien ohella myöskir<strong>ja</strong>imia P – ”Public”<strong>ja</strong> S – ”Secret” viittaamaankyseisiin avainfunktioihin. Alice:lla on siten julkinenavain P A <strong>ja</strong> salainen avain S A <strong>ja</strong> Bob:lla vastaavastiP B <strong>ja</strong> S B .Kommunikaatiota Alice:n <strong>ja</strong> Bob:n välillä esittää kuva,jossa on mukana ilkeä Eve, joka sieppaa lin<strong>ja</strong>lta salakirjoitettu<strong>ja</strong>viestejä, minkä ehtii.P ABobviesti:msalaviesti: c = P A(m)Eve, vakoo<strong>ja</strong>S AAlicem = S A(c)Kaikilla kommunikoivilla <strong>osa</strong>puolilla on käytössäänkaikkien muiden julkinen avain, periaatteessa ne voitaisiinvaikka julkaista webbisivulla. Lisäksi jokaisella<strong>osa</strong>puolella X on oma henkilökohtainen salainen avainS X , jota kukaan muu maailmassa ei tiedä.Voimme ymmärtää tässä kuvailussa avaimen funktioksi,joka muuntaa viestin numeerisen esityksenselväkielisestä salakieliseksi tai päinvastoin. Jokatapauksessa funktiot P X <strong>ja</strong> S X ovat toistensakäänteisfunktioita. Niinpä, kun Bob salakirjoittaa viestinm käyttäen Alice:n julkista avainta P A , hän tuottaaluvun c = P A (m). Alice:lla <strong>ja</strong> vain Alice:lla on salainenavain S A , joka on Alice:n julkisen avaimen P Akäänteisfunktio. Siis Alice avaa Bob:n lähettämän viestinlaskulla S A (c).Mikä tässä on uutta <strong>ja</strong> ihmeellistä? Kaikki <strong>osa</strong>puolettuntevat avaimen P A , mutta tämä funktiopa onkintehty sellaiseksi, että sen käänteisfunktiota onäärimmäisen vaikea laskea. Tässä on ero symmetrisiinmenetelmiin nähden. Diffie <strong>ja</strong> Hellmann käyttivättermiä ”trapdoor function”, jolle [KN]:ssä käytetäänsuomennosta ”salaovifunktio”. Kehitin itse kevytmielisestisuomennoksen ”loukkuluukkufunktio”. Luukustaon helppo astua sisään huomatakseen joutuneensaloukkuun. Takaisin ulos päästäkseen on avattava systeemilukko,jossa on miljoonia mahdollisuuksia. Matemaattisemminilmaistuna, on löydettävä laskennallisestikohtuullinen tehtävä, jonka käänteistehtävä onlaskennallisesti kohtuuton, kuten 1000 vuotta vaativalaskenta-aika nopeimmalla supertietokoneella <strong>ja</strong> parhaallalaskenta-algoritmilla.rsa-algoritmissa tuo laskennallisesti kohtuullinentehtävä on kahden hyvin suuren alkuluvun p <strong>ja</strong> q kertominen:n = pq. Kun luvut valitaan riittävän suuriksi(luokkaa 150 numeroa), niin käänteinen tehtävä, luvunn tekijöihin <strong>ja</strong>ko on laskennallisesti kohtuuton.Käsitteiden ”kohtuullinen” <strong>ja</strong> ”kohtuuton” kvantifioiminenedellyttää algoritmien laskennallisen vaativuudenarvioita, mihin liittyvää ”yleissivistystä” annettiinedellä lyhyesti.On tietysti myös muistettava, että tietokoneiden prosessoriteho<strong>ja</strong>nkasvun <strong>ja</strong> aivan uusien laskentainnovaatioidentakia loukkuluukku vuonna 2008 ei välttämättäolekaan sitä enää vuonna 2018.Mutta <strong>ja</strong>tkakaamme rsa-menetelmän kuvailun tiellä.Edellä symmetrisistä menetelmistä puhuttaessa koodattiinviestit kir<strong>ja</strong>in tai tavu kerallaan numeroksi<strong>ja</strong> muunnettiin niitä sopivasti sekoittamalla. Lukuteoria<strong>ja</strong> tietotekniikka antavat mahdollisuuden käsitelläviestejä suurina kokonaislukuina. Viestin numerokoodikäsitetään numeerisen vektorin si<strong>ja</strong>sta yhdeksi suureksikokonaisluvuksi, jolle tehdään sopiva matemaattinenmuunnos P. Vastaanotta<strong>ja</strong> avaa sen käytössään olevallakäänteismuunnoksella, eli salaisella avaimella S. Josviesti on kovin pitkä, se <strong>ja</strong>etaan lohkoihin, joiden pituudetvoivat olla vaikka 100 − 200 merkkiä. Ts. viestivoidaan esittää numeerisena vektorina, jonka komponentitovat (tarvittaessa) suuria kokonaisluku<strong>ja</strong>.Seuraavaksi esitettävän algoritmin kuvauksessa a<strong>ja</strong>tellaan,että selväkielisen viestin numeerinen vastine edustaakoko viestiä tai yhtä viestivektorin komponenttia.Tälle käytetään merkintää m, niinkuin ”message”. Salakirjoitetullemuunnokselle käytetään nimeä c, niinkuin”ciphertext”, yleisesti siis c = P(m) <strong>ja</strong> m = S(c),koska P <strong>ja</strong> S ovat toistensa käänteisfunktioita.Miten nuo P <strong>ja</strong> S rakennetaan rsa-menetelmässä? Nytolemme valmiit sen kertomaan <strong>ja</strong> perustelemaan.


8 Solmu 2/2008Algoritmi 2 (rsa). .1. Muodostetaan kaksi samaa suuruusluokkaa olevaasuurta alkulukua p <strong>ja</strong> q.2. Lasketaan n = pq <strong>ja</strong> φ = (p − 1)(q − 1). 13. Valitaan luku e, 1 < e < φ siten, ettäsyt(e,φ) = 1. (Luvun e ei tarvitse olla kauheansuuri.)4. Lasketaan laajennetulla Eukleideen algoritmillaluku d siten, että ed ≡ 1 (mod φ).5. A :n julkinen avain on (e,n) <strong>ja</strong> A :n salainenavain on (d,n).6. Olkoon m viestin numeerinen esitys, 0 ≤ m ≤ n.Muodostetaan salainen viesti c = m e (mod n)<strong>ja</strong> lähetetään A :lle.7. A avaa salaisen viestin c omalla salaisellaavaimellaan d kaavalla a = c d (mod n). Ja todellakina = m, kuten seuraavaksi osoitetaan.rsa-algoritmin oikeaksi todistaminenTod. Salainen viesti c = m e (mod n), missä m on alkuperäinenviesti, e salauseksponentti, n = pq, p <strong>ja</strong> qovat alkuluku<strong>ja</strong>. Avattu viesti a = c d (mod n) missä don avauseksponentti <strong>ja</strong> toteuttaa yhtälöned ≡ 1 (mod φ), φ = (p − 1)(q − 1).Pitää siis todistaa, että avattu viesti on sama, mistälähdettiin, eli a = m.No katsotaan: c d = (m e (mod n)) d ≡ m e d (mod n)potenssipotenssiin-säännön mukaan.Nyt ed = 1 + j φ = 1 + j (p − 1)(q − 1) jollain j, jotenm e d = mm j(p−1)(q−1) . Järkevä oletus on, että m < p<strong>ja</strong> m < q, jolloin varmasti syt(m,p) = syt(m,q) = 1.Niinpä Fermat’n pikkulauseen mukaanm p−1 ≡ 1 (mod p) <strong>ja</strong> m q−1 ≡ 1 (mod q), jotenm j(p−1)(q−1) = (m p−1 ) j(q−1) ≡ 1 (mod p).Vaihtamalla p:n <strong>ja</strong> q:n järjestys, saadaanm j(p−1)(q−1) ≡ 1 (mod q).Kiinalaisen selviön mukaanm j(p−1)(q−1) ≡ 1 (mod n).Siis a = c d ≡ mm e d (mod n) ≡ m (mod n)Jos luovumme yllä olevasta ”järkevästä oletuksesta”,niin esim. p | m, jolloin m e d ≡ m (mod p), koskapap on molemmissa yhtälön puolissa tekijänä. Tässä tapauksessaei tarvita Fermat’n apua, mutta tilanne onsyytä turvallisuussyistä kuitenkin sulkea pois. Joka tapauksessaväite pätee yleisesti, tehtiinpä yllä järkevätai vähemmän järkevä oletus.EsimerkkiEsitykseni on mukaelma viitteen [Cos] tyylistä. Otan”mustina laatikoina” siinä annetut funktiot to number<strong>ja</strong> from number, jotka muuttavat merkkijonon eli tekstivektorinnumeroksi <strong>ja</strong> vastaavasti takaisin merkkijonoksiannetun aakkosvektorin suhteen vastaavaan tapaankuin edellä olleet Matlab-funktiot. Erona on,että nyt emme muuta tekstivektoria numeerikseksi vektoriksi,vaan yhdeksi kokonaisluvuksi. Kaiken muunavaan komento komennolta luki<strong>ja</strong>n silmien eteen.Esimerkin avaimet ovat lähes turvallista kokoa, olisivatolleet vielä hiukan yli 10 vuotta sitten. Jäljempänäpohditaan tarkemmin.Jos muutamme valitun aakkosvektorin suhteen sananSOLMU numeeriseksi saamme:> aakkoset:="ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ "> to_number("SOLMU");1915121321Nähdään, että kir<strong>ja</strong>imia vastaavat numerot on pantuperäkkäin tyyliin: A = 01,B = 02,...,S = 19,...U =21Toinen, kenties luonnollisempi tapa olisi esittääviesti N−järjestelmän lukuna <strong>ja</strong> muuntaa se10−järjestelmään, missä N on aakkosvektorin pituus.Tällöin samainen SOLMU muuntuisi luvuksi21 + 13 · 30 + 12 · 30 2 + 15 · 30 3 + 19 · 30 4 = 15806211.Koska yllä mainittu to number-funktio tekee edellisellätavalla, noudatan sitä.Alla esiintyvät Maple-komennot ovat suurelta osin itsensäselittäviä. Mainitsen <strong>ja</strong> kertaan tässä joitakin nimityksiä<strong>ja</strong> sellaisia komento<strong>ja</strong>, joiden merkitys voi ollaepäselvä tai unohtunut.Alkukir<strong>ja</strong>in i viittaa sanaan “integer”, kokonaisluku.ifactorTekijöihin <strong>ja</strong>koigcd(a,b) gcd = sytigcdex(a,b,’x’,’y’) gcd extended = LaajennettuEukleideen algoritmia mod bJakojäännös laskussa a/bMuistutan vielä, että komentod:=igcdex(a,b,’x’,’y’)palauttaa tuloksen d=syt(a,b) <strong>ja</strong> lisäksi muuttujissax <strong>ja</strong> y kertoimet, joilla d = ax + by.1 Kir<strong>ja</strong>in φ viittaa ns. Eulerin φ-funktioon, emme kuitenkaan tarvitse siihen liittyvää Eulerin lausetta, vaan pärjäämme Fermat’npikkulauseella.


Solmu 2/2008 9Ja nyt se alkaa!Alice valitsee kaksi suurta alkulukua <strong>ja</strong> laskee niidentulon:> pA := nextprime(10^60 + 1234567*rand()^5);11980768160215583569801524136786215524827311143774029092192981559> qA := nextprime(10^65 + 8765439999*rand()^5);2455769488433880162001810879378440077015568602607435050878572990629> nA:=pA*qA:> length(nA);131Luvussa n A on 131 numeroa. Kokeillaan tekijöihin<strong>ja</strong>koa.> ifactor(nA);Warning, computation interruptedPainettiin STOP-nappulaa. Ei näytä siltä, että kannattaisiryhtyä odottelemaan.Kokeillaan tekijöihin<strong>ja</strong>koa, kun p A kerrotaan jollainumpimähkään valitulla pienehköllä luvulla.> ifactor(pA*465734);(2) (337) (691) (11980768160215583569801524136786215524827311143774029092192981559)Onnistuu muotoa p A k olevalle luvulle hetkessä, kunkerroin k on miljoonan luokkaa, mutta jos vähän kasvatetaan,alkaa kestää tuskaisen kauan.Seuraavaksi Alice laskee φ A :n, jota varten siis täytyytuntea n A :n tekijät p A <strong>ja</strong> q A .> phiA := (pA - 1)*(qA - 1):Alice valitsee salauseksponentin (”encryption exponent”).> eA := nextprime(10^5 + rand());624044487349Todetaan, että syt(e A ,φ A ) = 1. Tämä toteutuu hyvinsuurella todennäköisyydellä (miksi?), mutta se on kuitenkinerikseen tarkistettava.> igcd(eA, phiA);1Alice laskee nyt laajennetulla Eukleideen algoritmillaoman salaisen avaimensa eksponentin d A .> igcdex(eA, phiA, ’xA’, ’yA’):> dA := xA mod phiA;1368483131199786650215235652 ...> length(dA);131Salaisessa eksponentissa d A on 131 numeroa. Tarkistetaan,vaikka tiedetään, että e A d A ≡ 1 (mod φ A )> eA*dA mod phiA;1Alicen julkinen avain on (e A ,n A ) <strong>ja</strong> salainen avainon (d A ,n A ). Edellä esitellyn puhetavan mukaisesti voidaanmyös sanoa, että A:n julkinen avain on parametrien(e A ,n A ) määräämä funktioP A (m) = m eA (mod n A ) <strong>ja</strong> salainen avain vastaavastifunktio S A (c) = c dA (mod n A ).Bob tekee vastaavat asiat tykönään:> pB := nextprime(10^60 + 23453218*rand()^5):> qB := nextprime(10^65 + 12456800*rand()^5):> nB:=pB*qB: phiB:=(pB-1)*(qB-1):> eB := nextprime(10^4 + 3*rand());2336493690667> igcd(eB, phiB);1> igcdex(eB, phiB, ’xB’, ’yB’):> dB := xB mod phiB:> length(dB);131Bob’n julkinen avain on (e B ,n B ) <strong>ja</strong> salainen avain(d B ,n B ), <strong>ja</strong> ne määräävät samalla tavoin julkisen <strong>ja</strong>salaisen avainfunktion P B <strong>ja</strong> S B . Huomaa, että kummankinsalainen avain pysyy kunkin omana tietona.Sitä ei kukaan missään vaiheessa lähetä kenellekään.Bob salaa numeroksi koodatun viestin m käyttäenAlicen julkista avainta, ts. hän suorittaa laskunc = P A (m) = m eA (mod n A ), <strong>ja</strong> lähettää salaviestin cAlicelle, kas näin:> m := to_number(‘TAVATAAN HIEKKALAATIKOLLA‘);20012201200101143208090511110112010120091115121201> c:=m&^eA mod nA: # modulaarinen potenssiAlice avaa viestin omalla salaisella avaimellaan:a = S A (c) = c dA (mod n A ). Edellä oikeaksi todistetunalgoritmin mukaan pätee: a = m.> a:=c&^dA mod nA;20012201200101143208090511110112010120091115121201from_number(a);"TAVATAAN HIEKKALAATIKOLLA"Sähköinen allekirjoitusAlice vastaa <strong>ja</strong> varustaa viestinsä digitaalisella allekirjoituksella,jotta Bob varmasti tietää, että vastaa<strong>ja</strong>on Alice <strong>ja</strong> viesti on tarkalleen se, jonka Alice onlähettänyt.Viesti voisi ollav:="OLEN ALIISA JA TULEN KANSSASI". Olkoon mtämän viestin numeerinen esitys. Alice muodostaa allekirjoituksens = S A (m), toisin sanoen hän koodaaviestinsä omalla salaisella avaimellaan, <strong>ja</strong> lähettääBob:lle viestin, jonka perään liittää tuon koodin, eli luvuns. Bob vastaanottaa sanoman vektorina [v,s], lukeeselväkielisen viestin v, jonka perusteella tietää käyttääAlice:n julkista avainta allekirjoituksen tarkistamiseen.


10 Solmu 2/2008Bob suorittaa laskun P A (s). Jos tuloksena on m, onAlice:n identiteetti <strong>ja</strong> viestin sisältö varmennettu.Sama laskettuna aukiMääritellään Maple:ssa edellä käyttettyjen avaimienavulla Alice:n julkinen <strong>ja</strong> salainen avainfunktio P A <strong>ja</strong>S A> PA:=m->m&^eA mod nA: SA:=s->s&^dA mod nA:> v:="OLEN ALIISA JA TULEN KANSSASI";> m:=to_number(v);1512051427011209091901271001272021120514271101141919011909Alice:n digitaalinen allekirjoitus> s:=SA(m); (130 numeroa):9327163344329493987807141048894710565396353..Alice lähettää viestin:> Bobille:=[v,s];["OLEN ALIISA JA TULEN KANSSASI", 9327163...]Bob muuntaa saamansa vektorin 1. komponentinnumeeriseksi <strong>ja</strong> tarkistaa viestivektorin 2. komponentinavulla viestin allekirjoitetun sisällön.> m:=to_number(Bobille[1]);1512051427011209091901271001272021120514..> t:=PA(Bobille[2]);1512051427011209091901271001272021120514..> m - t0Kaikki hyvin!Tähän voidaan tietysti vielä lisätä allekirjoitetun viestinsalaus mukaan tarvittaessa. Edellinen vastaisi(avointa) allekirjoituksella varmennettua paperia <strong>ja</strong>jälkimmäinen kuoreen sinetöityä allekirjoitettua paperia.Tyypillisiä tilanteita ovat vaikkapa pankkisovellukset.Saman allekirjoituksen voi haluta tarkistaa useampikintaho. Sehän käy, koska julkinen avain on kaikillakäytössään <strong>ja</strong> salainen vain asianomaisella allekirjoitta<strong>ja</strong>lla.Tyypillinen esimerkki voisi olla Bob:nAlice:lle lähettämä sähköinen shekki, jonka allekirjoituksenAlice tarkistaisi, lähettäisi edelleen pankkiin,jossa se niinikään voitaisiin tarkistaa Bob:n julkistaavainta käyttäen <strong>ja</strong> suorittaa asianmukainen rahojensiirto.rsa:n turvallisuusrsa:n turvallisuus perustuu suuren luvun tekijöihin<strong>ja</strong>kotehtävänvaativuuteen. Jos modulin n tekijöihin<strong>ja</strong>ko onnistuu, niin avaimet saadaan kädenkäänteessä noudattaen yleisen algoritmin kuvausta taisitä seurannutta esimerkkiä. Entä kääntäen, pitääköpaikkansa, että jos suuren luvun tekijöihin <strong>ja</strong>ko on vaikeaa,niin rsa:n murtaminen on vaikeaa? Ongelmaa ontutkittu tiiviisti rsa:n julkistamisesta lähtien, asiaa eiole pystytty todistamaan, mutta mitään muuta tapaamenetelmän murtamiseen ei myöskään ole löydetty.Lainaan [I. Algo]-kir<strong>ja</strong>a s. 835: Jos valitaan satunnaisestikaksi 100-numeroista alkulukua, niin niiden avullavoidaan muodostaa avain, joka on ”murtamaton”nykyteknologialla (v. 1998).Kuitenkin on erinäisiä seikko<strong>ja</strong>, jotka täytyy ottaa huomioon,sillä koodinmurtajien työkalupakissa on taatustiainakin modulaariaritmetiikan peruslauseet, Fermat’npikku lause, Eukleideen algoritmi, Kiinalainenjäännöslause <strong>ja</strong> parhaat laskenta-algoritmit. Lisäksiraakaa laskentavoimaa on oletettava olevan suurimmansupertietokoneen verran <strong>ja</strong> tehokkaasti ha<strong>ja</strong>uttaen paljonenemmänkin.[HandB] käsittelee aihetta laa<strong>ja</strong>sti esittäen ainakin8 erilaista hyökkäysmahdollisuutta <strong>ja</strong> niiden torjuntalääkkeet.Monissa muissa lähteissä, kuten [Nyberg],[Wiki] <strong>ja</strong> aivan erityisesti [Sti] (s. 225) on lisää kryptoanalyyttisiäkonnankoukku<strong>ja</strong> <strong>ja</strong> niiden vastalääkkeitä.Pari yksinkertaisinta seikkaa mainitakseni, on selvää,että alkulukujen p <strong>ja</strong> q on molempien oltava niin suuria,ettei pienistä luvuista lähtevä alkulukujen laskenta<strong>ja</strong> tekijätarkistus onnistu kohtuua<strong>ja</strong>ssa. Toisaalta neeivät saa olla niin lähellä toisiaan, että voitaisiin tekijänetsintä aloittaa √ n:n läheltä.Pieni salauseksponentti e on salaamisen kannalta tehokas,mutta ongelmallinen, jos viesti (tai viestin <strong>osa</strong>)m on niin pieni, että m < n 1/e . Tällöinhän salaviestic = m e (mod n) = m e (mieti!). Murta<strong>ja</strong> Eve muodostaaluvun c 1/e , <strong>ja</strong> lukee m:ää kuin avointa kir<strong>ja</strong>a. Tämävoidaan estää lisäämällä viestiin riittävästi ”suolaa”, eliylimääräistä puppua.Kryptologia on aina ollut kahden joukkueen välistä kilpajuoksua.Rauhanomaiseen kilpailutoimintaan liittyyRSA129-projekti, joka lähti liikkeelle, kun rsa:n keksijätRivest, Shamir <strong>ja</strong> Adleman esittivät vuonna 1977Scientific American-lehdessä 129-numeroisen kahdenalkuluvun tulon haasteeksi tiedeyhteisölle tekijöidenlöytämistä varten. He arvioivat tekijöihin <strong>ja</strong>koon kuluvanaikaa n. 20000 vuotta silloisilla menetelmillä <strong>ja</strong>tekniikalla. Hollantilainen lukuteoreetikko Arjen Lenstraorganisoi maailmanlaajuisen laskentaverkostonhttp://www.math.okstate.edu/∼wrightd/numthry/rsa129.htmlLenstran ryhmä käytti 1980-luvulla kehitettyä uuttalukuteoreettista menetelmää <strong>ja</strong> kykeni purkamaan algoritminrinnakkaislaskentaa hyödyntävään muotoon.Huhtikuussa 1994 tekijöihin <strong>ja</strong>ko onnistui, <strong>ja</strong> rsa:llasalattu viesti saatiin auki. Viestin sisältö oli: ”Themagic words are squeamish ossifrage.”Kilpajuoksu ei päättynyt tähän. [Wiki]:ssä mainitaanluku RSA-200, joka <strong>ja</strong>ettiin tekijöihin vuonna2005. Kir<strong>ja</strong>ssa [Sti] (v. 2006) s. 175 mainitaan.että nykyiset tekijöihin<strong>ja</strong>koalgoritmit löytävät 512:npituisen binääriluvun tekijät. Luvun pituus kymmenjärjestelmässäsaadaan kertomalla log 10 2:lla (eikö


Solmu 2/2008 11vain), joten se on n. 150 numeroa. Turvalliseksi luvunn = pq suuruudeksi Stinton vakuuttaa nykytietämyksellä1024 bittiä, siis n. 300 numeroa 10-järjestelmässä.A<strong>ja</strong>ntasaista tietoa voi hakea [Wiki]:sta sanoilla ”RSAFactoring challenge”, joka kertoo, että tämä kilpailumuotolopetettiin vuonna 2007, koska ”nykyteollisuudellaon aiempaa huomattavasti kehittyneempiymmärrys yleisistä kryptoanalyyttisistä periaatteista”.Tulevaisuuden näkymiäEdellä nähtiin, että arviot avainten turvalliseen kokoonliittyvistä vaatimuksista tahtovat jäädä jälkeensiitä, minkä tänään oletetaan riittävän pitkälle tulevaisuuteen.Tästä syystä ei voida pysähtyä lepäämäänrsa-laakereilla, vaan on välttämätöntä kehittää uusia”loukkuluukkuideoita”.Kryptologiset menetelmät ovat laajentuneet abstraktiaalgebraa, algebrallista geometriaa, elliptisiä käyriä,ym. kehittyneitä moderne<strong>ja</strong> matemaattisia teorioitakäyttämään. Lisäksi determinististen menetelmienohella on ryhdytty kehittämään myös todennäköisyyslaskentaanpoh<strong>ja</strong>utuvia satunnaisuuteenperustuvia menetelmiä.Kryptologiassa yhdistyvät kiehtovalla tavalla vuosituhansienaikana kehittyneet lukuteorian menetelmätuusien abstraktien matemaattisten teorioiden tarjoamiinmahdollisuuksiin. Tärkeänä komponenttina ontietotekniikka teoreettisena työvälineenä, tehokkaanlaskentavälineistön mahdollista<strong>ja</strong>na, <strong>ja</strong> tietysti syyn<strong>ja</strong> motiivin anta<strong>ja</strong>na koko toiminnalle tietoverkkojen,matkapuhelimien, sirukorttien maailmassa.Viitteet[I. Algo ] Cormen, Leiserson, Rivest: Kts. Osa 1[DH ] W. Diffie, M. Hellman. New directions in cryptography,IEEE Transactions on Information TheoryIT-22 (1976), 644-654.[HandB ] A. Menezes, P. van Oorschot, S.Vanstone. Handbook of applied cryptography:http://www.cacr.math.uwaterloo.ca/hac/.[CodeB ] D. Kahn, The Codebreakers, Macmillan1967, kir<strong>ja</strong>sta on uudempi painos.[Crt ] Bernhard Esslinger. Cryptography and Mathematics,http://www.cryptool.com/ . Vapaanlähdekoodin ohjelmapaketti <strong>ja</strong> opetusteksti.[InCode ] Sarah Flannery, David Flannery. In Code: AMathematical Journey.Lukuteorian <strong>ja</strong> kryptologian periaatteiden yleistajuinenesitys nerokkaan irlantilaisen koulutytön <strong>ja</strong>isän kirjoittamana. http://www.amazon.com/ [HakusanaIn Code] (Ehkä tästä joku koulutyttö tai poikavoisi innostua vaikka kirjoittamaan kir<strong>ja</strong>-arvion.)[Cos ] John B. Cosgrave. Bill Clinton, BertieAhern, and digital signatures (A Maplebasedintroduction to public-key cryptography)http://staff.spd.dcu.ie/johnbcos/Maple public other.htm[Ke-Te ] Veikko Keränen, Jouko Teeriaho.Salausmenetelmät, Rovaniemen AMK2006: http://ta.ramk.fi/∼jouko.teeriaho/krypto2006/krypto.htm. Kurssimateriaali,käyttää hyväkseen Mathematica-ohjelmaa.[Skk ] Simo Kivelä. rsa-menetelmän Mathematicatoteutus.http://matta.hut.fi/matta2/mma/rsa.pdf[Kob ] N. Koblitz. A Course in Number Theory andCryptography, Springer 1994.[KN ] Kaisa Nyberg. Kryptologia – tiedon turvaamisentiede, Tietojenkäsittelytiede 26 kesäkuu 2007 ss.31–52.[JP ] Jukka Pihko, Lukuteorian helmiä,solmu.math.helsinki.fi/2008/1/pihko.pdf[rsa ] R. Rivest, A. Shamir, L. Adelman. Amethod for obtaining digital signatures andpublic-key cryptosystems, Communications of theACM, 21 (1978), 120-126. Luettavissa tästä:theory.lcs.mit.edu/∼rivest/rsapaper.pdf[AS ] Arto Salomaa. Public-Key Cryptography,Springer-Verlag, Berlin 1990.[Sti ] D. R. Stinson. Cryptography, Theory and Practice,Chapman & Hall/CRC Press, Boca Raton-London-New York, Third Edition, 2006Kurssikir<strong>ja</strong>viitteenä Kaisa Nybergin (TKK) <strong>ja</strong> KeijoRuohosen (TTY) opetussivuilla. (Kir<strong>ja</strong>ssa 353 viitettä.)[Wiki ] http://en.wikipedia.org/wiki/Hakusano<strong>ja</strong>: Cryptography, History of cryptography,World War II cryptography, Enigma machine,Quantum Cryptography, RSA, RSA Factoring challenge,

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!