Luentorunko ja harjoitustehtävät SALAUSMENETELMÄT 801346A, 4 op Pohjautuu Leena Leinosen, Marko Rinta-ahon, Tapani Matala-ahon ja Keijo Väänäsen luentoihin
Sisältö 1 Johdanto 2 2 Lukuteoriaa 4 2.1 Jakoyhtälö ja erikantaiset esitykset............... 4 2.2 Jaollisuus............................. 5 2.3 Kongruensseista.......................... 7 3 Perinteisiä salakirjoitusmenetelmiä 10 3.1 Caesar ja sen yleistyksiä..................... 10 3.1.1 Caesarin yhteenlaskumenetelmä............. 10 3.1.2 Affiinikuvaus....................... 11 3.2 Sijoitusjärjestelmẗ......................... 14 3.3 Vigenéren järjestelmä....................... 15 3.4 Salakirjoitus matriiseilla..................... 16 4 Julkisen avaimen salakirjoitus (public key cryptography) 19 4.1 Yleinen periaate.......................... 19 4.2 RSA-menetelmä (Rivest, Shamir, Adleman 1978)....... 22 4.3 Tekstin esittäminen joukon Z n alkioina............. 23 4.4 Diskreetti logaritmi........................ 24 4.5 Diffie Hellman-avaimenvaihto.................. 26 4.6 Elgamal-salaus.......................... 26 4.7 Selkäreppuongelma........................ 27 4.8 Selkäreppujärjestelmä....................... 28 4.9 Huomautuksia........................... 29
HUOM: Ilmoittautukaa Web-oodiissa kurssille, jotta saisitta tietoja mahdollisista muutoksista ja peruutuksista. Luennot: Aloitetaan 14:10 Ke 14 16 IT133 To 14 16 IT138 Laskarit: Ti 12 14 KO148 Ke 12 14 KO148 Tehtävät viikko 37 : 3, 4, 5, 9a, 10, 11 38 : 18a, b, 20, 21, 23a, b, 26, 28b Loppukoe: 29.10.2012, 26.11.2012 Linkkejä: Johdatus matemaattiseen päättelyyn 1
1 Johdanto Tällä kurssilla tarkastellaan menetelmiä, jotka mahdollistavat tiedon siirtämisen tai tallentamisen niin, että ainoastaan tarkoitettu vastaanottaja saa viestin selville. Lähettäjän tehtävänä on salakirjoittaa (encrypt) selväkielinen teksti (plaintext) salakirjoitukseksi (cryptotext) ja vastaanottajan tehtävänä puolestaan avata (decrypt) salakirjoitus selväkieliseksi tekstiksi. Menettelyn tulee olla sellainen, että mahdollinen salakirjoituksen sieppaaja ei kykene murtamaan sitä eli selvittämään selväkielistä tekstiä, ainakaan nopeasti. Aikaisemmin salakirjoituksia tarvittiin lähinnä sotilaallisiin ja diplomaattisiin tarkoituksiin. Kuluneiden noin 30 vuoden aikana tietokoneisiin perustuvan tiedonvälityksen yleistyminen on merkinnyt sitä, että salausmenetelmiä tarvitaan päivittäin hyvin monilla muillakin yhteiskunnan alueilla kuten pankeissa ja yrityksissä. Selväkielinen teksti ja salakirjoitettu teksti kirjoitetaan käyttämällä jotakin aakkostoa (kirjaimet, numerot, muut merkit). Suomen- ja englanninkielisellä aakkostolla tarkoitetaan tällä kurssilla seuraavia aakkostoja: S) Suomenkielinen aakkosto, 29 kirjanta. E) Englanninkielinen aakkosto, 26 kirjainta. a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 10111213141516171819202122232425 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Jotta matemaattisia menetelmiä voitaisiin käyttää, kirjaimet korvataan usein luvuilla. Selväkielinen teksti ja salakirjoitus jaetaan viestiyksiköihin ja salaaminen tehdään yksikkö kerrallaan. Viestiyksikkö voi olla kirjain (kuten yllä olevassa esimerkissä), kirjainpari tai tietyn pituinen kirjainjono. Salakirjoittamiseen käytetään yleensä bijektiivistä funktiota E : P C, missä P = {selväkieliset viestiyksiköt} = {m}, C = {salakirjoitetut viestiyksiköt} = {c}. 2
Avaaminen tapahtuu tällöin käänteisfunktion D = E 1 avulla. Salakirjoitusjärjestelmään kuuluvat siis: (i) P, (ii) C, (iii) avainjoukko K = {k}, missä kukin avain k määrää salausfunktion E k ja avausfunktion D k, joille D k (E k (m)) = m. Lähettäjä tuntee ennakolta funktion E k ja vastaanottaja funktion D k, jolloin järjestelmä toimii seuraavan kaavion mukaisesti. A B m E k (m) = c c D k (c) = m C (=murtaja) Hyvältä salakirjoitusjärjestelmältä edellytetään: 1) E k (m) ja D k (c) voidaan laskea helposti. 2) Jollei tunneta funktiota D k, niin selväkielinen viesti m ei selviä salakirjoituksesta c, eli sieppaajalla on vaikea tehtävä. Kaikissa perinteisissä salakirjoitusjärjestelmissä D k saadaan välittömästi funktiosta E k, ei tosin aina niin helposti kuin äskeisessä esimerkissä. Näin ollen lähettäjän ja vastaanottajan tulee sopia jollakin tavalla avaimesta ja pitää tämä sopimuksensa salassa muilta. Tästä syystä näitä järjestelmiä kutsutaan yksityisen avaimen salakirjoituksiksi. Vuosina 1976 1978 kehitettiin ensimmäiset julkisen avaimen järjestelmät, joille on ominaista se, että E k ei paljasta funktiota D k, ainakaan helposti. Nämä perustuvat ns. yksisuuntaisiin funktioihin (one-way function), joiden käänteisfunktiota on käytännössä mahdotonta tai ainakin hyvin vaikeaa määrittää. Useimmat käytössä olevat salakirjoitusmenetelmät perustuvat lukuteorian tuloksiin. Tästä syystä kurssi aloitetaan kertaamalla eräitä lukuteorian alkeiden tuloksia. Esimerkki 1.1. Esimerkkinä käy Caesarin yhteenlaskumenetelmä, jossa salakirjoitus tehdään siirtämällä kirjaimia k askelta eteenpäin. Esimerkiksi k = 17 antaa seuraavaa: selvä: sala: a b c d e f g h i j k l m n o p q r s t u v w x y z R S T U V W X Y Z A B C D E F G H I J K L M N O P Q 3
Selväteksti: prime Salattu: GIZDV 2 Lukuteoriaa 2.1 Jakoyhtälö ja erikantaiset esitykset Luvuista puhuttaessa tällä kurssilla tarkoitetaan useimmiten kokonaislukuja Z = {0, ±1, ±2,...} tai erityisesti ei-negatiivisia lukuja N = {0, 1, 2,...}. Lause 2.1 (Jakoyhtälö). Jos a, b Z, b = 0, niin on olemassa sellaiset yksikäsitteiset q, r Z, että a = qb + r, 0 r < b. Tällöin luvulla n N on esitys n = a k b k + a k 1 b k 1 + + a 1 b + a 0 =: (a k... a 1 a 0 ) b, missä k 0 ja a i {0,..., b 1} kaikilla i = 0,..., k. Jos kantaluku b = 10, se merkitään näkyviin alaindeksinä. Tämä esitys saadaan jakoyhtälön avulla jakamalla toistuvasti luvula b. Olemme tottuneet käsittelemään lukuja 10- järjestelmässä, esimerkiksi 2367 = 2 10 3 + 3 10 2 + 6 10 + 7. 10-järjestelmän ohella erityisen tärkeä on 2-kantainen eli binäärijärjestelmä, jota tietokoneet käyttävät. Esimerkiksi luvun 319 8-kantainen esitys saadaan jakamalla toistuvasti kantaluvulla 8: 319 = 39 8 + 7, 39 = 4 8 + 7, joten 319 = (4 8 + 7) 8 + 7 = 4 8 2 + 7 8 + 7. Tätä merkitään 319 = 477 8. 4
2.2 Jaollisuus Määritelmä 2.2. Jos a, b Z ja on olemassa sellainen c Z, että a = bc, niin sanotaan, että b on luvun a tekijä (tai a on jaollinen luvulla b tai b jakaa luvun a). Tätä merkitään b a. Muulloin merkitään b a. Jokaisella a Z on aina triviaalit tekijät ±1 ja ±a. Lause 2.3. Jos n a ja n b, niin n (ra + sb) kaikilla r, s Z. Erityisesti pätee: 1) Jos n a ja n b, niin n (a ± b). 2) Jos n a, niin n ra kaikilla r Z. 3) Jos n a ja a b, niin n b. Määritelmä 2.4. Lukua q Z sanotaan tai jaottomaksi, jos sillä on vain triviaalit tekijät ±1 ja ±q. Muita lukuja sanotaan yhdistetyiksi. Lukua p Z 2 sanotaan alkuluvuksi, jos sillä on vain triviaalit tekijät ±1 ja ±p. Alkulukuja on äärettömän monta ja kaikki positiiviset kokonaisluvut voidaan esittää oleellisesti yksikäsitteisesti niiden avulla, kuten seuraava lause osoittaa. Lause 2.5 (Aritmetiikan peruslause). Jokainen positiivinen kokonaisluku 2 voidaan esittää järjestystä vaille yksikäsitteisesti alkulukujen tulona. Seuraus 2.6. 1) Jos p on alkuluku ja p ab, niin p a tai p b. 2) Jos r a, s a eikä luvuilla r ja s ole yhteisiä alkulukutekijöitä, niin rs a. 3) Jos r ab eikä luvuilla r ja a ole yhteisiä alkulukutekijöitä, niin r b. 4) Jos a = p pep, missä tulo käy kaikkien alkulukujen yli, e p N kaikilla p, ja e p = 0 vain äärellisen monella p, niin luvun a posiitivisten tekijöiden lukumäärä on p (e p + 1). 5
Esimerkiksi 4200 = 2 3 3 5 2 7, joten tekijöiden lukumäärä on (3 + 1)(1 + 1)(2 + 1)(1 + 1) = 48. Määritelmä 2.7. Olkoot a, b Z ja ainakin toinen = 0. Positiivista kokonaislukua d > 0 sanotaan lukujen a ja b suurimmaksi yhteiseksi tekijäksi, merkitään syt(a, b), jos 1) d a ja d b 2) ehdosta t a ja t b seuraa t d. Nähdään helposti, että d > 0 on suurin luonnollinen luku, joka jakaa kummankin luvuista a ja b. Jos lukujen a ja b alkutekijäesitykset tunnetaan, niin syt(a, b) on helppoa laskea. Esimerkiksi 4200 = 2 3 3 5 2 7 ja 10780 = 2 2 5 7 2 11, joten syt(4200, 10780) = 2 2 5 7 = 140. Suuria lukuja tarkasteltaessa niiden alkutekijäesitysten löytäminen on vaikeaa. Eukleideen algoritmilla suurin yhteinen tekijä löytyy kuitenkin nopeasti. Kyse on jakoyhtälön toistuvasta soveltamisesta. Voidaan olettaa, että a > b > 0. Eukleideen algoritmi toimii seuraavasti: r 0 = a, r 1 = b 0 r 1 < r 0 r 0 = q 1 r 1 + r 2 0 r 2 < r 1. r k = q k+1 r k+1 + r k+2. r n 2 = q n 1 r n 1 + r n n N : r n = 0, r n+1 = 0 0 r k+2 < r k+1 0 r n < r n 1 r n 1 = q n r n r n = syt(a, b). Tässä n = Eukleideen algoritmin pituus (length), jolle pätee n a 1. 6
Lause 2.8. Yllä kuvattu Eukleideen algoritmi päättyy äärellisen monen askelen jälkeen ja viimeinen nollasta eroava jakojäännös r n on syt(a, b). Edelleen Eukleideen algoritmin avulla löydetään sellaiset u, v Z, että syt(a, b) = ua + vb. Kokonaislukuja a ja b sanotaan keskenään jaottomiksi (relatively prime), jos syt(a, b) = 1. Merkitään joukon A alkioiden lukumäärää A. Määritelmä 2.9. Eulerin funktio φ: Z + Z + on määritelty seuraavasti: φ(n) on niiden kokonaislukujen b lukumäärä, joille 1 b n ja syt(b, n) = 1, ts. φ(n) = {1 b n syt(b, n) = 1}. Lause 2.10. Eulerin funktiolla φ on seuraavat ominaisuudet: 1) φ(1) = 1. 2) Jos p on alkuluku ja k Z +, niin φ(p k ) = p k 1 (p 1), erityisesti φ(p) = p 1. 3) Jos p ja q = p ovat alkulukuja, niin φ(pq) = (p 1)(q 1) = φ(p)φ(q). 2.3 Kongruensseista Esitellään nyt jaollisuuteen perustuva kongruenssikäsite, jonka otti käyttöön Gauss. Määritelmä 2.11. Jos a, b, n Z, n 2, niin a ja b ovat kongruentteja modulo n, merk. a b (mod n), jos n (a b). Kongruenssilla on seuraavat ominaisuudet: 1) a a (mod n). 2) a b (mod n), jos ja vain jos b a (mod n). 3) Jos a b (mod n) ja b c (mod n), niin a c (mod n). 7
4) Jos a b (mod n) ja c d (mod n), niin a ± c b ± d (mod n) ja ac bd (mod n). Ominaisuuksien (1) (3) perusteella kongruenssi modulo n on ekvivalenssirelaatio, joten se jakaa joukon Z alkiot ekvivalenssiluokkiin, ns. jäännösluokkiin modulo n. Luvun a määräämä jäännösluokka on a = {x Z x a (mod n)} = {a + kn k Z}. Selvästi a = b, jos ja vain jos a b (mod n). Erityisesti a = b, jos ja vain jos a b. Jos a Z, niin jakoyhtälön mukaan on olemassa yksikäsitteiset q, r Z, joille a = qn + r, 0 r < n. Tällöin a = r, joten jokainen kokonaisluku kuuluu täsmälleen yhteen luokista 0, 1, 2,..., n 1. Nämä jäännösluokat ovat erillisiä, joten jäännösluokkia modulo n on n kappaletta. Käytetään niiden joukolle merkintää Z n. Edellisen mukaan siis Z n = {0, 1, 2,..., n 1}. Koska n 1 = 1, n 2 = 2,..., niin nähdään, että myös Z n = { n + 1,..., 1, 0, 1,..., n }, kun n on parillinen, 2 2 { n 1 2 n 1,..., 1, 0, 1,..., }, kun n on pariton. 2 Ominaisuuteen (4) nojautuen voidaan määritellä jäännösluokkien modulo n summa ja tulo asettamalla a + b = a + b ja ab = ab. Asettamalla lisäksi a = a ja a b = a + ( b) voidaan jäännösluokilla modulo n suorittaa yhteen-, vähennys- ja kertolaskuja. Lisäksi joukosta Z tutut laskusäännöt ovat voimassa, ts. Z n on vaihdannainen ykkösellinen rengas ykkösalkionaan 1. Tarkastellaan seuraavaksi käänteisalkion olemassaoloa. Olkoon a = 0. Milloin on olemassa sellainen x, että ax = 1? Yhtäpitävästi voidaan kysyä, milloin kongruenssilla ax 1 (mod n) on ratkaisu x? 8
Lause 2.12. Kongruenssilla ax 1 (mod n) on ratkaisu, jos ja vain jos syt(a, n) = 1. Ratkaisut muodostavat täsmälleen yhden jäännösluokan modulo n. Lauseen 2.12 todistuksesta käy ilmi, miten yhtälön ax = 1 ratkaisu a 1 = x löytyy Eukleideen algoritmin avulla. Luokkaa a, jolle a 1 on olemassa, sanotaan alkuluokaksi modulo n. Alkuluokkien lukumäärä on φ(n) ja niiden muodostamalle joukolle käytetään merkintää Z n. Joukko Z n on vaihdannainen ryhmä kertolaskun suhteen. Jos n = p on alkuluku, niin Z p = Z p {0}, joten joukon Z p jokaisella nollasta eroavalla alkiolla on käänteisalkio. Joukossa Z p voidaan siis suorittaa rajoituksetta kaikkia neljää laskutoimitusta, vain nollalla jakaminen ei ole mahdollista, ja kaikki rationaaliluvuilta tutut laskusäännöt toimivat. Joukko Z p on näin esimerkki äärellisestä kunnasta. Nämä ovat tärkeitä eräissä salakirjoitusmenetelmissä. Kun otetaan yksi alkio jokaisesta jäännösluokasta modulo n, saadaan täydellinen jäännössysteemi modulo n. Vastaavasti ottamalla yksi alkio kustakin alkuluokasta modulo n, saadaan supistettu jäännössysteemi modulo n. Helposti todetaan, että jos a 1, a 2,..., a φ(n) on supistettu jäännössysteemi ja syt(a, n) = 1, niin myös aa 1, aa 2,..., aa φ(n) on supistettu jäännössysteemi. Tähän tietoon nojautuen ei ole vaikea todistaa seuraavaa lausetta. Lause 2.13 (Eulerin lause). Jos syt(a, n) = 1, niin a φ(n) 1 (mod n). Seuraus 2.14 (Fermat n pieni lause). Jos p on alkuluku ja p a, niin a p 1 1 (mod p). Lause 2.13 voidaan lausua myös muodossa: Jos a Z n, niin a φ(n) = 1. Tästä käy ilmi, että a 1 = a φ(n) 1, joten käänteisalkio a 1 saadaan potenssiinkorotuksella laskemalla a φ(n) 1. Olkoon seuraavassa rem(a, n) jakojäännös, joka saadaan, kun a jaetaan luvulla n. Kyseessä on siis luku r N, joka toteuttaa ehdot a r (mod n) ja 0 r < n. 9
Tarkastellaan potenssin a l jakojäännöksen rem(a l, n) nopeaa laskemista, kun syt(a, n) = 1. Jakoyhtälön mukaan l = qφ(n) + r, 0 r < φ(n). Eulerin lauseen mukaan a φ(n) 1 (mod n), joten a l = (a φ(n) ) q a r a r (mod n) eli rem(a l, n) = rem(a r, n). Olkoon luvun r binääriesitys r = e k 2 k + e k 1 2 k 1 + + e 1 2 + e 0, e i {0, 1}, e k = 1. Lasketaan peräkkäisillä neliöönkorotuksilla a 1 = rem(a 2, n), a 2 = rem(a 2 1, n) a 3 = rem(a 2 2, n) (= rem(a 22, n)), (= rem(a 23, n)),. a k = rem(a 2 k 1, n) (= rem(a 2k, n)). Tämän jälkeen saadaan a l a r a e k k a e k 1 k 1 ae 2 2 a e 1 1 a e 0 (mod n) ja rem(a l, n) saadaan laskettua nopeasti. 3 Perinteisiä salakirjoitusmenetelmiä 3.1 Caesar ja sen yleistyksiä 3.1.1 Caesarin yhteenlaskumenetelmä On yksinkertaista asettaa joukon Z n alkiot vastaamaan n-kirjaimisen aakkoston symboleja. Esimerkiksi englanninkielistä aakkostoa vastaa Z 26 eli a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 10111213141516171819202122232425 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 10
missä jäännösluokkien modulo n = 26 yläviivat on jätetty pois. Voidaan sopia, että selkoviesti kirjoitetaan pienillä kirjaimilla ja SALATTU VIESTI ISOILLA KIRJAIMILLA. Aikaisemmin tarkastellun Caesarin menetelmän salausfunktio E k ja avausfunktio D k ovat yllä olevin merkinnöin yksinkertaisesti E k (x) = x + k ja D k (x) = x k, missä laskutoimitukset tehdään joukossa Z N. 3.1.2 Affiinikuvaus Tarkastellaan nyt yleisempää järjestelmää, missä yhteenlasku korvataan affiinilla kuvauksella. Valitaan tätä varten a Z n ja b Z n. Avaimena on nyt pari (a, b) ja salausfunktio on E(x) = E a,b (x) = ax + b, E : Z n Z n. Avainten lukumäärä on tällöin φ(n) n. Erikoistapauksina a = 1 antaa Caesarin yhteenlaskumenetelmän, E(x) = x + b b = 0 antaa ns. kertolasku-caesarin, E(x) = ax. Kuvaus E : Z n Z n on bijektio ja y = E(x) = ax + b ax = y b x = a 1 (y b). Edellä a Z n, joten a 1 on olemassa ja avausfunktioksi saadaan D(y) = D a,b (y) = a 1 y a 1 b. Yhteenveto affiinista järjestelmästä: P = C = Z n 11
K = {(a, b)}, missä a Z n ja b Z n salausfunktio E(x) = ax + b avausfunktio D(y) = a 1 y a 1 b. Affiini järjestelmä voidaan murtaa seuraavilla tavoilla: Brute de force. Kokeillaan kaikki avaimet. Frekvenssianalyysi. Käytetään hyväksi kirjainten esiintymistiheyksiä. Alla olevassa taulukossa on esitetty suomen ja englannin kielen kymmenen yleisintä kirjainta esiintymistiheyksineen. suomi kirjain % kirjain % A 11,5 S 6,6 I 10,5 L 5,9 T 9,7 O 5,5 N 9,1 Ä 5,2 E 8,4 K 4,9 englanti kirjain % kirjain % e 13,11 r 6,83 t 10,47 i 6,35 a 8,15 s 6,10 o 8,00 h 5,26 n 7,10 d 3,79 Saksan kielen kymmenen yleisintä kirjainta ovat E, N, I, S, R, A, T, D, H, U ja ranskan kielen E, S, A, I, T, N, R, U, L, O. Tiheydet ovat suuntaa-antavia ja vaihtelevat hieman tekstistä riippuen. Yleisyysjärjestyskin voi poiketa hieman lähteestä riippuen. Esimerkki 3.1. Avaa Caesarin yhteenlaskumenetelmällä laadittu englanninkielinen salakirjoitus ALYUNYMNWIGGIHXCPCMIL. Mikä on ollut avain? 1. Ylläolevan nojalla englanninkielen Top-6 kirjainjoukko on E M := {e,t,a,o,n,r} = {4, 19, 0, 14, 13, 17}. (1) 12
2. Salatun tekstin Top-6 joukoksi saadaan C M := {I,Y,G,M,C,L} = {8, 24, 6, 12, 2, 11}. (2) 3. Tutkitaan miten joukko E M kuvautuu joukolle C M Caesar-salauksessa. On todennäköistä, että: 3a. Kirjain e kuvautuu kirjaimelle I; tai 3b. Kirjain e kuvautuu kirjaimelle Y; tai... 3a. Tässä salausfunktio on E 4 (e) = I, E 4 (E M ) = {8, 23, 4, 18, 17, 21}, (3) joten E 4 (E M ) C M = {8}. (4) Tämä on epätodennäköistä! 3b. Tässä salausfunktio on E 20 (e) = Y, E 20 (E M ) = {24, 13, 20, 8, 7, 11}, (5) joten E 20 (E M ) C M = {24, 8, 11}. (6) Nyt jo puolet Top-joukoista täsmää, joten yritetään avausta dekryptausfunktiolla D 20 (y) = y 20 = y + 6, (7) jolloin aluksi saadaan D 20 (A) = g, D 20 (L) = r, D 20 (Y) = e, D 20 (U) = a, D 20 (N) = t. (8) Tämä on selkokieltä, joten jatketaan avausta. Siten selkoviesti on ollut greatestcommondivisor (9) ja kryptausavain k = 20. 13
Esimerkki 3.2. Seuraava englanninkielestä salattu viesti VCLMPCAVESVFYDVOVIZHPCYXAXGBDATYZ on muodostettu affiinilla järjestelmällä. Mikä on selkokielinen teksti ja kryptausfunktio? 1. Ylläolevan nojalla englanninkielen Top-6 kirjainjoukko on E M := {e,t,a,o,n,r} = {4, 19, 0, 14, 13, 17}. (10) 2. Salatun tekstin Top-6 joukoksi saadaan C M := {V,C,A,Y,D,Z} = {21, 2, 0, 24, 3, 25}. (11) 3. Tutkitaan miten joukko E M kuvautuu joukolle C M affiinilla kuvauksella. On todennäköistä, että: 3a. Kirjain e kuvautuu kirjaimelle V; ja 4a. Kirjain t kuvautuu kirjaimelle C; tai 4b. Kirjain a kuvautuu kirjaimelle C; tai 4c. Kirjain o kuvautuu kirjaimelle C; tai 4d. Kirjain n kuvautuu kirjaimelle C; tai... 5. Olkoon salausfunktio E(x) = ax + b, a Z 26, b Z 26. (12) Tarvitaan siis yhtälöpari lukujen a ja b ratkaisemiseen. 3a+4a... 3.2 Sijoitusjärjestelmẗ Edellä mainitut järjestelmät ovat erikoistapauksia yksinkertaisesta sijoitusjärjestelmästä. Siinä on avainjoukkona joukon Z n permutaatioiden muodos- 14
tama joukko S n, jonka alkiot σ kirjoitetaan usein muotoon ( ) 0 1... n 1 σ =. σ(0) σ(1)... σ(n 1) Nämä ovat bijektioita, joten niillä on käänteiskuvaus σ 1. Yksinkertainen sijoitusjärjestelmä: P = C = Z n K = S n salausfunktio E σ (x) = σ(x) avausfunktio D σ (y) = σ 1 (y). Joukon S n alkioiden lukumäärä on n!, joten avaimia on runsaasti. Yksinkertainen sijoitusjärjestelmä on murrettavissa kirjainten esiintymistiheyksiä tutkimalla, koska kirjaimen x kuva E(x) on sama koko ajan. Tästä johtuen on kehitetty myös moniaakkosjärjestelmiä, joista esimerkkinä tarkastellaan Vigenéren järjestelmää. 3.3 Vigenéren järjestelmä Vigenéren järjestelmän avain koostuu useasta Caesarin menetelmän avaimesta, joita sovelletaan jaksollisesti. Oletetaan, että k 1, k 2,..., k r Z n. Jaetaan selväkielinen teksti r:n pituisiin osiin x 1 x 2... x r. Kunkin osan i:s kirjain x i salakirjoitetaan Caesarin salausfunktion E ki avulla: selvä x i E ki (x i ) = x i + k i = y i sala. Vastaava avausfunktio on D ki (y i ) = y i k i. Avaimet k i annetaan usein avainsanan avulla. Vigenéren järjestelmässä sama kirjain kuvautuu eri kirjaimiksi paikasta riippuen, joten yksinkertainen kirjainten esiintymistiheyteen perustuva analyysi ei toimi. Kuitenkin, jos avaimen pituus r selviää, voidaan kukin k i murtaa erikseen kuten Caesarissa. Myös avaimen pituuden määrittämiseksi on olemassa menetelmiä. 15
3.4 Salakirjoitus matriiseilla Jos viestiyksikön pituus on r > 1 kirjainta, on luontevaa tarkastella viestiyksikköjä joukon Z r n vektoreina ja käyttää salauksessa r r-matriiseja. Rajoitutaan seuraavassa tapaukseen r = 2. Kerrataan lyhyesti matriisien laskusääntöjä: [ ] x Joukon Z 2 n alkiot ovat. y [ ] a b 2 2-matriisit ovat. c d Kaksi matriisia ovat identtiset, jos ja vain jos niissä samoilla paikoilla olevat alkiot ovat identtiset, ts. [ ] [ ] a11 a 12 b11 b 12 = a ij = b ij kaikilla i, j {1, 2}. a 21 a 22 b 21 b 22 Yhteenlasku on määritelty seuraavasti: [ ] [ ] [ ] [ ] [ ] [ ] x u x + u a b x u a + x b + u + =, + =. y v y + v c d y v c + y d + v Skalaarilla kertominen on määritelty seuraavasti: [ ] [ ] [ ] [ ] x ax a b ua ub a =, u =. y ay c d uc ud Kertolasku on määritelty seuraavasti: [ ] [ ] [ ] [ ] [ ] [ ] a b x ax + by a b x u ax + by au + bv =, =. c d y cx + dy c d y v cx + dy cu + dv Kertolasku ei ole vaihdannainen. [ ] 1 0 Yksikkömatriisi I = on kertolaskun neutraalialkio. 0 1 16
[ ] a b Matriisin A = käänteismatriisi on matriisi A 1, jolle AA 1 = c d A 1 A = I, mikäli tällainen matriisi on olemassa. Voidaan osoittaa, että A 1 on olemassa, jos ja vain jos D = ad bc Z n. Tällöin [ ] d b A 1 = D 1. c a [ ] [ ] a b e Lause 3.3. Jos A =, a, b, c, d Z n, ad bc Z n ja B = c d f Z 2 n, niin affiini kuvaus E : Z 2 n Z 2 n, E(X) = AX + B, on bijektio, jonka käänteiskuvaus on D : Z 2 n Z 2 n, D(Y ) = A 1 (Y B). Matriisisalakirjoitus: { [ ] x } P = C = Z 2 n = x, y Zn y [ ] [ ] a b e avain {A, B}, A =, ad bc Z n, B = c d f salausfunktio E(X) = AX + B avausfunktio D(Y ) = A 1 Y A 1 B. Z 2 n Huomautus 3.4. Jos valitaan A = I = [ 1 0 0 1 ], niin E(X) = X + B, joten kyseessä on Vigenéren järjestelmä, missä r = 2. Vastaavasti matriisisalakirjoituksen erikoistapauksena saadaan yleinen Vigenéren järjestelmä, jos tarkastellaan r r-matriiseja. Tarkastellaan nyt matriisisalakirjoituksen murtamista. Oletetaan ensin, että B = [ 0 0 ] ja tunnetaan kaksi paria selväkielistä tekstiä ja vastaavat salakirjoitukset. Tämä on mahdollista esimerkiksi niin, että sieppaaja onnistuu jotenkin lähettämään tekstiä tarkasteltavan kanavan kautta. Olkoot tunnetut selväkieliset tekstit P 1 = [ p11 p 21 ] ja P 2 = 17 [ p12 p 22 ]
sekä vastaavat salakirjoitukset ] ] C 1 = [ c11 c 21 ja C 2 = [ c12 Tällöin C 1 = AP 1 ja C 2 = AP 2 eli [ ] ] p11 p 12 C = AP, missä P = [P 1 P 2 = ja p 21 p 22 [ ] ] c11 c 12 C = [C 1 C 2 =. c 21 c 22 Jos nyt P 1 ja P 2 on valittu niin, että detp Z n, niin P 1 on olemassa. Tällöin saadaan A = CP 1, A 1 = P C 1 ja järjestelmä on murrettu. Tapauksessa B = [ ] 0 0 murtamiseen tarvitaan vielä kolmas pari P3 ja C 3 : C 1 = AP 1 + B, C 2 = AP 2 + B, C 3 = AP 3 + B. Tällöin päästään yllä olevan kaltaiseen tilanteeseen vähentämällä kolmas yhtälö kahdesta ensimmäisestä: C 1 C 3 = A(P 1 P 3 ), C 2 C 3 = A(P 2 P 3 ). Jos tästä saadaan A, niin sen jälkeen B = C 1 AP 1. Esimerkki 3.5. Olkoot tunnetut selväkieliset tekstit [ ] [ ] 3 4 P 1 = ja P 2 = 4 7 sekä vastaavat salakirjoitukset [ ] [ ] 2 1 C 1 = ja C 2 =. 1 2 a) Murra järjestelmä eli määrää käytetty salausmatriisi ja sitä vastaava avausmatriisi. b) Dekryptaa salattu viesti [ ] 3 C 3 =. 2 c 22. 18
4 Julkisen avaimen salakirjoitus (public key cryptography) 4.1 Yleinen periaate Nykyaikaisissa tiedonvälitysjärjestelmissä perinteisillä salakirjoitusmenetelmillä on esimerkiksi seuraavat ongelmat: Avaimista sopiminen ja niiden välittäminen. Jos verkossa on n käyttäjää, tarvitaan ( n 2) = n(n 1)/2 avainta. Jos joku käyttäjä haluaa vaihtaa avaimensa (tai uusi käyttäjä liittyy verkkoon), tarvitaan n 1 (tai n) sopimusta uusista avaimista. Allekirjoitusongelma, koska normaali allekirjoitus on korvattava jotenkin. Aikaisemmin, kun salausta käytettiin lähinnä sotilaallisissa tai diplomaattisissa tarkoituksissa, nämä seikat eivät tuottaneet suurta ongelmaa. Vuonna 1976 Diffie ja Hellman esittivät ajatuksen julkisen avaimen järjestelmistä, joissa yllä mainitut ongelmat on selvitetty. Tällaisessa järjestelmässä kukin käyttäjä U muodostaa oman salausmenettelynsä E U D U, jotka toteuttavat ehdon ja avausmenettelynsä D U (E U (m)) = m kaikilla selväkielisillä viestiyksiköillä m. (13) Kukin käyttäjä U julkaisee salausmenettelynsä E U kaikkien käytettävissä. Avausmenettelyn D U avainkirjassa, joka on käyttäjä U pitää vain omana tietonaan. Jos A haluaa lähettää selväkielisen viestiyksikön m käyttäjälle B, hän etsii avainkirjasta käyttäjän B salakirjoitusmenettelyn E B ja salakirjoittaa viestinsä sen avulla, ts. c = E B (m). Kun B saa salakirjoitetun viestin c, hän saa ehdon (13) avulla viestin m selville käyttämällä (salaista) avausmenettelyään D B : D B (c) = D B (E B (m)) = m. 19
Jotta menettely olisi toimiva ja salaisuus säilyisi, tarvitaan seuraavat ehdot, joiden tulee olla voimassa kaikille käyttäjille U: Menettelyt E U ja D U ovat nopeita eivätkä tarvitse liian paljon muistia. Menettelyn E U avulla on käytännössä mahdotonta määrittää menettelyä DU, jolle DU(E U (m)) = m kaikilla m P. (14) (15) Ominaisuus (15) säilyttää järjestelmän salaisena ja mahdollistaa salausmenettelyn julkaisemisen avainkirjassa. Jos joku käyttäjistä vaihtaa avaimensa, riittää vaihtaa uusi E U avainkirjaan. Uuden käyttäjän mukaantulo on yhtä yksinkertaista. Edellä mainittu menettely muodostetaan usein käyttämällä yksisuuntaista funktiota tai salaovifunktiota. Määritelmä 4.1. Funktiota f sanotaan yksisuuntaiseksi, jos sen arvot ovat helposti laskettavissa ja käänteisfunktion f 1 (joka on olemassa) määrääminen on hyvin vaikeaa. Yksisuuntaista funktiota sanotaan salaovifunktioksi, jos sen käänteisfunktio on helppoa määrätä jonkin lisätiedon (salaovi, trapdoor) avulla. Funktiota ei yleensä onnistuta todistamaan yksisuuntaiseksi, joten joudutaan käyttämään funktioita, joiden uskotaan olevan yksisuuntaisia. Tällaisten funktioiden muodostaminen perustuu usein vaikeisiin ja paljon tutkittuihin lukuteorian ongelmiin, esimerkiksi RSA-järjestelmässä suurten lukujen tekijöihin jakamisen vaikeuteen. Jos käytössä on salaovifunktioita f U, niin voidaan muodostaa ehdot (13) (15) toteuttava järjestelmä valitsemalla E U = f U ja D U = f 1 U. Tarkastellaan nyt allekirjoitusongelmaa, jonka ratkaisemiseksi asetetaan kaksi uutta vaatimusta, joiden tulee olla voimassa kaikille käyttäjille U: E U (D U (c)) = c kaikilla salakirjoituksilla c. (16) Menettelyn E U avulla on käytännössä mahdotonta määrittää menettelyä D U, jolle E U (D U(c)) = c kaikilla c C. (17) 20
Julkisen avaimen järjestelmässä on usein P = C sama kaikilla käyttäjillä. Jos A lähettää käyttäjälle B selväkielisen viestin, hän lähettää allekirjoituksen s muodossa m = D A (s), jolloin B etsii avainkirjasta menettelyn E A ja laskee ehdon (16) avulla E A (m) = E A (D A (s)) = s. Allekirjoituksen muodostaa pari (s, D A (s)) = (s, m). Menettely edellyttää ehtoja (14), (16) ja (17), erityisesti ehto (17) varmistaa, että vain A voi toimia lähettäjänä. Käyttäjä A ei voi myöskään jälkikäteen kieltää viestiä. A s m B D A (s) = m m E A (m) = s EA Avainkirja Edellä oleva menettely voidaan toteuttaa salaovifunktiolla f valitsemalla E A = f, D A = f 1. Jos halutaan suorittaa salakirjoitus ja allekirjoitus, tarvitaan ominaisuudet (13) (17). Tällöin A muodostaa allekirjoitusosasta s tekstin c = E B (D A (s)). Käyttäjä B soveltaa tähän funktiota E A D B : E A (D B (c)) = E A (D B (E B (D A (s)))) = E A (D A (s)) = s. Menettely E A löytyy avainkirjasta, mutta vain B tuntee menettelyn D B ja voi määrittää allekirjoituksen s. Käyttäjä B käyttää A:n allekirjoituksena paria (s, D B (c)) = (s, D A (s)) kuten edellä. A s E B E B (D A (s)) = c c c B E A (D B (c)) = s Avainkirja EA Koska julkisen avaimen salakirjoitus vaatii yleensä paljon enemmän aikaa kuin perinteiset menetelmät, sitä käytetään usein perinteisen menetelmän ohella avainten vaihdossa eli käytettävän perinteisen menetelmän avaimet vaihdetaan julkisen avaimen menetelmällä. 21
4.2 RSA-menetelmä (Rivest, Shamir, Adleman 1978) RSA-menetelmässä salaovifunktion muodostus perustuu vuosisatoja tutkittuun lukuteorian ongelmaan: kuinka annettu (suuri) luku n jaetaan alkutekijöihin? Yksisuuntaisen funktion perusta on nyt se, että annettujen lukujen tulo on nopeasti laskettavissa, mutta tekijöiden löytäminen tulosta vaatii nopeiltakin koneilta liikaa aikaa. Olkoot p ja q kaksi eri alkulukua ja n = pq. Tällöin φ(n) = (p 1)(q 1). Valitaan sellainen luku e, 1 < e < φ(n), että syt(e, φ(n)) = 1 (mikä tahansa alkuluku e väliltä max{p, q} < e < φ(n) käy). Eukleideen algoritmin avulla löydetään ehdon 1 < d < φ(n) toteuttava luku d, jolle ed 1 (mod φ(n)). Tällöin ed = 1 + lφ(n) eräällä l N. Eulerin lauseeseen nojautuen saadaan seuraava lause. Lause 4.2. Kaikilla a Z n on a ed = a. Olkoon f : Z n Z n, f(a) = a e, ja g : Z n Z n, g(a) = a d. Tällöin g = f 1 Lauseen 4.2 perusteella ja molempien funktioiden arvot ovat nopeasti laskettavissa potenssiinkorotuksella modulo n, kun e ja d tunnetaan. Jos n ja e tunnetaan, niin f(a) on laskettavissa, mutta luvun d laskeminen ei onnistu ilman lukua φ(n), jonka löytäminen edellyttää alkulukujen p ja q tuntemista eli luvun n tekijöihinjakoa. Luku d on siis salaovi, jota ilman f 1 ei löydy, ja f on salaovifunktio. RSA-järjestelmässä kukin käyttäjä U valitsee yllä olevaan tapaan alkuluvut p U ja q U, laskee luvun n U = p U q U, valitsee sitten luvun e U, 1 < e U < φ(n U ), ja laskee luvun d U, jolle e U d U 1 (mod φ(n U )). Avainkirjassa kukin käyttäjä julkaisee avaimensa K U = (n U, e U ), mutta pitää omana tietonaan luvun d U (ja luvut p U, q U ), joka muodostaa salaoven. Kun käyttäjä A haluaa lähettää viestin käyttäjälle B, hän muuntaa viestinsä joukon Z nb alkioiksi esimerkiksi seuraavassa kappaleessa esitettävällä tavalla ja toimii edellä kuvatun yleisen periaatteen mukaisesti. Viestin m Z nb salakirjoitus on E B (m) = m e B = c Z nb. 22
Vain B tietää luvun d B, joten hänen avausfunktionsa on D B (c) = c d B = m e Bd B = m. Allekirjoitus onnistuu myös yleisen periaatteen mukaisesti, A lähettää allekirjoituksensa s muodossa D A (s) = s d A = m Z na. Pari (s, m) muodostaa allekirjoituksen. Jos halutaan salaus ja allekirjoitus, niin voidaan toimia yleisen periaatteen mukaisesti, jos n A < n B. Tällöin A laskee ensin rem(s d A, n A ) = m (muista, että rem(a, n) tarkoittaa lukua r, jolle 0 r < n ja a r (mod n)) ja sitten rem(m e B, n B ) = c, Salattu allekirjoitus on siis c = rem((rem(s d A, n A )) e B, n B ). Saatuaan salakirjoituksen c käyttäjä B laskee ensin rem(c d B, n B ) = rem(m e Bd B, n B ) = m ja sitten rem(m e A, n A ) = rem(s d Ae A, n A ) = s. Tämä menettely ei toimi, jos n B < n A, koska tällöin rem(m, n B ) voi olla sama usealla arvolla m. Jos n B < n A, vaihdetaan järjestystä: A laskee ensin rem(s e B, n B ) = m 1 ja sitten rem(m d A 1, n A ) = c eli c = rem((rem(s e B, n B )) d A, n A ). Vastaavasti B avaa salakirjoituksen c laskemalla ensin rem(c e A, n A ) = m 1, ja sitten rem(m d B 1, n B ) = s. 4.3 Tekstin esittäminen joukon Z n alkioina Edellä on muunnettu N symbolin aakkosto yleensä luvuiksi 0, 1,..., N 1, jotka voidaan tulkita myös joukon Z N alkioiksi. Esimerkiksi RSA-järjestelmässä toimitaan joukossa Z n, missä n on suuri. Jos N-kirjaimisella aakkostolla kirjoitettu teksti jaetaan k-pituisiin osiin a 1 a 2... a k, 0 a i < N, voidaan jokainen tällainen osa esittää kääntäen yksikäsitteisesti N-kantaisena muodossa a = a 1 N k 1 + a 2 N k 2 + + a k. 23
Nyt a N k 1, joten jos luku k valitaan niin, että N k n, niin Nkirjaimisen aakkoston k-pituiset sanat voidaan esittää kääntäen yksikäsitteisesti joukon Z n osajoukkona luonnollisella tavalla. Jos taas n N l, niin joukon Z n jokaista alkiota vastaa eräs N-kirjaimisen aakkoston l-pituinen sana. Jos siis käytetään RSA-järjestelmää ja jokainen käyttäjä U valitsee lukunsa n U niin, että N k n U N l, k, l N, niin kaikki käyttäjät voivat valita P = {k-kirjaimiset sanat} Z nu C = Z nu {l-kirjaimiset sanat}. 4.4 Diskreetti logaritmi Reaalilukujen joukossa lukujen b x ja log b x laskeminen vaaditulla tarkkuudella on yhtä nopeaa. Tarkastellaan nyt vastaavia laskuja joukossa Z n. Jos b Z n, niin b x on laskettavissa nopeasti suurillakin x N. Oletetaan sitten, että tiedetään alkion y Z n olevan muotoa y = b x. Kuinka x = log b y saadaan selville (tässä logaritmi on ns. diskreetti logaritmi, ei joukon R + logaritmifunktio)? Tälle diskreetin logaritmin ongelmalle ei tunneta nopeaa ratkaisua yleisessä tapauksessa, joten jälleen voidaan rakentaa yksisuuntainen funktio. Määritelmä 4.3. Lukua g, 1 g n 1, sanotaan primitiivijuureksi modulo n, jos Z n = {g k k = 0, 1,..., φ(n) 1} = {1, g, g 2,..., g φ(n) 1 }. Jos g on primitiivijuuri modulo n, niin sen määräämää jäännösluokkaa sanotaan joukon Z n primitiiviseksi alkioksi. Jokaista n kohti ei löydy primitiivijuurta, vaan ainoastaan seuraavan lauseen mukaisissa tilanteissa. Lause todistetaan kurssilla Lukuteoria A. 24
Lause 4.4. Primitiivijuuri modulo n on olemassa, jos ja vain jos n on 2, 4, p l, 2p l, l = 1, 2,..., missä p > 2 on alkuluku. Primitiivijuuri liittyy läheisesti seuraavaksi määriteltävän kertaluvun käsitteeseeen. Määritelmä 4.5. Olkoon n 2 ja syt(a, n) = 1. Luvun a kertaluvuksi modulo n sanotaan pienintä ehdon a k 1 (mod n) toteuttavaa positiivista kokonaislukua k. Tällöin merkitään k = ord n a. Eulerin lauseen mukaan a φ(n) 1 (mod n), joten ord n a φ(n). Lause 4.6. Olkoon n 2 ja syt(a, n) = 1. Tällöin a m 1 (mod n) ord n a m. Seuraus 4.7. ord n a φ(n). Seuraus 4.8. a j a k (mod n) jos ja vain jos j k (mod ord n a). Lauseen 4.6 avulla voidaan nyt todistaa seuraava kertaluvun ja primitiivijuuren yhteys. Lause 4.9. Luku g, 1 g n 1, on primitiivijuuri modulo n, jos ja vain jos ord n g = φ(n). Edellisten lauseiden todistuksista käy myös ilmi, että jos g on primitiivijuuri modulo n, niin jokaisella y Z n on yksikäsitteinen esitys muodossa y = g k, 0 k φ(n) 1. Tähän perustuen on mielekästä asettaa seuraava määritelmä. Määritelmä 4.10. Olkoon g Z n primitiivinen. Alkion y Z n diskreetiksi logaritmiksi kannan g suhteen sanotaan sellaista lukua k {0, 1,..., φ(n) 1}, että y = g k. Tätä merkitään k = log g y. Edellä valitaan usein n = p alkuluvuksi, jolloin Z p on äärellinen kunta. 25
4.5 Diffie Hellman-avaimenvaihto Oletetaan, että joukossa Z n on primitiivinen alkio g. Tiedonsiirtojärjestelmän avaimenvaihtomenettely voidaan hoitaa seuraavasti: kaikki käyttäjät tuntevat luvun n ja primitiivisen alkion g. Kukin käyttäjä U valitsee luvun m U {1,..., φ(n) 1} ja laskee g m U, jonka hän julkaisee. Käyttäjien A ja B keskinäisen yhteydenpidon avaimen määrää g m Am B. Käyttäjä A saa avaimen potenssiinkorotuksella (g m B ) m A = g m Am B ja käyttäjä B vastaavasti (g m A ) m B = g m Am B. Sieppaaja tuntee vain alkiot g m A ja g m B. Jos hän ratkaisisi diskreetin logaritmin ongelman, ts. luvun m A tai luvun m B, avain löytyisi. Muuten sen löytäminen ei ilmeisesti onnistu (huomaa, että g m A g m B = g m A+m B ). 4.6 Elgamal-salaus Olkoon b Z p annettu, missä p on alkuluku. Yleensä b valitaan primitiiviseksi, mutta se ei ole välttämätöntä. Kaikki käyttäjät tuntevat alkiot p ja b. Oletetaan lisäksi, että P, C Z p (usein Z p). Kukin käyttäjä U valitsee luvun m U {1, 2,..., p 2} ja pitää sen omana tietonaan. Julkiseen avainkirjaan annetaan b m U Z p. Jos joku käyttäjä haluaa lähettää viestin m Z p käyttäjälle A, hän valitsee k N ja lähettää parin (b k, mb mak ) Z p2. Koska b mak = (b m A ) k ja b m A on avainkirjassa, on pari laskettavissa nopeasti potenssiinkorotuksella. Käyttäjä A (ja vain hän) tuntee luvun m A, joten hän laskee parin ensimmäisen komponentin avulla (b k ) m A = b mak. Jakamalla näin saadulla alkiolla toisen komponentin A saa mb m Ak b m Ak = m. Jos sieppaaja ratkaisee diskreetin logaritmin ongelman, on murtaminen helppoa. Muuten on ilmeisesti vaikea saada b mak alkioista b k ja b m A. Tilanne on siis sama kuin Diffie Helman-avaimenvaihdossa. 26
Edellä viesti m on naamioitu alkion b m Ak avulla ja ensimmäinen komponentti b k on johtolanka, jonka avulla A (ja vain hän) voi riisua naamion. 4.7 Selkäreppuongelma Oletetaan, että on annettu k luvun joukko {v 1, v 2,..., v k } Z + ja positiivinen V Z +. Onko olemassa sellaista osajoukkoa I {1, 2,..., k}, että v i = V. i I Edellä oleva kysymys voidaan tulkita myös seuraavalla tavalla: jos selkärepun tilavuus on V ja on k esinettä, joiden tilavuudet ovat v 1, v 2,..., v k, niin voidaanko reppu pakata näillä esineillä tasan täyteen? Tätä kysymystä kutsutaan selkäreppuongelmaksi (knapsack problem). Se voidaan muotoilla myös seuraavasti: olkoot v 1, v 2,..., v k ja V annettuja positiivisia kokonaislukuja. Onko olemassa sellaisia lukuja ε i {0, 1}, i = 1,..., k, että k ε i v i = ε 1 v 1 + ε 2 v 2 + + ε k v k = V? i=1 Jos k on suuri, niin on osoitettu, että selkäreppuongelma on yleisessä tapauksessa hyvin vaikea ratkaista. Eräissä erikoistapauksissa ongelma on kuitenkin helppo ratkaista. Määritelmä 4.11. k-jonoa v 1, v 2,..., v k sanotaan superkasvavaksi (superincreasing), jos jokaisella j = 2,..., k pätee v j > v 1 + + v j 1. Myös vastaavaa joukkoa {v 1, v 2,..., v k } ja selkäreppuongelmaa sanotaan superkasvavaksi. Superkasvava selkäreppu on helppo ratkaista seuraavasti: olkoot superkasvava joukko {v 1, v 2,..., v k } ja luku V annettu. Jos V > v 1 + v 2 + + v k, 27
ratkaisua ei ole. Oletetaan siis, että V v 1 + v 2 + + v k. Mahdollisessa ratkaisussa ε 1, ε 2,..., ε k on ε k = 1, jos ja vain jos V v k ; tämän jälkeen saadaan rekursiivisesti kaikilla j = k 1, k 2,..., 1 (tässä järjestyksessä) ε j = 1, jos ja vain jos V (ε k v k + + ε j+1 v j+1 ) v j. Näin saadaan luvut ε 1, ε 2,..., ε k {0, 1}. Jos V = ε 1 v 1 + ε 2 v 2 + + ε k v k, niin selkäreppu ratkeaa ja ε 1, ε 2,..., ε k on ratkaisu. Muutoin selkäreppu ei ratkea. 4.8 Selkäreppujärjestelmä Sovitaan, että selväkieliset viestiyksiköt ovat binäärilukuja, joiden pituus on korkeintaan k (tähän päästään käyttämällä aakkostolle lukuvastineita ja muuntamalla tiettyä kirjainmäärää vastaava luku binääriluvuksi). Tyypillinen selväkielinen viestiyksikkö on siis m = (m 1 m 2... m k ) 2 = m 1 2 k 1 + m 2 2 k 2 + + m k, m i {0, 1}. Kukin käyttäjä U valitsee superkasvavan k-jonon u 1, u 2,..., u k ja sellaiset kokonaisluvut n U ja a U, että n U > u 1 + u 2 + + u k, 1 < a U < n U, syt(a U, n U ) = 1. (18) Tämän jälkeen U määrittää (Eukleideen algoritmilla) luvun b U, jolle a U b U 1 (mod n U ) (ts. a 1 U = b U joukossa Z n U ). (19) Seuraavaksi käyttäjä U laskee k-jonon u 1, u 2,..., u k, missä u i = rem(a U u i, n U ), i = 1, 2,..., k. Käyttäjä U pitää luvut u i, n U, a U ja b U vain omana tietonaan, mutta julkaisee k-jonon u 1, u 2,..., u k avaimenaan. Siten K U 28 = {u 1, u 2,..., u k }. Jos
joku haluaa lähettää käyttäjälle U viestin m = (m 1 m 2... m k ) 2, hän käyttää salausfunktiota E U (m) = m 1 u 1 + m 2 u 2 + + m k u k = c, joka on helppoa laskea avaimesta K U. Avausmenettely D U koostuu kahdesta osasta. Salaoven muodostaa luku b U, jonka U tuntee. Ensimmäisessä vaiheessa U laskee kongruenssin (19) avulla b U c b U (m 1 a U u 1 + m 2 a U u 2 + + m k a U u k ) m 1 u 1 + m 2 u 2 + + m k u k (mod n U ). Ehdon (18) mukaisesti yllä olevasta kongruenssista seuraa yhtälö rem(b U c, n U ) = m 1 u 1 + m 2 u 2 + + m k u k. Toisessa vaiheessa ratkaistaan tämä superkasvava selkäreppu ja saadaan m = (m 1 m 2... m k ) 2. Edellä kuvatun menettelyn idea on luonnollisesti siinä, että käyttäjän U superkasvava jono u 1, u 2,..., u k sotketaan luvulla a U kertomalla avainjonoksi u 1, u 2,..., u k, joka ei ole superkasvava. Sieppaajan tulisi salakirjoituksen murtamiseksi ratkaista tämän jonon avulla muodostettu yleiseltä näyttävä selkäreppuongelma m 1 u 1 + m 2 u 2 + + m k u k = c. Selkäreppujärjestelmän esittivät vuonna 1978 Merkle ja Hellman ja se saavutti yksinkertaisuutensa ja nopeutensa takia suuren suosion. Kuitenkin Shamir onnistui murtamaan menetelmän jo vuonna 1982. Myös menetelmän parannuksia on murrettu, joten selkäreppujärjestelmää ei pidetä kovin turvallisena. 4.9 Huomautuksia Edellä ei ole käsitelty esiteltyjen julkisen avaimen järjestelmien heikkouksia, kuten murtamismahdollisuuksia. RSA:ta pidetään varsin turvallisena, kun p ja q ovat riittävän suuria sekä niiden valinnassa otetaan huomioon eräitä rajoituksia. Vuonna 2010 turvallisena avainpituutena pidetään 1024 bittiä 29
(reilut 300 numeroa 10-kanteisena). Myös 512-bittiset avaimet antavat melko hyvän suojan, vaikkeivat ne järeitä hyökkäyksiä kestäkään. On arvioitu, että parin vuosikymmenen kuluttua RSA-avaimen olisi oltava 3072-bittinen (3072 = 2 11 + 2 10, 2 3072 10 925 ) ollakseen turvallinen. Myös diskreetti logaritmi lienee luotettava, kun kunta Z p (tai yleisempi äärellinen kunta) on riittävän suuri. Voidaan myös kysyä täsmällisempää tietoa eri menetelmien vaatimien laskutoimitusten määristä eli tarvittavasta laskenta-ajasta. Luonnollisesti tulee esille myös kysymys siitä, miten esimerkiksi RSA:n tarvitsemia suuria alkulukuja on löydettävissä. Syventävien opintojen kurssilla Kryptografia tarkastellaan lähemmin näitä kysymyksiä sekä esitellään menetelmiä, jotka vaativat syvällisempiä matematiikan tietoja. 30
Harjoitustehtävät 1. Ystäväsi K lähettää sinulle Caesarin yhteenlaskumenetelmällä kirjoitetun viestin ÖHXHHTTLOHUPSSHSSH R. Avaa viesti. 2. Avaa Caesarin yhteenlaskumenetelmällä laadittu englanninkielinen salakirjoitus ALYUNYMNWIGGIHXCPCMIL. Mikä on ollut avain? 3. Salakirjoita viesti THIS MESSAGE IS TOP SECRET käyttämällä Caesarin yhteenlaskumenetelmää ja avainta k = 12. 4. Avaa Caesarin yhteenlaskumenetelmällä laadittu englanninkielinen salakirjoitus YFXMP CESPZ CJTDF DPQFW QZCPY NTASP CTYRX PDDLR PD. a) Brute de force menetelmällä (katso 3.1). b) Frekvenssianalyysilla. 5. Jaa luvut 211, 212, 213, 721 alkutekijöihin. Määritä myös lukujen binääriesitykset. 6. Esitä luku 2010 a) 5-kantaisessa, b) 8-kantaisessa, c) 32-kantaisessa lukujärjestelmässä. 7. Laske 212 3 122 3. Anna myös vastaus 3-kantaisena. 8. Tarkastellaan 26-kantaista järjestelmää, missä englanninkieliset aakkoset A Z esittävät numeroita 0 25. Laske (Y ES) (NO). 1
9. Määrää lukujen a) 101 ja 3040, b) 1690 ja 650 suurin yhteinen tekijä. 10. Etsi sellaiset kokonaisluvut x ja y, että 213x 89y = 1, 1 x, y 212. 11. Todista 10-kantaisille esityksille toimivat jaollisuussäännöt luvuille 2, 3, 5, 9 ja 11: 2, 5: luku on jaollinen 2:lla (vast. 5:llä), jos ja vain jos sen viimeinen numero on jaollinen 2:lla (vast. 5:llä), 3, 9: luku on jaollinen 3:lla (vast. 9:llä), jos ja vain jos sen numerosumma on jaollinen 3:lla (vast. 9:llä) (luvun L = n i=0 a i10 i numerosumma on n i=0 a i), 11: luku on jaollinen 11:llä, jos ja vain jos sen vuorotteleva numerosumma on jaollinen 11:llä (luvun L = n i=0 a i10 i vuorotteleva numerosumma on n i=0 ( 1)i a i = a 0 a 1 + + ( 1) n a n ). 12. Ratkaise kongruenssit a) 3x 4 (mod 7), b) 14x 1 (mod 27), c) 2x 1 (mod p), missä p 3 on alkuluku. 13. Ratkaise kongruenssit a) 5x 1 (mod 7) ja 5x 1 (mod 5), b) 3z 3 (mod 3) ja 3z 3 (mod 9), c) 4x 2 2 (mod 7). 14. Kirjoita yhteen- ja kertolaskutaulut joukoille Z 7 ja Z 8. 2
15. Laske a 1, kun a) a = 15 Z 17, b) a = 16 Z 19, c) a = 3 Z 9. 16. a) Oletetaan, että syt(b, 35) = 1. Osoita, että b 48 1 (mod 35). b) Osoita, että 8 600 1 (mod 33). 17. Laske rem(4 10, 5), rem(5 101, 25), rem(101 101, 3), rem(101 101, 9), rem(15 55, 91) ja rem(2 1000000, 77). 18. Olkoon N = 26. Määritä sellaisen affiinin järjestelmän avausfunktio, jonka salausfunktio on a) E(x) = 11x + 5; b) E(x) = 13x + 10; c) E(x) = 21x + 15. 19. Käytetään suomenkielistä aakkostoa täydennettynä välillä (=27) ja affiinia järjestelmää, jonka avain on (5, 24). Salakirjoita teksti TULKAA APUUN. Mikä on avausfunktio? 20. Esimerkissä 3.2 murrettiin affiinin kuvauksen kryptotekstiä VCLMPCAVESVFYDVOVIZHPCYXAXGBDATYZ. Määrää tapauksissa 4a, 4b, 4c ja 4d dekryptaus-funktio sekä avaa sillä kryptotekstin 5 ensimmäistä kirjainta. 3
21. Käytetään affiinia järjestelmää joukossa Z 26. Avaa englanninkielinen salakirjoitus CRWWZ, kun tiedetään, että selväkielinen teksti alkaa kirjaimilla HA. 22. Tehtäväsi on selvittää affiinilla järjestelmällä tehty salakirjoitus, jossa käytetään 37-kirjaimista aakkostoa, jonka kirjaimet ovat luvut 0 9 (vastaavat lukuja 0 9), englanninkieliset aakkoset A Z (vastaavat lukuja 10 35) ja väli (=36). Salakirjoitusteksti on OH7F86BB46R3627O266BB9. Tiedät, että viestin on lähettänyt 007. Mikä on viesti? 23. Ovatko funktiot a) σ(i) = i + 17; b) σ(i) = 13i + 17; c) σ(i) = 17i + 25 permutaatioita joukossa Z 26? Jos, niin anna vastaava permutaatiosymboli. 24. Laske Caesarin yhteenlasku- ja kertolaskumenetelmien sekä affiinin järjestelmän salausfunktioiden suhteelliset osuudet kaikista yksinkertaisten sijoitusjärjestelmien salausfunktioista, kun N = 26 ja yleisessä tapauksessa. 25. Käytetään avainsana-caesaria, jonka avain on (5, SYYSKUU). Salakirjoita teksti SYKSY ON TULLUT. 26. Salakirjoita teksti DOES SURJECTION BECOME INJECTION Vigenéren järjestelmällä, kun avainsana on INJECTION. 27. Valitse jokin 2-pituinen avain Vigenéren järjestelmässä. Salakirjoita jokin 25 30 merkkiä pitkä teksti. Anna se toiselle harjoitusryhmän jäsenelle murrettavaksi. 4
28. Seuraavien matriisien alkiot ovat joukon Z N alkioita. Määritä A 1, kun [ ] 1 3 a) A = ja N = 5, 4 3 [ ] 15 17 b) A = ja N = 26, 4 9 [ ] 3 6 c) A = ja N = 28. 2 5 29. Käytetään suomenkielistä aakkostoa, missä A Ö on 0 26 ja väli=27, joten N = 28. Salakirjoita matriisisalakirjoituksella ja tehtävän 28c matriisilla A teksti YHTEYS TOIMII. 30. Käytetään tehtävän 29 koodausta kirjaimille ja välille. Salakirjoita viesti SYYSRUSKA a) Vigenéren järjestelmällä, kun avainsana on NO, b) matriisisalauksella avaimella { [ ] [ ] 2 3 3 } {A, B} =,. 7 8 9 31. Käytetään matriisisalakirjoitusta avaimella A = salaus XZIIAUCR. [ 3 17 ], B = 1 6 [ 0 0]. Avaa 32. Käytetään englanninkielistä aakkostoa, missä A Z on 0 25, väli=26,?=27 ja!=28, joten N = 29. Saat matriisisalakirjoituksella, missä B = [ 0 0 ], tehdyn viestin GFPYJP X?UYXSTLADPLW ja tiedät, että viisi viimeistä kirjainta on lähettäjän nimi KARLA. Avaa viesti. 33. Olkoon n = pq annettu, missä p ja q ovat erisuuria alkulukuja. 5
a) Osoita, että luvun φ(n) tunteminen on yhtäpitävää tekijöiden p ja q tuntemisen kanssa. b) Määrää p ja q, kun n = 14647 ja φ(n) = 14400. 34. Käytetään RSA-järjestelmää ja avainta (n, e). Suorita salaus, kun viesti ja avain ovat a) SELKÄREPPU ja (91, 11) (muunna viesti kirjain kerrallaan joukon Z n alkioiksi), b) TAKE IT AWAY ja (2773, 17) (muunna viesti 2 kirjaimen osissa joukon Z n alkioiksi). Murra kumpikin salausmenettely määräämällä salaovi d, avaa salakirjoitus ja totea, että saat alkuperäisen tekstin. 35. Laske tulot 117 103, 7008 6992 käyttäen kaavaa (a + b)(a b) = a 2 b 2. Esitä luvut 250997, 1689999 ainakin kahden tekijän tulona. 36. Tietoverkon käyttäjien A ja B RSA-avaimet ovat (n A, e A ) = (2773, 17) ja (n B, e B ) = (2047, 179). Missä muodossa A lähettää allekirjoituksensa AK B:lle? Entä salattu allekirjoitus? Selvitä samat kysymykset käyttäjän B lähettäessä allekirjoituksensa BG A:lle. Muuta allekirjoitukset numeeriseksi esittämällä ne 26-kantaisena. 37. a) Määritä primitiivijuuri modulo n, kun n = 3, 4, 5, 6, 7, 9, 10, 11. b) Laske log g ( k) joukossa Z n, kun n = 5, 9, 11, k = 1, 2 ja g on edellä saamasi primitiivijuuri. 38. Määritä joukon Z 25 primitiivinen alkio g ja laske log g ( 1), log g 2 ja log g 3. 39. Määrää ord 13 10, ord 10 3 ja ord 10 7. 40. Osoita, että 2 on primitiivijuuri modulo 11. 41. Osoita, että 2 on primitiivijuuri modulo 37 ja laske log 2 28, log 2 8, log 2 ( 10). 6
42. Olkoon g primitiivijuuri modulo n. Osoita, että g j on primitiivijuuri modulo n, jos ja vain jos syt(j, φ(n)) = 1. Kuinka monta primitiivijuurta modulo 31 on? Määrää ne. 43. Alla olevassa taulukossa on annettu log 2 a joukossa Z 37. a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 log 2 a 0 1 26 2 23 27 32 3 16 24 30 28 11 33 13 4 7 17 a 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 log 2 a 35 25 22 31 15 29 10 12 6 34 21 14 9 5 20 8 19 18 Ratkaise kongruenssit a) 12x 23 (mod 37), b) 5x 23 18 (mod 37), c) x 12 11 (mod 37), d) 7x 20 34 (mod 37). 44. Ratkaise kongruenssi x 113 347 (mod 463). 45. Määrää kaikki primitiivijuuret modulo 17. Käyttäjät A ja B käyttävät Diffie Hellman-avaimenvaihtoa ja primitiivijuurta g = 3 joukossa Z 17. Käyttäjän A salainen eksponentti on m A = 7 ja käyttäjän B m B = 4. Määrää käyttäjien A ja B julkiset avaimet ja yhteinen avain. 46. Olkoon n = 37 ja g = 2. Diffie Hellman-avaimenvaihdossa käyttäjän A salainen eksponentti m A = 18 ja käyttäjän B m B = 23. Mitkä ovat käyttäjien A ja B julkaisemat alkiot ja mikä on heidän yhteinen avaimensa? 47. Käytetään Elgamal-salausta, missä p = 37 ja b = 2. Salakirjoita viesti NYT käyttäjälle A, jonka salainen eksponentti on m A = 23. 48. Olkoon alkuluku p = 65537 ja b = 5. Saat viestin (29095, 23846), jonka ystäväsi on lähettänyt käyttäen Elgamal-salausta kunnassa Z p ja antamaasi julkista avainta 5 m, missä salainen eksponenttisi m = 13908. Olette 7
sopineet, että joukon Z p alkiot muunnetaan 31-kirjaimisen aakkoston 3- pituisiksi jonoiksi esittämällä ne 31-kantaisessa muodossa (kirjaimet A Z ovat 0 25, väli=26,.=27,?=28,!=29 ja =30). Avaa saamasi viesti. 49. Käytetään Elgamal-salausta. a) B lähettää käyttäjälle A viestin m = 39828, kun A:n julkinen avain on 22695 ja toimitaan joukossa Z p primitiivijuurella b = 3, missä p = 163841 on alkuluku. Mikä on salakirjoitus, kun B valitsee k = 129381? b) Toimitaan joukossa Z p primitiivijuurella b = 2, missä p = 380803 on alkuluku. Käyttäjän A salainen avain on m A = 278374. A saa käyttäjältä B kolmen kirjaimen lohkoissa salakirjoitetun viestin (61745, 206881), (255836, 314674), (108147, 350768). Avaa salakirjoitus, kun A ja B ovat sopineet käyttävänsä kirjaimille seuraavia numerovastineita: A=11, B=12,..., Z=36. 50. Tutki, onko seuraava jono superkasvava ja ratkaise annettu selkäreppuongelma: a) {2, 3, 7, 20, 35, 69}, V = 45, b) {4, 5, 10, 30, 50, 101}, V = 186, c) {1, 2, 2 2,..., 2 k 1 }, V < 2 k, k N {0}. 51. a) Muodosta superkasvavasta 5-jonosta 2, 3, 7, 15, 31 käyttäjälle U julkinen avainjono, kun n U = 61 ja a U = 7. b) Salakirjoita teksti YÖLLÄKÖ, missä kirjaimet A Ö vastaavat binääriluvuiksi muunnettuja lukuja 0 26. c) Avaa salakirjoitus 65, 141, 99, 99, 69. 52. Muodosta superkasvavasta 10-jonosta 1, 3, 5, 11, 21, 44, 87, 175, 349, 701 käyttäjälle U julkinen avainjono, kun n U = 1590 ja a U = 43. Salakirjoita teksti KNAPSACK. 8
53. Oletetaan, että selvätekstin yksiköt ovat 3 kirjaimen jonoja 32 kirjaimisessa aakkostossa, missä A Z on 0 25, väli=26,?=27,!=28,.=29, =30 ja $=31. Olet antanut selkäreppujärjestelmän julkisen avainjonon 24038, 29756, 34172, 34286, 38334, 1824, 18255, 19723, 143, 17146, 35366, 11204, 32395, 12958, 6479, jonka muodostamisessa olet käyttänyt lukuja n = 47107 ja a, missä a 1 = b = 30966. Avaa saamasi viesti 152472, 116116, 68546, 165420, 168261. 54. Asetetaan englanninkielisen aakkoston kirjaimet ja väli vastaamaan lukuja seuraavasti: väli=0, A=1, B=2,..., Z=26. Alicen julkinen selkäreppujärjestelmän avain on {17, 51, 33, 48, 27}. Sieppaat hänelle tulevan viestin 33, 78, 81, 81, 78, 75, 77, 84, 50. Koska avainjono on lyhyt, salaus murtuu helposti. Avaa viesti! 55. Avaa salakirjoitus KOKOOKOKOONKOKOKOKKOKOKOKOKKOKOKOKOKOKKO. 9