Opgaveformulering studieretningsprojekt (SRP) 2015

Relaterede dokumenter
Af Marc Skov Madsen PhD-studerende Aarhus Universitet

Matematikken bag kryptering og signering NemID RSA Foredrag i UNF

Note omkring RSA kryptering. Gert Læssøe Mikkelsen Datalogisk institut Aarhus Universitet

Kryptologi og RSA. Jonas Lindstrøm Jensen

Note omkring RSA kryptering. Gert Læssøe Mikkelsen Datalogisk institut Aarhus Universitet

Kryptologi 101 (og lidt om PGP)

Konfidentialitet og kryptografi 31. januar, Jakob I. Pagter

Opgave 1 Regning med rest

Undersøgende aktivitet om primtal. Af Petur Birgir Petersen

Kryptering kan vinde over kvante-computere

Vi har valgt at analysere vores gruppe ud fra belbins 9 grupperoller, vi har følgende roller

HTX, RTG. Rumlige Figurer. Matematik og programmering

Hvad er KRYPTERING? Metoder Der findes to forskellige krypteringsmetoder: Symmetrisk og asymmetrisk (offentlig-nøgle) kryptering.

KRYPTOLOGI ( Litt. Peter Landrock & Knud Nissen : Kryptologi)

Camp om Kryptering. Datasikkerhed, RSA kryptering og faktorisering. Rasmus Lauritsen. August 27,

Kryptografi Anvendt Matematik

Fredag 12. januar David Pisinger

Matematikken bag kryptering og signering RSA

Affine - et krypteringssystem

Fortroligt dokument. Matematisk projekt

Projekt 7.9 Euklids algoritme, primtal og primiske tal

Matematik A og Informationsteknologi B

RSA Kryptosystemet. Kryptologi ved Datalogisk Institut, Aarhus Universitet

Eulers sætning Matematikken bag kryptering og signering v.hj.a. RSA Et offentlig nøgle krypteringssytem

Matematiske metoder - Opgavesæt

Pointen med Differentiation

Introduktion til Kryptologi. Mikkel Kamstrup Erlandsen

Køreplan Matematik 1 - FORÅR 2005

Introduktion til differentialregning 1. Jens Siegstad og Annegrethe Bak

6. december. Motivation. Internettet: Login til DIKU (med password) Handel med dankort Fortrolig besked Digital signatur

Implikationer og Negationer

Kommunikationssikkerhed til brugere bibliotek.dk projekt

Hvordan kryptering af chat, mail og i cloud services og social networks virker

Matematikken bag kryptering og signering RSA

Roskilde Universitetscenter, Datalogisk Afdeling Kryptering. Niels Christian Juul. N&P 11: 2001 April 18th

Primtalsfaktorisering - nogle nye resultater og anvendelser Regionalmøde Haderslev, 19. november 2003

Primtalsfaktorisering - nogle nye resultater og anvendelser Regionalmøde Haderslev, 19. november 2003

Integer Factorization

RSA-kryptosystemet. RSA-kryptosystemet Erik Vestergaard

Michael Jokil

Eksponentielle sammenhænge

Pointen med Funktioner

Her er et spørgsmål, du måske aldrig har overvejet: kan man finde to trekanter med samme areal?

Eksponentielle modeller

Læringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4

π er irrationel Frank Nasser 10. december 2011

fortsætte høj retning mellem mindre over større

Polynomiumsbrøker og asymptoter

Klasse 1.4 Michael Jokil

Fraktaler Mandelbrots Mængde

t a l e n t c a m p d k Talteori Anne Ryelund Anders Friis 16. juli 2014 Slide 1/36

Polynomier. Indhold. Georg Mohr-Konkurrencen. 1 Polynomier 2. 2 Polynomiumsdivision 4. 3 Algebraens fundamentalsætning og rødder 6

Mini SRP. Afkøling. Klasse 2.4. Navn: Jacob Pihlkjær Hjortshøj, Jonatan Geysner Hvidberg og Kevin Høst Husted

Baggrundsnote om logiske operatorer

Et udtryk på formena n kaldes en potens med grundtal a og eksponent n. Vi vil kun betragte potenser hvor grundtallet er positivt, altså a>0.

Fraktaler. Mandelbrots Mængde. Foredragsnoter. Af Jonas Lindstrøm Jensen. Institut For Matematiske Fag Århus Universitet

Løsning af simple Ligninger

Eksponentielle modeller

Funktionsterminologi

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...

P vs. NP. Niels Grønbæk Matematisk Institut Københavns Universitet 3. feb. 2012

Algebra - Teori og problemløsning

3 Algebra. Faglige mål. Variable og brøker. Den distributive lov. Potenser og rødder

Funktionsterminologi

Sikre Beregninger. Kryptologi ved Datalogisk Institut, Aarhus Universitet

Matematisk modellering og numeriske metoder. Lektion 16

Kapitel 3 Betinget logik i C#

sætning: Hvis a og b er heltal da findes heltal s og t så gcd(a, b) = sa + tb.

TALTEORI Wilsons sætning og Euler-Fermats sætning.

Afstande, skæringer og vinkler i rummet

Matematiske metoder - Opgaver

Fortløbende summer NMCC Danmark Muldbjergskolen 8.P

Variable. 1 a a a 5 2a 3a + 6 a + 5 3a a 2 a 2 a ,5 1,5 4 7,5 4 0

Vejledning til Projektopgave. Akademiuddannelsen i projektstyring

Projektopgave Rumlige figurer. Matematik & Programmering Lars Thomsen Klasse 3.4 HTX Roskilde Vejledere: Jørn & Karl 05/

Elementær Matematik. Mængder og udsagn

Afstande, skæringer og vinkler i rummet

Dokumentation af programmering i Python 2.75

IT opgave. Informationsteknologi B. Vejleder: Karl. Navn: Devran Kücükyildiz. Klasse: 2,4

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Forslag til løsning af Opgaver til afsnittet om de naturlige tal (side 80)

RSA-KRYPTERING. Studieretningsprojekt. Blerim Cazimi. Frederiksberg Tekniske Gymnasium. Matematik A. Vejleder: Jonas Kromann Olden

DDD Runde 2, 2015 Facitliste

Maple. Skærmbilledet. Vi starter med at se lidt nærmere på opstartsbilledet i Maple. Værktøjslinje til indtastningsområdet. Menulinje.

Programmering C RTG

Noter til Perspektiver i Matematikken

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Euklids algoritme og kædebrøker

Andengradsligninger. Frank Nasser. 12. april 2011

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

Moderne kryptografi. Olav Geil Institut for Matematiske Fag Aalborg Universitet. Elektronik og IT-Gruppen 24. april 2008

Emil, Nicklas, Jeppe, Robbin Projekt afkodning

Tal. Vi mener, vi kender og kan bruge følgende talmængder: N : de positive hele tal, Z : de hele tal, Q: de rationale tal.

Primtal - hvor mange, hvordan og hvorfor?

MATEMATIK 7. KLASSE. Web 3

Februar Vejledning til Danske Vandværkers Sikker mail-løsning

Andengradsligninger. Frank Nasser. 11. juli 2011

Transkript:

