sveuˇciliˇste j. j. strossmayera u osijeku odjel za...

45
Sveuˇ ciliˇ ste J. J. Strossmayera u Osijeku Odjel za matematiku Igor Jakopiˇ cek Asimetriˇ cni kriptografski RSA algoritam Diplomski rad Osijek, 2010.

Upload: others

Post on 30-Aug-2019

18 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Sveuciliste J. J. Strossmayera u Osijeku

Odjel za matematiku

Igor Jakopicek

Asimetricni kriptografski RSA algoritam

Diplomski rad

Osijek, 2010.

Page 2: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Sveuciliste J. J. Strossmayera u Osijeku

Odjel za matematiku

Igor Jakopicek

Asimetricni kriptografski RSA algoritam

Diplomski rad

Voditelj: prof.dr.sc. Mario Essert

Osijek, 2010.

Page 3: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Sadrzaj

Uvod 1

1 Kriptografija 21.1 Razvoj kriptografije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Osnovni pojmovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.3 Matematicki temelji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3.1 Funkcije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.3.2 Osnove teorije brojeva . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3.3 Kriptosustavi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.4 Simetricna kriptografija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.4.1 Definicija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.4.2 Supstitucijske sifre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.4.3 Transpozicijske sifre . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.4.4 Moderni blokovni kriptosustavi . . . . . . . . . . . . . . . . . . . . . 13

1.5 Asimetricna kriptografija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.5.1 Ideja javnog kljuca . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.5.2 Kriptosustavi zasnovani na problemu diskretnog logaritma . . . . . . 151.5.3 Kriptosustavi zasnovani na problemu faktorizacije . . . . . . . . . . . 16

2 RSA kriptosustav 172.1 Definicija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.2 Primjena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.2.1 Generiranje kljuceva . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.2.2 Sifriranje i desifriranje . . . . . . . . . . . . . . . . . . . . . . . . . . 192.2.3 Digitalni potpis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.3 Kriptoanaliza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3 Implementacija RSA kriptosustava 253.1 Algoritmi iz teorije brojeva . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.1.1 Slozenost algoritama . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.1.2 Modularno potenciranje . . . . . . . . . . . . . . . . . . . . . . . . . 263.1.3 Generiranje velikih prostih brojeva . . . . . . . . . . . . . . . . . . . 263.1.4 Racunanje inverznog elementa za mnozenje . . . . . . . . . . . . . . . 28

3.2 Primjer RSA algoritma u Python programskom jeziku . . . . . . . . . . . . . 293.2.1 O Pythonu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.2.2 RSA algoritam sa automatskim generiranjem kljuceva . . . . . . . . . 30

i

Page 4: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Literatura 38

Sazetak 39

Summary 40

Zivotopis 41

ii

Page 5: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Uvod

Komunikacija se javila vrlo rano u povijesti covjecanstva, no uvijek je postojao problemprivatnosti u komunikaciji. Neke je poruke, iz bilo kojeg razloga, potrebno dostaviti samoonima kojih se ticu, u neizmijenjenom stanju i s potvrdom identiteta posiljaoca. To je jednaod prednosti koje je donio razvoj kriptografije.U pocetku razvoja kriptografije najcesce koristene metode za sifriranje podataka bile susupstitucija (zamjena) i transpozicija (premjestanje) osnovnih elemenata teksta, a cija sekombinacija susrece i danas u modernim simetricnim kriptosustavima. Pocetkom sedamde-setih godina 20. stoljeca pojavili su se asimetricni kriptosustavi ili kriptosustavi s javnimkljucem kod kojih su se za sifriranje koristile jednosmjerne funkcije pa je samo funkcija zadesifriranje morala biti tajna, dok je funkcija za sifriranje mogla biti javna.Tema ovog rada je najpoznatiji asimetricni kriptografski algoritam - RSA. U prvom poglavljupredstavljena je kriptografija kroz povijest, uvedeni su osnovni pojmovi te je objasnjena ra-zlika izmedu simetricne i asimetricne kriptografije. U drugom je poglavlju predstavljen RSAkriptografski algoritam, opisani su postupci generiranja kljuceva, sifriranja, desifriranja idigitalnog potpisa pomocu RSA algoritma te je dan kratak osvrt na sigurnost i neke prob-leme prakticne implementacije. Trece poglavlje opisuje teorijsku i prakticnu implementacijuRSA algoritma, sadrzi pseudokodove algoritama iz teorije brojeva te primjer RSA algoritmanapisan u Python programskom jeziku.

1

Page 6: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

1

Kriptografija

1.1 Razvoj kriptografije

Rijec kriptografija dolazi od grckih rijeci kriptos (grc. κριπτoσ), sto znaci tajan, skriven igrafien (grc. γραϕιεν) sto znaci pisati, pa bi se mogla doslovno prevesti kao

”tajnopis”.

U starom vijeku smatralo se da se kriptografijom komunicira s demonima i zlim silama pase kriptografija povezivala s crnom magijom. Oko 2000. god. pr. Kr. Egipcani su razvilihijeroglife koji, iako nisu bili izmisljeni radi skrivanja teksta, predstavljaju najstariji oblikdanas poznatog kriptiranog pisma. 1822. godine francuski arheolog J. F. Champollion natemelju jednog trojezicnog natpisa uspio je desifrirati prvi niz fonetskih hijeroglifa. Izmedu500. i 600. godine pr. Kr. koristila se hebrejska sifra koja se zasnivala na principu re-ciprocne zamjene slova abecede. Spartanci su 400. g. pr. Kr. koristili stap nazvan skital

Slika 1.1: Skital

oko kojega se namotao tanak list papirusa na kojibi se uzduz stapa pisala poruka, a da bi se porukadekriptirala bilo je potrebno imati stap istog prom-jera. Prethodno opisana vrsta sifriranja zove setranslacija ili pomicanje, jer nas zanima svako n-toslovo teksta. Julije Cezar 50. g. pr. Kr.u drzavnim je komunikacijama koristio jednostavnusupstituciju na obicnoj abecedi (kruzni pomak cijele abecede za dva mjesta). Prvi sus-tav koji je smanjio broj simbola, koji se koriste za kriptiranje, bio je Polybiusov kvadrat.Slova abecede postavljala su se u kvadrat 5x5, redovi i stupci numerirali su se bro-jevima od 1 do 5 tako da svako slovo predstavlja odgovarajuci par retka i stupca, adekriptiranje se obavljalo tako da se svakom od parova pridruzivalo odgovarajuce slovoabecede. Rijec

”sifra” koristeci Polybiusov kvadrat izgledala bi: 44 42 12 34 11 .

1 2 3 4 51 A B C D E2 F G H I J3 K L M N O4 P Q R S T5 U V W X Y/Z

Slika 1.2: Polybiusov kvadrat

Sifriranje supstitucijom dalje se razvijalo tako da se pom-icanje slova nije cinilo proizvoljno, vec na osnovi rijeci ilifraze koja se nazivala kljuc. Prvih nekoliko slova abecede za-mijenilo bi se kljucem, a ostala bi se popunila ostatkom slova.Prednost ove metode, koja se naziva monoalfabetna zamjena,jest da primatelj, koji zna kljuc, lako moze desifrirati poruku,a nedostatak je sto je svako slovo zamijenjeno tocno jednim

drugim slovom pa je napadac mogao nekom od statistickih metoda pronaci izvornu poruku.U 14. stoljecu arapski i talijanski kriptografi koristili su metodu analize frekvencija koja sezasnivala na prebrojavanju ucestalosti ponavljanja znakova u kriptiranom tekstu.

2

Page 7: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Tijekom srednjeg vijeka kriptografija je pocela napredovati. U 15. se stoljecu pomocubakrenih diskova s ugraviranom abecedom kriptira polialfabetnom supstitucijom kojadopusta da vise razlicitih znakova u kriptiranom tekstu predstavlja jedan znak jasnog tekstapa su frekvencije pojavljivanja svih znakova bile podjednake. Na taj nacin onemoguceno jepronalazenje sifre statistickim metodama, pa je ovaj tip sifriranja najcesce koristen tijekompovijesti, a svoj je oblik zadrzao do danas.U 16. stoljecu pocinju se koristiti sifre koje tijekom kriptiranja jednog tekstapromjene nekoliko kljuceva sa jasno istaknutim mjestima gdje se prethodni kljuc

ABCDEFGHIJKLMNOPQRSTUVWXYZ Jasan tekstFGUQHXSZACNDMRTVWEJBLIKPYO T00OFGUQHXSZACNDMRTVWEJBLIKPY T01YOFGUQHXSZACNDMRTVWEJBLIKP T02PYOFGUQHXSZACNDMRTVWEJBLIK T03

...GUQHXSZACNDMRTVWEJBLIKPYOF T25

Slika 1.3: Sifra sa promjenjivim kljucem

promijenio. Njemacki svecenik Trithemiusrazvio je tablicu koja je u svakom retku pon-avljala cijelu abecedu, samo sto je abecedau svakom sljedecem redu bila ciklicki po-maknuta za jedan znak u desno. Prvo slovoporuke kriptiralo se prvim redom tablice,drugo drugim itd., pa se kljuc ponavljaosvakih 26 znakova kriptiranog teksta. Ovutehniku prosirili su Giovanni Batista Belaso te Blaise de Vigenere. Vigenerova sifra koristiTrithemiusovu tablicu, a kao kljuc za kriptiranje koristio je ili jasni ili kriptirani tekst.U 17. i 18. stoljecu u Europi se osnivaju tzv.

”Mracni uredi” koji su

se bavili desifriranjem presretnutih vojnih i politickih poruka. Koriste se i kn-jige sifri tako da se svaka rijec teksta zamijenila brojem koji je oznacavao njezin

Slika 1.4: Sifarnik s kotacem

polozaj u knjizi. 1795. godine Thomas Jefferson izu-mio je sifarnik s kotacem koji se sastojao od skupakotaca s nasumicnim poretkom abecede. Okretan-jem kotaca slozila su se slova koja cine poruku u jed-nom redu, nakon cega bi se kotaci fiksirali, a bilokoji drugi red slova mogao se koristiti kao kripti-rana poruka. Dekriptiranje se obavljalo tako da suse kotaci medusobno okretali dok se ne bi pojavilaporuka koja ima lingvistickog smisla.U 19. stoljecu zbog izuma telegrafa poraslo je zan-

imanje za kriptografiju, a koristi se Vigenerova sifra sa kratkom ponavljajucom kljucnomrijeci. Koristi se i sustav sa dva diska, jedan u drugom. Vanjski disk sadrzavao je 26slova engleske abecede i brojeve, a unutarnji samo slova abecede. Kriptiralo se tako

Slika 1.5: Sustav diskova

da se unutarnji disk vrtio sve dok se zeljeno slovo nije pojavilona vrhu, a broj okretaja diska potrebnih da bi se to dogodilo, bioje kriptirani tekst. Prva bigramska sifra, kojom se kriptirao parslova tako da je rezultat ovisio o oba slova, bio je playfair sustav.Razvijena je i tomografska sifra koja je svakom znaku tekstadodjeljivala dvoznamenkasti broj prema tablici. Brojevi su sezapisivali tako da su prve znamenke cinile red iznad drugih zna-menki, zatim se donji red mnozio sa 9, a takvi uredeni parovi suse ponovno prema tablici pretvarali u kriptirani tekst. FriedrichKasiski je 1863. godine razvio metodu kriptoanalize koja jemogla razbiti skoro sve sifre toga vremena. Metoda se sasto-jala od pronalazenja ponavljanja nizova znakova u kriptiranom tekstu da bi se dobila duzinakljuca (N), nakon cega se primjenjivala statistika na svakom N-tom znaku.

3

Page 8: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

U 20. stoljecu napravljeni su prvi elektromehanicki uredaji za kriptiranje, sto je omogucilobrze i lakse kriptiranje poruka. Nakon izuma prvih kompjutora, 60-tih godina proslogastoljeca, razvijeni su prvi simetricni kriptografski algoritmi koji predstavljaju pocetak mod-erne kriptografije. Pocetkom 20. stoljeca osnivaju se kriptografske organizacije diljem svi-jeta,

”Soba 40” u Engleskoj, MI-8 u Americi i druge, koje se u Prvom svjetskom ratu koriste

za razbijanje njemackih poruka. Nedugo nakon rata Nijemac Arthur Schrebius razvio jeEnigmu, sustav za kriptografsku zastitu informacija, koju njemacka vojska uvodi kao stan-dardni nacin kriptiranja. Enigma je elektromehanicki uredaj koji se sastojao od 26 tipki,zaslona od 26 zaruljica za prikaz kriptiranog izlaza, tri mehanicka rotora i elektricne prespo-jne ploce, a napajala se pomocu ugradene baterije. Pritiskom na tipku kroz mrezu kontakatarotora i prespojne ploce zatvara se strujni krug i pali se odgovarajuca zarulja koja oznacavakriptirano slovo. Uredaj za kriptiranje americke vojske SIGABA jedini je tijekom Drugogsvjetskog rata ostao neprobijen od strane neprijatelja. Koristio je iste principe rotora kaonjemacka Enigma, ali rotori nisu bili fiksni, nego se 10 od 15 rotora moglo izvaditi i prem-jestiti na novu lokaciju.

(a) Enigma i Sigaba (b) Tunny i Sturgeon

Slika 1.6: Elektromehanicki uredaji

Njemacka vojska koristila je Tunny, tzv.”on-line” uredaj za kriptiranje, koji je istovre-

meno mogao kriptirati i slati poruke, mogao se koristiti i u kamionu, a koristio je inter-nacionalnu telefonsku

”Baudot” sifru. Kao i Tunny, Sturgeon je bio

