IT-Sicherheitsmanagement Teil 3: Restklassen ISM – SS 2017 – Teil 3/Restklassen 20.04.17 1 Literatur [3-1] Beutelspacher, A.; Schwenk, J.; Wolfenstetter, K.-D.: Moderne Verfahren der Kryptographie. 4. Auflage, Vieweg 2001 [3-2] Schmeh, Klaus: Kryptografie. dpunkt, 5. Auflage, 2013 [3-3] Hoffmann, Dirk: Einführung in die Informations- und Codierungstheorie. Springer, 2014 [3-4] Reiss, Kristina; Schmieder, Gerald: Basiswissen Zahlentheorie. Springer, 3. Auflage, 2014 [3-5] Buchmann, Johannes: Einführung in die Kryptographie. 5. Auflage, Springer, 2010 [3-6] Freiermuth, Karin; Hromkovic, Juraj; Keller, Lucia; Steffen, Björn: Einführung in die Kryptologie. Vieweg+Teubner, 2010 ISM – SS 2017 – Teil 3/Restklassen 2 Übersicht • • • • Etwas Modulo-Arithmetik Restklassen Der euklidische Algorithmus Der erweiterte euklidische Algorithmus ISM – SS 2017 – Teil 3/Restklassen 3 Definitionen und ein Satz I ℤ Menge der ganzen Zahlen ℕ Menge der ganzen positiven Zahlen mit 0 ℕ\{0} ℕ ohne 0 Satz Für alle Zahlen a∊ℤ, b∊ℤ\{0} gibt es genau ein q∊ℤ und r∊ℕ mit a = q*b+r, wobei 0 <= r < |b| ist. r wird Rest genannt und ist immer positiv zwischen 0 und |b|-1. ISM – SS 2017 – Teil 3/Restklassen 4 Definitionen und ein Satz II Ganzzahlige Division: DIV q= a DIV m, wobei a, m, q aus ℤ, mit m<>0 q ist die größte Ganzzahl < a/m Rest modulo: MOD r= a MOD m, wobei a, m, q aus ℤ, mit m<>0, r aus ℕ, 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 ISM – SS 2017 – Teil 3/Restklassen 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 ℤ, mit m<>0, r aus ℕ 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. ISM – SS 2017 – Teil 3/Restklassen 6 Definitionen und ein Satz IV - Beispiele 0 1 2 3 4 MOD MOD MOD MOD MOD 3 3 3 3 3 = = = = = 0 1 2 0 1 -1 -2 -3 -4 -5 MOD MOD MOD MOD MOD 3 3 3 3 3 = = = = = 2 1 0 2 1 0 1 2 3 4 DIV DIV DIV DIV DIV 3 3 3 3 3 = = = = = 0 0 0 1 1 Es gilt a = (a DIV m)*m + a MOD m a DIV m = (a - a MOD m)/m 22 MOD 7 = 1, denn 3*7=21 -22 MOD 7 = 6, denn -4*7= -28 ISM – SS 2017 – Teil 3/Restklassen 7 Addition und Subtraktion I Wertebereich: ℕ 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 ISM – SS 2017 – Teil 3/Restklassen 8 Teilbarkeit I Definition a∊ℤ\{0} teilt b∊ℤ, wenn es ein k∊ℤ 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. ISM – SS 2017 – Teil 3/Restklassen 9 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|(k1*b+k2*c) (Linearkombination) Beweise folgen direkt aus der Definition: [2]: a|b ∧ a|c => a|(b-c): Mit b = k1*a falls a|b und analog c = k2*a a|(b-c)=> a|(k1*a-k2*a) = a|a*(k1-k2) analog für die umgekehrte Richtung Analog für [1] und [3] ISM – SS 2017 – Teil 3/Restklassen 10 Ein paar Sätze I Definition a MOD m = b MOD m, falls m | (a – b) mit a, b∊ℤ, m∊ℕ\{0}, dann heißt a zu b kongruent modulo m d.h. d.h. d.h. d.h. mit m | (a – b) gibt es ein k mit k*m = a – b die Differenz muss ein Vielfaches von m sein wenn k*m = a – b gilt, dann auch a = b + k*m k*m ist dann in a = b + k*m die Differenz daraus folgt unmittelbar mit k∊ℤ: (a+k*m) MOD m = b MOD m (a+k*m) MOD m = a MOD m ISM – SS 2017 – Teil 3/Restklassen 11 Ein paar Sätze II Allgemein gilt (a, k aus ℤ, m∊ℕ\{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 ℤ, m∊ℕ\{0}): [S4] (a + b) MOD m = (a MOD m + b MOD m) MOD m Subtraktion (a, b aus ℤ, m∊ℕ\{0}): [S5] (a - b) MOD m = (a MOD m - b MOD m) MOD m ISM – SS 2017 – Teil 3/Restklassen 12 Ein paar Sätze III – Beweis für Addition Zu zeigen ist: Es gilt:[a] Es gilt:[b] (a + b) MOD m = (a MOD m + b MOD m) MOD m z = m*(z DIV m) + z MOD m (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. ISM – SS 2017 – Teil 3/Restklassen 13 Bemerkungen Da a MOD m = b MOD m mit a ∊ℤ, b∊ℕ 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. ISM – SS 2017 – Teil 3/Restklassen 14 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 ISM – SS 2017 – Teil 3/Restklassen = (a MOD m * b MOD m) MOD m 15 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 ISM – SS 2017 – Teil 3/Restklassen ⇒ 6 * 5-1 MOD 7 = 6 * 3 MOD 7 = 4 16 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*0= 0 mod 6 = 0 3*1= 3 mod 7 = 3 3*1= 3 mod 6 = 3 3*2= 6 mod 7 = 6 3*2= 6 mod 6 = 0 3*3= 9 mod 7 = 2 3*3= 9 mod 6 = 3 3*4= 12 mod 7 = 5 3*4= 12 mod 6 = 0 3*5= 15 mod 7 = 1 3*5= 15 mod 6 = 3 3*6= 18 mod 7 = 4 Es gibt kein inverses Element zu 3. ISM – SS 2017 – Teil 3/Restklassen 17 Bestimmung des inversen Elements (Division) II 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 Beispiel 1: a=5, m=7 1*5 2*5 3*5 4*5 5*5 6*5 ≡ ≡ ≡ ≡ ≡ ≡ 5 3 1 6 4 5 (mod (mod (mod (mod (mod (mod 7) 7) 7) 7) 7) 7) Beispiel 2: a=3, m=6, 1*3 2*3 3*3 4*3 5*3 ≡ ≡ ≡ ≡ ≡ 3 0 3 0 3 (mod (mod (mod (mod (mod 6) 6) 6) 6) 6) Multiplikationstafeln ISM – SS 2017 – Teil 3/Restklassen 18 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. ISM – SS 2017 – Teil 3/Restklassen 19 Restklassen II - Definition Restklasse von a bzgl. m = Menge von Zahlen aus ℤ, 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: = {k∊ℤ| k*m+ 0 } 0 1 = {k∊ℤ| k*m+ 1 } … m-1 = {k∊ℤ| 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. ISM – SS 2017 – Teil 3/Restklassen 20 Sätze und Regeln für Restklassen Beispiele: 5 2 13 3 ≡ 5 ≡ 7 ≡ 3 ≡ 13 (mod (mod (mod (mod 5) 5) 5) 5) Beispiele: 3 + 5 ≡ 0 (mod 8) 3 – 6 ≡ 6 (mod 9) 3 + 6 ≡ 0 (mod 9) (1) a + k*m ≡ a (mod m) (2) k*m ≡ 0 (mod m) Beispiele: 4 * 5 ≡ 6 (mod 7) 3 * 4 ≡ 2 (mod 5) 4 * 4 ≡ 1 (mod 5) Addition, Subtraktion, Multiplikation (a, b aus ℤ, m aus ℕ\{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. ISM – SS 2017 – Teil 3/Restklassen 21 Potenzieren I Potenzieren (Exponentiation) wird auf mehrfaches Multiplizieren zurückgeführt. ab ≡ c (mod m) Beispiel: 34 ≡ ? (mod 5) ⇒ 3*3*3*3 ≡ 1 (mod 5) ISM – SS 2017 – Teil 3/Restklassen 22 Potenzieren II – schneller Algorithmus (1) (an)m = an*m (2) an+m = an*am (3) an = (an DIV 2)2*an MOD 2 Exponent wird als Binärzahl dargestellt. Für jede 1 der Binärzahl wird ein Summand als 2er-Potenz berechnet. Dann werden alle Summanden im Exponenten addiert. Auf der Ebene der betreffenden Zahl wird aus Addition eine Multiplikation. Beispiel: a23 = a10111B = a1+2+4+16 = a * a2 * a4 * a16 Statt 22 Multiplikationen: 7 Multiplikationen ISM – SS 2017 – Teil 3/Restklassen 23 Potenzieren III – schneller Algorithmus Aufwand • n-1 Quadrierungen, wobei n die Nummer der höchsten Stelle des Exponenten in Binärdarstellung mit 1 ist • (Für jede 1 im Binärwert eine weitere Multiplikation) - 1 • Typische Zahl: 65537 = 10000000000000001B (2**16+1) 16 Quadrierungen (17. Stelle mit 1 beginnend gezählt) 2 Einsen, d.h. eine weitere Multiplikation, also 17, statt 65536 Multiplikationen Siehe dazu: http://de.wikipedia.org/wiki/Binäre_Exponentiation ISM – SS 2017 – Teil 3/Restklassen 24 Kleiner Satz von Fermat I Der kleine Satz von Fermat: (1)ap ≡ 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) ap-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. ISM – SS 2017 – Teil 3/Restklassen 25 Kleiner Satz von Fermat II - Anwendung ap-1 ≡ a*ap-2 (mod p) Dann gilt laut Fermat aber auch: a*ap-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 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 ISM – SS 2017 – Teil 3/Restklassen Beispiel mod 7 Für a=7, 14 etc. kommt immer 0 heraus. 26 Logarithmus, Wurzel Diskreter Logarithmus (Modulo Logarithmus) ax ≡ b (mod q) Die Berechnung des diskreten Logarithmus ist sehr aufwändig, weshalb dies in der Kryptographie gerne ausgenutzt wird. Modulo Wurzel xa ≡ b (mod q) ISM – SS 2017 – Teil 3/Restklassen 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 ℕ 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. ISM – SS 2017 – Teil 3/Restklassen 28 Größter gemeinsamer Teiler (ggT) II Satz: Für alle Zahlen a, b, k aus ℕ 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. ISM – SS 2017 – Teil 3/Restklassen 29 Größter gemeinsamer Teiler (ggT) III int Euklid(int a,b) { while a!=b { if a>b { a:= a-b; } else { b:= b-a; } } return a; } ggT(a,b) = ggT(a,b-a) ggT(a,b) = ggT(b,a) Diese Version entspricht eher dem Original: wechselseitiges "Wegnehmen" ISM – SS 2017 – Teil 3/Restklassen 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. ISM – SS 2017 – Teil 3/Restklassen 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. ISM – SS 2017 – Teil 3/Restklassen 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. ISM – SS 2017 – Teil 3/Restklassen 33 Erweiterter Euklidischer Algorithmus I Seien a, b ∊ℕ\{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∊ℤ. Beispiel mit a=2 und b=7 0 1 2 3 4 5 = 7*2 – 2*7 = -3*2 + 1*7 = 8*2 - 2*7 = -9*2 + 3*7 = -5*2 + 2*7 = ISM – SS 2017 – Teil 3/Restklassen 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. ISM – SS 2017 – Teil 3/Restklassen 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 ISM – SS 2017 – Teil 3/Restklassen 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; // b = bu*a + bv*b while a != b { if a>b { a:= a-b; Grün sind die Bestandteile au:= au-bu; // linear des ursprünglichen Algorithmus. av:= av-bv; } else { b:= b-a; bu:= bu-au; // linear bv:= bv-av; } } Bitte beachten Sie, dass die u- und v-Werte return a,au,av; negativ sein können, dann muss dies durch } Addition des Moduls korrigiert werden. ISM – SS 2017 – Teil 3/Restklassen 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; Grün sind die Bestandteile b:= t; 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. ISM – SS 2017 – Teil 3/Restklassen 38 Nach dieser Anstrengung etwas Entspannung.... ISM – SS 2017 – Teil 3/Restklassen 39