06.04.2015 Views

SALAUSMENETELM¨AT (801346A) 4 op, 2 ov

SALAUSMENETELM¨AT (801346A) 4 op, 2 ov

SALAUSMENETELM¨AT (801346A) 4 op, 2 ov

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Luentorunko ja harjoitustehtävät<br />

SALAUSMENETELMÄT (<strong>801346A</strong>) 4 <strong>op</strong>, 2 <strong>ov</strong><br />

Keijo Väänänen


I JOHDANTO<br />

Salakirjoitukset kurssilla tarkastelemme menetelmiä, jotka mahdollistavat tiedon siirtämisen<br />

tai tallentamisen niin, että ainoastaan tarkoitettu vastaanottaja saa viestin<br />

selville. Lähettäjän tehtävänä on salakirjoittaa (encrypt) selväkielinen teksti (plaintext)<br />

salakirjoitukseksi (cryptotext) ja vastaanottajan tehtävänä puolestaan avata (decrypt)<br />

salakirjoitus selväkieliseksi tekstiksi. Menettelyn tulee olla sellainen, että mahdollinen<br />

salakirjoituksen sieppaaja ei kykene murtamaan sitä (ts. selvittämään selväkielistä<br />

tekstiä) ainakaan n<strong>op</strong>easti.<br />

Aikaisemmin salakirjoituksia tarvittiin lähinnä sotilaallisiin tai diplomaattisiin tarkoituksiin.<br />

Viimeisten runsaan 20 vuoden aikana tietokoneisiin perustuvan tiedonvälityksen<br />

yleistyminen on merkinnyt sitä, että salausmenetelmiä tarvitaan päivittäin hyvin<br />

monilla muillakin yhteiskunnan alueilla (pankit, yritykset ym.).<br />

Esimerkki (Caesar). Salakirjoitus tehdään siirtämällä kirjaimia k askelta eteenpäin,<br />

esim k = 3 antaa seuraavaa:<br />

ABCDEF GHIJKLMNOP QRST UV XY ZÄ Ö<br />

↓<br />

DEFGHIJKLMNOPQRSTUVXYZÄ ÖABC<br />

selväkielinen teksti<br />

salakirjoitus<br />

salakirjoitus<br />

avattuna selväkieliseksi<br />

: ALOIT AMME<br />

↓<br />

: DORLXDPPH<br />

: KHOS<br />

↓<br />

: HELP<br />

Tämä salakirjoitus on helppoa murtaa kokeilemalla eri siirt<strong>ov</strong>aihtoehdot (26 kpl).<br />

Selväkielinen teksti ja salakirjoitettu teksti kirjoitetaan käyttämällä jotakin aakkostoa<br />

(kirjaimet, numerot, muut merkit). Jotta matemaattisia menetelmiä voitaisiin käyttää,<br />

korvataan kirjaimet usein numeroilla, esimerkiksi A =0, B =1, ..., Ö =26. Selväkielinen<br />

teksti ja salakirjoitus jaetaan viestiyksikköihin ja salaaminen tehdään yksikkö kerrallaan.<br />

Viestiyksikkö voi olla kirjain (kuten äskeisessä esimerkissä), kirjainpari tai tietyn<br />

pituinen kirjainjono. Salakirjoittamiseen käytetään yleensä bijektiivistä funktiota<br />

E : P → C, missä<br />

P = {selväkieliset viestiyksiköt} = {m},<br />

C = {salakirjoitetut viestiyksiköt} = {c}.<br />

Avaaminen tapahtuu tällöin käänteisfunktion D = E −1 avulla.<br />

Salakirjoitusjärjestelmään kuuluvat siis: (i) P , (ii) C, (iii) avainjoukko K = {k}, missä<br />

kukin avain k määrää salausfunktion E k ja avausfunktion D k , jolle D k (E k (m)) = m.<br />

Lähettäjä tuntee ennakolta E k :n ja vastaanottaja D k :n, jolloin järjestelmä toimii seuraavan<br />

kaavion mukaisesti.


Hyvältä salakirjoitusjärjestelmältä edellytetään:<br />

(i) E k (m) jaD k (c) voidaan laskea helposti.<br />

(ii) Jollei tunneta D k :ta, niin m ei selviä c:stä (ts. sieppaajalla on vaikea tehtävä).<br />

Kaikissa perinteisissä salakirjoitusjärjestelmissä D k saadaan välittömästi E k :sta (ei tosin<br />

aina niin helposti kuin äskeisessä esimerkissä). Näin ollen lähettäjän ja vastaanottajan<br />

tulee s<strong>op</strong>ia jollakin tavalla avaimesta ja pitää tämä s<strong>op</strong>imuksensa salassa muilta. Tästä<br />

syystä näistä järjestelmistä käytetään nimitystä yksityisen avaimen salakirjoitus. Runsaat<br />

20 vuotta sitten kehitettiin ensimmäiset julkisen avaimen järjestelmät, joille on<br />

ominaista se, että E k ei paljasta D k :ta (ainakaan helposti). Nämä perustuvat ns. yksisuuntaisiin<br />

funktioihin (one-way function) f, joiden käänteisfunktiota on käytännössä<br />

mahdotonta (tai ainakin hyvin vaikeaa) määrittää.<br />

Useimmat käytössä olevat salakirjoitusmenetelmät perustuvat lukuteorian tuloksiin.<br />

Tästä syystä aloitamme kurssin kertaamalla eräitä lukuteorian alkeiden tuloksia.<br />

II LUKUTEORIAA<br />

1. Jakoalgoritmi ja eri kantaiset esitykset<br />

Luvuista puhuttaessa tarkoitamme seuraavassa luonnollisia lukuja N = {0, 1, 2, ...} tai<br />

kokonaislukuja Z = {0, ±1, ±2, ...}.<br />

Lause 1 (jakoalgoritmi). Jos a, b ∈ Z,b ≠0, niin on olemassa sellaiset yksikäsitteiset<br />

q, r ∈ Z, että<br />

a = qb + r, 0 ≤ r


Merkitsemme 319 = 477 8 . Vastaavasti esimerkiksi 251 6 =2· 6 2 +5· 6+1=103. Jos<br />

siis kantaluku b ≠10, merkitsemme sen näkyviin alaindeksinä.<br />

10-järjestelmän ohella erityisen tärkeä on 2-kantainen eli binäärijärjestelmä, jota<br />

tietokoneet ymmärtävät.<br />

2. Jaollisuus<br />

Määritelmä. Jos a, b ∈ Z ja on olemassa sellainen c ∈ Z, että a = bc, niin b on a:n<br />

tekijä (tai a on jaollinen b:llä). Tällöin merkitään b|a.<br />