Opgaveformulering studieretningsprojekt (SRP) 2015 Navn: Emil Sommer Desler Klasse: 2013.4 Fag: Matematik A Fag: Informationsteknologi B Vejleder: Signe Koch Hviid E-mail: skh@rts.dk Vejleder: Karl G Bjarnason E-mail: gkb@rts.dk Opgaveformulering: Primtal og kryptografi Redegør kort for begrebet kryptering. Beskriv hvordan public key kryptering virker og forklar forskellen på at anvende symmetriske og asymmetriske nøgler. Redegør kort for begrebet primtal og talteoriens hovedsætning. Analyser primtallenes særlige egenskaber, forklar primtalsfaktorisering og begrund hvorfor primtal anvendes i forbindelse med kryptering. Redegør for matematiske metoder til at bestemme primtal, eksempelvis algoritmen Sieve of Eratosthenes. Diskuter metodernes begrænsninger. Lav et program til at afgøre om et tal er et primtal. Bestem ved hjælp af programmet et antal primtal med et voksende antal bit (f.eks. 4, 8, 12, 16, 20,...) og lav en graf over eksekveringstiden. Dokumenter udviklingen af programmet og vis eksempler på eksekvering. Estimer hvor lang tid det vil tage for programmet at afgøre om et tal med 1024 bit er et primtal og diskuter mulige forbedringer af programmet. Opgaven skal have et engelsk resumé på 15-20 linjer og forventes normalt at have et omfang på ca. 8-14 normalsider á 2.500 anslag incl. mellemrum og ekskl. eventuelle bilag og litteraturliste. Jeg bekræfter med min underskrift, at opgavebesvarelsen er udarbejdet af mig. Jeg har ikke brugt tidligere bedømt arbejde uden henvisning hertil. Elevens underskrift: Studieretningsprojektet skal afleveres den 22. december 2015 mellem kl. 10.00 og kl. 11.30 i 2 underskrevne eksemplarer og elektronisk i Lectio. Denne side skal indsættes som forside i opgavebesvarelsen

ABSTRACT Encryption is an integrated part of the way we are using digital media, such as computers and telephones. Communication through such digital media are often encrypted in one way or another. The encryptions are crucial to ensure the privacy and security of personal information, involving banking information, e-mails etc. This paper is focusing on the encryption standard RSA-encryption and will be covering the main concept of the system. In addition, basic mathematical prerequisites will be examined to get a better understanding of the systems complexity. Based on a method described in the paper a program is developed to illustrate how well the RSA encryption works. This is shown by creating a model based on the program, which is able to estimation how long the program would take to solve a part of the RSA encryption. The model is used on a relevant RSA encryption called RSA-1024. This means the number uses 1024 bits in the binary numeral system; the number is 309 digits in the decimal numeral system. No one has solved the RSA-1024 yet. By using the model, an estimated time of 2,18477 10 135 years has been set to solve the encryption. For comparison the universe is 13,75 10 9 years old. Even though the model was created from a program, which is not using the fastest algorithm made, and a computer, which is not the fastest either. It should be save to conclude that the RSA encryption is a strong encryption and takes an inhumanly amount time to solve and break. 2

INDHOLDSFORTEGNELSE Indledning...4 Begrebet kryptering...4 Symmetriske kryptosystemer...5 Asymmetriske kryptosystemer...5 Offentlige nøgler...6 Primtal...6 Primtallenes egenskaber...6 Primtalsfaktorisering...6 Primtalsfaktoriseringens tidsforbrug...7 Kryptosystemet RSA...7 Bestemmelse af primtal...8 Sieve of Eratosthenes...8 Rabin-Millers probabilistiske primtalstest...9 Delkonklusion...9 Program (Sieve of Eratosthenes)...10 Krav til programmet...10 Overvejelser omkring programmet...10 Forklaring af algoritme...11 Test af funktionalitet...13 Test af tilfældige sammensatte...13 Test af tilfældige primtal...14 Test af naturlige tal for n < 2...15 Eksekveringstid...15 Estimering...19 Forbedringer...20 Delkonklusion...21 Perspektivering...22 Kvantecomputer...22 The Dark Web...22 Konklusion...23 Litteraturliste...24 Bilag...25 Bilag 1 - Kildekode for det oprindelige program...25 Bilag 2 - Kildekode til det forbedrede program...26 Bilag 3 - Kildekode til programmet fra internettet...26 Bilag 4 - Kildekode for programmet om binære tal...27 3

INDLEDNING Kryptografi er en integreret del af den måde vi bruger digitale medier, som computere eller telefoner. Kommunikerer vi gennem et digitalt medie, er kommunikationen højst sandsynligt krypteret på en eller anden vis. Krypteringer laves for at sikre at kommunikation er hemmelig for uvedkommende. Tryghed og privatliv er hvad der driver krypteringens udvikling. Sikkerheden af oplysninger såsom bankoplysninger, e- mails og pengetransaktioner bliver beskyttet af krypteringer. Forud for krypteringer lægger megen matematisk teori og matematiske systemer, som er udviklet specielt, til at gøre kommunikation ulæseligt for en tredjepart. Kryptering er altså en vigtig del, for at holde følsomme oplysninger hemmelige og private, når vi kommunikerer gennem digitale medier. Der er gennem tiden opfundet mange krypteringsmetoder, og det er kun få af dem, som stadig bruges i dag. Et eksempel på et kryptosystem er en RSA-kryptering. Denne form for kryptering, er en af de krypteringsstandarder vi bruger i dag. Matematikken bag ved RSA-krypteringen er fascinerende simpel og på samme tid er den ikke til at bryde. Kryptosystemet RSA tager udgangspunkt i mysterierne, som omhandler primtal og de såkaldte primtalsfaktoreringer. Denne opgave vil redegøre for talteorien som RSA krypteringen bygger på. Fremtiden for RSA kryptering vil blive overvejet, samt negative konsekvenser som følge af krypteringens mulige. Opgaven fokuserer på RSA krypteringen og primtallenes egenskaber, som danner grundlag for kryptosystemet. Der vil redegøres for princippet, som gør kryptosystemer RSA så anvendeligt, at vi bruger det som en krypteringsstandard i mange sammenhæng. Hovedkilden er bogen Matematiske mysterier s afsnit, der omhandler Primtalsmysterier. Bogen er udgivet af Aarhus Universitetsforlag og beskæftiger sig med alle tænkelige aspekter om primtal og deres funktion i RSA kryptosystemet. Hovedkonceptet i en RSA kryptering vil diskuteres, og der vil i den forbindelse udarbejdes et program, som illustrerer hvor effektiv kryptosystemet er. Dette vil illustreres ved at opstille en model med udgangspunkt i hvor lang tid programmet er om at løse en del af RSA krypteringen. Modellen bruge flere tests af programmet til at opsamle empirisk data og for derefter at opstille en model, som reflekterer resultaterne af forsøgene. BEGREBET KRYPTERING De første krypteringsmetoder stammer fra Julius Cæsars (100 f.kr. 44 f.kr) tid, hvor krypteringsmetoden bestod af, at man forskød bogstaverne langs alfabetet med en aftalt konstant, det kunne være a bliver til d og b til e osv., dette kryptosystem kaldes Caesar-substitution. 1 Som man nok kan gætte sig til var dette system ikke så svært at bryde og når først man kendte forskydningen, kunne enhver oversætte de krypterede beskeder. Man har derfor siden måtte forbedre kryptosystemerne og opfinde nye. Begrebet kryptering bruger man om hemmeliggørelse og sikring af information. Dette gøres ved at afsenderen koder eller slører den information han ønsker at sende, hvilket gør den ulæselig for en tredjepart. Denne kodning gøres ud fra en bestemt algoritme, også kaldet et kryptosystem. Modtageren af teksten bruger så det samme kryptosystem til at afkode beskeden. Processen, når man koder information hedder at kryptere, mens den modsatrettede proces, hvor man afkoder informationen kaldes at dekryptere. Der er en klartekst, som er den oprindelig besked, som ønskes sendt, før den bliver krypteret. 1 http://math.au.dk/fileadmin/files/matlaererdag/2005/kryptologi.pdf side 4 4

