SALAUSMENETELM¨AT (801346A) 4 op, 2 ov
SALAUSMENETELM¨AT (801346A) 4 op, 2 ov
SALAUSMENETELM¨AT (801346A) 4 op, 2 ov
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