Kapitel 2: Zahlentheoretische Algorithmen Gliederung 1 - fbi.h

Werbung
Kapitel 2: Zahlentheoretische Algorithmen
Gliederung
1.
2.
3.
4.
5.
6.
7.
8.
9.
2/3, Folie 1
Grundlagen
Zahlentheoretische Algorithmen
Sortierverfahren
Ausgewählte Datenstrukturen
Dynamisches Programmieren
Graphalgorithmen
String-Matching
Kombinatorische Algorithmen
Lineare Programmierung
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Gliederung des Abschnitts Algorithmische Fragestellungen
 Fahrplan
•
•
•
einfache algorithmische Fragestellung
Berechnung von modularen Potenzen
der größte gemeinsame Teiler und die Berechnung von modularen
Inversen
... das ist das aus Sicht der Vorlesung wichtige Unterkapitel
... wir diskutieren nur solche algorithmische Fragestellungen
die im Zusammenhang mit dem Kryptosystem von Rabin eine
wichtige Rolle spielen
2/3, Folie 2
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Einfache algorithmische Fragestellungen
 Aufgabenstellungen
•
es seien a und b ganze Zahlen
•
•
•
bestimme das Produkt von a und b
bestimme den Rest von a bei Teilung durch b
bestimme die Binärdarstellung der Zahl b
... uns interessieren Algorithmen zur Lösung dieser Aufgaben
und deren Komplexität (/* Anzahl der Elementaroperationen in
Abhängigkeit von der Länge der Dezimaldarstellung der
gegebenen Zahlen */)
2/3, Folie 3
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Einfache algorithmische Fragestellungen
 Bestimmung des Produkts von a und b
7641 * 8512
61128000
3820500
76410
15282
... wir wissen bereits, daß die Multiplikation von
a und b nach der Schulmethode im „worst
case“ die Komplexität O(n2) hat, wobei n das
Maximum der Länge von a und b ist
61128000
3820500
91692
61128000
3912192
65040192
2/3, Folie 4
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Einfache algorithmische Fragestellungen
 Bestimmung des Restes bei Teilung von a durch b
... es wird a gemäß der Schulmethode durch b geteilt (/* den zu
zu bestimmenden Rest erhält man quasi nebenbei */)
17915 : 43
... die Division von a durch b nach der Schulmethode hat dieselbe Komplexität wie die
Multiplikation nach der Schulmethode
17
0
179
172
... das Bestimmen des Rests von a bei Teilung
durch b gemäß Schulmethode hat im „worst
case“ die Komplexität O(n2) hat, wobei n das
Maximum der Länge von a und b ist
71
43
285
258
27 (/* = 17915 mod 43 */)
2/3, Folie 5
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Einfache algorithmische Fragestellungen
 Bestimmung der Binärdarstellung einer Zahl a
... es wird a wird sukzessive halbiert, wobei die Stellen nach dem
Komma abgeschnitten werden (/* die zu bestimmende Binärdarstellung von a erhält man quasi nebenbei */)
7641 (/* = a /)
3820
1910
955
477
238
119
59
29
14
7
3
1
2/3, Folie 6
... man benötigt im „worst case“ nicht mehr als
4*n Divisionen durch 2, wobei n die Länge von
a ist
... das Bestimmen der Binärdarstellung von a
hat im „worst case“ die Komplexität O(n2),
wobei n die Länge von a ist
bin(a) = 1110111011001
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Einordnung
 Zur Erinnerung
•
bei der Verwendung des Kryptosystems von Rabin hat offenbar der
Empfänger der verschlüsselten Nachricht (/* Charly B. */) die mit
Abstand komplexeren Berechnungen durchzuführen (/* Lucie muß
nur die Zahl k mit k ≡ m2 mod pq bestimmen, was einfach ist */)
 Entschlüsselung (/* Schritt 1 */)
•
2/3, Folie 7
Charly B. bestimmt zunächst natürliche Zahlen mp < p und mq < q mit
mp ≡ k(p+1)/4 mod p und mq ≡ k(q+1)/4 mod q
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Bestimmung modularer Potenzen
 Aufgabenstellung