Jaollisuudella on seuraava ominaisuus.<br />

Lause 2. Jos n|a ja n|b, niin n|(ra + sb) ∀ r, s ∈ Z.<br />

Seurauksia: 1) n|a ja n|b ⇒ n|(a ± b),<br />

2) n|a ⇒ n|ra ∀ r ∈ Z,<br />

3) n|a ja a|b ⇒ n|b.<br />

Jokaisella a ∈ Z on aina ns. triviaalit tekijät ±1 ja±a.<br />

Määritelmä. Luku p ≥ 2 on alkuluku, jos sillä on vain triviaalit tekijät (±1 ja±p).<br />

Alkulukuja on äärettömän monta ja kaikki positiiviset kokonaisluvut voidaan esittää<br />

oleellisesti yksikäsitteisesti niiden avulla, sillä on voimassa<br />

Lause 3 (aritmetiikan peruslause). Jokainen positiivinen kokonaisluku ≥ 2 voidaan<br />

esittää järjestystä vaille yksikäsitteisesti alkulukujen tulona.<br />

Seurauksia: 1) Jos p on alkuluku ja p|ab, niin p|a tai p|b.<br />

2) Jos r|a ja s|a ja luvuilla r ja s ei ole yhteisiä alkulukutekijöitä, niin rs|a.<br />

3) Jos tunnetaan luvun esitys alkulukujen tulona (∃ L3 perusteella), niin<br />

positiivisten tekijöiden lukumäärä on helppo laskea. Esimerkiksi<br />

4200 = 2 3·3·52·7, joten tekijöiden lukumäärä on (3+1)(1+1)(2+1)(1+1)=48.<br />

Määritelmä. Olkoot a, b ∈ Z ja ainakin toinen ≠ 0. Lukujen a ja b suurin yhteinen<br />

tekijä syt(a, b) on suurin luonnollinen luku, joka on sekä a:n että b:n tekijä.<br />

Nähdään helposti, että d>0onsyt(a, b), jos<br />

1) d|a ja d|b,<br />

2) n|a ja n|b ⇒ n|d.<br />

Jos a:n ja b:n alkutekijäesitykset tunnetaan, niin on helppoa antaa syt(a, b). Esimerkiksi<br />

4200 = 2 3 · 3 · 5 2 · 7 ja 10780 = 2 2 · 5 · 7 2 · 11, joten<br />

syt(4200, 10780) = 2 2 · 5 · 7 = 140.<br />

Suuria lukuja tarkasteltaessa niiden alkutekijäesitysten löytäminen on vaikeaa. Kuitenkin<br />

on olemassa menettely, ns. Eukleideen algoritmi, jonka avulla syt löytyy helposti. Kyse<br />

on jakoalgoritmin toistuvasta s<strong>ov</strong>eltamisesta. Voimme olettaa, että a ≥ b>0.


Eukleideen algoritmi:<br />

a = q 1 b + r 1 , 0


Tällöin ā = ¯r, joten jokainen kokonaisluku kuuluu täsmälleen yhteen luokista<br />

¯0, ¯1, ¯2, ..., n − 1. Nämä jäännösluokat <strong>ov</strong>at erillisä, joten jäännösluokkia (mod n) onn<br />

kpl. Käytämme niiden joukolle merkintää Z n , joten edellisen mukaan<br />

Z n = {¯0, ¯1, ¯2, ...n − 1}.<br />

Ominaisuuteen 2) nojautuen voimme määritellä jäännosluokkien (mod n) summan ja<br />

tulon asettamalla<br />

ā + ¯b = a + b, ā¯b = ab.<br />

Asettamalla lisäksi −ā = −a ja ā − ¯b =ā +(−¯b), voimme suorittaa jäännösluokilla<br />

(mod n) yhteen-, vähennys- ja kertolaskuja. Lisäksi joukosta Z tutut laskusäännöt <strong>ov</strong>at<br />

voimassa, ts. Z n on vaihdannainen ykkösellinen rengas ykkösalkionaan ¯1.<br />

Tarkastelemme seuraavaksi käänteisalkion olemassaoloa. Olkoon ā ≠ ¯0. Milloin on<br />

olemassa sellainen ¯x, että ā¯x = ¯1? Voimme yhtäpitävästi kysyä, milloin kongruenssilla<br />

ax ≡ 1 (mod n) on ratkaisu x?<br />

Lause 6. Kongruenssilla ax ≡ 1 (mod n) on ratkaisu jos ja vain jos syt(a, n) =1.<br />

Ratkaisut muodostavat täsmälleen yhden jäännösluokan (mod n).<br />

Lauseen 6 todistuksesta käy ilmi, miten yhtälön ā¯x = ¯1 ratkaisu ā −1 = ¯x löytyy<br />

Eukleideen algoritmin avulla. Luokkaa ā, jolle ā −1 on olemassa, sanotaan alkuluokaksi<br />

(mod n). Alkuluokkien lukumäärä on ϕ(n) ja niiden muodostamalle joukolle käytetään<br />

merkintää Z ∗ n . Z∗ n on vaihdannainen ryhmä kertolaskun suhteen. Jos n = p on alkuluku,<br />

niin Z ∗ p = Z p −{¯0}, joten Z p :n jokaisella nollasta eroavalla alkiolla on käänteisalkio.<br />

Joukossa Z ∗ p voidaan siis suorittaa rajoituksetta kaikkia neljää laskutoimitusta, vain<br />

nollalla jakaminen ei ole mahdollista, ja kaikki rationaaliluvuilta tutut laskusäännöt<br />

toimivat. Z p on näin esimerkki äärellisestä kunnasta. Nämä <strong>ov</strong>at tärkeitä joissakin<br />

salakirjoitusmenetelmissä.<br />

Kun otetaan yksi alkio jokaisesta jäännösluokasta (mod n), saadaan ns täydellinen jäännössysteemi<br />

(mod n). Vastaavasti ottamalla yksi alkio kustakin alkuluokasta (mod n),<br />

saadaan supistettu jäännössysteemi (mod n). Helposti todetaan, että jos a 1 ,a 2 , ..., a ϕ(n)<br />

on supistettu jäännössysteemi ja syt(a, n) =1, niin myös aa 1 ,aa 2 , ..., aa ϕ(n) on supistettu<br />

jäännössysteemi. Tähän tietoon nojautuen ei ole vaikea todistaa<br />

Lause 7 (Eulerin lause). Jos syt(a, n) =1, niin a ϕ(n) ≡ 1 (mod n).<br />

Seuraus (Fermat’n pieni lause). Jos p on alkuluku ja p ∤ a, niin<br />

