Zahlentheorie Skript zur Vorlesung an der Hochschule Heilbronn (Stand: 23. Juli 2013) 1 Prof. Dr. V. Stahl 1 Der Inhalt dieses Skripts ist teilweise wörtlich oder sinngemäß aus den im Literaturverzeichnis genannten Quellen entnommen. Es handelt sich um keine wissenschaftliche Veröffentlichung. INHALTSVERZEICHNIS 2 Inhaltsverzeichnis 1 Anwendungen der Zahlentheorie 3 2 Eine Kuriosität: Der große Fermatsche Satz 4 3 Teilbarkeit, Primzahlen und Primfaktorzerlegung 3.1 Teilbarkeit . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Primzahlen . . . . . . . . . . . . . . . . . . . . . . . 3.3 Der Fundamentalsatz der elementaren Zahlentheorie 3.4 Noch zwei Kuriositäten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Division mit Rest 6 6 7 7 13 15 5 Größter gemeinsamer Teiler 17 5.1 Euklidischer Algorithmus . . . . . . . . . . . . . . . . . . . . . . 18 5.2 Erweiterter Euklidischer Algorithmus . . . . . . . . . . . . . . . . 21 6 Kongruenz und Arithmetik modulo m 6.1 Rechenregeln modulo m . . . . . . . . 6.2 Kongruenz modulo m . . . . . . . . . 6.3 Die Struktur (Zm , ⊕m , ⊗m ) . . . . . . 6.4 Schnelle Algorithmen zur Potenzierung . . . . . . . . . . . . . . . . . . . . . modulo m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 23 24 26 30 7 Zahlentheoretische Grundlagen zur RSA Verschlüsselung 35 7.1 Die Eulersche ϕ-Funktion . . . . . . . . . . . . . . . . . . . . . . 35 7.2 Der Satz von Euler-Fermat . . . . . . . . . . . . . . . . . . . . . 35 8 RSA Codierungssystem 37 9 Historischer Exkurs in die Primfaktorisierung 42 10 Ein paar große Zahlen aus der Physik 45 1 1 ANWENDUNGEN DER ZAHLENTHEORIE 3 Anwendungen der Zahlentheorie In der Zahlentheorie beschäftigen wir uns mit den Eigenschaften der natürlichen oder ganzen Zahlen. Die natürlichen Zahlen mögen vielleicht zunächst ziemlich “einfach” und unspektakulär erscheinen, bei genauerem Hinsehen stellt man jedoch fest, daß sie eine äußerst komplexe Struktur und viele interessante Eigenschaften haben. Dies illustriert z.B. der große Fermatsche Satz, der sehr einfach zu formulieren ist, an dessen Beweis sich aber zahllose Mathematiker 350 Jahre lang die Zähne ausgebissen haben. In Kapitel 3 werden wir zwei ähnliche geartete Probleme kennen lernen, das Primzahlzwillingsproblem und die Goldbachsche Vermutung, die bis heute noch ungelöst sind. Zahlentheorie wurde bereits vor fast 4000 Jahren sowohl von den Babyloniern als auch von den Ägyptern betrieben. In Europa begannen die Griechen mit der Entwicklung der Zahlentheorie. So wurde der Begriff der Primzahl von Pythagoras (580–500 v. Chr.) und seinen Schülern eingeführt, Euklid (365– 300 v. Chr.) zeigte, daß es unendlich viele Primzahlen gibt und Eratosthenes (276–194 v. Chr.) entwickelte ein Verfahren um alle Primzahlen unterhalb einer gegebenen Schranke zu finden. Über viele Jahrhunderte galt die Zahlentheorie als reiner Zeitvertreib für Mathematiker und hatte so gut wie keine praktische Relevanz. Durch die Entwicklung und den weitläufigen Einsatz von Computern in den letzten Jahren hat die Zahlentheorie jedoch wichtige Anwendungen in der Informatik gefunden – hier zwei Beispiele: • Symbolisches Rechnen, d.h. Rechnen ohne Rundungsfehler. Dies ist eine Alternative zum sog. numerischen Rechnen mit Gleitkommazahlen. Was zunächst verlockend klingt, hat aber einen Haken, nämlich den im Vergleich zur Numerik sehr hohen Rechenaufwand. Rechnet man nämlich mit ganzen oder rationalen Zahlen, so neigen die Zwischenergebnisse dazu, immer größer zu werden. Gleitkommazahlen hingegen sind immer konstant 32 oder 64 bit lang. Viele Ergebnisse der Zahlentheorie lassen sich dazu verwenden um den Rechenaufwand zu reduzieren oder auch um Algorithmen zu parallelisieren. Ein wichtiges Resultat aus der Zahlentheorie ist hier das sog. Chinesische Restetheorem, welches von dem Chinesischen Mathematiker Sun Tsŭ zurückgeht (sie genaue Jahreszahl ist nicht bekannt, vermutlich zwischen zwischen 280 und 473 n. Chr.) und von Chin Chiu Shao 1247 verallgemeinert wurde. • Interessanterweise sind es genau die Effizienzprobleme, die der Zahlentheorie zu einer anderen Anwendung verhelfen, die im Internet–Zeitalter eine ganz zentrale Bedeutung hat — die Kryptographie. Prinzipiell ist es immer möglich, kryptographische Codes zu knacken, der Rechenaufwand hierfür ist aber derart gigantisch, daß jedes Unterfangen in der Richtung hoffnungslos ist. Zumindest mit den derzeit bekannten Algorithmen. Das Hauptziel dieser Vorlesung ist, die Funktionsweise des 1978 publizierten RSA Algorithmus zu erklären, der direkt auf einem Resultat der Zahlentheorie basiert, dem Satz von Euler-Fermat aus dem Jahr 1760. Der RSA Algorithmus wird in vielen Kryptosystemen eingesetzt und gilt als eines der sichersten Verfahren. 2 2 EINE KURIOSITÄT: DER GROßE FERMATSCHE SATZ 4 Eine Kuriosität: Der große Fermatsche Satz Das berühmteste Resultat von Fermat (1601-1665) ist der sogenannte große Fermatsche Satz. Den Ursprung dieses Satzes findet man in der Gleichung für rechtwinklige Dreiecke von Pythagoras a2 + b2 = c2 . Schon in der Antike interessierten sich die Griechen für ganzzahlige Lösungen dieser Gleichung und sie kannten bereits unendlich viele ganzzahlige Tripel, z.B. a = m2 − 1 b = 2m c = m2 + 1 für beliebiges m. Viele hundert Jahre später bestimmte Diophant von Alexandria (um 250 n. Chr.) in seiner Schrift “Arithmetica” sogar alle Lösungen. Angeregt von diesem Werk, das ein grundlegender Text im Verlaufe von mehr als vierzehn Jahrhunderten blieb, kam Fermat im Jahre 1637 zu dem Schluß, daß die Gleichung a n + bn = c n (2.1) für n > 2 keine ganzzahlige Lösung a, b, c besitzt. Fermat selbst hat in einem der wenigen Beweise, die er wirklich aufgeschrieben hat, den Fall n = 4 erledigt. Beim Studium der “Arithmetica” von Diophant pflegte Fermat seine Ergebnisse und Überlegungen in Form kurzer Randbemerkungen in sein Exemplar zu schreiben. Im Zusammenhang mit der Gleichung (2.1) fand man die folgende Notiz Fermats am Rand der gesammelten Werke Diophants: “Es ist unmöglich, einen Kubus in zwei Kuben, eine vierte Potenz in zwei vierte Potenzen, oder allgemein jede Potenz über der zweiten in zwei Potenzen des gleichen Grades zu zerlegen.” Weiterhin schrieb er: “Ich habe eine wahrhaft wunderbare Beweisführung entdeckt, die jedoch auf diesem Rand nicht genügend Platz findet.” Diese Randbemerkung von Fermat hat seit nunmehr 350 Jahren die mathematische Welt in Atem gehalten, denn viele, vor allem auch berühmte Mathematiker, haben versucht, diesen Beweis wiederzufinden: • Euler und Gauß gaben einen Beweis für n = 3. • L. Dirichlet (1805-1859) und A. Legendre (1752-1833) haben den Fall n = 5 gelöst. • E. Kummer (1810-1893) behandelte eine ganze Serie von Exponenten. Da es nicht einmal diesen überragenden Mathematikern gelungen ist, den allgemeinen Fermatschen Satz zu beweisen, hat man im Lauf der Zeit begonnen, von der Fermatschen Vermutung zu sprechen. Erst 1995 gelang es Andrew Wiles nach wichtigen Vorarbeiten von G. Frey (1985), K. Ribet (1987) und vielen anderen, die Fermatsche Vermutung in der 2 EINE KURIOSITÄT: DER GROßE FERMATSCHE SATZ 5 Tat vollständig zu bestätigen. Damit hat Wiles eines der ältesten mathematischen Probleme überhaupt gelöst. Da sein Beweis von ungewöhnlicher Tiefe und eindrucksvoller Kreativität ist und seine verwendeten Resultate und Methoden außerordentliche Vielfalt und höchste Komplexität aufweisen, steht die “wunderbare Beweisführung” von Fermat aber noch immer aus — falls sie denn wirklich existieren sollte. 3 TEILBARKEIT, PRIMZAHLEN UND PRIMFAKTORZERLEGUNG 3 6 Teilbarkeit, Primzahlen und Primfaktorzerlegung Wenn im Folgenden von Zahlen geredet wird, meinen wir immer die natürlichen Zahlen mit Null. 3.1 Teilbarkeit Definition 3.1 (Teilbarkeit) d ∈ N0 heißt Teiler von a ∈ N0 , wenn es eine Zahl k ∈ N0 gibt, so daß kd = a. Man sagt auch “d teilt a”, “a ist durch d teilbar” oder “a ist Vielfaches von d” und schreibt d|a. Beispiel 3.2 4 | 12, 3 | 18, 26 | 5, 86 | 4, 4 | 8. Theorem 3.3 Für alle a, b, c, d ∈ N0 gilt: (1) Wenn a|b und b|c dann a|c. (2) Wenn a|b und c|d dann ac|bd. (3) Wenn ac|bc und c 6= 0 dann a|b. (4) Wenn a|b und a|c dann a|(mb + nc) für beliebige m, n ∈ N0 . (5) Wenn a|b und a|(b + c) dann a|c. (6) Wenn a|b und b 6= 0 dann a ≤ b. (7) Wenn a|b und b|a dann a = b. Beweis. Seien a, b, c, d ∈ N0 beliebig. (1) Angenommen a|b und b|c. Dann gibt es k1 , k2 ∈ N0 so daß ak1 = b und bk2 = c. Somit ist ak1 k2 = c und a|c. (2) Angenommen a|b und c|d. Dann gibt es k1 , k2 ∈ N0 so daß ak1 = b und ck2 = d. Somit ist ack1 k2 = bd und ac|bd. (3) Angenommen ac|bc und c 6= 0. Dann gibt es k ∈ N0 so daß ack = bc. Division durch c ergibt ak = b und a|b. (4) Angenommen a|b und a|c und sei m, n ∈ N0 beliebig. Dann gibt es k1 , k2 ∈ N0 so daß ak1 = b und ak2 = c. Somit ist auch mak1 = mb und nak2 = nc und a(mk1 + nk2 ) = mb + nc, d.h. a|(mb + nc). (5) Angenommen a|b und a|(b + c). Dann gibt es k1 , k2 ∈ N0 so daß ak1 = b und ak2 = b + c. Somit ist ak2 = ak1 + c und a(k2 − k1 ) = c, d.h. a|c. (6) Angenommen a|b und b 6= 0. Dann gibt es k1 ∈ N so daß ak1 = b. Da k1 ≥ 1 folgt a ≤ b. 3 TEILBARKEIT, PRIMZAHLEN UND PRIMFAKTORZERLEGUNG 7 (7) Angenommen a|b und b|a. Dann gibt es k1 , k2 ∈ N0 so daß ak1 = b und bk2 = a. Eingesetzt erhält man ak1 k2 = a, d.h. entweder ist k1 = k2 = 1 oder a = 0. Im ersten Fall folgt a = b, im zweiten Fall folgt aus a|b daß b = 0 und damit ist a = b = 0. 3.2 Primzahlen Definition 3.4 (Primzahl) p ∈ N heißt Primzahl, wenn p ≥ 2 und p nur durch 1 und durch sich selbst teilbar ist. Beispiel 3.5 Primzahlen sind 2, 3, 5, 7, 11, 13, 17, . . . . Keine Primzahlen sind hingegen 0, 1, 4, 6, 8, 9, 10, 12, . . . . Theorem 3.6 (Euklid, 300 v.Chr.) Es gibt unendlich viele Primzahlen. Beweis. Angenommen es gäbe nur endlich viele Primzahlen p1 , p2 , . . . , pr . Betrachte die Zahl n = p1 p2 · · · pr + 1. Dann ist n größer als alle Primzahlen p1 , p2 , . . . , pr und kann daher selbst keine Primzahl sein. Aus der Definition von Primzahlen folgt, daß es mindestens eine Primzahl pi geben muß, für die gilt pi |n. Aus der Definition der Teilbarkeit folgt, daß es ein k geben muß, so daß kpi = n, bzw. kpi = p1 p2 · · · pr + 1. Durch Umschreiben erhalten wir kpi − p1 p2 · · · pr = 1 und durch Ausklammern von pi (k − p1 p2 · · · 6 pi · · · pr )pi = 1, was wiederum nach der Definition der Teilbarkeit bedeutet pi |1. Dies ist jedoch nicht möglich, da jede Primzahl größer als 1 ist. 3.3 Der Fundamentalsatz der elementaren Zahlentheorie Definition 3.7 (Primfaktor) p ∈ N heißt Primfaktor von a ∈ N0 , wenn p|a und p Primzahl ist. 3 TEILBARKEIT, PRIMZAHLEN UND PRIMFAKTORZERLEGUNG 8 Beispiel 3.8 Die Primfaktoren von 18 sind 2 und 3. 6 ist kein Primfaktor von 18 weil 6 keine Primzahl ist. 5 ist kein Primfaktor von 18 weil 56 | 18. Definition 3.9 (Primfaktorzerlegung) Eine Folge von Primzahlen p1 , p2 , . . . , pk heißt Primfaktorzerlegung von a wenn a = p1 p2 · · · pk . Beispiel 3.10 Eine Primfaktorzerlegungen von a = 28 ist 2, 2, 7, eine andere ist 2, 7, 2, und noch eine ist 7, 2, 2. Das nächste Theorem sagt, daß es keine weiteren Primfaktorzerlegungen von a gibt. Aufgabe. Berechnen Sie eine Primfaktorzerlegung von 21. Wie sieht die Primfaktorzerlegung von 2110 aus? Lösung. Eine Primfaktorzerlegung von 21 ist 3, 7, denn 3 × 7 = 21. Eine Primfaktorzerlegung von 2110 erhält man z.B. indem man die Zerlegung von 21 einfach 10 mal hintereinander schreibt. Aufgabe. Berechnen Sie eine Primfaktorzerlegung von 1683286822654 mit Maple. Verwenden Sie dazu die Maple Funktion ifactor. Lösung. Eine Primfaktorzerlegung von 1683286822654 ist 2, 43, 73, 73, 89, 41269. Theorem 3.11 (Fundamentalsatz der elementaren Zahlentheorie) Jede natürliche Zahl n ≥ 2 besitzt eine Primfaktorzerlegung. Abgesehen von der Reihenfolge der Faktoren ist diese Zerlegung eindeutig. Beweis. Das Theorem macht aus zwei Aussagen: Die Existenz einer Primfaktorzerlegung und deren Eindeutigkeit. • Existenz. Der Existenzbeweis wird mit vollständiger Induktion durchgeführt. – Induktionsanfang. Der Induktionsanfang für n = 2 ist sofort klar, da 2 die triviale Primfaktorzerlegung 2 besitzt. – Induktionshypothese. Wir nehmen an, daß für jedes ` mit 2 ≤ ` ≤ n eine Primfaktorzerlegung existiert. – Induktionsschritt. Zu zeigen ist, daß auch für n + 1 eine Primfaktorzerlegung existiert. Dies trifft sicher zu, falls n + 1 eine Primzahl ist. Andernfalls muß es zwei Zahlen 1 < p, q < n + 1 geben so daß pq = n + 1. Aufgrund der Induktionshypothese haben p und q Primfaktorzerlegungen p = p1 , p2 , · · · , pk q = q1 , q2 , · · · , qm , 3 TEILBARKEIT, PRIMZAHLEN UND PRIMFAKTORZERLEGUNG 9 womit n + 1 die Primfaktorzerlegung n = p1 , p2 , . . . , pk q1 , q2 , . . . , qm hat. • Eindeutigkeit. Der Eindeutigkeitsbeweis ist ein Widerspruchsbeweis. Angenommen, es würde Zahlen geben, die zwei verschiedene Zerlegungen zulassen und N sei die kleinste Zahl mit dieser Eigenschaft. Hat N die beiden Primfaktorzerlegungen N = p1 p2 · · · pr = q1 q2 · · · qs so gilt pi 6= qj für alle i, j, denn ein gemeinsamer Primteiler beider Darstellungen würde N teilen und eine ganze Zahl N 0 < N liefern mit der selben Eigenschaft, was im Widerspruch zur Minimalität von N steht. Ist o.B.d.A. p1 < q1 , so definieren wir die neue Zahl Q = p1 q2 q3 · · · qm . Dann gilt p1 |Q und p1 |N und damit p1 |(N − Q) nach Theorem 3.3. Daher besitzt N − Q eine eindeutige Primfaktorzerlegung N − Q = p1 t1 t2 · · · th . Außerdem können wir N − Q schreiben als N − Q = (q1 − p1 )q2 q3 · · · qm . Sei nun r1 r2 . . . rs so, daß q1 − p1 = r1 r2 . . . rs . Falls q1 − p1 > 1, seien die ri prim, andernfalls ist s = 1 und r1 = 1. Damit haben wir zwei Primfaktorzerlegungen von N − Q: N − Q = p1 t1 t2 · · · th = r1 r2 . . . rs q2 q3 · · · qm . Wir zeigen nun, daß diese beiden Zerlegungen unterschiedlich sind. Zunächst zeigen wir, daß p1 6= ri für alle i. Dies folgt daraus, daß p1 6 |q1 − p1 , denn aus q1 − p1 = ap1 würde folgen q1 = (a + 1)p1 , was der Annahme widerspricht, daß q1 prim ist. Da also p1 6 |r1 r2 · · · rs , gilt p1 6= ri für alle i. Weiterhin gilt p1 6= qj für alle j, daher enthält die erste Primfaktorzerlegung den Faktor p1 , die zweite aber nicht und somit sind die beiden Primfaktorzerlegungen von N − Q unterschiedlich. Dies steht aber im Widerspruch zur angenommenen Minimalität von N . Im Folgenden sei p1 , p2 , p3 , . . . mit pi < pi+1 die Folge aller Primzahlen, d.h. p1 = 2, p2 = 3, p3 = 5, . . .. 3 TEILBARKEIT, PRIMZAHLEN UND PRIMFAKTORZERLEGUNG 10 Theorem 3.12 (Eindeutige Primexponentenfolge) Zu jeder Zahl a ∈ N gibt es eine eindeutige Folge a1 , a2 , a3 , . . . so daß a = pa1 1 pa2 2 pa3 3 . . . . Diese Folge nennt man Primexponentenfolge von a und bezeichnet sie mit π(a). Beweis. Folgt unmittelbar aus dem Fundamentalsatz (Theorem 3.11). Beispiel 3.13 Sei a = 198. Eine Primfaktorzerlegung von a ist 2, 3, 3, 11. Daraus folgt a = 21 × 32 × 50 × 70 × 111 . Die Primexponentenfolge von a ist also π(a) = 1, 2, 0, 0, 1, 0, 0, . . . . Beachten Sie, daß die Primexponentenfolge von 0 nicht definiert ist! Offensichtlich sind Primexponentenfolgen immer endlich, d.h. konstant Null ab einem bestimmten Index. Aufgabe. Berechnen Sie die Primexponentenfolgen von 7,8,9,10 und 11. Lösung. π(7) = 0, 0, 0, 1, 0, . . . π(8) = 4, 0, . . . π(9) = 0, 2, 0, . . . π(10) = 1, 0, 1, 0, . . . π(11) = 0, 0, 0, 0, 1, 0, . . . Aufgabe. Zeigen Sie, daß die Abbildung π ∈ N → N∗0 bijektiv ist. Als Konsequenz folgt eine Tatsache, die zunächst alles andere als offensichtlich ist: N∗0 ist abzählbar! Lösung. Zu zeigen ist, daß π ∈ N → N∗0 injektiv und surjektiv ist. • Surjektivität. Zu zeigen ist, daß es zu jeder endlichen Folge a1 , a2 , . . . ∈ N∗0 eine Zahl a ∈ N gibt mit π(a) = a1 , a2 , . . .. Diese Zahl a ist offensichtlich a = pa1 1 pa2 2 · · · . • Injektivität. Zu zeigen ist, daß wenn a 6= b dann auch π(a) 6= π(b). Nehmen wir also an, daß a 6= b, aber π(a) = π(b). Sei x1 , x2 , . . . = π(a) = π(b). Dann ist a = px1 1 px2 2 . . . = b, was ein Widerspruch zur Annahme ist. Da es zu jeder Zahl in N genau eine Primexponentenfolge in N∗0 gibt, kann man auch von der Darstellung einer natürlichen Zahl entweder als Folge ihrer Dezimalstellen oder als Folge ihrer Primexponenten sprechen. Je nachdem, was man machen möchte ist die eine oder die andere Darstellung geschickter. Im 3 TEILBARKEIT, PRIMZAHLEN UND PRIMFAKTORZERLEGUNG 11 Folgenden zeigen wir, daß z.B. die Multiplikation und der Test auf Teilbarkeit von natürlichen Zahlen viel einfacher ist wenn die Zahlen durch ihre Primexponentenfolgen dargestellt sind. Definition 3.14 (Komponentenweise Addition +∗ von Folgen) Die komponentenweise Addition +∗ von Folgen ist definiert durch a1 , a2 , . . . +∗ b1 , b2 , . . . = a1 + b1 , a2 + b2 , . . . Theorem 3.15 Für a, b 6= 0 gilt π(ab) = π(a) +∗ π(b). Beweis. Sei π(a) = a1 , a2 , . . . und π(b) = b1 , b2 , . . .. Dann ist = pa1 1 pa2 2 . . . pb11 pb22 . . . ab = pa1 1 +b1 pa2 2 +b2 . . . und somit π(ab) = a1 + b1 , a2 + b2 , . . . = π(a) +∗ π(b). Daraus folgt, daß π ∈ (N, ×, 1) → (N∗ , +∗ , (0, 0, . . .)) ein Monoid Isomorphismus ist, was sich wie üblich anschaulich durch ein kommutatives Diagramm darstellen läßt: × N −−−−→ N π πy y N∗ −−−− → N∗ ∗ + Aufgabe. Gegeben seien zwei Zahlen a = 15895 und b = 17150 mit Primexponentenfolgen π(a) = 0, 0, 1, 0, 1, 0, 2, 0, . . . π(b) = 1, 0, 2, 3, 0, . . . Berechnen Sie ohne Hilfsmittel das Produkt von a und b in Dezimaldarstellung und in der Primexponentendarstellung. Was ging schneller? Lösung. • Produkt in Dezimaldarstellung: a × b = 272599250. Die Berechnung erfordert 25 Ziffernmultiplikationen und etwa ebenso viele Additionen. • Produkt in Primexponentendarstellung: π(a) +∗ π(b) = 1, 0, 3, 3, 1, 0, 2, 0, . . . . Die Berechnung kostet nur 4 Ziffernadditionen und ist damit viel schneller. 3 TEILBARKEIT, PRIMZAHLEN UND PRIMFAKTORZERLEGUNG 12 Eine weitere Eigenschaft der Primexponentenfolgen stellt einen Zusammenhang zwischen der Teilbarkeitsrelation in N und der komponentenweise ≤ Relation auf N∗0 her: Definition 3.16 (≤∗ Relation auf Folgen) Die ≤∗ Relation auf Folgen ist definiert durch a1 , a2 , . . . ≤∗ b1 , b2 , . . . genau dann wenn a1 ≤ b1 und a2 ≤ b2 und . . . Theorem 3.17 a|b genau dann wenn π(a) ≤∗ π(b). Beweis. Sei wiederum π(a) = a1 , a2 , . . . und π(b) = b1 , b2 , . . .. Wie bei jedem “genau dann wenn” Theorem, sind zwei Richtungen zu beweisen: • Zu zeigen: Wenn a|b dann gilt ai ≤ bi für alle i. Nehmen wir also an a|b. Dann gibt es ein k so daß ak = b. Sei k1 , k2 , . . . die Primexponentenfolge von k. Aus Theorem 3.15 folgt ai + ki = bi für alle i, und somit ai ≤ bi . • Zu zeigen: Wenn ai ≤ bi für alle i dann gilt a|b. Nehmen wir also an ai ≤ bi für alle i. Sei ki = bi − ai und k = pk11 pk22 . . .. Dann gilt ak = b und somit a|b. Unter Anwendung von Theorem 3.17 ist es sehr einfach, Primexponentenfolgen aller Teiler einer Zahl zu bestimmen, deren Primexponentenfolge gegeben ist. Beispiel 3.18 Sei a = 3 × 52 = 75. Dann hat a die Primexponentenfolge 0, 1, 2, 0, 0, . . . . Die Primexponentenfolgen aller Teiler von a lassen sich mit Hilfe von Theorem 3.17 sofort hinschreiben: 0, 0, 0, 0, 0, . . . → 1 0, 1, 0, 0, 0, . . . → 31 = 3 0, 0, 1, 0, 0, . . . → 51 = 5 0, 1, 1, 0, 0, . . . → 31 × 51 = 15 0, 0, 2, 0, 0, . . . → 52 = 25 0, 1, 2, 0, 0, . . . → 31 × 52 = 75 Aufgabe. Benutzen Sie Theorem 3.17 um eine Formel für die Anzahl der Teiler einer Zahl a aus deren Primexponentenfolge herzuleiten. Prüfen Sie die Formel anhand einiger Beispiele. Lösung. Sei π(a) = a1 , a2 , . . . die Primexponentenfolge von a. Die Primexponentenfolgen der Teiler von a sind genau die Folgen, die komponentenweise 3 TEILBARKEIT, PRIMZAHLEN UND PRIMFAKTORZERLEGUNG 13 kleiner gleich sind als π(a). Für das erste Element einer solchen Folge hat man a1 + 1 Möglichkeiten (0,1,. . . , a1 ), für das zweite Element hat man a2 + 1 Möglichkeiten (0,1,. . . , a2 ) usw. Also gibt es insgesamt n = (1 + a1 )(1 + a2 ) · · · Primexponentenfolgen, die komponentenweise kleiner gleich π(a) sind und daher n Teiler von a. Sei z.B. a = 75 mit π(a) = 0, 1, 2, 0, . . ., d.h a1 = 0, a2 = 1, a3 = 2, a4 = 0, . . .. Dann ist (a1 + 1)(a2 + 1)(a3 + 1) · · · = 1 × 2 × 3 × 1 × ... = 6 und in der Tat hat a genau 6 Teiler 1, 3, 5, 15, 25, 75. Nicht nur Multiplizieren und Test auf Teilbarkeit ist mit Primexponentenfolgen leichter. Manche Eigenschaften lassen sich auch viel schneller einsehen und beweisen wenn man in Primexponentenfolgen denkt. Theorem 3.19 (Fundamentallemma, Euklid) Ist p eine Primzahl und p|ab, dann gilt p|a oder p|b. Beweis. Sei i der Index der Primzahl p in der Folge aller Primzahlen p1 , p2 , . . ., d.h. p = pi . Die Primexponentenfolge von pi ist daher 0, 0, 0, . . . , 0, 1, 0, 0, 0, . . . mit der 1 an der i-ten Stelle. Angenommen p|ab, dann folgt aus Theorem 3.17 daß 1 ≤ ai + bi . Das bedeutet 1 ≤ ai oder 1 ≤ bi . Nochmalige Anwendung von Theorem 3.17 (diesmal in der anderen Richtung) ergibt pi |a oder pi |b. Beispiel 3.20 Das folgende Beispiel zeigt, daß das Fundamentallemma nur für Primzahlen p gilt: Es gilt zwar 6|8 × 9 aber 6 teilt weder 8 noch 9. 3.4 Noch zwei Kuriositäten Zum Abschluß dieses Kapitels noch zwei Beispiele von ungelösten Problemen im Zusammenhang mit Primzahlen: Beispiel 3.21 Primzahlzwillingsproblem Ein Paar (p, q) wird Primzahlzwilling genannt, falls q und p Primzahlen sind und q = p + 2, also z.B. (3, 5), (5, 7), (11, 13), (29, 31), usw. So einfach man zeigen konnte, daß es unendlich viele Primzahlen gibt, so schwer scheint der Nachweis von unendlich vielen Primzahlzwillingen zu sein. Bisher konnte weder die Existenz noch die Nichtexistenz bewiesen werden. Aufgabe. Schreiben Sie ein Maple Programm, das alle Primzahlzwillinge aufzählt. Für den Test, ob eine Zahl prim ist verwenden Sie die Maple Funktion isprime. 3 TEILBARKEIT, PRIMZAHLEN UND PRIMFAKTORZERLEGUNG 14 Beispiel 3.22 Goldbachsche Vermutung, 1742 Es scheint so, als ließe sich jede gerade Zahl ≥ 6 als Summe zweier ungerader Primzahlen darstellen. Also z.B. 6 = 3+3, 8 = 3+5, 10 = 5+5, 12 = 7+5, usw. Diese Vermutung, die Goldbach 1742 in einem Briefwechsel mit Euler geäußert hat, ist bis heute weder bewiesen noch widerlegt worden. Aufgabe. Schreiben Sie ein Maple Programm, das nach einem Gegenbeispiel zur Goldbach’schen Vermutung sucht. 4 4 DIVISION MIT REST 15 Division mit Rest Die Division zweier natürlicher Zahlen geht meistens nicht auf, d.h. es bleibt ein Rest. So lernt man in der Grundschule, daß z.B. “13 geteilt durch 5 gleich 2 Rest 3.” In diesem Kapitel werden wir die Eigenschaften der ganzzahligen Division mit Rest genauer untersuchen und ein paar wichtige Eigenschaften kennen lernen. Theorem 4.1 (Division mit Rest) Für beliebiges a ∈ N0 , b ∈ N existieren genau zwei Zahlen q, r ∈ N0 (Quotient, Rest) so daß a = qb + r und 0 ≤ r < b. Beweis. Sei a ∈ N0 und b ∈ N beliebig. Zu zeigen ist, daß es ein q, r gibt, das a = qb + r und 0 ≤ r < b. erfüllt (Existenz) und daß es genau ein q, r mit dieser Eigenschaft gibt (Eindeutigkeit). • Existenz. Sei q die größte Zahl so daß qb ≤ a und sei r = a−qb. Dann ist a = qb + r und 0 ≤ r. Bleibt zu zeigen, daß r < b. Angenommen r ≥ b, dann wäre (q + b)b ≤ a, was im Widerspruch zur Definition von q steht. • Eindeutigkeit. Angenommen es gäbe eine weitere Darstellung a = q 0 b + r0 mit 0 ≤ r0 < b. Sei o.B.d.A. r ≥ r0 . Dann folgt b(q 0 − q) = r − r0 und somit wäre r − r0 durch b teilbar. Da aber r − r0 < b, ist das nur möglich, wenn r − r0 = 0, woraus sich r = r0 und damit auch q = q 0 ergibt. Definition 4.2 (div,mod) Da für beliebiges a ∈ N0 und b ∈ N gemäß Theorem 4.1 genau ein q, r ∈ N0 existiert mit a = qb + r und 0 ≤ r < b können wir die Funktionen div ∈ N0 × N → N0 mod ∈ N0 × N → N0 definieren durch: q = a div b r = a mod b. 4 DIVISION MIT REST 16 Beispiel 4.3 13 div 5 = 2, 13 mod 5 = 3 9 div 3 = 3, 9 mod 3 = 0 2 div 8 = 0, 2 mod 8 = 2 Zum Abschluß des Kapitels noch eine sehr nützliche Eigenschaft der mod Funktion. Theorem 4.4 Für alle a ∈ N0 , b ∈ N und k ∈ Z mit k ≤ a div b gilt a mod b = (a − kb) mod b. Beweis. Sei q = a div b r = a mod b. Dann ist a = qb + r und 0 ≤ r < b. Für beliebiges k ∈ Z ist daher a − kb = (q − k)b + r und 0 ≤ r < b. Ist k ≤ q, dann ist q − k ≥ 0 und a − kb ≥ 0, d.h. (a − kb) mod b = r. Damit läßt sich die Berechnung der mod Funktion wie folgt vereinfachen: Merkregel 4.5 (Berechnung von a mod b) • Ist a > b so läßt sich die Berechnung von a mod b vereinfachen, indem man a um b verkleinert: (a − b) mod b. • Ist a < b so ist a mod b = a. • Ist a = b so ist a mod b = 0. 5 5 GRÖßTER GEMEINSAMER TEILER 17 Größter gemeinsamer Teiler Definition 5.1 (Gemeinsamer Teiler) d heißt gemeinsamer Teiler von a und b wenn d|a und d|b. Offensichtlich haben zwei beliebige Zahlen immer den gemeinsamen Teiler 1. Sei im folgenden wieder p1 , p2 , p3 , . . . mit pi < pi+1 die Folge aller Primzahlen und a1 , a2 , a3 . . ., b1 , b2 , b3 , . . . und d1 , d2 , d3 , . . . die Primexponentenfolgen von a, b und d. Theorem 5.2 (Gemeinsamer Teiler und Primexponenten) d ∈ N ist ein gemeinsamer Teiler von zwei Zahlen a, b ∈ N genau dann wenn di ≤ min(ai , bi ) für alle i. Beweis. Folgt direkt aus Theorem 3.17. Das heißt insbesondere, daß a und b nur endlich viele gemeinsame Teiler haben, falls nicht beide gleich Null sind. Daher gibt es in diesem Fall immer einen größten gemeinsamen Teiler. Definition 5.3 (Größter gemeinsamer Teiler (ggt)) Sind a und b nicht beide gleich Null, so bezeichnet ggt(a, b) den größten gemeinsamen Teiler von a und b. Ist ggt(a, b) = 1 so heißen a und b teilerfremd oder auch relativ prim. Theorem 5.4 (ggt und Primexponenten) Sind a und b ungleich Null mit Primexponentenfolgen ai und bi , i = 1, 2, . . . so ist die Primexponentenfolge von ggt(a, b) gegeben durch min{ai , bi }, i = 1, 2, . . .. Der größte gemeinsame Teiler von a und b ist folglich min(a1 ,b1 ) min(a2 ,b2 ) ggt(a, b) = p1 p2 .... Beweis. Folgt aus Theorem 5.2. Theorem 5.4 läßt sich in folgender Merkregel formulieren: Merkregel 5.5 Der ggt von a und b ist das Produkt der gemeinsamen Primfaktoren von a und b. Die ggt Berechnung läßt sich vereinfachen, wenn man schon einen gemeinsamen Faktor der Argumente kennt und diesen vor die ggt Berechnung zieht. Beispiel 5.6 ggt(40, 50) = 10 × ggt(4, 5). 5 GRÖßTER GEMEINSAMER TEILER 18 Theorem 5.7 Für jedes m ∈ N gilt ggt(ma, mb) = mggt(a, b). Beweis. Folgt aus Theorem 3.15 und 5.4. Aufgabe. Zeigen Sie, daß für jedes m ∈ N die Multiplikation mit m ein Morphismus (N, ggt) → (N, ggt) ist und zeichnen Sie ein entsprechendes kommutatives Diagramm. Lösung. Folgt direkt aus Theorem 5.7. ggt N −−−−→ ×my N ×m y N −−−−→ N ggt Theorem 5.8 Ist m ein gemeinsamer Teiler von a und b, so ist m auch ein Teiler von ggt(a, b). Beweis. Angenommen m ist ein gemeinsamer Teiler von a und b. Dann existieren a0 , b0 so daß ma0 = a, mb0 = b. Aus Theorem 5.7 folgt daß ggt(a, b) = ggt(ma0 , mb0 ) = mggt(a0 , b0 ) d.h. m ist ein Teiler von ggt(a, b). Um den ggt von a und b zu berechnen, kann man natürlich Theorem 5.4 benutzen. Der Haken dabei ist allerdings, daß man dafür erst die Primfaktorzerlegung von a und b berechnen muß und das ist für große Werte von a und b sehr aufwendig. Im Folgenden werden wir einen viel schnelleren Weg kennen lernen, den berühmten Euklidischen Algorithmus. 5.1 Euklidischer Algorithmus Das folgende Theorem ist der eigentliche Schlüssel zur schnellen Berechnung des größten gemeinsamen Teilers mit dem Euklidischen Algorithmus. Theorem 5.9 (Euklidischer Algorithmus) Für beliebiges a ∈ N0 und b ∈ N gilt ggt(a, b) = ggt(a mod b, b). Ist also der ggt von a und b zu berechnen, und o.B.d.A. a > b, so läßt sich dies nach Theorem 5.9 durch eine ggt Berechnung mit den kleineren Argumenten a mod b und b durchführen. Dies legt einen iterativen Algorithmus 5 GRÖßTER GEMEINSAMER TEILER 19 zur ggt Berechnung nahe, bei dem die Argumente immer kleiner werden bis schließlich eines der beiden Null ist und der ggt dann durch das andere gegeben ist. Dieses Vorgehen ist viel schneller als die Primfaktorzerlegung von a und b. Doch zunächst der Beweis von Theorem 5.9. Beweis. Sei g = ggt(a, b) 0 = ggt(a mod b, b) g Wir müssen zeigen, daß g = g 0 . Dies bewerkstelligen wir, indem wir zeigen, daß g|g 0 und g 0 |g, woraus natürlich unmittelbar g = g 0 folgt. Vorab legen wir noch fest, daß q = a div b, d.h. a mod b = a − qb. • Zeigen wir also zunächst g|g 0 . Unter Zuhilfenahme von Theorem 5.8 genügt es zu zeigen, daß g|a mod b und g|b. Aus g = ggt(a, b) folgt sofort g|b, d.h. es bleibt g|a mod b zu zeigen. Da g = ggt(a, b) gibt es Zahlen α und β so daß αg = a βg = b Damit haben wir alles zusammen was wir brauchen: = a − qb a mod b = αg − qβg (α − qβ)g = und somit folgt g|a mod b. • Zeigen wir nun g 0 |g. Unter Zuhilfenahme von Theorem 5.8 genügt es wiederum zu zeigen, daß g 0 |a und g 0 |b. Aus g 0 = ggt(a mod b, b) folgt sofort g 0 |b, d.h. es bleibt g 0 |a zu zeigen. Da g 0 = ggt(a mod b, b) gibt es Zahlen γ und β so daß γg 0 = a mod b βg 0 = b Damit können wir schreiben γg 0 0 0 γg + qβg (γ + qβ)g 0 = a mod b = a − qb = a − qβg 0 = = a a, und somit folgt g 0 |a. Nachdem die Formalitäten erledigt sind, können wir nun den Euklidischen Algorithmus zur Berechnung des ggt formulieren. Hierzu zunächst ein Beispiel. 5 GRÖßTER GEMEINSAMER TEILER Beispiel 5.10 20 Angenommen wir möchten ggt(189, 48) berechnen. Nach Theorem 5.9 gilt ggt(189, 48) = ggt(189 mod 48, 48) = ggt(45, 48). Bevor wir Theorem 5.9 erneut anwenden, vertauschen wir die beiden Argumente, um sicherzustellen, daß das erste Argument das größere ist. ggt(45, 48) = ggt(48, 45). Nun geht’s weiter mit Theorem 5.9: ggt(48, 45) = ggt(48 mod 45, 45) = ggt(3, 45). Wieder vertauschen wir die beiden Argumente: ggt(3, 45) = ggt(45, 3) und wenden Theorem 5.9 an: ggt(45, 3) = ggt(45 mod 3, 3) = ggt(0, 3). Da nun eins der ggt Argumente Null ist, bricht der Algorithmus ab und der ggt ist das andere Argument, nämlich 3. Dieses Verfahren läßt sich kompakt wie folgt formulieren: Euklidischer Algorithmus zur Berechnung des größten gemeinsamen Teilers Input: Output: a ∈ N0 , b ∈ N. ggt(a, b). x0 = a x1 = b i=1 while xi 6= 0 xi+1 = xi−1 mod xi i=i+1 return xi−1 . Um uns zu vergewissern, daß der Euklidische Algorithmus auch wirklich funktioniert, rechnen wir ein Beispiel durch. Beispiel 5.11 Wir rufen den Euklidischen Algorithmus mit den Inputs a = 149 und b = 45 auf. i 0 1 2 3 4 5 6 xi 149 mod 45 45 mod 14 14 mod 3 3 mod 2 2 mod 1 = = = = = 149 45 14 3 2 1 0 5 GRÖßTER GEMEINSAMER TEILER 21 Damit erhalten wir den Output x5 = 1, was in der Tat ggt(149, 45) ist. Aufgabe. Zeigen Sie, daß der Euklidische Algorithmus terminiert. Hinweis: Zeigen Sie, daß die Folge x1 , x2 , . . . streng monoton fällt. Aufgabe. Implementieren Sie den Euklidischen Algorithmus in Maple. 5.2 Erweiterter Euklidischer Algorithmus Zum Abschluß dieses Kapitels noch eine ganz wichtige Eigenschaft des ggt’s: Theorem 5.12 Für beliebige a, b (nicht beide gleich Null) gibt es ganze Zahlen α, β ∈ Z so daß ggt(a, b) = αa + βb. Die ganzen Zahlen α und β werden auch Kofaktoren des ggt’s genannt. Hierzu zunächst ein Beispiel. Beispiel 5.13 ggt(10, 4) = 2 = 1 × 10 − 2 × 4 Beweis. Seien a, b beliebig und o.B.d.A. b 6= 0. Sei x0 , x1 , . . . , xn mit xn−1 = ggt(a, b) und xn = 0 die vom Euklidischen Algorithmus generierte Zahlenfolge. Wir zeigen nun, daß es für alle i = 0, 1, . . . , n ein αi , βi ∈ Z gibt, so daß xi = αi a + βi b. (5.1) Insbesondere für den Spezialfall i = n − 1 sind dann die Kofaktoren xn−1 = ggt(a, b) = αn−1 a + βn−1 b gefunden. Für i = 0 wählt man α0 = 1 und β1 = 0. Für i = 1 wählt man α0 = 0 und β1 = 1. Angenommen wir haben αi und βi für i = 1, 2, . . . , k < n gefunden, die (5.1) erfüllen. Bleibt zu zeigen, daß es auch αk+1 und βk+1 gibt, welche (5.1) für i = k + 1 erfüllt. Da xk+1 = xk−1 mod xk , gibt es ein qk+1 so daß xk+1 = xk−1 − qk+1 xk . Folglich gilt xk+1 = xk−1 mod xk = xk−1 − qk+1 xk = αk−1 a + βk−1 b − qk+1 (αk a + βk b) = (αk−1 − qk+1 αk )a + (βk−1 − qk+1 βk )b, 5 GRÖßTER GEMEINSAMER TEILER 22 d.h. mit αk+1 = αk−1 − qk αk βk+1 = βk−1 − qk βk ist (5.1) für i = k + 1 erfüllt. Der Beweis von Theorem 5.12 ist konstruktiv, d.h. er zeigt uns, wie man α und β tatsächlich für gegebene a, b berechnen kann. Dies wird kompakt in dem folgenden Algorithmus, der auch erweiterter Euklidischer Algorithmus genannt wird, formuliert. Erweiterter Euklidischer Algorithmus zur Berechnung des ggt’s und der Kofaktoren a ∈ N0 , b ∈ N. ggt(a, b) und α, β ∈ Z so daß ggt(a, b) = αa + βb Input: Output: x0 = a, α0 = 1, β0 = 0 x1 = b, α1 = 0, β1 = 1 i=1 while xi 6= 0 xi+1 = xi−1 mod xi qi+1 = xi−1 div xi αi+1 = αi−1 − qi+1 αi βi+1 = βi−1 − qi+1 βi i=i+1 return xi−1 , αi−1 , βi−1 . Beispiel 5.14 Wir rufen den erweiterten Euklidischen Algorithmus mit den Inputs a = 149 und b = 45 auf. i xi 0 1 2 3 4 5 6 149 45 149 mod 45 = 14 45 mod 14 = 3 14 mod 3 = 2 3 mod 2 = 1 2 mod 1 = 0 qi αi βi 149 div 45 = 3 45 div 14 = 3 14 div 3 = 4 3 div 2 = 1 2 div 1 = 2 1 0 1−3×0=1 0 − 3 × 1 = −3 1 − 4 × −3 = 13 −3 − 1 × 13 = −16 13 − 2 × −16 = 45 0 1 0 − 3 × 1 = −3 1 − 3 × −3 = 10 −3 − 4 × 10 = −43 10 − 1 × −43 = 53 −43 − 2 × 53 = −149 Damit erhalten wir den Output x5 = 1, was in der Tat ggt(149, 45) ist. Man überzeugt sich auch leicht, daß die Schleifeninvariante xi = αi × 149 + βi × 45 für alle i gültig ist. Aufgabe. Berechnen Sie ggt und Kofaktoren der Zahlenpaare (76,28), (105,21), (82,74) mit dem erweiterten Euklidischen Algorithmus von Hand und prüfen Sie die Schleifeninvariante. Implementieren Sie den Algorithmus in Maple und prüfen Sie ihre Ergebnisse. 6 KONGRUENZ UND ARITHMETIK MODULO M 6 6.1 23 Kongruenz und Arithmetik modulo m Rechenregeln modulo m Angenommen wir müssen einen arithmetischen Ausdruck auswerten, bei dem große Zwischenergebnisse auftreten, interessieren uns aber nur für das Ergebnis modulo m, wobei m eine kleine Zahl ist. Man kann sich nun fragen, ob man nicht die modulo m Operation nicht “vorziehen” kann, um den hohen Rechenaufwand, der mit den großen Zwischenergebnissen verbunden ist, zu vermeiden. Beispiel 6.1 Angenommen, wir möchten (18 × 29 × 32) mod 5 berechnen. Dies kann man tun, indem man zuerst 18, 29 und 32 multipliziert, und das Ergebnis modulo 5 berechnet. Man erhält (18 × 29 × 32) mod 5 = 16704 mod 5 = 4. Die Berechnung des großen Zwischenergebnisses 16704 war hierbei ziemlich anstrengend und in Anbetracht des kleinen Endergebnisses 4 scheint der Aufwand nicht wirklich gerechtfertigt. Wie wir in diesem Kapitel sehen werden, läßt sich dieser vermeiden, indem wir die modulo 5 Operation bereits auf die Operanden anwenden. Wir berechnen also zuerst 18 mod 5 = 3, 29 mod 5 = 4 und 32 mod 5 = 2 und erhalten (3 × 4 × 2) mod 5 = 24 mod 5 = 4. Das größte Zwischenergebnis in diesem Fall ist 24. Man kann sogar noch einen Schritt weitergehen und zuerst (3 × 4) mod 5 = 12 mod 5 = 2 berechnen und dann (2 × 2) mod 5 = 4. In diesem Fall war das größte Zwischenergebnis sogar nur 12. Zusammenfassend haben wir also gesehen, daß (18 × 29 × 32) mod 5 = (18 mod 5) × (29 mod 5) mod 5 × (32 mod 5) mod 5, wobei die rechte Seite viel einfacher zu berechnen ist als die linke. Theorem 6.2 (Rechenregeln modulo m) (1) (a + b) mod m (2) (a + b) mod m (3) (a × b) mod m (4) (a × b) mod m Beweis. Sei q = a div m. = ((a mod m) + b) mod m = (a + (b mod m)) mod m = ((a mod m) × b) mod m = (a × (b mod m)) mod m 6 KONGRUENZ UND ARITHMETIK MODULO M 24 (1) Nach Theorem 4.4 gilt (a + b) mod m = (a + b − qm) mod m = ((a mod m) + b) mod m. (2) Folgt aus (1) und der Kommutativität von +. (3) Nach Theorem 4.4 gilt (a × b) mod m = (a × b − bqm) mod m = ((a − qm) × b) mod m (4) Folgt aus (3) und der Kommutativität von ×. Merkregel 6.3 (Rechnen modulo m) Bei der Auswertung eines arithmetischen Ausdrucks modulo m kann man die modulo m Funktion beliebig auf Zwischenergebnisse anwenden oder weglassen. Aufgabe. Berechnen Sie (1320 ) mod 3 ohne Verwendung von Hilfsmitteln. Lösung. Unter Verwendung der Rechenregeln mod m (Theorem 6.2) kann man schreiben 1320 mod 3 6.2 = (13 × 13 × · · · × 13) mod 3 = ((13 mod 3) × (13 mod 3) × · · · × (13 mod 3)) mod 3 = (1 × 1 × · · · × 1) mod 3 = 1 Kongruenz modulo m Definition 6.4 (Kongruenz modulo m) Für jedes m > 0 ist die Relation ≡m ⊆ N 0 × N 0 definiert durch a ≡m b genau dann wenn a mod m = b mod m. Wenn a ≡m b sagt man “a ist kongruent zu b modulo m”. Anders ausgedrückt ist a ≡m b genau dann, wenn sich a und b nur um ein Vielfaches von m unterscheiden bzw. den selben Rest bei der Division durch m haben. Beispiel 6.5 ≡3 8 16 ≡7 2 4 ≡4 0 5 ≡2 9 7 6≡2 4 4 6≡8 3 5 6 KONGRUENZ UND ARITHMETIK MODULO M 25 • Die zu 4 kongruenten Zahlen modulo 5 sind 4, 9, 14, 19, 24, . . .. • Die zu 0 kongruenten Zahlen modulo 6 sind 0, 6, 12, 18, . . .. • Die zu 1 kongruenten Zahlen modulo 2 sind die ungeraden Zahlen, während die zu 0 kongruenten Zahlen modulo 2 die geraden Zahlen sind. Theorem 6.6 Für jedes m > 0 ist ≡m eine Äquivalenzrelation. Beweis. Sei m > 0 und a, b, c ∈ N0 beliebig. • Reflexivität. Zu zeigen ist a ≡m a. Aufgrund der Reflexivität von = ist a mod m = a mod m und somit a ≡m a. • Symmetrie. Zu zeigen ist wenn a ≡m b, dann auch b ≡m a. Nehmen wir also an a ≡m b. Dann ist a mod m = b mod m und aus der Symmetrie von = folgt b mod m = a mod m, d.h. b ≡m a. • Transitivität. Zu zeigen ist wenn a ≡m b und b ≡m c dann auch a ≡m c. Nehmen wir also an a ≡m b und b ≡m c. Dann ist a mod m = b mod m und b mod m = c mod m. Aus der Transitivität von = folgt a mod m = c mod m, d.h. a ≡m c. Die Tatsache, daß ≡m eine Äquivalenzrelation ist, folgt also unmittelbar daraus, daß = eine Äquivalenzrelation ist. Die Äquivalenzklassen von ≡3 sind Beispiel 6.7 {0, 3, 6, 9, . . .}, {1, 4, 7, 10, . . .}, {2, 5, 8, 11, . . .} Wie man anhand von Beispiel 6.7 sieht, hat die Äquivalenzrelation ≡m genau m Äquivalenzklassen { { { { 0, m, 2m, 3m, 1, 1 + m, 1 + 2m, 1 + 3m, 2, 2 + m, 2 + 2m, 2 + 3m, ... ... ... ... m − 1, 2m − 1, 3m − 1, 4m − 1, ... ... ... ... ... }, }, }, } und mit den Zahlen 0, 1, 2, . . . , m − 1 hat man zu jeder Äquivalenzklasse genau einen Repräsentanten. 6 KONGRUENZ UND ARITHMETIK MODULO M 26 Theorem 6.8 Wenn a1 ≡m b1 und a2 ≡m b2 dann auch a1 + a2 ≡m b1 + b2 a1 × a2 ≡m b1 × b2 Beweis. Angenommen a1 ≡m b1 und a2 ≡m b2 . Dann ist a1 mod m = b1 mod m a2 mod m = b2 mod m. Somit ist (a1 + a2 ) mod m = ((a1 mod m) + (a2 mod m)) mod m = ((b1 mod m) + (b2 mod m)) mod m = (b1 + b2 ) mod m, (Theorem 6.2) (Theorem 6.2) d.h. a1 + a2 ≡m b1 + b2 . Weiterhin ist (a1 × a2 ) mod m = ((a1 mod m) × (a2 mod m)) mod m = ((b1 mod m) × (b2 mod m)) mod m = (b1 × b2 ) mod m, (Theorem 6.2) (Theorem 6.2) d.h. a1 × a2 ≡m b1 × b2 . 6.3 Die Struktur (Zm , ⊕m , ⊗m ) Definition 6.9 (Zm , ⊕m , ⊗m ) Für jedes m > 0 sei Zm = {0, 1, 2, . . . , m − 1}. Die Funktionen ⊕m , ⊗m ∈ Zm × Zm → Zm sind definiert durch Beispiel 6.10 a ⊕m b = (a + b) mod m a ⊗m b = (ab) mod m Schauen wir uns (Z4 , ⊕4 , ⊗4 ) genauer an: ⊕4 0 1 2 3 ⊗4 0 1 2 3 0 1 2 3 0 1 2 3 1 2 3 0 2 3 0 1 3 0 1 2 0 1 2 3 0 0 0 0 0 1 2 3 0 2 0 2 0 3 2 1 Aufgabe. Fertigen Sie analoge Wertetabellen wie in Beispiel 6.10 für (Z3 , ⊕3 , ⊗3 ) und (Z6 , ⊕6 , ⊗6 ) an. 6 KONGRUENZ UND ARITHMETIK MODULO M 27 Theorem 6.11 (mod m ist ein Morphismus) Für jedes m > 0 ist die modulo m Funktion ein Morphismus mod m ∈ (N, +, ×) → (Zm , ⊕m , ⊗m ). Dieser Sachverhalt läßt sich wieder anschaulich durch kommutative Diagramme darstellen: + N −−−−→ mod my × N −−−−→ mod my N ymod m Zm −−−−→ Zm N ymod m Zm −−−−→ Zm ⊕m ⊗m Beweis. Der Beweis folgt fast sofort aus der Definition von ⊕m und ⊗m und den modulo m Rechenregeln (Theorem 6.2). (a + b) mod m (ab) mod m = ((a mod m) + (b mod m)) mod m = (a mod m) ⊕m (b mod m) = ((a mod m)(b mod m)) mod m = (a mod m) ⊗m (b mod m). Theorem 6.12 Für jedes m > 1 ist (Zm , ⊕m , ⊗m ) ein kommutativer Ring mit Einselement. Beweis. Sei m > 1 und a, b, c ∈ Zm beliebig. • Assoziativität von ⊕m . (a ⊕m b) ⊕m c = (((a + b) mod m) + c) mod m = (a + b + c) mod m = (a + ((b + c) mod m)) mod m = a ⊕m (b ⊕m c) • Neutrales Element von ⊕m . Das neutrale Element bzgl. ⊕m ist 0. a ⊕m 0 = (a + 0) mod m = a mod m = a • Inverses Element von ⊕m . Das inverse Element von a bzgl. ⊕m ist m − a. a ⊕m (m − a) = = (a + (m − a)) mod m m mod m = 0 6 KONGRUENZ UND ARITHMETIK MODULO M 28 • Kommutativität von ⊕m . a ⊕m b = (a + b) mod m = (b + a) mod m = b ⊕m a. • Assoziativität von ⊗m . (a ⊗m b) ⊗m c = (((ab) mod m)c) mod m = (abc) mod m = (a((bc) mod m)) mod m = a ⊗m (b ⊗m c) • Neutrales Element von ⊗m . Das neutrale Element von ⊗m ist 1. Da m > 1 ist 1 ∈ Zm . a ⊗m 1 = (a1) mod m = a mod m = a. • Kommutativität von ⊗m . a ⊗m b = (ab) mod m = (ba) mod m = b ⊗m a. • Distributivitätsgesetz. Da ⊗ kommutativ ist, genügt es ein Distributivitätsgesetz nachzuweisen. a ⊗m (b ⊕m c) = (a((b + c) mod m)) mod m = (a(b + c)) mod m = (ab + ac) mod m = (((ab) mod m) + ((ac) mod m)) mod m = (a ⊗m b) ⊕m (a ⊗m c) Bemerkung. In der Literatur wird Zm meist als Menge der Äquivalenzklassen von ≡m und ⊕m und ⊗m über Repräsentanten dieser Klassen definiert. Man nennt Zm daher auch Restklassenring. Der Ring (Zm , ⊕m , ⊗m ) ist i.a. kein Körper. Ist m > 1 und m = ab eine zusammengesetzte Zahl, so existiert zu a kein inverses Element bzgl. ⊗m . Dies kann man wie folgt sehen. Nehmen wir an, x ∈ Zm wäre ein zu a inverses Element bzgl. ⊗m , d.h. a ⊗m x = 1. Dann folgt b = b ⊗m 1 = b ⊗m (a ⊗m x) = (b ⊗m a) ⊗m x = ((ba) mod m) ⊗m x = (m mod m) ⊗m x = 0 ⊗m x = 0, 6 KONGRUENZ UND ARITHMETIK MODULO M 29 was im Widerspruch zu m = ab und m 6= 0 steht. Theorem 6.13 Ist a ∈ Zm , a 6= 0 und ggt(a, m) = 1 dann existiert genau ein x ∈ Zm so daß a ⊗m x = 1. Beweis. Sei a ∈ Zm , a 6= 0 und ggt(a, m) = 1. • Existenz. Aus Theorem 5.12 folgt, daß es ganze Zahlen α, β gibt, so daß ggt(a, m) = αa + βm = 1. Sei nun x = α + qm wobei q ∈ Z so gewählt ist, daß x ∈ Zm . Bleibt zu zeigen, daß a ⊗m x = 1: a ⊗m x = (ax) mod m = (a(α + qm)) mod m = (αa + aqm) mod m = (αa + βm + aqm) mod m = (αa + βm) mod m = 1 mod m = 1. • Eindeutigkeit. Angenommen es gibt x, y ∈ Zm so daß a ⊗m x = 1 und a ⊗m y = 1. Sei o.B.d.A x ≥ y. Dann ist x − y ∈ Zm und a ⊗m (x − y) = 0, d.h. m|a(x − y). Da m und a teilerfremd sind, folgt m|(x − y). Da x − y ∈ Zm folgt x = y. Merkregel 6.14 Sind a und m teilerfremd, so kann man a invertieren modulo m. Der Beweis von Theorem 6.13 ist konstruktiv, d.h. er sagt uns wie wir inverse Elemente in Zm bzgl. ⊗m mit Hilfe des erweiterten Euklidischen Algorithmus berechnen können falls diese existieren. Beispiel 6.15 Berechnung des inversen Elementes von 2 bzgl. ⊗5 in Z5 . Durch den erweiterten Euklidischen Algorithmus mit Input a = 2 und m = 5 erhält man ggt(2, 5) = 1 und weiß dadurch, daß ein zu 2 inverse Element bzgl. ⊗5 existiert. Weiterhin erhält man α = −2 und β = 1, d.h. 1 = αa + βm = (−2) × 2 + 1 × 5. 6 KONGRUENZ UND ARITHMETIK MODULO M 30 Somit ergibt sich x = α + qm = −2 + 5q, was mit der Bedingung x ∈ Z5 zur Lösung q = 1 und x = 3 führt. In der Tat gilt 2 ⊗5 3 = 1, d.h. 3 ist das multiplikative inverse Element zu 2 in Z5 . Aufgabe. Prüfen Sie, ob a ein multiplikatives Inverses in Zm hat und falls ja, berechnen Sie dieses im Kopf für folgende Zahlenpaare. • a=4, m=7 • a=3, m=8 Aufgabe. Schreiben Sie ein Maple Programm, das für Inputs a ∈ Zm und m > 1 das Inverse von a bzgl. ⊗m berechnet. Das Programm soll mit einer Fehlermeldung abbrechen, falls das Inverse nicht existiert. Theorem 6.16 Ist m eine Primzahl, so ist (Zm , ⊕m , ⊗m ) ein Körper. Beweis. Aufgrund von Theorem 6.12 wissen wir bereits, daß (Zm , ⊕m , ⊗m ) ein kommutativer Ring mit Einselement ist. Bleibt also zu zeigen, daß zu jedem a ∈ Zm , a 6= 0 ein Element x ∈ Zm existiert so daß a ⊗m x = 1. Sei also a ∈ Zm , a 6= 0 beliebig. Da m prim ist, gilt ggt(a, m) = 1. Der Rest folgt aus Theorem 6.13. Bemerkung. Ist m eine Primzahl, so läßt sich zeigen, daß alle Körper mit m Elementen isomorph zu Zm sind. Außerdem zeigt man in der Algebra, daß endliche Körper mit n Elementen nur für solche n existieren, die Potenz einer Primzahl sind. So existiert z.B. ein Körper mit 9 = 32 oder 16 = 24 Elementen aber keiner mit 6 = 2 × 3 oder 45 = 32 × 5 Elementen. Alle endlichen Körper mit gleicher Anzahl von Elementen sind isomorph, d.h. bis auf Umbenennung der Elemente gleich, so daß man von dem endlichen Körper mit n = pk Elementen (wobei p prim und k ∈ N) sprechen kann. Nach seinem Entdecker Evariste Galois (1811-1832) heißt dieser Körper Galois Feld und wird in der Literatur mit GF(n) bezeichnet. Somit sollte auch klar sein, warum der 1987 von IBM gebaute Superrechner GF-11 und nicht etwa GF-10 oder GF-12 genannt wurde. (Tatsächlich steht GF-11 für 11 Giga Flops und hat nichts mit Galois Feldern zu tun...) 6.4 Schnelle Algorithmen zur Potenzierung modulo m In der Kryptographie, die ja eine der wichtigsten Anwendungen der Zahlentheorie ist, müssen oft Potenzen modulo m berechnet werden, d.h. ab mod m. Hierbei ist a ∈ Zm und b i.a. eine sehr große Zahl, z.B. im Bereich von 10100 . Die Berechnung von ab ist für so große b nicht machbar. 6 KONGRUENZ UND ARITHMETIK MODULO M 31 100 Beispiel 6.17 Sei a = 10, b = 10100 . Dann ist ab = 10(10 ) , was eine Zahl mit 10100 Dezimalstellen ist. Wollte man diese Zahl auf Papier schreiben, wobei man auf eine Seite 100 Zeilen und 100 Ziffern pro Zeile unterbringen kann, so bräuchte man 1096 Seiten. Legt man die Seiten aufeinander und nimmt man an, daß 100 Seiten 1cm dick sind, so wäre der Papierstapel 1089 km hoch. Selbst wenn man mit Lichtgeschwindigkeit reisen könnte, bräuchte man etwa 1076 Jahre um diese Strecke zurückzulegen. Es ist also klar, daß man zur Berechnung von ab mod m nicht zuerst ab berechnet und dann das Ergebnis modulo m nimmt. Ein besserer Weg, der große Zwischenergebnisse vermeidet, wird klar wenn wir uns das bereits bekannte kommutative Diagramm × N −−−−→ N mod my ymod m Zm −−−−→ Zm ⊗m nochmal anschauen bzw. erweitern: × × × N −−−−→ N −−−−→ · · · −−−−→ mod my N ymod m Zm −−−−→ Zm −−−−→ · · · −−−−→ Zm ⊗m ⊗m ⊗m Anstatt in N zu potenzieren und dann das Ergebnis per mod m nach Zm abzubilden, ist es viel besser, zuerst die Argumente nach Zm abzubilden und die Potenzierung in Zm durchzuführen, wo die Zwischenergebnisse nie größer als m − 1 werden. (Dies ist nichts anderes als die konsequente Anwendung der modulo m Rechenregeln, siehe Theorem 6.2). Im Diagramm heißt das, daß man zuerst nach unten und dann nach rechts geht und nicht zuerst nach rechts und dann nach unten. Die Tatsache, daß mod m ∈ (N, ×) → (Zm , ⊗m ) ein Morphismus ist, garantiert uns, daß beide Wege zum gleichen Ergebnis führen. Die Beschleunigung durch die modulo m Arithmetik reicht jedoch allein noch nicht aus. Wird die Potenzierung durch iteriertes Multiplizieren ab mod m = a ⊗m a ⊗m . . . ⊗m a gemacht, so müßten b − 1 Multiplikationen durchgeführt werden, was für ein 100-stelliges b immer noch viel zu lang dauern würde. Beispiel 6.18 Angenommen eine Multiplikation dauert 1 µs, dann würden b = 10100 Multiplikationen etwa 3 × 1086 Jahre dauern. Durch einen einfachen Trick kann man diese astronomische Rechenzeit aber auf Sekundenbruchteile reduzieren. Offensichtlich ist (ab/2 )2 falls b gerade b a = a × ab−1 falls b ungerade. Um zu sehen warum diese Formel so viel Rechenzeit spart, ein kleines Beispiel: 6 KONGRUENZ UND ARITHMETIK MODULO M 32 Beispiel 6.19 Zur Berechnung von a10 wären durch iteriertes Multiplizieren 9 Multiplikationen nötig. Durch Anwendung obiger Formel erhält man a10 = (a5 )2 was nur 4 Multiplikationen für die Berechnung von a5 und eine Multiplikation für die Quadrierung erfordert, d.h. insgesamt nur 5 statt 9 Multiplikationen. Durch iterierte Anwendung unserer Formel erhalten wir a10 = (a5 )2 = (a × a4 )2 = (a × (a2 )2 )2 was insgesamt nur 4 statt der ursprünglichen 9 Multiplikationen erfordert. Zusammenfassend haben wir also folgenden rekursiven Algorithmus für die schnelle Berechnung von ab mod m: Algorithmus EXP zur Berechnung von ab mod m Input: Output: a ∈ Zm , b ∈ N, m ∈ N. ab mod m. if b = 1 return a if b is even x = EXP(a, b/2, m) return x ⊗m x else x = EXP(a, b − 1, m) return a ⊗m x Beispiel 6.20 In nachfolgender Tabelle ist die Anzahl der ⊗m – Operationen zur Berechnung von ab mod m mit Algorithmus EXP für einige Werte von b aufgeführt. Wie man sieht, braucht der Algorithmus für b = 10100 gerade mal 436 Operationen anstatt der 10100 − 1 Operationen, die man mit einfachem, iterierten Multiplizieren a ⊗m a ⊗m a . . . brauchen würde. b 101 102 103 1010 10100 101000 ⊗m – Ops. 4 8 14 43 436 4483 Aufgabe. Implementieren Sie folgende Algorithmen zur Berechnung von ab mod m in Maple: • Schnelle Berechnung von ab mod m (Algorithmus EXP). • Schnelle Berechnung von ab in N mit nachfolgender modulo m Operation am Ende. 6 KONGRUENZ UND ARITHMETIK MODULO M 33 • b − 1 malige Multiplikation modulo m: a ⊗m a ⊗m a . . . ⊗m a. • b − 1 malige Multiplikation in N mit nachfolgender modulo m Operation am Ende: (a × a × a . . . × a) mod m. Prüfen Sie anhand von ein paar Beispielen, daß immer das gleiche Ergebnis rauskommt und vergleichen Sie die Rechenzeiten. Lösung. • EXP := proc(a,b,m) local x; if b = 1 then a; else if type(b,even) then x := EXP(a,b/2,m); (x*x) mod m; else x := EXP(a,b-1,m); (a*x) mod m; fi fi end: • EXP := proc(a,b,m) local EXPN; EXPN := proc(a,b) local x; if b = 1 then a; else if type(b,even) then x := EXPN(a,b/2); x*x; else x := EXPN(a,b-1); a*x; fi fi end: EXPN(a,b) mod m; end: • EXP := proc(a,b,m) local i,x; x := a; for i from 1 to b-1 do x := (x * a) mod m; od end: • EXP := proc(a,b,m) local i,x; x := a; for i from 1 to b-1 do x := x * a; od; x mod m; end: 6 KONGRUENZ UND ARITHMETIK MODULO M 34 Aufgabe. Zeigen Sie anhand von ein paar Beispielen und machen Sie sich klar, daß die Anzahl der ⊗m – Operationen von Algorithmus EXP gleich der Anzahl der Nullen plus 2 mal die Anzahl der Einsen in der Binärdarstellung von b ist, wobei die führende 1 abgeschnitten ist. Die Anzahl der Binärstellen einer Zahl x ist blog2 (x)c + 1. Erklären Sie damit, daß die Anzahl von ⊗m – Operationen für Algorithmus EXP immer zwischen blog2 (b)c und 2blog2 (b)c liegt. 7 ZAHLENTHEORETISCHE GRUNDLAGEN ZUR RSA VERSCHLÜSSELUNG 7 7.1 35 Zahlentheoretische Grundlagen zur RSA Verschlüsselung Die Eulersche ϕ-Funktion Definition 7.1 (Eulersche ϕ-Funktion) Für jedes m > 1 ist ϕ(m) die Anzahl der natürlichen Zahlen kleiner m, die zu m teilerfremd sind. Beispiel 7.2 Sei m = 12. Die natürlichen Zahlen kleiner 12, die zu 12 teilerfremd sind, sind 1, 5, 7, 11. Also ist ϕ(12) = 4. Beispiel 7.3 Ist m eine Primzahl, so sind alle natürlichen Zahlen kleiner m teilerfremd zu m und daher ϕ(m) = m − 1. Beispiel 7.4 Sind p und q Primzahlen, so gilt ϕ(pq) = (p − 1)(q − 1). Das kann man wie folgt sehen: Die einzigen Zahlen kleiner pq, die einen gemeinsamen Teiler mit pq haben, sind p, 2p, 3p, . . . , (q − 1)p q, 2q, 3q, . . . , (p − 1)q, d.h. (q − 1) + (p − 1) = p + q − 2 Zahlen. Insgesamt gibt es pq − 1 Zahlen kleiner pq, also ist die Anzahl Zahlen kleiner pq, die teilerfremd zu pq sind ϕ(pq) 7.2 = pq − 1 − (p + q − 2) = pq − q − p + 1 = q(p − 1) − (p − 1) = (p − 1)(q − 1) Der Satz von Euler-Fermat Theorem 7.5 (Euler-Fermat, 1769) Wenn a, m ∈ N teilerfremd sind, dann ist aϕ(m) mod m = 1. Beweis. Angenommen a, m ∈ N seien teilerfremd. Aus den Rechenregeln modulo m (Theorem 6.2) folgt, daß aϕ(m) mod m = (a mod m)ϕ(m) mod m, d.h. wir können uns auf den Fall a ∈ Zm \ {0} beschränken. Seien s1 , s2 , . . . , sϕ(m) die natürlichen Zahlen kleiner m, die zu m teilerfremd sind. Zunächst zeigen wir, daß es zu jedem i ∈ {1, . . . , ϕ(m)} es genau ein j ∈ {1, . . . , ϕ(m)} gibt, so daß a ⊗m si = sj . Dazu sind zwei Dinge zu zeigen: 7 ZAHLENTHEORETISCHE GRUNDLAGEN ZUR RSA VERSCHLÜSSELUNG 36 • Existenz: Für jedes i existiert ein j so daß a ⊗m si = sj . Da weder a noch si einen gemeinsamen Primfaktor mit m hat, hat auch asi keinen gemeinsamen Primfaktor mit m, d.h. ggt(asi , m) = 1. Aus Theorem 5.9 folgt ggt(asi mod m, m) = 1, d.h. a ⊗m si ist teilerfremd zu m. Folglich existiert ein j so daß a ⊗m si = sj . • Eindeutigkeit: Für i 6= j ist a ⊗m si 6= a ⊗m sj . Angenommen a ⊗m si = a ⊗m sj . Sei b ∈ Zm das Inverse zu a bzgl. ⊗m , welches aufgrund von Theorem 6.13 existiert. Dann ist b ⊗m a ⊗m si = b ⊗m a ⊗m sj und folglich si = sj . Daraus folgt, daß die beiden Mengen {s1 , s2 , . . . , sϕ(m) } und {a ⊗m s1 , a ⊗m s2 , . . . , a ⊗m sϕ(m) } gleich sind – lediglich die Reihenfolge der Elemente ist anders. Also ist (s1 s2 · · · sϕ(m) ) mod m = ((a ⊗m s1 )(a ⊗m s2 ) · · · (a ⊗m sϕ(m) )) mod m = (as1 as2 · · · asϕ(m) ) mod m = (aϕ(m) s1 s2 · · · sϕ(m) ) mod m. Daraus folgt (aϕ(m) s1 s2 · · · sϕ(m) ) mod m − (s1 s2 · · · sϕ(m) ) mod m = 0 bzw. ((aϕ(m) − 1)s1 s2 · · · sϕ(m) ) mod m = 0 oder m|(aϕ(m) − 1)s1 s2 · · · sϕ(m) . Da keines der si einen gemeinsamen Teiler mit m hat, folgt m|aϕ(m) − 1 und somit aϕ(m) mod m = 1. Beispiel 7.6 Sei wieder m = 12 und a = 5. Dann sind m und a teilerfremd und das Theorem von Euler-Fermat besagt, daß 5ϕ(12) mod 12 = 1. Das läßt sich leicht nachprüfen: Im vorhergehenden Beispiel haben wir gesehen daß ϕ(12) = 4. Also ist 5ϕ(12) = 54 = 625, und in der Tat ist 625 mod 12 = 1. 8 8 RSA CODIERUNGSSYSTEM 37 RSA Codierungssystem Basierend auf dem Satz von Euler-Fermat haben R.L. Rivest, A. Shamir und L.Adleman im Jahre 1978 ein Public–Key Kryptosystem publiziert, das nach den Autoren RSA Codierungssystem genannt wird. Dieses Verfahren zählt zur Zeit zu den sichersten Methoden der Kryptographie. Public–Key Kryptosysteme lösen folgendes Problem: Angenommen ein Sender möchte einem Empfänger eine geheime Nachricht schicken, die einzige Verbindung zwischen Sender und Empfänger kann jedoch abgehört werden. Zunächst ist gar nicht klar, daß diese Problem überhaupt lösbar ist - wenn der Sender seine Nachricht verschlüsselt, muß er ja dem Empfänger irgendwie mitteilen, wie diese zu entschlüsseln ist und diese Information kann ja ebenfalls abgehört werden. Die Lösung ist, daß der Empfänger festlegt, wie der Sender seine Nachricht codieren soll, aber geheim hält, wie die Nachricht wieder zu decodieren ist. Genauer gesagt, erzeugt der Empfänger ein sog. Schlüsselpaar, wobei ein Schlüssel zum codieren und einer zum decodieren benutzt wird. Den Schlüssel zum decodieren hält der Empfänger geheim, den Schlüssel zum codieren schickt er an den Sender. Dieser codiert damit seine Nachricht und schickt sie an den Empfänger. Der Empfänger wiederum verwendet seinen geheimen Schlüssel zum decodieren der Nachricht. Selbst wenn alle ausgetauschten Informationen abgehört wurden, kann trotzdem die Nachricht nicht entschlüsselt werden. Im Einzelnen funktionieren die Schritte zur Schlüsselerzeugung, Codierung und Decodierung nach dem RSA Verfahren wie folgt. • Erzeugung eines privaten/öffentlichen Schlüsselpaars. – Wähle Primzahlen p, q, die größer sind als die zu verschlüsselnden Zahlen. Wenn z.B. die zu verschlüsselnde Nachricht aus 16 bit Worten besteht, so müssen p und q größer 65536 sein. – Berechne m = pq. Die zu verschlüsselnden Nachrichtenworte sind somit teilerfremd zu m. – Berechne ϕ(m) = (p − 1)(q − 1), siehe Beispiel 7.4. – Wähle r so, daß r und ϕ(m) teilerfremd sind. Nach Theorem 6.13 gibt es folglich ein (eindeutiges) s so daß rs mod ϕ(m) = 1. Der öffentliche Schlüssel besteht nun aus m und r, der private Schlüssel ist die Zahl s. • Verschlüsselung mit dem öffentlichen Schlüssels m, r. Sei N ein zu verschlüsselndes Nachrichtenwort. Das verschlüsselte Nachrichtenwort ergibt sich aus R = N r mod m. • Entschlüsselung mit dem privaten Schlüssel s. Die original Nachricht N läßt sich aus R unter Verwendung des privaten Schlüssels mit N = Rs mod m 8 RSA CODIERUNGSSYSTEM 38 rekonstruieren. Dies kann man wie folgt sehen: Rs mod m = = = = = = = = (N r )s mod m N rs mod m N kϕ(m)+1 mod m N N kϕ(m) mod m N (N ϕ(m) )k mod m N (1)k mod m N mod m N für ein k, da rs mod ϕ(m) = 1 nach Euler-Fermat da N < m. Warum gilt diese Art der Verschlüsselung als sicher? Wie müßte jemand vorgehen, der die verschlüsselte Nachricht R knacken wollte? Nun, er kann den öffentlichen Schlüssel m, r und die geheime Nachricht R abhören und weiß natürlich auch wie das RSA Verschlüsselungsverfahren funktioniert. Er müßte also das nach Theorem 6.13 eindeutig existierende s finden, so daß rs mod ϕ(m) = 1. Falls er ϕ(m) kennen würde, wäre das mit dem Euklidischen Algorithmus kein Problem. Um ϕ(m) zu berechnen, müßte er aber p und q berechnen, d.h. m in seine Primfaktoren zerlegen. Dies ist jedoch schwierig, da derzeit kein Algorithmus bekannt ist, der große Zahlen in akzeptabler Zeit faktorisieren kann. Andererseits ist es aber sehr einfach, große Primzahlen zu erzeugen bzw. miteinander zu multiplizieren. Sollte irgend wann ein effizienter Algorithmus zur Faktorisierung entdeckt werden, könnte man RSA codierte Nachrichten einfach knacken, d.h. der RSA Algorithmus wäre dann nutzlos. Aufgabe. Gegeben sei ein Schlüsselpaar bestehend aus einem öffentlichen Schlüssel m = 1154443, r = 927 und einem zugehörigen privaten Schlüssel s = 43503. Die zu verschlüsselnde Nachricht bestehe aus der Buchstabenfolge “t”, “e”, “s”, “t” mit den zugehörigen ASCII codes 116, 101, 115, 116. Verschlüsseln Sie diese Nachricht mit dem öffentlichen Schlüssel und entschlüsseln Sie sie wieder mit dem privaten Schlüssel. Lösung. Im Beispiel ist N1 = 116, N2 = 101, N3 = 115, N4 = 116. Die Verschlüsselung ist gegeben durch Ri = Nir mod m. Wichtig ist hierbei die effizienten Berechnung mit Algorithmus EXP. R1 = 1094953, R2 = 704872, R3 = 651564, N4 = 1094953 Die Entschlüsselung ist gegeben durch Ni = Ris mod m. N1 = 116, N2 = 101, N3 = 115, N4 = 116. Aufgabe. Gegeben sei folgende verschlüsselte Nachricht: R1 = 165 195, R2 = 190 798, R3 = 22 202, R4 = 57 197, R5 = 190 798, R6 = 63 566 39 RSA CODIERUNGSSYSTEM 8 #33# !)'#*}) - |2l3P|~2~1Ey*)#~)}|X!{z1y ÖÕ.ÔÓÒÑÐÊÏ Î ÍÌËÊÉ È*¿ Æ Ä#Ç#ÁÁ EÅÆ*Ä)Ã2Â2Á!À¿¾ æ ïîíåìëüê.ûúrùø÷ ð æ ïîíåìëê ð æ å SáSà1à%ßÚ #Þ2Ý1ÝEÛÜ1Ú)Ù.Ø× 2KJI9 H *98 C ? 2G1GEDF*C)B.A@ #?=>=<%;: ó îö ó vòèõëtîô ó òñçë éèç äXÞ*ãÜÞ #âá Þ #a`_^ 3]TW1R\Q L %[U ZY XWTV%UTRSRPOQ.NML x2ps3wwwSsvu2ptsrqp !k)g'f#o1d)gf c2lk3hPc2ee Eij*h)g2f-n2e3dm Scb ½¼.»º¹¸·¶±µ ´ ³²v±° ¯*1®­ 3«¥P2¨¨ E¬­*«)ª2©2¨3§¦¥¤ #7564 3" 2010 / *")(.&-,+*)(&'%$#"! £#3 ¢¢3¢ ¡# !)'#*) - 2l3P21E*)#)X!1 8 RSA CODIERUNGSSYSTEM 40 Dabei ist jedes Ri ein verschlüsselter Buchstabe nach dem ASCII Alphabet. Sie kennen den öffentlichen Schlüssel des Empfängers: m = 271259 r = 91765 Versuchen Sie, die Nachricht zu knacken. Lösung. Der Lösungsweg ist wie folgt: Der private Schlüssel s ergibt sich aus der Gleichung rs ≡ϕ(m) 1. Aus der Definition des RSA Algorithmus wissen wir, daß sich m aus genau zwei Primfaktoren p, q zusammensetzt, d.h. m = pq und daher ϕ(m) = (p − 1)(q − 1). Als nächstes können wir dann s mit Hilfe des erweiterten Euklidischen Algorithmus berechnen. Die Entschlüsselung erfolgt danach mit der Formel Ni = Ris mod m für i = 1, 2, . . . , 6. Und jetzt konkret: Wir berechnen also zunächst p und q durch faktorisieren von m. In unserem Beispiel ist dies mit Maple kein Problem, in wirklichen Anwendungen ist m jedoch so groß (z.B. mehr als 100 Stellen), daß die Faktorisierung in akzeptabler Zeit nicht durchführbar ist! Wir erhalten also m = 271259 = 487 × 557, d.h. p = 487, q = 557 und somit ϕ(m) = (p − 1)(q − 1) = 486 × 556 = 270216. Aus rs ≡ϕ(m) 1 erhalten wir mit dem erweiterten Euklidischen Algorithmus s = 249733, denn rs mod ϕ(m) = 91765 × 249733 mod 270216 = 22916748745 mod 270216 = 1 Damit können wir die Nachricht entschlüsseln: N1 N2 N3 N4 N5 N6 = = = = = = R1s mod m R2s mod m R3s mod m R4s mod m R5s mod m R6s mod m = 165195249733 mod 271259 = 190798249733 mod 271259 = 22202249733 mod 271259 = 57197249733 mod 271259 = 190798249733 mod 271259 = 63566249733 mod 271259 = = = = = = 115 101 99 114 101 116 8 RSA CODIERUNGSSYSTEM Der Klartext besteht also aus den Zahlen 115, 101, 99, 114, 101, 116. Dies sind die ASCII codes für das Wort “secret”. 41 9 9 HISTORISCHER EXKURS IN DIE PRIMFAKTORISIERUNG 42 Historischer Exkurs in die Primfaktorisierung Natürlich arbeiten viele Forscher intensiv an effizienten Algorithmen zur Primfaktorisierung. Trotz bedeutender Fortschritte sieht es aber nicht so aus, als könnte das Problem in naher Zukunft als gelöst bezeichnet werden. Nachfolgend ein paar historische Meilensteine [2]: • 1970 wurde die Faktorisierung einer “schweren” Zahl mit 41 Stellen als großer Fortschritt gefeiert. Eine “schwere” Zahl ist eine Zahl, die keine kleinen Faktoren besitzt und auch keine spezielle Form besitzt, die leicht faktorisiert werden kann. Zehn Jahre später dauerte die Faktorisierung doppelt so großer Zahlen auf einem Cray Supercomputer nur wenige Stunden. • 1993 wurde eine schwere Zahl mit 120 Stellen mit Hilfe des quadratischen Sieb Algorithmus faktorisiert. Die Berechnung dauerte 825 MIPS Jahre und wurde in 3 Monaten Echtzeit durchgeführt. • Unter Ausnutzung der freien Rechenzeit auf weltweit verteilten Computern über mehrere Monate hinweg wurde 1991 eine 116 stellige Zahl faktorisiert. Der Aufwand betrug 400 MIPS Jahre. • Im März 1994 faktorisierte ein Team von Mathematikern eine 129 stellige Zahl. 600 Leute und 1600 Rechner brauchten 8 Monate dazu. Der Aufwand entsprach etwa 4000 bis 6000 MIPS Jahren. Zitat: “Wir schließen daraus, daß 512 bit lange Schlüssel für RSA keine Sicherheit vor Angriffen durch Organisationen bieten, die bereit sind, einige Millionen Dollar zu investieren und einige Monate zu warten.” • Um in Sachen Faktorisierung auf dem neuesten Stand zu bleiben, rief die Firma RSA Data Security Inc. im März 1991 den RSA Faktorisierungswettbewerb ins Leben. Der Wettbewerb besteht aus einer Liste von 42 schweren Zahlen, deren Länge von 100 Stellen bis 500 Stellen reicht. Im Jahr 1999 waren RSA-100, RSA-110, RSA-120, RSA-129, RSA-130, RSA-140 und RSA-155 bereits faktorisiert. Für RSA-155 waren etwa 8000 MIPS Jahre Rechenzeit erforderlich. Durch Einsatz von 292 Maschinen konnte die Berechnung in 7.4 Monaten durchgeführt werden. Für die Faktorisierung von RSA-174 ist ein Preis von $10,000 ausgesetzt, die Zahl lautet 18819881292060796383869723946165043980716356337941 73827007633564229888597152346654853190606065047430 45317388011303396716199692321205734031879550656996 221305168759307650257059. Informationen zum aktuellen Stand des RSA Faktorisierungswettbewerbs finden Sie unter http://www.rsasecurity.com/rsalabs/challenges/factoring. Viele Hintergrundinformationen zur Kryptographie, den theoretischen Grundlagen und praktischen Anwendungen stehen unter 9 HISTORISCHER EXKURS IN DIE PRIMFAKTORISIERUNG 43 http://www.rsasecurity.com/rsalabs/faq/index.html. Unter dieser Adresse findet sich auch Tabelle 9.1, in der historische Faktorisierungsrekorde wiedergegeben sind. Eine interessante Abschätzung Jahr 1970 1978 1981 1982 1983 1984 1986 1987 1988 1990 1991 1992 1996 1998 1999 Stellen 39 45 47 51 63 71 87 90 100 111 116 129 130 140 155 Zahl 2128 + 1 2223 − 1 3225 − 1 591 − 1 1193 + 1 1071 − 1 5128 + 1 5160 + 1 11104 + 1 2484 + 1 10142 + 1 RSA-129 RSA-130 RSA-140 RSA-155 Wer Brillhart/Morrison Wunderlich Gerver Wagstaff Davis/Holdridge Davis/Holdridge Silverman Silverman Internet Lenstra/Manasse Lenstra/Manasse Atkins Montgomery Montgomery Montgomery Algorithmus CFRAC CFRAC QS CFRAC QS QS MPQS MPQS MPQS MPQS MPQS MPQS GNFS GNFS GNFS Hardware IBM Mainframe IBM Mainframe HP-3000 IBM Mainframe Cray Cray LAN Sun-3’s LAN Sun-3’s Distributed Distributed Distributed Distributed Distributed Distributed Distributed Tabelle 9.1: Historische Faktorisierungsrekorde des Rechen- und Speicheraufwandes der erforderlich wäre um sehr lange Zahlen mit heutigen Algorithmen und 500 MHz Pentium Rechnern innerhalb eines Jahres faktorisieren zu können, gibt Tabelle 9.2: Stellen 129 229 307 488 Maschinen 1 215,000 342,000,000 1.6 × 1015 Speicher trivial 4 GB 170 GB 120 TB Tabelle 9.2: Geschätzter Aufwand zur Faktorisierung mit 500MHz Pentium Rechnern in einem Jahr Rechenzeit Aufgabe. Schreiben Sie ein Programm zur Primfaktorzerlegung durch “Ausprobieren”. (Es genügt, wenn das Programm 32 bit Zahlen verarbeiten kann.) Überlegen Sie sich, wie man das Programm beschleunigen könnte und vergleichen Sie die Rechenzeit mit Maple anhand einiger Beispiele. Hinweis: Zum Faktorisieren mit Maple verwenden Sie die Funktion ifactor, z.B. ifactor(820293);. Aufgabe. Faktorisieren Sie mit Maple ein paar n stellige Zahlen für n zwischen 5 und 35. Finden Sie durch Ausprobieren 30 stellige Zahlen, für die Maple besonders schnell bzw. besonders langsam ist. Was läßt sich über die zugehörigen Primfaktoren sagen? Zeichnen Sie eine Kurve der 9 HISTORISCHER EXKURS IN DIE PRIMFAKTORISIERUNG 44 experimentell ermittelten maximalen Rechenzeit zur Faktorisierung einer n stelligen Zahl in Abhängigkeit von n für n zwischen 5 und 35. Hinweis: Zur Messung der Rechenzeit verwenden Sie die Funktion time, z.B. time(ifactor(23098522309812305971)); Was schätzen Sie, wie lange Maple maximal zur Faktorisierung einer 100 stelligen Zahl brauchen würde? 10 10 EIN PAAR GROßE ZAHLEN AUS DER PHYSIK Ein paar große Zahlen aus der Physik Wahrscheinlichkeit vom Blitz erschlagen zu werden pro Tag Wahrscheinlichkeit für den Hauptgewinn in einer US Staatslotterie Wahrscheinlichkeit, den Hauptgewinn in einer US Staatslotterie zu bekommen und am gleichen Tag vom Blitz erschlagen zu werden Wahrscheinlichkeit zu ertrinken (in den USA pro Jahr) Wahrscheinlichkeit bei einem Autounfall ums Leben zu kommen (1993 in den USA) Wahrscheinlichkeit, bei einem Autounfall ums Leben zu kommen im Lauf seines Lebens in den USA (1993 gab es 163 Todesfälle pro einer Million Einwohner, was unter Annahme einer durchschnittlichen Lebenserwartung von 69.7 Jahren zu dieser recht hohen Wahrscheinlichkeit führt) Beginn der nächsten Eiszeit Zeit bis die Sonne zur Nova wird Alter der Erde Alter des Universums Anzahl der Atome in der Erde Anzahl der Atome in der Sonne Anzahl der Atome in unserer Galaxie Anzahl der Atome im Universum (ohne dunkle Materie) Größe des Universums Lebensdauer des Universums (falls es geschlossen ist) 1 zu 9 Milliarden (233 ) 1 zu 4 Millionen (222 ) 1 zu (255 ) 1 zu 59000 (216 ) 1 zu 6100 (213 ) 1 zu 88 (27 ) in 14 000 (214 ) Jahren 109 (230 ) Jahre 109 (230 ) Jahre 1010 (234 ) Jahre 1051 (2170 ) 1057 (2190 ) 1067 (2223 ) 1077 (2265 ) 1084 (2280 )cm3 1011 (237 ) Jahre 45 Literatur [1] Hofstadter, Douglas R.: Gödel, Escher, Bach. Klett, 1985 [2] Schneier, Bruce: Angewandte Kryptographie. Addison-Wesley, 1996 [3] Stallings, William: Cryptography and Network Security [4] Volkmann, Lutz: Aachen, 2000 Diskrete Strukturen. Wissenschaftsverlag Mainz in [5] Waerden, B.L. van d.: Algebra. Springer, 1991 46