Luvut, RSA ja graafit (LTT-12200, 1. luento) Keijo Ruohonen 28.8.2013
LUVUT Insinöörityö pyörii paljolti lukujen ja niillä laskemisen ympärillä. Tämä luonnollisesti tapahtuu käytännössä tietokoneella. Kaikkia peruslukutyyppejä tarvitaan: reaalilukuja (kuten 1.25, 2.0, π, 5,... ), rationaalilukuja (kuten 2 3, 1 2, 85%,... ), kompleksilukuja (kuten i = 1, 2.2 3.1i, e 1.2i,... ) ja kokonaislukuja (kuten 0, 1, 2,... ). Lisäksi tietysti tarvitaan muutakin lukuihin liittyvää: muuttujia (kuten x, y, t,... ), funktioita (kuten sin, cos, ln,... ), matriiseja jne. Osa näistä käsitteistä on tuttuja lukiosta. Tietoja täydennetään ja loput käsitteet esitellään ensimmäisen vuoden peruskursseissa.
LUVUT Yhteen-, vähennys-, kerto- ja jakolaskut eri lukutyypeille ovat tuttuja (laskintavaraa paitsi ehkä kompleksiluvuille). Potenssiin korotus on kuitenkin jo reaaliluvuille mutkallisempi operaatio (kompleksiluvuista puhumattakaan). Sitä ei esimerkiksi voi tehdä käsin laskien.
LUVUT Yhteen-, vähennys-, kerto- ja jakolaskut eri lukutyypeille ovat tuttuja (laskintavaraa paitsi ehkä kompleksiluvuille). Potenssiin korotus on kuitenkin jo reaaliluvuille mutkallisempi operaatio (kompleksiluvuista puhumattakaan). Sitä ei esimerkiksi voi tehdä käsin laskien. Pikku esimerkkinä, uskoisitko äkkiseltään, että 2 2 2 2. = 2, ( = 1.4142), mutta. 1.45 1.451.451.45 =? Nämä ovat ns. äärettömiä tetraatioita ja esiintyvät siellä täällä sovelluksissa liittyen mm. ns. Lambertin funktioihin.
LUVUT Ero on dramaattinen, esimerkiksi ( 31 2 ) = 2 2 2 = 1.999992648, 2 2 mutta 44 1.45 = 10 363462. Tilanteet erottava yläraja on e 1/e ja 2 e 1/e < 1.45 (tässä e = 2.7183 ja e 1/e = 1.4447). Alaraja puolestaan on 1/e e = 0.0660. Nämä ovat tetraatioita eli superpotensseja. Tetra:= proc(n,x) if n=0 then return(1) else return(xˆtetra(n-1,x)) end if; end: Tetra(44,sqrt(2.)); 1.999999934 Tetra(42,1.45); 39.36741954 Tetra(43,1.45); 2.252380945 10 6
LUVUT: RSA Paljon käytetyssä RSA-kryptosysteemissä valitaan ensin satunnaisesti kaksi salaista suurta alkulukua, vaikkapa p = 5057402958792745746451543044643488946225\ 3447083477055613732392200628477467530153\ 0298317835173075361137591320328642844385\ 356753963070558225810912900991 ja q = 1221848516224714891746181347070147736187\ 9812657800627179506670481918563496904479\ 7860330762914249730259047080425104515751\ 600064617268766835958911671763. Hyvä kysymys: Miten?
LUVUT: RSA Alkulukuhan on luku, jota ei voi jakaa tasan kuin vain itsellään ja 1:llä (2, 3, 5, 7, 11, 13, 17, 19, 23, 29,... ). Aukikerrottu tulo n = pq = 6179380301151399300269059239480862733532\ 1532622652902607538916171572943805658118\ 2280588927037179301975750415684923266441\ 2007362226574804331795817306284992562858\ 6168071490061723928966910604726674687259\ 1206923948858044517811204100268083853697\ 1874574012587260380317192952000225734499\ 3179703463909417133 on julkinen. p:n ja q:n salaisuus ei ole silti uhattu, sillä n:stä ei millään tunnetulla menetelmällä saada lasketuksi takaisin sen tekijöitä kohtuullisessa ajassa!
LUVUT: RSA, eksponentit Lisäksi tarvitaan kryptauseksponentti a sekä dekryptauseksponentti b. Ne ovat satunnaisia lukuja väliltä 0,..., n 1, mutta ihan mitkä tahansa valinnat eivät käy. Esimerkiksi luvun ab 1 pitää olla tasan jaollinen luvulla (p 1)(q 1), joten ainakin toinen luvuista on iso (ideaalisesti molemmat). Kun p ja q tiedetään, tällaiset eksponentit löytyvät helposti kokeilemalla (riittää valita yksi, toinen saadaan Eukleideen algoritmilla). Kryptauseksponentti on julkinen ja dekryptauseksponentti salainen. Julkisen tiedon (n ja a) avulla kuka tahansa voi salata eli kryptata viestin, mutta vain salaisen tiedon (p, q ja b) haltija voi sen dekryptata.
LUVUT: RSA, kryptaus ja dekryptaus Jakamalla osiin ja sopivasti koodaamalla (esimerkiksi UTF-8) viesti v voidaan ajatella luvuksi väliltä 0,..., n 1. Vastaava kryptattu viesti on silloin luku s = rem(v a, n), eli jakojäännös, kun luku v a jaetaan luvulla n. (Ts. jos q on osamäärä, niin v a = q n + s ja 0 s < n.) Lähtien pelkästään s:stä ja julkisesta tiedosta ei ole mahdollista saada lasketuksi viestiä v missään kohtuullisessa ajassa. Kryptattu viesti s on nyt myös luku väliltä 0,..., n 1 ja sen dekryptaus sujuu salaista tietoa käyttäen samaan tapaan: v = rem(s b, n).
LUVUT: RSA, pulma no. 1 Hyvinkin suurien lukujen yhteen-, kerto- ja jakolasku (muista ne jakojäännökset!) sujuvat nopeasti tietokoneella vaikkapa ihan koulumenetelmillä (parempiakin tietysti tunnetaan). Potenssiinkorotus on taaskin pulmallisempi. Pulma no. 1 on se, että jos a on hyvin suuri (ja jollei a ole, b on), niin potenssia v a ei voi laskea tyyliin v 2 = v v, v 3 = v v 2, v 4 = v v 3,..., v a = v v a 1 (a 1 kertolaskua). a voi olla vaikkapa suuruusluokkaa 10 100 ja maailmankaikkeuden arvioitu ikä on noin 4.3 10 23 µs eli miljoona kertolaskua sekunnissa ei riitä yhtään mihinkään.
LUVUT: RSA, pulma no. 1 Potenssiinkorotus on toistettua kertolaskua ja kertolasku taas on toistettua yhteenlaskua. Kertolaskua a v ei voi sitäkään tehdä muodossa 2 v = v +v, 3 v = v +2v, 4 v = v +3v,..., a v = v +(a 1)v (a 1 yhteenlaskua), jos a on iso. Käsilaskussa kerrotaankin käyttäen kertojan a desimaaliesitystä. Jos esimerkiksi a = 523, niin kertominen tehdään muodossa 523 v = (5 v) 100 + (2 v) 10 + (3 v). Yhteenlaskuja tarvitaan silloin (a:n pituus) 1. Huomaa, että kertominen 10:llä, 100:lla, 1000:lla jne. on ilmaista.
LUVUT: RSA, pulma no. 1 Ratkaisu potenssiinkorotuksessakin on käyttää a:n desimaaliesitystä (tai binääriesitystä). Otetaan esimerkki, lasketaan v 523 tällä tavalla: v 3 v 10 v 2 10 = (v 10 ) 2 v 100 = (v 10 ) 10 v 5 100 = (v 100 ) 5 v 523 = v 5 100 v 2 10 v 3 yhteensä 2 kertolaskua 4 kertolaskua 1 kertolasku 4 kertolaskua 3 kertolaskua 2 kertolaskua 16 kertolaskua Mutta onko tuo 16 kertolaskua pienin määrä?
LUVUT: RSA, pulma no. 1 Ratkaisu potenssiinkorotuksessakin on käyttää a:n desimaaliesitystä (tai binääriesitystä). Otetaan esimerkki, lasketaan v 523 tällä tavalla: v 3 v 10 v 2 10 = (v 10 ) 2 v 100 = (v 10 ) 10 v 5 100 = (v 100 ) 5 v 523 = v 5 100 v 2 10 v 3 yhteensä 2 kertolaskua 3 kertolaskua 1 kertolasku 3 kertolaskua 3 kertolaskua 2 kertolaskua 14 kertolaskua 1 1 Mutta onko tuo 16 kertolaskua pienin määrä? Ei, helposti näkee kierrättämällä tuloksia, että 14 kertolaskuakin riittää.
LUVUT: RSA, pulma no. 1 Näin menetellen kertolaskujen lukumäärä on verrannollinen eksponentin pituuteen ja pysyy kohtuullisena (< 6 pituus). Mutta saadaanko näin kertolaskujen pienin määrä? Onko esimerkiksi edellä 14 pienin määrä?
LUVUT: RSA, pulma no. 1 Näin menetellen kertolaskujen lukumäärä on verrannollinen eksponentin pituuteen ja pysyy kohtuullisena (< 6 pituus). Mutta saadaanko näin kertolaskujen pienin määrä? Onko esimerkiksi edellä 14 pienin määrä? Ei, pienin määrä on 12: v 2, v 4, v 8, v 16, v 32, v 64, v 65, v 130, v 260, v 261, v 522, v 523
LUVUT: RSA, pulma no. 1 Näin menetellen kertolaskujen lukumäärä on verrannollinen eksponentin pituuteen ja pysyy kohtuullisena (< 6 pituus). Mutta saadaanko näin kertolaskujen pienin määrä? Onko esimerkiksi edellä 14 pienin määrä? Ei, pienin määrä on 12: v 2, v 4, v 8, v 16, v 32, v 64, v 65, v 130, v 260, v 261, v 522, v 523 Näiden pienimpien kertolaskumäärien (eli yhteenlaskuketjujen) laskemiseksi suurille luvuille ei tunneta nopeaa menetelmää. Mutta onneksi sellaista ei tarvitakaan, eo. desimaaliesitysmenetelmä riittää aivan mainiosti.
LUVUT: RSA, pulma no. 1 Näin menetellen kertolaskujen lukumäärä on verrannollinen eksponentin pituuteen ja pysyy kohtuullisena (< 6 pituus). Mutta saadaanko näin kertolaskujen pienin määrä? Onko esimerkiksi edellä 14 pienin määrä? Ei, pienin määrä on 12: v 2, v 4, v 8, v 16, v 32, v 64, v 65, v 130, v 260, v 261, v 522, v 523 Näiden pienimpien kertolaskumäärien (eli yhteenlaskuketjujen) laskemiseksi suurille luvuille ei tunneta nopeaa menetelmää. Mutta onneksi sellaista ei tarvitakaan, eo. desimaaliesitysmenetelmä riittää aivan mainiosti. Asiaan liittyy outoja juttuja. Esimerkiksi eksponenteille 2 191 ja 191 pienin määrä on sama (11). Eksponentille 2 375494703 määrä (34) on jopa pienempi kuin eksponentille 375494703 (35).
LUVUT: RSA, pulma no. 2 Pulma no. 2 on, että jos eksponentti a on suuri, niin v a on vielä aivan valtavan paljon suurempi. Otetaan esimerkkitapaus, jossa v = 11 1 (100 ykköstä) ja a on suuruusluokkaa 10 100.
LUVUT: RSA, pulma no. 2 Pulma no. 2 on, että jos eksponentti a on suuri, niin v a on vielä aivan valtavan paljon suurempi. Otetaan esimerkkitapaus, jossa v = 11 1 (100 ykköstä) ja a on suuruusluokkaa 10 100. Silloin v a :n pituus on suuruusluokkaa 10 102. (Joidenkin arvioiden mukaan tunnetun maailmankaikkeuden alkeishiukkasten määrä on luokkaa 10 97 eli luvulle v a ei ole maailmankaikkeudessa muistilaa.)
LUVUT: RSA, pulma no. 2 Pulma no. 2 on, että jos eksponentti a on suuri, niin v a on vielä aivan valtavan paljon suurempi. Otetaan esimerkkitapaus, jossa v = 11 1 (100 ykköstä) ja a on suuruusluokkaa 10 100. Silloin v a :n pituus on suuruusluokkaa 10 102. (Joidenkin arvioiden mukaan tunnetun maailmankaikkeuden alkeishiukkasten määrä on luokkaa 10 97 eli luvulle v a ei ole maailmankaikkeudessa muistitilaa.) Ratkaisu tähän on, että jakojäännöksillä on oma kertolaskulakinsa: Tulon jakojäännös on tulontekijöiden jakojäännösten tulon jakojäännös. Eli kaavamuodossa rem(x y, n) = rem ( rem(x, n) rem(y, n), n ).
LUVUT: RSA, pulma no. 2 Kun potenssilaskussa kryptauksessa ja dekryptauksessa sovelletaan esitettyä nopeaa menettelyä ja koko ajan redusoidaan tulokset jakojäännöksiksi, ei koskaan tarvitse kertoa muita kuin välillä 0,..., n 1 olevia lukuja eikä koskaan tarvitse jakaa n:llä kuin enintään (n 1) 2 :n suuruisia lukuja. Kun vielä otetaan käyttöön menetelmä, jolla niitä suuria alkulukuja voidaan generoida nopeasti suuria määriä, niin RSA:n toteutus ja käyttö tulee mahdolliseksi. Nimi RSA tulee keksijöidensä nimistä: Ronald Rivest, Adi Shamir ja Leonard Adleman. Tosin menetelmä keksittiin jo vähän aikaisemmin vuonna 1973 Britannian sotilastutkimuskeskuksessa. Keksijät olivat Clifford Cocks ja James Ellis. Asia salattiin ja tuli julki vasta 1997 (kuukautta ennen Ellis kuoli). Myös Yhdysvalloissa NSA yritti ensin salata julkisen avaimen kryptauksen.
GRAAFIT Kaikki matemaattinen ja laskuissa ja mallinnuksessa tarvittava ei liity lukuihin. Esimerkiksi graafit ovat tällaisia. Graafi muodostuu pisteistä (eli solmuista), esimerkiksi a, b, c, d, e, f, ja niitä mahdollisista yhdistävistä viivoista (eli kaarista). Viivat annetaan pistepareina, esimerkiksi pari (b, d) tarkoittaa, että pisteitä b ja d yhdistää viiva. Esimerkkigraafiin otetaan viivat (a, b), (a, c), (a, d), (b, d), (b, c), (c, d), (c, e), jolloin se voidaan havainnollistaa piirtämällä:
GRAAFIT: Piirtäminen b c d e f a
GRAAFIT: Mallinnus Graafi voidaan luonnollisesti piirtää loputtoman monilla eri tavoilla. Isojen graafien piirtäminen niin, että kuvasta saa jotain irti, on toisaalta taitolaji. Graafeilla mallinnettavia tilanteita on myös loputtoman monta, esimerkiksi: Ihmiset: a tuntee b:n, c ei tunne e:tä jne. Navigointi: paikkakunnat ja niiden väliset tieyhteydet Kemia: atomit ja niiden väliset sidokset Virtapiirit: johtimet, komponentit ja liitokset Tietokoneohjelmat: käskyt, haarautumiset Biotekniikka: neuroniverkot Matematiikka: matriisien tulkitseminen graafeiksi Graafiteoria on lisäksi hyvin suosittu matematiikan tutkimusalue.
GRAAFIT: Mallinnus Tehtävän ratkaisu graafeihin siirtymällä sujuu oheiseen tapaan. Erilaisia graafialgoritmeja on valmiina suuri määrä. Tehtävien matemaattinen mallinnus ja ratkaisu on yleensäkin tällainen, mutta graafeilla mallinnusvaihe on usein hyvinkin helppo. Probleema Graafiratkaisu Ratkaisu Mallinnus Graafiprobleema Ratkaisu valmiilla graafialgoritmilla Palautus
GRAAFIT: TSP (Travelling Salesman Problem) Kaikkia helpon näköisiäkään graafitehtäviä ei tätä nykyä voida yleisesti ratkaista nopeasti. Eräs tällainen on Kauppamatkustajan probleema (TSP): Onko olemassa tapaa kulkea graafin pisteet viivoja pitkin edeten siten, että jokaisessa pisteessä käydään kerran ja palataan sitten lähtöpisteeseen. Lisäksi voidaan antaa viivoille pituudet ja vaatia, että reitti olisi lyhin mahdollinen. Ei tunneta menetelmää, jolla TSP voitaisiin aina ratkaista nopeasti, monissa erikoistapauksissa kylläkin. Jos tällainen menetelmä löytyy tai näytetään, ettei sellaista ole, ratkeaa samalla kuuluisa P = NP -probleema ja ratkaisija saa Clay Instituten Millennium-palkinnon (1000000 $).
GRAAFIT: TSP Joitakin Kauppamatkustajan probleemoita voidaan ratkaista suurillekin pistemäärille. Ohessa on lyhin reitti linnuntietä Suomen kaikkien 10639 taajaman (pisteet) kautta. Sen pituus on 520527 km. TSP:llä on monia sovelluksia tekniikassa (robotiikassa, elektroniikassa, aikataulutuksessa jne.). Etsitty Concorde-ohjelmistolla 2009. Lähtödata: NGA GEOnet Names Server.
GRAAFIT: TSP Mitä tehdä TSP:lle, joka ei ratkea nopeasti? Joidenkin arvioiden mukaan noin 200 pistettä menisi vielä rutiininomaisesti. Jos kysymys on nimenomaan lyhimmän tai yleensä lyhyen reitin etsimisestä (ja reittejä on ilman muuta tiedossa), niin on menetelmiä, jotka etsivät lyhimmästä tietyn suhteellisen virheen (esimerkiksi neljäsosan) päässä olevan reitin, suurella todennäköisyydellä hyvän (lyhyen) reitin, tietyllä (pienellä) todennäköisyydellä lyhimmän reitin, (suurella todennäköisyydellä) jotain hyödyllistä tietoa lyhimmästä reitistä (esimerkiksi hyvän alarajan pituudelle), jonkin kombinaation edellisistä.
GRAAFIT: Neliväriprobleema Graafin värittäminen tarkoittaa, että pisteille annetaan väri eikä minkään viivan päätepisteillä saa olla samaa väriä. Esimerkiksi edellä ollut graafi voidaan värittää neljällä värillä, mutta ei kolmella. Kuuluisa Nelivärilause sanoo, että jos graafi voidaan piirtää ilman, että viivat leikkaavat (kuten esimerkkigraafi voidaan), niin se voidaan myös värittää neljällä värillä. Lause pätee myös valtiokarttojen värittämiseen neljällä värillä (pallonpinnalla). b e c f a d Lauseen tunnettu todistus on erittäin mutkikas ja vaatii pitkät tietokoneajot, josta syystä kaikki matemaatikot eivät vieläkään sitä hyväksy!