a p−1 ≡ 1 (mod p).<br />

Lause 7 voidaan myös lausua muodossa: Jos ā ∈ Z ∗ n , niin āϕ(n) = ¯1. Tästä käy ilmi,<br />

että ā −1 =ā ϕ(n)−1 , joten käänteisalkio ā −1 saadaan potenssiinkorotuksella laskemalla<br />

ā ϕ(n)−1 .<br />

Olkoon seuraavassa a(mod n) jakojäännös, kun a jaetaan n:llä. Tarkastelemme potenssin<br />

a l (mod n) n<strong>op</strong>eaa laskemista, kun syt(a, n) =1. Jakoalgoritmin mukaan<br />

l = qϕ(n)+r, 0 ≤ r


Eulerin lauseen mukaan a ϕ(n) ≡ 1 (mod n), joten<br />

a l =(a ϕ(n) ) q a r ≡ a r (mod n)<br />

eli a l (mod n) =a r (mod n). Olkoon luvun r binääriesitys<br />

r = e k · 2 k + e k−1 · 2 k−1 + ... + e 1 · 2+e 0 , e i ∈{0, 1}, e k =1.<br />

Lasketaan peräkkäisillä neliöönkorotuksilla:<br />

a 1 = a 2 (mod n),<br />

a 2 = a 2 1 (mod n)(= a22 (mod n)),<br />

a 3 = a 2 2 (mod n)(= a23 (mod n)),<br />

.<br />

.<br />

.<br />

a k = a 2 k−1<br />

(mod n)(= a2k (mod n)).<br />

Tämän jälkeen saadaan<br />

a l ≡ a r ≡ a e k<br />

k<br />

a e k−1<br />

k−1 ...ae 2<br />

2 ae 1<br />

1 ae 0<br />

(mod n),<br />

josta a l (mod n) on n<strong>op</strong>easti laskettavissa.<br />

III PERINTEISIÄ SALAKIRJOITUSJÄRJESTELMIÄ<br />

1. Caesar ja sen yleistyksiä<br />

Oletamme, että käytämme aakkostoa, jossa on N symbolia.<br />

- suomenkielinen aakkosto, N =27,<br />

- suomenkielinen aakkosto ja väli, N = 28,<br />

- suomenkielinen aakkosto, väli ja numerot, N =38,<br />

- englanninkielinen aakkosto, N =26<br />

(ä ja ö puuttuvat, w lisää).<br />

Tällöin on yksinkertaista asettaa joukon Z N alkiot vastaamaan aakkoston symboleja.<br />

Esimerkiksi suomenkielistä aakkostoa vastaa Z 27 ,<br />

A =0,B =1, ..., Ö =26,<br />

missä jätämme jäännösluokkien (mod 27) yläviivat pois.<br />

Aikaisemmin tarkastelemamme Caesarin menetelmän salausfunktio E k ja avausfunktio<br />

D k <strong>ov</strong>at yo. merkinnöillä yksinkertaisesti<br />

E k (x) =x + k; D k (x) =x − k,<br />

missä laskutoimitukset tehdään joukossa Z N .<br />

Kuten aikaisemmin totesimme, tämä järjestelmä on helppo murtaa kokeilemalla kaikki<br />

avaimet k, joita on N − 1 kpl.


Tarkastelemme nyt yleisempää järjestelmää, missä yhteenlasku korvataan affiinilla kuvauksella.<br />

Tätä varten valitsemme a ∈ Z ∗ N , b ∈ Z N . Avaimemme on nyt k =(a, b) ja<br />

salausfunktio on<br />

E(x) =E a,b (x) =ax + b.<br />

Avainten lukumäärä on tällöin ϕ(N) · N.<br />

Erikoistapaukset:<br />

a =1⇒Caesar: E(x) =x + b.<br />

b =0⇒ ns. kertolasku Caesar:E(x) =ax.<br />

Selvästi E : Z N → Z N on bijektio ja sen käänteisfunktio on avausfunktio D:<br />

y = ax + b ⇔ ax = y − b ⇔ x = a −1 y − a −1 b.<br />

Edellä a ∈ Z ∗ N , joten a−1 ∃. Siis avausfunktio<br />

D(y) =D a,b (y) =a −1 y − a −1 b.<br />

Yhteenveto affiinista järjestelmästä:<br />

P = C = Z N .<br />

K = {(a, b)}, missä a ∈ Z ∗ N ja b ∈ Z N .<br />

Salausfunktio E(x) =ax + b.<br />

Avausfunktio D(y) =a −1 y − a −1 b.<br />

Affiinin järjestelmän murtaminen.<br />

1) Kokeillaan kaikki avaimet.<br />

2) Käytetään hyväksi kirjainten esiintymistiheyksiä<br />

(tarvitaan aika pitkä salakirjoitusteksti).


Em. järjestelmät <strong>ov</strong>at erikoistapauksia yksinkertaisesta sijoitusjärjestelmästä. Siinä on<br />

avainjoukkona Z N :n permutaatioiden muodostama joukko S N , jonka alkiot σ kirjoitetaan<br />

usein muotoon<br />

σ =<br />

(<br />

0 1 ... N − 1<br />

σ(0) σ(1) ... σ(N − 1)<br />

)<br />

.<br />

Nämä <strong>ov</strong>at bijektioita, joten niillä on käänteiskuvaus σ −1 .<br />

Yksinkertainen sijoitusjärjestelmä:<br />

P = C = Z N .<br />

K = S N .<br />

Salausfunktio E(x) =σ(x).<br />

Avausfunktio D(y) =σ −1 (y).<br />

Joukon S N alkioiden lukumäärä on N!, joten avaimia on runsaasti. Eräs tapa välittää<br />

avain on käyttää avainsanaa (sana tai lyhyt lause, josta jätetään toistuvat kirjaimet<br />

pois).<br />

Avainsana Caesar: avain k =(a,avainsana), 0 ≤ a


2. Salakirjoitus matriiseilla<br />

Jos viestiyksikön pituus on r>1 kirjainta, on luontevaa tarkastella viestiyksikköjä Z r N :n<br />

vektoreina ja käyttää salauksessa r × r matriiseja. Rajoitumme seuraavassa tapaukseen<br />

r =2.<br />

Kertaamme lyhyesti matriisien laskusääntöjä:<br />

( )<br />

( )<br />

x a b<br />

Z 2 N :n alkiot <strong>ov</strong>at ;2× 2 matriisit ,<br />

y<br />

c d<br />

- yhtäsuuruus ⇔ samoilla paikolla olevat alkiot yhtäsuuria,<br />

( ) ( ) ( ) ( ) ( ) ( )<br />

x u x + u a b x u a + x b+ u<br />