Den krypterede besked kaldes en kryptotekst eller chiffertekst, og til at afkode beskeden har man en nøgle, som er den dekrypteringsalgoritme man bruger for at gå fra chiffertekst tilbage til klartekst. 2 Evnen til at holde kommunikation hemmelig for uvedkommende har altid været vigtig, og kryptering er i stor stil blevet brugt militært, for at kunne kommunikere internt, men uden det kunne forstås af andre. I vores moderne verden bliver kryptering brugt rigtig meget både i civile-og militære sammenhæng. Alle websites, hvor man kan logge ind og sende/modtage beskeder eller data i nogen form har en krypteret forbindelse fx Google, Facebook, Microsoft etc., der sikrer at dine data er sikre og ulæselige for andre end de/den tiltænkte. Idéen bag kryptering kan forklares ved at bruge en anekdote, hvor du har en postkasse. Postkassen repræsentere selve krypteringen. Og for at kunne læse beskederne i postkassen, kræver det, at du har nøglen til postkassen. Antagelsen, om postkassen, er dog kun den halve historie, for der findes faktisk to forskellige kryptosystemer. Der er det symmetriske kryptosystem og det asymmetriske kryptosystem. Symmetriske kryptosystemer 3 Symmetriske algoritmer anvender samme nøgle til kryptering og dekryptering. Det er derfor en nødvendighed, at den fælles nøgle kun er kendt af afsender og modtager. Skal man forblive i anekdoten om postkassen, vil et symmetrisk kryptosystem svare til, at postkassen er aflåst, og der ikke er nogen brevsprække. Den eneste mulighed for at efterlade eller læse en besked i postkassen er ved at have nøglen dertil. Til symmetrisk kryptering ligger Kerckhoffs princip, som siger, et kryptosystem skal være sikkert, selv når alle kender alt omkring systemet, undtaget nøglen. Princippet tager udgangspunkt i, at andre kender til systemet, og det er derfor et krav, at systemet ikke må være brydeligt på trods af den viden, men altså kun kan brydes ved at kende nøglen. Svagheden i de symmetriske kryptosystemer ligger i udvekslingen af nøglen. Hvis nøglen blev opfanget af en tredjepart under udvekslingen ville vedkommende have samme mulighed for at afkode alle beskeder. Derfor var det et stort skridt da asymmetrisk kryptering blev opfundet, da det kunne løse dette problem. Asymmetriske kryptosystemer Det asymmetriske kryptosystem blev opfundet efter det symmetriske. Det asymmetriske system løste den praktiske svaghed om at nøglerne skulle udveksles i al fortrolighed og holdes hemmelig for andre. Ved at bruge det asymmetriske system er det muligt at kommunikere hemmeligt uden på forhånd at have udvekslet en fælles hemmelig nøgle. Metode er bygget op omkring et nøglepar, frem for en fælles nøgle. Nøgleparret består af en offentlig nøgle, som kan udveksles i fuldt offentlighed og en privat nøgle, som ikke udveksles. De to nøgler har asymmetrisk funktion, heraf navnet. Hvis der låses med den ene nøgle er det kun muligt at låse op med den modsvarende nøgle og det samme er gældende modsat. Det asymmetriske system kan også forklares simpelt i samme anekdote. Forestiller man sig nu en postkasse, men denne gang med en brevsprække, som er tilgængelig for alle. Den offentlige nøgle vil i postkassens tilfælde være den adresse den står ved. Alle, der kender adressen, har nu mulighed for at efterlade en besked i postkassen, men kun personen, som har nøglen kan åbne postkassen og læse beskederne. 4 2 http://math.au.dk/fileadmin/files/matlaererdag/2005/kryptologi.pdf side 2 3 http://math.au.dk/fileadmin/files/matlaererdag/2005/kryptologi.pdf side 18 4 http://stackoverflow.com/questions/273396/aes-encryption-what-are-public-and-private-keys 5

Den mest kendte og brugte asymmetriske kryptering er offentlig-nøgle-kryptosystemet RSA. Kryptosystemet RSA blev udviklet 1978 af Ronald Linn Rivest (1947- ), Adi Shamir (1952- ) og Leonhard Max Adleman (1945- ), som senere stiftede firmaet RSA Data Security. RSA krypteringen er i dag den mest kendte krypteringsstandard. Det benyttes blandt andet af krypteret web-browsing i den finansielle verden fx NetBank og NemID og til at kryptere e-mails fx googles gmail og microsofts hotmail. OFFENTLIGE NØGLER 5 Hemmelig kommunikation gøres ved, at afsender krypterer klarteksten med den offentlige nøgle i modtagerens nøglepar. Modtageren kan så dekryptere chifferteksten med sin modsvarende private nøgle. Modsat kan man lave en digital underskrift, ved at låse et dokument med sin private nøgle. Enhver, som kender den offentlige, kan låse dokumentet op og på den måde være sikker på, at afsenderen er i besiddelse af den modsvarende private nøgle og altså derfor må være den, som han udgiver sig for. Dette har en uvurderlig funktion i vores samfund, hvor kontrakter og aftaler underskrives over lange afstande og uden parterne nogensinde mødes. PRIMTAL Et primtal er et naturligt tal, altså et helt tal (1, 2, 3 ), større end 1, som ikke kan deles med andre naturlige tal end tallet selv og tallet 1. 6 Til primtal er der knyttet mange matematiske overvejelser, samt matematisk teori. I dette afsnit vil primtallenes egenskaber analyseres i forhold til krypteringsformål og der vil på baggrund af teorien bag primtalsfaktorisering og bestemmelse af primtal begrundes hvorfor primtallene egner sig til sikker kommunikation. Primtallenes egenskaber Primtal og deres egenskaber har igennem århundrede drevet teoretikere til vanvid. På den ene side er de utrolig simple i deres definition, mens de på den anden side er uhåndgribelig komplekse i detaljen. De primtalsegenskaber, der gør dem brugbare indenfor for kryptografi, er hvad der sker når man bruger store primtalsfaktoriseringer til at kryptere en klartekst. PRIMTALSFAKTORISERING 7 Talteori er grundlæggende studiet af de naturlige tal. Talteoriens hovedsætning siger, Ethvert naturligt tal n, skarpt større end 1, kan på én og kun én måde faktoriseres n = a 1 p 1 p 1 a 2 p 2 p 2 a k p k p k (1) Hvor a k er positive hele tal, og p 1 < p 2 < < p k er primtal. Mere konkret vil det sige, ikke primtal er sammensat af primtalsfaktoriseringer. 5 http://math.au.dk/fileadmin/files/matlaererdag/2005/kryptologi.pdf side 22 6 Matematiske mysterier - Primtalsmysterier s. 59 7 Matematiske mysterier - Primtalsmysterier s. 60 6