•
•
es seien x, y und z natürliche Zahlen
bestimme r = xy mod z
•
es sei n das Maximum der Länge von x, y und z
... wir wollen r bestimmen und interessieren uns für die „worst case“
Komplexität des verwendeten Algorithmus in Abhängigkeit von n
2/3, Folie 8
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Bestimmung modularer Potenzen
 Naive Herangehensweise (/* Beispiel + ganz grobe Analyse */)
•
es seien x = 7, y = 11 und z = 23
•
•
berechne r‘ = 7*7*7*7*7*7*7*7*7*7*7 (/* r‘ = 1977326743 */)
berechne r mit r = r‘ mod 23 (/* r = 22 */)
... zur Berechnung von r‘ benötigt man 10 Multiplikationen
... Allgemein: wenn y die Länge n hat, dann benötigt man mindestens
10n-1 viele Multiplikationen um r‘ zu bestimmen
... die naive Herangehensweise hat im „worst case“ die Komplexität
Ω(10n) und ist offenbar hoffnungslos langsam
2/3, Folie 9
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Bestimmung modularer Potenzen
 Andere Herangehensweise (/* Beispiel */)
•
es seien x = 7, y = 11 und z = 23
•
berechne bin(y) = 1011
•
•
•
•
berechne r0 = 7 mod 23 (/* = 71 mod 23; also r0 = 7 */)
berechne r1 = r0*r0 mod 23 (/* = 72 mod 23; also r1 = 3 */)
berechne r2 = r1*r1 mod 23 (/* = 74 mod 23; also r2 = 9 */)
berechne r3 = r2*r2 mod 23 (/* = 78 mod 23; also r3 = 12 */)
•
•
setze r‘0 = r0, r‘1 = r1, r‘2 = 1 und r‘3 = r3
berechne r = r‘0*r‘1*r‘2*r‘3 mod 23 (/* r = 2*/)
... zur Berechnung von r benötigt man 6 Multiplikationen sowie
7 Berechnungen von Resten bei Teilung durch 23 (/* man
berechnet r‘‘1 = r‘0*r‘1 mod 23, dann r‘‘2= r‘‘1*r‘2 mod 23 und
am Ende r = r‘‘3*r‘4 mod 23 */)
2/3, Folie 10
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Bestimmung modularer Potenzen
 Andere Herangehensweise (/* Beispiel, Begründung */)
•
es seien x = 7, y = 11 und z = 23
•
da bin(y) = 1011 ist, gilt y = 1*20+1*21+ 0*22 + 1*23 = 1 + 2 + 0 + 8
•
also gilt:
711 = 7(1+2+8) = 71*72*70*78
•
also gilt:
711 ≡ 71*72*70*78 mod 23 ≡ (((71*72)* 70)*78) mod 23
... alle diese Multiplikationen werden gleich modulo 23 ausgeführt, da
somit die Zwischenergebnisse nicht „zu groß“ werden
2/3, Folie 11
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Bestimmung modularer Potenzen
 Andere Herangehensweise (/* allgemeine Vorgehensweise */)
•
•
2/3, Folie 12
es seien x, y, z natürliche Zahlen
es sei n das Maximum der Länge von x, y und z
1.
berechne bin(y) = xk,...,x1,x0
2.
berechne
•
r0 = a mod z
•
r1 = r0*r0 mod z
...
•
rk = rk-1* rk-1 mod z
(/* = a1 mod z */)
(/* = a2 mod z */)
(/* = a2k mod z */)
3.
für i = 0, ...,k setze r‘i = ri, falls xi = 1, und r‘i = 1, sonst
4.
berechne r = r‘0*r‘1*...*r‘k mod z (/* schrittweise */)
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Methode des
fortgesetzten
Quadrierens
Kapitel 2: Zahlentheoretische Algorithmen
Bestimmung modularer Potenzen
 Andere Herangehensweise (/* Analyse */)
