IT-Security. Teil 7: Restklassen

Ähnliche Dokumente
Literatur. ITSec SS 2017 Teil 7/Restklassen

Literatur. ISM SS 2018 Teil 3/Restklassen

IT-Sicherheitsmanagement. Teil 3: Restklassen

IT-Security. Teil 8b: Rechnen mit beliebiger Genauigkeit Algorithmen

3. Diskrete Mathematik

1.Vortrag: Rechnen mit Restklassen/modulo einer Zahl

Grundlagen der Arithmetik und Zahlentheorie

IT-Security. Teil 9: Einführung in algebraische Strukturen

Ganzzahlige Division mit Rest

Literatur und Videos. ISM WS 2017/18 Teil 4/Algebren

IT-Sicherheitsmanagement. Teil 4: Einführung in algebraische Strukturen

Seminar zum Thema Kryptographie

Literatur. [8-9] ISM WS 2018/19 Teil 8/Asymmetrische Verschlüsselung

Interim. Kapitel Einige formale Definitionen

2: Restklassen 2.1: Modulare Arithmetik

Kapitel 4. Kapitel 4 Restklassen (die modulo-rechnung)

IT-Sicherheitsmanagement. Teil 8: Asymmetrische Verschlüsselung

IT-Sicherheitsmanagement. Teil 12: Asymmetrische Verschlüsselung

Zahlentheorie. Stefan Takacs Linz, am 2. Juni 2004

Literatur. ISM SS 2017 Teil 8/Asymmetrische Verschlüsselung

Diskrete Mathematik Kongruenzen

Zahlentheorie, Arithmetik und Algebra

Bsp. Euklidischer Algorithmus

Vorlesung Mathematik 2 für Informatik

3.5 Ringe und Körper. Diese Eigenschaften kann man nun auch. 1. (R, +) ist eine kommutative Gruppe. 2. Es gilt das Assoziativgesetz bezüglich.

Demo-Text für Modulo-Rechnungen. und. Restklassen. Höhere Algebra INTERNETBIBLIOTHEK FÜR SCHULMATHEMATIK.

Diskrete Mathematik. Sebastian Iwanowski FH Wedel. Kap. 4: Zahlentheorie

Kanonische Primfaktorzerlegung

Kanonische Primfaktorzerlegung

1 Zahlentheorie. 1.1 Kongruenzen

Zahlenlehre 1. Die Mathematik ist die Königin der Wissenschaften und die Zahlentheorie ist die Königin der Mathematik (Carl Friedrich Gauß)

Kapitel 2. Elementare Zahlentheorie Primfaktorzerlegung

1 Der Ring der ganzen Zahlen

Teilbarkeitslehre und Restklassenarithmetik

WS 2008/09. Diskrete Strukturen

Mathematik I für Studierende der Informatik und Wirtschaftsinformatik (Diskrete Mathematik) im Wintersemester 2015/16

Der chinesische Restsatz mit Anwendung

Euklidische Algorithmus, Restklassenringe (Z m,, )

ÜBUNGEN ZUR VORLESUNG ZAHLENTHEORIE, SS 2018

Einführung in die Zahlentheorie

Kapitel III Ringe und Körper

Äquivalenzrelation. Tischler-Problem. Euklidischer Algorithmus. Erweiterter euklidischer Algorithmus. Lineare diophantische Gleichung

Mathematisches Institut II Universität Karlsruhe Priv.-Doz. Dr. N. Grinberg

WS 2009/10. Diskrete Strukturen

1 Vorbereitung: Potenzen 2. 2 Einstieg und typische Probleme 3

p Z >1 ist Primzahl, wenn gilt Euklid:

Form der Äquivalenzklassen

Diskrete Mathematik. Christina Kohl Georg Moser Oleksandra Panasiuk Christian Sternagel Vincent van Oostrom

Kapitel 3 Elementare Zahletheorie

Algorithmische Kryptographie

Die Menge C der komplexen Zahlen wird im Kapitel Weitere Themen behandelt.

Hast du auch wirklich versucht, die Aufgaben einmal selbständig zu lösen? Wenn nicht, tue es, bevor du dir die Lösungen anschaust!

Langzahlarithmetik implementieren Ac 1990 bis 2016

Euklidischer Algorithmus

$Id: ring.tex,v /05/03 15:13:26 hk Exp $