Modstridsbevis for eksistensen af primfaktorer Det ønskes bevist, om det er sandt eller falsk at, der kun findes én måde, at faktorisere på. For at bevise ovenstående udsagn antages modsætningsvist, at der findes naturlige tal, der ikke har en primtalsfaktorisering. Lad n 0 være det mindste af sådanne et tal. Eftersom tallet ikke har en primtalsfaktorisering, kan tallet ikke være et primtal, da det så ville have sig selv som faktorisering, altså n 0 = p, hvilket det ifølge antagelsen ikke har. Tallet n 0 må derfor være et sammensat tal n 0 = n 1 n 2 med 1 < n 1 < n 0 og 1 < n 2 < n 0, uligheden beskriver forholdet mellem n 0 og dens faktorer, hvor n 0 er større end 1 og n 0 er et produkt af to faktorer må den naturligvis være større end begge disse faktorer, som beskrevet af uligheden. Pointen er så nu, at hvis n 0 er det mindste naturlige tal, der ikke har en primtalsfaktorisering, må de mindre tal n 1 og n 2 hver have en primtalsfaktorisering. Samler vi primtalsfaktoriseringerne for n 1 og n 2 til et samlet produkt får vi n 0 = n 1 n 2, at n 0 altså har primtalsfaktorisering, hvilket er i modstrid til vores første antagelse. Teorien om, at der findes naturlige tal uden en primtalsfaktorisering må derfor være falsk, og udsagnet fra tidligere er dermed bevist. PRIMTALSFAKTORISERINGENS TIDSFORBRUG Man bemærker, at der i beviset for eksistensen af primfaktorer ikke gives nogen egentlig metode til at bestemme en primtalsfaktorisering. Og det er fordi der ikke findes nogen entydig metode til at finde primtalsfaktoriseringer, og man må altså prøve sig frem nede fra. Vi kan altså, med udgangspunkt, i et tal på 200 cifre, dvs. m ~ 10 200, prøve at danne en idé om hvor lang tid det vil tage at faktorisere et tal på den størrelse. Som sagt vil det være oplagt at forsøge sig nede fra og op, og denne teori kan fungere meget godt på mindre værdier af m, men for store tal er det en nærmest endeløs proces. Antager vi, at det er muligt at afgøre, om et helt tal er divisor i m i løbet af 1 millionte del af et sekund (10-6 sek.). Valideringsprocessen for at kunne bestemme en eventuel divisor vil for et tal så stort vil tage bogstaveligtalt umenneskelig lang tid. 1 10 100 10 6 = 10 94 3,2 60 60 24 365 1086 år (2) Til at sammenligne er universets alder kun 13,75*10 9 år. 8 KRYPTOSYSTEMET RSA 9 RSA er som tidligere nævnt et asymmetrisk kryptosystem, hvor der findes en offentlig nøgle og en hemmelig nøgle. Matematikken i RSA er kompliceret, men udgangspunktet i RSA algoritmen er at der ikke er nogen effektiv måde at primtalsfaktorisere store naturlige tal, som det fremgår af (2). For at forstå besværet i at løse en RSA kryptering uden at kende den hemmelige nøgle, skal man først introduceres til Eulers sætning. Eulers sætning lyder a φ(m) 1 mod m (3) Eulers sætning består i at løse en kongruens (bliver ikke beskrevet yderligere). Denne kongruens løses ved at beregne φ(m) = φ(p q) = (p 1) (q 1), hvor værdien af m er bestemt, da man konstruerede nøglepar. Nøglepar bestemmes ved at vælge to store forskellige primtal p og q herefter beregnes m = pq og φ(m). Vælg et k, hvis største fælles divisor med φ(m) er 1 (teorien bag dette bliver ikke beskrevet yderligere). 8 Matematiske mysterier - Primtalsmysterier s. 62 9 Matematiske mysterier - Primtalsmysterier s. 72-74 7

Man får da, Den offentlige nøgle: Den private nøgle: m, k φ(m) Vil man forsøge at bryde krypteringen vil man skulle beregne φ(m) og uden at have kendskab til primtalsfaktoriseringerne p og q er det ved store nok primtal i praksis ikke muligt at bestemme den private nøgle, φ(m), her henvises igen til eksemplet (1) Bestemmelse af primtal Der findes ikke nogen generel formel til at udregne, om et tal er et primtal, derfor må man prøve sig frem, om det kan opløses i faktorer. Kan det ikke det, er det et primtal. Der findes dog formler, der med stor sandsynlighed kan bestemme om et tal er et primtal. I afsnittet vil der redegøres for begge metoder til at finde primtal. SIEVE OF ERATOSTHENES 10 Oversat til dansk hedder denne metode Eratosthenes si og er en antik græsk metode til at lave lister over primtal. Eratosthenes si er en af flere algoritmer til at finde alle primtal op til en vilkårlig sat grænse. Idéen er, at man markerer og fjerner alle tal, som er multiplikander af hvert primtal. Man starter altså fra 2 videre til 3 til 5 osv. Eratosthenes si er en af de mest effektive metoder til at opliste mindre primtal. Mere konkret fungerer denne metode på følgende måde: 1. Oplist alle tal fra 2 til n (2, 3, 4,, n) 2. Lad p være lig med 2, som er det mindste primtal 3. Start ved p, find og marker/fjern multiplikander af p (2p, 3p, 4p,, np), selve tallet p bør ikke markeres eller markeres på entydig måde for at markere primtallene. 4. Herefter find det største tal større en p. Findes der ikke noget tal større end p, der ikke er markeret, er alle primtal fundet og ellers sættes p til det nye nummer og gentag fra trin 3. Metodens begrænsninger Eratosthenes metode bygger på, at man slavisk gennemgår alle tal i en given talrække, dette bliver hurtigt en meget tidskrævende proces ved store talrækker. Metoden egner sig derfor bedst til at finde primtal i mindre talrækker. 10 http://www.geeksforgeeks.org/sieve-of-eratosthenes/ 8

RABIN-MILLERS PROBABILISTISKE PRIMTALSTEST En anden metode til at bestemme om et tal er et primtal er Rabin-Miller testen. Rabin Miller testen er navngivet efter to dataloger, Michael Oser Rabin og Gary Lee Miller. I modsætning til Eratosthenes si er Rabin-Miller testen velegnet til store og små primtal, og bruges oftest til at finde meget store primtal. Rabin-Millers sætning siger, at der for et primtal p og et tal a, der ikke er divisor med p. Lad p 1 = 2 s d, hvor 1 s og d ulige. Da gælder enten, at 11 eller der findes et r med 0 r < s, så a d 1 mod p a 2r d p 1 mod p Rabin-Miller testen laves ved at man for et tilfældigt ulige tal n imod et antal vidner, a. Hvis det overstående er gældende, er n et primtal. Efter man har valgt det tal n, som skal testes, opstiller man værdier for a, d 12 13 og r i forhold til uligheden af definitionen for sætningen. Metodens begrænsninger Selvom Rabin-Miller testen ikke har problemer med store tal som Eratosthenes si, har denne metode et problem med pseudo-primtal. Ved at bruge Rabin-Miller på et tal, er der en risiko for, at tallet er et pseudoprimtal. Et psedo-primtal er et naturligt ikke-primtal, der udgiver sig for at være et primtal, ved at bestå testen. Sandsynligheden er dog forsvindende lille ved at teste mange vidner, a. Sandsynligheden for at tallet er et pseudo-primtal er 1 4k, hvor k er mængden af tilfældige vidner. Tester man fx for 30 tilfældige vidner er sandsynligheden 1 14 430, hvilket svarer til mindre end 1 ud af 1 000 000 000 000 000 000 gange. Delkonklusion Et sammensat tal kan faktoriseres på én måde og kun én måde. Når man skal bestemme de faktoriseringer findes der ikke nogen entydig formel. Det er muligt at bruge Rabin-Millers test, men den er altså ikke 100 % nøjagtig. Den eneste måde at finde faktoriseringer er ved at starte nede fra og arbejde sig op ad, lige som det beskrives af Sieve of Eratosthenes. Det er denne viden, som er fundamenten i kryptosystemet RSA, der nemlig består af et sammensat tal af to store primtalsfaktoriseringer. Og eftersom man ikke har nogle hurtig løsning til at bestemme primtal er det for tidskrævende at løse en RSA kryptering. 11 Matematiske mysterier - Primtalsmysterier s. 71-72 12 https://en.wikipedia.org/wiki/miller%e2%80%93rabin_primality_test#accuracy_of_the_test 13 http://mathworld.wolfram.com/rabin-millerstrongpseudoprimetest.html 14 Matematiske mysterier - Primtalsmysterier s. 72 9