•
•
es seien x, y, z natürliche Zahlen
es sei n das Maximum der Länge von x, y und z
... Schritt 1 hat im „worst case“ die Komplexität O(n2)
... Schritt 2 hat im „worst case“ die Komplexität O(n3) (/* die Länge
der Binärdarstellung von y hat höchstens die Länge 4n */)
... Schritt 3 hat „worst case“ die Komplexität O(n)
... Schritt 4 hat „worst case“ die Komplexität O(n3)
... unter Verwendung der Methode des fortgesetzten Quadrierens
erhält man Verfahren zum Bestimmen der modularen Potenzen,
die im „worst case“ die Komplexität O(n3) hat
2/3, Folie 13
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Einordnung
 Entschlüsselung (/* Schritt 2 */)
•
•
Charly B. bestimmt ganze Zahlen zp und zq mit zpp + zqq = 1
Charly B. bestimmt die natürlichen Zahlen s1,t1 < pq mit
s1 ≡ (zpp*mq + zqq*mp) mod pq und t1 ≡ (zpp*mq - zqq*mp) mod pq
sowie die Zahlen s2 = pq - s1 und t2 = pq - t1
... die Bestimmung der Zahlen zp und zq müssen wir uns
genauer ansehen
... s1, t1, s2 und t2 zu bestimmen, ist wiederum einfach
2/3, Folie 14
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Einordnung
 Eine einfache Beobachtung
•
•
es seien p und q Primzahlen
es sei zp und zq ganze Zahlen mit zpp + zqq = 1
es gilt offenbar:
zpp ≡ 1 mod q und zqq ≡ 1 mod p
... zp ist die multiplikative Inverse von p modulo q
... zq ist die multiplikative Inverse von q modulo p
... mit Hilfe einer Erweiterung des Euklidschen Algorithmus
zum Bestimmen des größten gemeinsamen Teilers zweier
Zahlen p und q kann man die gesuchten multiplikativen
Inversen „schnell“ bestimmen
2/3, Folie 15
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Vorüberlegung
 Zentraler Begriff: Größter gemeinsamer Teiler
•
•
•
es seien a, b und c ganze Zahlen
c ist ein gemeinsamer Teiler von a und b, falls c sowohl a als auch b teilt
c ist der größte gemeinsame Teiler von a und b, wenn es kein c‘ > c gibt,
welches ebenfalls gemeinsamer Teiler von a und b ist
... wir bezeichnen ggT(a,b) den größten gemeinsamen Teiler
von a und b
 Einige einfache Eigenschaften
•
für alle a, b und n gilt:
•
•
2/3, Folie 16
ggT(a,b) = ggT(b,a) = ggT(a,|b|)
ggT(a,0) = ggT(a,n*a) = |a|
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Vorüberlegung
 Eine wichtige Eigenschaft
•
es seien a und b ganze Zahlen
•
Dann gilt:
ggT(a,b) = ggT(b,r) mit r = a mod b
... zum Beweis dieser Eigenschaft genügt es zu zeigen, daß für
jede Zahl t gilt: t ist gemeinsamer Teiler von a und b ist gdw. t ist
gemeinsamer Teiler von b und r
Begründung:
a = xt, b = yt und r = a mod b
b = xt und r = yt
2/3, Folie 17
© 2013 Prof. Steffen Lange
-
HDa/FbI
xt = cyt + r und damit r = (x - cy)*t
a = cxt + yt und damit a = (cx + y)*t
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Vorüberlegung
 Der Euklidsche Algorithmus
•
es seien a und b ganze Zahlen
Prozedur Euklid ( a,b ) {
if ( b == 0 ) return(a);
else {
r = a mod b; return(Euklid(b,r));
}
}
Beispiel: a = 27, b = 33
2/3, Folie 18
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Euklid(27,33) = Euklid(33,27)
= Euklid(27,6)
= Euklid(6,3)
= Euklid(3,0)
=3
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Vorüberlegung
 Der Euklidsche Algorithmus (/* Analyse */)
