Opgeloste en onopgeloste mysteries in de getaltheorie Jan De Beule, Tom De Medts en Jeroen Demeyer Voorwoord 1 Voorwoord Beste leerling, Deze nota’s zijn bedoeld als begeleiding bij 6 lesuren “Opgeloste en onopgeloste mysteries in de getaltheorie”, die gegeven kunnen worden in de lessen wiskunde in de derde graad van het secundair onderwijs, al dan niet in de vrije ruimte voorzien in het leerplan van de derde graad van het vrij secundair onderwijs. Getaltheorie is een bloeiende tak van de wiskunde, met wortels in een ver verleden, met vertakkingen naar andere gebieden in de wiskunde, en met zeer fundamentele open vragen waar vele wiskundigen vandaag een antwoord op trachten te vinden. Getaltheorie is daarenboven ook een mooi voorbeeld van hoe wiskunde directe toepassingen heeft. Tenslotte is het een onderwerp waar niet veel voorkennis voor nodig is om de beginselen aan te vatten en met elementaire technieken interessante resultaten bereikt kunnen worden. Getaltheorie is dus een zeer dankbaar onderwerp om aan iedereen die het wil, duidelijk te maken waar het in wiskunde om draait, en wat we allemaal met wiskunde kunnen doen. Omdat we de onderwerpen toegankelijk willen maken, zijn vele voorbeelden en oefeningen opgenomen in deze nota’s. De lesgever of leerkracht zal een aantal oefeningen en voorbeelden behandelen in de lessen. De oefeningen en voorbeelden zijn dikwijls eenvoudige probleempjes die, eens opgelost, de theorie op een aanschouwelijke wijze moeten illustreren. We hebben echter ook belang gehecht aan het bewijzen van een aantal stellingen. Wiskunde is immers de wetenschap bij uitstek waarin uitspraken enkel na het geven van een correct bewijs, als waar worden aanvaard. Om duidelijk te maken dat wiskunde niet “af” is, hebben we op diverse plaatsen open vragen uit de getaltheorie vermeld. Deze open vragen zijn allemaal gemakkelijk te begrijpen, maar zijn tot op vandaag nog steeds niet opgelost. De leerkracht of lesgever zal eventueel, afhankelijk van de beschikbare tijd, een selectie maken uit de aangeboden leerstof. Deze nota’s zijn niet bedoeld als zelfstudiecursus, maar zouden wel volledig begrijpbaar moeten zijn na de lessen. Jan De Beule Tom De Medts Jeroen Demeyer Inhoudsopgave 2 Inhoudsopgave 1 Priemgetallen en deelbaarheid 1.1 Enkele onopgeloste problemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 5 2 De grootste gemene deler 7 3 Modulorekenen 9 3.1 Inverses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4 Eenvoudige toepassingen van modulorekenen 14 4.1 Voorwaarden voor deelbaarheid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2 Een toernooi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 5 De stelling van Wilson en de kleine stelling van Fermat 17 5.1 Een karakterisering van priemgetallen en tweelingpriemen . . . . . . . . . . . . . 18 6 De Chinese reststelling 19 7 Cryptografie 21 7.1 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 7.2 RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 8 Factorisatie van getallen 23 8.1 De kwadratische zeef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1 Priemgetallen en deelbaarheid 1 3 Priemgetallen en deelbaarheid In de getaltheorie draait alles om gehele getallen. Definitie 1.1 Z is de verzameling van de gehele getallen: Z = {. . . , −3, −2, −1, 0, 1, 2, 3, . . . } . N is de verzameling van de natuurlijke getallen, 0 inbegrepen: N = {0, 1, 2, 3, . . . } . Als we twee gehele getallen met elkaar optellen, vermenigvuldigen, of aftrekken van elkaar, is het resultaat steeds weer een geheel getal, maar dat geldt niet voor de deling. Vandaar de volgende definitie. Definitie 1.2 We zeggen dat een geheel getal a deelbaar is door een geheel getal b als er een geheel getal q bestaat zodat a = bq . We zeggen dan ook dat b een deler van a is, en we noteren dit als b | a . Als b 6= 0, dan is a deelbaar door b als en slechts als a /b een geheel getal is. Ook als a niet deelbaar is door b is het zinvol om de deling uit te voeren, maar dan verkrijgen we een rest. Zo’n deling met rest wordt een Euclidische deling genoemd. Definitie 1.3 Als a en b gehele getallen zijn met b ≥ 1, dan bestaan er unieke gehele getallen q en r met 0 ≤ r < b zodat a = bq + r . Deze getallen worden respectievelijk het quotiënt en de rest genoemd van de deling van a door b . Van fundamenteel belang in de getaltheorie is de studie van priemgetallen. Definitie 1.4 Een natuurlijk getal p wordt een priemgetal genoemd als het precies twee verschillende positieve delers heeft, namelijk 1 en zichzelf. We benadrukken dat 1 dus geen priemgetal is. 1 Priemgetallen en deelbaarheid 4 Voorbeeld 1.5 De kleinste priemgetallen zijn 2, 3, 5, 7, 11, 13, 17, 19, . . . Het grootste gekende priemgetal is 243 112 609 − 1, een getal van maar liefst 12 978 189 cijfers lang. Dit record dateert van 2008. Misschien vraag je je wel af of er zoiets bestaat als een “grootste priemgetal”. Het is niet moeilijk om in te zien dat er geen grootste priemgetal is; we zullen dit dadelijk nagaan. Het is echter wel moeilijk om expliciet grote priemgetallen te “construeren”, of nog, om na te gaan of een gegeven getal een priemgetal is of niet. En dat is wat we bedoelen met het record dat we in Voorbeeld 1.5 aangehaald hebben: dit is het grootste getal waarvan we weten dat het een priemgetal is, ook al weten we met zekerheid dat er (oneindig veel) grotere priemgetallen bestaan. Stelling 1.6 Er bestaan oneindig veel priemgetallen. Bewijs. We bewijzen dit uit het ongerijmde. Veronderstel dus dat er wel een grootste priemgetal zou bestaan, en noem dat getal p . Beschouw nu alle priemgetallen kleiner dan of gelijk aan p , en noem die p 1 , p 2 , . . . , p k = p . (Dus p 1 = 2, p 2 = 3, enzovoort; p is precies het k -de priemgetal.) Wegens onze veronderstelling is elk priemgetal dus gelijk aan één van deze getallen p i . Stel nu N = p 1p 2 · · · p k + 1 ; dan is N voor geen enkele i ∈ {1, . . . , k } deelbaar door p i . Wegens onze veronderstelling is N dus door geen enkel priemgetal deelbaar. Dit kan uiteraard niet; bijgevolg is onze veronderstelling verkeerd, en dus bestaan er oneindig veel priemgetallen. Eén van de redenen waarom priemgetallen zo belangrijk zijn, is het feit dat het in zekere zin de “bouwstenen” zijn voor alle getallen. We kunnen elk getal factoriseren of ontbinden in priemfactoren, op een unieke manier. Op die wijze kunnen heel wat problemen in de getaltheorie vaak herleid worden tot problemen over priemgetallen. Stelling 1.7 Elk natuurlijk getal verschillend van 0 kan op unieke wijze geschreven worden als het product van priemgetallen. Concreet bestaan er dus voor elk getal n ∈ N \ {0} unieke priemgetallen p 1 < p 2 < · · · < p k en unieke natuurlijke getallen αi verschillend van 0 zodat α n = p 1α1 · p 2α2 · . . . · p k k . We hebben daarnet vermeld dat het niet gemakkelijk is om na te gaan of een gegeven getal een priemgetal is. Het is nóg moeilijker om een gegeven getal op efficiënte wijze te factoriseren. We gaan daar in Hoofdstuk 8 wat dieper op in. 1 Priemgetallen en deelbaarheid 1.1 5 Enkele onopgeloste problemen Misschien vraag je je nu af of er een formule bestaat die je kan zeggen hoe groot het miljoenste priemgetal is. Een exacte formule daarvoor bestaat niet. (Natuurlijk bestaat er wel een algoritme: je kan immers de eerste 1 miljoen priemgetallen berekenen. Efficiënt is dit uiteraard niet.) Maar merkwaardig is dat we wel goed kunnen inschatten hoe groot het miljoenste priemgetal bij benadering is. We weten dus ook bij benadering hoeveel priemgetallen er zijn die kleiner zijn dan een gegeven getal. Stelling 1.8 — Prime number theorem Noteer het n-de priemgetal als p n , en stel π(x ) gelijk aan het aantal priemgetallen kleiner dan of gelijk aan x . Dan is bij benadering π(x ) ≈ x , ln(x ) p n ≈ n ln(n ) . (ln(x ) is ongeveer 2, 3 maal het aantal cijfers van x , bijvoorbeeld ln(98716) ≈ 11, 5.) We kunnen de waarde van π(x ) nog nauwkeuriger afschatten met behulp van een zogenaamde logaritmische integraal. Definitie 1.9 Voor elke x ∈ R met x ≥ 2 stellen we x Z Li(x ) = 2 1 dt . ln(t ) Stelling 1.10 Stel π(x ) gelijk aan het aantal priemgetallen kleiner dan of gelijk aan x . Dan is bij benadering π(x ) ≈ Li(x ) . Voorbeeld 1.11 Stel x = 1 000 000. Dan is π(x ) = 78 498 , x / ln(x ) = 72 382, 41 . . . , Li(x ) = 78 626, 50 . . . . 1 Priemgetallen en deelbaarheid 6 Interessant is dat we wel weten dat dit niet zomaar een goede benadering is, maar een bijzonder goede benadering, zoals blijkt uit het volgende vermoeden! Vermoeden 1.12 Voor alle x ≥ 3 geldt | π(x ) − Li(x ) | ≤ p x ln(x ) . Dit is niet zomaar een vermoeden: het is equivalent met de beroemde Riemannhypothese. Dit is één van de Clay Math Institute Millenium problemen, waarmee je 1 miljoen dollar kan winnen als je er één oplost. Wellicht één van de redenen waarom priemgetallen zo tot de (wiskundige) verbeelding spreken, is het feit dat er nog heel wat onopgeloste problemen zijn over priemgetallen, die zeer eenvoudig te formuleren zijn. We vermelden er nog twee. Vermoeden 1.13 — Vermoeden van Goldbach Elk even getal groter dan 2 is te schrijven als de som van twee priemgetallen. Voorbeeld 1.14 4=2+2 10 = 3 + 7 = 5 + 5 6=3+3 12 = 5 + 7 8=3+5 14 = 3 + 11 = 7 + 7 Men heeft dit met de computer gecontroleerd tot aan 1018 , dus het ziet er “zeer waarschijnlijk” uit dat dit vermoeden wel waar is. Maar over de reden tasten we nog steeds in het duister. . . Vermoeden 1.15 — Twin prime conjecture Er bestaan oneindig veel tweelingpriemen: dit zijn paren natuurlijke getallen {p, p + 2} waarvoor zowel p als p + 2 priem zijn. Voorbeeld 1.16 5=3+2 19 = 17 + 2 7=5+2 31 = 29 + 2 13 = 11 + 2 43 = 41 + 2 Ter informatie: er zijn 808 675 888 577 436 ≈ 8 · 1014 tweelingpriemen kleiner dan 1018 . 2 De grootste gemene deler 2 7 De grootste gemene deler Gegeven twee gehele getallen a en b . Het is duidelijk dat zowel −1 als +1 een deler is van a en b . De verzameling van alle gemeenschappelijke delers van a en b is dus nooit ledig. We noemen het grootste element uit deze verzameling de grootste gemene deler van a en b . Aangezien deze definitie niet werkt voor ggd(0, 0), definiëren we ggd(0, 0) = 0. Voorbeeld 2.1 Stel a = 126 en b = 35. De verzameling van gemeenschappelijke delers is {−7, −1, 1, 7}. De grootste gemene deler van 126 en 35 is dus 7. Zoals je zelf merkt als je bovenstaand voorbeeld controleert, zie je dat het opstellen van de verzameling van gemeenschappelijke delers om daaruit de grootste te halen, nogal omslachtig is om de grootste gemene deler te bepalen. We hebben gezien dat voor twee gehele getallen a en b , we steeds elementen q en r kunnen vinden zodat a = bq + r met 0 ≤ r < b . Oefening 2.2 Toon aan dat ggd(a ,b ) = ggd(b, r ) als a = bq +r . Toon ook aan dat uit de definitie van grootste gemene deler volgt dat ggd(a , 0) = a voor alle a ∈ Z. We hernemen voorbeeld 2.1. Als we 126 door 35 delen, vinden we 126 = 3 · 35 + 21. Dus ggd(126, 35) = ggd(35, 21). Het is inderdaad gemakkelijker om de ggd(35, 21) te bepalen dan die van 126 en 35. Maar niets weerhoudt ons om de deling met rest te herhalen, tot de rest 0 wordt. 126 = 3 · 35 + 21 35 = 1 · 21 + 14 21 = 1 · 14 + 7 14 = 2 · 7 Uit het tweede deel van oefening 2.2 volgt dat ggd(7, 0) = 7, en we besluiten dat ggd(126, 35) = 7. We merken nog op dat het herhaaldelijk toepassen van de deling met rest voor elke twee gehelen getallen a en b wel degelijk na een eindig aantal stappen een rest gelijk aan 0 zal opleveren. Daarmee hebben we in feite een algoritme beschreven. Dit algoritme, om de grootste gemene deler van twee getallen te bepalen, wordt het algoritme van Euclides genoemd. Oefening 2.3 Gebruik het algoritme van Euclides om ggd(204, 96) en ggd(351, 320) te bepalen. 2 De grootste gemene deler 8 We hernemen het voorbeeld waarin we ggd(126, 35) bepalen. Uit de opeenvolgende uitvoeringen van de deling met rest, halen we de volgende gelijkheden: ggd(126, 35) = 7 = 21 − 1 · 14 = 21 − (35 − 1 · 21) = 2 · 21 − 1 · 35 = 2 · (126 − 3 · 35) − 1 · 35 = 2 · 126 − 7 · 35 We besluiten dat ggd(126, 35) = 2 · 126 − 7 · 35. De grootste gemene deler is dus te schrijven als een lineaire combinatie van 126 en 35. Dit principe geldt algemeen en leidt tot volgende stelling: Stelling 2.4 — Stelling van Bézout Gegeven twee gehele getallen a en b , dan bestaan er gehele getallen x en y zodat a x + b y = ggd(a ,b ). Zulke getallen x en y waarvoor a x + b y = ggd(a ,b ) worden Bézoutcoëfficiënten van a en b genoemd. Het algoritme hierboven om die coëfficiënten te bepalen heet het uitgebreid algoritme van Euclides. Oefening 2.5 Gebruik de resultaten uit de berekening van ggd(204, 96) opnieuw om de Bézoutcoëfficiënten van 204 en 96 te bepalen. Doe hetzelfde voor 351 en 320. Het algoritme van Euclides heeft nog een andere toepassing. Beschouw de vergelijking 15x + 21y = 3 . (1) Een dergelijke vergelijking wordt ook wel een lineaire diophantische vergelijking genoemd. We willen onderzoeken onder welke voorwaarden er een oplossing bestaat voor deze vergelijking. Stel dus dat er twee gehele getallen x 0 en y 0 bestaan waarvoor 15x 0 + 21y 0 = 3. Noem c = ggd(15, 21) = 3. Uit het bestaan van de oplossing (x 0 , y 0 ) volgt dat c een deler moet zijn van het rechterlid van vergelijking (1). In dit geval zien we dat het rechterlid juist gelijk is aan c . We kunnen dan met het algoritme van Euclides een oplossing bepalen. Immers, met het algoritme van Euclides kunnen we een stel Bézoutcoëfficiënten van 15 en 21 bepalen, we vinden dat 3 · 15 − 2 · 21 = 3. De getallen (3, −2) zijn dus een oplossing van de vergelijking. We beschouwen nu de vergelijking 15x + 21y = 6 . (2) Ook deze vergelijking kunnen we oplossen met behulp van het algoritme van Euclides. We weten dat de Bézoutcoëfficiënten (3, −2) een oplossing zijn van vergelijking (1). Aangezien het rechterlid van vergelijking (2) een veelvoud is van ggd(15, 21), volstaat het om de 3 Modulorekenen 9 Bézoutcoëfficiënten (3, −2) met 2 te vermenigvuldigen om een oplossing te bekomen van vergelijking (2). In feite hebben we de volgende stelling bewezen. Stelling 2.6 De vergelijking ax +by = c heeft een oplossing als en slechts als ggd(a ,b ) | c . Oefening 2.7 Bepaal, indien mogelijk, een oplossing van 15x + 35y = 6. Oefening 2.8 Bepaal, indien mogelijk, een oplossing van 12x + 77y = 10. 3 Modulorekenen Beschouw twee oneven gehele getallen, bijvoorbeeld 5 en 7. Het is duidelijk dat het verschil van 5 en 7 een even getal is, dus deelbaar door 2. Ook het verschil van twee even getallen is een even getal. Het verschil van een oneven en een even getal daarentegen, is altijd oneven, en dus niet deelbaar door twee. Deelbaarheid van het verschil van twee getallen door 2 is dus een eigenschap die waar is voor elke twee even getallen, en elke twee oneven getallen, maar niet voor een even en een oneven getal. We veralgemenen dit als volgt. Definitie 3.1 Stel m 6= 0 een naturlijk getal en a en b twee gehele getallen, dan is a congruent aan b modulo m als en slechts als m | (a − b ). Als a congruent is aan b modulo m , dan noteren we a ≡ b (mod m ). 3 Modulorekenen 10 Oefening 3.2 Toon aan dat a ≡ b (mod m ) als en slechts als er een geheel getal k bestaat waarvoor a = b +km. Stelling 3.3 Stel m een positief geheel getal. “Congruent modulo m ” is een relatie met de volgende eigenschappen: (i) Reflexiviteit: Voor alle a ∈ Z geldt a ≡ a (mod m ). (ii) Symmetrie: Voor alle a ,b ∈ Z geldt: als a ≡ b (mod m ), dan b ≡ a (mod m ). (iii) Transitiviteit: Voor ale a ,b, c ∈ Z geldt: als a ≡ b (mod m ) en b ≡ c (mod m ), dan a ≡ c (mod m ). Deze stelling toont eigenlijk aan dat de verzameling van de gehele getallen voor elke positieve m 6= 0 gepartitioneerd wordt in m verschillende congruentieklassen modulo m . Elke klasse bevat juist die gehele getallen die congruent zijn met elkaar modulo m . Voor m = 2 bekomen we de vertrouwde indeling in even en oneven gehele getallen. Voor bijvoorbeeld m = 3 krijgen we 3 congruentieklassen: {. . . , −6, −3, 0, 3, 6, . . . }, {. . . , −5, −2, 1, 4, 7, . . . } en {. . . , −4, −1, 2, 5, 8, . . . }. Neem nu een geheel getal a en m 6= 0 een natuurlijk getal. Deling met rest van a door m levert altijd a = q m + r met 0 ≤ r < m . Hieruit volgt dat a ≡ r (mod m ). Er bestaat dus altijd juist één r ∈ {0, 1, . . . , m − 1} waarvoor a ≡ r (mod m ). Definitie 3.4 Z/m Z (lees: Z modulo m Z) staat voor de verzameling {0, 1, . . . , m − 1}. Wat zijn we nu gebaat bij de indeling van de gehele getallen in congruentieklassen modulo m ? Deze vraag zullen we pas kunnen beantwoorden als we kunnen aantonen dat we kunnen rekenen op een zinvolle wijze met congruentieklassen modulo m . 3 Modulorekenen 11 Voorbeeld 3.5 • Ga na dat 61+7 ≡ 1+7 (mod 12). Tijdens het berekenen van 61+7 mod 12 kunnen we dus eerst 61 reduceren modulo 12 voor we de berekening uitvoeren. We kunnen nog meer, ga na dat 61 + 31 ≡ 1 + 7 (mod 12). Ook nu kunnen we de berekening modulo 12 uitvoeren door eerst de termen te reduceren modulo 12. • Ga na dat 14 · 11 ≡ 2 · 11 (mod 12). De conclusie is analoog, we kunnen voor de berekening 14 ≡ 2 (mod 12) gebruiken. • Als we dus 11·(8+9) (mod 12) willen uitrekenen, moeten we niet 11·17 uitrekenen, we mogen 11 · 5 uitrekenen aangezien 5 ≡ 17 (mod 12). Het resultaat is dus 11 · (8 + 9) ≡ 11 · 17 ≡ 11 · 5 ≡ 55 ≡ 7 (mod 12). We mogen zelfs negatieve getallen gebruiken, dus de volgende berekening is ook correct: 11 · (8 + 9) ≡ (−1) · 5 ≡ −5 ≡ 7 (mod 12). Als we dus een berekening doen modulo een bepaald getal m 6= 0, dan mogen we de tussenresultaten ook al modulo m uitrekenen. Let wel op dat dit alleen maar geldt als we enkel optellen, aftrekken en vermenigvuldigen. Verder zullen we zien wat er gebeurt met delingen. De observaties uit voorbeeld 3.5 beschrijven we formeel in de volgende stelling. Stelling 3.6 Stel dat m 6= 0 een positief geheel getal is. Voor a ,b, c en d gehele getallen, met a ≡ b (mod m ) en c ≡ d (mod m ) geldt (i) a + c ≡ b + d (mod m ); (ii) a − c ≡ b − d (mod m ); (iii) a c ≡ b d (mod m ). Bewijs. Omdat a ≡ b (mod m ), geldt m | (a −b ), er bestaat dus een geheel getal k waarvoor (a − b ) = k · m . (3) Omdat c ≡ d (mod m ), geldt m | (c − d ), er bestaat dus een geheel getal l waarvoor (c − d ) = l · m . (4) We bewijzen nu de stelling. (i) Uit (3) en (4) volgt dat (a + c ) − (b + d ) = (k + l ) · m , dus m | (a + c ) − (b + d ), dus a + c ≡ b + d (mod m ). (ii) Uit (3) en (4) volgt dat (a − c ) − (b − d ) = (k − l ) · m , dus m | (a − c ) − (b − d ), dus a − c ≡ b − d (mod m ). (iii) We herschrijven a c − b d als a c − b c + b c − b d = (a − b ) · c + (c − d ) · b = (k c + l b )m . Dus m | (a c − b d ), waaruit a c ≡ b d (mod m ). 3 Modulorekenen 3.1 12 Inverses We hebben net gezien dat we gemakkelijk kunnen rekenen met +, − of · modulo m . Bij het delen krijgen we echter moeilijkheden: Voorbeeld 3.7 22 ≡ 4 (mod 6), 22/2 = 11 en 4/2 = 2. We stellen echter vast dat 11 6≡ 2 (mod 6). Om dit probleem te onderzoeken, zullen we de vermenigvuldiging modulo m nader bekijken. We beginnen met een eenvoudig voorbeeld. Stel m = 6. Beschouw de afbeelding f : {0, 1, 2, 3, 4, 5} → {0, 1, 2, 3, 4, 5}, x 7→ c · x (mod m ) voor de waarden c = 2 en c = 5. c =5 c =2 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 Figuur 1: De afbeelding f voor c = 2 en c = 5 Het is duidelijk dat f een bijectie is voor c = 5. Meer bepaald kunnen we elk element a ∈ Z/6Z delen door 5 modulo 6. Het volstaat namelijk om te kijken naar f −1 (a ). Oefening 3.8 Onderzoek voor welke waarden van c in Z/6Z de afbeelding f een bijectie is. Kan je een criterium geven waaraan c moet voldoen opdat f een bijectie is voor een gegeven m ? Je kan deze oefening ook uitvoeren voor andere waarden van m , kies bijvoorbeeld m = 5. Als we niet modulo m werken, maar met de “gewone” reële of rationale getallen, dan is delen door 5 hetzelfde als vermenigvuldigen met 1/5. We noemen 1/5 een inverse van 5 en omgekeerd. We kunnen het concept van inverses ook veralgemenen naar de context van modulorekenen. 3 Modulorekenen 13 Definitie 3.9 Een inverse van a (mod m ) is een getal x zodat a · x ≡ 1 (mod m ). Voorbeeld 3.10 De inverse van 5 modulo 6 is 5, want 5 · 5 = 25 ≡ 1 (mod 6). Inverses bestaan niet altijd, bijvoorbeeld 2 heeft geen inverse modulo 6. Wanneer bestaan inverses nu en hoe kunnen we ze uitrekenen? Gegeven een natuurlijk getal m en een element a ∈ Z/m Z. Een inverse x van a modulo m moet dan voldoen aan a x ≡ 1 (mod m ). Deze vergelijking kunnen we ook schrijven als a x + m y = 1. (5) Dit is een lineaire diophantische vergelijking. Dankzij stelling 2.6 weten we dat deze een oplossing heeft als en slechts als ggd(a , m ) = 1. Met andere woorden: Stelling 3.11 Een inverse van a modulo m bestaat als en slechts als ggd(a , m ) = 1. Als m een priemgetal is, dan geldt voor alle niet-nul elementen a ∈ Z/m Z dat ggd(a , m ) = 1. Dus elk niet-nul element van Z/m Z heeft een inverse modulo m . Oefening 3.12 Toon aan dat als a een inverse heeft modulo m , deze uniek is in Z/m Z. Zoals we in Hoofdstuk 2 gezien hebben, kunnen we het algoritme van Euclides gebruiken om de inverse (de oplossing x van de vergelijking (5)) van a modulo m uit te rekenen. Voorbeeld 3.13 We bepalen de inverse van 7 modulo 12. Aangezien ggd(7, 12) = 1, bestaat deze. Het Euclidisch algoritme geeft 12 = 7 · 1 + 5 7=5·1+2 5=2·2+1 5=1·2 Dus 1 = 5 − 2 · 2 = 3 · 5 − 2 · 7 = 3 · 12 − 5 · 7. Dus −5 ≡ 7 (mod 12) is de inverse van 7 modulo 12 in Z/12Z. 4 Eenvoudige toepassingen van modulorekenen 14 We kunnen nu ook lineaire vergelijkingen van de vorm a x ≡ b (mod m ) oplossen. Opnieuw volgt uit stelling 2.6 het volgende: Gevolg 3.14 Een vergelijking a x ≡ b (mod m ) heeft een oplossing als en slechts als ggd(a , m ) | b . In het bijzonder is er altijd een oplossing als ggd(a , m ) = 1. Oefening∗ 3.15 Wanneer heeft de vergelijking a x ≡ b (mod m ) een unieke oplossing? We eindigen dit hoofdstuk met een stelling die aangeeft welke gehele getallen hun eigen inverse zijn modulo p , met p een priemgetal. Stelling 3.16 Stel dat p een priemgetal is. Een positief geheel getal a is zijn eigen inverse modulo p als en slechts als a ≡ 1 (mod p ) of a ≡ −1 (mod p ). Bewijs. Stel dat a ≡ 1 (mod p ) of dat a ≡ −1 (mod p ). Uit stelling 3.6 (iii) volgt dat a 2 ≡ 1 (mod p ). Dus is a inderdaad zijn eigen inverse modulo p . Stel omgekeerd dat a zijn eigen inverse is, dus a 2 ≡ 1 (mod p ). Hieruit volgt dat a 2 − 1 ≡ 0 (mod p ). Dus p | (a 2 − 1). Maar a 2 − 1 = (a − 1)(a + 1), dus omdat p een priemgetal is moet ofwel p | (a − 1) ofwel p | (a + 1), dus ofwel a ≡ 1 (mod p ) ofwel a ≡ −1 (mod p ). 4 4.1 Eenvoudige toepassingen van modulorekenen Voorwaarden voor deelbaarheid Stel dat we voor een geheel getal n willen controleren of het deelbaar is door een getal m . Het gebruik van modulorekenen laat ons toe om deelbaarheid na te gaan door enkele controles te doen op één of meerdere cijfers van n . We starten met een eenvoudig geval: deelbaarheid door machten van 2. We schrijven het getal n in decimale expansie als n = a k · 10k + a k −1 10k −1 + · · · + a 1 · 10 + a 0 . De getallen a i zijn de cijfers van n en dus natuurlijke getallen uit de verzameling {0, 1, . . . , 9}. Omdat 10 ≡ 0 (mod 2), geldt n ≡ a 0 (mod 2). Het getal n is dus deelbaar door 2 als en slechts als het laatste cijfer deelbaar is door 2. Aangezien 2 | 10, geldt 2 j | 10 j en dus 10 j ≡ 0 (mod 2 j ). Dus n ≡ a 1 · 10 + a 0 (mod 22 ). Het getal n is dus deelbaar door 4 als en slechts als 4 Eenvoudige toepassingen van modulorekenen 15 het getal gevormd door de laatste twee cijfers van n deelbaar is door 4. Algemeen hebben we de volgende stelling. Stelling 4.1 Een getal n = a k · 10k + · · · + a 0 is deelbaar door 2 j (met j ≤ k ) als en slechts als m = a j −1 · 10 j −1 + · · · + a 0 deelbaar is door 2 j . Oefening 4.2 Ontwikkel een analoge deelbaarheidstest voor deelbaarheid door machten van 5. Nu bekijken we deelbaarheid door 3 en door 9. Uit 10 ≡ 1 (mod 9) volgt 10 j ≡ 1 (mod 9) en ook 10 j ≡ 1 (mod 3). Dus n ≡ a k +a k −1 +· · ·+a 0 (mod 9). Het getal n is dus deelbaar door 9 (en analoog door 3) als en slechts als de som van zijn cijfers deelbaar is door 9 (en analoog door 3). Oefening∗ 4.3 Ontwikkel zelf een deelbaarheidstest voor deelbaarheid door 11. 4.2 Een toernooi Stel dat we een toernooi met N ploegen willen organiseren met een wedstrijdschema waarin elke ploeg juist eenmaal tegen elke andere ploeg moet spelen. We beschrijven een methode om het wedstrijdschema op te stellen, waarbij we gebruik maken van modulorekenen. Vooreerst merken we op dat als N oneven is, er bij elke ronde van het toernooi juist 1 ploeg zal zijn die niet speelt. Bij het opstellen van het wedstrijdschema zullen we dan een dummy-ploeg toevoegen, en indien een ploeg in een bepaalde ronde speelt tegen de dummy-ploeg, betekent dit in de praktijk dat die ploeg in die ronde vrij is. We mogen dus veronderstellen dat N even is, waarbij er eventueel een dummy-ploeg voorkomt. Elke ploeg krijgt een nummer tussen 1 en N . Aangezien er N ploegen zijn en elke ploeg juist eenmaal tegen een andere ploeg speelt, zijn er N − 1 rondes. Elke ronde krijgt dus een nummer tussen 1 en N − 1. Voor een gegeven rondenummer k hanteren we de volgende regels om het schema op te stellen: Gegeven i ∈ {1, . . . , N − 1} en j ∈ {1, . . . , N } twee verschillende nummers van ploegen. • Als j 6= N , dan speelt ploeg i tegen ploeg j in de k -de ronde als en slechts als i + j ≡ k (mod N − 1); • Als j = N , dan speelt ploeg i tegen ploeg N in de k -de ronde als en slechts als 2i ≡ k (mod N − 1). 4 Eenvoudige toepassingen van modulorekenen 16 We tonen aan dat indien we deze regels gebruiken, we een toernooi bekomen waarin elke ploeg juist eenmaal tegen elke ploeg moet spelen. Omdat ggd(2, N − 1) = 1, heeft 2 een inverse 2−1 modulo N − 1, dus 2i ≡ k (mod N − 1) ⇐⇒ i ≡ 2−1 k (mod N − 1). Voor een gegeven k ∈ {1, . . . , N − 1} is er dus juist één i ∈ {1, . . . , N − 1} waarvoor ploeg i speelt tegen ploeg N . Merk op dat voor k = N − 1 (de laatste ronde van het toernooi), die unieke oplossing i = 0 ≡ N −1 (mod N −1). Dus in de laatste ronde speelt ploeg N −1 tegen ploeg N . Het is niet mogelijk dat ploeg N in rondes k en k 0 6= k tegen dezelfde ploeg i speelt, want dan zou 2i = k = k 0 (mod N − 1), een contradictie omdat k en k 0 verschillende elementen zijn uit Z/(N − 1)Z. Dus ploeg N speelt in elke ronde tegen een andere ploeg, en zal dus juist eenmaal tegen elke ploeg uit {1, . . . , N − 1} spelen. We beschouwen nu enkel de eerste N − 1 ploegen. Stel nu dat in twee verschillende rondes k en k 0 6= k , dezelfde ploegen i en j (i 6= j ) tegen elkaar zouden spelen. Dit kan enkel als i + j ≡ k (mod N − 1) en i + j ≡ k 0 (mod N − 1), waruit k ≡ k 0 (mod N − 1), een contradictie. Bijgevolg speelt elke ploeg i ∈ {1, . . . , N − 1} nooit tweemaal tegen een ploeg j ∈ {1, . . . , N − 1} \ {i } en juist eenmaal tegen ploeg N . Aangezien elke ploeg i ∈ {1, . . . , N − 1} wel juist N − 1 keer speelt, speelt zij dus tegen elke andere ploeg juist eenmaal. Voorbeeld 4.4 We stellen een toernooi op voor 5 ploegen, dus N = 6, en de zesde ploeg beschouwen we als de dummy ploeg. We starten met k = 1. Regel (i) toepassen levert de volgende paren van ploegen op die tegen elkaar spelen: (1, 5) en (2, 4). Merk op dat uiteraard ook de paren (4, 2) en (5, 1) gevormd worden door toepassing van regel (i). Regel (ii) levert voor k = 1 de vergelijking 2i ≡ 1 (mod 5) , met als unieke oplossing i = 3. In de eerste ronde speelt ploeg 3 dus tegen de dummy ploeg 6. Zetten we deze werkwijze verder, dan bekomen we het volgende schema. ploeg → Ronde 1 Ronde 2 Ronde 3 Ronde 4 Ronde 5 1 5 vrij 2 3 4 Oefening 4.5 Stel een toernooi op voor 8 ploegen. 2 4 5 1 vrij 3 3 vrij 4 5 1 2 4 2 3 vrij 5 1 5 1 2 3 4 vrij 5 De stelling van Wilson en de kleine stelling van Fermat 5 17 De stelling van Wilson en de kleine stelling van Fermat In het vorige hoofdstuk hebben we gezien dat we beschikken over heel wat aritmetische mogelijkheden in de verzameling Z/m Z, zeker als m een priemgetal is. De kleine stelling van Fermat stelt ons in staat om ook op een gepaste wijze met exponenten om te gaan modulo een priemgetal p . Oefening 5.1 Stel p = 5. Bepaal het product van alle elementen verschillend van 0 uit Z/p Z. Doe hetzelfde voor p = 7. Wat is de observatie? Deze oefening is een goede aanleiding om de volgende stelling te bewijzen. Stelling 5.2 — Stelling van Wilson Voor elk priemgetal p geldt (p − 1)! ≡ −1 (mod p ). Bewijs. Voor p = 2 is de stelling triviaal. We veronderstellen nu dat p een oneven priemgetal is. Door stelling 3.11 weten we dat elk element uit {1, . . . , p − 1} een unieke inverse heeft in Z/p Z. Uit stelling 3.16 weten we ook dat 1 en p − 1 de enige elementen in Z/p Z die hun eigen inverse zijn. Dus blijven er p − 3 elementen verschillend van nul over, die we kunnen p −3 indelen in 2 paren van elementen, waarbij elk paar telkens bestaat uit een element en zijn inverse. Het product van de elementen uit elk paar is dus 1 modulo p . Het product van alle elementen uit Z/p Z verschillend van nul is dus gelijk aan 1 · (p − 1) ≡ −1 (mod p ). Dus (p − 1)! ≡ −1 (mod p ). Zoals vermeld zijn we geïnteresseerd in exponenten van elementen in Z/p Z. We hebben daarvoor volgende belangrijke stelling. Stelling 5.3 — Kleine stelling van Fermat Stel dat p een priemgetal is en a een geheel getal met a 6≡ 0 (mod p ). Dan geldt a p −1 ≡ 1 (mod p ). Bewijs. We beschouwen terug de functie f : Z/p Z → Z/p Z : x 7→ a · x uit paragraaf 3.1. Aangezien p een priemgetal is en a 6≡ 0 (mod p ), geldt ggd(a , p ) = 1. We weten dus dat f een bijectie is. Omdat f (0) = 0, is f 0 : {1, . . . , p − 1} → {1, . . . , p − 1} : x 7→ a · x (mod p ) nog altijd een bijectie. 5 De stelling van Wilson en de kleine stelling van Fermat 18 Er volgt dus a · 2a · 3a · . . . · (p − 1)a ≡ f 0 (1) · f 0 (2) · f 0 (3) · . . . · f 0 (p − 1) ≡1 · 2 · 3 · . . . · (p − 1) (mod p ). Hieruit volgt dat a p −1 (p − 1)! ≡ (p − 1)! (mod p ). Omdat we mogen delen door (p − 1)! ≡ −1 (mod p ), krijgen we dus a p −1 ≡ 1 (mod p ). De kleine stelling van Fermat laat ons toe om op efficiënte wijze machten modulo p te bepalen. Voorbeeld 5.4 We bepalen 3201 mod 11. Door de kleine stelling van Fermat weten we dat 310 ≡ 1 (mod 11). Bijgevolg is 3201 = (310 )20 · 3 ≡ 3 (mod 11). 5.1 Een karakterisering van priemgetallen en tweelingpriemen Oefening 5.5 Stel n = 6. Ga na dat 5! 6≡ −1 (mod n ) Dit geldt voor alle samengestelde getallen, als n geen priemgetal is, dan is (n − 1)! 6≡ −1 (mod n ). Dit kunnen we aantonen, en wel met de volgende stelling. Stelling 5.6 Als n > 1 een natuurlijk getal is waarvoor (n − 1)! ≡ −1 (mod n ), dan is n een priemgetal. Bewijs. We bewijzen deze stelling uit het ongerijmde. Veronderstel dat (n −1)! ≡ −1 (mod n ) en dat n geen priemgetal is. Omdat n geen priemgetal is, bestaan er natuurlijke getallen a en b , met 1 < a < n en 1 < b < n en waarvoor n = a · b . Uit a < n volgt dat a | (n − 1), want dit laatste is het product van de eerste (n − 1) natuurlijke getallen groter dan 0, waaronder dus a . Uit de veronderstelling dat (n − 1)! ≡ −1 (mod n ), volgt dat n | ((n − 1)! + 1). Omdat a | n , geldt dus ook a | ((n −1)!+1). Maar a | (n −1)!, dus er geldt ook dat a | ((n −1)!+1)−(n −1)! = 1. Dit is een contradictie omdat a > 1. De contrapositie van deze stelling bewijst inderdaad dat (n − 1)! 6≡ −1 als n geen priemgetal is. De stelling zelf, samen met de stelling van Wilson, geeft ons een karakteriserende eigenschap van priemgetallen. 6 De Chinese reststelling 19 Stelling 5.7 Een natuurlijk getal p is een priemgetal als en slechts als (p − 1)! ≡ −1 (mod p ). De volgende stelling is een vergelijkbare karakterisering van tweelingpriemen, die we niet gaan bewijzen. Stelling 5.8 — Stelling van Clement De natuurlijke getallen p en p + 2 zijn tweelingpriemen als en slechts als 4((p − 1)! + 1) ≡ −p (mod p (p + 2)) . 6 De Chinese reststelling Tot nu toe hebben we eigenlijk altijd modulo m gerekend voor één vaste waarde van m . Maar wat als we bijvoorbeeld tegelijk iets willen doen modulo 5 en modulo 8? Hoe zou je het volgende vraagstuk aanpakken? Oefening 6.1 An bezit een aantal muntjes van 1 cent, het zijn er minder dan 50. Als ze die muntjes groepeert per 5, heeft ze er nog één over. Als ze ze groepeert per 8, zijn er nog 5 over. Hoeveel 1-cent muntjes heeft An? Dit soort vraagstukken kan met een algemeen principe worden opgelost, namelijk de Chinese reststelling. Maar eerst hebben we nog een voorbereidende stelling nodig: Stelling 6.2 Stel dat s en t twee natuurlijke getallen zijn met ggd(s , t ) = 1. Als nu x ≡ y (mod s ) en ook x ≡ y (mod t ), dan geldt x ≡ y (mod s t ). Bewijs. We weten dat s | (x − y ) en t | (x − y ). Aangezien ggd(s , t ) = 1, volgt hieruit dat s t | (x − y ) en dus x ≡ y (mod s t ). 6 De Chinese reststelling 20 Stelling 6.3 — Chinese reststelling Stel dat m = s · t met ggd(s , t ) = 1. Dan heeft het stelsel ¨ x ≡ a (mod s ) x ≡ b (mod t ) een unieke oplossing in Z/m Z. Bewijs. De eerste vergelijking kunnen we herschrijven als x = a + y s . We vullen deze x nu in in de tweede vergelijking: a + y s ≡ b (mod t ). Aangezien ggd(s , t ) = 1, bestaat de inverse van s modulo t . Noteer deze met z . We krijgen y ≡ z (b − a ) (mod t ). Nu we y kennen, kunnen we x bepalen uit x = a + y s , dus x = a + s z (b − a ). Deze x voldoet inderdaad aan het gegeven stelsel. Het feit dat de oplossing uniek is volgt uit de voorgaande stelling. Oefening 6.4 Zoek twee verschillende gehele getallen x die voldoen aan: ¨ x ≡ 7 (mod 6) x ≡ 6 (mod 7) Oefening 6.5 Zoek de unieke oplossing in Z/60Z van het volgende stelsel: x ≡ 1 (mod 3) x ≡ 2 (mod 4) x ≡ 3 (mod 5) We bewijzen ten slotte een stelling die we in het volgende hoofdstuk nodig gaan hebben. Het is in zekere zin een veralgemening van de kleine stelling van Fermat. Stelling 6.6 Stel m = p · q , met p en q twee verschillende priemgetallen. Dan geldt voor alle x ∈ Z/m Z en alle natuurlijke getallen k : x k (p −1)(q −1)+1 ≡ x (mod m ). 7 Cryptograe 21 Bewijs. Dankzij stelling 6.2 weten we dat het volstaat om aan te tonen dat x k (p −1)(q −1)+1 ≡ x (mod p ) en x k (p −1)(q −1)+1 ≡ x (mod q ). Omdat deze twee congruenties volledig analoog zijn, bewijzen we hier enkel de eerste. Als x ≡ 0 (mod p ), dan staat er 0 ≡ 0 (mod p ) en is de congruentie dus voldaan. We nemen nu aan dat x 6≡ 0 (mod p ), dus ggd(x , p ) = 1. Door de kleine stelling van Fermat weten we dat x p −1 ≡ 1 (mod p ). Verhef nu beide leden tot de macht k (q − 1) en vermenigvuldig met x : k (q −1) x p −1 ·x ≡ x (mod p ) k (p −1)(q −1)+1 ≡ x (mod p ) x 7 7.1 Cryptografie Inleiding Een veel gebruikte toepassing van de aritmetische mogelijkheden in de verzameling Z/m Z is een cryptografisch systeem dat we in dit hoofdstuk beschrijven. De bedoeling is dat twee (of meer) mensen een geheime boodschap kunnen uitwisselen zonder dat iemand die afluistert de boodschap kan achterhalen. We illustreren dit als volgt: An en Bart komen elkaar op café tegen, ze hebben elkaar nog niet eerder gezien. Op een bepaald ogenblik wil An iets vertellen aan Bart, maar ze wil niet dat iemand anders in het drukke café het kan begrijpen. An en Bart moeten dus een cryptografisch systeem gebruiken dat zó is dat er op voorhand geen geheime sleutel moet afgesproken worden. Er wordt namelijk verondersteld dat alle communicatie tussen An en Bart afgeluisterd kan worden. Het verwonderlijke is dat het toch mogelijk is dat An iets vertelt aan Bart zodat enkel Bart de boodschap kan ontcijferen. De meeste klassieke cyptosystemen (zeg maar alles voor 1970) zijn symmetrisch. Dit betekent dat er één geheime sleutel is die zowel voor het encrypteren (versleutelen) als het decrypteren (ontcijferen) gebruikt wordt. Zo’n systeem kan hier niet gebruikt worden, want als An de geheime sleutel vertelt aan Bart (of omgekeerd), kunnen anderen de sleutel afluisteren en zo de boodschap ontcijferen. Het RSA-systeem dat we hier bespreken is asymmetrisch: er zijn twee sleutels nodig, één voor het encrypteren en één voor het decrypteren. An en Bart gaan als volgt te werk: Bart bepaalt een encryptie- en een decryptie-sleutel en vertelt An enkel de encryptie-sleutel. Dan versleutelt An haar boodschap met Barts encryptie-sleutel en zo kan enkel Bart de boodschap decrypteren. We gaan er dus van uit dat afluisteraars de encryptie-sleutel kennen en ook de geëncrypteerde boodschap van An. Maar aangezien enkel Bart de decryptiesleutel kent is de boodschap veilig. Een belangrijke voorwaarde opdat dit systeem veilig zou zijn is uiteraard dat de decryptie-sleutel niet achterhaald kan worden uit de encryptiesleutel. De encryptiesleutel wordt ook wel de publieke sleutel genoemd en de decryptiesleutel de private sleutel. 7 Cryptograe 7.2 22 RSA Het RSA cryptosysteem werd in de jaren zeventig van vorige eeuw ontwikkeld door Rivest, Shamir en Adleman. Het is in wezen gebaseerd op het modulair exponentieel rekenen. We starten met het opstellen van een encryptie- en decryptiesleutel. Dit is iets wat Bart doet als hij wil dan An versleutelde boodschappen naar hem kan sturen. Bart kiest twee verschillende priemgetallen p en q en berekent hun product n = p · q . Hij kiest een willekeurige exponent e , zodanig dat ggd(e , (p − 1)(q − 1)) = 1. De encryptiesleutel is dan het paar (e , n ). Een boodschap bestaat uit verschillende blokken van letters. Elk blok vertalen we naar een numerieke waarde. We moeten enkel n (en dus p en q ) groot genoeg kiezen. Stel dan dat P de numerieke waarde is van een blok (bestaande uit 1 of meerdere letters) dat we gaan encrypteren. De versleutelde boodschap C wordt als volgt gedefinieerd: C = P e (mod n ) Noem d de inverse van e modulo (p −1)(q −1). We weten dat deze bestaat omdat ggd(e , (p − 1)(q − 1)) = 1. De decryptiesleutel is (d , n ). Met het uitgereide algoritme van Euclides kan deze inverse berekend worden, maar hiervoor moet je dus de priemgetallen p en q kennen. Aangezien e d ≡ 1 (mod (p − 1)(q − 1)) bestaat er een k waarvoor e d = k (p − 1)(q − 1) + 1. Nu volgt uit stelling 6.6 onmiddellijk dat C d ≡ P (mod n ). Met andere woorden, d zorgt inderdaad voor decryptie: C d = (P e )d = P e d = P k (p −1)(q −1)+1 ≡ P (mod n ). Bart, die de publieke sleutel (e , n ) opstelt, beschikt over de priemgetallen p en q , en kan dus gemakkelijk de geheime decryptiesleutel (d , n ) bepalen. De modulus n is publiek, en de veiligheid van dit systeem is gebaseerd op het feit dat het met de huidige gekende algoritmen, computationeel gezien nog steeds heel moeilijk is om grote getallen te factoriseren in het product van priemgetallen. Er zijn echter wel zeer efficiënte algoritmen gekend om een inverse modulo (p − 1)(q − 1) te bepalen en om exponentiele berekeningen modulo n uit te voeren. 8 Factorisatie van getallen 23 Voorbeeld 7.1 Neem als priemgetallen p = 47 en q = 59. Dan wordt n = p ·q = 2773 en (p −1)(q −1) = 2668. Kiezen we e = 13, dan is duidelijk ggd(e , (p − 1)(q − 1)) = 1. De inverse van e modulo 2668 is 821. Stel dat de onversleutelde boodschap luidt: “wiskunde is plezant”. We zullen de letters in blokjes van twee vertalen naar een getal. Deze reeks getallen wordt dan {2309, 1911, 2114, 0405, 0009, 1900, 1612, 0526, 0114, 2000}. Elk blokje P wordt nu versleuteld als volgt: C ≡ P 13 (mod 2773) Dit geeft ons de reeks versleutelde blokjes: {1867, 2239, 1550, 0139, 0920, 1848, 2653, 1860, 0391, 0933}. Eva wil nu de versleutelde boodschap kraken. Zij kent de versleutelde boodschap en kent ook n = 2773 en e = 13. De enige gekende manier om RSA te kraken is om n te factoriseren als het product van twee priemgetallen p en q en dan d uit te rekenen. In het volgende hoofdstuk gaan we dit factorisatieprobleem bespreken. 8 Factorisatie van getallen Aangezien de getallen die voor RSA gebruikt worden geen speciale vorm hebben en enkel grote factoren hebben, zijn het de moeilijkste getallen om te factoriseren. Het volgende lijstje geeft een idee van hoe lang het duurt om zo’n getal te factoriseren: • 50 cijfers: minder dan 1 seconde op een Core2. • 75 cijfers: 2 minuten op een 2GHz Core2. • 100 cijfers: 5 uur op een 2GHz Core2. • 125 cijfers: 20 dagen op een 2.53GHz Pentium 4. • 150 cijfers: 10 maanden op een 2.53GHz Pentium 4. • 232 cijfers: twee jaar gebruik makend van honderden computers. Dit is het huidige record voor factorisatie van getallen zonder speciale vorm. Dit werd gedaan door een team van onderzoekers aan verschillende universiteiten. Deze factorisatie werd gestart in augustus 2007 en duurde tot en met 12 december 2009. Als vuistregel kan je stellen dat elke 4 à 5 cijfers extra een verdubbeling van de rekentijd geeft. 8 Factorisatie van getallen 24 Het echte record voor factorisatie is het getal 21039 − 1. Dit getal heeft 313 cijfers, maar is door zijn speciale vorm gemakkelijker te factoriseren (de moeilijkheid van factorisatie is vergelijkbaar met een getal van 215 cijfers zonder speciale vorm). In de praktijk worden voor RSA meestal getallen gebruikt van 1024 bits (309 cijfers), 2048 bits (617 cijfers) of 4096 bits (1233 cijfers). Het factorisatierecord van 232 cijfers is niet meer zo ver verwijderd van 309 cijfers, het is dus goed mogelijk dat men over 10 jaar RSA-sleutels van 1024 bits zal kunnen kraken. Vanaf 2048 bits zijn de getallen echter veel groter dan degene die men vandaag kan factoriseren. Het ziet er niet naar uit dat men zulke grote getallen zal kunnen factoriseren (afgezien van serieuze wiskundige of technische doorbraken). Dit is maar goed ook, want RSA is één van de meest gebruikte cryptografische systemen, met toepassingen zoals bankkaarten en beveiliging van websites. Het meest naïeve algoritme om een getal n te factoriseren is gewoon n proberen te delen p door alle priemgetallen kleiner dan of gelijk aan n . Voorbeeld 8.1 p We willen 2047 factoriseren. Aangezien 2047 = 45, 244 . . ., moeten we voor alle priemgetallen p tot en met 43 controleren of 2047 deelbaar is door p : 2047 ≡ 1 (mod 2) 2047 ≡ 6 (mod 13) 2047 ≡ 1 (mod 3) 2047 ≡ 7 (mod 17) 2047 ≡ 2 (mod 5) 2047 ≡ 14 (mod 19) 2047 ≡ 3 (mod 7) 2047 ≡ 0 (mod 23) 2047 ≡ 1 (mod 11) We zien dat 23 een deler is van 2047 en we delen 2047/23 = 89. Aangezien 89 een priemgetal is, hebben we de factorisatie gevonden: 2047 = 23 · 89. Deze factorisatiemethode werkt goed voor kleine getallen, maar om grote getallen te factoriseren (laat ons zeggen meer dan 15 cijfers) zijn andere algoritmes aangewezen. 8.1 De kwadratische zeef Een andere methode om getallen te factoriseren is de zogenaamde kwadratische zeef. Deze is gebaseerd op volgende stelling: Stelling 8.2 Stel dat n = p · q met p en q twee verschillende oneven priemgetallen. Dan heeft de vergelijking x 2 ≡ 1 (mod n ) vier verschillende oplossingen {1, n −1, a ,b } in Z/n Z met ggd(n , a − 1) = p en ggd(n ,b − 1) = q . 8 Factorisatie van getallen 25 Bewijs. Dankzij stelling 6.2 weten we dat x 2 ≡ 1 (mod n ) equivalent is met het stelsel ¨ x 2 ≡ 1 (mod p ) x 2 ≡ 1 (mod q ) . Merk op dat x 2 ≡ 1 (mod p ) betekent dat x zijn eigen inverse is modulo p . Stelling 3.16 zegt dat dit enkel kan als x ≡ 1 (mod p ) of x ≡ −1 (mod p ). Analoog heeft de tweede vergelijking 1 en −1 modulo q als oplossingen. Met de Chinese reststelling hebben we nu in totaal vier oplossingen modulo n . De oplossingen van volgende 4 stelsels zijn juist de oplossingen van x 2 ≡ 1 (mod n ). ¨ x ≡ 1 (mod p ) x ≡ 1 (mod q ) ¨ , x ≡ −1 (mod p ) x ≡ −1 (mod q ) ¨ , x ≡ 1 (mod p ) x ≡ −1 (mod q ) ¨ , x ≡ −1 (mod p ) x ≡ 1 (mod q ) . De eerste twee geven x ≡ 1 (mod n ) en x ≡ −1 (mod n ). Noem de derde oplossing a en de vierde b , dan zal ggd(n , a − 1) = p en ggd(n ,b − 1) = q . Hoe gaan we deze stelling nu toepassen? Als we op de één of andere manier een congruentie x 2 ≡ y 2 (mod n ) vinden met y inverteerbaar modulo n , dan hebben we ook (x /y )2 ≡ 1 (mod n ). Als deze x en y “willekeurig” zijn, dan hebben we dankzij de vorige stelling dus 50% kans dat ggd(n , (x /y ) − 1) = ggd(n , x − y ) een echte factor p of q van n geeft. De kwadratische zeef is een methode om zo’n congruentie x 2 ≡ y 2 (mod n ) te vinden, en dus hopelijk ook de factorisatie van n . We werken het algoritme uit aan de hand van het p voorbeeld n = 53953. We berekenen n = 232, 278 . . .. Hieruit volgt dat 2332 − n een vrij klein getal zal zijn. Inderdaad, 2332 − 53953 = 336. We factoriseren 336 en vinden 2332 ≡ 24 · 3 · 7 (mod n ). We doen hetzelfde voor alle gehele getallen in het interval [223, 242]. We schrijven de factorisatie enkel op als alle factoren kleiner zijn dan 50. 2232 ≡ −1 · 27 · 3 · 11 2322 ≡ −1 · 3 · 43 2252 ≡ −1 · 28 · 13 2332 ≡ 24 · 3 · 7 2292 ≡ −1 · 23 · 33 · 7 2382 ≡ 32 · 13 · 23 2302 ≡ −1 · 34 · 13 2392 ≡ 25 · 32 · 11 2312 ≡ −1 · 24 · 37 2412 ≡ 25 · 3 · 43 Merk op dat we hier −1 als een “priemgetal” beschouwen in deze factorisaties. Uit bovenstaande factorisaties halen we 2252 · 2302 ≡ (−1 · 28 · 13) · (−1 · 34 · 13) (mod n ) (225 · 230)2 ≡ (24 · 32 · 13)2 (mod n ) We hebben dus een congruentie van kwadraten gevonden. Nu berekenen we ggd(n , 225 · 230 − 24 · 32 · 13) = ggd(53953, 49878) = 163. Zo vinden we de factorisatie 53953 = 163 · 331. 8 Factorisatie van getallen 26 We hadden ook pech kunnen hebben dat deze grootste gemene deler 1 of n uitkwam. Dan zouden we een andere congruentie x 2 ≡ y 2 moeten zoeken en die proberen. Oefening 8.3 Factoriseer zelf het getal 47851 met behulp van deze methode. Het woord kwadratische zeef slaat op een algoritme (dat we hier niet gaan uitwerken) om sneller te zien welke getallen k 2 −n er enkel kleine factoren hebben. Deze zeef kan heel snel bepalen welk van deze getallen een factor 2 hebben, welke een factor 3 hebben, enzovoort. De kwadratische zeef is in de praktijk het snelste algoritme om RSA-getallen te factoriseren van pakweg 100 cijfers of minder. De factorisatie-resultaten tot en met 100 cijfers die in het begin van dit hoofdstuk vermeld werden zijn bekomen met het programma msieve, een implementatie van de kwadratische zeef.