PROGRAM (SIEVE OF ERATOSTHENES) Der er i forbindelse med projektet udarbejdet et program. Programmets funktion er at tage et vilkårligt brugerindtastet tal n og afgøre om det er et primtal eller et sammensat tal. Programmet tager udgangspunkt i teorien og logikken i Eratosthenes si og følger de samme trin, når den tester et tal. Krav til programmet Til udformningen af programmet er der opstillet en række krav som det færdige program skal leve op til. Disse krav er opstillet, for at kunne styrer udviklingen af programmet. De opstillede krav berører funktionalitet i form af problemløsning og kommunikation med brugeren. Programmet skal kunne - Modtage input fra brugeren - Udelukke tal mindre end 2 - Udelukke tal delelige med 2 - Teste med ulige divisorer - Stoppe når et sammensat eller primtal er fundet - Tage tid på hvor længe det tog - Fortælle brugeren hvor længe det tog - Fortælle brugeren om tallet er et primtal eller sammensatte tal Overvejelser omkring programmet 15 Ud over de opstillede krav er det overvejet, hvordan programmets algoritme laves mest effektiv. For at have den hurtigste programgennemkørsel er det vigtigt at algoritmen køres igennem så hurtigt som muligt og så få gange som muligt. På baggrund af iagttagelser gjort af Eratosthenes si vil programmets første test være at tjekke for divisorer med 2. Ved at gøre det, og testen ikke er positiv, udelukkes alle hele tal og hermed halvdelen af testmængden og man behøver derfra kun teste de ulige tal (3, 5, 7 osv.). Derudover vil koden for algoritmen kun køres hvis det indtastede tal er større end eller lig med 2. Dette forhindre anledning til fejl, bl.a. i form af fejlvurdering af et tal. Mængden af tal, som programmet tester kan begrænser betydelig, ved at teste for 2 til n. Forsøger man fx at finde alle divisorer med n = 100 ses følgende 2 x 50 = 100 4 x 25 = 100 5 x 20 = 100 10 x 10 = 100 -> kvadratroden af 100 20 x 5 = 100 25 x 4 = 100 50 x 2 = 100 Det vil altså sige, at alle divisorerne allerede er fundet efter kvadratroden af n = 100, og man kun finder de modsatte divisorer (2 x 50 50 x 2) ved at fortsætte. 15 http://stackoverflow.com/questions/4114167/checking-if-a-number-is-a-prime-number-in-python 10

Der er udover regnetekniske overvejelser også gjort overvejelser for hvordan koden skal skrives og hvilke funktioner programmet skal have. Eller mere korrekt, hvilke funktioner programmet ikke skal have. For at programmet fungerer mest effektivt vil der ikke være nogen form for prints i algoritmen, da dette tager betragtelig lang tid for en computer at udføre. Programmet vil ikke som Eratosthenes oprindelige algoritme, opliste tal i nogen form for liste eller tabel. Dette skyldes at, man ved at bruge lister begrænser størrelsen af de tal programmet kan håndtere. Desuden er det irrelevant at benytte en liste, da vi kun skal teste det ene tal for primtal eller ikke-primtal. Forklaring af algoritme Nedenunder ses hele algoritmen som den står i kildekoden. Hele kildekoden kan ses i bilag 1. if n < 2: print("tallet er mindre end 2 og er derfor ikke et primtal") times = 0 j = 1 if n%2 == 0 and 2!=n: #Er n deleligt med 2? 'and i!=n' times+=1 print("dit tal er ikke primtal. Tallet er deleligt med 2") while j<(n**0.5): j+=2 times +=1 etc.(j+2)? 'and j!=n' j if n%j == 0 and j!=n: #Er n deleligt med 3, 5, 7, 9 print "Dit tal er ikke primtal. Tallet er deleligt med", break print("dit tal er et primtal") Algoritmen vil blive gennemgået og hver linjes funktion vil blive beskrevet og holdt op imod udgangspunktet, som er teorien bag Eratosthenes si. if n < 2: print("tallet er mindre end 2 og er derfor ikke et primtal") Vurdering starter allerede fra den første linje, hvor det indtastede tal n testes for om det er større end tallet 2. Er tallet mindre end tallet 2 kan det pr. definition ikke være et primtal Et primtal er et naturligt tal, altså et helt tal, større end 1. Er tallet ikke større end 2 kan programmet allerede afgøre at tallet ikke er et primtal og koden inde i if-statement en bliver kørt. Koden er meget simpel, den skriver til brugeren, at det indtastede tal ikke er et primtal, eftersom det er for småt (fungerer også med negative tal). Programmet stopper efter teksten er printet. 11

times = 0 if n%2 == 0 and 2!=n: #Er n deleligt med 2? 'and i!=n' times+=1 print("dit tal er ikke primtal. Tallet er deleligt med 2") Er tallet n større end 2 køres else-statement en, som hænger sammen med den forrige if-statement. Det første der sker i else-statement et er, at en variable times bliver defineret. Denne variabler tæller hvor mange gange programmet tester et tal. Inde i else-statement et er der et if-statement, som tester om tallet er deleligt med 2. Denne del af algoritmen er en af de overvejelser, som blev gennemgået tidligere. Det er her alle de lige tal udelukkes. Derudover testes tallet også for at det ikke er lig med 2 (2!=n), pr. definition er Et primtal et naturligt tal, altså et helt tal (1, 2, 3 ), større end 1, som ikke kan deles med andre naturlige tal end tallet selv og tallet 1. Så hvis tallet selv er det eneste tal, der er divisor er tallet et primtal. Findes der dog en divisor 2 til tallet kan programmet konkludere, at n ikke er et primtal og programmet udfører koden inden i if-statement et. j j = 1 while j<(n**0.5): j+=2 times +=1 if n%j == 0 and j!=n: print "Dit tal er ikke primtal. Tallet er deleligt med", break Er tallet ikke deleligt med 2 kører koden i dette else-statement. Det første der sker er at en variabel j bliver defineret som j = 1. Den variabel bliver brugt i while-loopet, som kører fra j til kvadratroden af n. Loopet tester for ulige divisorer i n. Når loopet starter lægges der 2 til variablen j og det gør der hver gang loopet kører igennem. Dvs. at variablen er j = 3, når loopet begynder, og n testes så op mod n%3, n%(3+2 = 5) osv. Hvis programmet finder et ulige tal, j, der er divisor til n afsluttes loopet af koden i if-statement et. print("dit tal er et primtal") Hvis j overstiger kvadratroden af n og programmet ikke har fundet nogen divisor fra j til n, er tallet et primtal. Programmet afsluttet while-loopet og printer: Dit tal er et primtal. 12

Test af funktionalitet For at teste selve funktionaliteten af programmet har vil det gennemgå 3 forskellige tests. Resultaterne af disse tests vil blive holdt op mod de opstillede krav til programmet. Programmet indeholder ikke nogen for form for problemhåndtering. Så hvis brugeren indtaster et invalidt input, fx et bogstav eller et andet tegn, som ikke er et tal, vil programmet komme med en fejlmeddelelse. TEST AF TILFÆLDIGE SAMMENSATTE Denne test vurderer om programmet er i stand til at vurdere om et naturligt tal er et sammensat tal og ikke et primtal. Samtidig tester om while-løkken fungerer korrekt. Testen foretages 3 gange med 3 forskellige vilkårlige tal, hvor mindst ét har en stor primtalsfaktorisering. Det store tal vil være produktet af de to primtal 15485863*15485867 = 239812014798221, det er på den måde sikret at tallet vil have en meget stor primtalsfaktorisering og samtidig vil det være muligt at bestemme om programmets variabel j (divisor) fungerer korrekt. Figur 1. Test af tilfældige sammensatte tal. Programmet modtager input fra brugeren, i første test er det tallet 2222222. Det tester med det samme om tallet er et helt tal, altså er deleligt med 2. Hvilket det tydeligt er i første test. Anden test bruger ulige tal, hvor programmet igen tester om tallet er et helt tal. Dette ses ved at programmet ikke afslutter, men fortsætter til while-loopet, hvor den tester for ulige tal. Her kører den loopet igennem 3 gange, først med 49%3, så 49%5 og herefter 49%7, hvor den finder en divisor. Når programmet registrerer en divisor i det indtastede tal, kan det vurdere, at det indtastede tal er et sammensat tal og programmet stopper dermed. Programmet laver et output til brugeren, der fortæller at tallet ikke er et primtal og hvor lang tid det tog. Af den tredje test kan man se at programmet fungerer med både store lige så vel som små sammensatte tal. 13