Corinne Schenka Vorkurs Mathematik WiSe 2012/13. Die kleineren Zahlbereiche sind jeweils Teilmengen von größeren Zahlbereichen:

1 Kryptographie - alt und neu

Diskrete Strukturen. Vorlesung 15: Arithmetik. 5. Februar 2019

Algebraische Strukturen

1 Der Ring der ganzen Zahlen

Chr.Nelius: Zahlentheorie (WS 2006/07) ggt und kgv

= k 0+k 0 ( ). Wir addieren (0 k) zu den Seiten der Gleichung ( ): 0 = k 0.

Mathematik I für Studierende der Informatik und Wirtschaftsinformatik (Diskrete Mathematik) im Wintersemester 2017/18

Lineare Algebra I 5. Tutorium Die Restklassenringe /n

Vorkurs Mathematik Dozent: Dipl.-Math. Karsten Runge.

Der kleine Satz von Fermat

Zahlentheorie, Arithmetik und Algebra 1

2.4. Kongruenzklassen

4. ggt und kgv. Chr.Nelius: Zahlentheorie (SS 2007) 9

Kapitel 2: Zahlentheoretische Algorithmen Gliederung

WIEDERHOLUNG (BIS ZU BLATT 7)

IT-Security. Teil 9: Asymmetrische Verschlüsselung

kgv-berechnung Invertieren modulo m Simultane Kongruenzen Restklassenringe Modulare Arithmetik Euler sche Funktion Sätze von Fermat und Euler

Algebraische Grundlagen

Zahlentheorie für den Landeswettbewerb für Anfängerinnen und Anfänger der Österreichischen Mathematik-Olympiade

IT-Security. Teil 13: Asymmetrische Verschlüsselung

Diskrete Strukturen Kapitel 5: Algebraische Strukturen (Gruppen)

5 Grundlagen der Zahlentheorie

Algebraische Strukturen. Idee. Gruppen, Ringe, Körper... (Teschl/Teschl Abschnitt 3.2, siehe auch Kap. 4)

1 Algebraische Strukturen

4.21 Die zahlentheoretischen Bücher VII, VIII und IX der Elemente

Vorlesung. Inhalt. Lineare Algebra und Wahrscheinlichkeitsrechnung für Informatik Gunter Ochs, Nico Rompos Sommersemester 2016

Diskrete Strukturen 5.9 Permutationsgruppen 168/558 c Ernst W. Mayr

Von den ganzen Zahlen zu GF(p)

ggt mit Euklid Satz: Um ggt(k, l) mit dem Euklidischen Algorithmus zu berechnen, braucht man höchstens log Φ k < 3 2 log 2 k rekursive Aufrufe.

Elemente der Algebra und Zahlentheorie Musterlösung, Serie 5, Wintersemester vom 21. Januar 2006

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik

3. Der größte gemeinsame Teiler

Das RSA-Verfahren - Einsatz von Standardalgorithmen in der Kryptologie

Hallo Welt für Fortgeschrittene

Zahlen. Vorlesung Mathematische Strukturen. Sommersemester Zahlen. Zahlen

. Zahlentheorie, Arithmetik und Algebra I. Tobias Polzer. Tobias Polzer Zahlentheorie, Arithmetik und Algebra I.. /

4 Kryptologie. Übersicht

Elementare Zahlentheorie. Diskrete Strukturen. Winter Semester 2012 #

1 Körper. Wir definieren nun, was wir unter einem Körper verstehen, und sehen dann, dass es noch andere, ganz kleine Körper gibt:

Transkript:

IT-Security Teil 7: Restklassen 20.04.17 1

Literatur [7-1] Beutelspacher, A.; Schwenk, J.; Wolfenstetter, K.-D.: Moderne Verfahren der Kryptographie. 4. Auflage, Vieweg 2001 [7-2] Schmeh, Klaus: Kryptografie. dpunkt, 5. Auflage, 2013 [7-3] Hoffmann, Dirk: Einführung in die Informations- und Codierungstheorie. Springer, 2014 [7-4] Reiss, Kristina; Schmieder, Gerald: Basiswissen Zahlentheorie. Springer, 3. Auflage, 2014 [7-5] Buchmann, Johannes: Einführung in die Kryptographie. 5. Auflage, Springer, 2010 [7-6] Freiermuth, Karin; Hromkovic, Juraj; Keller, Lucia; Steffen, Björn: Einführung in die Kryptologie. Vieweg+Teubner, 2010 2