”on-line” uredaj za

kriptiranje sposoban za brze”teleprinter” poruke, ali se poruke nisu slale preko radija, nego

preko zice. Japanski strojevi za enkripciju podataka, poznati po imenima Jade i Purple,koristili su fiksne telefonske sklopke koje su obavljale iste funkcije kao i zicni rotor. Za vri-jeme Drugog svjetskog rata za probijanje Enigmine sifre razvijena je Turingova bomba kojapretrazuje sve kombinacije postavki rotora u potrazi za ispravnom, a radi na nacelu pret-postavljenog sadrzaja poruke (engl.

”cribs”). Prvi sustav za sigurno glasovno komuniciranje

putem telefona bio je Sigsaly, koji je tijekom Drugog svjetskog rata postavljen na 12 lokacijadiljem svijeta i nikada nije probijen. Koristio je snimke pozadinske buke za ostvarivanjesigurnosti, tako da su primatelj i posiljatelj imali kopiju acetat snimaka od kojih je jednasluzila za kriptiranje, a druga za dekriptiranje.1960-ih u IBM-ovom laboratoriju osmisljen je simetricni algoritam pod nazivom Luciferna temelju kojega nastaje algoritam DES (engl. Data Encryption Standard) za potrebeamericke vlade. DES koristi 64-bitni kljuc od kojeg je 8 bita unaprijed poznato. 1977.godine Ronald R. Rivest, Adi Shamir i Leonard M. Adleman razvili su prvi asimetricni al-goritam i nazvali ga RSA, prema svojim inicijalima.

4

Page 9: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Slika 1.7: Rivest, Shamir i Adleman 2003.

To je prvi algoritam koji upotrebljava sustavkriptiranja sa javnim kljucevima, a svoju sig-urnost zasniva na tezini faktorizacije velikih bro-jeva. Algoritam je objavljen u casopisu

”Scien-

tific American” i svatko je mogao dobiti tehnickuspecifikaciju. 1990. godine izumljena je kvantnakriptografija koja koristi fotone za prijenos nizabitova kljuca za kriptiranje poruke. Inicijalno jekoristena Vernamova sifra, posiljatelj i primateljmorali su biti povezani optickim kabelom, a biloje moguce detektiranje uljeza u komunikaciji i

mjere koliko je bitova najvise mogao uhvatiti. 1991. godine Phil Zimmermann je objavioprvu verziju PGP-a (engl. Pretty Good Privacy), programskog paketa otvorenog koda, kojije postao svjetskim standardom. NSA (engl. National Security Agency) i IBM proizveli suHarvest, elektronski uredaj koji je koristio Tractor, sustav traka velikih brzina. To je bioprvi potpuno automatski sustav, prethodnik danasnjih sustava za pohranu podataka kao stoje

”Storage Trek”. Cray Research Inc. i NSA razvili su superracunalo XMP-22 brzine 420

megaFLOPS1, koje se koristilo od 1983. do 1993., te njegovog nasljednika YMP, brzine 1,67gigaFLOPS, koji je umirovljen 2000. godine i izlozen u muzeju. 2009. godine Cray XT5Jaguar, sa brzinom od 1,75 petaFLOPS, proglasen je najbrzim superracunalom na svijetu dabi ga u listopadu 2010. godine nadmasio kineski sustav Tianhe-1A maksimalnom brzinomod 2,57 petaFLOPS.

1.2 Osnovni pojmovi

Definicija 1.1 Kriptografija je znanstvena disciplina koja proucava metode za slanje porukau takvom obliku u kojem ih moze procitati samo onaj kome su namijenjene.

Osnovni je zadatak kriptografije omoguciti komunikaciju dvjema osobama (posiljatelju i pri-matelju) preko nesigurnog komunikacijskog kanala (telefonske linije, racunalne mreze i sl.)na nacin da treca osoba (njihov protivnik), koja moze nadzirati komunikacijski kanal, nemoze razumjeti njihove poruke.Poruku koju posiljatelj zeli poslati primatelju zvat cemo otvoreni tekst (engl. plaintext). Tomoze biti tekst na njihovom materinjem jeziku, numericki tekst ili nesto drugo. Posiljateljtransformira otvoreni tekst pomocu unaprijed dogovorenog kljuca (engl. key). Taj postupakzove se sifriranje, a dobiveni rezultat zove se sifrat (engl. ciphertext) ili kriptogram. Nakontoga posiljatelj preko komunikacijskog kanala salje sifrat koji primatelj pomocu kljuca mozedesifrirati i odrediti otvoreni tekst. Protivnik moze prisluskujuci doznati sadrzaj sifrata, aline moze odrediti otvoreni tekst.Kriptoanaliza ili dekriptiranje je znanstvena disciplina koja proucava postupke za citanjeskrivenih poruka bez poznavanja kljuca.Kriptologija je grana znanosti koja proucava kriptografiju i kriptoanalizu.Kriptografski algoritam ili sifra je matematicka funkcija koja se koristi za sifriranje i desifriranje.Opcenito, radi se o dvjema funkcijama, jednoj za sifriranje, a drugoj za desifriranje, kojepreslikavaju osnovne elemente otvorenog teksta (najcesce slova, bitove, te grupe slova ili

1FLOPS (engl. floationg point operations per second) je broj operacija s pomicnom tockom u sekundi

5

Page 10: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

bitova) u osnovne elemente sifrata i obratno. Funkcije se biraju iz odredene familije funkcijau ovisnosti o kljucu, a skup svih mogucih vrijednosti kljuceva nazivamo prostor kljuceva.Kod simetricnih kriptosustava koristi se tajni kljuc. On je tajan jer se iz kljuca za sifriranjelako moze dobiti kljuc za desifriranje, koji mu je najcesce identican.Kod asimetricnih kriptosustava koristi se javni kljuc. Kljuc je javan jer se iz njega ne mozedovoljno lako izvesti kljuc za desifriranje.Kriptosustav se sastoji od kriptografskog algoritma te svih mogucih otvorenih tekstova,sifrata i kljuceva.Prilikom komunikacije kod kriptosustava s javnim kljucem postavlja se pitanje vjerodos-tojnosti ili autenticnosti poruke. Digitalni potpis je kriptosustav s javnim kljucem kojiomogucuje autentifikaciju (primatelj moze provjeriti je li poruku zaista poslao posiljatelj)i nepobitnost (posiljatelj ne moze poreci da je poslao poruku ako primatelj ima poruku snjegovim potpisom).

1.3 Matematicki temelji

1.3.1 Funkcije

Pojam skupa predstavlja cjelinu koju cine elementi ili clanovi toga skupa. Skup se zadajenabrajajuci clanove u viticastim zagradama, npr. A = {a, b, c}. Za pisanje cinjenice da je aelement skupa A koristi se oznaka a ∈ A, a da x nije element skupa A oznacava se x ∈ A.

Definicija 1.2 Neka su D i K bilo koja dva neprazna skupa. Postupak f koji svakom ele-mentu x ∈ D pridruzuje tocno jedan element y ∈ K zove se funkcija ili preslikavanje sa D uK i pisemo f : D → K. Skup D zove se domena ili podrucje definicije, a skup K kodomena ilipodrucje vrijednosti funkcije f. Svakom x ∈ D odgovarajuci (jedinstveni) pridruzeni elementy ∈ K oznacava se s f(x) i zove slika elementa x ili vrijednost funkcije f u tocki x. Skup svihvrijednosti funkcije f, tj. skup R(f) = {f(x) : x ∈ D} zove se slika funkcije f.

Definicija 1.3 Kaze se da je funkcija f : D → K injekcija (ili 1-1 preslikavanje) ako serazliciti elementi domene preslikaju u razlicite slike, tj.

x1 = x2 ⇒ f(x1) = f(x2)(∀x1, x2 ∈ D) (1.1)

Definicija 1.4 Kaze se da je funkcija f : D → K surjekcija ako je R(f) = K.

Definicija 1.5 Kaze se da je funkcija f : D → K bijekcija (ili obostrano jednoznacnopreslikavanje) ako je ona i injekcija i surjekcija.

Definicija 1.6 Neka je f : D → K bijekcija. Tada postoji funkcija f−1 : K → D definiranaformulom f−1(y) := x, gdje je x ∈ D jedinstveni element takav da je f(x) = y. Funkcija f−1

zove se inverzna funkcija funkcije f.

Ako bismo htjeli da funkcija sifriranja bude javna, morao bi se konstruirati takav kripto-sustav da je iz funkcije sifriranja nemoguce, barem ne u nekom razumnom vremenu, odreditifunkciju desifriranja. Odredeni tipovi funkcija, poput jednosmjernih i osobnih jednosmjernihfunkcija, vazni su u provedbi ove ideje.

6

Page 11: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Definicija 1.7 Za funkciju f : D → K kaze se da je jednosmjerna (engl. one-way) ako jef(x) lako izracunati za svaki x ∈ D, a f−1(y) tesko izracunati za

”uglavnom sve” elemente

y ∈ K.

Primjer 1.1 Neka je zadan skup D = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} i neka je f(x) = y ≡2x (mod 11), tj. y je ostatak pri dijeljenju 2x sa 11. Funkcija je prikazana u tablici:

x 1 2 3 4 5 6 7 8 9 10f(x) 2 4 8 5 10 9 7 3 6 1

Npr. za broj 8 lako se izracuna y = 3 ≡ 28 (mod 11). No, ako je zadan y = 3, relativnotesko bi se pronasao x = 8 bez tablice pred sobom.Jednosmjerna funkcija u kriptografiji, takva da ne postoji jednoznacna inverzna funkcijakojom bi se cijela kodomena mogla preslikati u domenu, zapravo je surjekcija.

Definicija 1.8 Osobna (engl. trapdoor) jednosmjerna funkcija je jednosmjerna funkcijaf : D → K za koje je poznat neki dodatni podatak pomocu kojeg je lakse za zadani y ∈ Kizracunati f−1(y) = x ∈ D.

Cesto koristene funkcije u kriptografiji su permutacije.

Definicija 1.9 Neka je n proizvoljan prirodan broj. Permutacija skupa S = {1, 2, ..., n} jebilo koja bijekcija p : S → S (Cesto se kaze i da je p permutacija od n elemenata). Skupsvih permutacija od n elemenata oznacava se sa Sn.

U praksi je permutacije uobicajeno zapisivati u obliku tablice, gdje gornji red predstavljadomenu, a donji sliku funkcije permutacije.

p =

(1 2 ... n

p(1) p(2) ... p(n)

)Funkcija p je bijekcija pa se svaki element skupa {1,2,...,n} u donjem retku pojavljuje tocnojednom. Buduci da bijekcije imaju inverz, p−1 se dobiva zamjenom redaka u tablici. Re-doslijed elemenata nije bitan, ali je vazno da se elementi zamijene u oba reda tablice.

p−1 =

(p(2) p(1) p(3) ... p(n)2 1 3 ... n

)Primjer 1.2 Neka je S={1,2,3,4} i neka je definirana permutacija p : S → S

p(1) = 4 p(2) = 3 p(3) = 1 p(4) = 2

p =

(1 2 3 44 3 1 2

)p−1 =

(3 1 4 22 3 1 4

)Involucije su funkcije koje su same svoj inverz.

Definicija 1.10 Neka je S konacan skup i neka je f bijekcija f : S → S. Funkcija f jeinvolucija ako je f = f−1.

Primjer 1.3

i =

(1 2 3 44 3 2 1

)

7

Page 12: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

1.3.2 Osnove teorije brojeva

Za razumijevanje matematickog aparata koristenog u kriptografiji potrebno je poznavanjenekih pojmova iz teorije brojeva, koji su uvedeni u obliku definicija i teorema bez dokaza.

Definicija 1.11 Neka su a = 0 i b cijeli brojevi. Kaze se da je b djeljiv s a, odnosno da adijeli b, ako postoji cijeli broj x takav da je b = ax, sto se zapisuje sa a|b. Ako b nije djeljivsa a, onda se pise a - b.Ako a|b, onda se jos kaze da je a djelitelj od b, a da je b visekratnik od a. Oznaka ak||b ceznaciti da ak|b, ali ak+1 - b.

Teorem 1.1 (Teorem o dijeljenju s ostatkom) Za proizvoljan prirodan broj a i cijelibroj b postoje jedinstveni cijeli brojevi q i r takvi da je b = qa+ r, 0 ≤ r < a.

Definicija 1.12 Neka su b i c cijeli brojevi. Cijeli broj a zove se zajednicki djelitelj od b i cako a|b i a|c. Ako je barem jedan od brojeva b i c razlicit od nule, onda postoji samo konacnomnogo zajednickih djelitelja od b i c. Najveci medu njima zove se najveci zajednicki djeliteljod b i c i oznacava se s (b, c).

Definicija 1.13 Kaze se da su cijeli brojevi a i b relativno prosti ako je (a, b) = 1. Zacijele brojeve a1, a2, ..., an kaze se da su relativno prosti ako je (a1, a2, ..., an) = 1, a da su uparovima relativno prosti ako je (ai, aj) = 1 za sve 1 ≤ i, j ≤ n, i = j.

Teorem 1.2 (Euklidov algoritam) Neka su b i c > 0 cijeli brojevi, te neka je uzastopnomprimjenom Teorema 1.1 dobiven niz jednakosti

b = cq1 + r1, 0 < r1 < c,

c = r1q2 + r2, 0 < r2 < r1,

r1 = r2q3 + r3, 0 < r3 < r2,...

rj−2 = rj−1qj + rj, 0 < rj < rj−1,

rj−1 = rjqj+1.

Tada je (b,c) jednak rj, posljednjem ostatku razlicitom od nule.