•
es seien a und b ganze Zahlen mit a > b und n das Maximum der Länge
der Zahlen a und b
•
offenbar hat jede Ausführung des else-Zweigs die Komplexität O(n2)
Offene Frage: Wie oft wird die Prozedur Euklid(.,.) aufgerufen?
•
es seien (a0,b0),(a1,b1), (a2,b2) die Parameter, die bei den ersten drei
Aufrufen der Procedure Euklid(.,.) übergeben werden
•
offenbar gilt:
•
•
•
a = a0 > b = b0 = a1 > b1 = a2 > b2
a0 = c0b0 + b1 mit c0 ≥ 1 und a1 = c1b1 + b2 mit c1 ≥ 1
also gilt: b0 = a1 = c1b1 + b2 mit c1 ≥ 1
also gilt b0 ≥ b1 + b2 > 2b2
2/3, Folie 19
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Vorüberlegung
 Der Euklidsche Algorithmus (/* Analyse, cont */)
•
es seien (a0,b0),(a1,b1), ..., (ak,bk) die Parameter, die bei den Aufrufen der
Prozedur Euklid(.,.) übergeben werden
•
analog (/* zu ersten drei Aufrufen */) kann man ganz allgemein zeigen, daß
gilt:
b2 > 2b4 und b4 > 2b6 und und b6 > 2b8 ...
•
folglich halbiert sich bei jedem zweiten Aufruf der Prozedur Euklid(.,.) der
Wert des zweiten Übergabeparameters
da die Prozedur Euklid(.,.) nur aufgerufen wird, wenn der zweite Übergabeparameter ungleich 0 ist, gibt es höchstens O(log(b)) viele Prozeduraufrufe
•
... folglich gibt es nur O(n) viele Prozeduraufrufe (/* es gilt log(b) ≤ 4n */)
und demzufolge hat die Prozedur Euklid(.,.) im „worst case“ die
Komplexität O(n3)
2/3, Folie 20
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Vorüberlegung
 Ein anderer Blick auf den größten gemeinsamen Teiler
•
es seien a und b ganze Zahlen und es sei n = ggT(a,b)
•
Dann gilt:
ggT(a,b) = min ( { s ≥ 1 | s ∈ L } ) mit L = { xa+yb | x,y ∈ Z }
... also läßt sich n als Linearkombination von a und b darstellen
•
es seien s ≥ 1 das minimal Element in L und x und y so gewählt, daß
s = ax + yb gilt
Teil 1: man kann zeigen, daß ggT(a,b) auch ein Teiler von s ist
... also gilt ggT(a,b) ≤ s
Teil 2: man kann zeigen, daß s sowohl ein Teiler von a als auch von b ist
... also gilt s ≤ ggT(a,b)
2/3, Folie 21
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Vorüberlegung
 Der Berlekampsche Algorithmus
•
es seien a und b ganze Zahlen
Prozedur Berlekamp ( a,b ) {
if ( b == 0 ) return(a,1,0);
else {
r = a mod b;
(d,x‘,y‘) := Berlekamp(b,r);
x = y‘;
y = x‘ - (a Div b)*y‘;
return((d,x,y)) }
}
... offenbar gilt d = ggT(a,b)
2/3, Folie 22
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Vorüberlegung
 Der Berlekampsche Algorithmus (/* Beispiel */)
•
a = 27, b = 33
Berlekamp(27,33) = ( , , )
Berlekamp(33,27) = ( , , )
Berlekamp(27,6) = ( , , )
Berlekamp(6,3) = ( , , )
Berlekamp(3,0) = ( 3,1,0 )
2/3, Folie 23
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Vorüberlegung
 Der Berlekampsche Algorithmus (/* Beispiel, cont */)
•
a = 27, b = 33
Berlekamp(27,33) = ( 3,5,-4 )
Berlekamp(33,27) = ( 3,-4,5 )
Berlekamp(27,6) = ( 3,1,-4 )
Berlekamp(6,3) = ( 3,0,1 )
Berlekamp(3,0) = ( 3,1,0 )
2/3, Folie 24
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Vorüberlegung
 Der Berlekampsche Algorithmus (/* Analyse */)