Übersicht Etwas Modulo-Arithmetik Restklassen Der euklidische Algorithmus Der erweiterte euklidische Algorithmus 3

Definitionen und ein Satz I Z Menge der ganzen Zahlen N Menge der ganzen positiven Zahlen mit 0 N\{0} N ohne 0 Satz Für alle Zahlen a Z, b Z\{0} gibt es genau ein q Z und r N mit a = q*b+r, wobei 0 <= r < b ist. r wird Rest genannt und ist immer positiv zwischen 0 und b -1. 4

Definitionen und ein Satz II Ganzzahlige Division: DIV q= a DIV m, wobei a, m, q aus Z, mit m<>0 q ist die größte Ganzzahl < a/m Rest modulo: MOD r= a MOD m, wobei a, m, q aus Z, mit m<>0, r aus N, Konvention (wird meist eingehalten): q (wie Quotient) möge der ganzzahlige Quotient sein r (wie Rest) möge der Modulo-Wert sein p (wie Primzahl) möge eine Primzahl sein m (wie Modul) möge die Zahl hinter mod/mod sein n möge eine natürliche Zahl einschließlich 0 sein 5

Definitionen und ein Satz III Aus Satz (verkürzt) a = b*q+r folgt mit der Definition von DIV und MOD damit: Mit a, m aus Z, mit m<>0, r aus N gilt: a = (a DIV m)*m + a MOD m oder a MOD m = a - (a DIV m)*m Das Modul m kann auch negativ sein: In a MOD m = a - (a DIV m)*m ist das Produkt positiv. Daraus folgt a MOD m = a MOD -m In dieser Veranstaltung (und in der Kryptographie) wird nur mit positiven Modulen gerechnet. 6

Definitionen und ein Satz IV - Beispiele 0 MOD 3 = 0 1 MOD 3 = 1 2 MOD 3 = 2 3 MOD 3 = 0 4 MOD 3 = 1 0 DIV 3 = 0 1 DIV 3 = 0 2 DIV 3 = 0 3 DIV 3 = 1 4 DIV 3 = 1 Es gilt a = (a DIV m)*m + a MOD m a DIV m = (a - a MOD m)/m -1 MOD 3 = 2-2 MOD 3 = 1-3 MOD 3 = 0-4 MOD 3 = 2-5 MOD 3 = 1 22 MOD 7 = 1, denn 3*7=21-22 MOD 7 = 6, denn -4*7= -28 7

Bemerkung In den Programmiersprachen wird häufig nicht die hier angegebene mathematische Definition von MOD benutzt. Es kann sein, dass dort negative Reste berechnet werden. Hier ein Beispiel aus PHP: $a= 10 % 7; 10 mod 7 = 3 $a= -10 % 7-10 mod 7 = -3 $a= 10 % -7; 10 mod -7 = 3 $a= -10 % -7; -10 mod -7 = -3 Das mod-ergebnis wird wie mit +-Vorzeichen berechnet, und das Vorzeichen des Ergebnisses ist bei gleichen Vorzeichen der Operanden +, sonst -. 8

Addition und Subtraktion I Wertebereich: N für das Ergebnis Addition Modulo m: Es wird wie gewöhnlich addiert, wobei anschließend solange m subtrahiert/addiert wird, bis das Ergebnis >= 0 und <m ist. Subtraktion Modulo m: Es wird wie gewöhnlich subtrahiert, wobei anschließend solange m addiert/subtrahiert wird, bis das Ergebnis >= 0 und <m ist. Beispiele: ( 3 + 5) MOD 8 = 0 ( 3 6) MOD 9 = 6 ( 3 6) MOD 9 = 0 9

Teilbarkeit I Definition a Z\{0} teilt b Z, wenn es ein k Z gibt, so das b = k*a Dies wird geschrieben als a b. Oder anders: a teilt b = a b, wenn b MOD a = 0 oder wenn b ein Vielfaches von a ist. 10

Teilbarkeit II Sätze [1] a b a c => a (b+c) [2] a b a c => a (b-c) [3] a b a c => a (k 1 *b+k 2 *c) (Linearkombination) Beweise folgen direkt aus der Definition: [2]: a b a c => a (b-c): Mit b = k 1 *a falls a b und analog c = k 2 *a a (b-c)=> a (k 1 *a-k 2 *a) = a a*(k 1 -k 2 ) analog für die umgekehrte Richtung Analog für [1] und [3] 11