Propozicija 1.1 Euklidov algoritam uvijek daje najveci zajednicki djelitelj u konacno mnogokoraka.

Definicija 1.14 Prirodan broj p > 1 se zove prost ako p nema niti jednog djelitelja d takvogda je 1 < d < p. Ako prirodan broj a > 1 nije prost, onda se kaze da je slozen.

Teorem 1.3 (Osnovni teorem aritmetike) Faktorizacija svakog prirodnog broja n > 1na proste faktore je jedinstvena do na poredak prostih faktora.

Definicija 1.15 Neka su a1, a2, ..., an cijeli brojevi razliciti od nule. Najmanji prirodan brojc za koji vrijedi da ai|c za sve i = 1, 2, ..., n zove se najmanji zajednicki visekratnik i oznacavas [a1, a2, ..., an].

8

Page 13: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Definicija 1.16 Ako cijeli broj m = 0 dijeli razliku a − b, kaze se da je a kongruentan bmodulo m i pisemo a ≡ b (mod m). U protivnom, kaze se da a nije kongruentan modulo mi pise a ≡ b (mod m).

Definicija 1.17 Skup {x1, ..., xm} se zove potpuni sustav ostataka modulo m ako za svakiy ∈ Z postoji tocno jedan xj takav da je y ≡ xj (mod m).

Teorem 1.4 (Kineski teorem o ostacima) Neka su m1,m2, ...,mr u parovima relativnoprosti brojevi, te neka su a1, a2, ..., ar cijeli brojevi. Tada sustav kongruencija

x ≡ a1 (mod m1), x ≡ a2 (mod m2), ... , x ≡ ar (mod mr)

ima rjesenja. Ako je x0 jedno rjesenje, onda su sva rjesenja sustava dana sa

x ≡ x0 (mod m1m2 · · ·mr).

Definicija 1.18 Reducirani sustav ostataka modulo m je skup cijelih brojeva ri sa svojstvomda je (ri,m) = 1, ri ≡ rj (mod m) za i = j, te da za svaki cijeli broj x takav da je (x,m) = 1postoji ri takav da je x ≡ ri (mod m). Jedan reducirani sustav ostataka modulo m je skupsvih brojeva a ∈ {1, 2, ...,m} takvih da je (a,m) = 1. Jasno je da svi reducirani sustaviostataka modulo m imaju isti broj elemenata. Taj broj oznacava se s φ(m), a funkcija φzove se Eulerova funkcija. Drugim rijecima, φ(m) je broj brojeva u nizu 1, 2, ...,m koji surelativno prosti sa m.

Teorem 1.5 (Eulerov teorem) Ako je (a,m)=1, onda je aφ(m) ≡ 1 (mod m).

Teorem 1.6 Eulerova funkcija je multiplikativna, sto znaci da je φ(mn) = φ(m)φ(n) akoje (m,n) = 1.

Definicija 1.19 Neka su a i n relativno prosti prirodni brojevi. Najmanji prirodni broj dsa svojstvom da je ad ≡ 1 (mod n) zove se red od a modulo n. Jos se kaze da a pripadaeksponentu d modulo n.

Definicija 1.20 Ako je red od a modulo n jednak φ(n), onda se a zove primitivni korijenmodulo n.

1.3.3 Kriptosustavi

Definicija 1.21 Kriptosustav je uredena petorka (P,C,K,ε,D), gdje je P konacan skupsvih mogucih osnovnih elemenata otvorenog teksta, C konacan skup svih mogucih osnovnihelemenata sifrata, K konacan skup svih mogucih kljuceva, ε skup svih funkcija sifriranjai D skup svih funkcija desifriranja. Za svaki K ∈ K postoji funkcija sifriranja eK ∈ ε iodgovarajuca funkcija desifriranja dK ∈ D. Pritom su eK : P → C i dK : C → P funkcije sasvojstvom da je dK(eK(x)) = x za svaki x ∈ P.

Iz svojstva dK(eK(x)) = x slijedi da funkcije eK moraju biti injekcije. Ako bismo imalieK(x1) = eK(x2) = y za dva razlicita otvorena teksta x1 i x2, onda primatelj ne bi mogaoodrediti treba li y desifrirati u x1 ili x2, odnosno ne bi bila definirana funkcija desifriranjadK(y). U skladu s tim, ako je P = C, onda su funkcije eK permutacije.

9

Page 14: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Kriptosustave se obicno klasificira prema trima kriterijima:

1. Tip operacija koje se koriste pri sifriranju

• supstitucijske sifre u kojima se svaki element otvorenog teksta zamjenjuje nekimdrugim elementom

• transpozicijske sifre u kojima se elementi otvorenog teksta permutiraju (npr. ski-tal)

• kriptosustavi koji kombiniraju ove dvije metode

2. Nacin obrade otvorenog teksta

• blokovne sifre kod kojih se obraduju jedan po jedan blok elemenata otvorenogteksta koristeci jedan te isti kljuc K

• protocne sifre (engl. stream cipher) kod kojih se elementi otvorenog teksta obradujujedan po jedan koristeci pritom paralelno generirani niz kljuceva (engl. key-stream)

3. Tajnost i javnost kljuceva

• simetricni ili konvencionalni kriptosustavi kod kojih se kljuc za desifriranje mozeizracunati poznavajuci kljuc za sifriranje jer su oni najcesce identicni, a cija sig-urnost lezi u tajnosti kljuca (zato se zovu i kriptosustavi s tajnim kljucem)

• asimetricni ili kriptosustavi s javnim kljucem kod kojih se kljuc za desifriranje,koji je tajan, ne moze lako izracunati iz kljuca za sifriranje, koji je javan.

U daljnjim primjerima kriptosustava koristit ce se engleski alfabet od 26 slova, a uotvorenom tekstu na hrvatskom jeziku zamijenit ce se C i C s C, a D, DZ, Lj, Nj, S i Zredom s DJ, DZ, LJ, NJ, S i Z. U sljedecoj tablici svakom slovu alfabeta pridruzen je njegov

”numericki ekvivalent”.

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 Z0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Skup {0, 1, 2, ..., 25} oznacavat ce se sa Z26, a na njemu ce se definirati operacije zbrajanja,oduzimanja i mnozenja na nacin da se rezultat standardnih operacija na kraju zamijeni snjegovim ostatkom pri dijeljenju s 26, za sto ce se koristiti oznake a+26 b ili (a+ b)mod 26,te analogno za oduzimanje i mnozenje. Skup Z26 uz operacije +26 i ·26 je prsten, sto znacida su operacije zbrajanja i mnozenja zatvorene (rezultat je ponovno iz Z26), komutativne iasocijativne, te vrijedi distributivnost mnozenja prema zbrajanju, a za obje operacije postojeneutralni element i inverz.Ako dva cijela broja a i b daju isti ostatak pri dijeljenju s 26, to ce se zapisivati s a ≡ b(mod 26) i govoriti da su a i b kongruentni modulo 26.Analogno bi se definirao skup Zm i operacije na njemu za proizvoljan prirodan broj m.

10

Page 15: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

1.4 Simetricna kriptografija

1.4.1 Definicija

Definicija 1.22 Promotrimo enkripcijsku shemu koja se sastoji od funkcija enkripcije eKi dekripcije dK, K ⊂ K, gdje je K prostor kljuceva. Za enkripcijsku shemu kaze se da jesimetricnog kljuca ako se za svaki pridruzeni par kljuceva enkripcije i dekripcije (eK , dK)racunski

”lako” nade dK poznavajuci samo eK ili obratno. Kako je eK = dK najcesce u

uporabi kao simetricni kljuc, odatle je i naziv prikladan.

1.4.2 Supstitucijske sifre

Znameniti rimski vojskovoda Gaj Julije Cezar u komunikaciji sa svojim prijateljima koristiose sifrom u kojoj su se slova otvorenog teksta zamjenjivala slovima koja su se nalazila trimjesta dalje od njih u alfabetu (A 7→ D,B 7→ E,C 7→ F itd.). Sada se definira Cezarovasifra.

Definicija 1.23 Neka je P = C = K = Z26. Za 0 ≤ K ≤ 25 definira se

eK(x) = (x+K) mod 26, dK(y) = (y −K) mod 26.

Primjer 1.4 Ako se upotrijebi danasnji engleski alfabet od 26 slova, te pretpostavi da sealfabet ciklicki nastavlja, Cezarova sifra moze se pregledno zapisati na sljedeci nacin:

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 ZD E F G H I J K L M N O P Q R S T U V W X Y Z A B C

Poznata Cezarova izreka ALEA IACTA EST glasila bi tada DOHD LDFWD HVW.

U Cezarovoj sifri su osnovni elementi otvorenog teksta slova (odnosno njihovi numerickiekvivalenti), a kljuc K odreduje za koliko ce se mjesta udesno pomicati slova pri sifriranju.Vrijedi uvjet dK(eK(x)) = x, pa je ovo po definiciji kriptosustav.Da bi se dobila barem malo sigurnija sifra, mogu se promatrati funkcije za sifriranje kojece ukljucivati vise od jednog parametra, a najjednostavnija takva funkcija je afina funkcijae(x) = ax+ b. Buduci da ova funkcija mora imati inverz, parametar a ne moze biti proizvol-jan, vec mora biti relativno prost s modulom 26. Sada se moze definirati Afina sifra.

Definicija 1.24 Neka je P = C = Z26, te neka je

K = {(a, b) ∈ Z26 × Z26 : (a, 26) = 1}.

Za K = (a, b) ∈ K definira se

eK(x) = (ax+ b) mod 26, dK(y) = a−1(y − b) mod 26.

I ovdje je zadovoljen uvjet definicije kriptosustava

dK(eK(x)) = dK(ax+ b) = a−1(ax+ b− b) = x

Buduci da broj 26 nije prost, multiplikativni inverz imaju samo brojevi iz Z26 koji su relativnoprosti s 26, tj. za koje vrijedi da je najveci zajednicki djelitelj od a i 26 jednak 1, sto sezapisuje (a,26)=1. Prikaz tih brojeva zajedno s njihovim inverzima naveden je u tablici.

11

Page 16: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

1 3 5 7 9 11 15 17 19 21 23 251 9 21 15 3 19 7 23 11 5 17 25

Primjer 1.5 Neka je K = (7, 3). Sifrirati otvoreni tekst OSIJEK.Koristeci ranije navedenu tablicu, slova otvorenog teksta zamjenjuju se njihovim numerickimekvivalentima.

14 · 7 + 3 ≡ 23 mod 26

18 · 7 + 3 ≡ 25 mod 26

8 · 7 + 3 ≡ 7 mod 26

9 · 7 + 3 ≡ 14 mod 26

4 · 7 + 3 ≡ 5 mod 26

10 · 7 + 3 ≡ 21 mod 26

Sada se dobiva sifrat XZHOFV.

Cezarova i afina sifra su specijalni slucajevi supstitucijske sifre koja je definirana na sljedecinacin.

Definicija 1.25 Neka je P = C = Z26. Prostor kljuceva K sastoji se od svih permutacijaskupa {0, 1, 2, ..., 25}. Za svaku permutaciju π ∈ K definira se

eπ(x) = π(x), dπ(y) = π−1(y),

gdje je π−1 inverzna permutacija od π.

Dakle, za alfabet sifrata moze se odabrati bilo koja permutacija slova A,B,...,Z, te svakoslovo otvorenog teksta zamijeniti slovom koje se u tablici nalazi ispod njega. Sifre kod kojihsvakom slovu otvorenog teksta odgovara jedinstveno slovo sifrata, zovu se monoalfabetskesifre.

Ovdje ima 26! ≈ 4·1026 mogucih kljuceva, pa je napad ispitivanjem svih mogucih kljucevaprakticno nemoguc. No, supstitucijsku sifru je dosta lako dekriptirati koristeci statistickasvojstva jezika na kojem je pisan otvoreni tekst pomocu analize frekvencije slova. Sifre kodkojih se svako slovo otvorenog teksta moze preslikati u jedno od m mogucih slova, gdje je mduljina kljuca, u ovisnosti o svom polozaju unutar otvorenog teksta, zovu se polialfabetskesifre. Kriptosustav, koji se naziva Viegenereova sifra, definiran je na sljedeci nacin.

Definicija 1.26 Neka je m fiksan prirodan broj. Definira se P = C = K = Zm26. Za kljuc

K = (k1, k2, ..., km), definira se

eK(x1, x2, ..., xm) = (x1 +26 k1, x2 +26 k2, ..., xm +26 km),

dK(y1, y2, ..., ym) = (y1 −26 k1, y2 −26 k2, ..., ym −26 km).

Dakle, slova otvorenog teksta pomicu se za k1, k2, ...km mjesta, ovisno o ostatku dijeljenjapozicije slova s duljinom kljuca m. Kod ove sifre osnovni elementi otvorenog teksta i sifratasu

”blokovi” od po m slova.

12

Page 17: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Primjer 1.6 Neka je m=4 i kljucna rijec BROJ, kojoj je numericki ekvivalent kljucK = (1, 17, 14, 9). Neka je otvoreni tekst KRIPTOLOGIJA, ciji je numericki ekvivalent(10,17,8,15,19,14,11,14,6,8,9,0).

Sifriranje je dano u tablici.

kljuc B R O J B R O J B R O Jotvoreni tekst K R I P T O L O G I J A

sifrat L I W Y U F Z X H Z X J

1.4.3 Transpozicijske sifre

Ideja transpozicijske sifre je da se elementi otvorenog teksta ostave nepromijenjeni, ali da sepromijeni njihov medusobni polozaj.

Definicija 1.27 Neka je m fiksan prirodan broj. Neka je P = C = Zm26, te neka se K sastoji

od svih permutacija skupa {1, 2, ...,m}. Za π ∈ K definira se