- yhteenlasku + = ; + =<br />

,<br />

y v y + v c d y v c + y d+ v<br />

( ) ( ) ( ) ( )<br />

x ax a b au bu<br />

- skalaarilla kertominen a = ,u =<br />

,<br />

y ay c d cu du<br />

( ) ( )<br />

a b x ax + by<br />

- kertolasku<br />

=<br />

,<br />

c d)(<br />

y cx + dy<br />

( )( ) ( )<br />

a b x u ax + by au + bv<br />

=<br />

, ei vaihdannainen,<br />

c d y v cx + dy cu + dv<br />

( )<br />

1 0<br />

- yksikkömatriisi I = on kertolaskun neutraalialkio,<br />

0 1<br />

( )<br />

a b<br />

- käänteismatriisi: Matriisin A = käänteismatriisi on matriisi A<br />

c d<br />

−1 , jolle<br />

AA −1 = A −1 A = I,<br />

mikäli tällainen matriisi on olemassa. Voidaan osoittaa, että A −1 on olemassa<br />

jos ja vain jos D = ad − bc ∈ Z ∗ N , ja tällöin<br />

( )<br />

d −b<br />

A −1 = D −1 .<br />

−c a<br />

Esimerkki Z 26 ,A=<br />

(<br />

a b<br />

Lause 1. Jos A =<br />

c d<br />

( )<br />

e<br />

ja B =<br />

f<br />

( )<br />

2 3<br />

. Määritä A<br />

7 8<br />

−1 .<br />

∈ Z 2 N , niin affiini kuvaus<br />

)<br />

, a, b, c, d ∈ Z N , D = ad − bc ∈ Z ∗ N ,<br />

E : Z 2 N → Z2 N<br />

; E(X) =AX + B,<br />

on bijektio, jonka käänteiskuvaus on<br />

D : Z 2 N → Z2 N ; D(Y )=A−1 (Y − B).


Matriisisalakirjoitus:<br />

( )<br />

x<br />

P = C = Z 2 N = { , x,y ∈ Z<br />

y<br />

N }.<br />

( )<br />

( )<br />

a b<br />

e<br />

Avain k = {A, B}, A= ,D= ad − bc ∈ Z<br />

c d<br />

∗ N , B = ∈ Z<br />

f<br />

2 N .<br />

Salausfunktio E(X) =AX + B.<br />

Avausfunktio D(Y )=A −1 Y − A −1 B.<br />

( )<br />

1 0<br />

Huom. Jos valitsemme A = I = , niin E(X) = X + B, joten kyseessä<br />

0 1<br />

on Vigenére järjestelmä, missä r = 2. Vastaavasti saamme matriisisalakirjoituksen<br />

erikoistapauksena yleisen Vigenére järjestelmän, jos tarkastelemme r × r matriiseja.<br />

( )<br />

0<br />

Tarkastelemme nyt matriisisalakirjoituksen murtamista, kun B = ja tunnemme<br />

0<br />

kaksi paria selvätekstiä ja vastaavat salakirjoitukset. Tämä on mahdollista esimerkiksi<br />

niin, että sieppaaja onnistuu jotenkin lähettämään tekstiä tarkasteltavan kanavan kautta.<br />

Olkoot tuntemamme selvätekstit P 1 ja P 2 ja vastaavat salakirjoitukset C 1 ja C 2 . Tällöin<br />

C 1 = AP 1 ja C 2 = AP 2<br />

eli<br />

C = AP, missä P =(P 1 ,P 2 )jaC =(C 1 ,C 2 ).<br />

Jos nyt P 1 ja P 2 on valittu niin, että P −1 on olemassa, niin saamme<br />

A = CP −1<br />

ja järjestelmä on murrettu.<br />

( )<br />

0<br />

Tapauksessa B ≠ tarvitsemme murtamiseen vielä kolmannen parin P<br />

0 3 ja C 3 :<br />

C 1 = AP 1 + B, C 2 = AP 2 + B, C 3 = AP 3 + B.<br />

Tällöin pääsemme yo:n kaltaiseen tilanteeseen vähentämällä kolmannen yhtälön kahdesta<br />

ensimmäisestä:<br />

C 1 − C 3 = A(P 1 − P 3 ), C 2 − C 3 = A(P 2 − P 3 ).<br />

Jos tästä saadaan A, niin sen jälkeen B = C 1 − AP 1 .


IV JULKISEN AVAIMEN SALAKIRJOITUS<br />

(PUBLIC KEY CRYPTOGRAPHY)<br />

1. Yleinen periaate<br />

Nykyaikaisissa tiedonvälitysjärjestelmissä perinteisillä salakirjoitusmenetelmillä on esimerkiksi<br />

seuraavat ongelmat:<br />

- Avaimista ( s<strong>op</strong>iminen ) ja niiden välittäminen. Jos verkossa on n käyttäjää,<br />

n<br />

tarvitaan = n(n−1)/2 avainta. Jos joku käyttäjä haluaa vaihtaa avaimensa<br />

2<br />

(tai uusi käyttäjä liittyy verkkoon), tarvitaan n − 1 (tai n) s<strong>op</strong>imusta uusista<br />

avaimista.<br />

-Allekirjoitusongelma, koska normaali allekirjoitus on korvattava jotenkin.<br />

Aikaisemmin, kun salausta käytettiin lähinnä sotilaallisissa tai diplomaattisissa tarkoituksissa,<br />

nämä seikat eivät tuottaneet suurta ongelmaa.<br />

Vuonna 1976 Diffie ja Hellman esittivät ajatuksen julkisen avaimen järjestelmistä, joissa<br />

yo. ongelmat on selvitetty. Tällaisessa järjestelmässä kukin käyttäjä U (user) muodostaa<br />

oman salausmenettelynsä E U ja avausmenettelynsä D U , jotka toteuttavat ehdon<br />

(JA 1)<br />

D U (E U (m)) = m ∀m ∈ P (selväkieliset viestiyksiköt).<br />

Kukin käyttäjä U julkaisee salausmenettelynsä E U avainkirjassa, joka on kaikkien käytettävissä.<br />

Avausmenettely D U pidetään vain U:n omana tietona.<br />

Jos käyttäjä A haluaa lähettää selväkielisen viestiyksikön m käyttäjälle B, hän etsii<br />

avainkirjasta B:n salakirjoitusmenettelyn E B ja salakirjoittaa sanomansa sen avulla, ts.<br />

c = E B (m). Kun B saa salakirjoitetun viestin c, hän saa sanoman selville käyttämällä<br />

(salaista) avausmenettelyään D B :<br />

D B (c) =D B (E B (m)) = m.<br />

(JA 1)<br />

Jotta menettely olisi toimiva ja salaisuus säilyisi, tarvitsemme seuraavat ehdot, joiden<br />

tulee olla voimassa kaikille käyttäjille U:<br />

(JA 2) Menettelyt E U ja D U <strong>ov</strong>at n<strong>op</strong>eita eivätkä tarvitse liian paljon muistia.<br />

(JA 3) On käytännössä mahdotonta määrittää E U :n avulla menettelyä DU ∗ , jolle<br />

DU ∗ (E U(m)) = m ∀m ∈ P.


Ominaisuus (JA 3) säilyttää järjestelmän salaisena ja mahdollistaa salausmenettelyn<br />

julkaisemisen avainkirjassa. Jos joku käyttäjistä vaihtaa avaimensa, riittää vaihtaa uusi<br />

E U avainkirjaan. Uuden käyttäjän mukaantulo on yhtä yksinkertaista.<br />

Em. menettely muodostetaan usein käyttämällä yksisuuntaista funktiota tai sala<strong>ov</strong>ifunktiota.<br />

Määritelmä. Funktio f on yksisuuntainen, jos sen arvot <strong>ov</strong>at helposti laskettavissa<br />

ja käänteisfunktion f −1 (joka ∃) määrääminen on hyvin vaikeaa. Sala<strong>ov</strong>ifunktio on<br />

sellainen yksisuuntainen funktio, jonka käänteisfunktio on helppoa määrätä jonkin<br />

lisätiedon (sala<strong>ov</strong>i) avulla.<br />

Funktiota ei yleensä onnistuta todistamaan yksisuuntaiseksi, joten joudutaan käyttämään<br />

funktioita, joiden uskotaan olevan yksisuuntaisia. Tällaisten funktioiden muodostaminen<br />

perustuu usein vaikeisiin ja paljon tutkittuihin lukuteorian ongelmiin, esimerkiksi<br />

RSA-järjestelmässä suurten lukujen tekijöiden jakamisen vaikeuteen. Jos meillä<br />

on käytössämme sala<strong>ov</strong>ifunktioita f U , niin voimme muodostaa ehdot (JA 1), (JA 2) ja<br />

(JA 3) toteuttavan järjestelmän valitsemalla<br />

E U = f U ja D U = f −1<br />

U .<br />

Tarkastelemme nyt allekirjoitusongelmaa, jonka ratkaisemiseksi asetamme kaksi uutta<br />

vaatimusta, joiden tulee olla voimassa kaikille käyttäjille U.<br />

(JA 4) E U (D U (c)) = c ∀c ∈ C.<br />

(JA 5) On käytännössä mahdotonta määrittää E U :n avulla menettelyä DU ∗ , jolle<br />

E U (DU ∗ (c)) = c ∀c ∈ C.<br />

Julkisen avaimen järjestelmässä on usein P = C sama kaikilla käyttäjillä. Jos A lähettää<br />

B:lle selväkielisen viestin, hän lähettää allekirjoituksen s muodossa m = D A (s), jolloin<br />

B etsii avainkirjasta E A :n ja laskee<br />

E A (m) =E A (D A (s) = s.<br />

(JA 4)<br />

Allekirjoituksen muodostaa pari (s, D A (s) =m). Menettely edellyttää ehtoja (JA2), (JA4)<br />

ja (JA 5), erityisesti ehto (JA 5) varmistaa, että vain A voi toimia lähettäjänä. A ei<br />

voi myöskään jälkikäteen kieltää viestiä.<br />

A<br />

s −→ DA (s) =m<br />

m<br />

−→ m<br />

B<br />

−→ E A (m) =s<br />

↑ E A<br />

Allekirjoitus on pari (s, D A (s) =m) Avainkirja<br />

Eo. menettely voidaan toteuttaa sala<strong>ov</strong>ifunktiolla f valitsemalla E A = f, D A = f −1 .<br />

Jos halutaan suorittaa salakirjoitus ja allekirjoitus, tarvitaan ominaisuudet (JA 1) −<br />

(JA 5). Tällöin A muodostaa allekirjoitusosasta s tekstin c = E B (D A (s)). Bs<strong>ov</strong>eltaa<br />

tähän funktiota E A ◦ D B :<br />

E A (D B (c)) = E A (D B (E B (D A (s)))) = E A (D A (s)) = s.


E A löytyy avainkirjasta, mutta vain B tuntee D B :n ja voi määrittää s:n. B käyttää<br />

A:n allekirjoituksena paria (s, D B (c) =D A (s)) kuten edellä.<br />

A<br />

s −→ EB (D A (s)) = c −→ c<br />

↑ E B<br />

−→ Avainkirja −→<br />

B<br />

−→ E A (D B (c)) = s<br />

↑ E A<br />

Koska julkisen avaimen salakirjoitus vaatii yleensä paljon enemmän aikaa kuin perinteiset<br />

menetelmät, sitä käytetään usein perinteisen menetelmän ohella avainten vaihdossa,<br />

ts. käytettävän perinteisen menetelmän avaimet vaihdetaan julkisen avaimen<br />

menetelmällä.<br />

2. RSA-menetelmä<br />

(1978, Rivest, Shamir ja Adleman)<br />

RSA-menetelmässä sala<strong>ov</strong>ifunktion muodostaminen perustuu vuosisatoja tutkittuun<br />

lukuteorian ongelmaan: Kuinka annettu (suuri) luku n jaetaan alkutekijöihin? Yksisuuntaisen<br />

funktion perusta on nyt se, että annettujen lukujen tulo on n<strong>op</strong>easti laskettavissa,<br />

mutta tekijöiden löytäminen tulosta vaatii n<strong>op</strong>eiltakin koneilta liikaa aikaa.<br />

Olkoot nyt p ja q kaksi alkulukua ja n = pq. Tällöin ϕ(n) =(p − 1)(q − 1). Valitsemme<br />

nyt sellaisen luvun e, 1


Alkion m ∈ Z nB salakirjoitus on<br />

E B (m) =m e B<br />

= c ∈ Z nB .<br />

Vain B tietää luvun d B , joten hänen avausfunktionsa on<br />

D B (c) =c d B<br />

= m e Bd B<br />

= m.<br />

Allekirjoitus onnistuu myös yleisen periaatteen mukaisesti, A lähettää allekirjoituksensa<br />

s muodossa D A (s) =s d A<br />

= m ∈ Z nA . Pari (s, m) muodostaa allekirjoituksen.<br />

Jos halutaan salaus ja allekirjoitus, niin voimme toimia yleisen periaatteen mukaisesti,<br />

jos n A


niin kaikki käyttäjät voivat valita<br />

P = {k−kirjaimiset sanat} ⊂Z nU<br />

C = Z nU ⊂{l-kirjaimiset sanat}.<br />

Esimerkki.<br />

4. Diskreetti logaritmi<br />

Reaalilukujen joukossa lukujen b x ja log b x laskeminen tietyllä tarkkuudella on yhtä<br />

helppoa. Tarkastelemme nyt vastaavaa tilannetta joukossa Z ∗ n. Jos b ∈ Z ∗ n, niin b x on<br />

laskettavissa n<strong>op</strong>easti suurillakin x ∈ N. Oletamme nyt, että tiedämme alkion y ∈ Z ∗ n<br />

olevan muotoa y = b x . Kuinka x = log b y saadaan selville (tässä logaritmi on ns.<br />

diskreetti logaritmi, ei R:n logaritmifunktio)? Tälle ns. ”diskreetin logaritmin ongelmalle”<br />

ei tunneta n<strong>op</strong>eaa ratkaisua yleisessä tapauksessa, joten voimme jälleen rakentaa<br />

yksisuuntaisen funktio.<br />

Määritelmä. Luku g, 1≤ g ≤ n − 1, on primitiivijuuri (mod n), jos<br />

Z ∗ n = {ḡk |k =0, 1, ..., ϕ(n) − 1} = {¯1, ḡ, ḡ 2 , ..., ḡ ϕ(n)−1 }.<br />

Esimerkki.<br />

Lause 2. Primitiivijuuri (mod n) on olemassa jos ja vain jos n on<br />

2, 4,p l , 2p l ,l=1, 2, ..., missä p>2 on alkuluku.<br />

Jos g on primitiivijuuri (mod n) (n on L2:n muotoa), niin sen määräämää jäännösluokkaa<br />

sanotaan Z ∗ n:n primitiiviseksi alkioksi.<br />

Määritelmä. Olkoon g ∈ Z ∗ n primitiivinen. Alkion y ∈ Z∗ n diskreetti logaritmi kannan<br />

g suhteen on sellainen luku k ∈{0, 1, ..., ϕ(n) − 1}, jolle y = g k . Tällöin merkitsemme<br />

k = log g y.<br />

Usein valitsemme edellä n = p (alkuluku), jolloin Z p on äärellinen kunta.<br />

5. Diffie-Hellman avaimenvaihto<br />

Oletamme tässä, että joukossa Z ∗ n on primitiivinen alkio g. Tiedonsiirtojärjestelmän<br />

avaimen vaihtomenettely voidaan hoitaa seuraavasti:<br />

Kaikki käyttäjät tuntevat luvun n ja primitiivialkion g. Kukin käyttäjä U valitsee luvun<br />

m U ∈{1, ..., ϕ(n)−1} ja laskee g m U<br />

, jonka hän julkaisee. Käyttäjien A ja B keskinäisen<br />

yhteydenpidon avaimen määrää g m Am B<br />

.<br />

Käyttäjä A saa avaimen potenssiinkorotuksella (g m B<br />

) m A<br />

= g m Am B<br />

ja käyttäjä B vastaavasti<br />

(g m A<br />

) m B<br />

= g m Am B<br />

.


Sieppaaja tuntee vain alkiot g m A<br />

ja g m B<br />

. Jos hän ratkaisisi diskreetin logaritmin ongelman,<br />

ts. m A :n tai m B :n, avain löytyisi. Muuten sen löytäminen ei ilmeisesti onnistu<br />

(g m A<br />

g m B<br />

= g m A+m B<br />

).<br />

Esimerkki.<br />

6. El Gamal salakirjoitusjärjestelmä<br />

Olkoon b ∈ Z ∗ p annettu (yleensä valitaan b primitiivialkioksi, mutta se ei ole välttämätöntä).<br />

Kaikki käyttäjät tuntevat p:n ja b:n. Lisäksi oletamme, että P = C = Z ∗ p<br />

(tai jotkin osajoukot).<br />

Kukin käyttäjä U valitsee luvun m U ∈{1, 2, ..., p − 2} ja pitää sen omana tietonaan.<br />

Julkiseen avainkirjaan annetaan b m U<br />

∈ Z ∗ p .<br />

Jos joku käyttäjä haluaa lähettää viestin m ∈ Z ∗ p käyttäjälle A, hän valitsee k ∈ N ja<br />

lähettää parin<br />

(b k ,mb mAk ) ∈ Z ∗2<br />

p .<br />

Koska b m Ak<br />

= (b m A<br />

) k ja b m A<br />

on avainkirjassa, on pari laskettavissa n<strong>op</strong>easti<br />

potenssiinkorotuksella. Käyttäjä A (ja vain hän) tuntee luvun m A , joten hän laskee<br />

parin ensimmäisen komponentin avulla (b k ) m A<br />

= b mAk . Jakamalla näin saadulla alkiolla<br />

toisen komponentin A saa<br />

mb m Ak<br />

b m = m.<br />

Ak<br />

Jos sieppaaja ratkaisee diskreetin logaritmin ongelman, on murtaminen helppoa. Muuten<br />

on ilmeisesti vaikea saada b mAk alkioista b k ja b m A<br />

.<br />

Edellä viesti m on naamioitu alkion b mAk<br />

avulla ja ensimmäinen komponentti on<br />

johtolanka b k , jonka avulla A (ja vain hän) voi riisua naamion.<br />

7. Selkäreppuongelma<br />

Oletetaan, että k positiivista kokonaislukua sisältävä joukko {v 1 ,v 2 , ..., v k } ja positiivinen<br />

kokonaisluku V on annettu. Kysytään, onko olemassa sellainen osajoukko<br />

I⊂{1, 2, ..., k}, että<br />

∑<br />

v i = V.<br />

i∈I<br />

(Jos sekkärepun tilavuus on V ja on k esinettä, joiden tilavuudet <strong>ov</strong>at v 1 ,v 2 , ..., v k ,<br />

niin voidaanko reppu pakata näillä esineillä tasan täyteen?) Tämä kysymys on ns.<br />

selkäreppuongelma. Se voidaan muotoilla myös seuraavasti:<br />

Selkäreppuongelma. Olkoot v 1 ,v 2 , ..., v k ja V annettuja positiivisia kokonaislukuja.<br />

Onko olemassa sellaiset luvut ε i ∈{0, 1},i=1, ..., k, että<br />

ε 1 v 1 + ε 2 v 2 + ... + ε k v k = V ?<br />

Esimerkki.


Jos k on suuri, niin on osoitettu, että selkäreppuongelma on yleisessä tapauksessa hyvin<br />

vaikea ratkaista. Eräissä erikoistapauksissa ongelma on kuitenkin helppo ratkaista.<br />

Määritelmä. k-jono v 1 ,v 2 , ..., v k on superkasvava, jos ∀ j =2, ..., k<br />

v j >v 1 + ... + v j−1 .<br />

Vastaava selkäreppua sanotaan myös superkasvavaksi.<br />

Esimerkki.<br />

Superkasvava selkäreppu on helppo ratkaista seuraavasti: {v 1 ,v 2 , ..., v k }<br />

superkasvava, V .<br />

Jos v 1 + v 2 + ... + v k u 1 + u 2 + ... + u k , 1


joka on helppoa laskea avaimesta K U . Avausmenettely D U koostuu kahdesta osasta.<br />

Sala<strong>ov</strong>en muodostaa luku b U , jonka U tuntee. Ensimmäisessä vaiheessa U laskee (2):n<br />

avulla<br />

b U c ≡ b U (m 1 a u u 1 + m 2 a U u 2 + ... + m k a U u k )<br />

≡ m 1 u 1 + m 2 u 2 + ... + m k u k (mod n U ).<br />

Ehdon (1) mukaisesti yo. kongruenssista seuraa yhtälö<br />

m 1 u 1 + m 2 u 2 + ... + m k u k = b U c (mod n U ).<br />

Toisessa vaiheessa ratkaistaan tämä superkasvava selkäreppu ja saadaan m =(m 1 m 2 ...m k ) 2 .<br />

Kun A haluaa lähettää sanoman m =(m 1 m 2 ...m k ) 2 B:lle, toimitaan seuraavasti:<br />

Menettelyn idea on luonnollisesti siinä, että B:n superkasvava jono b 1 ,b 2 , ..., b k sotketaan<br />

kertomalla a B :llä B:n avainjonoksi b ∗ 1 ,b∗ 2 , ..., b∗ k<br />

, joka ei ole superkasvava. Sieppaajan<br />

tulisi salakirjoituksen murtamiseksi ratkaista tämän jonon avulla muodostettu yleiseltä<br />

näyttävä selkäreppuongelma m 1 b ∗ 1 + m 2 b ∗ 2 + ... + m k b ∗ k = c.<br />

Yo:n järjestelmän esittivät vuonna 1978 Merkle ja Hellman ja se saavutti yksinkertaisuutensa<br />

ja n<strong>op</strong>eutensa takia suuren suosion. Kuitenkin Shamir onnistui murtamaan<br />

menetelmän jo vuonna 1982. Myös menetelmän parannuksia on murrettu, joten<br />

selkäreppujärjestelmää ei pidetä k<strong>ov</strong>in luotettavana.<br />

9. Huomautuksia<br />

Edellä emme ole käsitelleet esiteltyjen julkisen avaimen järjestelmien heikkouksia, esim.<br />

murtamismahdollisuuksia. RSA:ta pidetään varsin turvallisena, kun p ja q <strong>ov</strong>at riittävän<br />

suuria (≈ 150 numeroa) sekä niiden valinnassa otetaan huomioon eräitä rajoituksia.<br />

Samoin diskreetti logaritmi lienee luotettava, kun kunta Z p (tai yleisempi äärellinen<br />

kunta) on riittävän suuri. Voimme myös kysyä täsmällisempää tietoa eri menetelmien<br />

vaatimien laskutoimitusten määristä (tarvittavasta ajasta). Luonnollisesti tulee esille<br />

myös kysymys siitä, miten esim. RSA:n tarvitsemia suuria alkulukuja on löydettävissä.<br />

Syventävien <strong>op</strong>intojen kurssilla ”Kryptografia” tarkastellaan lähemmin näitä kysymyksiä<br />

sekä esitellään menetelmiä, jotka vaativat syvällisempiä matematiikan tietoja.


HARJOITUSTEHTÄVÄT:<br />

1. Ystäväsi K lähettää sinulle Caesarin yhteenlaskumenetelmällä kirjoitetun viestin<br />

”Ö HXHHTTLOHUPSSHSSH R”.<br />

Avaa viesti.<br />

2. Avaa seuraava Caesarin yhteenlaskumenetelmällä laadittu englanninkielinen salakirjoitus<br />

ALY UNY MNW IGGIHXCP CMIL.<br />

Mikä on ollut avain?<br />

3. Jaa luvut<br />

211, 212, 213, 721<br />

alkutekijöihin. Määritä myös lukujen binääriesitykset.<br />

4. Esitä luku 1995<br />

a) 5-kantaisessa,<br />

b) 8-kantaisessa,<br />

