RSA-salakirjoitus. Simo K. Kivelä, Apufunktioita

Samankaltaiset tiedostot
Salakirjoitusmenetelmiä

MS-A0402 Diskreetin matematiikan perusteet

Ongelma 1: Miten tieto kannattaa koodata, jos sen halutaan olevan hyvin vaikeasti luettavaa?

RSA-salausmenetelmä LuK-tutkielma Tapani Sipola Op. nro Matemaattisten tieteiden laitos Oulun yliopisto Syksy 2017

Koostanut Juulia Lahdenperä ja Rami Luisto. Salakirjoituksia

Lukuteoria. Eukleides Aleksandrialainen (n. 300 eaa)

(d) 29 4 (mod 7) (e) ( ) 49 (mod 10) (f) (mod 9)

Lukuteorian kertausta

Salausmenetelmät. Veikko Keränen, Jouko Teeriaho (RAMK, 2006)

LUONNOLLISTEN LUKUJEN JAOLLISUUS

Salaustekniikat. Kirja sivut: ( )

Kryptologia Esitelmä

R : renkaan R kääntyvien alkioiden joukko; R kertolaskulla varustettuna on

2017 = = = = = = 26 1

Diskreetin matematiikan perusteet Laskuharjoitus 5 / vko 41

5. SALAUS. Salakirjoituksen historiaa

Fermat n pieni lause. Heikki Pitkänen. Matematiikan kandidaatintutkielma

Tekijä Pitkä Matematiikka 11 ratkaisut luku 2

on Abelin ryhmä kertolaskun suhteen. Tämän joukon alkioiden lukumäärää merkitään

Lukuteorian sovelluksia tiedon salauksessa

Tietoliikenteen perusteet

3. Kongruenssit. 3.1 Jakojäännös ja kongruenssi

d Z + 17 Viimeksi muutettu

Jokaisen parittoman kokonaisluvun toinen potenssi on pariton.

2 j =

Salausmenetelmät. Veikko Keränen, Jouko Teeriaho (RAMK, 2006)

Harjoitustehtävät. Laskarit: Ti KO148 Ke KO148. Tehtävät viikko. VIIKON 42 laskarit to ko salissa IT138

4. Eulerin ja Fermat'n lauseet

Algebra I Matematiikan ja tilastotieteen laitos Ratkaisuehdotuksia harjoituksiin 6 (8 sivua) OT. 1. a) Määritä seuraavat summat:

ECC Elliptic Curve Cryptography

Julkisten avainten salausmenetelmät

Salausmenetelmät. Veikko Keränen, Jouko Teeriaho (RAMK, 2006)

Nimittäin, koska s k x a r mod (p 1), saadaan Fermat n pienen lauseen avulla

Eräitä RSA-salauksen haavoittuvuuksia

NÄIN TOIMII. alakirjoituksen historia ulottuu tuhansien

n (n 1) avainten vaihtoa. Miljoonalle käyttäjälle avainten vaihtoja tarvittaisiin

Salausmenetelmät 2015/Harjoitustehtävät

Luentorunko ja harjoitustehtävät. SALAUSMENETELMÄT (801346A) 4 op, 2 ov

1 Lukujen jaollisuudesta

Valitse kuusi tehtävää! Kaikki tehtävät ovat 6 pisteen arvoisia.

7. Olemassaolo ja yksikäsitteisyys Galois n kunta GF(q) = F q, jossa on q alkiota, määriteltiin jäännösluokkarenkaaksi

Kompleksilukujen kunnan konstruointi

Pikaviestinnän tietoturva

RSA-salaus ja sen lukuteoreettinen pohja

Luento 11: Tiedonsiirron turvallisuus: kryptografiaa ja salausavaimia. Syksy 2014, Tiina Niklander

RSA Julkisen avaimen salakirjoitusmenetelmä

SALAUSMENETELMÄT. Osa 2. Etätehtävät

Osa1: Peruskäsitteitä, klassiset salakirjoitukset. Salausmenetelmät. Jouko Teeriaho LapinAMK

SALAUSMENETELMÄT A, 4 op

Luonnollisten lukujen laskutoimitusten määrittely Peanon aksioomien pohjalta