eπ(x1, x2, ..., xm) = (xπ(1), xπ(2), ..., xπ(m)),

dπ(y1, y2, ..., ym) = (yπ−1(1), yπ−1(2), ..., yπ−1(m)).

U praksi je najupotrebljavanija bila stupcana transpozicija kod koje se otvoreni tekst up-isuje u pravokutnik po redcima, a zatim se poruka cita po stupcima, ali s promijenjenimporetkom stupaca. Ako se posljednji redak ne ispuni do kraja, onda se prazna mjesta pop-une proizvoljnim slovima (nulama) koja ne mijenjaju sadrzaj poruke.

Primjer 1.7 Sifrirati otvoreni tekst KRIPTOGRAFIJA I KRIPTOANALIZA stupcanomtranspozicijom s kljucem 4312576.

Rjesenje je dano u tablici.

kljuc 4 3 1 2 5 7 6otvoreni tekst K R I P T O G

R A F I J A IK R I P T O AN A L I Z A X

Sifrat je: IFILPIPIRARAKRKNTJTZGIAXOAOA.

1.4.4 Moderni blokovni kriptosustavi

DES (engl. Data Encryption Standard) kriptosustav razvio je IBM 1976. godine na Feis-telovoj sifri koristeci uporabe supstitucija i transpozicija kroz vise iteracija. Ovaj algoritampomocu kljuca K duljine 56 bitova iz otvorenog teksta duljine 64 bita daje sifrat koji ponovoima 64 bita.Postoje tri vrste napada na DES: linearna kriptoanaliza, diferencijalna kriptoanaliza i

”DES

Cracker”. Za linearnu i diferencijalnu kriptoanalizu, koje nisu razbile DES, potrebno je 243

poznatih parova otvoreni tekst-sifrat. U srpnju 1998. godine ESS (engl. Electronic FrontierFoundation) napravio je stroj

”DES Cracker” koji je razbio poruku sifriranu DES-om za 56

sati, a koristio je napad”grubom silom” s 255 DES operacija.

13

Page 18: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Nakon razbijanja DES-a pojavilo se vise prijedloga za slicne, ali sigurnije kriptosustave, kojiimaju vecu duljinu kljuca od DES-a, obicno 128 bitova. Neki od njih su trostruki DES,IDEA, CAST i RC5.Godine 1997. razvijen je AES (engl. Advanced Encryption Standard) kao opceprihvacenistandard koji ce zamijeniti DES.

1.5 Asimetricna kriptografija

1.5.1 Ideja javnog kljuca

Najveci problem simetricnih kriptosustava je taj da posiljatelj i primatelj moraju biti umogucnosti razmijeniti tajni kljuc preko nesigurnog komunikacijskog kanala ili se osobnosusresti. 1976. godine Whitfield Diffie i Martin Hellman ponudili su jedno moguce rjesenjeproblema razmjene kljuceva, zasnovano na cinjenici da je u nekim grupama potenciranjemnogo jednostavnije od logaritmiranja. Njihov postupak za razmjenu kljuceva je sljedeci:

1. Osoba A generira slucajan broj a ∈ {1, 2, ..., |G| − 1}, gdje je G ciklicka grupa. OsobiB tada posalje element ga.

2. Osoba B generira slucajan broj b ∈ {1, 2, ..., |G| − 1}, te osobi A posalje element gb.

3. Osoba A izracuna (gb)a = gab.

4. Osoba B izracuna (ga)b = gab.

Njihov tajni kljuc je K = gab.

Definicija 1.28 Kriptosustav s javnim kljucem sastoji se od dviju familija {eK} i {dK}funkcija za sifriranje i desifriranje sa svojstvima:

1. za svaki K je dK inverz od eK

2. za svaki K je eK javan, ali je dK poznat samo osobi K

3. za svaki K je eK osobna jednosmjerna funkcija.

Ovdje se eK naziva javnim kljucem, a dK tajnim ili osobnim kljucem.

Ako posiljatelj A zeli poslati poruku primatelju B, onda B najprije posalje A svoj javni kljuceB. Potom A sifrira svoju poruku pomocu eB i posalje primatelju sifrat y = eB(x). PrimateljB desifrira sifrat koristeci svoj tajni kljuc dB i dobiva

dB(y) = dB(eB(x)) = x.

Buduci da je kljuc javan, postavlja se pitanje vjerodostojnosti ili autenticnosti poruke. Tose moze provjeriti na sljedeci nacin:

• Osoba A svojoj poruci doda slucajan broj a od npr. 10 znamenaka.

• Osoba B generira svoj slucajni 10-znamenkasti broj b, te posalje osobi A poruku eA(a+b).

14

Page 19: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

• A izracuna b pomocu formule b = dA(eA(a + b)) − a te ponovno posalje svoju prvuporuku tako da joj doda b, a isto to ucini sa svakom iducom porukom koju ce slatiosobi B.

Neki kriptosustavi omogucuju korisnicima i da digitalno potpisu svoju poruku. Neka je P =C. Tada A moze potpisati poruku x tako da osobi B posalje sifrat z = dA(y) = dA(eB(x)).Kada B primi poruku za koju je pretpostavio da ju je poslao A, prvo primijeni javni kljuceA, a potom svoj tajni kljuc dB:

dB(eA(z)) = dB(eA(eB(x))) = x.

Sada primatelj B zna sigurno da je poruku poslao A jer je samo on mogao upotrijebitifunkciju dA.

1.5.2 Kriptosustavi zasnovani na problemu diskretnog logaritma

Neka je G konacna Abelova grupa. Da bi bila prikladna za primjene u kriptografiji javnogkljuca, u grupi G operacije mnozenja i potenciranja trebale bi biti jednostavne, dok bi logar-itmiranje kao inverz od potenciranja trebalo biti tesko. Slijedi definicija problema diskretnoglogaritma u grupi G.

Definicija 1.29 Neka je (G, ∗) konacna grupa, g ∈ G,H = {gi : i ≥ 0} podgrupa od Ggenerirana s g, te h ∈ H. Treba naci najmanji nenegativni cijeli broj x takav da je h = gx,gdje je

gx = g ∗ g ∗ ... ∗ g︸ ︷︷ ︸x puta

Taj broj x se naziva diskretni logaritam i oznacava s logg h.

Problem diskretnog logaritma iskoristili su Diffie i Hellman u ranije opisanom protokolu zarazmjenu kljuceva.

Sada se definira ElGamalov kriptosustav koji je zasnovan na teskoci racunanja diskretnoglogaritma u grupi (Z∗

p, ·p).

Definicija 1.30 Neka je p prost broj i α ∈ Z∗p primitivni korijen modulo p. Neka je P =

Z∗p, C = Z∗

p × Z∗p i

K = {(p, α, a, β) : β = αa mod p}.Vrijednosti p, α, β su javne, a vrijednost a je tajna.Za K ∈ K i tajni slucajni broj k ∈ {0, 1, ..., p− 1} definira se

eK(x, k) = (αk(mod) p, xβk mod p).

Za y1, y2 ∈ Z∗p definira se

dK(y1, y2) = y2(ya1)

−1 mod p.

Ovdje se moze reci da se otvoreni tekst x”zamaskira” mnozeci s βk. Ako se zna tajni

eksponent a, moze se iz αk izracunati βk i”ukloniti masku”.

Da bi eksponent a stvarno bio tajan, prost broj p mora biti dovoljno velik da problemdiskretnog logaritma u Z∗

p bude prakticno nerjesiv, pa se preporuca koristenje velikih prostihbrojeva od oko 1024 bita. Takoder bi broj p−1 trebao imati barem jedan veliki prosti faktor(od barem 160 bitova).

15

Page 20: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Primjer 1.8 Neka je u ElGamalovom kriptosustavu p = 2579, α = 2, a = 765. Tada je

β = 2765 mod 2579 = 949.

Pretpostavimo da zelimo poslati poruku x = 1299. Neka je zadan tajno izabrani broj (jed-nokratni kljuc) k = 853. Tada se racuna

y1 = 2853 mod2579 = 435

y2 = 1299 · 949853 mod2579 = 1299 · 2424 mod 2579 = 2396,

pa se primatelju salje sifrat (435, 2396) iz kojega on racuna otvoreni tekst:

x = 2396 · (435765)−1 mod 2579 = 2396 · 2424−1 mod 2579 = 2396 · 1980 mod 2579 = 1299.

Najefikasniji poznati algoritmi za problem diskretnog logaritma u grupi Z∗p zasnovani su

na tzv. index calculus metodi. Za efikasnost ove metode presudna su svojstva distribucijeprostih brojeva, ponajprije cinjenica da ih ima beskonacno mnogo.

1.5.3 Kriptosustavi zasnovani na problemu faktorizacije

Jedan od matematickih problema koji se koristi u konstrukciji osobnih jednosmjernih funkcijaje problem faktorizacije velikih prirodnih brojeva. Danas je prakticki nemoguce rastaviti nafaktore pazljivo odabran prirodni broj s vise od 250 znamenaka.Rabinov kriptosustav zasnovan je na teskoci racunanja kvadratnog korijena po fiksnomslozenom modulu. Njegovo je razbijanje ekvivalentno rjesenju problema kvadratnog kori-jena pa je ekvivalentno i problemu faktorizacije.

Definicija 1.31 Neka je n=pq, gdje su p i q prosti brojevi takvi da je p ≡ q ≡ 3 (mod 4).Neka je P = C = Zn, te

K = {(n, p, q) : n = pq}.

Za K ∈ K definira se

eK(x) = x2 mod n, dK(y) =√y mod n.

Vrijednost n je javna, a vrijednosti p i q su tajne.

Ovdje a =√b mod n znaci da je a2 ≡ b (mod n). Uvjet p ≡ q ≡ 3 (mod 4) se moze

izostaviti, no uz njega je desifriranje efikasnije i jednostavnije.Vazno je uociti da funkcija eK nije injekcija pa se desifriranje ne moze provesti na jedin-stven nacin. Jedan nacin dobivanja jedinstvenog rjesenja je ubacivanje odredene pravilnostiu otvoreni tekst pa ce samo jedan od 4 kvadratna korijena dati rezultat koji ima zadanupravilnost.

Najpoznatiji kriptosustav s javnim kljucem je RSA kriptosustav. Iako je zasnovanna teskoci faktorizacije velikih prirodnih brojeva na produkt dva prosta broja, u samomsifriranju i desifriranju koristi se modularno potenciranje, dok se faktorizacija koristi u do-bivanju dodatnog podatka (

”trapdoora”). Ovaj ce se kriptosustav definirati u sljedecem

poglavlju.

16

Page 21: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

2

RSA kriptosustav

2.1 Definicija

Definicija 2.1 Neka je n=pq, gdje su p i q prosti brojevi. Neka je P = C = Zn ={0, 1, 2, ..., n− 1}, te

K = {(n, p, q, d, e) : n = pq, de ≡ 1 (mod φ(n))}.

Za K ∈ K definira se

eK = xe mod n, dK = yd mod n, x, y ∈ Zn.

Vrijednosti n i e su javne, a vrijednosti p, q i d su tajne, tj. (n,e) je javni, a (p,q,d) je tajnikljuc.

Ovdje je φ(n) Eulerova funkcija, tj. broj brojeva u nizu 1, 2, ..., n koji su relativno prosti sn. Kod RSA kriptosustava je

φ(n) = φ(pq) = φ(p)φ(q) = (p− 1)(q − 1) = n− p− q + 1.

Vrijednosti n i e su javne, dok su vrijednosti p, q i d tajne. Jednosmjerna funkcija ovdje jexe mod n, a

”trapdoor” je poznavanje faktorizacije n = pq.

Jos se treba provjeriti da su eK i dK jedna drugoj inverzne. U dokazu da je dK inverz od eKkoristi se Eulerov teorem.

Propozicija 2.1 Funkcije eK i dK su jedna drugoj inverzne.

Dokaz:dK(eK(x)) ≡ (eK(x))

d ≡ (xe)d ≡ xde (mod n)

Kako je de ≡ 1 (mod φ(n)), to znaci da postoji prirodan broj t takav da je de = t ·φ(n) + 1pa se dobiva

xde = xt·φ(n)+1 = xt·φ(n) · x =[xφ(n)

]t · x.U zavisnosti od n i x postoje dva slucaja:

1. (x, n) = 1Kako je tada prema Teoremu 1.5 (Euler) xφ(n) ≡ 1 (mod n), to je

xde ≡ 1t · x ≡ x(mod n).

17

Page 22: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

2. (x, n) = 1Ako je (x, n) = n, tada je x = 0 pa je kongruencija trivijalno zadovoljena. Neka je(x, n) = p ili (x, n) = q. Bez smanjenja opcenitosti uzme se da je (x, n) = p, pa jexde ≡ 0 ≡ x (mod p). Kako je (x, pq) = p, gdje su p i q prosti, to je (x, q) = 1 pa jeprema Teoremu 1.5

xφ(q) ≡ 1 (mod q) ⇒ xq−1 ≡ 1 (mod q).

Sada jexde = (xq−1)(p−1)·t · x ≡ x (mod q).

Konacno je xde ≡ x (mod pq), tj. xde ≡ x (mod n). �

2.2 Primjena

2.2.1 Generiranje kljuceva

Kako bi dvije osobe komunicirale koristeci kriptografski algoritam sa javnim kljucem, potrebnasu im po dva kljuca, jedan javni i jedan tajni. U RSA kriptosustavu ovi kljucevi se generirajuna sljedeci nacin:

1. Slucajnim odabirom odabrati dva razlicita prosta broja p i q od kojih svaki ima oko100 znamenki. Obicno se odaberu tako da jedan od njih ima nekoliko znamenki viseod drugog. Odabir se vrsi tako da se pomocu generatora slucajnih brojeva generiradovoljno velik prirodan broj k, a zatim se koristenjem nekog testa za testiranje prostostitrazi prvi prosti broj koji je veci ili jednak k.

2. Izracunati n = pq i φ(n) = (p− 1)(q − 1).

3. Na slucajan nacin odabrati cijeli broj e takav da je e < φ(n) i (e, φ(n)) = 1.

4. Izracunati d kao inverzni element za operaciju mnozenja broju e, po modulu φ(n).

de ≡ 1 (mod φ(n)), tj. d ≡ e−1 (mod φ(n))

Izracunavanje d se vrsi pomocu prosirenog Euklidovog algoritma koji za dane a i bracuna b−1 mod a.

5. Uredeni par (n, e) objavljuje se kao javni, a (p, q, d) sacuva u tajnosti kao vlastiti RSAkljuc.

U praksi su cest izbor za eksponent e Fermatovi prosti brojevi 3, 17 i 65537. Njihovim od-abirom ubrzava se proces modularnog potenciranja koji se koristi kod sifriranja i desifriranja.Pokazano je kako je sigurnost RSA kriptosustava ugrozena ako se koristi mali javni ekspo-nent e, posebno za e = 3, pa se ne preporuca koristenje eksponenata manjih od 65537.

18

Page 23: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

2.2.2 Sifriranje i desifriranje

RSA koristi relativno jednostavan algoritam za sifriranje koji, kada se koriste dovoljno dugikljucevi, zahtijeva znacajne racunalne resurse.Postupak sifriranja je sljedeci:

1. Pronaci primateljev javni kljuc (n, e) i pretvoriti poruku X u cijeli broj x < n, npr.na nacin da je razmak = 00, A = 01, B = 02, itd. Ako je x ≥ n, tada se x razbijau blokove brojeva xi, i = 1, ..., k gdje je k broj tih blokova. Kod pretvorbe poruke ublokove postupak pretvorbe, tj. broj znamenaka je unaprijed dogovoren i reverzibilan.

2. Kako bi se dobila sifrirana poruka y, dobiveni broj x = (x1, x2, ..., xk) sifrirati premaizrazu

yi = xei mod n

Dobivena poruka y = (y1, y2, ..., yk) salje se primatelju.

Postupak desifriranja analogan je postupku sifriranja:

1. Primatelj iz sifrirane poruke y = (y1, y2, ..., yk) koristeci svoj tajni kljuc (n, d) racunax = (x1, x2, ..., xk) prema izrazu

xi = ydi mod n

2. Dobiveni broj x pretvara se u poruku X suprotnim procesom od onoga koristenog prisifriranju, cime je poruka X desifrirana.

Primjer 2.1 Sifriranje i desifriranje u RSA kriptosustavu sa malim parametrima p = 3 iq = 11.Pomocu parametara p i q dobiva se da je n = p · q = 33 i φ(n) = 20. Eksponent e mora bitirelativno prost s 20, pa neka je e = 7. Tada je (n, e) = (33, 7) javni kljuc, a d = 3. Ako saljeporuka x=17, potrebno je izracunati eK(x) = 177 mod 33:

177 = 17 · 172 · 174 ≡ 17 · 25 · (−2) ≡ −25 ≡ 8 (mod 33).

Sifrat y = eK(x) = 8, desifrira se pomocu tajnog kljuca d:

x = dK(y) ≡ 83 ≡ 8 · 82 ≡ 8 · (−2) ≡ 17 (mod 33).

Dakle, x = 17.

2.2.3 Digitalni potpis

Buduci da su kod RSA kriptosustava kljucevi javni, postavlja se pitanje kako primatelj mozesa sigurnoscu potvrditi identitet posiljatelja. Taj se problem rjesava na lak nacin. Neka jeP potpis posiljatelja A, koji mozda ukljucuje OIB, omiljenu hranu, ime prve uciteljice i sl.Buduci da svi znaju funkciju eB primatelja B, nije dovoljno da posiljatelj A posalje porukueB(P ), nego na pocetku ili na kraju poruke posiljatelj treba dopisati eBdA(P ). Primljenisifrat, koji se sastoji od poruke i dijela eB(dA(P )) primatelj B desifrira pomocu dB i dobivatekst poruke i nerazumljivi dio koji je dA(P ). Buduci da primatelj B zna da bi poruka tre-bala biti od posiljatelja A, on koristi njegov javni kljuc eA, desifrira dA(P ) i dobije potpis

19

Page 24: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

P . Zbog nepoznavanja dA nitko drugi, osim posiljatelja A, nije mogao poruku potpisati nataj nacin.

Digitalni potpis kreira se na sljedeci nacin:

1. Posiljatelj A pomocu samo njemu poznate funkcije dA kreira digitalni popis dA(P )modularnim potenciranjem potpisa P :

dA(P ) = P dA mod nA

Ovaj postupak identican je postupku sifriranja poruke tajnim kljucem posiljatelja A.Sada posiljatelj na pocetak ili kraj poruke M dodaje potpis dA(P ) i dobivenu porukuMA = MdA(P ) sifrira javnim kljucem eB primatelja B:

MB = eB(MA) = M eBA mod nB

2. Primatelj B modularnim potenciranjem porukeMB desifrira digitalno potpisanu poruku:

MA = MdbB mod nB

Rezultat je poruka M i nerazumljivi dio dA(P ) iz kojeg se ponovnim modularnimpotenciranjem dobiva digitalni potpis posiljatelja A:

P = (dA(P ))eA mod nA

Na ovaj nacin primatelj B je potvrdio autenticnost poruke posiljatelja A.

2.3 Kriptoanaliza

Buduci da je implementacija RSA algoritma vrlo jednostavna, i napad na RSA moze sejednostavno provesti ako je poznat eksponent d. Jedan ocit napad na RSA je faktorizacijaod n = pq. Ako napadac faktorizira n, onda moze pronaci φ(n) = (p − 1)(q − 1) i tajnieksponent d iz izraza de ≡ 1 mod φ(n) pomocu Euklidovog algoritma.Buduci da se u RSA algoritmu za p i q uzimaju brojevi sa 100 i vise znamenki, onda n = pqima najmanje 200 znamenki, a najbrzi algoritmi za faktorizaciju trebaju eO((logn)1/3(log log n)2/3)

operacija pa se vrijeme potrebno za razbijanje algoritma najbrzim racunalima racuna u stoti-nama godina. U nekim je slucajevima n ipak lakse faktorizirati, npr. kada su p i q jako blizujedan drugome, ili ako p−1 i q−1 imaju samo male proste faktore, pa takve slucajeve trebaizbjegavati. Iako je RSA dovoljno siguran, ako napadac otkrije tajni eksponent d, onda nijedovoljno samo promijeniti eksponent e, vec se mora promijeniti i n.

Lema 2.1 Poznavanje tajnog eksponenta d, koji odgovara javnima n i e, moze omogucitifaktorizaciju od n.

Dokaz: Pretpostavi li se da je broj d takav da za sve x relativno proste s n, tj. (x, n) = 1,vrijedi xde ≡ x mod n. Tada za m = ed − 1 vrijedi xm ≡ 1 (mod n) za sve x za koje je(x, n) = 1. Kako je grupa svih reduciranih ostataka modulo p ciklicka, xm ≡ 1 (mod n)

20

Page 25: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

je ekvivalentno tome da je m zajednicki visekratnik od p − 1 i q − 1. Stoga je poznavanjebroja m slabije od poznavanja broja φ(n) = (p − 1)(q − 1), ali se ipak pomocu m mozes velikom vjerojatnoscu faktorizirati n. Opisat cemo faktorizaciju pomocu vjerojatnosnogalgoritma iz klase Las Vegas algoritama koji ne daju uvijek odgovor, ali kada ga daju, onda jesigurno tocan. U slucaju da algoritam ne ponudi rjesenje, moze mu se dati druga nezavisnaprilika za nalazenje odgovora pa se tako vjerojatnost uspjeha algoritma povecava s kolicinomraspolozivog vremena.Neka je poznatn = pq i neka je m takav da je xm ≡ 1 (mod n), za sve x takve da (x, n) = 1.Uvrstavanjem x = −1 vidi se da je m paran. Provjerava se ima li m/2 isto svojstvo kaom. Ako postoji x za koji vrijedi x ≡ 1 (mod n), tada u Zn postoji barem 50% takvihbrojeva. Zaista, svakom broju y koji zadovoljava kongruenciju ym/2 ≡ 1 (mod n) odgovarabroj xy koji tu kongruenciju ne zadovoljava. Ako se sada testira nekoliko desetaka x-ova isvi zadovoljavaju kongruenciju xm/2 ≡ 1 (mod n), tada se s velikom vjerojatnoscu moze recida je kongruencija xm/2 ≡ 1 (mod n) ispunjena za sve x za koje je (x, n) = 1, pa se m mozezamijeniti sa m/2. Dijeljenje sa dva nastavlja se sve dok je to moguce, a na kraju postojedvije mogucnosti:

1. m/2 je djelitelj tocno jednog od brojeva p − 1 i q − 1. Ako je to p − 1, tada jexm/2 ≡ 1 (mod p) za sve x, ali je xm/2 ≡ −1 (mod q) u tocno 50% slucajeva.

2. m/2 nije djelitelj ni od p − 1 ni od q − 1. Tada je xm/2 ≡ ±1 (mod p) ili xm/2 ≡±1 (mod q) i svaka od 4 mogucnosti nastupa u tocno 25% slucajeva.

Dakle, za proizvoljan x vjerojatnost je 50% da je xm/2 − 1 djeljiv s tocno jednim od brojevap i q. Uzimajuci slucajno nekoliko desetaka x-ova, moze se s velikom vjerojatnoscu ocekivatida ce se pronaci x sa gornjim svojstvom. Neka je npr. x takav da je xm/2 − 1 djeljiv s p, alinije s q. Tada je (n, xm/2 − 1) = p, pa je n faktoriziran. �

Na prvi se pogled ideja da se izabere jedan”dobar” n za sve, a da se korisnicima tajno

dodijele parovi eK i dK ne cini losom, jer bi se izbjeglo generiranje razlicitih modula n = pq.Ona, ipak, nije dobra jer bi rezultirala nesigurnim sustavom zbog gore navedenog vjero-jatnosnog algoritma. Korisnik A bi tada na osnovu svojih eA i dA mogao faktorizirati n iodrediti p i q pa bi zbog posjedovanja eB i poznavanja faktorizacije od n, a samim tim ivrijednosti φ(n), mogao otkriti i dB za svakog drugog korisnika. U slucaju zajednickog n inapadac bi se otkrivanjem jednog dK mogao postaviti u ulogu korisnika A i otkriti sve tajneeksponente dK .

Lema 2.2 Neka je n = pq produkt dva razlicita prosta broja. Ako je poznat n i φ(n), tadase moze brzo naci p i q.

Dokaz: Iz φ(n) = (p− 1)(q − 1) dobivamo

φ(n) = pq − p− q + 1 = n− p− q + 1 = n− (p+ q) + 1 ⇒ n− φ(n) + 1 = p+ q

Sada je osim produkta pq poznata i suma p+ q pa se definira polinom

f(X) = (X − p)(X − q) = X2 − (p+ q)X + pq

f(X) = X2 − (n− φ(n) + 1)X + n

21

Page 26: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Sada se p i q racuna pomocu formule za rjesavanje kvadratne jednadzbe.

p, q =(n− φ(n) + 1)±

√(n− φ(n) + 1)2 − 4n

2

Primjer 2.2 Neka je n = 25397 i φ(n) = 25056. Potrebno je odrediti p i q tako da jen = pq.Dobiva se n− φ(n) + 1 = 25397− 25056 + 1 = 342, pa je

f(X) = X2 − 342X + 25397

p, q =342±

√3422 − 4 · 25397

2=

342± 124

2⇒ p = 223, q = 109.

Sljedeca na prvi pogled dobra ideja je da jedan od eksponenata e i d bude mal jer bito moglo smanjiti vrijeme potrebno za desifriranje. Teorem M. Wienera iz 1990. godinepokazuje da u slucaju izbora tajnog eksponenta d relativno malog u odnosu na n, postojiefikasan algoritam za razbijanje sifre.

Teorem 2.1 Neka je n=pq i p < q < 2p,te neka je d < 13n0,25. Tada postoji polinomijalni

algoritam koji iz poznavanja n i e izracunava d.

Dokaz: Iz ed ≡ 1 (mod φ(n)) slijedi da postoji prirodan broj k takav da je ed−kφ(n) = 1.Odavde je ∣∣∣∣ e

φ(n)− k

d

∣∣∣∣ = 1

dφ(n).

Dakle, kdje dobra aproksimacija od e

φ(n). Buduci da φ(n) nije poznat, aproksimirat ce se s

n. Iz φ(n) = n− p− q+1 i p+ q− 1 < 3√n slijedi |n−φ(n)| < 3

√n, pa se zamjenom φ(n)

s n dobiva:∣∣∣∣ en − k

d

∣∣∣∣ = ∣∣∣∣ed− kφ(n)− kn+ kφ(n)

nd

∣∣∣∣ = ∣∣∣∣1− k(n− φ(n))

nd

∣∣∣∣ ≤ 3k√n

nd=

3k

d√n.

Sada je kφ(n) = ed− 1 < ed, pa iz e < φ(n) slijedi da je k < d < 13n0,25, pa se dobiva:∣∣∣∣ en − k

d

∣∣∣∣ ≤ 1

dn0,25<

1

2d2. (2.1)

Prema Legendreovom teoremu iz teorije diofantskih aproksimacija slijedi da relacija 2.1povlaci da je k