c) 32 kantaisessa lukujärjestelmässä.<br />

5. Laske 212 3 · 122 3 .<br />

6. Tarkastellaan 26-kantaista järjestelmää, missä englanninkieliset aakkoset A−Z esittävät<br />

numeroita 0-25. Laske (YES) · (NO).<br />

7. Määrää lukujen<br />

a) 101, 3040<br />

b) 1690, 650<br />

suurin yhteinen tekijä.<br />

8. Etsi sellaiset kokonaisluvut x ja y, että<br />

213x − 89y =1,<br />

1 ≤ x, y ≤ 212.


9. Todista jaollisuussäännöt luvuille 2, 3, 5, 9 ja 11.<br />

10. Ratkaise kongruenssit<br />

a)3x ≡ 4 (mod 7),<br />

b) 14x ≡ 1 (mod 27),<br />

c) 2x ≡ 1 (mod p),<br />

missä p ≥ 3 on alkuluku.<br />

11. Ratkaise kongruenssit<br />

a) 5x ≡ 1 (mod 7) ja (mod 5),<br />

b) 3z ≡ 3 (mod 3) ja (mod 9),<br />

c) 4x 2 ≡ 2 (mod 7).<br />

12. Kirjoita yhteen- ja kertolaskutaulut joukoille Z 7 ja Z 8 .<br />