Julkisen avaimen infrastruktuuri ja varmenteet

5. Julkisen avaimen salaus

Liite 1. Laajennettu Eukleideen algoritmi suoraviivainen tapa

Algoritmit 2. Luento 3 Ti Timo Männikkö

JOHDATUS LUKUTEORIAAN (syksy 2017) HARJOITUS 3, MALLIRATKAISUT

(mod 71), 2 1(mod 71) (3 ) 3 (2 ) 2

R 1 = Q 2 R 2 + R 3,. (2.1) R l 2 = Q l 1 R l 1 + R l,

Kompleksilukujen kunnan konstruointi

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

2. Eukleideen algoritmi

802328A LUKUTEORIAN PERUSTEET OSA III BASICS OF NUMBER THEORY PART III. Tapani Matala-aho MATEMATIIKKA/LUTK/OULUN YLIOPISTO

LUKUTEORIA johdantoa

rm + sn = d. Siispä Proposition 9.5(4) nojalla e d.

Approbatur 3, demo 5, ratkaisut

j(j 1) = n(n2 1) 3 + (k + 1)k = (k + 1)(k2 k + 3k) 3 = (k + 1)(k2 + 2k + 1 1)

4.3. Matemaattinen induktio

Tee konseptiin pisteytysruudukko! Muista kirjata nimesi ja ryhmäsi. Lue ohjeet huolellisesti!

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

k=0 saanto jokaisen kolmannen asteen polynomin. Tukipisteet on talloin valittu

Lauseen erikoistapaus on ollut kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa seuraavassa muodossa:

Diofantoksen yhtälön ratkaisut

LUKUTEORIA A. Harjoitustehtäviä, kevät (c) Osoita, että jos. niin. a c ja b c ja a b, niin. niin. (e) Osoita, että

Testaa taitosi 1: Lauseen totuusarvo

811120P Diskreetit rakenteet

802328A LUKUTEORIAN PERUSTEET OSA III BASICS OF NUMBER THEORY PART III

Salausmenetelmät / Osa I Veikko Keränen, Jouko Teeriaho (RAMK, 2006)

Modernin kryptografian RSA-salausmenetelmä ja sen lukuteoreettinen tausta. Terhi Korhonen

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algebra I, harjoitus 5,

Liite 2. Ryhmien ja kuntien perusteet

Algoritmit 1. Demot Timo Männikkö

Salausmenetelmät LUKUTEORIAA JA ALGORITMEJA. Veikko Keränen, Jouko Teeriaho (RAMK, 2006) 3. Kongruenssit. à 3.4 Kongruenssien laskusääntöjä

H = : a, b C M. joten jokainen A H {0} on kääntyvä matriisi. Itse asiassa kaikki nollasta poikkeavat alkiot ovat yksiköitä, koska. a b.

Tietoturvan perusteet - Syksy SSH salattu yhteys & autentikointi. Tekijät: Antti Huhtala & Asko Ikävalko (TP02S)

Tietoturva P 5 op

Shorin algoritmin matematiikkaa Edvard Fagerholm

k=1 b kx k K-kertoimisia polynomeja, P (X)+Q(X) = (a k + b k )X k n+m a i b j X k. i+j=k k=0

Rationaaliluvun desimaaliesitys algebrallisesta ja lukuteoreettisesta näkökulmasta

Matematiikassa väitelauseet ovat usein muotoa: jos P on totta, niin Q on totta.

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

Luvun π irrationaalisuus. Ilari Vallivaara

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1)

IDENTITEETTIIN PERUSTUVISTA JULKISEN AVAIMEN KRYPTOSYSTEEMEISTÄ

Matematiikan mestariluokka, syksy

Salausmenetelmät. Veikko Keränen, Jouko Teeriaho (RAMK, 2006)

Similaarisuus. Määritelmä. Huom.

Osa4: Julkisen avaimen salaukset: RSA ja Elliptisten käyrien salaus. Tiivistefunktiot ja HMAC, Digitaalinen allekirjoitus RSA

4. Ryhmien sisäinen rakenne