dneka konvergenta razvoja u verizni razlomak od e

n.

Razvoj u verizni razlomak izgleda ovako:

b

c= a0 +

1

a1 +1

a2+1

...an−1+

1an

= [a0; a1, a2, ..., an],

22

Page 27: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

gdje su a0, a1, ..., an kvocijenti iz Euklidovog algoritma primijenjenog na b i c. Razlomci oblikapkqk

= [a0, a1, ..., ak] za k ≤ n nazivaju se konvergente veriznog razvoja. Vrijede rekurzije

p0 = a0, p1 = a0a1 + 1, pk = akpk−1 + pk−2,

q0 = 1, q1 = a1, qk = akqk−1 + qk−2.

Odavde slijedi da je qk ≥ Fk, gdje je Fkk−ti Fibonaccijev broj, sto znaci da nazivnici kon-vergenti rastu eksponencijalno. U ovom slucaju to povlaci da ima O(log n) konvergenti oden. Jedna od njih je k

d. Dakle, izracunaju se sve konvergente od n

ei testira koja od njih

zadovoljava uvjet (xe)d ≡ x (mod n) za slucajno odabran broj x. To daje polinomijalnialgoritam za otkrivanje tajnog kljuca d. �

Wiener je predlozio sljedecu metodu za testiranje konvergenti. Neka je abkonvergenta od

ne. Ako je to tocno, tada φ(n) se moze izracunati iz

φ(n) = (p− 1)(q − 1) =be− 1

a.

Sada se iz sljedecih identiteta racuna p+q2

i q−p2:

p+ q

2=

pq − (p− 1)(q − 1) + 1

2=

an− be+ 1 + a

2a(q − p

2

)2

=

(p+ q

2

)2

− pq =

(p+ q

2

)2

− n.

Ako se dobije da su p+q2

i q−p2

prirodni brojevi, tada je abodgovarajuca konvergenta od n

e.

Sada je jednostavno dobiti faktorizaciju modula n = pq.

Primjer 2.3 Neka je u RSA kriptosustavu zadan modul n = 14462477761 i eksponent e =13456168555. Uz pretpostavku da je d < 1

3n0,25 ≈ 115, 5 treba faktorizirati n.

Razvoj u verizni razlomak od enje

e

n= [0; 1, 13, 2, 1, 2, 4, 1, 1, 19, 2, 3, 1, 1, 5041, 1, 7],

a konvergente su

0, 1,13

14,27

29,40

43,107

115,468

503,575

618, ...

Ispitujuci konvergente redom, dobiva se da je za ab= 107

115.

p+ q

2=

107 · 14462477761− 115 · 13456168555 + 1 + 107

2 · 107= 120265(

q − p

2

)2

= 1202652 − 14462477761 = 10922

Sada jep+ q = 240530

q − p = 2184

pa se dobiva da je p = 119173 i q = 121357. Tako je faktoriziram n = 119173 · 121357 idobijen tajni eksponent kao nazivnik pete konvergente d = 115.

23

Page 28: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Postoje i napadi na RSA uz pretpostavku da je eksponent emal jer bi se tako minimiziralovrijeme potrebno za sifriranje pa je i takve slucajeve potrebno izbjegavati.Pretpostavimo da imamo tri korisnika s razlicitim vrijednostima javnog modula n1, n2, n3,te da svi koriste isti javni eksponent e = 3. Nadalje, pretpostavimo da im se treba poslatiidenticna poruka m. Tada njihov protivnik moze doznati sljedece sifrate:

c1 ≡ m3 (mod n1), c2 ≡ m3 (mod n2), c3 ≡ m3 (mod n3).

Nakon toga on moze pomocu Kineskog teorema o ostacima (Teorem 1.4) naci rjesenje sustavalinearnih kongruencija

x ≡ c1 (mod n1), x ≡ c2 (mod n2), x ≡ c3 (mod n3).

Tako ce dobiti broj x sa svojstvom x ≡ m3 (mod n1n2n3). Kako je m3 < n1n2n3, zapravovrijedi jednakost x = m3 pa protivnik moze izracunati originalnu poruku m tako da nadetreci korijen iz x.

Primjer 2.4 Neka je n1 = 329, n2 = 341, n3 = 377. Pretpostavimo da je protivnik saznaosifrate c1 = 43, c2 = 30, c3 = 372, te zeli saznati zajednicki otvoreni tekst m. Rjesavanjemsustava

x ≡ 43 (mod 329), x ≡ 30 (mod 341), x ≡ 372 (mod 377),

koristeci Kineski teorem o ostacima dobiva

x ≡ 341 ·377 ·172+329 ·377 ·232+329 ·341 ·317 ≡ 86451373 ≡ 1860867 (mod329 ·341 ·377).

To znaci da je x = 1860867 i m = 3√x = 123.

Nakon tri desetljeca intenzivnog proucavanja jos uvijek nije pronadena metoda kojom bise u potpunosti razbio RSA kriptosustav. Svi poznati napadi na RSA svode se na to dase otkrije pojedina slabost i upozori na sto treba paziti i sto treba izbjegavati kod izboraparametara i implementacije RSA. Stoga se zasad, uz ispravnu primjenu, RSA moze smatratisigurnim kriptosustavom.

24

Page 29: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

3

Implementacija RSA kriptosustava

3.1 Algoritmi iz teorije brojeva

3.1.1 Slozenost algoritama

Definicija 3.1 Algoritam je metoda za rjesavanje neke klase problema koja za ulazne po-datke odredenog tipa daje odgovor u konacnom vremenu.

Algoritmi se mogu usporedivati s obzirom na broj”osnovnih koraka” potrebnih za njihovo

izvrsavanje. Pod osnovnim korakom podrazumijeva se jedna”bitna operacija”, tj. logicka

operacija disjunkcije, konjukcije ili negacije na bitovima - nulama i jedinicama. Nenegativnicijeli broj N zapisuje se u bazi b kao (dk−1dk−2...d1d0)b, gdje su d = 0, ..., b−1 znamenke, stoznaci da je N = dk−1b

k−1+ dk−2bk−2+ ...+ d1b+ d0. Ako je prva znamenka dk−1 = 0, broj N

zove se k− znamenkasti broj u bazi b. Velicina ulaznih podataka mjerit ce se brojem bitovapotrebnim za njihov prikaz pa je velicina prirodnog broja N u bazi 2 jednaka ⌊log2 N⌋+ 1,gdje je ⌊x⌋ najveci cijeli broj manji ili jednak x.Kod ocjene broja operacija, razlikuju se ocjene za

• broj operacija u najlosijem slucaju, sto se naziva slozenost algoritma,

• prosjecan broj operacija, sto se naziva prosjecna slozenost algoritma.

Definicija 3.2 Polinomijalan algoritam je algoritam ciji je broj operacija u najlosijem slucajufunkcija oblika O(nk), gdje su n duljina ulaznog podatka u bitovima, a k konstanta. Algoritmikoji nisu polinomijalni, nazivaju se eksponencijalnim.

Za polinomijalne algoritme kaze se da su”efikasni”, dok se za eksponencijalne kaze da su

”neefikasni”. No, u kriptografiji je i stupanj polinoma k jako bitan jer ce npr. algoritamslozenosti O(nln lnn), koji je asimptotski sporiji od algoritma slozenosti O(n100), u praksi bitibrzi. Osim toga, cesto je vazniji prosjecan broj operacija od broja operacija u najlosijemslucaju jer kriptosustav treba biti zasnovan na problemu koji je tezak u prosjecnom slucaju,a ne samo u izoliranim slucajevima.

Definicija 3.3 Subeksponencijalni algoritam je algoritam cija je slozenost funkcija oblikaO(eO(n)), gdje je n duljina ulaznog podatka.

25

Page 30: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Najpoznatiji algoritmi za faktorizaciju prirodnog broja N su subeksponencijalni i njihovaslozenost je funkcija oblika

LN(v, c) = O(ec(lnN)v(ln lnN)1−v

)

pa su subeksponencijalni algoritmi koji odgovaraju vrijednostima v, 0 < v < 1 asimptot-ski sporiji od polinomijalnih, ali su puno brzi od potpuno eksponencijalnih cija je slozenostO(en

k).

3.1.2 Modularno potenciranje

U RSA kriptosustavu sifriranje se provodi pomocu modularnog potenciranja, tj. funkcijeoblika xe mod n. Trivijalni algoritam kojim bi se xe racunao kao x · x · ... · x pomocu e− 1mnozenja vrlo je neefikasan i zauzimao bi ogromnu kolicinu racunalne memorije.Najjednostavnija i najstarija od efikasnih metoda je binarna metoda ili metoda uzastopnimkvadriranjem koja za binarni zapis broja e = 2s−1es−1+...+2e1+e0 koristi sljedeci algoritam:

Algoritam 1 Kvadriraj i mnoziy=1za i = s− 1, ..., 1, 0 radi (znamenke citamo slijeva)

y = y2 mod n (kvadriraj)

ako ei = 1 onda y = y · x mod n; (mnozi)

Ako se za slozenost mnozenja i dijeljenja brojeva manjih od m uzme da je O(ln2m),u slucaju modularnog potenciranja dobiva se slozenost O(lnn ln2 m). Modul privremenogrezultata uzima se radi ustede memorije pri svakom potenciranju.

3.1.3 Generiranje velikih prostih brojeva

U RSA algoritmu potrebno je generirati kljuceve p i q od kojih svaki ima 100 i vise znamenakapa se zovu veliki prosti brojevi.Za generiranje velikih prostih brojeva, posluzit cemo se cinjenicom da su prosti brojeviprilicno gusto rasporedeni pa je dovoljno generirati slucajne brojeve odgovarajuce velicinei testirati ih na prostost. Testovi prostosti su kriteriji koje broj mora zadovoljiti da bi bioprost. Ako ne zadovolji neki od tih kriterija, onda je sigurno slozen, a ako ih zadovolji, ondaje velika vjerojatnost da je prost.Prvi dokaz da prostih brojeva ima beskonacno mnogo, a koji se zasniva na cinjenici da svakiprirodan broj ima barem jedan prosti djelitelj, dao je Euklid oko 300. godine prije Krista.

Definicija 3.4 Za x ∈ R, sa π(x) cemo oznacavati broj prostih brojeva p takvih da je p ≤ x.

Primjer 3.1 Neka je x = 10, slijedi da je π(x) = 4 jer su 2,3,5,7 prosti brojevi koji sumanji ili jednaki broju 10.

Teorem 3.1 (Teorem o prostim brojevima)

π(x) ∼ x

ln x, x > 0.

26

Page 31: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Ovu cinjenicu prvi je naslutio Gauss, a dokazali su je Hadamard i de la Vallee Poussin.Jos bolja aproksimacija za funkciju π(x) je logaritamsko-integralna funkcija:

π(x) =

∫ x

2

1

ln tdt.

Po l’Hopitalovu pravilu neposredno slijedi:

limx→∞

π(x)

x/ ln(x)= 1.

Koristeci teorem o prostim brojevima vjerojatnost da je slucajno izabran prirodan brojn prost dobiva se kao 1/ ln(n). To znaci da ce se u prosjeku testirati ln(n) prirodnih brojevaslucajno izabranih iz okoline broja n kako bi se pronasao prost broj jednake duzine.Najjednostavniji pristup testiranju prostosti broja n bio bi pokusaj dijeljenja n svim prirod-nim brojevima od 2 do ⌊n⌋, izuzevsi parne brojeve vece od 2. Ako bi se pokazalo da je ndjeljiv bilo kojim od tih brojeva, onda je n slozen, a u suprotnom je n prost broj. Ovaj jepristup praktican samo kada je n jako mal ili ima barem jedan mali faktor.

Brzu metodu za testiranje prostosti broja sa proizvoljno malom greskom predstavljaMiller-Rabinov test prostosti. Ovo je probabilisticki algoritam jer dovodi do rjesenja samos odredenom vjerojatnoscu. Prije samog algoritma navedena su neka vazna svojstva prostihbrojeva koja su vrlo jednostavna za provjeru, a ne karakteriziraju samo proste brojeve.

Teorem 3.2 (Mali Fermatov teorem) Neka je p prost broj. Ako p - b, onda je bp−1 ≡1 (mod p). Za svaki cijeli broj b vrijedi bp ≡ b (mod p).

Dokaz: Ocito je φ(p) = p− 1, pa tvrdnja slijedi iz Teorema 1.5. �

Obrat ovog teorema ne vrijedi, tj. p moze biti slozen, a da ipak za neki b vrijedi relacijabp ≡ b (mod p).

Definicija 3.5 Kaze se da je slozen broj n pseudoprost u bazi b, ili krace n je psp(b), ako je

bn ≡ b (mod n).

Primjer 3.2 Broj 91 = 7 · 13 je psp(3) jer je 390 ≡ 2730 ≡ (−1)30 ≡ 1 (mod 7) i 390 ≡2730 ≡ 130 ≡ 1 (mod 13), pa je 390 ≡ 1 (mod 91).

Postojanje pseudoprostih brojeva pokazuje da testiranje samo s jednom bazom nije dovoljnokako bi se zakljucilo da je p prost broj. Kombinirajuci Mali Fermatov teorem sa svojstvomkongruencije x2 ≡ 1 (mod p) dobiva se jaci zahtjev od onoga iz definicije pseudoprostihbrojeva.

Definicija 3.6 Neka je n neparan slozen broj, te neka je n − 1 = 2s · t, gdje je t neparan.Ako za cijeli broj b vrijedi

bt ≡ 1 (mod n) ili postoji r < s takav da je b2r·t ≡ −1 (mod n),

onda se kaze da je n jak pseudoprost broj u bazi b, ili krace n je spsp(b).

