Algorithmische Zahlentheorie und Public Key

Werbung
Algorithmische Zahlentheorie und Public Key
Kryptographie (Forster)
Mitgeschrieben von Bernhard Weiß
Mitschrift aus dem SoSe 2009
1
INHALTSVERZEICHNIS
I
Inhaltsverzeichnis
1 Fibonacci-Zahlen
1.1 Schneller Algorithmus zur Berechnung der Fibonacci Zahlen . . . . .
1
1
2 Der Euklidische Algorithmus
3
Inhaltsverzeichnis
1
1
Fibonacci-Zahlen
Definition 1
Die Fibonacci-Zahlen werden rekursiv definiert durch:
fib(0) := 0 fib(1) := 1
fib(n + 2) := fib(n + 1) + fib(n)
fib(n) 0 1 1 2 3 5 8 13 21 34
n
0 1 2 3 4 5 6 7 8 9
Matrix Schreibweise:
fib(n + 1)
1 1
fib(n)
=
fib(n)
1 0
fib(n − 1)
1 1
A :=
1 0
fib(n + 1)
n fib(1)
=A
fib(n)
fib(0) fib(n)
fib(0)
= An
wobei fib(−1) = 1
fib(n − 1)
fib(−1)
fib(1) fib(0)
=E
fib(0) fib(−1)
Satz 1
Es gilt:
n
fib(n + 1)
fib(n)
1 1
n
=A =
fib(n)
fib(n − 1)
1 0
Korollar 2
fn+1 fn−1 − fn2 = (−1)n
Insbesondere sind fn+1 , fn teilerfremd.
gcd(fn+1 , fn ) = 1
1.1
Schneller Algorithmus zur Berechnung der Fibonacci Zahlen
Satz 3
Sei G eine Halbgruppe mit Einselement (multiplikativ geschrieben)
Sei nPeine natürliche Zahl mit Binär Darstellung
n = di=0 bi 2i , bi ∈ {0, 1}, bd = 1
abgekürzt:
n = (bd , . . . b0 )2
Für ein Element x ∈ G kann die Potenz xn mit hächstens 2d Multiplikationen in G
Bemerkung 1
Das Naive Ferfahren zur berechnung von xn benötigt n − 1 Multiplikationen.
Exponentielle Komplexität in Anzahl von Stellen von n.
Das Schnelle Verfahren hat Lineare Komplexität
2
1 FIBONACCI-ZAHLEN
Beweis nk := (bd , . . . , bd−k )2
n0 = 1; nd = n
Wir berechnen
der Reihe nach xni
(
2nk
falls bd−k−1 = 0
nk+1 =
2nk + 1 falls bd−k−1 = 1
Sei xi := xni
Dann ist(x0 = x
falls bd−k−1 = 0
x2k
xk+1 =
2
xk · x falls bd−k−1 = 1
Daraus folgt Behauptung.
Explizite Formel für die Fibonacci Zahlen
Ansatz zur Lösung der Rekursionsgleichung:
fn+2 = fn+1 + fn
Ansatz: fn = λn ( λ geeignet)
⇔λ2 = λ +q
1 ⇔λ2 − λ − 1 = 0
√
1 2
1
λ1/2 = 21 ±
+
1
=
(1
±
5)
2
2
Jede Linearkombination xn = c1 λn1 +c2 λn2 Ergibt eine Lösung der Rekursiongleichung.
Wähle c1 und c2 so dass die Anfangsbedinungen x0 = 0, x1 = 1 erfüllt sind.
n
n
Dann gilt fib(n)
√ = c1 λ1 + c2 λ2 ∀n ≥ 0
1
λ1 = 2 (1 + 5) =: g Goldener Schnitt
λ2 = − g1 = 1 − g
Es ergibt sich:
n
)
fib(n) = √15 (g n − (−1)
gn
Es folgt:
gn
fib(n) = round( √
)
5
Satz 4
1. fib(2n − 1) = fib(n)2 + fib(n − 1)2
2. fib(2n) = fib(n)2 + 2 fib(n) fib(n − 1)
fn+1 fn
1 1
n
Beweis
= A ,A =
fn fn−1
1 0
2n
n n
Aus
A
=
A
A
folg
f2n+1 f2n
fn+1 fn
fn+1 fn
=
f2n f2n−1
fn fn−1
fn fn−1
⇒f2n = fn fn+1 + fn−1 fn ⇒ fn f (fn + fn−1 )fn−1 fn
2
f2n−1 = fn2 + fn−1
3
2
Der Euklidische Algorithmus
Definition 2
Für ganze Zahlen x, y definiert man:
x|y∃q ∈ Z : x = qy
Bemerkung 2
1. y|0∀y ∈ Z
2. 0|x ⇔ x = 0
3. z|y&y|x ⇒ z|x
4. y|x&x|y ⇔ x = ±y
In diesem heißen x, y assoziiert
Beweis „⇐„: Trivial
„⇒„:
Falls x = 0 folgt mit 2., dass y = 0 (y = 0 ⇒ x = 0 analog)
Sei also nun x 6= 0 6= y
y|x ⇒ x = q2 y
x|y ⇒ y = q1 x
⇒x = q2 q1 x
q1 ,q2 ∈Z
Mit Kürzungssatz: 1 = q2 q1 =⇒ q1 = q2 = ±1
5. y|x1 & y|x2 ⇒ y|(λ1 x1 + λ2 x2 ) ∀λ1 , λ2 ∈ Z
6. y|1 ⇔ y = ±1
7. 1|x∀x ∈ Z
Definition 3 (Größter gemeinsamer Teiler)
Eine ganze Zahl d heißt größter gemeinsamer Teiler der ganzen Zahlen x, y ⇔
1. d|x&d|y (gemeinsamer Teiler)
2. ∀d0 gemeinsamer Teiler von x, y ⇒d0 |d
Bezeichnung: gcd(x, y)
meistens wird er nichtnegative Repräsentatn gewählt.
Satz 5
Der größte gemeinsame Teiler zweier ganzer Zahlen ist (im Falle der existenz) bis
aufs Vorzeichen Eindeutig bestimmt.
Beweis Sind d1 , d2 zwei gcd so folgt aus definition:
d1 |d2 &d2 |d1 ⇒d1 = ±d2
4
2 DER EUKLIDISCHE ALGORITHMUS
Bemerkung 3
gcd(x, y) = gcd(y, x)
gcd(x, 0) = |x|
gcd(x, 1) = 1
gcd(x, x) = |x|
Definition 4
Für ganze Zahlen x, y bezeichne:
T (x, y)
die Menge aller gemeinsamer Teiler von x und y
Lemma 1
Seien x, y, λ ∈ Z
Dann gilt:
T (x, y) = T (x − λy, y)
Satz 6
Je zwei ganze Zahlen x, y esitzen einen größten gmeinsamen Teiler. Dieser Kann
durch den nachfolgenden Algorithmus berechnet werden.
Beweis ObdA x 6= 0, y 6= 0, x > 0, y > 0
x0 := x, x1 := y
Sukzessive Teilung mit Rest, bis der Rest null wird.
x0 = q1 x1 + x2 0 < x2 < x1
x1 = q2 x2 + x3 0 < x3 < x2
..
.
xk−2 = qk−1 xk−1 + xk 0 < xk < xk−1
xk−1 = qk xk + 0
Das Verfahren bricht nach endlich vielen Schritten ab.
Behauptung: xk ist gcd von x1 und x2
Beweis (der Behauptung) Aus dem Hilfssatz folgt:
T (x0 , x1 ) = T (x2 , x1 ) = T (x3 , x2 ) = . . . = T (0, xk )
⇒Behauptung
Bemerkung 4 (zur Komplexität des Eukl. Algor.)
Worst case:
Bestimmung des gcd zweier aufeinandererfolgender Fibonaccizahlen.:
fn+1 = fn + fn−1
fn = fn−1 + fn−2
..
.
f2 = f1 + f0
|{z}
=0
Inbesondere: gcd(fn+1 , fn ) = 1
Da die Fibonacci-Zahlen exponentiell mit dem Index wachsen, folgt:
5
n = O(log fn )
Also gilt für den Euklidischen Alg.:
Für die Anzahl der Schritte k gilt:
k = O(log |y|)
Die Anzahl der Nötigen Schritte wird durch eine Lineare Funktion der Stellenzahl
von min(|x|, |y|) nach oben abgeschätzt.
⇒Lineare Komplexität
Satz 7 (Satz von Bézout)
Seien x, y ∈ Z und d = gcd(x, y)
⇒∃λ, µ ∈ Z :
d = λx + µy
Korollar 8
Zwei ganze Zahlen x, y sind genau dann teilerfremd (d.h. gcd(x, y) = 1)
⇔∃λ, µ ∈ Z : 1 = λx + µy
Beweis (Satz von Bézout) Mittels Erweiterten Euklidischen Algor.
x0 = q 1 x1 + x2
..
.
xi−1 = qi xi + xi+1
xi = xi+1 xi+1 + xi+2
..
.
Wir zeigen Induktiv, dass sich alle xi als ganzzahlige Linearkombination
xi = λi x0 + µi x1
schreiben Lassen.
Induktionsanfang: x0 = 1x0 + 0x1
x1 = 0x0 + 1x1
Induktionsschritt: xi−1 = λi−1 x0 + µi−1 x1
xi = λi x0 + µi x1
Aber xi+1 = xi−1 − qi xi
(λi+1 , µi+1 ) = (λi−1 , µi−1 ) − qi · (λi , µi )
Herunterladen