TEST AF TILFÆLDIGE PRIMTAL Denne test vurderer om programmet er i stand til korrekt, at validere et primtal og tester samtidig om while-løkken fungerer korrekt. Testen foretages af 2 gange med 2 forskellige vilkårlige primtal i forskellige størrelser. Figur 2. Test af tilfældige primtal Programmet modtager input fra brugeren. Det tester med det samme om tallet er et helt tal, altså er deleligt med 2. Da tallene er primtal tester tallet falsk. Dette ses ved at programmet ikke afslutter, men fortsætter til while-loopet, hvor den tester for ulige tal. I den første test kører programmet igennem én gang med 5%3 og da det skal til at køre igennem anden gang tester tallet sandt i at det går op i sig selv. Tallet må derfor være et primtal og programmet stopper. I den anden test kører programmet igennem op til kvadratroden af det indtastede tal. Dette kan tjekkes ved 982451653 = 31344 Og eftersom programmet tester ulige tal ved at lægge 2 til for hver gennemkørsel fås 2 15672 = 31344 For begge tests laver programmet et output til brugeren, der fortæller at tallet er et primtal og hvor lang tid det tog at bestemme. Man kan se af testene, at programmet fungerer med både store og små primtal. 14

TEST AF NATURLIGE TAL FOR N < 2 Dette er en simpel test, blot for at sikre programmet registrerer hvis brugeren indtaster et tal, som er for småt til at være et primtal. Et tal er for småt til at være et primtal hvis det er mindre end 2. Figur 3. Test af naturlige tal for n < 2. Det fremgår af testen at programmet registrerer tal mindre end 2 og at det fungere for både positive og negative tal mindre end 2. Eftersom programmet ikke har brugt tid på, at bestemme om tallet er et primtal gives ingen tid. Programmet giver et output, der fortæller brugeren at tallet ikke er et primtal. Eksekveringstid 16 Eksekveringstiden er den tid, programmet bruger på at bestemme om det indtastede tal er et primtal. For mindre primtal er det muligt at indtaste tallet og lade programmet fortælle hvor lang tid det brugte, men hvad hvis man vil vide hvor lang tid det bruger på store primtal med hundredvis af cifre? Ved at bruge matematiske strukturer, såsom grafer og ligninger, til at beskrive nogle aspekter fra den virkelige verden, er det muligt at opstille en model. I vores tilfælde er det muligt at undersøge forholdet mellem størrelsen af det indtastede tal og eksekveringstiden. Ved at opstille en model for dette, vil man ved at ekstrapolere kunne give et estimat på, hvor lang tid programmet vil bruge på at bestemme primtal tal som vi ikke selv har forsøgt at teste. Indledningsvist var det meningen, at det binære talsystem skulle benyttes til at opstille modellen, men dette viste sig at have nogle unøjagtigheder. Det binære talsystem består af en række af bits. Hver bit er en 2 er potens og hver potens er én større end den forrige 17. Ser således ud 2 10 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 1 1 1 1 0 0 1 0 1 0 Figur 4. Binær talrække. Hver bit kan have værdien 1 eller 0 (sandt eller falsk). For at få tallet i det decimale talsystem lægges alle tallene med den vægt (2 er potens) de hver især har. Problemet ved at bruge det binære system ses tydeligt, hvis vi tager et eksempel med fx 100 bits. En binær streng på 100 bits er 100 mulige 2 er potenser fra 2 0 til 2 99. 16 "Modelleringsprocessen" - J. Dejgaard og C. Michelsen. Trafikmodeller matematiske aspekter 2001 17 http://www.electronics-tutorials.ws/binary/bin_2.html 15

Figur 5. Tilfældigt genererede tal ud fra antal bits. Programmet kildekode kan findes i bilag 4. Dette program genererer 10 tilfældige tal, der alle sammen kan skrives i det binære talsystem med 100 bits. Tallet i det decimale talsystem er tallet til venstre. Talrækken i midten er tallet udtrykt binært og tallet til sidst er mængden af bits. Kigger man på det mindste af de 10 tal og det største får man en forskel på 1225731047765547197526972996299 669341370953165420287261980120 = 556389676812381777239711016179 Det er en pæn stor forskel og der er altså ikke en entydig sammenhæng mellem antallet af bits og størrelse på det decimale tal. Med udgangspunkt i den konklusion er der valgt en mængde primtal, som afhænger af mængden af cifre i tallet. Tallene som bliver brugt starter fra 12 cifre og går til 18 cifre og stiger med et interval på to cifre. Hvert primtal er det mindste primtal med hhv. 12 cifre, 14 cifre og på samme måde er de mindst mulige primtal udvalgt op til 18 cifre. Dette er gjort, for at opnå de mest entydige testresultater. Eksekveringstiden ville ikke være entydig, hvis man valgte et tilfældigt primtal med et bestemt antal cifre eftersom primtallets størrelse vil kunne variere meget. Fx for to primtal på 18 cifre, kan det ene være 100000000000000003, mens det andet kan være 999999999999999989. Primtal Eksekveringstid (sek) Antal gennemkørsler 12 cifre 100000000003 0.125 158114 14 cifre 10000000000037 1.250 1581139 16 cifre 1000000000000037 12.188 15811388 18 cifre 100000000000000003 124.522 158113883 Figur 6. En tabel over de tal, som bruges til at opstille en model. Af tabellen ses 2 interessante ting. Det første er, at antallet af gennemkørsler stiger med ca. 10 gange så meget for hvert tal. Dette er logisk eftersom vi fra tidligere ved, at programmet tester op til kvadratroden af det indtastede tal, og derudover lægger den altså 2 til for hver gang den kører igennem. Tager vi som eksempel det første tal 100000000003 ~ 316228 og lægger 2 til for hver gennemkørsel, får man 158114 2 = 316228, dette kan gøres for hvert af tallene. Det andet interessante er eksekveringstidens stigning. For hvert tal bliver eksekveringstiden tilnærmelsesvis 10 gange større. Antager man at dette er et generelt mønster er det muligt at opstille en model på baggrund af dette. Ved at indsætte tabelværdierne som punkter i et koordinatsystem fås 16

Figur 7. Her ses den empiriske data fra tabellen som punkter i et koordinatsystem i programmet Graph. Langs x-aksen er antallet af cifre, mens y-aksen repræsenterer eksekveringstiden. Det er tydeligt, at grafen vokser meget eksplosivt, hvilket vi også konkluderede af tabellen. Ud fra denne antagelse må vi formode, at en model for eksekveringstidens udvikling må være en funktion med en eksponentiel udvikling af formen f(x) = b a x. For at finde den funktion, der passer bedst på vores data sæt, kan man foretage en regressionsanalyse. Programmet Graph s tendenslinje-funktion er brugt til dette. En regressionsanalyse er et forsøg på at finde den funktion af en angivet funktionstype, der passer bedst på de indtastede punkter. Ud af den analyse kommer en tal, R 2 1, desto tættere på 1 dette tal er, desto bedre passer funktion på punkterne. Ved at forsøge med en eksponentiel funktion fås Figur 8. Grafen viser en tendenslinje for en eksponentiel funktion på det indtastede koordinatsæt. I højre hjørne kan man se funktionsudtrykket og regressionen. 17