27

Page 32: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Ako uvjet iz definicije nije ispunjen za neki b, 0 < b < n, tada je broj n slozen. U tom slucajuse broj b naziva svjedok slozenosti od n.Sljedeci teorem pokazuje da je nemoguce da slozen broj bude jak pseudoprost broj u svakojbazi.

Teorem 3.3 Neka je n neparan slozen broj. Tada je n jak pseudoprost broj u bazi b zanajvise (n-1)/4 baza b, 0 < b < n.

Algoritam 2 Miller-Rabinov algoritam

Ulaz: n > 3, neparan cijeli broj ciju prostost testiramoUlaz: k parametar koji odreduje tocnost testaIzlaz: slozen ako je n slozen, u suprotnom vjerojatno prost

n− 1 = 2sd, gdje je d neparanza j = 1, ..., k radi

a=slucajan broj iz segmenta [2, n− 2]x = ad mod nako x = 1 ili x = n− 1 onda j = j + 1za r = 1, ..., s− 1 radi

x = x2 mod nako x = 1 onda vrati slozenako x = n - 1 onda r = r + 1

vrati slozenvrati vjerojatno prost

Miller-Rabinov algoritam zasniva se na tvrdnji iz definicije 3.6, te je slozenost algoritmaO(k log3 n). Sto se veci broj baza a testira, to je veca tocnost testa. Iz teorema 3.3 vidi seda za bilo koji neparan slozen broj n, najmanje 3/4 baza a predstavlja svjedoke slozenosti.

3.1.4 Racunanje inverznog elementa za mnozenje

Za nalazenje modularnog inverza d ≡ e−1 (mod φ(n)) takvog da je de ≡ 1 (mod φ(n)),potrebno je pronaci dobru metodu za racunanje najveceg zajednickog djelitelja.Naivna mogucnost nalazenja najveceg zajednickog djelitelja (a, b) dva cijela broja a i b jestfaktorizacija tih brojeva na proste faktore. Ako je a =

∏p p

α(p), b =∏

p pβ(p), onda je

(a, b) =∏p

pmin(α(p),β(p)).

Zbog teskoce faktorizacije velikih prirodnih brojeva, potrebno je pronaci bolju metodu. Prob-leme nalazenja inverza i najveceg zajednickog djelitelja povezuje sljedeci teorem.

Teorem 3.4 Postoje cijeli brojevi x,y takvi da je ax+by=(a,b).

Dakle, ako su a i b relativno prosti cijeli brojevi, onda postoje cijeli brojevi x i y takvi da jeax+ by = 1 i pritom je x mod b = a−1mod b, dok je y mod a = b−1mod a.Jedan od najvaznijih algoritama u teoriji brojeva je Euklidov algoritam za nalazenje najvecegzajednickog djelitelja. Zasnovan je na cinjenici da je (a, b) = (b, a mod b). Kako je (a, b) =(|a|, |b|), moze se pretpostaviti da je a > b ≥ 0.Euklidov algoritam raspisan po koracima izgleda ovako:

28

Page 33: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Algoritam 3 Euklidov algoritam

dok b > 0 radi(a, b) = (b, a mod b)

vrati a

a = q1b+ r1

b = q2r1 + r1...

rn−3 = qn−1rn−2 + rn−1

rn−2 = qnrn−1

Kako svaki korak Euklidovog algoritma zahtijeva jedno dijeljenje brojeva ≤ N , a broj korakaje O(lnN), dobiva se da je slozenost Euklidovog algoritma O(ln3N).Ovaj se algoritam moze iskoristiti i za rjesavanje linearnih diofantskih jednadzbi, dakle zanalazenje cijelih brojeva x, y takvih da je ax+ by = (a, b). U slucaju da je (a, b) = 1 dobivase modularni inverz pomocu prosirenog Euklidovog algoritma.

Algoritam 4 Prosireni Euklidov algoritam

(x, y, g, u, v, w) = (1, 0, a, 0, 1, b)dok w > 0 radi

q = ⌊g/w⌋(x, y, g, u, v, w) = (u, v, w, x− qu, y − qv, g − qw)

vrati (x, y, g)

Slozenost prosirenog Euklidovog algoritma je O(log2 n).

3.2 Primjer RSA algoritma u Python programskom

jeziku

3.2.1 O Pythonu

Python programski jezik Python razvio je nizozemski programer Guido van Rossum dok jeradio na projektima vezanim uz interpreterski jezik ABC. Nezadovoljan nefleksibilnoscu togprogramskog jezika odlucio je razviti novi. Krajem 1989. godine poceo je razvijati program-ski jezik Python koji je nazvao prema kultnoj seriji

”Monty Python’s Flying Circus”. 1991.

pusten je prvi interpreter otvorenog koda za programski jezik Python, napisan u C-u.Python je interpreterski jezik, sto znaci da se ne kompajlira, nego se prevodi u posebanPython binarni kod sto omogucuje jednostavno prenosenje programa sa stroja na stroj.Python podrzava proceduralno i objektno orijentirano programiranje. Sadrzi ugradene mod-ule iz standardne biblioteke, no mogu se praviti i vlastiti moduli. Koristenje objekata ipozivanje procedura iz jednog modula u drugi vrlo je jednostavno. Jednostavno je i otkri-vanje pogresaka u izvrsavanju programa. U slucaju takve pogreske moguce je odrediti tocnomjesto i vrstu greske, cime je omoguceno lagano ispravljanje pogreske u programu.Zbog svojih osobina Python se koristi za web programiranje, XML procesiranje, u aplikaci-

29

Page 34: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

jama s bazama podataka, GUI aplikacijama, obrazovanju i za mnoge druge namjene, a koristega Google, NASA, Yahoo!, RedHat i drugi.

3.2.2 RSA algoritam sa automatskim generiranjem kljuceva

Slijedi primjer RSA algoritma napisan u Python programskom jeziku. Glavna funkcijamain() opcije korisnika uzima pomocu funkcije uzmiOpcije(), te prema varijablama koristenimpri odabiru opcija poziva funkcije potrebne za izvodenje odabranog dijela programa. Uslucaju odabira opcije za generiranje kljuceva poziva funkciju napraviKljuc() koja kreirajavni i tajni kljuc pridruzen unesenom imenu korisnika, te ih sprema u tekstualne datotekeoblika IME javni.txt i IME tajni.txt. Odabirom opcije za enkripciju javnim kljucemodabranog korisnika moguce je kodirati vec postojecu datoteku, ili izravno unijeti tekstkoji ce se automatski spremiti u datoteku s odabranim imenom. Kodiranje se vrsi pomocufunkcije enkriptiraj(), a sifrat se ispisuje i sprema u odabranu datoteku. Opcija za dekrip-ciju pozivom funkcije dekriptiraj() desifrira sifrat iz odabrane datoteke.Slijedi izvorni kod programa.

from random import randint , cho i c efrom math import l ogfrom s t r i n g import ato i , r ep lace , j o i nfrom time import timeimport sysimport os

# Globalne v a r i j a b l e za uzimanje op c i j ai n f i l e = Noneo u t f i l e = Nonek e y f i l e = Nonekey len = Noneopc i j a = None

# uzimanje op c i j ade f uzmiOpcije ( ) :

g l oba l i n f i l e , o u t f i l e , k e y f i l e , key lenopc i j a=raw input (”\ nOdaberite opc i j u : \n ’ g ’ za g en e r i r a n j e k l j u ca \n’ e ’ za e nk r i p c i j u \n ’d ’ za d e k r i p c i j u \n ’k ’ za k ra j \n> ”)i f ( l en ( op c i j a ) == 0 ) :

os . system (” c l e a r ”)p r i n t ”Greska : Unes i te oznaku op c i j e . ”main ( )

i f ( op c i j a == ”e ” ) :k e y f i l e = raw input (”\nIme v l a sn i ka datoteke s javnim kljucem : ”)+ ” j a vn i . txt ”i f ( os . path . i s f i l e ( k e y f i l e )==False ):#Ako datoteka ne p o s t o j i

os . system (” c l e a r ”)p r i n t ”Greska : Datoteka ” , k e y f i l e , ” s javnim kljucem ne p o s t o j i . ”main ( )

e l s e :

30

Page 35: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

i n f i l e = raw input (”\nIme datoteke koju z e l i t e k od i r a t i : ”)i f ( i n f i l e == ’ ’):

os . system (” c l e a r ”)p r i n t ”Greska : Morate u n i j e t i ime datoteke ”main ( )

e l i f ( op c i j a == ”d ” ) :k e y f i l e = raw input (”\nIme v l a sn i ka datoteke s tajnim kljucem : ”)+ ” t a j n i . txt ”i f ( os . path . i s f i l e ( k e y f i l e )==False ):#Ako datoteka ne p o s t o j i

os . system (” c l e a r ”)p r i n t ”Greska : Datoteka ” , k e y f i l e , ” s tajnim kljucem ne p o s t o j i . ”main ( )

e l s e :o u t f i l e = raw input (”\nIme datoteke koju z e l i t e d ekod i r a t i : ”)i f ( o u t f i l e == ’ ’):

os . system (” c l e a r ”)p r i n t ”Greska : Morate u n i j e t i ime datoteke ”main ( )

e l i f ( op c i j a == ”g ” ) :key len = raw input (”\ nDul j ina k l j u ca ( b i t a ) : ”)i f ( key len == ’ ’):

os . system (” c l e a r ”)p r i n t ”Greska : Unes i te du l j i nu k l j u ca . ”main ( )

e l i f ( op c i j a == ”k ” ) :sys . e x i t ( )

e l s e :os . system (” c l e a r ”)p r i n t ”Greska : Pogresan unos”main ( )

# Funkci ja sv jedok k o r i s t i Mi l l e r−Rabinov t e s t p r o s t o s t i .# Vraca t rue ako j e sv jedok za s l o z e n o s t t j . ne−p ro s t o s t bro ja n .# Ako j e v r a t i o true , n j e garant i rano s l o z en bro j . U suprotnom ,# ako v r a t i f a l s e , p o s t o j i v j e r o j a t n o s t da j e n pseudoprost .de f sv jedok (a , n ) :

# odmah vraca s l o z en ako j e N parani f not n & 1 :

re turn True# r j e s e n j e n−1 = (2ˆ t )u , gdje j e ( t >= 1) i u j e neparannum = n − 1t = in t ( l og (num, 2 ) )whi l e ( t >= 1 ) :

i f (num % (2∗∗ t ) == 0 ) :break

t −= 1u = num / (2∗∗ t )

31

Page 36: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

t e s t = {}t e s t [ 0 ] = pow(a , u , n)# kvadr i r an j ef o r i in range (1 , t +1):

t e s t [ i ] = pow( t e s t [ i −1] , 2 , n )i f ( t e s t [ i ]==1) and ( t e s t [ i −1]!=1) and ( t e s t [ i −1]!=n−1):

r e turn Truei f ( t e s t [ t ] != 1 ) :

r e turn Truere turn Fa l se

# Mi l l e r−Rabin−ov t e s t p r o s t o s t i :# Funkci ja t e s t i r a sv jedoke s l o z e n o s t i u rasponu [ 1 , n−1] .# Test se rad i s puta da b i se smanj i l a mogucnost pogreske .# Vje ro j a tno s t pogreske j e n a j v i s e 2ˆ(− s )

de f j ePro s t (n , s ) :i f n in [ 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , \

43 , 47 , 53 , 59 , 61 , 67 , 71 , 73 , 79 , 83 , 89 , 9 7 ] :r e turn True

f o r i in range ( s ) :a = randint (1 , n−1)i f sv jedok (a , n ) :

r e turn Fa l sere turn True

# vraca N b i t n i p ros t bro j . Buduci da kor i s t imo v r i j e dno s t 20 za s# u Mi l l e r−Rabinovom testu , v j e r o j a t n o s t pogreske j e oko .000095%def v e l i k i P r o s t (N) :

p = randint (2∗∗ (N−1) ,2∗∗N)whi l e 1 :

# prov j e ra p r o s t o s t i Mi l l e r−Rabinovim testom sa s i gurnoscu# 99.9999046% da j e p pros ti f j ePro s t (p , 2 0 ) : r e turn pp += 1

# Racunamo mu l t i p l i k a t i v n i i nve r z od a i b . Ova f unk c i j a j e u osnov i# p r o s i r e n i Euklidov a lgor i tam .de f i nve r z ( a , b ) :

e = a ; phiN = bv1 = [ 1 , 0 ]v2 = [ 0 , 1 ]

32

Page 37: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

whi le ( a != 0) and (b != 0 ) :i f ( a > b ) :

m = a / ba %= bf o r i in range ( 2 ) :

v1 [ i ] = v1 [ i ] − m∗v2 [ i ]e l s e :

m = b / ab %= af o r i in range ( 2 ) :

v2 [ i ] = v2 [ i ] − m∗v1 [ i ]i f ( a == 1 ) :

i f ( v1 [ 0 ] < 0 ) : r e turn ( v1 [0]%phiN )e l s e : r e turn v1 [ 0 ]

e l s e :i f ( v2 [ 0 ] < 0 ) : r e turn ( v2 [0]%phiN )e l s e : r e turn v2 [ 0 ]

# Funkci ja za k r e i r a n j e datotekede f napraviDatoteku ( datoteka , s ad r za j ) :

t ry :# gene r i r a datotekufp = open ( datoteka , ”w”)fp . wr i t e ( s t r ( s ad r za j ) )fp . c l o s e ( )

except :p r i n t ”Greska : Ne mogu k r e i r a t i datoteku . ”