Ein paar Sätze I Definition a MOD m = b MOD m, falls m (a b) mit a, b Z, m N\{0}, dann heißt a zu b kongruent modulo m d.h. mit m (a b) gibt es ein k mit k*m = a b d.h. die Differenz muss ein Vielfaches von m sein d.h. wenn k*m = a b gilt, dann auch a = b + k*m d.h. k*m ist dann in a = b + k*m die Differenz daraus folgt unmittelbar mit k Z: (a+k*m) MOD m = b MOD m (a+k*m) MOD m = a MOD m 12

Ein paar Sätze II Allgemein gilt (a, k aus Z, m N\{0}): [S1] (a + k*m) MOD m = a MOD m (folgt aus Definition) [S2] k*m MOD m = 0 (folgt aus [S1]) [S3] a MOD m = a, falls 0<= a < m Addition (a, b aus Z, m N\{0}): [S4] (a + b) MOD m = (a MOD m + b MOD m) MOD m Subtraktion (a, b aus Z, m N\{0}): [S5] (a - b) MOD m = (a MOD m - b MOD m) MOD m 13

Ein paar Sätze III Beweis für Addition Zu zeigen ist: (a + b) MOD m = (a MOD m + b MOD m) MOD m Es gilt:[a] z = m*(z DIV m) + z MOD m Es gilt:[b] (z + a*m) MOD m = z MOD m, da a*m MOD m = 0 [1] (a + b) MOD m [2] (a + b) MOD m = (m*a DIV m + a MOD m + m*b DIV m + b MOD m) MOD m // da [a] [3] = (m*(a DIV m + b DIV m) + a MOD m + b MOD m) MOD m [4] = (0 + a MOD m + b MOD m) MOD m // da [b] [5] (a + b) MOD m = (a MOD m + b MOD m) MOD m Analog geht dies für die Subtraktion und Multiplikation. 14

Bemerkungen Da a MOD m = b MOD m mit a Z, b N und b<m gilt, kann immer im Bereich: Wertebereich für a: {0, 1, 2,, m-1} bei MOD m gerechnet werden. Wenn ein Ergebnis einer Rechnung außerhalb liegt, kann es jederzeit durch Addieren von k*m in diesen Bereich gebracht werden. Das führt zur Ersparnis bei großen Zahlen. 0 ist das neutrale Element bzgl. der Addition, da a+0 immer a ist. Also (a + 0) MOD m = a MOD m a -1 oder -a wird inverses Element bzgl. der Addition genannt, weil a + (-a) = 0 ist. 15

Multiplikation Multiplizieren wird auf mehrfaches Addieren zurückgeführt. Es wird wie gewöhnlich multipliziert und dann solange m abgezogen bzw. addiert bis das Ergebnis >= 0 und <m ist. Beispiele: 4 * 5 MOD 7 = 6, denn 4*5-> 20-7-7 -> 6 3 * 4 MOD 5 = 2 4 * 4 MOD 5 = 1 Dazu gibt es noch folgende Sätze: [S6] a*b MOD m = b*a MOD m (Kommutativgesetz) [S7] (a*b)*c MOD m = a*(b*c) MOD m (Assoziativgesetz) [S8] a*b MOD m = (a MOD m * b MOD m) MOD m 16

Division Gibt es für ein a ein b mit a*b MOD m = 1? b ist das inverse Element bzgl. * : a -1, also a*a -1 MOD m = 1. Das inverse Element bzgl. * existiert nur dann, wenn a und m teilerfremd sind, also wenn sie außer 1 keinen gemeinsamen Teiler haben also insbesondere, wenn m eine Primzahl ist, dann gibt es für alle Werte ein inverses Element bzgl. der Multiplikation. Beispiel: 5-1 MOD 7 = 3, denn 5 und 7 sind teilerfremd da 5 * 5-1 MOD 7 = 5 * 3 MOD 7 = 1 (mod 7) 6 / 5 MOD 7 6 * 5-1 MOD 7 = 6 * 3 MOD 7 = 4 17