Det udregnede funktionsudtryk har en regression på 0,9999, hvilket betyder at grafen passer rigtig godt på punkterne. Funktionsudtrykket kan bruges som en model for eksekveringstiden som en funktion af antallet af cifre. Modellens afvigelse kan beregnes og på baggrund af afvigelsen, kan modellen vurderes. Dette gøres ved at beregne 1,2756 10 7 3,1565 x for hvert x fra 12 til 18. Primtal Eksekveringstid (sek) Afvigelse 18 Gennemkørsler 12 cifre 100000000003 0,125 0 % 158114 14 cifre 10000000000037 1,243-0,56 % 1581139 16 cifre 1000000000000037 12,388 1,64 % 15811388 18 cifre 100000000000000003 123,429-0,88 % 158113883 Figur 9. En tabel opstillet ud fra modellen, hvor man kan se afvigelsesprocenten for modellen. Det ses af tabellen, at modellen har meget små afvigelser i forhold til virkeligheden. Modellen. Vi bruger derfor denne funktion, som en model til at estimere eksekveringstiden for store primtal. Vi har en model, der bestemmer eksekveringstiden i sekunder som en funktion af talstørrelsen målt i cifre. Med denne model kan vi ekstrapolere til en ønsket ciffer størrelse x. Til at håndtere større tal er det smartere at bruge en større tidsenhed. Alle eksekveringstider omskrives til år ved at bruge formlen 1 eksekveringstid 60 60 24 365 Tabellen ser efter omskrivningen sådan her ud Primtal Eksekveringstid (sek) Gennemkørsler 12 cifre 100000000003 3,96372 10 9 158114 14 cifre 10000000000037 3,94153 10 08 1581139 16 cifre 1000000000000037 3,92821 10 7 15811388 18 cifre 100000000000000003 3,91391 10 6 158113883 Figur 10. Modellen opstillet som eksekveringstid i år som en funktion af antal cifre i et primtal. Vi får da en model, som ser således ud Figur 11. Tendenslinjen for modellen. 18 http://opslagsvaerker.gyldendal.dk/en/opslagsvaerkervirtuelle/i- Fysik%20C/PROCENTVIS%20AFVIGELSE/OM%20PROCENTVIS%20AFVIGELSE.aspx 18

Estimering Med den opstillede model er det muligt at give et estimat på, hvor mange år programmet vil være om at validere meget store primtal som vi, pga. tidsomfanget, ikke har mulighed for at gøre selv. Modellen giver, med rimelig stor præcision, et estimat for bestemmelse af store primtal. Til at håndtere tallenes størrelse er WolframAlphas widget Table of Values of a Function 19 benyttet. Tabellen går fra 100 cifre til 600 cifre, med et interval på 100 cifre. Figur 12. Ekstrapoleringen vist i en tabel ved brug af WolframAlpha. Sammenligner man modellen med tallet fra afsnittet om primtalsfaktorisering, ser man, at de er meget ens. De estimerede, at det ville tage 3,2 10 86 år at teste, om et tal på 200 cifre er et primtal. Af modellen fremgår det, at den estimerede tid for programmet at bestemme et tal på 200 cifre er 2,6862 10 85 år, og er altså meget tæt på at være ens. Firmaet RSA havde engang en konkurrence med forskellige præmier for at faktorisere forskellige størrelser af tal. Den øvre grænse for tabellen er sat ud fra det største af de tal,rsa-2048 (2048 bits), som er på 617 cifre 20. Dette tal er estimeret, ifølge modellen, til at tage omkring 1,17546 10 285 år. Et andet tal er RSA-1024 (1024 bits), som svarer til 309 cifre. Dette tal vil tage cirka 2,18477 10 135 år. Hverken RSA-1024 eller RSA-2048 er blevet faktoriseret endnu. 19 http://www.wolframalpha.com/widgets/view.jsp?id=3057c2df55df3403c3b60784caf7c436 20 https://en.wikipedia.org/wiki/rsa_numbers#rsa-2048 19

Forbedringer For at forbedre programmet er der to tilgangsmåder; optimér den eksisterende kode eller brug en anden algoritme. Optimering af den eksisterende kode kan fx gøres ved at fjerne overflødige funktioner fra programmet eller komprimere strukturen af koden. Af overflødige funktioner i det nuværende program, kan der nævnes tælleren for antal gennemkørsler. Tælleren er en del af while-loopet og variabler ændres hver gang loopet kører igennem. Denne funktion er ikke nødvendig for funktionalitet, men er mest med for sjov, så man kan se hvor mange gange programmet rent faktisk tester det indtastede tal. Figur 13. Gennemkørsel af et primtal, der før tog 4.0009, med det optimerede program. Det samme tal tog før optimeringen 4.0009 sekunder. Nu tager det 3.7649 sekunder. Det er altså 0.236 sekunder mindre svarende til en forbedring på cirka 17 %. Det er tydeligt, at antallet af variabler programmet skal behandle, forøger eksekveringstiden. I programmet har vi yderligere én variable, men som programmet er skrevet lige nu, er den ikke mulig at fjerne. Ved at omskrive koden kan vi lave et program, der eksekveres endnu hurtigere. from math import sqrt; from itertools import count, islice def isprime(n): return n > 1 and all(n%i for i in islice(count(2), int(sqrt(n)-1))) Figur 14. Gennemkørsel af samme primtal med program fundet på internettet. Koden er fundet på internettet og kan ses i bilag 4 21. Denne algoritme kan teste samme primtal på 2.4909 sekunder, hvilket er en forbedring på 34 % i forhold til sidste forbedring og 38 % bedre end det originale 21 http://stackoverflow.com/questions/4114167/checking-if-a-number-is-a-prime-number-in-python 20

program. Denne kode har flere elementer, der gør det hurtigere end mit program. For det første består det af en simplere kode, med færre if-else-statements, hvilket gør koden nemmere for computeren at eksekvere. For det andet bruger den en islice fra itertools, som er et indbygget modul i Python. Modulet er beregnet til at lave meget hurtige og effektive loops, The module standardizes a core set of fast, memory efficient tools 22 En anden tilgang ville være at finde en bedre algoritme, det kunne fx være den tidligere nævnte Rabin- Miller. Men dette vil ikke blive gennemgået nærmere. Delkonklusion Programmet er opbygget omkring Eratosthenes metode. Metoden udnytter computerens evne til at lave mange operationer i sekundet. På den måde testes primtal hurtigt igennem. Men dette gælder kun for små primtal, for når først tallet bliver stort nok, kræver det selv for en computer ufattelig lang tid at bestemme primtal. Dette vises også tydeligt ved at bruge den opstillede model. Modellen kan beregne tiden, som en funktion af tallets størrelse i cifre. Ved at ekstrapolere er det muligt at estimere, hvor længe programmet vil bruge på primtal med flere hundrede cifre. Det estimeres for det RSA tal RSA-2048, at det vil tage omkring 1,17546 10 285 år at bestemme et primtal på den størrelse. Dette underbygger teorien om at RSA krypteringen fungerer og hvorfor. 22 https://docs.python.org/2/library/itertools.html 21

