Kryptologie

Werbung
Kryptologie
Bernd Borchert
Univ. Tübingen WS 15/16
Vorlesung
Teil 1b
Rechnen modulo n
Modulo Rechnen
a mod n ist definiert als Rest von a bei Division durch n (a aus Z, n aus N)
a + b mod n = a mod n + b mod n mod n
a - b mod n = a mod n - b mod n mod n
a * b mod n = a mod n * b mod n mod n
Mit anderen Worten: bei +, - und * kann man
diese Operationen und mod in einer Rechnung
jederzeit vertauschen.
Beispiele:
6 + 9 = 4 mod 11
6 – 9 = - 3 mod 11 = 8 mod 11
6 * 9 = 10 mod 11
10
0
9
8
7
Was ist mit Dividieren und Potenzieren?
2
mod 11
3
6
5
Zn sei die Menge der Zahlen 0,1,...,n-1. Die Operationen +, - und * auf Z n
sind eindeutig definiert und einfach zu berechnen.
1
4
Modulo Division
Was soll mit a geteilt durch b mod n gemeint sein?
Wir definieren: “a geteilt durch b mod n” bedeutet die Multiplikation von a mit dem
multiplikativen Inversen von b mod n.
Und was ist das multiplikative Inverse von b mod n? (Wir sagen ab jetzt: das
multiplikative Inverse von b in Zn )
b-1 in Zn ist die Zahl c so dass b*c = 1 mod n. Wenn b-1 mod n existiert ist es eindeutig.
Beispiel: Das mult. Inverse von 2 in Z5 ist 3, denn 2*3 = 6 = 1 mod 5.
Nicht jede Zahl a hat ein mult. Inverses in Zn , z. B. hat 2 in Z4 kein Inverses (2*1 = 2
mod 4, 2*2 = 0 mod 4, 2*3 = 2 mod 4).
Später sehen wir: Wenn p Primzahl ist, hat jede Zahl in Z p ein mult. Inverses, d.h. Zp ist
ein sogenannter Körper.
Aber vorerst stellen wir nur das Verfahren zur Berechnung des mult. Inversen von b in
Zn vor – das Verfahren wird uns dabei automatisch sagen, ob dieses Inverse existiert.
Euklischer Algorithmus (für ggT)
Gesucht: größter gemeinsamer Teiler ggT(a,b) von zwei Zahlen a und b
(hier jetzt keine modulo Rechnung, sondern Rechnung in Z)
ggT(61,36) = 1
61:36 = 1 x 36 + 25
36:25 = 1 x 25 + 11
25:11 = 2 x 11 + 3
11: 3 = 3 x 3 + 2
3:2 = 1 x 2 + 1
2: 1 = 2 x 1 + 0
ggT(61,36) = 1
Euklid, Alexandria (Ägypten),
ca. 300 v.Chr.
Beweis Euklischer Algorithmus
Beweis (anschaulich, wie im Original von Euklid ca. 300 v.Chr.)
ggT(a,b) = ggT(b,c) wobei c der Rest ist von a : b
a
b
Ein Teiler t von a und b muss auch den Rest c teilen:
a
b a
b
t
t
t
t
t
c
b
t
t
t
Wenn c nicht durch t teilbar
ist, wäre es a auch nicht
t
t
t
Das gilt auch für den größten Teiler, also
ggT(a,b) = ggT(b,c)
Gesamtbeweis von Euklid's Algorithmus:
ggT(a,b) = ggT(b,c) = ggT (c,d) = ... = ggT(an,bn)
Euklischer Algorithmus (für ggT)
Gleiche Berechnung ,aber hier nochmal in Tabellenform:
gesucht: ggT(61,36)
ggT(61,36) = 1
61:36 = 1 x 36 + 25
36:25 = 1 x 25 + 11
25:11 = 2 x 11 + 3
11: 3 = 3 x 3 + 2
3:2 = 1 x 2 + 1
2: 1 = 2 x 1 + 0
ggT(61,36) = 1
a
b
q
r
61
36
1
25
36
25
1
11
25
11
2
3
11
3
3
2
3
2
1
1
2
1
2
0
1
0
Erweiterter Euklischer Algorithmus
Gegeben sind a und b.
13 x 61 + -22 x 36 = 1
Gesucht sind s und t so dass sa + tb = ggT(a,b)
(Prüfung:
793 – 792 = 1)
a
b
q
r
s
t
61
36
1
25
13
-22
= -9 – 1 x 13
36
25
1
11
-9
13
= 4 – 1 x -9
25
11
2
3
4
-9
= -1 – 2 x 4
25:11 = 2 x 11 + 3
11
3
3
2
-1
4
= 1 – 3 x -1
11: 3 = 3 x 3 + 2
3
2
1
1
1
-1
=0–1x1
2
1
2
0
0
1
1
0
1
0
61:36 = 1 x 36 + 25
36:25 = 1 x 25 + 11
3:2 = 1 x 2 + 1
2: 1 = 2 x 1 + 0
ggT(61,36) = 1
s := tu
t := su - q x tu
Erweiterter Euklischer Algorithmus - Beweis Korrektheit
Gegeben sind a und b.
13 x 61 + -22 x 36 = 1
Gesucht sind s und t so dass sa + tb = ggT(a,b)
61:36 = 1 x 36 + 25
36:25 = 1 x 25 + 11
25:11 = 2 x 11 + 3
11: 3 = 3 x 3 + 2
3:2 = 1 x 2 + 1
(Prüfung:
793 – 792 = 1)
a
b
q
r
s
t
61
36
1
25
13
-22
= -9 – 1 x 13
36
25
1
11
-9
13
= 4 – 1 x -9
25
11
2
3
4
-9
= -1 – 2 x 4
11
3
3
2
-1
4
= 1 – 3 x -1
3
2
1
1
1
-1
=0–1x1
2
1
2
0
0
1
1
0
1
0
2: 1 = 2 x 1 + 0
ggT(61,36) = 1
s := tu
t := su - q x tu
Korrektheitsbeweis. Zu zeigen ist die Invariante sa + tb = ggT(a,b) für jede Zeile.
Induktions-Anfang: zweitunterste Zeile. Induktionsschluss:
sa + tb = tua + (su - qtu )b = tu(auq + bu) + (su - q tu )au = tuauq + tubu + suau- q tu au = tubu + suau = ggT(a,b)
Berechnung Multiplikatives Inverses modulo a
Gegeben ist a,b. Gesucht ist das Multiplikative Inverse i von b modulo a, d.h. b x i = 1 mod a
Beispiel mod 29: Gegeben 20, für welches i ist 20 x i = 1 mod 29?
Methode = Erw. Euklid. Alg.
9 x 29 + -13 x 20 = 1
a
b
q
r
s
t
29
20
1
9
9
-13
20
9
2
2
-4
9
9
2
4
1
1
-4
2
1
2
0
0
1
1
0
1
0
ggT(29,20) = 1
Wenn ggT(a,b) nicht = 1, dann gibt es das Mult. Inverse nicht!
(Prüfung: 261 – 260 = 1)
also -13 x 20 = 1 mod 29
d.h., modulo 29 ist -13 = 16
das Mult. Inverse von 20
(Prüfung:
16 x 20 = 320 = 11 x 29 + 1)
Inverses steht rechts oben
in der Tabelle
Also -13 = 16 mod 29
Potenzieren
Dividieren in Zn geht also auch. Die Berechnung ist gewöhnungsbedürftig, aber für
einen Computer aber kein Problem, auch nicht von der Rechenzeit her.
Was ist mit Potenzieren? 4383 mod n ist ein Zahl < n. Kann man das berechnen,
ohne 83 mal zu multiplizieren?
Beobachtung:
432 braucht 1 Multiplikation
c d
4
2 2
Potenzgesetz:
(a
) = ac*d
43 = (43 ) braucht 2 Multiplikationen,
438 = (434)2 braucht nur 3 Multiplikationen,
etc.
z.B. 4364 = (432)2)2 )2)2)2 braucht nur 6 Multiplikationen mod n
Daraus ergibt sich der folgende Algorithmus. Um ab mod n zu berechnen, berechne a2
k
mod n, a4 mod n, a8 mod n, …, bis zum ersten a2 mod n, so dass 2k+1 größer ist als b.
Stelle b als Summe von 2-er Potenzen dar, und multipliziere dann die entsprechenden
Potenzen miteinander.
Potenzgesetz: ac+d = ac * ad
6
4
1
0
Beispiel: 83 = 2 + 2 + 2 + 2
6
4
1
0
Also ist a83 mod n = a2 * a2 * a2 * a2 mod n
Square and Multiply
Wenn man b binär gegeben hat, nennt sich die folgende Variante des vorigen Algorithmus
“Square-and-Multiply” (SaM)
Beispiel b=83: ab = a83 = a1010011 mod n
initialize
square
x := a mod n
1010011
x := x2 mod n
1010011
x := x2 * a mod n
square and multiply
x := x2 mod n
x := x2 mod n
1010011
1010011
1010011
x := x2 * a mod n
1010011
square and multiply
x := x2 * a mod n
1010011
square and multiply
83
Es gilt dann: x = a = a
1010011
mod n
square
square
Wenn eine 1 kommt
Dahinter steckt: Sei v die Binärdarstellung
einer Zahl. Dann ist
av0 = (av)2 und av1 = (av)2 * a
Zusammenfassung
Rechnen in Zn
Addition, Subtraktion, und Multiplikation sind in Zn genau wie in Z, es
bleibt jeweils nur die mod Operation zu berechnen.
Division in Zn ist die Multiplikation mit dem multiplikativen Inversen (falls
existent). Der Algorithmus zur Berechnung des multiplikativen Inversen ist der
Erweiterte Euklid ggT Algorithmus (ist schnell).
Potenzieren ab in Zn geht mit Square-and-Multiply.
Herunterladen