Bestimmung des inversen Elements (Division) I Bei m= 7 wieviel ist 3-1? {0,1,2,3,4,5,6} Rest muss 1 sein: Bei m= 6 wieviel ist 3-1? {0,1,2,3,4,5} Rest muss 1 sein: 3*0= 0 mod 7 = 0 3*1= 3 mod 7 = 3 3*2= 6 mod 7 = 6 3*3= 9 mod 7 = 2 3*4= 12 mod 7 = 5 3*5= 15 mod 7 = 1 3*6= 18 mod 7 = 4 3*0= 0 mod 6 = 0 3*1= 3 mod 6 = 3 3*2= 6 mod 6 = 0 3*3= 9 mod 6 = 3 3*4= 12 mod 6 = 0 3*5= 15 mod 6 = 3 Es gibt kein inverses Element zu 3. 18

Bestimmung des inversen Elements (Division) II Beispiel 1: a=5, m=7 1*5 5 (mod 7) 2*5 3 (mod 7) 3*5 1 (mod 7) 4*5 6 (mod 7) 5*5 4 (mod 7) 6*5 5 (mod 7) Beispiel 2: a=3, m=6, 1*3 3 (mod 6) 2*3 0 (mod 6) 3*3 3 (mod 6) 4*3 0 (mod 6) 5*3 3 (mod 6) Multiplikationstafeln 0 1 2 3 4 5 6 0 0 0 0 0 0 0 0 1 0 1 2 3 4 5 6 2 0 2 4 6 1 3 5 3 0 3 6 2 5 1 4 4 0 4 1 5 2 6 3 5 0 5 3 1 6 4 2 6 0 6 5 4 3 2 1 0 1 2 3 4 5 0 0 0 0 0 0 0 1 0 1 2 3 4 5 2 0 2 4 0 2 4 3 0 3 0 3 0 3 4 0 4 2 0 2 2 5 0 5 4 3 2 1 19

Restklassen I - Definition Wie oben schon eingeführt: a ist kongruent zu b modulo m, wenn m die Differenz a-b teilt a b (mod m) a b (mod m) bedeutet, dass die Reste bezüglich m gleich sind. 20

Restklassen II - Definition Restklasse von a bzgl. m = Menge von Zahlen aus Z, die sich aus der Addition von a und den Vielfachen von m ergeben. Die Restklasse ist also die Menge aller ganzen Zahlen, die modulo m dieselben Reste ergeben. Es gibt daher m verschiedene Restklassen für die Reste 0..m-1: 0 = {k Z k*m+ 0 } 1 = {k Z k*m+ 1 } m-1 = {k Z k*m+ m-1 } Es wird mit den Stellvertretern gerechnet: {0,1,,m-1}, wobei jedes Element dieser Menge eine Restklasse vertritt. Dies hat für die Realisierung die wichtige Konsequenz, dass der zu realisierende Zahlenbereich in {0,1,,m-1} liegt und nicht größer. 21

Sätze und Regeln für Restklassen Beispiele: 5 5 (mod 5) 2 7 (mod 5) 13 3 (mod 5) 3 13 (mod 5) (1) a + k*m a (mod m) (2) k*m 0 (mod m) Beispiele: 3 + 5 0 (mod 8) 3 6 6 (mod 9) 3 + 6 0 (mod 9) Beispiele: 4 * 5 6 (mod 7) 3 * 4 2 (mod 5) 4 * 4 1 (mod 5) Addition, Subtraktion, Multiplikation (a, b aus Z, m aus N\{0}): (3) a + b a mod m + b mod m (mod m) (4) a - b a mod m - b mod m (mod m) (5) a * b a mod m * b mod m (mod m) Es gelten dieselben Regeln und Sätze wie in der Modulo-Arithmetik. 22

Kleiner Satz von Fermat I Der kleine Satz von Fermat: (1)a p a (mod p), mit a>0 und p ist eine Primzahl Wenn a und p teilerfremd sind (oder: wenn a kein Vielfaches von p ist), kann die folgende zweite Form benutzt werden: (2) a p-1 1 (mod p), mit a>0, ggt(a,p)=1 und p ist eine Primzahl Um von (1) nach (2) zu kommen, muss (1) auf beiden Seiten durch a dividiert werden, was aber nur geht, wenn das multiplikative Inverse existiert; das tut es nur dann, wenn ggt(a,p)=1 ist. (2) bedeutet, dass p-1 auf den Exponenten beliebig oft addiert oder subtrahiert werden kann bzw. der Exponent mod p-1 genommen werden darf. 23

