Mathematische Grundlagen der Kryptographie 1. Ganze Zahlen 2. Kongruenzen und Restklassenringe Stefan Brandstädter Jennifer Karstens 18. Januar 2005 Inhaltsverzeichnis 1 Ganze Zahlen 1.1 Grundlagen . . . . . . . . . . . . . . 1.2 Teilbarkeit . . . . . . . . . . . . . . . 1.3 Darstellung ganzer Zahlen . . . . . . 1.4 O- und Ω-Notation . . . . . . . . . . 1.5 Aufwand von Addition, Multiplikation und Division mit Rest 1.6 Polynomzeit . . . . . . . . . . . . . . 1.7 Größter gemeinsamer Teiler . . . . . 1.8 Euklidischer Algorithmus . . . . . . . 1.9 Erweiterter euklidischer Algorithmus 1.10 Zerlegung in Primzahlen . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 2 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 5 5 6 7 7 Kapitel 1 Ganze Zahlen In der Kryptographie spielen ganze Zahlen eine fundamentale Rolle. • Inhalt: Grundlegende Eigenschaften, fundamentale Algorithmen • kleinen lateinischen Buchstaben bezeichnen ganze Zahlen 1.1 Grundlagen • Natürlichen Zahlen: • Ganzen Zahlen: = {0, ±1, ±2, ±3, . . .} • Rationale Zahlen • Es gilt ⊂ ⊂ = {1, 2, 3, 4, 5, . . .} und reelle Zahlen ⊂ • Grundrechenarten: Addition, Multiplikation • Grundregel reeller Zahlen: a ∗ b = 0, dann a oder b Null (andere Zahlenbereiche?) Vergleichen reeller Zahlen: √ √ • 3 < 3, aber 3 > 1 • α < β, α ≤ β • α > β, α ≥ β • Wenn α < β, dann auch α + γ < β + γ • Wenn 0 < α und 0 < β, dann 0 < αβ Beispiel 1.1.1. Es ist b5.43c = 5 und b−5.43c = −6. 1 KAPITEL 1. GANZE ZAHLEN 1.2 2 Teilbarkeit Definition 1.2.1. Man sagt a teilt n, wenn es eine ganze Zahl b mit n = ab gibt. Eine ganze Zahl a 6= 0 teilt eine ganze Zahl b genau dann, wenn es mindestens eine ganze Zahl n gibt, für die gilt: a ∗ n = b. Man sagt auch a ist Teiler von b, b ist teilbar durch a, b ist Vielfaches von a und schreibt formal a | b. Ist a kein Teiler von b, so schreibt man a - b. Beispiel 1.2.2. Es gilt 13 | 195, weil 195 = 15 ∗ 13 ist. Genauso gilt −4 | 20, weil 20 = (−4) ∗ (−5) ist. Die Teiler von 20 sind ±1, ±2, ±4, ±5, ±10, ±20. 0 ist die einzige ganze Zahl, die durch jede ganze Zahl und selbst durch 0 teilbar ist. Ist a 6= 1 und a 6= b, so nennt man a einen echten Teiler von b. Eine natürliche Zahl ohne echten Teiler nennt man Primzahl. Eine Primzahl die ein Teiler einer Zahl ist, nennt man Primteiler. Division mit Rest von ganzen Zahlen: q = ba/bc und r = a − bq Man nennt q den (ganzzahligen) Quotient und r den Rest der Division von a durch b. Man schreibt r = a mod b. Ersetzt man a durch a mod b, so sagt man auch, daß a modulo b reduziert wird. Beispiel 1.2.3. Wenn a = 166 und b = 21 ist, dann erhält man q = 7 und r = 19, d.h. 166 mod 21 = 19. Entsprechend gilt −30 mod 8 = 2. 1.3 Darstellung ganzer Zahlen Ganze Zahlen werden normalerweise als Dezimalzahlen geschrieben, nur in Computern werden sie in Binärentwicklung gespeichert. Allgemein kann man ganze Zahlen mit Hilfe der sogenannten g-adischen Darstellung aufschreiben. Für eine natürliche Zahl g > 1 und eine positive reelle Zahl α bezeichnt man mit logg α den Logarithmus zur Basis g von α. Für eine Menge M bezeichnet M k die Menge aller Folgen der Länge k mit Gliedern aus M . KAPITEL 1. GANZE ZAHLEN 3 Beispiel 1.3.1. Es ist log3 27 = 3, weil 33 = 27 ist. Ferner ist log9 9 = 1, weil 91 = 9 ist. Definition 1.3.2. Eine Folge (a1 , . . . , ak ) heißt g-adische Entwicklung von a. Ihre Glieder heißen Ziffern und ihre Länge ist k = logg a + 1. Diese Folge heißt Binärentwicklung von a, wenn g = 2 ist und Hexadezimalentwicklung von a, wenn g = 16 ist. Nur wenn die erste Ziffe von Null verschieden ist, ist die g-adische Entwicklung einer natürlichen Zahl eindeutig. Man schreibt auch a1 a2 . . . ak . Beispiel 1.3.3. Die Folge 101011 ist die Binärentwicklung der Zahl 25 + 23 + 21 + 20 = 43. Bei der Hexadezimaldarstellung verwendet man für die Ziffern 10 bis 15 die Buchstaben A, B, C, D, E, F . Schreiben wir nun 43 in Hexadezimaldarstellung auf, erhalten wir 2B = 2 ∗ 161 + 11. Beispiel 1.3.4. Bestimmen wir nun die Binärentwicklung von 46. Da 32 = 25 < 46 < 64 = 26 ist, hat unsere Binärentwicklung die Länge 6. Wir erhalten: a1 = b46/32c = 1. 46 − 32 = 14. a2 = b14/16c = 0. a3 = b14/8c = 1. 14 − 8 = 6. a4 = b6/4c = 1. 6 − 4 = 2. a5 = b2/2c = 1. 2 − 2 = 0. a6 = b0/1c = 0. Somit ist die Binärentwicklung von 46 die Folge 101110. Die Umwandlung von Binärentwicklungen in Hexadezimalentwicklungen und umgekehrt ist besonders einfach. Da jeweils 4 aufeinanderfolgende Bits (mit der kleinsten Stelle beginnend) einer Hexadezimalziffer entsprechen und umgekehrt jede Hexadezimalziffer 4 Bits repräsentiert. Beispiel 1.3.5. Wir betrachten die Binärentwicklung n = 110001011110. Wir zerlegen die Binärentwicklung in Bitstrings der Länge 4, wobei wir bei der kleinsten Stelle beginnen: 1110 = E, 0101 = 5, 1100 = C. Daher ist C5E die Hexadezimalentwicklung von n. Als binäre Länge bezeichnet man die Länge der Binärentwicklung einer natürlichen Zahl. Die binäre Länge von 0 ist 1. Aber die binäre Länge einer ganzen Zahl a ist die binäre Länge ihres Absolutbetrages |a|, sie wird auch mit size(a) oder size a bezeichnet. KAPITEL 1. GANZE ZAHLEN 1.4 4 O- und Ω-Notation Beim Abschätzen des Berechnungsaufwandes und des Speicheraufwandes eines kryptographischen Algorithmus, ist es nützlich, die O- und die Ω-Notation zu verwenden. Mit dem großen lateinischen Buchstaben O, kann man obere Schranken angeben, untere Schranken zu finden ist im allgemeinen viel schwieriger, für sie verwendet man den großen griechischen Buchstaben Ω. Beispiel 1.4.1. Es ist 2n2 + n + 1 = O (n2 ), weil 2n2 + n + 1 ≤ 4n2 für alle n ≥ 1 ist. Außerdem ist 2n2 + n + 1 = Ω (n2 ), weil 2n2 + n + 1 ≥ 2n2 für alle n ≥ 1 ist. 1.5 Aufwand von Addition, Multiplikation und Division mit Rest Um den Laufzeit eines kryptographischen Verfahren abzuschätzen muß man untersuchen, welchen zeitlichen Aufwand Addition, Multiplikation und Division mit Rest haben. Zunächst legt man ein Rechenmodell fest, welches den tatsächlichen Berechnungsmaschinen möglichst ähnlich ist. Die natürlichen Zahlen a und b sind durch ihre Binärentwicklung gegeben. m ist die binäre Länge von a und n die binäre Länge von b. Zum Rechnen schreiben wir die Binärentwicklungen von a und b untereinanden und rechnen Bit für Bit mit Übertrag. Beispiel 1.5.1. Sei a = 11011, b = 10011. Wir berechnen a + b: 1 1 + Übertrag 1 1 0 1 0 1 0 0 1 1 1 1 1 1 1 1 0 Beispiel 1.5.2. Sei a = 11011, b = 1001. Wir berechnen a ∗ b: + Übertrag 1 1 0 1 1 1 1 0 1 1 1 1 ∗ 1 1 1 1 1 0 0 1 1 0 1 1 1 0 0 1 1 Beispiel 1.5.3. Sei a = 11010, b = 1001. Wir dividieren a mit Rest durch b: KAPITEL 1. GANZE ZAHLEN 1 1 1 0 1 0 0 1 1 0 0 0 = 1 0 0 5 1 ∗ 1 0 + 1 0 0 0 0 Zusammenfassung: 1. Die Addition (a + b) benötigt die Zeit O(max{size a, size b}). 2. Die Multiplikation (a ∗ b) benötigt die Zeit O((size a)(size b)). 3. Die Division mit Rest von a durch b benötigt die Zeit O((size b)(size q)), wobei q der Quotient ist. Der benötigte Platz ist O(size a + size b). 1.6 Polynomzeit Wenn man ein kryptographisches Verfahren analysieren will, muß man zeigen, daß es in der Praxis effizient funktioniert aber nicht effizient gebrochen werden kann. Unser Algorithmus arbeitet mit den ganzen Zahlen z1 , . . . , zn . Dieser Algorithmus hat polynomielle Laufzeit, wenn er die Laufzeit O((size z1 )e1 (size z2 )e2 · · · (size zn )en ) hat, wobei e1 , . . . , en nicht negative ganze Zahlen sind. Dieser Algorithmus gilt als effizient, da er polynomielle Laufzeit hat, praktisch ist er aber erst effizient, wenn die O-Konstanten und die Exponenten ei klein sind. 1.7 Größter gemeinsamer Teiler Definition 1.7.1. Ein gemeinsamer Teiler von a und b ist eine ganze Zahl c, die a und auch b ohne Rest teilt. Berechnet man alle gemeinsamen Teiler zweier ganzer Zahlen a 6= 0 und b 6= 0 und entfernt mögliche Doppelgänger, so gibt es genau einen größten. Dieser heißt größter gemeinsamer Teiler (ggT) von a und b und wird oft auch mit gcd(a, b) bezeichnet, wobei gcd die Abkürzung für greatest common divisor ist. Der ggT zweier ganzer Zahlen kann nie negativ sein, der ggT von 0 und 0 wird 0 gesetzt. KAPITEL 1. GANZE ZAHLEN 6 Beispiel 1.7.2. Der gcd(12, 30) = 6. Der gcd(-20, 40) = 20. Der gcd(-20, -16) = 4. Der gcd(7, 0) = 7. Die Gleichung ax + by = n ist für alle a, b, n genau dann durch ganze Zahlen x und y lösbar, wenn gcd(a, b) ein Teiler von n ist. Aber wie wird nun gcd(a, b) berechnet und wie werden die Zahlen x und y bestimmt, damit die Gleichung ax + by =gcd(a, b) erfüllt wird. Die effiziente Lösung dieser Probleme mit Hilfe des euklidischen Algorithmus, oder ähnlich effizienten Algorithmen ist für fast alle kryptographischen Techniken ein sehr wichtiger Umstand. 1.8 Euklidischer Algorithmus • Sehr effizientes Verfahren zur Bestimmung des ggT(a, b) • Einer der ältesten bekannten Algorithmen der Welt • Griechischer Mathematiker Euklid, um 300 v. Chr., Die Elemente • Funktion: Ohne Kenntnis der Primfaktorzerlegung der Zahlen a und b • Prinzip: auch gegenseitige Wechselwegnahme genannt • Eingangsgrößen sind zwei natürliche Zahlen a und b Bei der Berechnung verfährt man nach Euklid wie folgt: 1. Setze m = a; n = b 2. Ist m < n, so vertausche m und n 3. Berechne r = m − n 4. Setze m = n, n = r 5. Ist r 6= 0 weiter mit Schritt 2 Nach Ablauf des Verfahrens hat man mit m den gcd(a, b) gefunden. KAPITEL 1. GANZE ZAHLEN 1.9 7 Erweiterter euklidischer Algorithmus • Erweiterung des klassischen euklidischen Algorithmus • Optimierung: Division mit Rest und nicht mehr mit Subtraktion • Liefert die Koeffizienten x und y mit gcd(a, b) = ax + by Der Algorithmus sieht wie folgt aus: 1. Setze m = a, n = b, x = 1, y = 0, u = 0, v = 1 2. Berechne q und r mit m = q ∗ n + r (Division mit Rest) 3. Setze m = n, n = r, u0 = x − q ∗ u, v0 = y − q ∗ v 4. Setze x = u, y = v, u = u0 , v = v 0 5. Falls n 6= 0 weiter mit Schritt 2. Nach Beendigung erhält man die Koeffizienten x und y und den gcd(a, b) = m = ax + by. Die Laufzeit des erweiterten euklidischen Algorithmus, für zwei ganze Zahlen a und b beträgt O((size a)(size b)). 1.10 Zerlegung in Primzahlen Es ist bewiesen, daß sich jede natürliche Zahl, bis auf 1 und die Primzahlen selbst, als Produkt von Primzahlen schreiben läßt. Es ist weiterhin bewiesen, daß es unendlich viele Primzahlen gibt. • Primfaktorzerlegung: Darstellung einer natürlichen Zahl a als Produkt von Primfaktoren • Bis heute noch keine effizienten Algorithmen für Primfaktorzerlegung bekannt • Sicherheit des RSA-Verschlüsslungsverfahrens, sowie andere wichtige kryptographische Verfahren KAPITEL 1. GANZE ZAHLEN 8 • Ist das Faktorisierungsproblem schwer? (noch kein Beweis bekannt!) Beispiel 1.10.1 Der französische Jurist Pierre de Fermat (1601 bis 1665) glaubte, daß alle nach ihm benannten Fermat-Zahlen i Fi = 2 2 + 1 Primzahlen seien, aber dem ist nicht so. Denn 1732 fand Euler heraus, daß F5 = 641 ∗ 6700417 zusammengesetzt ist und demnach keine Primzahl ist. • F0 = 3, F1 = 5, F2 = 17, F3 = 257 und F4 = 65537 sind Primzahlen • F6 , F7 , F8 und F9 sind zusammengesetzt • Zerlegung der 39-stelligen Fermat-Zahl F7 hat bis 1970 gedauert (Problem der Faktorisierung) • 155-stellige Fermat-Zahl F9 schon 20 Jahre später faktorisiert (enorme Weiterentwicklung)