13. Laske a −1 , kun<br />

a) a =15∈ Z 17 ,<br />

b) a =16∈ Z 19 ,<br />

c) a =3∈ Z 9 .<br />

14. Laske<br />

4 10 (mod 5), 5 101 (mod 25), 101 101 (mod 3), 101 101 (mod 9),<br />

15 55 (mod 91) ja 2 1000000 (mod 77).<br />

15. Käytetään suomenkielistä aakkostoa täydennettynä tyhjällä välillä (=27) ja affiinia<br />

järjestelmää, jonka avain on (5,24). Salakirjoita teksti ”TULKAA APUUN”. Mikä<br />

on avausfunktio?<br />

16. Seuraava teksti on muodostettu affiinilla järjestelmällä:<br />

V CLMP CAV ESV F Y DV OV IZHP CY XAXGBDAT Y Z.<br />

Mikä on selväkielinen teksti?<br />

17. Tehtäväsi on selvittää affiinilla järjestelmällä tehty salakirjoitus, jossa käytetään 37-<br />

kirjaimista aakkostoa, jonka kirjaimet <strong>ov</strong>at luvut 0-9 (vastaavat lukuja 0-9), englan-


ninkieliset aakkoset A−Z (vastaavat lukuja 10-35) ja tyhjä (=36). Salakirjoitusteksti<br />