Kleiner Satz von Fermat II a p-1 1 (mod p), mit a>0, a<p und p ist eine Primzahl Falls a=p, dann ist p p-1 mod p = 0 (linke Seite), was nicht 1 ist. ggt(a<p,p) mit p als Primzahl ist immer 1. Beispiele für p=2, für die beiden Formen: a p a(mod p) a p-1 1(mod p) a=1: 1 2 mod 2 = 1 mod 2 a=1: 1 1 mod 2 = 1 mod 2 a=2: 2 2 mod 2 = 2 mod 2 a=2: 2 1 mod 2 1 mod 2, da ggt(2,2)=2 24

Kleiner Satz von Fermat III (1) a p a (mod p), mit a>0 und p ist eine Primzahl a n a (n div p)*p+(n mod p) (mod p), mit a>0 und p ist eine Primzahl a (n div p)*p * a (n mod p) (mod p) (a p ) (n div p) * a (n mod p) (mod p) a (n div p) * a (n mod p) (mod p) (2) a p-1 1 (mod p), mit a>0, ggt(a,p)=1 und p ist eine Primzahl a n a n mod (p-1) (mod p), mit a>0, ggt(a,p)=1 und p ist eine Primzahl Zwei Möglichkeiten die Potenz beim Potenzieren vorher zu reduzieren. Dies ist aber nur dann sinnvoll, wenn n>p gilt. 25

Kleiner Satz von Fermat IV - Anwendung a p-1 a*a p-2 (mod p) Dann gilt laut Fermat aber auch: a*a p-2 1 (mod p), ggt(a,p)=1 und p ist eine Primzahl Das kann zur Berechnung des multiplikativen inversen Elements benutzt werden. 1 1*1*1*1*1= 1 2 2*2*2*2*2= 32 -> 4 Beispiel mod 7 3 3*3*3*3*3= 243 -> 5 4 4*4*4*4*4= 1024 -> 2 5 5*5*5*5*5= 3125 -> 3 6 6*6*6*6*6= 7776 -> 6 Für a=7, 14 etc. kommt immer 0 heraus. 26

Logarithmus, Wurzel Diskreter Logarithmus (Modulo Logarithmus) a x b (mod q) Die Berechnung des diskreten Logarithmus ist sehr aufwändig, weshalb dies in der Kryptographie gerne ausgenutzt wird. Modulo Wurzel x a b (mod q) 27

Größter gemeinsamer Teiler (ggt) I Eine Zahl c heißt größter gemeinsamer Teiler (ggt) zweier Ganzzahlen a und b, wenn c beide Zahlen teilt und die größte ist, die beide Zahlen teilt. Ein paar hoffentlich einleuchtende Sätze zum ggt: ggt(a,a) = ggt(a,0)= a ggt(a,b) = ggt(b,a) ggt(a,k*a) = a, mit k aus N Die Idee besteht nun darin, die beiden Argumente schrittweise unter Beibehaltung des Ergebnisse so zu verkleinern, dass anhand einer der beiden roten Formeln das Ergebnis bestimmt ist. 28

Größter gemeinsamer Teiler (ggt) II Satz: Für alle Zahlen a, b, k aus N mit a>b gilt: Wenn k beide Zahlen a und b teilt, dann teilt auch k die Differenz a-b. Beweis (hatten wir oben schon) Daraus lässt sich beweisen: ggt(a,b) = ggt(a-b,b) mit a>=b Oder anders formuliert: Ziehe immer wieder die kleinere von der größeren der beiden Zahlen ab bis sie gleich sind: das ist das Ergebnis. 29

Größter gemeinsamer Teiler (ggt) III int Euklid(int a,b) { while b>0 { if b<a { exchange(a,b); } b:= b-a; } return a; } Diese Version entspricht eher dem Original: wechselseitiges "Wegnehmen" ggt(a,b) = ggt(a,b-a) ggt(a,b) = ggt(b,a) int Euklid(int a,b) { while a!=b { if a>b { a:= a-b; } else { b:= b-a; } } return a; } 30

Größter gemeinsamer Teiler (ggt) IV Der bisherige Algorithmus ist nur dann effizient, wenn a und b relativ gleich groß sind - aber es geht noch besser... a = (a DIV q)*q + a MOD q ggt(a,b) = ggt((a DIV b-0)*b + a MOD b,b) = ggt((a DIV b-1)*b + a MOD b,b) da a:= a-b erlaubt ist = ggt((a DIV b-2)*b + a MOD b,b)... = ggt((2 )*b + a MOD b,b) = ggt((1 )*b + a MOD b,b) = ggt((0 )*b + a MOD b,b) ggt(a,b) = ggt(a MOD b,b) mit a>=b Der entscheidende Schritt ist der markierte: der 1. Parameter von ggt(a,b), also das a, wird mit Hilfe des Moduls b umgerechnet, falls b<>0. 31

