Inhaltsverzeichnis 1 Kurze Einführung 1 2 Teibarkeit,größter gemeinsamer Teiler und der von Euklid 2.1 Der euklidische Algorithmus . . . . . . . . . . . 2.2 Laufzeit des euklidischen Algorithmus . . . . . . 2.3 Erweiterter Euklid . . . . . . . . . . . . . . . . Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . 2 3 3 4 3 Modulare Arithmetik 4 4 Das RSA public-key System der Kryptographie 5 5 Primzahltests 7 5.1 Der Pseudoprimzahltest . . . . . . . . . . . . . . . . . . . . . 8 5.2 Der Miller Rabin Test . . . . . . . . . . . . . . . . . . . . . . 9 5.3 Der AKS-Test ’Primes is in P’ . . . . . . . . . . . . . . . . . . 10 1 Kurze Einführung Zahlentheoretische Algorithmen gehören zusammen mit geometrischen Konstruktionen zu den ältesten niedergeschriebenen Algorithmen überhaupt. Die Zahlentheorie wurde lange Zeit wegen ihrer theoretisch sehr interessanten Problemstellungen von Mathematikern sehr geschätzt, dabei waren das Finden von Primzahlen und die Zerlegung großer Zahlen in ihre Primfaktoren, welche nach Gauß zu den interessantesten Aufgaben der Arithmetik gehören ohne jede Bedeutung für die Anwendung. Heute spielen Verfahren zur Lösung dieser Probleme eine zentrale Rolle in der Kryptographie. Die Sicherheit vieler dieser Verfahren beruht nämlich darauf, dass es vergleichsweise wesentlich einfacher ist große Primzahlen zu bestimmen als ihr Produkt, falls man erstere nicht kennt, zu zerlegen. In diesem Vortrag wird als Beispiel für ein solches Verfahren, das RSA-Verfahren vorgestellt. Außerdem werden einige grundlegende Zahlentheoretische Algorithmen zusammen mit den Begriffen und Konzepten, auf denen sie basieren besprochen. 1 2 Teibarkeit,größter gemeinsamer Teiler und der Algorithmus von Euklid Mit Zahlen seien in diesem und den folgenden Kapiteln nur ganze Zahlen gemeint. Bei Zahlentheoretischen Algorithmen werden Laufzeiten sowohl in arithmetischen als auch in Bit-Operationen betrachtet,diese Laufzeiten werden hier mit entsprechend OA und OB bezeichet. Defintion 1 Wir nennen die größte Zahl,die 2 Zahlen a und b teilt,den grössten gemeinsamen Teiler und bezeichnen sie mit ggT(a,b) Hier ist eine kurze Zusammenstellung einiger Eigenschaften,der Teilbarkeitsrelation und des ggT’s. Teilbarkeit ist reflexiv und transitiv aber nicht symmetrisch d | a ∧ d | b =⇒ d | ggT (a, b) Satz 1 Wenn a und b beliebige von 0 verschiedene Zahlen sind,dann ist der ggT(a,b) die kleinste positive Zahl,die in der Menge {ax + by x, y ∈ Z} enthalten ist. 2 Folgerung 1 Für beliebige Zahlen a und b gilt: d | a und d | b ⇒ d | ggT (a, b) Folgerung 2 Für alle Zahlen a,b und n ≥ 0 gilt: ggT (na, nb) = nggT (a, b) Folgerung 3 Für alle positiven Zahlen n,a und b gilt: n | ab ∧ ggT (a, n) = 1⇒ n|b 2.1 Der euklidische Algorithmus Stammt in seiner ürsprünglichen Form von Euklid(ca 300 v Chr) Er basiert auf der Rekursion : ggT(a,b)=ggT(b,a mod b) Welche sich mit den vorangehenden Sätzen beweisen lässt. Der Algorithmus hat als Pseudocode die Gestalt Euclid(a,b) 1 if b=0 2 then return a 3 else return Euclid (b,a mod b) 2.2 Laufzeit des euklidischen Algorithmus Lemma 1 Sei a>b ≥ 1 und k ≥ 0 die Anzahl in rekursiven Aufrufen,die Euclid(a,b) benötigt, dann gilt: a ≥ Fk+2 und b ≥ Fk+1 Als direkte Folgerung ergibt sich der Satz von Lamé mitdessen Hilfe wir die Laufzeit(in Rekursionsaufrufen) über die Folge der Fibonacci Zahlen abschätzen können. Satz 1 (Satz von Lamé) Für jede Zahl k ≥ 1 mit a > b ≥ 1 benötigt Euclid(a,b) weniger als k rekursive Aufrufe Dies ist die bestmögliche obere Schranke. Denn benachbarte Fibonacci Zahlen sind ein Worst-Case Input für Euclid Da Euclid (F3 , F2 ) genau einmal die Rekursion aufruft und wir für k grösser 2, Fk+1 mod Fk = Fk−1 haben,folgt ggT (Fk+1 , Fk ) = ggT (Fk , (Fk+1 modFk )) = ggT (Fk , Fk−1 ) (2) 3 Euclid(Fk+1 , Fk )) benötigt also genau k-1 rekurive Aufrufe. √ √ 1+ 5 ( ) Für Fk haben wir: Fk ≈ ϕk / 5 mit ϕ = 2 Wir erhalten als Abschätzung für die Laufzeit(Rekursive Aufrufe)O (log b). Haben beide Eingaben bei Euklid β-Bit,so haben wir: OA = O(β) und OB = (β 3 ). 2.3 Erweiterter Euklid Der erweiterte euklidische Algorithmus gibt zusammen mit dem größten gemeisamen Teiler d auch die Koeffizienten x,y dessen Darstellung als Linearkomination von a und b aus. Input:a,b Output:(d,x,y) Extended Euclid(a,b) Output:(d,x,y), d = ggT (a, b) = ax + by 1.Schritt: Setze d = a mod b, x0 = 1, y 0 = ab 2.Schritt: Fahre so fort bis d0 = d. ⇒ x0 = x, y 0 = y Extended Euclid(a,b) 1 if b=0 2 return(a,1,0) 3 (d’,x’,y’)←−Extended Euclid(b,a mod b) 4 (d,x,y)←− d0 , x0 , y 0 − f oor( ab )y) 3 Modulare Arithmetik Zum Verständnis des RSA Verfahrens und der Primzahltests benötigen wir noch ein paar Begriffe und Konzepte aus der modularen Arithmetik. 4 (Zn , +n ) ist abelsche Gruppe (Z∗n , ·n )) ist abelsche Gruppe Eulersche Funktion: ϕ(n) := |Z∗n | = P p≤n ggT (n,p)=1 p Satz von Euler:∀n ≥ 2 : aϕ(n) ≡ 1 (mod n) ∀ a ∈ Zn + Satz von Fermat:p ∈ P ⇒ ap − 1 ≡ 1∀ p ∈ Zp Q Chinesischer Restsatz n = ri=1 n1 , . . . , nr ∈ Npaarweise teilerfremd. dann folgt:ϕ :Z∗n −→ Zn1 ×, . . . , ×Znr ϕ (a (mod n)) := ((a (mod n1 )) × . . . ×, (a (mod nr ))) ist Isomorphismus. =⇒ ϕ ((pq)) = ϕ (p) · ϕ (q),falls ggT (p, q) = 1 4 Das RSA public-key System der Kryptographie • Jeder Teilnehmer hat einen public key P und einen secret key S Im RSA System besteht jeder Schlüssel(key) aus einem Zahlenpaar. • Der secret key wird an keine andere Person weitergegen. Der public key kann an jede beliebige Person weitergegeben werden. D bezeichne die Menge der möglichen Nachrichten Public-und Secret key sind Funktionen D−→D mit S (P (d)) = d undP (S (d)) = d.∀ d ∈ D Beispiel: Bob möchte eine Nachricht N an Alice senden ohne das eine dritte Person ,die die Nachricht abfängt erfährt worum es geht bzw was der Inhalt ist. 5 Hierfür verschickt Alice an Bob ihren public key,mit dem Bob die Nachricht verschlüsselt, behält aber ihren secret key für sich, mit,dem sie die von Bob ihr zugesandte verschlüsselte Nachricht wieder öffnet. Im wesentlichen hängt die Sicherheit des Systems davon ab, dass eine Person, die Alice’s secret key nicht besitzt, die Funktion nicht in einer realistischen Zeitspanne berechnen kann. Es stellt sich also das Hauptproblem: Wie findet man eine Funktion ,die man jedem mitteilen kann, ohne das jemand, der sie kennt, aus ihr auf einfache Art und Weise die Umkehrfunktion berechnen könnte. Das RSA System macht hier sich zu Nutze, dass es relativ einfach ist große Primzahlen zu finden, währendessen es sehr schwer ist eine große zusammengesetzte Zahl zu faktorisieren. Das RSA(System) 1 Wähle zwei große(≥ 512-Bits) Primzahlen p und q, p 6= q 2 Setze n = pq 3 Wähle eine kleine ungerade Zahl e die teilerfremd zu ϕ (n) ist 4 Finde e’ invers zu e modulo ϕ (n) bez üglichM ultiplikation 5 Setze P = (e, n) RSA public key 6 Setze S = (e0 , n) RSA secret key Wir haben D= Zn mit P (N ) = N e (mod n) und S (N ) = N e0 (mod n) für N ∈ D 6 Das RSA-Verfahren funktioniert,denn für N gilt stets P (S (n)) = S (P (n)) 0 = N ee Da e, e’ bezüglich der Multiplikation modulo ϕ (n) = (p − 1) (q − 1) zueinander invers sind,gibt es eine Zahl k mit ee’= 1 + k(p − 1)(q − 1). Aber für N 6= 0 (modp) erhalten wir dann 0 N ee ≡ N N p−1 k(q−1) (mod p) ≡ N (1)k(q−1) (mod p) ≡ N (mod p) (3) (4) 0 Ausserdem gilt auch N ee , falls N ≡ 0 (mod p) 0 Also N ee N (mod p) 0 Analog erhält man N ee ≡ N (mod q), nachdem Chinesischem Restastz 0 also N ee ≡ N (mod n) q.e.d 5 Primzahltests Das Problem des Unterschiedens von Primzahlen und zusammengesetzten Zahlen und das Zerlegen von grossen Zahlen in ihre Primfaktoren ist eine der wichtigsten und interessantesten Aufgaben der Arithmetik. C.F.Gauß Wir wollen möglichst einfache Methoden entwickeln um große Prim- Zah7 len zu bestimmen. Eine Möglichkeit ist,das wir zufällig irgendwelche ungeraden großen Zahlen wählen und testen ob es Primzahlen sind oder nicht. Hierfür müssen wir aber effiziente Verfahren entwickeln. Wir untersuchen zunächst die Dichte der Primzahlen innerhalb der natürlichen Zahlen um die Wahrscheinlichkeit, dass wir unter den Zahlen ≤ n zufällig eine Primzahl ziehen, zu schätzen. Dichte der Primzahlen: π (n) := |{p ∈ P, p ≤ n}| Primzahlsatz:limn→∞ π(n) n/ ln(n) =1 Schon für n = 109 (Zahlentheoretisch gesehen kleine Zahl) erhält man hiermit eine auf 6 prozent genaue Approximation π (n) = 50, 847, 534; n/ln ≈ 48, 254, 924 Die Wahrscheinlichkeit, dass eine zufällig ausgewählte Zahl Primzahl ist, ist also Schätzungsweise:1/ ln (n) Wir lernen jetzt 3 Primzahltests kennen 5.1 Der Pseudoprimzahltest Defintion 2 n heißt Pseudoprimzahl zur Basis a,falls n zusammengesetzt ist und und an − 1 ≡ 1 (mod n) 8 Pseudoprime(n) 1 if Modular-Exponentation (z, n − 1, n) 1 (mod n) 2 then return Composite . Sicher 3 else return Prime . Wahrscheinlich Modular-Exponentation(a,b,n)gibt die Potenz ab mod n • Nur 22 Werte ≤ 104 für die der Test versagt. Irrtumswahrscheinlichkeit→ 0 für → ∞ 5.2 Der Miller Rabin Test Der Miller-Rabin-Test • mehrere zufällig ausgewählte Basen a,anstatt einer festen Basis • Wird bei Modular-Exponentation während des Quadrierens eine eine nichttriviale Wurzel von 1 (mod n) entdeckt−→ Composite Hilfsmethode Witness(a,n) testet ob durch a die Zusammengesetztheit von n gezeigt wird, indem falls an−1 6= 1 (mod n) gilt ,n sicher zusammengesetzt ist,sonst aber nicht sicher ist das n Prim ist. Witness(a,n) 1 let n − 1 = 2t where t ≥ 1 and n is odd 2 x0 ←− Modular-Exponentation(1,n,n) 3 for i ←− 1 to t 4 do xi ←− x2i−1 (mod n) 5 if xi = 1 and xi−1 6= 1 xi−1 6= n − 1 6 then return TRUE 7 return False X := hx0 , . . . , xt i 9 Miller-Rabin(n,s) 1 for j ←− to s 2 do a ←− Random(1,n-1) 3 if Witness(a,n) 4 then return Composite . Sicher 5 return Prime nahezu Sicher (Beispiel) : n = 561 ⇒ n − 1 = 561 = 24 · 35 Angenommen a=7 wird als Basis gewählt Dann berechnet Witness x0 ≡ a3 5 ≡ 241 Also X = h241, 298, 166, 67, 1i Eine nichtriviale Wurzel von 1 wird bei der letzten Quadrierung entdeckt, da a280 ≡ 67 (mod n) und 560 ≡ 1 (mod n) Deshalb beweist a=7 die Zusammengesetztheit von n. Witness(a,n) gibt also TRUE aus. ⇒ Miller-Rabin gibt Composite aus. Für eine Zahl n der Bitgröße β erhalten wir: OA = O (sβ) und OB = O (sβ 3 ). Satz 2 Ist n eine ungerade zusammengesetzte Zahl,dann gibt es mindestens n−1 Zahlen mit Witness(a,n)=TRUE. 2 5.3 Der AKS-Test ’Primes is in P’ Das Problem einen deterministischen Primzahltest zu finden, der in polynomieller Zeit läuft, wurde erst vor kurzem von drei indischen Wissenschaftlern gelöst. Nach diesen ist er benannt AKS: Agrawal, Saxena, Kayal 10 Satz von AKS Sei n ∈ N und r, q ∈ N mit q | (r − 1) und r−1 n q mod r ≥ 2. S⊆ Zn mit ggT (n, a − a0 ) = 1∀a, a0 ∈ S √ 2b r c und q+s−1 ≥ n . s Dann gilt: (x − a)n ≡ xn − a mod (xr−1 , n) ∈ S =⇒ n ist Primzahlpotenz. Algorithmus(Strukturell) 1 if n echte Primzahlpotenz 2 then return FALSE 3 Wähle (q,r,S) wie im Satz von AKS 4 Für a ∈ S do a) if ggT (a, n) ≥ 2 return FALSE b) if (x − a)n ≡ xn − a mod(xr−1 , n) return FALSE return TRUE Literatur Euklid Bücher(VII-X) Cormann Introduction to Algorithms Primes is in P(A Breakthrough for ‘Everyman www.ams.org/notices/200305/fea-bornemann.pdf 11