•
es seien a und b ganze Zahlen mit a > b und n das Maximum der Länge
der Zahlen a und b
... die Prozedur Berlekamp(.,.) hat offenbar im „worst case“ dieselbe
Komplexität wie die Prozedur Euklid(.,.); also ebenfalls O(n3)
•
die Korrektheit beweist man induktiv
... wenn Berlekamp(a,b) = (d,x,y) gilt, so soll sowohl d = ggT(a,b) als
auch x*a + y*b = ggT(a,b) gelten
... das d = ggT(a,b) gilt ist uns schon klar
2/3, Folie 25
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Vorüberlegung
 Illustration (/* Korrektheit */)
Berlekamp(27,33) = ( 3,5,-4 )
3 = 5*27 + (-4)*33
Berlekamp(33,27) = ( 3,-4,5 )
3 = (-4)*33 + 5*27
Berlekamp(27,6) = ( 3,1,-4 )
3 = 1*27 + (-4)*6
Berlekamp(6,3) = ( 3,0,1 )
Berlekamp(3,0) = ( 3,1,0 )
2/3, Folie 26
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
3 = 0*6 + 1*3
3 = 1*3 + 0*0
Kapitel 2: Zahlentheoretische Algorithmen
Vorüberlegung
 Der Berlekampsche Algorithmus (/* Korrektheit */)
•
es seien (a0,b0),(a1,b1), ..., (ak,bk) die Parameter, die bei den Aufrufen der
Prozedur Berlekamp(.,.) übergeben werden
•
da bk = 0 und Berlekamp(ak,bk) = (ak,1,0) gilt, folgt ak = 1*ak + 0*bk
•
•
es sei Berlekamp(ai+1,bi+1) = (ak,x‘,y‘) und ak = x‘*ai+1 + y‘*bi+1 (/* IV */)
außerdem gilt ai+1 = bi und bi+1 = r mit r = ai mod bi
•
•
es sei Berlekamp(ai,bi) = (ak,x,y) mit x = y‘ und y = x‘ - (ai div bi)*y‘
es ist zu zeigen, daß x*ai + y*bi = ak gilt (/* IB */)
x*ai + y*bi =
=
=
=
=
2/3, Folie 27
© 2013 Prof. Steffen Lange
-
HDa/FbI
y‘*ai + (x‘ - (ai div bi)*y‘)*bi
y‘*ai + x‘*bi - (ai div bi)*y‘)*bi
x‘*bi + y‘*(ai - (ai div bi)*bi)
x‘*bi + y‘*r
x‘*ai+1 + y‘*bi+1 = ak
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Bestimmung multiplikativer Inverser
 Einordnung
•
•
es seien p und q Primzahlen
es sei zp und zq ganze Zahlen mit zpp + zqq = 1
•
um zp und zq (/* die gesuchten multiplikativen Inversen */) zu bestimmen,
genügt es die Prozedur Berlekamp(.,.) mit den Parametern a = p und b = q
aufzurufen
als Ergebnis erhält man ganze Zahlen x und y, so daß xa + by = ggT(a,b)
gilt
da p und q Primzahlen sind gilt ggT(a,b) = 1
demnach gilt zp = x und zq = y
•
•
•
2/3, Folie 28
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 2: Zahlentheoretische Algorithmen
Fazit
 Komplexität der Entschlüsselung beim Kryptosystem von Rabin
•
•
die „zentralen“ Schritte (/* Schritt 1 und Schritt 2 */) haben jeweils im
„worst case“ die Komplexität O(n3)
alle anderen Schritte haben im „worst case“ die Komplexität O(n2)
... also kann Charly B. die verschlüsselte Nachricht in moderater
Zeit, d.h. im „worst case“ in Zeit O(n3) entschlüsseln
2/3, Folie 29
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Herunterladen