Bemerkungen Warum kommt in der Kette der Subtraktionen am Ende 2,1,0 heraus? Weil a DIV b in jedem Schritt um 1 herunter gezählt wird; das wiederum hat den Grund, dass in jedem Schritt b subtrahiert wird. Das mehrfache Subtrahieren des b-wertes von a solange b>a ist, ist gerade das Verfahren zur Berechnung des Restes bzgl. b. 32

Größter gemeinsamer Teiler (ggt) V int EuklidMod(int a,b) { while a!=0 { if a>b { a:= a MOD b; } else { exchange(a,b); } } return b; } ggt(a,b) = ggt(a,b mod a) ggt(a,b) = ggt(b,a) int EuklidMod(int a,b) { while b!=0 { t:= a MOD b; a:= b; b:= t; } return a; } Da nach einem a:= a MOD b nie a>b wahr ist, kann gleich getauscht werden. 33

Erweiterter Euklidischer Algorithmus I Seien a, b N\{0} so lässt sich der ggt(a,b) als Linearkombination von a und b darstellen: ggt(a,b)= u*a+v*b mit u,v Z. Beispiel mit a=2 und b=7 0 = 7*2 2*7 1 = -3*2 + 1*7 2 = 8*2-2*7 3 = -9*2 + 3*7 4 = -5*2 + 2*7 5 = Dazu gibt es folgenden Satz u*a+v*b=n ist genau dann ganzzahlig lösbar, wenn ggt(a,b) n gilt. Nebenbei: Wenn ggt(a,b)<>1 ist, dann lassen sich nicht alle Zahlen als Linearkombination darstellen. 34

Erweiterter Euklidischer Algorithmus II Linearkombination einer Zahl z ist die Summe zweier Produkte, deren Teilfaktoren vorgegeben sind: z = u*a + v*b, wobei a und b vorgeben sind. Es kann mehrere Linearkombinationen derselben Zahl geben (nicht eindeutig), z.b. 0 = 7*2 2*7 = 14*2 4*7 mit a=2 und b=7 Und auch gibt es Paare a,b, mit denen nicht alle ganzen Zahlen als Linearkombinationen darstellen kann, z.b. lassen sich keine ungeraden Zahlen als Summe zweier gerader Zahlen darstellen. 35

Berechnung des multiplikativen Inversen a*a -1 1 (mod m) mit ggt(a,m)=1 das sind die Voraussetzungen ggt(a,b)= u*a+v*b also ggt(a,m)= u*a+v*m 1 (mod m) 0 a -1 a 36

Erweiterter Euklid scher Algorithmus mit Subtraktion func BigInt BigInt BigInt egcd(bigint a>=0,b>=0) { BigInt au,av,bu,bv; BigInt a,b,t; au:= 1; av:= 0; // a = au*a + av*b } bu:= 0; bv:= 1; while a!= b { if a>b { a:= a-b; au:= au-bu; av:= av-bv; } else { b:= b-a; bu:= bu-au; bv:= bv-av; } } return a,au,av; // b = bu*a + bv*b // linear // linear Grün sind die Bestandteile des ursprünglichen Algorithmus. Bitte beachten Sie, dass die u- und v-werte negativ sein können, dann muss dies durch Addition des Moduls korrigiert werden. 37

Erweiterter Euklid scher Algorithmus mit mod func BigInt BigInt BigInt egcdmod(bigint a>=0,b>=0) { BigInt au,av,bu,bv; BigInt a,b,t; au:= 1; av:= 0; // a = au*a + av*b bu:= 0; bv:= 1; // b = bu*a + bv*b while b!= 0 { q:= a div b; t:= a mod b; bu:= au-q*bu; // linear: b:= a mod b bv:= av-q*bv; a:= b; b:= t; Grün sind die Bestandteile des ursprünglichen Algorithmus. } return a,au,av; } Bitte beachten Sie, dass die u- bzw. v-werte negativ sein können, dann muss dies durch Addition des Moduls korrigiert werden. 38

Nach dieser Anstrengung etwas Entspannung... 39