Diskrete Strukturen (WS 2009/10)

Werbung
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
3: Zahlentheorie / Primzahlen
3: Zahlentheorie / Primzahlen
– 96 –
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
– 97 –
Definition 37 (Teiler, Vielfache, Primzahlen,
zusammengesetzte Zahlen)
Seien a, b ∈ N. a ist ein Teiler von b (“a|b”), falls es ein k ∈ N
gibt mit a ∗ k = b. Die trivialen Teiler von b sind 1 und b.
Ist a ein Teiler von b, dann ist b ein Vielfaches von a.
X ∈ N heisst Primzahl, wenn X durch genau zwei natürliche
Zahlen teilbar ist, nämlich die trivialen Teiler.
Die Zahl X ∈ N heist zusammengesetzt, wenn X durch mehr als
zwei natürliche Zahlen teilbar ist.
Die 1 ist keine Primzahl.
Für alle a, b, c ∈ N gilt:
I
I
a|b ⇒ a|bc.
Transitivität: a|b und b|c ⇒ a|c.
3: Zahlentheorie / Primzahlen
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
3.1: Wichtige Ergebnisse der
Zahlentheorie
Chinesischer Restsatz (ohne Beweis)
Seien
m1 , . . . , mk : paarweise teilerfremde natürliche Zahlen,
m = m1 ∗ · · · ∗ mk und
a1 , . . . ak : ganze Zahlen.
Für 1 ≤ i ≤ k gelte Mi = m/mi und yi = Mi−1 mod mi .
Dann gilt für
!
X
x≡
ai yi Mi mod m :
1≤i≤k
x ≡ a1 mod m1 , x ≡ a2 mod m2 , . . . , und x ≡ ak mod mk .
3: Zahlentheorie / Primzahlen
3.1: Wichtige Ergebnisse der Zahlentheorie
– 98 –
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
– 99 –
Folgerung 38 (Fingerabdrucksatz)
Seien p, q teilerfremd, xp ∈ Zp , xq ∈ Zq . Dann gibt es genau ein
x ∈ Zpq mit
x ≡ xp (mod p)
und
x ≡ xq (mod q).
(Folgt aus dem Chinesischen Restsatz)
Satz 39 (Kleiner Satz von Fermat)
Sind p eine Primzahl und a eine natürliche Zahl, dann gilt
ap ≡ a (mod p).
Ist p kein Teiler von a, gilt insbesondere
ap−1 ≡ 1 (mod p).
3: Zahlentheorie / Primzahlen
3.1: Wichtige Ergebnisse der Zahlentheorie
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
3.2: Anwendung: RSA
(Public-Key Kryptographie und
Digitale Unterschriften)
I
I
I
I
Briefkasten
Schaufenster
Schloss mit zwei Schlüsseln
In der modernen Kryptographie:
I
Erzeuge Gesamt-Schlüssel, bestehend aus
I
I
I
Verschicken einer vertraulichen Nachricht:
I
I
I
einem öffentlichen und
einem geheimen Schlüssel(-teil)
öffentliche Operation zum Verschlüsseln
geheime Operation zum Entschlüsseln
Digitales Unterschreiben einer Nachricht:
I
I
geheime Operation zum Erzeugen einer Signatur
öffentliche Operation zum Verifizieren der Signatur
3: Zahlentheorie / Primzahlen
3.2: Anwendung: RSA
– 100 –
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
PK Kryptographie (Geschichte)
ca. 1971 Ein Mitarbeiter des britischen Geheimdienstes
erfindet die “non-secret” Kryptographie
(wurde bis Ende der 90-er Jahre geheim gehalten)
1974 „Merkle Puzzles“
1976 Diffie und Hellman
1977 Rivest, Shamir,
Adleman (RSA)
seit ≈ 1990 zunehmende
kommerzielle
Bedeutung der
asymmetrischen
Kryptographie
3: Zahlentheorie / Primzahlen
3.2: Anwendung: RSA
– 101 –
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
Das RSA Kryptosystem
I
Schlüsselerzeugung:
1. Wähle zufällig große Primzahlen p und q;
2. berechne n = pq und ϕ(n) = (p − 1)(q − 1);
3. wähle e ∈ Z∗ϕ(n) , d.h., ggT(e, ϕ(n)) = 1; berechne d mit
ed ≡ 1 mod ϕ(n);
4. Schlüssel: Tripel (e, d, n); davon öffentlich: (e, n).
I
Öffentliche Operation E (“encrypt”):
(Z.B. Verschlüsseln einer Nachricht: x ∈ Zn )
E(e,n) (x) = xe mod n.
I
Geheime Operation D (“decrypt”):
D(e,d,n) (y) = yd mod n
3: Zahlentheorie / Primzahlen
3.2: Anwendung: RSA
– 102 –
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
Ein Beispiel in kleinen Zahlen
I
I
I
I
I
Wir wählen p = 13, q = 11 und berechnen n = pq = 143.
Es ist ϕ(n) = (p − 1)(q − 1) = 120.
Wir wählen e = 7; insbesondere: ggT(7, 120) = 1.
Für d = 103 gilt: ed = 721 = 6 ∗ 120 + 1 ≡ 1 mod 120.
(Man kann d mit Hilfe des Erweiterten Euklidischen
Algorithmus berechnen.)
Verschlüsseln des Klartextes 5:
E(5) ≡ 57 ≡ 78127 ≡ 47 mod 143.
I
Entschlüsseln von 47:
D(47) ≡ 47103 ≡ 5 mod 143.
3: Zahlentheorie / Primzahlen
3.2: Anwendung: RSA
– 103 –
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
– 104 –
Die Korrektheit des RSA Kryptosystems
I
I
Wenn ich eine Nachricht verschlüssele und dann wieder
entschlüssele, erwarte ich, dass ich wieder die gleiche
Nachricht erhalte.
Signieren analog: Sei S = D(M) die Unterschrift unter eine
Nachricht M. Wir verifizieren eine unterschriebene
Nachricht (M, S), indem wir E(S) = M überprüfen.
Satz 40 (Korrektheit von RSA)
Für alle x ∈ Zn gilt: D(e,d,n) (E(e,n) (x)) = x und
E(e,n) (D(e,d,n) (x)) = x.
(Mit Hilfe des kleinen Satzes von Fermat.)
3: Zahlentheorie / Primzahlen
3.2: Anwendung: RSA
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
– 105 –
Effizienz und Sicherheit von RSA
Sicherheit: Man kennt keinen effizienten Algorithmus, um
geeignet gewählte große zusammengesetzte
Zahlen zu faktorisieren.
Effizienz: Man kennt effiziente Algorithmen, um zufällig große
Primzahlen zu erzeugen.
3: Zahlentheorie / Primzahlen
3.2: Anwendung: RSA
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
– 106 –
3.3: Faktorisieren & Primzahlen finden
Primzahl testen: Gegeben eine Zahl n.
Ist n prim?
Primzahlen finden: Gegeben Werte a und B mit a < B − 1.
Finde eine zufällige Primzahl p mit p ≥ a und p < B.
(Typisch: a = 2n , B = 2a = 2n+1 .)
Faktorisieren: Gegeben eine Zahl n, die nicht prim ist.
Finde einen Teiler a|n, 1 < a < n.
Vollständiges Faktorisieren: Gegeben eine Zahl n.
Finde alle Primteiler von n.
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
– 107 –
Faktorisierung großer ganzer Zahlen
Das Faktorisieren großer ganzer Zahlen gilt als extrem
schwierig. Dies überrascht, da die Multiplikation und sogar der
Primzahltest vergleichsweise einfach sind.
Anekdote: Frank Cole widerlegt 1903 eine fast 200 Jahre alte
Vermutung von Mersenne:
Obwohl er die Sonntage dreier Jahre benötigte, um die Faktoren
von 267 − 1 zu finden, konnte er innerhalb weniger Minuten,
ohne weitere Worte darüber zu verlieren, ein großes Publikum
davon überzeugen, dass diese Zahl keine Primzahl war, indem
er einfach die Arithmetik der Berechnungen aufschrieb:
267 − 1 = 193707721 ∗ 761838257287.
Stand der Forschung: Ist n das Produkt zweier zufälliger
1000-bit Primzahlen, kennt man keinen Algorithmus, um n
innerhalb einiger Jahrhunderte zu faktorisieren.
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
Primzahlen finden
Aufgabe: Gegeben Werte a und B mit a < B − 1. Finde eine
zufällige Primzahl p mit p ≥ a und p < B.
(Typisch: a = 2n , B = 2a = 2n+1 .)
Lösung: Wiederhole:
1. wähle eine Zufallszahl z ∈ {a, . . . B − 1},
2. teste, ob z prim ist oder zusammengesetzt,
bis z eine Primzahl ist.
Gib z aus.
Frage: Wie effizient ist dieses Verfahren?
I Wie oft wird die Schleife durchlaufen?
(Häufigkeit der Primzahlen)
I Kann man effizient testen, ob z eine Primzahl
ist?
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
– 108 –
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
Wie viele Primzahlen gibt es?
Satz
Es gibt unendlich viele Primzahlen. (Haben wir bewiesen!)
Das reicht uns nicht! Wir wollen das genauer wissen!
Wir schreiben π(x) für die Anzahl der Primzahlen ≤ x.
Bsp.: π(1) = 0, π(3) = 2 = π(4) = 2, . . . , π(124) = 30.
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
– 109 –
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
Wie viele Primzahlen gibt es? (Genauer)
Satz 41 (Primzahlsatz (Ohne Beweis))
Sei π(x) die Anzahl Primzahlen ≤ x. Für alle x ≥ 17 gilt:
x
x
<π(x)<1.255006 ∗
.
ln x
ln x
Für Informatiker, die gerne zur Basis 2 logarithmieren, folgt
0.69 ∗
3: Zahlentheorie / Primzahlen
x
x
<π(x)<0.88 ∗
.
log2 x
log2 x
3.3: Faktorisieren & Primzahlen finden
– 110 –
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
– 111 –
Primzahlen testen
I
I
I
I
Schön, dass es “genug” Primzahlen gibt.
Aber wenn wir nicht effizient faktorisieren können, wie
können wir dann effizient feststellen, ob eine Zahl prim ist?
Es gibt effiziente probabilistische Primzahltests (z.B.
“Miller-Rabin”), die wir in dieser Vorlesung aber nicht
genauer analysieren werden.
Das Grundidee können wir aber einem “alten Bekannten”
abschauen, dem kleinen Satz von Fermat.
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
– 112 –
Primzahl-Test mit dem Kleinen Fermat
Fermat-Zeugen und Lügner
Sei ein ungerader Primzahlkandidat n gegeben. Wir bezeichnen
eine natürliche Zahl a < n als Zeugen dafür, dass n nicht prim
ist, wenn die folgende Ungleichung gilt:
an−1 6≡ 1 (mod n)
Ist n zusammengesetzt und gilt trotzdem an−1 ≡ 1 (mod n),
dann nennen wir a einen Fermat-Lügner.
Ist n > 1, dann sind 1 und n − 1 triviale Fermat-Lügner.
(1 ist klar – aber warum eigentlich lügt n − 1?)
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
Der Fermat-Test
Fermat-Test mit k Wiederholungen
Eingabe n > 3.
1. wähle zufällig a1 , . . . ak ∈ {2, . . . n − 2}
2. und berechne bi := ain−1 mod n.
Ist eines der bi 6= 1, dann
gib “ganz sicher zusammengesetzt” aus.
Sonst
gib “vermutlich prim” aus.
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
– 113 –
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
– 114 –
Teilerfremdheit und Fermat-Zeugen
I
I
Ist an−1 ≡ 1 (mod n), dann ist a ∗ an−2 ≡ 1, also ist an−2 das
multiplikative Inverse von a mod n.
Folgerung: Wenn a < n und n nicht teilerfremd sind, dann
1. ist n nicht prim und
2. kann a kein Fermat-Lügner sein.
I
Anders ausgedrückt: Es gibt “Kronzeugen” a < n mit
ggT(a, n) > 1. Alle Kronzeugen sind Fermat-Zeugen. Aber
wenn man einen Kronzeugen hat, kann man n auch ohne
Fermat-Test als zusammengesetzt entlarven. . . . Die
Berechnung des ggT reicht vollkommen . . .
Definition 42
Sei n eine zusammengesetzte Zahl.
Wir nennen einen Zeugen a < n normal, wenn ggT(a, n) = 1 gilt.
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
Erfolgswahrscheinlichkeit
Satz 43 (Ohne Beweis)
Ist n ≥ 3 ungerade und zusammengesetzt,
und gibt es mindestens einen normalen Fermat-Zeugen für n,
dann sind mehr als die Hälfte aller Zahlen in {2, . . . , n − 2}
Fermat-Zeugen.
(Der Beweis ist nicht schwierig, braucht aber doch mehr
mathematische Werkzeuge, als wir im Moment kennen.)
Folgerung 44
Ist n ≥ 3 ungerade und zusammengesetzt,
und gibt es mindestens einen normalen Fermat-Zeugen für n,
dann ist die Wahrscheinlichkeit, dass der Fermat-Test mit k
Wiederholungen fälschlich “vermutlich prim” ausgibt, < 1/2k .
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
– 115 –
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
Beispiele (k = 2, a1 = 2 und a2 = 3)
I
Es ist 214 ≡ 4 (mod 15), also ist 15 keine Primzahl.
I
Es ist 212 ≡ 1 (mod 13).
Und es ist 312 ≡ 1 (mod 13). Vermutlich ist 13 prim.
I
Es ist 21104 ≡ 1 (mod 1105).
Und es ist 31104 ≡ 1 (mod 1105). Vermutlich ist 1105 prim.
Falsch! Die Zahl ist nicht prim: 1105 = 5 ∗ 13 ∗ 17.
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
– 116 –
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
– 117 –
Gibt es perfekte Verbrecher?
Gibt es ungerade zusammengesetzte Zahlen, für die keine
normalen Fermat-Zeugen existieren? Leider ja:
Definition 45
Eine Carmichael-Zahl ist eine zusammengesetzte natürliche
Zahl c, wenn für alle zu c teilerfremden a < n gilt:
ac−1 ≡ 1 (mod c).
Die kleinste Carmichael-Zahl ist 561 = 3 ∗ 11 ∗ 17.
(Sie wurde 1910 von R. D. Carmichael gefunden.)
Es gibt unendlich viele Carmichael-Zahlen.
(Das wurde lange vermutet, aber erst nach 1990 bewiesen.)
(Wir verzichten auf den Beweis.)
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
– 118 –
Primzahlsuche in der Praxis
I
I
I
Statt des Fermat-Tests verwendet man meistens eine
Weiterentwicklung, den Primzahltest von Miller und Rabin.
Ein Durchlauf des Miller-Rabin-Tests kann jede
zusammengesetzte Zahl n mit mindestens der
Wahrscheinlichkeit 3/4 entlarven – selbst wenn n eine
Carmichael-Zahl sein sollte.
Um die Primzahl-Suche effizienter zu gestalten:
I
I
Teste zuerst Teilbarkeit durch kleine Primzahlen
(z.B., durch alle Primzahlen < 1000).
Wende den eigentlichen Primzahltest nur auf die
übriggebliebenen Primzahlkandidaten an.
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
Stefan Lucks
Diskrete Strukturen (WS 2009/10)
– 119 –
Eine besondere Klasse von Algorithmen
http://de.wikipedia.org/wiki/Randomisierter_Algorithmus:
Ein randomisierter Algorithmus (auch
stochastischer oder probabilistischer Algorithmus)
verwendet – im Gegensatz zu einem deterministischen
Algorithmus – Zufallsbits um seinen Ablauf zu steuern.
Es wird nicht verlangt, dass ein randomisierter
Algorithmus immer effizient eine richtige Lösung findet.
Randomisierte Algorithmen sind in vielen Fällen
einfacher zu verstehen, einfacher zu implementieren
und effizienter als deterministische Algorithmen für
dasselbe Problem.
Sind der Fermat- bzw. der Miller-Rabin-Test Las-Vegas oder
Monte-Carlo Algorithmen? Lesen Sie nach bei Wikipedia!
3: Zahlentheorie / Primzahlen
3.3: Faktorisieren & Primzahlen finden
Herunterladen