En undersøgelse af faktoriseringsalgoritmen Pollard p-1



Relaterede dokumenter
Bernoullis differentialligning v/ Bjørn Grøn Side 1 af 10

Dagens forelæsning. Grinblatt & Titman kap. 5. Introduktion. Introduktion. Exhibit 5.1. Investeringsmulighedsområdet. Investeringsmulighedsområdet

Algoritmer og invarianter

Matematikken bag kryptering og signering RSA

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Numerisk løsning af differentialligninger

dcomnet-nr. 6 Talrepræsentation Computere og Netværk (dcomnet)

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

RSA Kryptosystemet. Kryptologi ved Datalogisk Institut, Aarhus Universitet

Indholdsfortegnelse. Indledning...2. Tidsplan...2. Målgruppe...3. Spørgeskema...3. Kode eksempler...5. Procesbeskrivelse...7. Evaluering...

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer.

Integer Factorization

Sortering. Eksempel: De n tal i sorteret orden

Allan C. Malmberg. Terningkast

Divisorer. Introduktion. Divisorer og delelighed. Divisionsalgoritmen. Definition (Divisor) Lad d og n være hele tal. Hvis der findes et helt tal q så

Skriftlig eksamen i Datalogi

Sammenligning af proteiners 3-dimensionelle strukturer

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.

Ydeevne og kapacitet. Indholdsfortegnelse

[MARKONLINE I CITRIX]

BRP Kursusintroduktion og Java-oversigt

Statistisk mekanik 1 Side 1 af 11 Introduktion. Indledning

17 Søgning og Søgetræer.

Generalized Probit Model in Design of Dose Finding Experiments. Yuehui Wu Valerii V. Fedorov RSU, GlaxoSmithKline, US

Skriftlig Eksamen Beregnelighed (DM517)

Hvad er matematik? C, i-bog ISBN L&R Uddannelse A/S Vognmagergade 11 DK-1148 København K Tlf: info@lru.

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

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Sortering. Eksempel: De n tal i sorteret orden

En karakteristik af de regulære sprog. Ugens emner. FA minimering [ ] MyHill-Nerode-sætningen en algoritme til minimering af FA er

Notat vedrørende projektet EFP06 Lavfrekvent støj fra store vindmøller Kvantificering af støjen og vurdering af genevirkningen

Det er muligt at chekce følgende opg. i CodeJudge: og

Matematiske metoder - Opgaver

Om at løse problemer En opgave-workshop Beregnelighed og kompleksitet

DM02 opgaver ugeseddel 2

Abstrakte datatyper C#-version

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

Dokumentation af programmering i Python 2.75

Statistik i basketball

JavaScript. nedarvning.

DM549. Hvilke udsagn er sande? Which propositions are true? Svar 1.a: x Z: x > x 1. Svar 2.h: x Z: y Z: x + y = 5. Svar 1.e: x Z: y Z: x + y < x y

Procedurer og funktioner - iteration og rekursion

Undersøgende aktivitet om primtal. Af Petur Birgir Petersen

Talteori. Teori og problemløsning. Indhold. Talteori - Teori og problemløsning, marts 2014, Kirsten Rosenkilde.

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

DM547/MM537. Spørgsmål 2 (3%) Hvilke udsagn er sande? Which propositions are true? Svar 1.a: x Z: x > x 1. Svar 2.h: x Z: y Z: x + y = 5. Svar 1.

Varmepumpen. Eksempel på anvendelse af Termodynamikkens 1. og 2. hovedsætning

18 Multivejstræer og B-træer.

1.1 Formål Webservicen gør det muligt for eksterne parter, at fremsøge informationer om elevers fravær.

Kursusarbejde 2 Grundlæggende Programmering

Talteori: Euklids algoritmer, modulær aritmetik

Tjek. lønnen. Et værktøj til at undersøge lokal løndannelse og ligeløn på offentlige arbejdspladser udgave Varenr. 7520

medemagruppen P Q ver april 2011 Brugervejledning G90T og G90A

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

CANSAT & ARDUINO step by step

Algoritmer og Datastrukturer 1

Talrækker. Aktivitet Emne Klassetrin Side

Evaluering af Soltimer

Forelæsning 6: Kapitel 7: Hypotesetest for gennemsnit (one-sample setup)

BOSK F2011, 1. del: Udsagnslogik

Fra tilfældighed over fraktaler til uendelighed

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Hvor er mine runde hjørner?

BOSK F2012, 1. del: Prædikatslogik

DM507 Algoritmer og datastrukturer

Alt elektronik heri er købt via og arduino udviklingssoftware er hentet fra

Kursus navn: Indledende programmering Kursus nr

Elementær Matematik. Mængder og udsagn

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Basic statistics for experimental medical researchers

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Matematikken bag kryptering og signering RSA

Transkript:

itsi 009, proetopgave Torsten Jordt, 9754 00009 En undersøgelse af fatoriseringsalgoritmen Pollard p- Indhold: Opgavens mål og rammer Introdution til fatoriseringsalgoritmer og Pollard p- 3 Pollard p- og Stinson s fremgangsmåde 3 Stinson s fremgangsmåde 3 Derfor fatoriserer Stinson s fremgangsmåde 33 Imødegåelse af truslen fra Pollard p- 4 34 Simpel iterativ fastsættelse af 4 35 En simpel transformation af Stinson s algoritme 5 36 En hurtigere iterativ fastsættelse af 6 4 Analyse af Stinson s fremgangsmåde 8 4 Hvorfor antager a værdien? 8 4 Findes der produter af svage primtal som ie an fatoriseres? 8 43 Sal man bare gøre stor no? 9 5 Optimering af Stinson s fremgangsmåde 9 6 Hvorfor fungerer den optimerede fremgangsmåde? 6 Intervallet af de er for hvile Pollard p- fatoriserer 6 Argumentation 63 Derfor fungerer den optimerede fremgangsmåde 4 64 Esempler på intervaller 4 7 Et andet optimering af Stinson s fremgangsmåde 6 7 Fremgangsmåden X 6 7 Strategier for chec 7 73 Hastighed 8 8 Sammenfatning 8 9 Appendix: Generering af primtalsproduter til brug i undersøgelsen 9 0 Appendix: Implementering i ava

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Opgavens mål og rammer Denne rapport er en besvarelse af en proetopgave der udgør urset IT-sierhed i prasis Opgaven er afslutningen på et forløb, der blev indledt med fagpaerne Introdution til it-sierhed og Kryptologi De tre urser udgorde tilsammen fagpaen It-sierhed som blev udbudt af IT-vest i 009 Opgavens overordnede formål var at undersøge og implementere Pollard s p algoritme som Stinson formulerer den Fremgangsmåden i opgaven har været at implementere forsellige varianter af Stinson s formulering, undersøge hvordan de opfører sig, forlare hvorfor de opfører sig som de gør, og sluttelig udnytte denne viden til forsøg på optimering af Stinson s formulering af algoritmen Rammen for implementeringerne har været standard Java på en standard-pc Målet har ie været at lave hurtige implementeringer, men derimod implementeringer som var funtionelt effetive Dvs implementeringer som i mindre grad opgiver at fatorisere, og som ie nødvendigvis ræver forhåndsvalg af input ud over det tal der ønses fatoriseret Der er tale om en enmandsopgave, og den blev løst på en traditionel pc med traditionel software Pc en var en Dell Dimension 550 med G RAM og en Intel Pentium D CPU 8 GHz Styresystemet var Windows XP SP3 og programomgivelserne var Java SDK 6 og JUnit3 Fra ava s værtøsasse blev benyttet bla lassen iginteger og de metoder den som standard er udstyret med (multiply, subtract, add, gcd, modpow, bitlength, isprobableprime, etc) esvarelsen af opgaven baserer sig i det væsentlige på følgende materiale: Ivan Damgård: An Introduction to some asic Concepts in IT, Security and Chryptography (ursusnoter 009) Jesper uus Nielsen: Introduction to Moderns Cryptography (ursusnoter 009) Douglas R Stinson: Chryptography Theory and Practice, 3rd edition Rapporten refererer til dette materiale med betegnelserne hhv Damgård, Nielsen og Stinson Kildeode, målinger og testdata (primtalsproduter) findes her: http://itsi009proetordfugld Jeg har tilstræbt en onsevent navngivning, således at der sulle være en nogenlunde entydig sammenhæng mellem ildeode, målinger, testdata og rapport Målingerne findes som olon-separeret test i csv-filer, som an åbnes med et regnear Vær i givet fald opmærsom på to forhold: Regnearsprogrammet an være ude af stand til at vise tal med mange cifre Filer indeholdende store tal (typis på 30 bits og derover) bør åbnes med en almindelig testeditor Kolonner sal muligvis sal have udvidet bredden for at lange tal og navne bliver fuldt synlige Den begrænsede masinraft har påviret valget af testdata, således at der hovedsageligt er undersøgt produter af meget små primtal (dvs primtal op til 3 bits) Og ved målinger på mange produter ad gangen har det været nødvendigt at basere sig på produter af endnu ortere primtal (typis 0-4 bits) Men der er tilstræbt en systemati og opbygning af ava-programmerne, så undersøgelsen i princippet an gentages med vilårligt store primtal Sidst men ie mindst: Ta til Jesper uus Nielsen uden hvis hælp eg aldrig havde forstået det eg så Og ta til min familie der sældent så mig mens eg så Introdution til fatoriseringsalgoritmer og Pollard p- Generelt er udgangspuntet for en fatoriseringsalgoritme et tal n, der formodes at være produtet af to primtal p og q Algoritmen tager som input et n, og den sal beregne enten p eller q (eller opgive at gøre det) En sådan fatorisering er interessant fordi den esempelvis an bruges til at bryde RSA-ryptering Kort fortalt bygger rypteringen i RSA på følgende principper (f Damgård): Kryptering ser med brug af en offentlig nøgle bestående af et talpar ( n, e) En rypteret meddelelse c beregnes med udtryet c = m e mod n

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Deryptering ser med brug af en hemmelig nøgle bestående af et talpar ( n, d) En derypteret meddelelse m beregnes med udtryet m = c d mod n n er et produt af to forsellige hemmelige primtal p og q Dvs n = pq d an beregnes ud fra sammenhængen ed = mod( p )( q ) Med andre ord: Kan man fatorisere n, er den hemmelige nøgle afsløret Pollard p algoritmen er en fatoriseringsalgoritme der blev formuleret af John Pollard i 974 Den egner sig til fatorisering af tal der er sammensat af fatorer med særlige egensaber Det er simpelt at vælge p og q, så algoritmen vanseligt an fatorisere n = pq, og dermed bryde rypteringen i RSA Dette besrives nærmere i et følgende afsnit Trods dette er algoritmen relevant at undersøge nærme som et led i et undervisningsforløb Den bygger på få (og enelt formulerede) egensaber forz, og implementeringen er enel Men undersøgelser af n algoritmen afdæer (ie overrasende) ie-triviel matematis omplesitet, og arbedet med implementeringer af algoritmen breder sig naturligt til andre områder af generel interesse Esempelvis generering af primtal med specifie egensaber, overveelser om hvad der nærmere an ligge i udsagnet effetiv implementering af en fatoriseringsalgoritme og hvordan dette an effetueres, samt selve det at sætte sig ind i teoridannelser på området 3 Pollard p- og Stinson s fremgangsmåde Udgangspuntet for Pollard p- er et n der sal fatoriseres, og en på forhånd givet øvre grænse Antag følgende: Et primtal p fatoriserer n For alle primtalspotenser q der opfylder q ( p ) er q () 3 Stinson s fremgangsmåde Antagelsen () betyder at der gælder at ( )! p Stinson formulerer Pollard p- algoritmen således: Stinsons formulering af Pollard p- input : n, a for to a a modn d gcd( a, if < d < n then return d else return failure Fremgangsmåden er implementeret i ava-lassen Pollard_p Stinson 3 Derfor fatoriserer Stinson s fremgangsmåde Da

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009! = = ((( ) )) må der ved afslutningen af for-løen gælde at Da vi har antaget at a! (mod a a p n! n a p a!, giver regnereglerne for ongruens-relationer at (mod!! (mod p) Nu træes Fermat s lille teorem af stald For et vilårligt primtal p og et vilårligt tal b gælder at b p b (mod p) Hvis ydermere p og b er coprimes (dvs gcd( p, b) = ) gælder at b p (mod p) For b = er gcd( p, b) = (fordi p o er et primtal), og dermed gælder at p (mod p) Vi er nu lar til at etablere sammenhængen mellem a og p Da ( p )! er ( p ) =! for et eller andet tal Dermed gælder at a a a ( a! (mod p) ( p ) ) ( p ) (mod p) a (mod p) (mod p) (mod p) Og dermed (pr definition af ongruens): p ( a ) Når algoritmen har afsluttet sin for-løe er situationen altså denne: p n p' = n p ( a ) for visse '> 0 og "> 0 p" = a Hvis a > vil algoritmen således beregne d = gcd( a, = gcd( p", p') p > 3

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Da algoritmen beregner a som et tal mod n er 0 a < n og dermed a < n Derfor vil algoritmen altid (for a > ) beregne d = gcd( a, < n Med andre ord: Hvis blot a vil d være en fatorisering af n, såfremt forudsætningen () holder Hvis forudsætningen () ie er opfyldt, holder ( a ) Men der vil forsat gælde d < n p ie nødvendigvis, og vi an få beregnet = d Som Stinson også nævner, er d un divisor såfremt a nærmere, og om fremgangsmåden sriver han generelt at if we increase the size of drastically, say to n, then the algorithm is guaranteed to be successful Men Stinson behandler dog ie denne situation Men det vil vise sig, at man ie bare an øge størrelsen af og forvente samme resultat at Stinsons formulering af Pollard p- Allerede nu ses let, at hvis algoritmens for-løe én gang har beregnet a = for et givet, så giver det ie mening at øge størrelsen af Og det vil vise sig, at der findes produter af svage primtal, som Pollard p- ie an fatorisere uanset valget af 33 Imødegåelse af truslen fra Pollard p- Generelt sal man naturligvis altid vælge sit primtalsprodut som et produt af store primtal p Men man sal derudover vælge sit primtalsprodut så forudsætningen () for Pollard p- un vanseligt bliver opfyldt Det har store primtalsfatorer Esempelvis ved at lade p være et stært primtal gøres ved at vælge p så p (dvs at p an srives som p = p' + hvor p' er et primtal) Så bliver p fatoriseret til p = p' med netop en stor primtalsfator Men der findes fatis produter af svage primtal som Pollard p- ie an fatorisere overhovedet Dette redegøres der nærmere for senere 34 Simpel iterativ fastsættelse af Nielsen anviser en fremgangsmåde til at undgå at sulle give som input Man sal (groft sagt) blot udføre Pollard p- for =,4,8,,, indtil man har fået beregnet en fatorisering eller bliver for stor (dvs > n ) Eller at = a En umiddelbar fremgangsmåde til realisering af dette unne være denne:, dvs 4

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Pollard p- med iteration over input : n result failure while result = failure and result = Pollard p ( n, ) if Pollard p a = then return failure return result n do Fremgangsmåden er implementeret i ava-lasserne Pollard_p Stinson og Pollard_p Native etingelsen Pollard p a = sal forstås således: saf den seneste værdi af a som er beregnet af Pollard p -algoritmen, og sammenlign denne værdi med Testen på betingelsen er en optimering af hastigheden; når a = giver det ingen mening at fortsætte iterationen over Det ses, at fremgangsmåden vil resultere i én af følgende tre tilstande: result = failure fordi > n result = failure fordi a = result = gcd( a, 35 En simpel transformation af Stinson s algoritme Analysen af Pollard p- og Stinson s implementering viser at en algoritme også unne formuleres således: Pollard p- (native) input : n, a for to a a modn if a = then return failure d gcd( a, if d > then return d else return failure 5

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Fremgangsmåden er implementeret i ava-lassen Pollard_p Native I forhold til Stinsons algoritme er der lagt en test ind på hver beregning af a, og betingelsen d < n er fernet eregnes a = er der ingen grund til at fortsætte, og algoritmen melder fel Funtionelt opfører begge fremgangsmåder sig ens udadtil, forstået på den måde at de vil producere identis output hvis de gives identis input Men det vil vise sig, at testen på a = i fremgangsmåden Native danner grundlag for en væsentlig forbedring af evnen til at fatorisere Hastigheden blev målt på 0 produter af to 3 bits svage primtal: Stinson n p q Tid/se Resultat Native Tid/se Resultat 466863868647687 47483659 47483693 95 47483659 96 47483659 46686863645867 47483659 4748373 0 4748373 0 4748373 4668646060655637 47483659 47483743 96 47483659 96 47483659 466863907500043 47483659 47483777 0 47483777 0 0 47483777 0 466863963845767 47483659 4748383 95 47483659 96 47483659 4668649087379763 47483659 47483857 95 47483659 96 47483659 46686534869353 47483659 47483867 0 47483867 4 0 47483867 4 466865664359667 47483659 47483869 96 47483659 96 47483659 466865559830533 47483659 47483887 95 47483659 96 47483659 466865688304487 47483659 47483893 0 47483893 0 47483893 Samlet tidsforbrug 573 574 Notation: { = } = Der blev fatoriseret ud fra n alene, med iterativ fastsættelse af Målingerne viser ie nogen grund til at antage at fremgangsmåden beregner væsentligt langsommere (eller hurtigere) end Stinson s fremgangsmåde På den ene side vil for-løen og implementeringen stoppe med det samme når a beregnes til På den anden side er der lagt en estra test ind på a Men hveren potensopløftning afeller en test for en onstant-værdi an anses for specielt tunge operationer Den tunge beregning er a modn for a, og der vil være lige mange af disse beregninger i begge implementeringer 36 En hurtigere iterativ fastsættelse af Den tidligere besrevne fremgangsmåde til iterative beregning af har den egensab, at der foretages gentagne beregninger af potensopløftningen a a mod n, hvor starter fra hver gang der prøves med et nyt Nogle af disse beregninger an spares, idet et forsøg med et nyt an starte på grundlag af de værdier der blev beregnet for den forudgående værdi af Målt for alle 0 produter som en helhed 6

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Pollard p- () input : n a 0 while n do for 0 to a a modn if a = then return failure 0 + d gcd( a, if d > then return d return failure Fremgangsmåden er implementeret i ava-lassen Pollard_p Hastigheden blev målt for et antal serier 0 forsellige primtalsproduter Hver serie var dannet af svage primtal på hhv bits, 4 bits, 3 bits Tid/se bit 4 bit 6 bit 8 bit 30 bit 3 bit Native 8 6 75 89 574 4 3 8 47 30 /Native 50% 50% 50% 47% 53% 5% Der blev fatoriseret ud fra n alene, med iterativ fastsættelse af Det ses at der er opnået en redution af beregningstiden på ca 50% Det er som forventet, idet halveringen an forlares med at der ie laves overflødige gentagelser af potensopløftningen nemlig at beregningstiden i det væsentlige stammer fra potensopløftningen Lad a a mod n T Native betegne antal Antag potensopløftninger i fremgangsmåden Native, lad T betegne antal potensopløftninger i fremgangsmåden En grænse for værdien der beregner en fatorisering er givet ved = Så 0 ert = + + + og T = Dermed fås for store Native T T Native 0 0 + + + + + + i= 0 = = + = + i + = + + = Dvs at fremgangsmåden Native tager dobbelt så meget beregningstid som fremgangsmåden, svarende til at fremgangsmåden reducerer beregningstiden med ca 50% 7

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Funtionelt opfører begge fremgangsmåder sig ens udadtil, forstået på den måde at de vil producere identis output hvis de gives identis input 4 Analyse af Stinson s fremgangsmåde 4 Hvorfor antager a værdien? Hvorfor antager a værdien? Det orte svar er: Fordi Antag nemlig at Og dermed gælder for alle n = pq hvor p og q er forsellige primtal Så er ord( Z = φ( = ( p )( q ) x ( p )( q ) x Z n modn = n = pq hvor p og q er primtal og specielt ( p )( q ) modn = Med andre ord: På et eller andet tidspunt vil a nødvendigvis antage værdien 4 Findes der produter af svage primtal som ie an fatoriseres? Findes der produter af svage primtal som Pollard p- ie an fatorisere? Det orte svar er: Ja Pr definition af lcm (Least Common Multiple) gælder ( p ) lcm( p, q ) ( q ) lcm( p, q ) Af Fermats lille teorem an udledes, at hvis p er et primtal og gælder for alle x Z x n at lcm( p, q ) mod p = x lcm( p, q ) modq = ( p ) a så er x a mod p = Chinese Reminder teoremet indebærer at der nødvendigvis må gælde for alle og specielt x lcm( p, q ) lcm( p, q ) modn = modn = x Z n at Dermed Det betyder, at når lcm( p, q )! vil Pollard p- nødvendigvis beregne a = Hvis dette ser før ( p )! eller ( q )! vil algoritmen altid fele, uanset valg af Mere formelt udtryt: Hvis Hvis ( p ) a er a = ( p ) = p for et eller andet Dermed fås for vilårlige x at p p a p x ( x ) ( x) x mod p = x mod p = mod p = mod p = mod p = x x x hvor Fermats teorem blev benyttet i næstsidste lighedstegn 8

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 lcm( p, q )! ( p ) '! ( q ) '! for alle ' < vil algoritmen fele, uanset om vælges større Dette er esempelvis tilfældet for 5067797=64*377, svarende til n = 5067797, p = 64 og q = 377 Her bliver så p = 640 = 3 5 547 q = 376 = 9 547 lcm( p, q ) = 3 5 9 547 Det mindste (dvs første ) hvor lcm( p, q )! er = 47 Men der findes ingen '< 47 så ( p ) '! eller ( q ) '! Vi har altså her et = 47 så lcm( p, q )! ( p ) '! ( q ) '! for ' < Pollard p- algoritmen vil derfor fele, uanset hvordan vælges 43 Sal man bare gøre stor no? Sal man bare gøre stor no? Det orte svar er: Ne Det an være nyttigt at gøre større, men generelt er det ie siert at det hælper Dette er esempelvis tilfældet for 6948503=64*64, svarende til n = 6948503, p = 64 og q = 64 Her er p = 640 = 3 5 547 q = 640 = 4 5 8 lcm( p, q ) = 3 4 5 547 8 Vælges esempelvis = 547 vil algoritmen fatorisere (fordi ( p ) 547! ) Men vælges esempelvis = 8 vil algoritmen ie fatorisere (fordi lcm ( p, q ) 8! ) Esempelvis vil en iterativ forøgelse af fra af n = pq, såfremt til + betyde at algoritmen vil misse en fatorisering '! < gcd(, < n for < + + ' < og lcm ( p, q )! Med andre ord: Princippet at udføre Pollard p- for,4,8,,, = har sin pris, nemlig at dette ie beregner visse fatoriseringer, der ellers ville unne have været beregnet for mere heldige valg af 5 Optimering af Stinson s fremgangsmåde Hvad an man gøre når først algoritmen har beregnet a =? Svaret viser sig at være simpelt: Man an tage fat i den umiddelbart forudgående værdi af a og benytte den til beregningen d gcd( a, Forbløffende no bevirer dette en marant forbedring af algoritmens evne til at fatorisere 9

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Fremgangsmåden Native an således omformes til denne fremgangsmåde: input : n, a if d > then return d Pollard p- (a) for to aprevious a a a modn if a = then d gcd( a if d > then return d return failure d gcd( a, else return failure previous, Fremgangsmåden er implementeret i ava-lassen Pollard_p a 0

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Fremgangsmåden ( hurtigere iteration over ) an omformes til denne fremgangsmåde: input : n a 0 while Pollard p- (a) n do for 0 to aprevious a a a modn if a = then d gcd( aprevious if d > then return d return failure 0 + d gcd( a, if d > then return d return failure, Fremgangsmåden er implementeret i ava-lassen Pollard_p a Hastigheden og effetiviteten blev målt på 000 produter to 4 bits svage primtal: a Antal fatoriseringer 94 000 Funtionel effetivitet 94% 00% Tid/se 44 45 Der blev fatoriseret ud fra n alene, med iterativ fastsættelse af Funtionel effetivitet er beregnet som antal fatoriseringer divideret med antal produter 000 94 000 Det ses at fremgangsmåden a beregner ca 6% flere fatoriseringer end fremgangsmåden 45 44 45 Til gengæld tager den 04% længere tid Altså stort set samme tidsforbrug

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Der er egentlig ie noget overrasende i at der an findes en fatorisering ved at prøve med en tidligere værdi af a (f afsnittet Sal man bare gøre stor no? sal man blot undersøge tilstræeligt mange tidligere værdier) Det overrasende er at man an finde en fatorisering ved blot at tage den umiddelbart forudgående værdi af a 6 Hvorfor fungerer den optimerede fremgangsmåde? Hvorfor er fremgangsmåden a effetiv? Det orte svar er: Fordi de er for hvile Pollard p- fatoriserer udgør et interval 6 Intervallet af de er for hvile Pollard p- fatoriserer Lad i det følgende n og eller, n ) ( q, ) n betegne primtallene p og q og lad n = n n Dvs ( n, n ) = ( p, q) n = Lad endvidere ( p a[ ] = a! a [ ] = a a [ ] = a modn!! modn modn Så indebærer Chinese Reminder teoremet at a[ ] an udtryes ved a [ ], a [ ]) a [ ] = ( a[ ], a[ ]) ( Forløbet af en fatorisering med Pollard p- an dermed illustreres således: a [ ] a [ ] a [ ] min min max max + Notation: betegner en værdi der er forsellig fra Intervallet med de er for hvile Pollard p- fatoriserer er fastlagt ved, ] når der fatis findes min max [ min max og omvendt Dvs Dette gælder dog un Intervallet an være tomt, svarende til at der findes produter af svage primtal, som Pollard p- ie an fatorisere (som vist tidligere) 6 Argumentation At forløbet af en fatorisering fatis forløber som illustreret ovenfor bygger på nogle simple sammenhænge Disse er: a) a =, a < d < n

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 b) a, a d = c) a =, a = d = n d) a [ ] = a [ i] = i > For nemheds syld benyttes notationen a for [ ] a og a for [ ] a a) udtryer situationen hvor Pollard p- fatoriserer d) udtryer én gangaltid (dvs at når først a er beregnet tilvil a vedblive at få værdie a) a =, a < d < n Udgangspuntet er: Sæt = gcd( n, a ) a a modn = a modn ( a )mod n = 0 ( a )mod n 0 n ( a ) n ( a ) d Så gælder n d a d b), = Udgangspuntet er: a modn a modn ( a )mod n 0 ( a )mod n 0 n ( a ) n ( a ) Da n = n n er d = gcd( n, a ) = c) a =, a = d = n Udgangspuntet er: a modn = a modn = ( a )mod n = 0 ( a )mod n = 0 n ( a ) n ( a ) d Da n n Dermed fås n > Da d = gcd( n, a ) er n d og n d og dermed d = n n a er d < n og ( ) 3

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 d) a [ ] = a[ i] = i > Udgangspuntet er (for =, ): a! modn = Så bliver for i > i! i! i!! = i!!!!! a [i] = a modn a modn = ( a ) modn = modn = 63 Derfor fungerer den optimerede fremgangsmåde Det ses nu hvorfor fremgangsmåden a fungerer Når fremgangsmåden har beregnet a = svarer det til at har værdien, Fremgangsmåden tager den forudgående værdi af a, nemlig a ] og max + beregner d ud fra denne værdi Og det er netop en værdi som giver en fatorisering (såfremt ) 64 Esempler på intervaller [ max I det følgende vises nogle esempler på hvordan intervallet an være opbygget Alle esempler er produceret og verificeret med JUnit3-lassen AnalyzeInterval Tilfældet 48877=053*089 (et interval af længden 0): Interval = { 9 8} a [ ] a [ ] a [ ] 6 60 548 5 7 378365 63 56 8 8369 566 045 9 7867 04 0 3349 88 8334 457 3946 64 3 763339 68 4 3946 64 5 36995 3 6 3785 76 7 9075 8 498 045 9 30 Tilfældet 703043=30*3 (et interval af længden ): Interval = { = 8} a [ ] a [ ] a [ ] 5 3578464 640 790 6 660787 857 76535 7 7709754 4864 05390 8 4304439 58 9 0 min max 4

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Tilfældet 6948503=64*64 (et større interval): a [ ] a [ ] a [ ] 544 76436033 37 8809 545 6860706 4966 5776 546 3030636 530 949 547 070477 509 548 589464 688 88 0809958 636 89 993443 9665 80 569007 383 8 8 5

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Interval = { 547 80} Tilfældet for 5067797=64*377 (hvor Pollard p- feler): Interval = Ø a [ ] a [ ] a [ ] 544 3765384 37 8889 545 7689358 4966 989 546 356540505 530 406 547 548 7 Et andet optimering af Stinson s fremgangsmåde 7 Fremgangsmåden X De foregående undersøgelser viser at en fremgangsmåde også an formuleres således: input : n a Pollard p- (X) while a > do a previous a a a mod n if checn, a, then d gcd( a previous, if d > then return d + d gcd( a, if d > then return d else return previous failure Fremgangsmåden er implementeret i ava-lassen Pollard_p X Notation: fatoriserer chec, n a, er en test på om der sal tees på om vi har ramt intervallet hvor Pollard p- Den afgørende forsel i forhold til Stinson s fremgangsmåde er at der hele tiden tees på om der er fundet en andidat til en fator Med Stinson s fremgangsmåde risierer man bogstavelig talt at syde forbi målet, fordi der her un tees én andidat En anden fordel er at fremgangsmåden samler Stinson s 6

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 fremgangsmåde og gættet på rette interval i ét hele Og at fremgangsmåden tydeliggør og fouserer det forhåndsvalg der sal træffes, nemlig gættet på rette interval 7 Strategier for chec Strategien for hvornår testen chec n, a, sal give true er et valg man sal træffe Helt i lighed med fremgangsmåden, hvor der tees for =,4,8,,, Så nissen flytter med man sal stadig træffe et forhåndsvalg På den anden side giver fremgangsmåden mulighed for en meget flesibel implementering af forsellige strategier Java-implementeringen benytter derfor et Strategy Design Pattern 3 3 esrevet nærmere i Erich Gamma et al: Design Patterns, Elements of Reusable Obect-Oriented Software, 995, p 35 7

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 itlength En strategi for chec n, a, an være at testen sal give true når bitlængden af er øget med Så vil fremgangsmåden i realiteten opføre sig som fremgangsmåden Strategien er implementeret med ava-lassen Pollard_p XitLengthChecStrategy NoChec I princippet unne man vælge at testen altid sal give false Så vil fremgangsmåden stadig beregne det samme, men an tage væsentligt længe tid, fordi det først opdages til sidst at vi har ramt intervallet hvor Pollard p- fatoriserer Hvis vi havde en forhåndsviden om at det pågældende interval er ort, er det oplagt at testen altid sal give false Problemet er at denne viden har man ie Helt svarende til at man ie har viden til at vælge det præcise i Stinson s fremgangsmåde Strategien er implementeret med ava-lassen Pollard_p XNoChecStrategy oundchec Man an vælge en strategi der giver true når bitlængden af er overstiger en vis grænse Så vil fremgangsmåden i realiteten opføre sig som fremgangsmåden Native, bortset fra at iterationen fortsættes hvis er sat for lavt Strategien er implementeret med ava-lassen Pollard_p XoundChecStrategy AnalyzeInterval a a mod n Man an vælge en strategi der analyserer hvert sridt i udvilingen Fremgangsmåden an så bruges til at producere de esempler der er i afsnittet Esempler på intervaller Strategien er implementeret med ava-lassen AnalyzeIntervalStrategy, og esemplerne i afsnittet er produceret med JUnit3-lassen AnalyzeInterval 73 Hastighed Hastigheden i forhold til fremgangsmåden a blev målt på 0 produter af to 8 bits svage primtal: n p q a X(itLengthChec) X(NoChec) Tid/se Tid/se Tid/se 804408445956 347757 347773 0 0 4 8044094690703 347757 347779 4 804409553377 347757 34778 0 0 4 80449356843 347757 347799 0 0 4 8044468787 347757 347803 4 4 4 8044554830 347757 34783 5 5 5 804436499833 347757 347869 4 4 443 80444004889 347757 347877 0 0 4 804445477600 347757 347893 4 4 44 804477689569 347757 34797 3 3 4 Samlet tidsforbrug 4 80 8 997 Der blev fatoriseret ud fra n alene, med iterativ fastsættelse af Som ventet er der ingen væsentlig forsel i hastigheden på fremgangsmåderne a og X(itLengthChec) Og fremgangsmåden X(NoChec) tager som ventet længere tid Der er tale om en væsentlig øget tidsforbrug, som illustrerer nødvendigheden af en strategi for 8 Sammenfatning chec, n, a Det er vist, at Stinson s formulering simpelt an modificeres så den fatoriserer bedre når beregnes iterativt 4 Målt for alle 0 produter som en helhed 8

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Det er vist, at de er for hvile Pollard p- fatoriserer udgør et interval, og der er fundet et udtry for den øvre grænse på dette interval Specielt viser dette, at man generelt ie an øge værdien af for at få Stinsons formulering til at fatorisere Det er vist at der findes produter svage primtal som ie an fatoriseres af Stinson s fremgangsmåde, og det er besrevet hvordan disse an beregnes ud fra endsab til produtets primtalsfatorer Der er besrevet en fremgangsmåde der (på grundlag af Stinson s formulering) på én gang favner både Stinson s fremgangsmåde (der forudsætter angivelse af et ) og en situation hvor man ie angiver et Denne fremgangsmåde er lige så hurtig som Stinson s fremgangsmåde, samtidig med at den fatoriserer bedre Fremgangsmåden fordrer ie angivelse at et, men derimod et bud på intervallet af gode er Selvom målet med undersøgelsen ie har været at lave hurtige implementeringer, er det nærliggende at igge lidt på hvordan implementeringerne arter sig i en lidt større sammenhæng Derfor afsluttes med en hastighedsmåling på tre udformninger af Pollard p-, nemlig Stinson s, X og en udformning lavet af Paolo Ardoino Paul Ardoino har implementeret Pollard p- på en helt anden måde end Stinson, og angiver en benchmar af to lidt større produter af stære primtal (http://ardoinocom/9-maths-factoring-pollard/ refereret fra http://enwiipediaorg/wii/pollard%7s_p_- algorithm) Ardoino s egen tidsmåling 5 Min implement af Ardoino Stinson X (itlengthc hec) n p q Tid/se Tid/se Tid/se Tid/se 536506680463033 5337307 9934773599 485 8 4 336973876607890 0458747 647649743 35 53 380 975 Samlet tidsforbrug 6 374 998 408 089 Der blev fatoriseret ud fra n alene, med iterativ fastsættelse af Det ses at Ardoino s implementering an være marant hurtigere Dette unne tyde på, at sal Pollard p- optimeres hastighedsmæssigt, sal man no igge på andre udformninger af Pollard p- end den Stinson formulerer (og som X er baseret på) At X er hurtigere end Stinson s fremgangsmåde bør ie opfattes som at den hastighedsmæssigt er bedre Præmissen for Stinson s formulering er angivelse af en specifi øvre grænse, og denne præmis er ie opfyldt af ovenstående måling (fordi den fastsætter iterativt) Opfyldte man præmissen og angav en god, ville Stinson s algoritme være lige så hurtig som X Men man an sige at X virer som en oplagt og ligefrem overbygning på Stinson s formulering, der udstiller en essentiel egensab ved de værdier af for hvile Stinson s formulering vil fatorisere 9 Appendix: Generering af primtalsproduter til brug i undersøgelsen Implementeringerne er afprøvet med produter af svage primtal Med et svagt primtal menes et primtal p der ie er stært Et stært primtal p er et primtal der an srives som p = p' + hvor p ' er et primtal Det giver ingen egentlig mening at undersøge tal der ie er produter af primtal, eller som er produter af stære primtal Fordi Pollard p- her på forhånd vides at fele Der er un undersøgt primtalsproduter af primtal med samme bitlængde For at have et enelt og ensartet grundlag for undersøgelsen har eg fravalgt primtalsproduter hvor un det ene primtal i produtet er svagt, og primtalsproduter med forsellig bitlængde af primtallene Der beregnes ie produter af ens primtal, idet 5 Hastigheden af Ardoino s algoritme an variere væsentligt fra måling til måling (på det samme produt) Dette syldes at hans algoritme benytter et tilfældigt a som input til gcd 6 Målt for begge produter som en helhed 9

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 udgangspuntet for undersøgelsen er primtalsproduter af forsellige primtal Det afgøres om et tal er et 00 primtal med en sierhed på Algoritmen der danner primtal er denne: Generering af primtal af længdel input : l n loop l + if n is prime then n if is prime then output n ( as strong prime) else output n ( as wea prime) n n + Fremgangsmåden er implementeret i ava-lassen GeneratePrimeProducts Altså en meget simpel algoritme Men den er tilstræelig I forhold til fatorisering af de resulterende primtalsproduter er tidsforbruget for denne algoritme marginalt Algoritmen der danner primtalsproduter benytter outputtet fra primtalsalgoritmen som input er simpel: Generering af primtalsproduter input : list ( of primes) for i to # list for i + to # list output list i list Fremgangsmåden er implementeret i ava-lassen GeneratePrimeProducts Notation: # list betegner antallet af elementer i list, list i betegner det i te element i list, og betegner sædvanlig multipliation 0

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 0 Appendix: Implementering i ava Fremgangsmåderne til fatorisering er implementeret med disse ava-interfaces og lasser: Pollard p- Stinson Pollard p- Native <<Int erface>> Factoring fac tor( Pollard p- Pollard p- a <<Int erface>> Pollard p- fac tor(n,b) Pollard p- Ardoino Common Pollard p- X <<Interface>> Strategy chec(n,a,) NoChec Strategy itlengthchecstrategy oundchecstrategy AnalyzeIntervalStrategy

En esperimentel undersøgelse af fatoriseringsalgoritmen Pollard p- 00009 Interface Funtion Factoring The essential interface for factoring a number in general Pollard_p_ The essential interface for factoring a number by means of Pollard p- Strategy The interface for chec n, a, in the X implementation Klasse Funtion Pollard_p Stinson Stinson's algorithm for factoring using Pollard p- Pollard_p Native A slight modification of Stinson's algorithm Computes same results as Stinson's algorithm Pollard_p ased on Stinson's algorithm is iteratively computed Pollard_p a ased on Stinson's algorithm may be iteratively computed If a= attempt to factor from the previous value of a Pollard_p X An alternative version of Stinson s algorithm Pollard_p Ardoino Factoring using Paolo Ardoino's implementation Common Trivial factoring Contains also (not very fast) helper methods to be used in analysis of implementations: - computepower (computes from a number of the form ^ and is an integer) - factorize (computes all factors of a number - factorizeasprimepowers (computes all prime power factors of a number - factorsasstring (returns a "pretty" string representation of a list of factors) - hasmultiplefactors (determines if a list of factors contains multiple factors) - lcm (computes Least Common Multiple) NoChecStrategy A chec n, a, which always returns false itlengthchecstrategy A chec n, a, which returns true when the bit length of has increased oundchecstrategy A chec n, a, which returns true when has reached a specific bound AnalyzeIntervalStrategy A chec n, a, which analyzes the iteration a a mod n (displays the values of for which the algoritms factors) Afprøvninger og undersøgelser af fremgangsmåderne er implementeret med følgende JUnit3-lasser: Klasse enchmar TestAll TestCommon TestCaseProect IntervalExamples Funtion enchmaring and performance measurements Verification of implementations and findings Verification of class Common and its methods A proect specific extension of the JUnit3 TestCase Examples of intervals of 's for which Pollard p- factors De afprøvede fremgangsmåder er implementeret således: Stinson Native a a X Pollard_p Stinson x Pollard_p Native x Pollard_p x Pollard_p a x x Pollard_p X x