Mitään muita operaatioita symbolille ei ole määritelty! < a kaikilla kokonaisluvuilla a, + a = kaikilla kokonaisluvuilla a.

Yhtälöryhmät 1/6 Sisältö ESITIEDOT: yhtälöt

Transkriptio:

Simo K. Kivelä, 25.1.2005 RSA-salakirjoitus Ron Rivest, Adi Shamir ja Leonard Adleman esittivät vuonna 1978 salakirjoitusmenettelyn, jossa tietylle henkilölle osoitetut viestit voidaan salakirjoittaa hänen ilmoittamallaan julkisella avaimella ja hän yksin voi lukea ne vain omassa tiedossaan olevan salaisen avaimen avulla. Menettely sai nimekseen RSA-salakirjoitus esittäjien sukunimien alkukirjaimien mukaan. Seuraava dokumentti esittää, miten menetelmä toimii. Lukija voi sen avulla luoda itselleen julkisen ja salaisen avaimen. Esimerkki on kuitenkin vain periaatteellinen: Jotta saataisiin todella käyttökelpoinen salausmenettely, olisi käytettävä huomattavasti suurempia alkukuja kuin esimerkissä. RSA-salausta pidetään käytännössä luotettavana. Sen murtaminen edellyttäisi nopeata algoritmia luvun tekijöihin jakamiseen. Ainakaan toistaiseksi ei kuitenkaan ole osoitettu, että tällaista algortimia ei ole, mutta sellaista ei myöskään tunneta. RSA-salausta voidaan käyttää myös viestin lähettäjän varmistamiseen. Jos lähettäjä salaa viestin omalla salaisella avaimellaan ja vastaanottaja voi avata sen vastaavalla julkisella avaimella, viesti on todella peräisin ilmoitetulta lähettäjältä, koska vain hän tietää salaisen avaimen. Apufunktioita Seuraavassa määritellään eräät apufunktiot, joita tarvitaan viestien käsittelyssä. RSA-algoritmi edellyttää viestin olevan numeerisessa muodossa, jolloin kirjaimet on muutettava numeroiksi. Yksinkertaisuuden vuoksi oletetaan, että viestissä on vain pieniä kirjaimia. Isoja kirjaimia tai esimerkiksi numeroita ei siis saa olla lainkaan, ei myöskään välilyöntejä. Funktio tocode muuntaa viestin kirjaimet a, b, c,..., ö numeroiksi 1, 2, 3,..., 29: In[1]:= tocode@c_d := HToCharacterCode@cD 96L ê. 8133 27, 132 28, 150 29< Vastaava käänteisfunktio on fromcode: In[2]:= fromcode@c_d := FromCharacterCode@Hc ê. 827 133, 28 132, 29 150<L + 96D Viesti on annettava lainausmerkeissä olevana merkkijonona, jolloin saadaan lukuarvojen muodostama (aaltosulkuihin suljettu) lista. Esimerkiksi: In[3]:= tocode@"viesti"d Out[3]= 822,9,5,19,20,9< In[4]:= Out[4]= fromcode@822,9,5,19,20,9<d viesti Tulos on merkkijono, vaikka näkyvissä ei olekaan lainausmerkkejä:

2 rsa.nb In[5]:= Out[5]= Head@%D String Yksittäisten kirjainmerkkien salaaminen ei ole riittävää, koska tällainen viesti voidaan helposti murtaa esimerkiksi merkkien frekvenssitarkastelulla. Tämän takia merkit ryhmitetään vakiopituisiksi jaksoiksi. Tarvittava funktio on togroups, joka saa argumentikseen numerokoodimuodossa olevan viestin ja jaksoon tulevien merkkien lukumäärän. Käänteisfunktio on fromgroups. In[6]:= In[7]:= togroups@c_, m_d := Map@FromDigits@#, 100D &, Partition@c, m, m, 81, 1<DD fromgroups@c_d := Flatten@IntegerDigits@c, 100DD Esimerkiksi: In[8]:= togroups@818, 19, 1, 19, 1, 12, 1, 11, 9, 18, 10, 15, 9, 20, 21, 19, 20,1,11,15,19,11,5,22,1,1,18,20,9,11,11,5,12,9<, 5D Out[8]= 81819011901, 1201110918, 1015092021, 1920011115, 1911052201, 118200911, 1105120918< In[9]:= fromgroups@81819011901, 1201110918, 1015092021, 1920011115, 1911052201, 118200911, 1105120918<D Out[9]= 818,19,1,19,1,12,1,11,9,18,10,15,9,20,21,19,20, 1,11,15,19,11,5,22,1,1,18,20,9,11,11,5,12,9,18< Jos ryhmitettävän listan alkioiden määrä ei ole jaollinen halutulla jakson pituudella, listaa täydennetään ottamalla lisäelementtejä tarpeellinen määrä listan alusta (esimerkissä näitä on yksi). Käänteisfunktio ei poista näitä ylimääräisiä elementtejä (jolloin se ei oikeastaan ole käänteisfunktio). Varsinainen RSA-salaus tapahtuu tämän jälkeen kullekin jaksolle erikseen salausavainta käyttämällä. Tämä muodostuu kahdesta luvusta, e ja n. Kunkin jakson luku v muunnetaan kaavalla c = v e Hmod nl, missä c on salattu viesti (sen osa). Salauksen purkuun käytetään toista avainta, joka myös muodostuu kahdesta luvusta, d ja n. Purku tapahtuu kaavalla v = c d Hmod nl. Potensseja koskeva modulaariaritmetiikka on Mathematicassa toteutettu tehokkaasti funktiolla PowerMod, siis c = PowerMod[v,e,n] ja v = PowerMod[c,d,n]. Salauksen tuloksena syntyy lista kokonaislukuja, joiden numeroiden määrä riippuu luvusta n. Kokonaisluvut muunnetaan yhtä pitkiksi merkkijonoiksi, jolloin alkuun tarvittaessa lisätään nollia, ja merkkijonot yhdistetään yhdeksi jonoksi. Tarvittava funktio on toonestring ja sen käänteisfunktio fromonestring. In[10]:= toonestring@c_, n_d := StringJoin@Map@ToString, Flatten@Map@IntegerDigits@#, 10, nd &, cdddd In[11]:= fromonestring@c_, n_d := Module@8s<, s= StringJoin@c, Table@"0", 8Mod@ StringLength@cD, nd<dd; Table@ToExpression@StringTake@s, 8k n + 1, Hk + 1L n<dd, 8k, 0, StringLength@sDên 1<DD Esimerkiksi: In[12]:= toonestring@8123, 1234, 12345, 123456<, 6D Out[12]= 000123001234012345123456

rsa.nb 3 In[13]:= fromonestring@"0001230012340123451234561", 6D Out[13]= 8123, 1234, 12345, 123456, 100000< Yhdistämällä edellä muodostetut funktiot saadaan salakirjoitusta ja sen purkamista varten seuraavat funktiot: In[14]:= In[15]:= encrypt@v_, e_, n_, m_d := toonestring@ PowerMod@toGroups@toCode@vD, md, e, nd, Length@IntegerDigits@nDDD decrypt@c_, d_, n_d := fromcode@ fromgroups@powermod@fromonestring@c, Length@IntegerDigits@nDDD, d, nddd Merkkien ryhmittelyssä käytettävä jaksonpituus m ei saa olla liian suuri, mikä ilmenee RSA-algoritmin pätevyyden todistuksesta. Avaimien muodostaminen Salausavain muodostuu kahdesta luvusta, e ja n. Näihin liittyy purkuavain, joka myös muodostuu kahdesta luvusta, d ja n. Oleellista on, että lukujen e ja n perusteella ei voida (ainakaan helposti) laskea vastaavaa lukua d. Tällöin salausavain voi olla julkinen, mutta purkuavain salainen. Avaimien muodostamista varten valitaan kaksi alkulukua. Jotta saadaan vaikeasti murrettava salausjärjestelmä, näiden tulee olla suuria. Esimerkkiin valitaan kuitenkin melko pienet: In[16]:= p = 7919; q = 17389; Nämä ovat todella alkulukuja: In[17]:= Out[17]= 8PrimeQ@pD, PrimeQ@qD< 8True, True< Luvut voidaan myös antaa alkuluvun järjestysluvun perusteella: Prime[k] antaa k:nnen alkuluvun. Luku n on näiden tulo. Oleellista on, että isojen lukujen tapauksessa tekijöiden selvittäminen on vaikeaa: Jos vain n tunnetaan, ei ole helppoa löytää tekijöitä p ja q. Tähän perustuu salauksen pitävyys. Luku n on julkinen ja jos se pystytään jakamaan tekijöihin, löydetään myös salainen avain. Isojen lukujen tapauksessa tekijöihin jakoon ei kuitenkaan tunneta nopeaa algoritmia, vaan tarvittava tietokoneaika on helposti miljoonia vuosia riittävän isoilla luvuilla p ja q. In[18]:= n = pq Out[18]= 137703491 Funktio Timing antaa laskutoimitukseen, tässä tapauksessa tekijöihin jakoon (FactorInteger) kuluneen ajan: In[19]:= Timing@FactorInteger@nDD Out[19]= 80. Second, 887919, 1<, 817389, 1<<< Luku e valitaan siten, että sillä ei ole yhteisiä tekijöitä luvun Hp - 1LHq - 1L kanssa, ts. näiden suurimman yhteisen tekijän (syt = gcd, greatest common divisor) tulee olla = 1. Tällaisia lukuja on helpsoti löydettävissä:

4 rsa.nb In[20]:= Out[20]= 1 e = 13; GCD@e, Hp 1L Hq 1LD Luvun d tulee toteuttaa yhtälö deª 1 Hmod Hp - 1LHq - 1LL eli de - 1 = k Hp - 1LHq - 1L jollakin kokonaisluvulla k. Luku d on siten muotoa @k Hp - 1LHq - 1L + 1Dêe oleva kokonaisluku. Tällainen voidaan löytää Eukleideen algoritmilla, mutta myös kokeilemalla. Suraavassa kokeillaan kokonaislukuarvoja luvulle k nollasta alkaen arvoon 10 e saakka (vähempikin riittäisi) ja poimitaan tuloksista ne, jotka ovat kokonaislukuja. In[21]:= dlist = Select@Table@Hk Hp 1L Hq 1L + 1Lêe, 8k, 0, 10 e<d, IntegerQD Out[21]= 8116496925, 254175109, 391853293, 529531477, 667209661, 804887845, 942566029, 1080244213, 1217922397, 1355600581< Valitaan ensimmäinen luvuista luvuksi d: In[22]:= d = dlist@@1dd Out[22]= 116496925 Viestin salakirjoitus ja avaus Viestin alkioiden ryhmityksessä käytetty jaksonpituus vaikuttaa siihen, miten suuriin lukuihin varsinainen salausalgoritmi kohdistetaan. Jotta algoritmi toimisi, tulee lukujen olla < n. Jos siis käytetään suhteellisen pieniä alkulukuja, ei voida käyttää kovin pitkiä jaksoja. Kun ryhmien jaksonpituudeksi valitaan In[23]:= m = 4 Out[23]= 4 viestin salakirjoitus ja salatun viestin avaus onnistuu: In[24]:= v = "abcdefghijklmnopqrstuvwxyzåäö"; In[25]:= c = encrypt@v, e, n, md Out[25]= 018238319092824983105178296127029621047709463121955814024326101069200133 In[26]:= Out[26]= vv = decrypt@c, d, nd abcdefghijklmnopqrstuvwxyzåäöabc

rsa.nb 5 Harjoitustehtäviä 1) Tutki, miten ryhmityksen jaksonpituuden kasvattaminen vaikuttaa salaus- ja purkualgoritmien toimintaan. Tutki myös tapausta p = 3, q = 5, m = 1. Selitä saamasi tulokset. 2) Tutki, mitä tapahtuu, jos algoritmia yritetään soveltaa siten, että p ja q eivät olekaan alkulukuja. 3) Tutki, minkä takia luku e on valittava siten, että sillä ei ole yhteisiä tekijöitä luvun Hp - 1LHq - 1L kanssa (ts. suurin yhteinen tekijä = 1). Linkkejä RSA-algoritmin pätevyyden todistus RSA-salakirjoitus, webmathematica-dokumentti