# Funkci ja za g en e r i r a n j e para j avn i / t a j n i k l j u c . Za N uzimamo# produkt dva pros ta bro ja c i j u du l j i nu odred ju j e k o r i s n i k . Za e ,# kor i s t imo 17 , umjerenu v r i j e dno s t za dovo l jno ve l i ku s i gu rno s t i# lako racunanje . Za d kor i s t imo p r o s i r e n i Euklidov a lgor i tam za# na l a z en j e inve r za e modulo Nde f naprav iKl juc ( key len ) :

# uzima s t r i n g k o j i dodaje na pocetak imena datoteka sa k l jucev imav l a s t i t o Ime = raw input (”\nIme ko r i s n i k a : ”)j avn iK l juc = v l a s t i t o Ime + ” j a vn i . txt ”t a j n iK l j u c = v l a s t i t o Ime + ” t a j n i . txt ”# v r i j e dno s t eksponentae = 17pr in t ”Molim p r i c e k a j t e . . . ”# gene r i r a j avn i k l j u c : ( e , N) gdje j e N produkt dva v e l i k a pros ta bro jafp = open ( javn iKl juc , ”w”)p = v e l i k i P r o s t ( key len /2)

33

Page 38: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

q = v e l i k i P r o s t ( key len /2)fp . wr i t e ( s t r ( e ) )fp . wr i t e (”\n”)fp . wr i t e ( s t r (p∗q ) )fp . wr i t e (”\n”)fp . c l o s e ( )# gene r i r a t a j n i k l j u c : ( e , N) gdje j e d mu l t i p l i k a t i v n i i nve r z od# e modulo Nfp = open ( ta jn iK l juc , ”w”)phiN = (p − 1)∗ ( q − 1)d = inve r z ( e , phiN )fp . wr i t e ( s t r (d ) )fp . wr i t e (”\n”)fp . wr i t e ( s t r (p∗q ) )fp . wr i t e (”\n”)fp . c l o s e ( )#i s p i s k l j u c evaos . system (” c l e a r ”)p r i n t ” Javni k l j u c spreml jen u datoteku ” , v l a s t i t o Ime , ” j a vn i . txt :\ne = ” , e ,”\n n = ” ,p∗q ,”\n”pr in t ”Tajni k l j u c spreml jen u datoteku ” , v l a s t i t o Ime , ” t a j n i . txt :\nd = ” ,d ,”\n n = ” ,p∗q ,”\n”

# Funkci ja za pre tva ran j e s t r i n g a u dugacki c i j e l i b ro j . Korist imo 8# b i ta po znaku pa long i n t e g e r ne zauzima v i s e mjesta od s t r i n g a k o j i# p r ed s t av l j a ASCII t ex tde f s t r i n g 2 l ong ( s ) :

m = 0x = len ( s ) − 1# p e t l j a unatrag kroz s t r i ng , za svak i znak i njegovu ASCII v r i j e dno s t# pomnozenu sa njegovom poz i c i j om u s t r i ngu vraca re turn v r i j e dno s tf o r char in s :

m += (256∗∗x)∗ ord ( char )x −= 1

return m

# Funkci ja za pre tva ran j e dugackog bro ja u s t r i n g .de f l o ng2 s t r i n g (m) :

t ry :m = ato l (m)

except :pass

# pr ivremeni spremnik za znakove porukel e t t e r s = [ ]# s t r i n g k o j i ce s ad r zava t i r e turn v r i j e dno s tc l e a r t e x t = ””

34

Page 39: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

# t r e t i r a long i n t e g e r kao s bazom−256 i kroz p e t l j u pretvara svaku# ”znamenku” s bazom 265 u znaki = in t ( l og (m, 256))whi l e ( i >= 0 ) :

c = m / (256∗∗ i )l e t t e r s . append ( chr ( c ) )m −= c ∗(256∗∗ i )i −=1

# pretvara l i s t u znakova u jedan s t r i n gf o r l in l e t t e r s :

c l e a r t e x t += lre turn c l e a r t e x t

# Funkci ja za enk r i p c i j u znakovnog s t r i n g a u numericki s i f r a t .# POZNATA GRESKA: kada j e poruka preduga , t j . duza od v r i j e d n o s t i N, ova# funk c i j a ne moze s i f r i r a t i poruku .# MOGUC ISPRAVAK: u ovom s luca ju , r a z b i j a n j e poruke u blokove f i k s n e# v e l i c i n e i s i f r i r a n j e svakog bloka posebnode f e n k r i p t i r a j (m) :

# spremnik za ime datoteke k l j u ca za enk r i p c i j ug l oba l k e y f i l e# konve r t i r a znakovni s t r i n g u long i n t e g e rmessage = s t r i n g 2 l ong (m)# pokusava u z e t i podatke k l j u ca za s i f r i r a n j e i z datotekefp = open ( k e y f i l e , ” r ”)e = in t ( fp . r e ad l i n e ( ) )N = in t ( fp . r e ad l i n e ( ) )fp . c l o s e ( )# odusta j e ako j e poruka predugai f ( message > N) :

os . system (” c l e a r ”)p r i n t ”\nGreska : Poruka j e preduga .\n”main ( )

# s i f r i r a poruku modularnim potenc i ranjem k o r i s t e c i v r i j e d n o s t i# i z e nk r i p c i j s k o g k l j u camessage = pow(message , e , N)re turn message

# d e s i f i r i r a numericki s i f r a t i pretvara ga u teks tua lnu porukude f d e k r i p t i r a j (m) :

# spremnik za ime datoteke k l j u ca za d e s i f r i r a n j eg l oba l k e y f i l e# pokusava u z e t i podatke k l j u ca za d e s i f r i r a n j e i z datotekefp = open ( k e y f i l e , ” r ”)d = in t ( fp . r e ad l i n e ( ) )N = in t ( fp . r e ad l i n e ( ) )fp . c l o s e ( )

35

Page 40: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

# dek r i p t i r a poruku k o r i s t e c i modularno po t en c i r an j emessage = pow( i n t (m) , d , N)re turn l ong2 s t r i n g ( message )

# Glavna f unk c i j a : uzima odabranu opc i j u ko r i s n i k a i i z v od i RSA# funk c i j e ov i sno o opcijamade f main ( ) :

g l oba l i n f i l e , o u t f i l e , k e y f i l e , key len# uzima op c i j e komandne l i n i j euzmiOpcije ( )i f i n f i l e :

t ry :m = open ( i n f i l e , ” r ”)message = m. r e a d l i n e s ( )m. c l o s e ( )message = j o i n ( message )

except :message=raw input (”\ nDatoteka ne p o s t o j i .\ nUnesite o tvo r en it e k s t za spremanje u datoteku : ”)p r i n t ”Datoteka ” , i n f i l e , ” j e k r e i r ana . ”napraviDatoteku ( i n f i l e , message )

kodirano = e n k r i p t i r a j ( message )p r i n t ” S i f r a t :\n” , kodirano# uzima ime datoteke u koju ce se sp r em i t i k r i p t i r a n i t e k s tkodiranadatoteka = raw input (”\nIme datoteke za spremanjek r i p t i r anog t ek s ta : ”)# poziv f unk c i j e koja g en e r i r a datotekunapraviDatoteku ( kodiranadatoteka , kodirano )i n f i l e = None #r e s e t v a r i j a b l eos . system (” c l e a r ”)main ( )

e l i f o u t f i l e :t ry :

c = open ( o u t f i l e , ” r ”)c i ph e r t e x t = c . r e a d l i n e s ( )c . c l o s e ( )c i ph e r t e x t = j o i n ( c i ph e r t e x t )os . system (” c l e a r ”)p r i n t ” D e s i f r i r a n i t e k s t :\n” , d e k r i p t i r a j ( c i ph e r t e x t )

except :p r i n t ”Greska : Ne mogu c i t a t i datoteku . ”

o u t f i l e = None #r e s e t v a r i j a b l emain ( )

e l i f key len :t ry :

naprav iKl juc ( i n t ( key len ) )except ValueError :# Izuz imanje unosa k o j i n i j e b ro j

36

Page 41: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

os . system (” c l e a r ”)p r i n t ”Greska : Unos mora b i t i b ro j ”

key len = None #r e s e t v a r i j a b l emain ( )

i f name == ” main ” :os . system (” c l e a r ”)main ( )

37

Page 42: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Literatura

[1] A. Dujella, M.Maretic, Kriptografija, Element, Zagreb, 2007.

[2] A. Menezes, P. van Oorschot, S. Vanstone, Handbook of Applied Cryptography,CRC Press, Boca Raton, 1996.

[3] N. Koblitz, A Course in Number Theory and Cryptography, Springer-Verlag, NewYork, 1994.

[4] B. Ibrahimpasic, RSA kriptosustav, Osjecki matematicki list vol. 5 br. 2, SveucilisteJ.J. Strossmayera u Osijeku, Odjel za matematiku, 2005.

[5] A. Dujella, Uvod u teoriju brojeva (skripta), PMF-Matematicki odjel, Sveuciliste uZagrebu, http://web.math.hr/∼duje/utb/utblink.pdf

[6] http://os2.zemris.fer.hr/ostalo/2002 ahel/

[7] http://web.zpr.fer.hr/ergonomija/2005/galinovic/PovijestKriptografije.pdf

[8] http://fly.srk.fer.hr/∼zox/diplomski/DodD Kriptografija.html

[9] http://rsa.googlecode.com/svn-history/r55/rsa/trunk/docs/rsa.pdf

[10] http://brandon.sternefamily.net/files/pyrsa.txt

38

Page 43: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Sazetak

Kriptografija, ciji je zadatak omoguciti sigurnu komunikaciju preko nesigurnog komunikaci-jskog kanala, te kriptoanaliza, ciji zadatak je razbijanje sifri, objedinjeni su u znanosti naz-vanoj kriptologija. Kriptografski algoritam zajedno sa kljucem i protokolima, koji omogucujunjegov rad, cini kriptosustav. Prema tipu operacija koristenih pri sifriranju kriptosustavi sedijele na supstitucijske i transpozicijske sifre, ciji pocetci sezu jos u doba Julija Cezara, asve do 19. stoljeca kriptografija je bila znanost koju su razumjeli samo vladini sluzbenicii vojska, koji su poruke kriptirali raznim mehanickim napravama za kriptiranje. Premanacinu obrade otvorenog teksta kriptosustavi se dijele na blokovne i protocne sifre, a prematajnosti kljuceva na simetricne i asimetricne kriptosustave, ciji je razvoj zapoceo u dru-goj polovici 20. stoljeca. RSA je asimetricni kriptosustav zasnovan na teskoci faktorizacijevelikih prirodnih brojeva na produkt dvaju prostih brojeva koji za dovoljno duge kljuceve za-htijeva znacajne racunalne resurse, sto omogucuje javno objavljivanje kljuceva za sifriranje.Sifriranje se provodi modularnim potenciranjem, kljucevi se generiraju slucajnim odabiromi Miller-Rabinovim algoritmom testiraju na prostost, a inverzni element za mnozenje racunase prosirenim Euklidovim algoritmom. Razvojem tehnologije, a posebno interneta, naraslaje i potreba za sigurnosti prijenosa podataka pa se u novije vrijeme razvijaju razni hibridnikriptosustavi. U njima se poruke sifriraju simetricnim kriptosustvima, a RSA ima vaznuulogu kao siguran kriptosustav za razmjenu kljuceva.

39

Page 44: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Summary

ASYMMETRIC CRYPTOGRAPHIC RSA ALGORITHM

Cryptography, whose task is to enable secure communications via an insecure communi-cation channel, and cryptanalysis, whose task is code-breaking, are combined in a sciencecalled cryptology. A cryptographic algorithm together with the key and protocols that allowits work make a cryptosystem. According to the type of operations used in coding, cryp-tosystems are divided into the substitution and transposition ciphers, whose origins dateback to the time of Julius Caesar, and until the 19th century, cryptography was the sci-ence understood only by government officials and the military, who encoded messages withvarious mechanical encryption devices. According to the way of processing an open text,cryptosystems are divided into block and stream ciphers, and according to the key secrecyinto symmetric and asymmetric cryptosystems, whose development began in the second halfof the 20th century. RSA is an asymmetric cryptosystem based on the difficulty of fac-torization of large integers into the product of two prime numbers, which for a sufficientlylong keys requires considerable computational resources, which allows encryption keys to bepublished. Encryption is done with modular exponentiation, keys are generated randomlyand tested for primality with the Miller-Rabin algorithm while the multiplicative inverse iscalculated with the Euclid’s extended algorithm. With the development of technology, andespecially the Internet, the need for security of data transmission has grown, and varioushybrid cryptosystems have been developed in the most recent time. In these cryptosystemsmessages are encrypted with symmetric cryptosystems, while the RSA has a big role as asecure cryptosystem used to exchange keys.

40

Page 45: Sveuˇciliˇste J. J. Strossmayera u Osijeku Odjel za matematikumdjumic/uploads/diplomski/JAK19.pdf · napisan u Python programskom jeziku. 1. 1 Kriptogra ja 1.1 Razvoj kriptogra

Zivotopis

Roden sam u Osijeku 24. lipnja 1981. godine, s prebivalistem u Valpovu. Osnovnu skoluMatije Petra Katancica i osnovnu glazbenu skolu zavrsio sam u Valpovu 1995. godine. Potomsam zavrsio srednju Glazbenu skolu Franje Kuhaca u Osijeku, te Opcu gimnaziju u Valpovu1999. godine. Buduci da sam zbog odlicnog uspjeha osloboden mature, 2002. godineizravno se upisujem na smjer matematika-informatika Odjela za matematiku Sveucilista J.J. Stossmayera u Osijeku. Od rujna 2006. godine zaposlen sam u Osnovnoj skoli MatijePetra Katancica u Valpovu.

41