on<br />

OH7F 86BB46R3627O266BB9.<br />

Tiedät, että sanoman on lähettänyt ”007”. Mikä on sanoma?<br />

18. Ovatko funktiot<br />

a) σ(i) =i +17,<br />

b) σ(i) =17i<br />

permutaatioita joukossa Z 26 ?<br />

19. Laske Caesarin yhteenlasku- ja kertolaskumenetelmien sekä affiinin järjestelmän suhteelliset<br />

osuudet kaikista yksinkertaisista sijoitusjärjestelmistä, kun N=26, 27, 28 ja<br />

yleisessä tapauksessa.<br />

20. Käytetään avainsana Caesaria, jonka avain on (5,SY Y SKUU). Salakirjoita teksti<br />

SY KSY ON T ULLUT.<br />

21. Salakirjoita teksti<br />

DOES SURJECTION BECOME INJECTION<br />

Vigenéren järjestelmällä, kun avainsana on INJECTION.<br />

22. Valitse jokin 2. pituinen avain Vigenéren järjestelmässä. Salakirjoita jokin 25-30<br />

merkkiä pitkä teksti. Anna se toiselle harjoitusryhmän jäsenelle murrettavaksi.<br />

23. Seuraavien matriisien alkiot <strong>ov</strong>at joukon Z N alkioita. Määritä A −1 , kun<br />