PERSPEKTIVERING Kvantecomputer 23 Teknologien bag kvantecomputere er meget kompliceret. En kvantecomputer udnytter kvantemekaniske kræfter og kan løse matematiske problemer meget mere effektivt end konventionelle computere. Det gælder primtalsfaktorisering, som fx krypteringssystemet RSA bygger på. Kvantecomputere vil teoretisk kunne afprøve samtlige muligheder i visse problemstillinger på én gang og kan altså på få sekunder bryde enhver kendt kryptering, fordi den i teorien har en ubegrænset evne til gætte sig til koden. Kvantecomputere er ikke en realitet endnu, men dem som udvikler den første funktionelle kvantecomputer, vil altså kunne dekryptere og læse al data, som transmitteres. Dette indebærer krypterede mails, pengeoverførsler, bankoplysninger osv. Moores lov Moores lov er en forudsigelse formuleret af medstifteren af chipproducenten Intel, Gordon Moore (1929 -). Moores lov siger, at antallet af transistorer på en mikroprocessor fordobles cirka hvert andet år. Denne forudsigelse har holdt stik i 50 år, men det er blevet mere og mere udfordrende at fordoble antallet. Ifølge det amerikanske forskningsforbund DARPA vil Moores lov erklæres død tidligst i 2020. 24 Alle eksponentialfunktioner, som beskriver naturen, vil nå et punkt, hvor den eksponentielle udvikling ikke længere kan opretholdes. 25 Moores lov ender altså formegentlig på et tidspunkt, når det bliver fysisk umuligt at øge antallet af transistorer. Man bliver derfor nød til at udvikle nye alternative teknologier, heriblandt fx kvantecomputere. The Dark Web Dark Web er et krypteret netværk af servere. Alle har mulighed for at besøge disse servere (hjemmesider), men IP adressen for dem, som hoster serveren, er krypteret og holdes hemmelig. De fleste hjemmesider på Dark Web benytter et software kaldet Tor, som gemmer din identitet og forvrænger din lokation. Ofte er det nødvendigt at bruge denne software, hvis du ønsker at få adgang til sider på Dark Web. På den måde er det altså muligt at kommunikere anonymt. Selvom det er muligt at bruge Dark Web på en lovlig måde, indeholder The Dark Web mørke bagsider af krypteringens egenskaber og er mest kendt som et samlested for kriminelle og teorister. Det berygtede Silk Road er en del af Dark Web. Silk Road er en hjemmeside, hvor det er muligt at sælge og købe narkotika og våben. Der handles i en valuta kaldet Bitcoin, der i sig selv indeholder et avanceret kryptosystem. Silk Road og Dark Web gør det utrolig svært for politiet og regeringerne at finde ud af, hvem der foretager køb og salg, og det er på den måde muligt at begå kriminalitet anonymt over internettet. 23 http://www.version2.dk/artikel/snowden-nsa-bygger-kvantecomputer-til-bryde-ind-hos-regeringer-55601 24 http://www.version2.dk/artikel/moores-lov-lever-paa-laant-tid-hvad-sker-der-efter-2020-55820 25 http://www.version2.dk/artikel/moores-lov-lever-paa-laant-tid-hvad-sker-der-efter-2020-55820 22

KONKLUSION Rapporten har kort redegjort for begrebet kryptering, hvad den bruges til og hvordan den bruges. Derudover er teorien bag symmetriske- og asymmetriske kryptosystemer blevet gennemgået og forskellen mellem de to metoder er beskrevet. Der er i forbindelse med kryptosystemer blevet redegjort for primtals egenskaber, primtalsfaktorisering og begrundet for hvorfor matematikken for primtal anvendes i forbindelse med kryptering. Primtalsbestemmelse er forklaret og der er redegjort for to metoder til at bestemme primtal. Metodernes begrænsninger er diskuteret og det kan konkluderes, at det kun er Eratosthenes metode, som hundrede procent sikkert kan bestemme et primtal. Af de to beskrevne metoder er Eratosthenes metode valgt til at lave som et program. Programmet kan ved hjælp af matematikken i Eratosthenes si bestemme om et vilkårligt tal er et primtal eller ej. Der er med udgangspunkt i programmets eksekveringstid forsøgt at opstille en model. Modellen afspejler eksekveringstiden, som en funktion af antallet af primtallets cifre. Modellen er opstillet ud fra empirisk data, som er indsamlet ved at køre tal med forskellige antal cifre og sammenligne eksekveringstiden. Det kan konkluderes at det lykkedes at opstille en model, som afspejler virkeligheden ret præcist, vurderingen af modellen ses af afvigelsesprocenten i figur 9. Det kan konkluderes at programmet og modellen er med til at underbygge, hvor svær en RSA kryptering er at bryde. Ud fra modellen estimeredes tiden det ville tage at bestemme RSA kryptering, RSA-2048 på 617 cifre. Det ville tage i omegnen af 1,17546 10 285 år. Desuden er der diskuteret mulige forbedringer til programmet. Og det kan konkluderes ud fra afsnittet om forbedringer, at det er muligt at optimere programmets kode, så eksekveringstiden bliver kortere. Det er også muligt at benytte andre algoritmer, men dette er ikke beskrevet yderligere. 23

LITTERATURLISTE Matematiske mysterier (2013) omkring Primtalsmysterier Af Johan P. Hansen Aarhus universitetsforlag http://math.au.dk/fileadmin/files/matlaererdag/2005/kryptologi.pdf Introduktion til Kryptologi, Aarhus universitet Af Mikkel Kamstrup Erlandsen https://docs.python.org/2/library/itertools.html Dette er en python egen side omkring alle python funktioner og hvordan man bruger dem. "Modelleringsprocessen" i Trafikmodeller matematiske aspekter 2001 Af J. Dejgaard og C. Michelsen. http://mathworld.wolfram.com/rabin-millerstrongpseudoprimetest.html http://www.wolframalpha.com/widgets/view.jsp?id=3057c2df55df3403c3b60784caf7c436 WolframAlpha er en stor matematisk database og er i opgaven brugt til regne med store tal og som opslagsværk. http://opslagsvaerker.gyldendal.dk/en/opslagsvaerkervirtuelle/i- Fysik%20C/PROCENTVIS%20AFVIGELSE/OM%20PROCENTVIS%20AFVIGELSE.aspx Opslagværk fra bogen I-Fysik C Gyldendal http://www.version2.dk/artikel/snowden-nsa-bygger-kvantecomputer-til-bryde-ind-hos-regeringer-55601 Artikel om kvantecomputere (Fredag, 3. januar 2014) Af Henrik Nordstrøm Mortensen http://www.version2.dk/artikel/moores-lov-lever-paa-laant-tid-hvad-sker-der-efter-2020-55820 Artikel om Moores Lov (17. januar 2014) Af Jesper Stein Sandal http://stackoverflow.com/questions/273396/aes-encryption-what-are-public-and-private-keys http://stackoverflow.com/questions/4114167/checking-if-a-number-is-a-prime-number-in-python http://stackoverflow.com/questions/4114167/checking-if-a-number-is-a-prime-number-in-python Stackoverflow.com er et forum for programmører http://www.geeksforgeeks.org/sieve-of-eratosthenes/ http://www.electronics-tutorials.ws/binary/bin_2.html https://en.wikipedia.org/wiki/miller%e2%80%93rabin_primality_test#accuracy_of_the_test https://en.wikipedia.org/wiki/rsa_numbers#rsa-2048 24

BILAG Bilag 1 - Kildekode for det oprindelige program # -*- coding: cp1252 -*- import time while True: n = int(raw_input("indtast et vilkårligt naturligt tal: ")) time_start = time.time() if n < 2: print("tallet er mindre end 2 og er derfor ikke et primtal") times = 0 if n%2 == 0 and 2!=n: #Er n deleligt med 2? 'and i!=n' times+=1 print("dit tal er ikke primtal. Tallet er deleligt med 2") j = 1 while j<(n**0.5): j+=2 times +=1 if n%j == 0 and j!=n: #Er n deleligt med 3, 5, 7, 9 etc.(j+2)? 'and j!=n' print "Dit tal er ikke primtal. Tallet er deleligt med", j break print("dit tal er et primtal") time_end = time.time()-time_start print "Det tog", time_end, "sekunder for programmet at afgøre om dit tal var et primtal" print "Programmet kørte igennem", times, "gange" while True: answer = raw_input('vil du teste endnu et tal? (y/n): ') if answer in ('y', 'n'): break print 'Invalid input.' if answer == 'y': continue break 25