( )<br />

( )<br />

( )<br />

1 3<br />

15 17<br />

3 6<br />

a) A = ,N = 5; b) A =<br />

,N = 26; c) A = ,N =28.<br />

4 3<br />

4 9<br />

2 5<br />

24. Käytämme suomenkielistä aakkostoa, missä A − Ö on 0-26 ja tyhjä=27, joten<br />

N = 28. Salakirjoita matriisisalakirjoituksella käyttämällä edellisen tehtävän c)-<br />

kohdan matriisia A teksti Y HTEY S TOIMII.<br />

25. Käytämme englanninkielistä aakkostoa, missä A − Z on 0-25, ( ) tyhjä=26, ?=27 ja<br />

0<br />

!=28, joten N=29. Saat matriisisalakirjoituksella (missä B = ) tehdyn sanoman<br />

0


GFPYJP X?UY XST LADP LW<br />

ja tiedät, että viisi viimeistä kirjainta on lähettäjän nimi KARLA. Avaa sanoma.<br />

26. Oletetaan, että n = pq, missä p ja q <strong>ov</strong>at erisuuria alkulukuja. Osoita, että luvun<br />

ϕ(n) tunteminen on yhtäpitävää tekijöiden p ja q tuntemisen kanssa.<br />

27. Salakirjoita teksti SELKÄREP P U RSA-järjestelmän avaimella (n, e) = (91, 11).<br />

Murra tämä salausmenettely määräämällä sala<strong>ov</strong>i d.<br />

28. Laske tulot<br />

117 · 103, 7008 · 6992<br />

käyttäen kaavaa (a + b)(a − b) =a 2 − b 2 . Esitä seuraavat luvut<br />

250997, 1689999<br />

ainakin kahden tekijän tulona.<br />

29. a) Salakirjoita teksti TAKE IT AWAY RSA-järjestelmän avaimella (n, e)=<br />

(2773, 17) muuntamalla se ensin 2 kirjaimen osissa Z n :n alkioiksi.<br />

b) Murra a)-kohdan salausmenettely määräämällä sala<strong>ov</strong>i d.<br />

c) Avaa a)-kohdan salakirjoitus ja totea, että saat alkuperäisen tekstin.<br />

30. Tiet<strong>ov</strong>erkon käyttäjien A ja B RSA-avaimet <strong>ov</strong>at (n A ,e A ) = (2773, 17) ja (n B ,e B )=<br />

(2047, 179). Missä muodossa A lähettää allekirjoituksensa AK B:lle? Entä salattu<br />

allekirjoitus? Selvitä samat kysymykset B:n lähettäessä allekirjoituksensa BG A:lle.<br />

31. a) Määritä primitiivijuuri (mod n), merkitään g, kun n=3, 4, 5, 6, 7, 9, 10, 11.<br />

b) Laske tapauksissa n=5, 9 ja 11 Z ∗ n :ssä log g(−k), kun k=1,2.<br />

32. Määritä Z ∗ 25 :n primitiivinen alkio g ja laske log g(−1), log g 2 ja log g 3.<br />

33. Osoita, että 2 on kunnan Z 37 primitiivinen alkio ja laske<br />

log 2 28, log 2 8, log 2 (-10).<br />

34. Olkoon n=37 ja g=2. Diffie-Hellman avaimenvaihdossa käyttäjän A salainen eksponentti<br />

m A =18 ja käyttäjän Bm B =23. Mitkä <strong>ov</strong>at A:n ja B:n julkaisemat alkiot ja<br />

mikä on yhteinen avain?


35. Käytetään El Gamal salakirjoitusjärjestelmää, missä p=37 ja b=2. Salakirjoita viesti<br />

NYT käyttäjälle A, jonka salainen eksponentti on m A = 23.<br />

36. Olkoon alkuluku p=65537 ja b=5. Saat viestin (29095, 23846), jonka ystäväsi on<br />

lähettänyt käyttäen El Gamal salakirjoitusjärjestelmää Z p :ssä ja antamaasi julkista<br />

avainta 5 m , missä salainen eksponenttisi m=13908. Olette s<strong>op</strong>ineet, että Z p :n<br />

alkiot muunnetaan 31-kirjaimisen aakkoston 3-pituisiksi jonoiksi esittämällä ne 31-<br />

kantaisessa muodossa (kirjaimet A − Z <strong>ov</strong>at 0-25, tyhjä=26, .=27, ?=28, !=29 ja<br />

’=30). Avaa saamasi viesti.<br />

37. Tutki, onko seuraava jono superkasvava ja ratkaise annettu selkäreppuongelma:<br />

a) {2, 3, 7, 20, 35, 69}, V=45;<br />

b) {4, 5, 10, 30, 50, 101}, V=186;<br />

c) {1, 2, 2 2 , ..., 2 k−1 },V

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

Saved successfully!

Ooh no, something went wrong!