Grundlagen aus der Zahlentheorie + Primzahltest

Werbung
Stand: 5.1.2015 Vorlesung Grundlagen und Methoden der Kryptographie Dietzfelbinger
1
Grundlagen aus der Zahlentheorie
1.1
Fakten aus der Zahlentheorie und grundlegende Algorithmen
Unsere Zahlenbereiche:
• N = {0, 1, 2, 3, . . .},
• Z = {. . . , −2, −1, 0, 1, 2, 3, . . .}
Wir stellen uns die Zahlen immer als zu einer passenden Basis
b
dargestellt vor:
Binärdarstellung, (Oktaldarstellung,) Dezimaldarstellung, Hexadezimaldarstellung,
32
Darstellung zur Basis 256 (eine Zier ist ein Byte) oder 2
(eine Zier ist ein 32-BitWort, passend für die Darstellung in einem Rechner).
Die Anzahl der Ziern in der Darstellung von
a∈N
zur Basis
b
ist
dlogb (a + 1)e.
Verwendete Operationen: Addition (mit Umkehrung Subtraktion), Multiplikation.
O(1) addiert und subtrahiert
werden können (von der Hardware). Addition zweier n-ziriger Zahlen kostet dann
Zeit O(n), Multiplikation einer n-zirigen und einer `-zirigen Zahl mit der Schul1,58
methode kostet Zeit O(n`). Es gibt schnellere Verfahren: Karatsuba mit O(n
) für
zwei n-zirige Zahlen, Schönhage-Strassen sogar mit O(n log n log log n).
Wir nehmen an, dass zwei einzirige Zahlen in Zeit
Fakt 1.1 Division mit Rest
x ∈ Z und m ≥ 1 gibt es ein r mit 0 ≤ r < m
Zahlen q und r sind eindeutig bestimmt.
Zu
Die Zahl
r
(Rest) bezeichnen wir mit
unterscheidet sich also von
x
div m bezeichnet.
Beispiele:
x
x mod m.
und ein
1
mit
x = qm + r.
Sie hat die Darstellung
um ein Vielfaches von
30 = 3 · 9 + 3, −30 = (−4) · 9 + 6.
q
m.
Der Quotient
q
Die
x − qm,
wird mit
n-zirigen Zahl durch eine `-zirige
Aufwand für Division mit Rest: Die Division einer
Zahl mit der Schulmethode kostet Zeit
Wir sagen, dass eine ganze Zahl
x ist ),
wenn
Beispiele:
x = qy
y
O(n`).
die ganze Zahl
für eine ganze Zahl
q
x teilt
y ein Teiler von
dafür kurz y | x.
(oder dass
gilt. Oft schreibt man
3 | 12, −3 | 12, −3 | −12, −3 | 12, 3 | 0, 0 | 0.
0
8, −8
4, −4
6, −6
9, −9
12, −12
10, −10
2, −2
18, −18
20, −20
14, −14
15, −15
3, −3
42, −42
30, −30
21, −21
5, −5
35, −35
7,−7
....
1, −1
Abbildung 1: Einige Zahlen und ihre Teilbarkeitsbeziehungen. Beziehungen, die aus
der Transitivität folgen, sind nicht eingetragen. Die Zahl
Zahlen teilbar. Sie ist das gröÿte Element,
1
und
−1
0
ist durch alle ganzen
sind kleinste Elemente in der
Teilbarkeitsrelation.
Beobachtungen: Die Teilbarkeitsrelation
|
ist
reexiv
und
transitiv.
Es handelt sich
x und −x
können von ihr nicht unterschieden werden: Es gilt x | y ⇔ −x | y und y | x ⇔ y | −x,
und weiter x | −x und −x | x. Die Präordnung ist also nicht antisymmetrisch. Sie
ist auch nicht total, weil manche Elemente nicht verglichen werden können: 4 6 | 9 und
9 6 | 4. Aus 0 | x folgt x = 0; für jede ganze Zahl y gilt: y | 0; also ist in dieser
Präordnung 0 das eindeutig bestimmte gröÿte Element. Für jede ganze Zahl x gilt:
1 | x und −1 | x, also sind 1 und −1 kleinste Elemente. Wenn m > 0 ist, ist m | x
gleichbedeutend mit x mod m = 0.
damit um eine Präordnung (oft auch Quasiordnung genannt). Zahlen
2
Fakt 1.2 Teilbarkeit
(a) Aus
x|y
und
(b) Aus
x|y
folgt
(c) Aus
x|y
und
y 6= 0
(d) Aus
x|y
und
y|x
Der
Beweis
y|z
folgt
ux | uy
x | z.
für alle
folgt
folgt
u ∈ Z.
|x| ≤ |y|.
|x| = |y|.
Wenn zudem
x, y ≥ 0
gilt, folgt
x = y.
ist eine einfache Übung.
Denition 1.3 Gröÿter gemeinsamer Teiler
(a) Für
t|y
x, y ∈ Z
heiÿt
t∈Z
ein gemeinsamer Teiler von
x
und
y,
wenn
t|x
und
gilt.
Bemerkung: 1 ist stets gemeinsamer Teiler von x und y .)
(
(b) Für
x, y ∈ Z
sei
ggt(x, y), der gröÿte gemeinsame Teiler von x und y, die
nichtnegative Zahl
(i)
d|x
und
d | y;
d
mit:
(ii) wenn
c|x
und
c|y
gilt, dann folgt
c | d.
D. h.: d ist gemeinsamer Teiler von x und y , und jeder gemeinsame Teiler von
x und y ist Teiler von d.)
(
(c)
x, y ∈ Z heiÿen teilerfremd, wenn ggt(x, y) = 1 gilt, d. h. wenn sie nicht beide
0 sind und keine Zahl > 1 beide teilt.
0
Die Zahl ggt(x, y) ist eindeutig bestimmt: Wenn in (b) d und d beide (i) und (ii)
0
0
0
erfüllen und nichtnegativ sind, dann folgt d | d und d | d, also d = d nach Fakt 1.2(d).
Wir betrachten kurz einen nicht ganz oensichtlichen Sonderfall: Wenn
dann sind alle ganzen Zahlen Teiler von
Teiler
d
sein? Weil
ist ggt(0, 0)
= 0.
0 | 0,
x
x = y = 0,
y . Was soll der gröÿte gemeinsame
0 | d gelten. Dies gilt nur für d = 0, also
und
muss nach (ii) aber
Hier ist also der gröÿte gemeinsame Teiler nicht gröÿtmöglich im
Sinn der Standardanordnung der natürlichen Zahlen gemeint, sondern im Sinn der
x 6= 0 oder y 6= 0 gilt, kann es keinen gemeinsamen
max{|x|, |y|} ist, und der gröÿte gemeinsame Teiler ist
Präordnung Teilbarkeit. Wenn
Teiler geben, der gröÿer als
auch gröÿtmöglich im Sinn der gewöhnlichen Ordnung.
3
Es gibt einen ezienten Algorithmus zur Ermittlung des gröÿten gemeinsamen Teilers. (Dieser beweist auch die Existenz.) Er beruht auf der Feststellung ggt(x, y)
=
ggt(|x|, |y|) und den Gleichungen
ggt(a, 0)
=a
ggt(a, b) = ggt(b, a)
ggt(a, b) = ggt(b, a mod b)
für
für
für
a≥0
alle a, b, und
a ≥ b > 0.
,
Diese folgen sofort aus der Denition. (Die letzte Gleichung folgt aus der Beobachtung, dass a und b genau die gleichen gemeinsamen Teiler haben wie b und
r = a mod b. Weshalb? Wir können schreiben: a = q · b + r. Wenn nun t gemeinsamer
Teiler von a und b ist, dann ist t auch Teiler von r = a − q · b. Wenn t gemeinsamer
Teiler von b und r ist, dann ist t auch Teiler von a = q · b + r .)
Wir setzen die Beobachtung in ein iteratives Verfahren um.
Algorithmus 1.1 Euklidischer Algorithmus
Input: Zwei ganze Zahlen x und y.
Methode:
1
a, b: integer;
2
if |x| ≥ |y|
3
then a ← |x|; b ← |y|;
4
else a ← |y|; b ← |x|;
5
while b > 0 repeat
6
7
(a, b) ← (b, a mod b);
return a.
Zeilen
24
dienen nur dazu, die Normalsituation
liche Rechnung ndet in der
a ≥ b ≥ 0 herzustellen. Die eigent-
while-Schleife statt. In dieser Schleife wird immer ein
Zahlenpaar durch ein anderes ersetzt, das dieselben gemeinsamen Teiler hat. Wenn
der Algorithmus terminiert, weil der Inhalt
Inhalt von
Beispiel :
a
b
von
b Null geworden ist, kann man den
ausgeben.
x = 10534, y = 12742 ergibt sich der in Tab. 1.1 angegeai und bi bezeichnen den Inhalt der Variablen a und b,
nachdem die Schleife in Zeilen 56 i-mal ausgeführt worden ist. Die Ausgabe ist
46 = ggt(10534, 12742).
Auf Eingabe
bene Ablauf. Die Zahlen
Fakt 1.4
Algorithmus 1.1 gibt ggt(x, y) aus.
4
i
ai
bi
0
12742
10534
1
10534
2208
2
2208
1702
3
1702
506
4
506
184
5
184
138
6
138
46
7
46
0
Tabelle 1: Ablauf des Euklidischen Algorithmus auf einem Beispiel
Um einzusehen, dass der Algorithmus terminiert, ja sogar sehr schnell terminiert,
bemerken wir Folgendes. Betrachte den Beginn eines Schleifendurchlaufs. Der Inhalt
a
der Inhalt von b sei b, mit a ≥
0
den Wert a = b und b den Wert
b > 0. Nach einem Schleifendurchlauf
enthält a
b0 = a mod b. Falls b0 = 0, endet der
Algorithmus. Sonst wird noch ein Durchlauf ausgeführt, an dessen Ende a den Wert
b0 = a mod b enthält. Wir behaupten: b0 < 12 a. Um dies zu beweisen, betrachten wir
1
1
1
0
zwei Fälle: Wenn b > a ist, gilt b = a mod b = a − b < a. Wenn b ≤ a ist, gilt
2
2
2
1
0
b = a mod b < b ≤ 2 a. Also halbiert sich der Wert in a in jeweils zwei Durchläufen.
Nach dem ersten Schleifendurchlauf enthält a den Wert min{|x|, |y|}. Daraus ergibt
von
sei
a,
sich Teil (a) der folgenden Aussage.
Fakt 1.5
(a) Die Schleife in Zeilen
56
wird höchstens
O(log(min{|x|, |y|}))-mal ausgeführt.
(b) Die gesamte Anzahl von Ziernoperationen für den Euklidischen Algorithmus
ist
O(log(|x|) log(|y|)).
Man beachte, dass
um
x
dlog(x + 1)e ≈ log x
die Anzahl der Bits ist, die man braucht,
aufzuschreiben. Damit hat der Euklidische Algorithmus bis auf einen konstan-
ten Faktor denselben Aufwand wie die Multiplikation von
x
und
y,
wenn man die
Schulmethode benutzt. (Es sei bemerkt, dass der Beweis der Schranke in (b) einer
Rechnung bedarf, die die Längen der beteiligten Zahlen genauer verfolgt.)
5
Beispiel : (a) 21 und 25 sind teilerfremd. Es gilt 31 · 21 + (−26) · 25 = 651 − 650 = 1.
(b) Es gilt ggt(21, 35)
= 7,
und
2 · 35 − 3 · 21 = 7.
Die folgende sehr nützliche Aussage verallgemeinert diese Beobachtung:
Lemma 1.6 (∗) . . . von Bezout
(a) Wenn
(b) Für
x, y
teilerfremd sind, gibt es
x, y ∈ Z
s, t ∈ Z
gibt es
mit
s, t ∈ Z
mit
sx + ty = 1.
sx + ty = ggt(x, y).
Ein direkter Beweis der Aussage ndet sich im Anhang. Wir werden aber gleich sehen,
dass sich die Koezienten
s, t aus dem Lemma von Bezout mit einer Erweiterung des
Euklidischen Algorithmus sogar sehr ezient berechnen lassen damit ist die Frage
der Existenz natürlich gleich mit erledigt. Bevor wir diesen Algorithmus betrachten,
bemerken wir noch, dass es eine Art Umkehrung von (a) gibt: Wenn
ganze Zahlen
von
x
und
y
s und t, dann sind x und y
sx + ty = 1
für
Bew.: Alle gemeinsamen Teiler
teilerfremd. (
teilen auch 1, sind also 1 oder
−1.
Daraus folgt ggt(x, y)
= 1.)
Algorithmus 1.2 Erweiterter Euklidischer Algorithmus
Eingabe: Ganze Zahlen
x
und
y.
Methode:
0
1
2
3
4
5
6
7
8
9
10
a, b, sa, ta, sb, tb, q: integer;
if |x| ≥ |y|
then a ← |x|; b ← |y|;
sa ← sign(x); ta ← 0; sb ← 0; tb ← sign(y);
else a ← |y|; b ← |x|;
sa ← 0; ta ← sign(y); sb ← sign(x); tb ← 0;
while b > 0 repeat
q ← a div b;
(a, b) ← (b, a − q · b);
(sa, ta, sb, tb) ← (sb, tb, sa − q · sb, ta − q · tb);
return (a, sa, ta);
Im Algorithmus benutzen wir die Signumfunktion, die wie folgt deniert ist:

 1
0
sign(x) =

−1
6
, falls
, falls
, falls
x > 0,
x = 0,
x < 0,
(1)
die also
x = sign(x) · |x|
für alle
x
(2)
erfüllt.
Genau wie im ursprünglichen Euklidischen Algorithmus ndet die eigentliche Arbeit
in der
while-Schleife
statt (4 Zeilen). Zeilen
15
dienen nur der Vorbereitung und
dem Umarrangieren, wenn die Eingabe negative Zahlen enthält oder
|x| < |y|
ist.
Die Idee hinter dem Algorithmus ist folgende. Wie im (einfachen) Euklidischen Algorithmus werden in den Variablen
die stets ggt(a, b)
a
und
b
b mit 0 ≤ b ≤ a mitgeführt,
Variablen sa, ta, sb und tb enthalten
Zahlen
a
und
= d = ggt(x, y) erfüllen. Die
(sa , ta ) und (sb , tb ), die folgende
immer Zahlenpaare
Gleichungen erfüllen:
a = sa · x + ta · y,
b = sb · x + tb · y.
Diese Gleichung wird durch die Initialisierung hergestellt. (Wenn beispielsweise
x < y
0≤
a = y , b = x, sa = 0, ta = 1, sb = 1, tb = 0). In einem
Schleifendurchlauf wird a durch b ersetzt und (sa , ta ) durch (sb , tb ), und es wird b durch
a−q·b ersetzt sowie (sb , tb ) durch (sa −q·sb , ta −q·tb ). Dadurch bleiben die Gleichungen
gültig. Wenn schlieÿlich b = 0 geworden ist, gilt d = ggt(x, y) = a = sa · x + ta · y .
ist, setzt man
Das bedeutet, dass die Ausgabe das gewünschte Ergebnis darstellt.
(x, y) =
bezeichnen den Inhalt von a, b, sa,
Als Beispiel betrachten wir den Ablauf des Algorithmus auf der Eingabe
(10534, 12742). Die Zahlen ai ,bi , sa,i , ta,i , sb,i , tb,i
ta, sb, tb nach dem i-ten Schleifendurchlauf.
Die Ausgabe ist
i
ai
bi
0
12742
10534
0
1
1
0
1
10534
2208
1
0
−1
1
1
2
2208
1702
−1
1
5
−4
4
3
1702
506
5
−4
−6
5
1
4
506
184
−6
5
23
−19
3
5
184
138
23
−19
−52
43
2
6
138
46
−52
43
75
−62
1
7
46
0
75
−62 −277
229
3
(46, 75, −62).
sa,i
ta,i
sb,i
tb,i
qi
Man überprüft leicht, dass
46 = ggt(10534, 12742) = 75 · 10534 − 62 · 12742
7
gilt. Allgemein gilt:
Fakt 1.7
(a) Wenn Algorithmus 1.2 auf Eingabe
(x, y) die Ausgabe (d, s, t) liefert, dann gilt
d = ggt(x, y) = sx + ty .
(b) Die Anzahl der Schleifendurchläufe ist dieselbe wie beim gewöhnlichen Euklidischen Algorithmus.
(c) Die Anzahl von Ziernoperationen für Algorithmus 1.2 ist
O(log(|x|) log(|y|)).
Wir notieren noch eine wichtige Folgerung aus dem Lemma von Bezout.
Fakt 1.8
Wenn
x
y
und
dann ist
a
Beweis :
Weil
a
xy
teilerfremd sind und
auch durch das Produkt
x
und
y
Teiler von
sowohl durch
als auch durch
y
teilbar ist,
teilbar.
a sind, kann
y teilerfremd
u, v . Weil x und
1 = ggt(x, y) = sx + ty schreiben kann,
für ganze Zahlen
x
man
a = ux
und
a = vy
schreiben,
sind, folgt aus Lemma 1.6, dass man
für ganze Zahlen
s, t.
Dann ist
a = asx + aty = vysx + uxty = (vs + ut)xy,
was zu zeigen war.
1.2
Modulare Arithmetik
Denition 1.9
Für
m≥2
denieren wir eine zweistellige Relation auf
x≡y
Fakt 1.10
(i)
(mod m)
x ≡ y (mod m)
(ii) Die zweistellige Relation
heiÿt
Z:
m | (x − y).
gilt genau dann wenn
x mod m = y mod m
gilt.
· ≡ · (mod m) ist eine Äquivalenzrelation, sie ist also
reexiv, transitiv und symmetrisch.
8
Beispiel
für (i):
29 mod 12 = 53 mod 12 = 5
und
53 − 29 = 24
ist durch 12 teilbar.
Der Beweis von (i) ist eine leichte Übung; (ii) folgt sofort aus (i).
· ≡ · (mod m) führt (wie jede
Grundmenge Z in Äquivalenzklassen:
Die Äquivalenzrelation
Zerlegung der
[x] = {y ∈ Z | x ≡ y
Äquivalenzrelation) zu einer
(mod m)} = {y ∈ Z | x mod m = y mod m}.
mZ = {. . . , −3m, −2m, −m, 0, m, 2m, 3m, . . .}
A ⊆ Z.
Wir denieren
y ∈ A},
für
und
x + A = {x + y |
Beispiel : Für m = 3 gibt es die Äquivalenzklassen
[0] = {. . . , −6, −3, 0, 3, 6, . . .} = 0 + 3Z,
[1] = {. . . , −5, −2, 1, 4, 7, . . .} = 1 + 3Z,
[2] = {. . . , −4, −1, 2, 5, 8, . . .} = 2 + 3Z.
Mit den Äquivalenzklassen kann man wieder rechnen: Addition, Subtraktion, Multiplikation lassen sich wie folgt denieren.
[x] + [y] := [x + y],
[x] · [y] := [x · y].
Beispielsweise gelten für
m=3
die Gleichheiten
[4] + [5] = [9] = [0]
und
[4] · [5] =
[20] = [2].
wohldeniert sind,
Genau genommen muss man nachweisen, dass diese Operationen 0
0
das heiÿt, dass aus x ≡ x mod m und y ≡ y mod m die Gleichheit
[x + y] = [x0 + y 0 ]
0
dass x ≡ x mod m
folgt, analog für die Multiplikation. (Wir nehmen als Beispiel an,
y ≡ y 0 mod m gilt, d. h., dass x − x0 = sm und y − y 0 = tm für passende Faktoren
s und t. Dann ist xy − x0 y 0 = x(y − y 0 ) + (x − x0 )y 0 = xtm + smy 0 = (xt + sy 0 )m, also
0
0
durch m teilbar. Also gilt [x · y] = [x · y ]. Der Fall der Addition ist noch einfacher.)
und
Aus der Denition (und der Wohldeniertheit) ergibt sich, dass man anstatt mit
Äquivalenzklassen auch einfach mit Repräsentanten rechnen kann. Statt
[2] = [1] · [2] = [1]
([4] + [4]) ·
schreibt man also einfach
(4 · 4) · 2 ≡ 16 · (−1) ≡ 1 · (−1) ≡ −1 ≡ 2
(mod 3).
An jeder Stelle dieser Rechnung kann man für jede Zahl eine äquivalente einsetzen,
je nachdem, wie es bequem ist.
9
Man betrachtet die Menge aller Äquivalenzklassen:
Zm := Z/mZ := {[x] | x ∈ Z} = {[x] | 0 ≤ x < m}.
Solange es nicht zu Missverständnissen führt, schreibt man auch
m},
zusammen mit Addition modulo
m
und Multiplikation
Zm = {x | 0 ≤ x <
modulo m. Damit
meint man, dass man mit den Repräsentanten der Äquivalenzklassen rechnet, die in
{0, 1, . . . , m − 1}
liegen.
Fakt 1.11
Für jedes
m≥2
bildet die Menge
Zm
mit den Operationen
Multiplikation modulo m einen kommutativen Ring
Das heiÿt im Detail: Die Operationen
Bereich
Zm
mit
Addition modulo m und
1.
+ (mod m) und · (mod m) führen nicht aus dem
heraus. Die Addition erfüllt alle Rechenregeln für kommutative Gruppen,
[0],
[x] gibt es ein Inverses −[x] = [−x]. (Es gilt ja [x] + [−x] = [0].
Beachte: Für 0 < x < m gilt 0 < m − x < m und [x] + [m − x] = [m] = [0], also
−[x] = [m−x]. Insbesondere ist −[1] = [−1] = [m−1] das additive Inverse zu [1].) Die
Multiplikation ist assoziativ und kommutativ, und sie hat [1] als neutrales Element
([1]·[x] = [x]·[1] = [x]); für Addition und Multiplikation gelten die Distributivgesetze.
d. h. sie ist kommutativ und assoziativ, es gibt ein neutrales Element, nämlich
und zu jedem
Lemma 1.12
m ≥ 2 ist die Abbildung Z → Zm , x 7→ [x], ein Homomorphismus; d. h.
x, y ∈ Z gilt: [x + y] = [x] + [y] und [x · y] = [x] · [y]. In modulo-Notation heiÿt
Für jedes
für
das:
(i)
(ii)
(x + y) mod m = ((x mod m) + (y mod m)) mod m,
(x · y) mod m = ((x mod m) · (y mod m)) mod m.
Dieses Lemma wird hauptsächlich dazu benutzt, um Rechnungen zu vereinfachen. Um
einen arithmetischen Ausdruck modulo
m auszuwerten (inklusive Potenzen),
mod m-Operation anwenden.
kann
man auf beliebige Zwischenergebnisse die
Beispiel :
137 mod 11 zu berechnen,
(−1) · 4 ≡ −4 ≡ 7 (mod 11).
Um
rechnet man
137 ≡ 27 ≡ 25 · 4 ≡ 32 · 4 ≡
In vielen Anwendungen der Zahlentheorie in kryptographischen Verfahren kommt es
n
darauf an, Potenzen x mod m zu berechnen. Dabei kann n eine sehr groÿe Zahl sein.
10
Beispiel:
31384788374932954500363985493554603584759389 mod 28374618732464817362847326847331872341234
Wieso kann ein Computer das Ergebnis (18019019948605604024937414441328931495971)
in Bruchteilen von Sekunden berechnen? Auf keinen Fall kann er
n
Multiplikationen
durchführen. Es gibt eine recht einfache rekursive Formel, die den Weg zu einer ezienten Berechnung weist:

1



x
xn mod m =
((xn/2 mod m)2 ) mod m



(x · (x(n−1)/2 mod m)2 ) mod m
, wenn
, wenn
, wenn
, wenn
n = 0,
n = 1,
n ≥ 2 gerade ist,
n ≥ 2 ungerade ist.
Diese Formeln führen unmittelbar zu folgender rekursiver Prozedur.
Algorithmus 1.3 Schnelle modulare Exponentiation, rekursiv
function modexp(x, n, m)
Eingabe: Ganze Zahlen
x, n ≥ 0,
and
m ≥ 1,
mit
0 ≤ x < m.
Methode:
0
1
2
3
4
4
if n = 0 then return 1;
if n = 1 then return x;
y ← modexp(x, bn/2c, m); // rekursiver Aufruf
y ← y ∗ y mod m
if n ist ungerade then y ← y ∗ x mod m
return y.
Man erkennt sofort, dass in jeder Rekursionsebene die Bitanzahl des Exponenten um
1 sinkt, dass also die Anzahl der Rekursionsebenen etwa
log n
beträgt. In jeder Re-
kursionsstufe ist eine oder sind zwei Multiplikationen modulo m auszuführen, was
O((log m)2 ) Ziernoperationen erfordert (Schulmethode). Damit kommt man bei der
schnellen Exponentiation selbst bei der einfachsten Implementierung der Multiplika2
tion mit O((log n)(log m) ) Ziernoperationen zum Ergebnis. Einen alternativen
Algorithmus, der iterativ formuliert ist, geben wir im Anhang an.
Lemma 1.13
xn mod m benötigt O(log n) Multiplikationen und Divisionen
2
2
Zahlen aus {0, . . . , m − 1} sowie O((log n)(log m) ) Ziernoperatio-
Die Berechnung von
modulo
m
von
nen.
11
Bemerkung:
Man kann denselben Algorithmus in einem beliebigen
Monoid
(Bereiche
mit einer assoziativen Operation und einem neutralen Element) benutzen. Ein Monoid
bilden zum Beispiel:
•
die natürlichen Zahlen mit der Multiplikation (neutral: 1);
•
quadratische Matrizen über einem Ring mit 1, mit Matrixmultiplikation (neutral: Einheitsmatrix);
•
Σ∗
die Menge
Σ,
über einem Alphabet
mit der Konkatenation (neutral: das
leere Wort).
1.3
Primzahlen
Jede positive ganze Zahl
Denition 1.14
x
ist durch
(a) Eine Zahl
1
p≥1
und durch
heiÿt
a Diese Teiler sind dann
Teiler hat.
(b) Eine Zahl
y<x
a Die
b Die
Zahl
Zahl
x≥1
b
besitzt.
1
1
heiÿt
1
x
teilbar.
Primzahl, wenn p genau zwei positive
und
p.
zusammengesetzt,
wenn sie einen Teiler
hat nur einen positiven Teiler, nämlich 1. Also ist
besitzt keinen Teiler
y
mit
1 < y < 1.
Also ist
1
1
y
mit
1<
keine Primzahl.
auch nicht zusammengesetzt.
Fakt 1.15
Wenn
p
eine Primzahl ist und
p | xy
gilt, dann gilt
p|x
oder
p | y.
Beweis : Wenn p | x, sind wir fertig. Also können wir p 6 | x annehmen. Das heiÿt, dass
ggt(p, x)
=1
s, t.
y = spy + txy .
für ganze Zahlen
auch
1 = sp + tx schreiben,
xy durch p teilbar, also
ist. Nach dem Lemma von Bezout können wir
Daraus folgt:
y = spy + txy .
Nun ist
Satz 1.16
Jede Zahl
x ≥ 1 kann als Produkt von Primzahlen geschrieben werden. Die Faktoren
sind eindeutig bestimmt (bis auf die Reihenfolge).
12
Beweis :
über
x.
Die Existenz der Zerlegung in Primfaktoren beweist man durch Induktion
Die Zahl
x = 1
kann als leeres Produkt
Eine andere Darstellung gibt es nicht. Für
x1
Q
x > 1
p∈∅,p prim p geschrieben werden.
sucht man einen echten Faktor
x (1 < x1 < x), dann einen echten Faktor x2 von x1 usw., bis man einen
xk von x erhält, der selber keinen echten Faktor hat. Dieses xk ist
0
0
Primfaktor von x, man kann also x = x · xk schreiben. Auf x wendet man die
von
echten Faktor
ein
Induktionsvoraussetzung an.
Die Eindeutigkeit sieht man wie folgt: Nehmen wir an,
unterschiedliche Primfaktorzerlegungen von
x.
p1 · · · pk
und
q1 · · · q `
q1 , . . . , q `
x die
p1 , . . . , p k
Wir können annehmen, dass
kleinste Zahl mit unterschiedlichen Zerlegungen ist. Daraus folgt, dass in
keine der Primzahlen
wären
vorkommt (sonst würde man durch Streichen eines
q1
x = p1 · · · pk . Nach Fakt 1.15, wiederholt angewendet, teilt q1 einen der
Faktoren p1 , . . . , pk , etwa pi . Weil q1 und pi Primzahlen sind, muss p1 = qi gelten, ein
Faktors eine kleinere Zahl mit unterschiedlichen Zerlegungen erhalten). Nun teilt
die Zahl
Widerspruch.
Fakt 1.17
Jede zusammengesetzte Zahl
Beweis :
Man schreibt
x
x = yz
besitzt einen Primfaktor
für Zahlen
√
nicht möglich, dass beide gröÿer als
x
√
x ist.
Primfaktor, der nicht gröÿer als
y
und
z,
p
mit
die weder
p≤
1
√
x.
noch
x
sind. Es ist
sind. Der kleinere Faktor enthält also einen
Bemerkung:
√
{2, . . . , b
Die Laufzeit des naiven Faktorisierungsverfahrens, das alle Zahlen in
√
xc} darauf testet, ob sie x teilen, hat Rechenzeit mindestens x = 2(log x)/2 ,
also exponentiell in der Bitlänge von
x.
Wie wir später genauer diskutieren werden,
sind für das Auf nden der Primzahlzerlegung einer gegebenen Zahl
x
überhaupt
c
O((log x) )
c). Aber es gibt eziente Algorithmen, mit denen man feststellen kann,
x eine Primzahl ist oder nicht. Dieser Unterschied in der Schwierigkeit
keine ezienten Algorithmen bekannt (also Algorithmen mit Laufzeiten
für konstantes
ob eine Zahl
des Faktorisierungsproblems und des Primzahlproblems liegt einer ganzen Reihe von
kryptographischen Verfahren zugrunde.
Satz 1.18 Euklid
Es gibt unendlich viele Primzahlen.
Beweis :
Zahl
p1 , . . . , pk eine endliche Folge von Primzahlen ist, betrachten wir die
x = 1 + p1 · · · pk . Die Zahl x kann durch keine der Primzahlen p1 , . . . , pk teilbar
Wenn
13
sein, sonst wäre 1 durch diese Primzahl teilbar, was nicht möglich ist. Also sind alle
x von p1 , . . . , pk
Primfaktoren in der Primzahlzerlegung von
p1 , . . . , p k
auÿer
verschieden, es muss also
noch weitere Primzahlen geben.
Über die Verteilung der Primzahlen (ihre Dichte) in
satz Auskunft.
als
x
1
Mit
N gibt der berühmte Primzahlπ(x) bezeichnen wir die Anzahl der Primzahlen, die nicht gröÿer
sind.
Satz 1.19 Primzahlsatz
lim
x→∞
π(x)
= 1.
x/ ln x
− lnxx ≈ lnxx Primzahlen zu erwarten
µ−1 µ
sind. Die µ-zirigen Zahlen bilden das Intervall [2
, 2 ). Der Anteil der Primzahlen
Das heiÿt, dass für groÿe
x
in
(x, 2x]
etwa
2x
ln(2x)
in diesem Intervall ist näherungsweise
1
2µ−1 / ln(2µ−1 )
≈
≈ 1,44/µ.
2µ−1
(ln 2)(µ − 1)
µ ≈ 2000 ist der relative Anteil von Primzahlen im interessanten Zahlenbereich
also etwa ≈ 1,44/2000 ≈ 1/1400. Er sinkt umgekehrt proportional zur Ziernzahl.
Für
Für unsere Zwecke etwas angenehmer zu benutzen als der Primzahlsatz ist folgende
etwas schwächere Aussage, die eine konkrete Konstante angibt:
Satz 1.20 Ungleichung von Finsler
Für jede ganze Zahl
Primzahlen
:
m ≥ 2
liegen im Intervall
π(2m) − π(m) ≥
Ein vollständiger, vergleichsweise einfacher
(m, 2m]
mindestens
m/(3 ln(2m))
m
.
3 ln(2m)
Beweis
für eine Aussage dieser Art ndet
sich zum Beispiel in dem Lehrbuch Elemente der Diskreten Mathematik: Zahlen und
Zählen, Graphen und Verbände von Diekert, Kuf leitner, Rosenberger (De Gruyter
2013).
1 1793 von Gauÿ und unabhängig 1798 von Legendre vermutet; 1896 unabhängig von Hadamard
und de La Vallé Poussin bewiesen.
14
Beispiele:
Ziernzahl
Finsler-Schranke für
numerische
µ
m
(π(2m) − π(m))/m
untere Schranke
256
2255
512
2511
1024
21023
2048
22047
1
3·256·ln 2
1
3·512·ln 2
1
3·1024·ln 2
1
3·2048·ln 2
1
533
1
1065
1
2130
1
4260
Eine Verdopplung der Ziernzahl halbiert die untere Schranke für die Primzahldichte.
1.4
Inverse in Restklassenringen
Wir kehren nochmals zur Arithmetik im Ring
Zm = Z/mZ
zurück.
Zunächst eine einfache Beobachtung:
Lemma 1.21
m ≥ 2 und alle x, y ∈ Z gilt:
x ≡ y (mod m), dann gilt ggt(x, m) = ggt(y, m). In Worten: Der
gemeinsame Teiler von x und m hängt nur von der Äquivalenzklasse [x] ab.
Für jedes
Wenn
Beweis :
x = y + am. Dann ist
Teiler von y und m und
Sei
meinsamer
Im Ring
Zm = Z/mZ
jeder gemeinsame Teiler von
x
und
auch ge-
umgekehrt.
spielen die Elemente, die ein
m
gröÿte
multiplikatives
Inverses haben,
eine spezielle Rolle.
Lemma 1.22
m ≥ 2 und jedes x ∈ Z gilt:
ein y mit xy mod m = 1 genau
Für jedes
Es gibt
dann wenn ggt(x, m)
= 1.
Beweis :
⇒: Es sei
xy mod m = 1. Das heiÿt: Es gibt ein q ∈ Z mit xy − qm = 1. Nach einer
Bemerkung zum Lemma von Bezout sind x und m dann teilerfremd.
⇐:
x und m seien teilerfremd. Nach Lemma 1.6(a) gibt es s, t ∈ Z mit sx + tm = 1.
Setze y := s mod m. Dann gilt:
(x · y) mod m = (x · (s mod m)) mod m = sx mod m = 1.
15
Beispiel :
Aus
Inverses zu
21
31 · 21 + (−26) · 25 = 1
folgt, dass
31 mod 25 = 6
ein multiplikatives
modulo 25 ist.
Wir bemerken: Mit dem erweiterten Euklidischen Algorithmus 1.2 berechnet man
leicht
d
und Koezienten
es kein Inverses zu
x
in
s, t ∈ Z
Zm .
sx + tm = d = ggt(x, m). Wenn d > 1 ist, gibt
d = 1 ist, folgt sx mod m = 1, also ist s mod m
mit
Wenn
das gewünschte inverse Element. Die Rechenzeit für das Berechnen des modularen
Inversen beträgt also
O((log x)(log m)).
Die Menge der invertierbaren Elemente von
Zm
erhält eine eigene Bezeichnung.
Denition 1.23
Für
m≥2
sei
Z∗m := {x ∈ Zm | ggt(x, m) = 1}.
(Wieder sind hier eigentlich die Restklassen
Fakt 1.24
[x],
ggt(x, m)
= 1, 0 ≤ x < m,
gemeint.)
:
Für jedes m ≥ 2 gilt
Z∗m mit der Multiplikation modulo
m
als Operation ist eine (kommutative) Gruppe.
Beispiel : Z∗21 = {1, 2, 4, 5, 8, 10, 11, 13, 16, 17, 19, 20} und Z∗7 = {1, 2, 3, 4, 5, 6}.
Beweis von Fakt 1.24: Natürlich ist die 1 das neutrale Element der Multiplikation
in
Zm
und in
Z∗m .
Wir bemerken zuerst, dass
x
1 = sx + tm = uy + vm
schreiben, und erhält daraus
zu
m
unter Multiplikation modulo
abgeschlossen ist: Seien
und
y
Z∗m
m
teilerfremd. Nach Lemma 1.6(a) kann man
1 = (sx + tm)(uy + vm) = (su)(xy) + (sxv + tuy + tvm)m.
Daraus folgt, dass jeder gemeinsame Teiler von
ggt(xy, m)
xy
und
m auch 1 teilen muss, also ist
= 1.
x von Z∗m ein multiplikatives Inverses y ∈ Zm .
∗
Weil natürlich x auch das Inverse von y ist, folgt nach Lemma 1.22 auch, dass y ∈ Zm
Nach Lemma 1.22 hat jedes Element
ist.
Kommutativität ist klar.
Aus den elementaren Eigenschaften von Gruppen weiÿ man, dass Inverse eindeutig
−1
bestimmt sind. Für das Inverse von x (wenn es existiert) schreiben wir x
mod m (gemeint ist die Restklasse oder der eindeutig bestimmte Repräsentant in
{0, 1, . . . , m −
1}).
Am schönsten ist die Situation, wenn alle Zahlen
16
1, . . . , m − 1
in
Z∗m
liegen.
Proposition 1.25
Für jedes
m
m≥2
ist Primzahl
gilt
:
⇔ Z∗m = {1, . . . , m − 1} ⇔ Zm
Die zweite Äquivalenz ist dabei klar: Der Ring
Zm − {0}
genau dann wenn jedes Element von
Beweis
m
eine Primzahl. Dann ist jedes
∗
teilerfremd; nach der Denition folgt Zm =
⇐: Sei
ist
Zm
ist nach Denition ein Körper
ein multiplikatives Inverses besitzt.
von Proposition 1.25:
⇒: Sei
k =
modulo
ist ein Körper.
m
eine zusammengesetzte Zahl, etwa durch
ggt(k, m)
m
a ∈ {1, . . . , m − 1} = Zm − {0}
Zm − {0}.
> 1,
also kann
k
b
gleich
1
mit
2<k<m
m
teilbar. Dann
nach Lemma 1.22 kein multiplikatives Inverses
haben. (Man sieht auch direkt, dass
ist, also für kein
k
zu
kb mod m = kb − qm
durch
k
teilbar
sein kann.)
Beispiel : Wir rechnen modulo 13 und geben für jedes x ∈ Z∗13 das Inverse y sowie das
Produkt
x·y
an (das natürlich bei der Division durch 13 Rest 1 lassen muss).
x
y
x·y
1
2
3
4
5
6
7
8
9
10
11
12
1
7
9
10
8
11
2
5
3
4
6
12
1
14
27
40
40
66
14
40
27
40
66
144
14 ist keine Primzahl, und es gibt keine Zahl
2∈
/ Z∗14 und daher, dass Z14 kein Körper ist.
y
mit
2 · y mod 14 = 1;
das heiÿt, dass
Fakt 1.26 Kleiner Satz von Fermat
Wenn
m
:
eine Primzahl ist, dann gilt
xm−1 mod m = 1,
für jedes
x ∈ Z∗m .
Beweis : Betrachte die Abbildung
gx : Z∗m 3 s 7→ xs mod m ∈ Z∗m .
Diese Abbildung ist injektiv, da für das zu
y(xs) mod m = (yx)s mod m = s.
x inverse Element y
gilt:
Also gilt:
{1, . . . , m − 1} = {gx (1), . . . , gx (m − 1)}.
17
y ·gx (s) mod m =
Wir multiplizieren die Zahlen
1, . . . , m − 1
in zwei Anordnungen:
1 · . . . · (m − 1) mod m = gx (1) · . . . · gx (m − 1) mod m = xm−1 · (1 · . . . · (m − 1)) mod m.
Wenn wir beide Seiten mit dem multiplikativen Inversen von
m−1
multiplizieren, erhalten wir 1 = x
mod m.
Wir bemerken, dass auch die Umkehrung gilt: Wenn
qm = 1
dann folgt ggt(x, m)
m−1
gilt auf jeden Fall x
mod m 6= 1.
für ein
q,
= 1.
Wenn
1 · . . . · (m − 1) mod m
xm−1 mod m = 1 ist, d. h. xm−1 −
∗
also x ∈ (Zm − {0}) − Zm , dann
Der kleine Satz von Fermat wird Ausgangspunkt für den später betrachteten Primzahltest sein.
1.5
Der Chinesische Restsatz
Der Chinesische Restsatz besagt im Wesentlichen, dass für teilerfremde Zahlen
und
n
die Strukturen
Zm × Zn
(mit komponentenweisen Operationen) und
Zmn
m
iso-
morph sind.
m = 3, n = 8, also mn = 24. Die folgende
x ∈ {0, 1, . . . , 23} modulo 3 und modulo 8 an. Die
für andere x ∈ Z.
Wir beginnen mit einem Beispiel, nämlich
Tabelle gibt die Reste der Zahlen
Reste wiederholen sich zyklisch
x
0
1
2
3
4
5
6
7
8
9
10
11
x mod 3
0
1
2
0
1
2
0
1
2
0
1
2
x mod 8
0
1
2
3
4
5
6
7
0
1
2
3
x
12
13
14
15
16
17
18
19
20
21
22
23
x mod 3
0
1
2
0
1
2
0
1
2
0
1
2
x mod 8
4
5
6
7
0
1
2
3
4
5
6
7
Z3 ×Z8 ansehen, erkennen wir,
dass sie alle verschieden sind, also auch alle Möglichkeiten in {0, 1, 2} × {0, 1, . . . , 7}
abdecken. D. h.: Die Abbildung x 7→ (x mod 3, x mod 8) ist eine Bijektion zwischen
Z24 und Z3 × Z8 . Zudem spiegeln sich arithmetische Operationen auf den Elementen
von Z24 in den Resten modulo 3 und 8 wider. Beispielsweise liefert die Addition von
Wenn wir die Einträge in Zeilen 2 und 3 als 24 Paare in
18
(2, 7) und (2, 1) das Resultat (1, 0), das der Addition von 23 und 17 mit dem Resultat
40 = 16 mod 24 entspricht. Genauso ist
(25 mod 3, 35 mod 8) = (2, 3),
was der Beobachtung
115 mod 24 = 11
2
Der Chinesische Restsatz
entspricht.
sagt im wesentlichen, dass eine solche strukturelle Ent-
sprechung zwischen den Resten modulo
n
immer gilt, wenn
m
und
n
mn
und Paaren von Resten modulo
und
n
bzw.
teilerfremd sind.
Fakt 1.27 Chinesischer Restsatz
m
m
a
.
seien teilerfremd Dann ist die Abbildung
Φ : Zmn 3 x 7→ (x mod m, x mod n) ∈ Zm × Zn
.
bijektiv Weiterhin
:
Wenn
Φ(x) = (x1 , x2 )
und
(a)
Φ(x +mn y) = (x1 +m y1 , x2 +n y2 );
(b)
Φ(x ·mn y) = (x1 ·m y1 , x2 ·n y2 );
(c)
Φ(1) = (1, 1).
(Dabei bezeichnen
aΦ
+j
Φ(y) = (y1 , y2 ),
dann gilt
und ·j die Addition und die Multiplikation
:
modulo j .)
ist der griechische Buchstabe Phi.
Für mathematisch-strukturell orientierte Leser/innen: Die Gleichungen (a) und (b)
kann man etwas abstrakter auch so fassen, dass die Abbildung
Isomorphismus zwischen
Beweis
Zmn
und
Zm × Zn
Φ
ein Ring-mit-1-
ist.
von Fakt 1.27: Wir beschränken uns darauf, die Bijektivität zu beweisen. Als
Zm × Zn beide genau m · n Elemente haben. Daher
Φ injektiv ist. Seien dazu 0 ≤ x ≤ y < mn
beliebig mit Φ(x) = Φ(y). Das heiÿt: x mod m = y mod m und x mod n = y mod n.
Das wiederum heiÿt, dass m | (y − x) und n | (y − x) gilt. Nach Fakt 1.8 folgt, dass
mn Teiler von y − x ist. Nun ist 0 ≤ y − x < mn, woraus y − x = 0, also x = y , folgt.
Damit ist die Injektivität von Φ bewiesen.
erstes bemerkt man, dass
Zmn
und
reicht es zu zeigen, dass die Abbildung
2 Die Bezeichnung hat sich eingebürgert. Eigentlich geht es in dem Satz um Restklassen.
19
Man kann sich noch fragen, wie man nötigenfalls zu gegebenen Zahlen
s ∈ Zm
und
x ∈ Zmn berechnen kann, die Φ(x) = (s, t) erfüllt. Dazu betrachtet
s = 1 und t = 0. Weil m und n teilerfremd sind, kann
man mit dem erweiterten Euklidischen Algorithmus ein u ∈ Zm mit un mod m = 1
nden. Wir setzen y = un ∈ Zmn . Dann gilt y mod m = 1 und y mod n = 0. Analog
ndet man ein z ∈ Zmn mit z mod m = 0 und z mod n = 1. Nun setzen wir x :=
(sy+tz) mod mn ∈ Zmn . Wir haben, modulo m gerechnet: x ≡ sy+tz ≡ s·1+t·0 ≡ s
(mod m). Analog ergibt sich x ≡ sy +tz ≡ s·0+t·1 ≡ t (mod n), wie gewünscht. Der
Berechnungsaufwand für das Finden von x ist O((log m)(log n)) Ziernoperationen,
t ∈ Zn
die Zahl
man zunächst den Fall
das geht also sehr schnell.
Beispiel : m = 5, n = 8, s = 3, t = 7.
u = 2 mit u · 8 mod 5 = 1 und
y = 2 · 8 = 16 sowie v = 5 mit v · 5 mod 8 = 1 und z = 5 · 5 = 25. Nun setzen
wir x = (3 · 16 + 7 · 25) mod 40 = (48 + 175) mod 40 = (8 + 15) mod 40 = 23. Und
tatsächlich: 23 mod 5 = 3 und 23 mod 8 = 7.
Wir nden
Wir wollen jetzt noch untersuchen, wie sich Zahlen, die zu
m
und
n
teilerfremd sind,
in der Sichtweise des Chinesischen Restsatzes verhalten.
Proposition 1.28
Wenn man die Abbildung
Φ
aus dem Chinesischen Restsatz auf
∗
∗
∗
ergibt sich eine Bijektion zwischen Zmn und Zm × Zn .
Beweis :
Z∗mn
einschränkt,
x ∈ Z∗mn gilt, dass x mod m zu m
∗
teilerfremd ist. (Die entsprechende Aussage für n ergibt sich analog.) Wenn x ∈ Zmn
ist, gibt es nach dem Lemma von Bezout Faktoren s und t mit sx + tmn = 1. Daher
ist 1 durch ggt(x, m) teilbar, also muss ggt(x, m) = 1 sein. Umgekehrt müssen wir
zeigen, dass für s mit ggt(s, m) = 1 und t mit ggt(t, m) = 1 die eindeutig bestimmte
Zahl x ∈ Zm mit Φ(x) = (s, t) teilerfremd zu mn ist. Der Beweis erfolgt indirekt.
Annahme: ggt(x, mn) > 1. Wir wählen einen möglichst kleinen gemeinsamen Teiler
p > 1 von x und mn. Dieses p muss eine Primzahl sein. Nach Fakt 1.15 ist p Teiler von
m oder von n. O. B. d. A. nehmen wir an, dass p Teiler von m und von x ist. Weil s ≡ x
(mod m), gilt ggt(s, m) = ggt(x, m). Es folgt ggt(s, m) > 1, ein Widerspruch.
Wir müssen zunächst zeigen, dass für
Bemerkung :
Der Chinesische Restsatz und die nachfolgenden Bemerkungen und Be-
n1 , . . . , nr
verallgemeinern. Die Aussagen lassen sich durch vollständige Induktion über r beweihauptungen lassen sich leicht auf
r > 2
paarweise teilerfremde Faktoren
sen.
Mit Prop. 1.28 können wir leicht die Kardinalitäten der Mengen
20
Z∗m , m ≥ 2,
bestim-
men.
3
Denition 1.29 Eulersche ϕ-Funktion
Für
m≥2
sei
ϕ(m) := |Z∗m | = |{x | 0 ≤ x < m, ggt(x, m) = 1}|.
Einige Beispielwerte sind in Tab. 2 angegeben.
m
2
ϕ(m) 1
3
2
4
2
5
4
6
2
7
6
8
4
Tabelle 2: Eulersche
9
6
10 11
4 10
12 13
4 12
ϕ-Funktion
für kleine
14
6
15
8
16
8
m
Folgendes ist eine unmittelbare Konsequenz aus Proposition 1.28:
Lemma 1.30
Für teilerfremde Zahlen
n
und
m
gilt
ϕ(mn) = ϕ(m) · ϕ(n).
Mit diesem Lemma lässt sich eine Formel für
ϕ(m)
angeben.
Lemma 1.31
Für
m≥2
gilt
ϕ(m) = m ·
Y p prim
p|m
Beweis :
1
1−
p
.
m eine Primzahlpotenz pt ist, dann besteht Z∗m aus den Zahlen in
Zm = {0, 1, . . . , pt − 1}, die nicht durch p teilbar sind. Da es in Zm insgesamt pt
t−1
t
t−1
Zahlen gibt und p
Vielfache von p, gilt ϕ(m) = p − p
= m − m/p = m(1 − 1/p).
Wenn
Nun nehmen wir an, dass
m = pt11 · · · ptss
p1 , . . . , ps und t1 , . . . , ts ≥ 1. Die Faktoren pt11 , . . . , ptss
teilerfremd. Mit Lemma 1.30, (s − 1)-mal angewendet, erhalten wir
s
s
s Y
Y
Y
1
ti
ti
.
ϕ(m) =
ϕ(pi ) =
pi (1 − 1/pi ) = m ·
1−
p
i
i=1
i=1
i=1
gilt, für verschiedene Primzahlen
sind
3 ϕ ist der griechische Buchstabe
phi.
21
Beispiel :
Mit dieser Formel lassen sich die Werte in Tabelle 2 schnell verizieren. (
ϕ(12) = 12(1−1/2)(1−1/3) = 12·(1/2)·(2/3) = 4.) Man beachte als Spezialfall: Wenn
m = pq für verschiedene Primzahlen p und q , dann ist ϕ(m) = pq(1 − 1/p)(1 − 1/q) =
(p − 1)(q − 1). (Beispiel : ϕ(15) = 2 · 4 = 8.)
Bemerkung : Die simple Formel in Lemma 1.31 könnte zu dem Schluss verleiten, dass
sich
ϕ(m)
zu gegebenem
m
immer leicht berechnen lässt. Aber Achtung: Man muss
dazu die Menge der Primfaktoren von
sierungsproblem für
m kennen. Dies läuft darauf hinaus, das Faktori-
m zu lösen, und hierfür kennt man keine ezienten Algorithmen.
ϕ(m) aus
Tatsächlich ist auch kein ezienter Algorithmus bekannt, der es erlaubt,
m
zu berechnen.
Wir können den kleinen Satz von Fermat (Fakt 1.26) auf den Fall beliebiger
m
ver-
allgemeinern.
Satz 1.32 Satz von Euler
Für
m≥2
und
x
mit ggt(m, x)
=1
gilt
:
xϕ(m) mod m = 1.
Beweis : Der Beweis läuft exakt wie der Beweis des kleinen Satzes von Fermat. Sei x
mit ggt(m, x)
=1
gegeben. Da wir modulo
m
rechnen, können wir
x
durch
x mod m
ersetzen, d. h., wir können annehmen, dass 1 ≤ x < m gilt. Betrachte die Abbildung
gx : Z∗m 3 s 7→ xs mod m ∈ Z∗m . (Um zu sehen, dass diese Abbildung wohldeniert ist,
erinnere man sich, dass mit x und s auch xs teilerfremd zu m ist.) Diese Abbildung ist
∗
injektiv, weil für das multiplikative Inverse y von x in Zm die Gleichung y · gx (s) mod
m = yxs mod m = s gilt. Weil Z∗m endlich ist, muss die Abbildung gx sogar bijektiv
∗
∗
sein. Das heiÿt: {gx (s) | s ∈ Zm } = Zm . Daher:
Y
∗
s∈Zm
s≡
Y
∗
s∈Zm
gx (s) ≡
Y
xs ≡ xϕ(m) ·
∗
s∈Zm
Y
s
(mod m).
∗
s∈Zm
Q
∗ s) mod m ist teilerfremd zu m, hat also ein multiplikatives Inverses
Die Zahl (
s∈Zm
∗
z in Zm . Wenn wir beide Seiten der Gleichung mit z multiplizieren, erhalten wir
1 ≡ xϕ(m) (mod m).
22
2
Primzahltest und Primzahlerzeugung
2.1
Der Miller-Rabin-Primzahltest
In diesem Abschnitt lernen wir einen randomisierten Algorithmus kennen, der es
erlaubt, zu einer gegebenen Zahl
n zu entscheiden, ob n eine Primzahl
ist oder nicht.
Ein idealer Primzahltest sieht so aus:
Eingabe: Eine natürliche Zahl n ≥ 3.
Ausgabe: 0, falls n eine Primzahl ist; 1, falls n zusammengesetzt ist.
Wozu braucht man Primzahltests? Zunächst ist die Frage Ist
n eine Primzahl?
eine
grundlegende mathematisch interessante Fragestellung. Spätestens mit dem Siegeszug
des RSA-Kryptosystems (siehe spätere Kapitel) hat sich die Situation jedoch dahin
entwickelt, dass man Algorithmen benötigt, die immer wieder neue vielzirige Primzahlen (etwa mit 512 oder 1024 Bits
4
bzw. 155 oder 310 Dezimalziern) bereitstellen
können. Den Kern dieser Primzahlerzeugungs-Verfahren (siehe Abschnitt 2.2) bildet
ein Verfahren, das eine gegebene Zahl
n
darauf testet, ob sie prim ist.
Ein naiver Primzahltest (versuchsweise Division), der dem
folgt, ndet durch direkte Division der Zahl
n
n
durch
brute-force
√ -Paradigma
2, 3, 4, . . . , b nc
heraus, ob
einen nichttrivialen Teiler hat. Man kann dieses Verfahren durch einige Tricks
beschleunigen, aber die Rechenzeit wächst dennoch mit
√
Θ( n).
Dies macht es für
Zahlen mit mehr als 40 Dezimalstellen praktisch undurchführbar, von Zahlen mit
mehr als 100 Dezimalstellen ganz zu schweigen. (Achtung: Damit wird nichts über
die Qualität anderer Faktorisierungsalgorithmen gesagt. Es gibt andere, sehr fortgeschrittene Faktorisierungsalgorithmen, die bei entsprechendem Zeitaufwand und
mit sehr leistungsstarken Rechnern auch noch mit 200-stelligen Zahlen zurechtkommen. Für Information zu früheren und aktuelleren Faktorisierungserfolgen siehe z. B.
http://en.wikipedia.org/wiki/RSA_numbers.)
In diesem Abschnitt beschreiben wir den randomisierten Primzahltest von MillerRabin. Dabei handelt es sich um einen Monte-Carlo-Algorithmus mit einseitigem
Fehler. Das heiÿt: Auf Eingaben
auf Eingaben
n,
n,
0 ausgegeben;
(von n abhängige)
die Primzahlen sind, wird immer
die zusammengesetzt sind, gibt es eine gewisse
4 http://www.rsa.com/rsalabs/node.asp?id=2218 am 29.12.2012: RSA Laboratories currently recommends key sizes of 1024 bits for corporate use and 2048 bits for extremely valuable keys like
the root key pair used by a certifying authority (see Question 4.1.3.12). Several recent standards
specify a 1024-bit minimum for corporate use. Dabei bedeutet key size die Bitanzahl eines Produkts
n=p·q
für Primzahlen
p
und
q
mit jeweils der halben Länge.
23
Wahrscheinlichkeit, dass die Ausgabe 0, also falsch ist. Für kein zusammengesetztes
n ist diese Wahrscheinlichkeit gröÿer als die Fehlerschranke 14 . Wir beweisen nur die
1
Fehlerschranke . Im Beweis benutzen wir einfache zahlentheoretische Überlegungen.
2
Eine herausragende Eigenschaft des Miller-Rabin-Tests ist seine Ezienz. Wir werden
sehen, dass selbst bei Verwendung der Schulmethoden für Multiplikation und Division
3
die Bitkomplexität des Primzahltests nur O((log n) ) ist.
Bemerkung:
Der Miller-Rabin-Algorithmus stammt aus dem Jahr 1977; er folgte ei-
nem kurz vorher vorgestellten anderen randomisierten Primzahltest (Solovay-StrassenTest). Für diesen und andere randomisierte Primzahltests (z. B. der Strong Lucas
Probable Prime Test oder der Quadratic Frobenius Test von Grantham) sei auf
die Literatur verwiesen. Im Jahr 2002 stellten Agarwal, Kayal und Saxena einen deterministischen Primzahltest mit polynomieller Rechenzeit vor. (Die Rechenzeit ist
7,5
z. B. durch O((log n) ) beschränkt.) Dieser Algorithmus stellte insofern einen gewaltigen Durchbruch dar, als er ein Jahrhunderte altes oenes Problem löste, nämlich
die Frage nach einem ezienten
problem ist
n
deterministischen
Verfahren für das Entscheidungs-
Primzahl oder zusammengesetzt? Andererseits ist seine Laufzeit im
Vergleich etwa zu dem hier diskutierten randomisierten Verfahren so hoch, dass nach
wie vor die randomisierten Algorithmen benutzt werden, um für kryptographische
Anwendungen Primzahlen zu erzeugen.
Da gerade Zahlen leicht zu erkennen sind, beschränken wir im Folgenden unsere
Überlegungen auf ungerade Zahlen
n ≥ 3.
2.1.1 Der Fermat-Test
Wir erinnern uns an den kleinen Satz von Fermat (Fakt 1.26):
n
ist Primzahl und
1≤a<n
⇒
an−1 mod n = 1.
Wir können diese Aussage dazu benutzen, um Belege oder Zertikate oder Zeugen dafür anzugeben, dass eine Zahl n zusammengesetzt ist: Wenn wir eine Zahl a
n−1
mit 1 ≤ a < n nden, für die a
mod n 6= 1 gilt, dann ist n denitiv keine Primzahl.
Denition 2.1
Sei
eine ungerade Zahl. Eine Zahl a mit 1 ≤ a < n − 1 heiÿt ein F-Zeuge für n,
an−1 mod n 6= 1 gilt. Wenn n zusammengesetzt ist und für a mit 1 ≤ a < n − 1
n−1
Gleichheit a
mod n = 1 gilt, heiÿt a ein F-Lügner für n.
n
wenn
die
24
Wir bemerken, dass ein F-Zeuge belegt, dass es Faktoren
k, ` > 1
mit
n = k · ` gibt,
dass aber solche Faktoren nicht angegeben oder gefunden werden müssen. Dies wird
von Primzahltests auch nicht verlangt und normalerweise auch nicht geleistet.
Man sieht sofort, dass 1 und n − 1 immer F-Lügner sind: Es gilt
n−1
und (n − 1)
≡ (−1)n−1 ≡ 1 (mod n), weil n − 1 gerade ist.
Für jede zusammengesetzte Zahl
uns, dass
n
n
gibt es mindestens einen F-Zeugen. Wir erinnern
∗
genau dann zusammengesetzt ist, wenn {1, . . . , n − 1} − Zn 6= ∅ gilt.
Lemma 2.2
Wenn
n
Beweis :
1n−1 mod n = 1
keine Primzahl ist, ist jedes
a ∈ {1, . . . , n − 1} − Z∗n
d = ggt(a, n). Dann ist auch an−1 durch d
n, n) = ggt(an−1 , n) ≥ d > 1. Daher ist an−1 mod n 6= 1.
Sei
ein F-Zeuge.
teilbar, also ggt(a
n−1
mod
{1, . . . , n − 1} − Z∗n
äuÿerst dünn. Wenn zum Beispiel n = pq für zwei Primzahlen p und q ist, dann
gilt ggt(a, n) > 1 genau dann wenn p oder q ein Teiler von a ist. Es gibt genau
p + q − 2 solche Zahlen a in {1, . . . , n − 1}, was gegenüber n sehr klein ist, wenn p und
q annähernd gleich groÿ sind. Um eine gute Chance zu haben, F-Zeugen zu nden,
∗
sollte es also mehr als nur die in {1, . . . , n − 1} − Zn geben.
Leider ist für manche zusammengesetzten Zahlen
Beispiel : n = 91 = 7 · 13.
(für gröÿere
p
und
q
n
Tabelle 3 zeigt, dass es
die Menge
18
Vielfache von 7 und 13 gibt
wird der Anteil dieser oensichtlichen F-Zeugen noch kleiner
sein), und daneben weitere 36 F-Zeugen und 36 F-Lügner in
{1, 2, . . . , 90}. In diesem
Beispiel gibt es um einiges mehr F-Zeugen als F-Lügner. Wenn dies für alle zusammengesetzten Zahlen
n
der Fall wäre, wäre es eine elegante randomisierte Strategie,
einfach zufällig nach F-Zeugen zu suchen.
Dies führt zu unserem ersten Versuch für einen randomisierten Primzahltest.
Algorithmus 2.1 Fermat-Test
Eingabe: Ungerade Zahl
n ≥ 5.
Methode:
1
2
Wähle a zufällig aus
n−1
if a
mod n 6= 1
{1, . . . , n − 1};
then return 1 else return 0.
Die Laufzeitanalyse liegt auf der Hand: Der teuerste Teil ist die Berechnung der
n−1
Potenz a
mod n durch schnelle Exponentiation, die nach den Ergebnissen von
3
Lemma 1.13 O(log n) arithmetische Operationen und O((log n) ) Bitoperationen benötigt. Weiter ist es klar, dass der Algorithmus einen F-Zeugen gefunden hat, wenn
25
Vielfache von 7
Vielfache von 13
F-Zeugen in
Z∗91
7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84
13, 26, 39, 52, 65, 78
2,
5,
6,
8, 11, 15, 18, 19, 20, 24, 31, 32,
33, 34, 37, 41, 44, 45, 46, 47, 50, 54, 57, 58,
59, 60, 67, 71, 72, 73, 76, 80, 83, 85, 86, 89
F-Lügner
1,
3,
4,
9, 10, 12, 16, 17, 22, 23, 25, 27,
29, 30, 36, 38, 40, 43, 48, 51, 53, 55, 61, 62,
64, 66, 68, 69, 74, 75, 79, 81, 82, 87, 88, 90
Tabelle 3: F-Zeugen und F-Lügner für
er 1 ausgibt, dass in diesem Fall also
ausgedrückt: Wenn
n
n
n = 91 = 7 · 13
zusammengesetzt sein muss. Umgekehrt
eine Primzahl ist, gibt der Fermat-Test garantiert 0 aus.
n = 91 wird das falsche Ergebnis 0 ausgegeben, wenn als a einer der 34 F-Lügner
34
17
auÿer 1 und 90 gewählt wird. Die Wahrscheinlichkeit hierfür ist
= 44
≈ 0,3864.
88
Für
Für viele zusammengesetzte Zahlen
Test für diese
n
n gibt es reichlich F-Zeugen, so dass der Fermat-
mit konstanter Wahrscheinlichkeit das korrekte Ergebnis liefert. Wir
analysieren das Verhalten des Fermat-Tests für solche gutmütigen Eingabezahlen
(für die
n = 91
n
ein typisches Beispiel ist).
Satz 2.3
n ≥ 9 eine ungerade zusammengesetzte Zahl. Wenn es mindestens einen F-Zeugen
b ∈ Z∗n gibt, dann liefert der Fermat-Test auf Eingabe n mit Wahrscheinlichkeit
1
gröÿer als
die korrekte Antwort 1.
2
Sei
Beweis :
b ∈ Z∗n ein F-Zeuge. Betrachte die Funktion gb : LFn → Z∗n ,
Lügner a auf gb (a) = ba mod n abbildet. Wie im Beweis von Fakt 1.26
F
dass gb injektiv ist. Weiter ist gb (a) für jedes a ∈ Ln ein F-Zeuge:
Sei
die den Fsieht man,
(ba mod n)n−1 mod n = (bn−1 mod n)((an−1 ) mod n) = bn−1 mod n 6= 1.
|
{z
}
=1
∗
Wir können also jedem F-Lügner a seinen F-Zeugen gb (a) in Zn zuordnen. Daraus
∗
folgt, dass es in Zn mindestens so viele F-Zeugen wie F-Lügner gibt. Mit Lemma 2.2
26
ergibt sich, dass
{1, . . . , n − 1}
mehr F-Zeugen als F-Lügner enthält. Daher ist die
Wahrscheinlichkeit, dass die im Fermat-Test gewählte Zahl a ein F-Lügner ist, kleiner
1
.
2
1
Die Fehlerwahrscheinlichkeit
ist natürlich viel zu groÿ. Wir verringern sie durch
2
wiederholte Ausführung des Fermat-Tests.
als
Algorithmus 2.2 Iterierter Fermat-Test
Eingabe: Ungerade Zahl
n ≥ 5,
eine Zahl
` ≥ 1.
Methode:
1
2
3
4
repeat ` times
a ← ein zufälliges Element von {1, . . . , n − 1};
if an−1 mod n 6= 1 then return 1;
return 0.
Wenn die Ausgabe 1 ist, hat der Algorithmus einen F-Zeugen für n gefunden, also ist
n zusammengesetzt. D. h.: Wenn n eine Primzahl ist, ist die Ausgabe 0. Andererseits:
∗
Wenn n zusammengesetzt ist, und es mindestens einen F-Zeugen a ∈ Zn gibt, dann ist
1 `
= 2−` .
nach Satz 2.3 die Wahrscheinlichkeit für die falsche Ausgabe 0 höchstens
2
Indem wir ` genügend groÿ wählen, können wir die Fehlerwahrscheinlichkeit so klein
wie gewünscht einstellen.
Wenn es darum geht, aus einem genügend groÿen Bereich zufällig gewählte Zahlen
darauf zu testen, ob es sich um eine Primzahl handelt, dann ist der Fermat-Test eine
sehr eziente und zuverlässige Methode. Wir kommen darauf im folgenden Abschnitt
nochmals zurück.
Wenn man allerdings über die Herkunft der zu testenden Zahl
n keine Information hat
und eventuell damit rechnen muss, dass jemand (ein Gegenspieler) absichtlich eine
besonders schwierige Eingabe vorlegt, dann stöÿt der Fermat-Test an eine Grenze. Es
gibt nämlich widerspenstige zusammengesetzte Zahlen, denen man mit diesem Test
∗
nicht beikommen kann, weil alle Elemente von Zn F-Lügner sind. Mit diesen befasst
sich der folgende Abschnitt.
2.1.2 Carmichael-Zahlen
Denition 2.4
Eine ungerade zusammengesetzte Zahl n heiÿt eine
a ∈ Z∗n die Gleichung an−1 mod n = 1 gilt.
561 = 3 · 11 · 17. Weitere kleine Carmichael-Zahlen
1729 = 7 · 13 · 19. Erst im Jahr 1994 wurde bewiesen, dass
Die kleinste Carmichael-Zahl ist
sind
1105 = 5 · 13 · 17
und
Carmichael-Zahl, wenn für alle
27
es unendlich viele Carmichael-Zahlen gibt, genauer: wenn x genügend groÿ ist, dann
2/7
gibt es in {n | n ≤ x} mehr als x
Carmichael-Zahlen. Die aktuell beste bekannte
1/3
untere Schranke ist x
. Genaueres ist über den Anteil von Carmichael-Zahlen an
den zusammengesetzten Zahlen nicht bekannt. (Alles deutet aber darauf hin, dass sie
eher selten sind.)
Wenn wir dem Fermat-Test eine Carmichael-Zahl
n
als Eingabe geben, ist die Wahr-
scheinlichkeit für die falsche Antwort 0 nach Lemma 1.31 genau
Y ϕ(n)
1
ϕ(n)
>
=
1−
.
n−1
n
p
p prim
p teilt n
Diese Wahrscheinlichkeit liegt nahe an 1, wenn
n
nur wenige und relativ groÿe Prim-
faktoren hat. An solchen Carmichael-Zahlen besteht etwa im Bereich der Zahlen im
15
16
Bereich [10 , 10 ] kein Mangel, wie ein Blick in entsprechende Tabellen zeigt. Zum
n = 651693055693681 = 72931 · 87517 · 102103
ϕ(n)/n > 0.99996.
Beispiel ist
eine Carmichael-Zahl mit
Der Wiederholungstrick zur Wahrscheinlichkeitsverbesserung hilft hier leider auch
nicht, denn wenn etwa
p0
n
der kleinste Primfaktor von
ist, und
n
nur 3 oder 4
Faktoren hat, dann sind Ω(p0 ) Wiederholungen nötig, um die Fehlerwahrscheinlichkeit
1
zu drücken. Sobald p0 mehr als 30 Dezimalstellen hat, ist dies undurchführbar.
auf
2
Für einen zuverlässigen, ezienten Primzahltest, der für
alle
Eingabezahlen funk-
tioniert, müssen wir über den Fermat-Test hinausgehen. Interessanterweise ist dies
praktisch ohne Ezienzverlust möglich.
Für spätere Benutzung stellen wir noch eine Hilfsaussage über Carmichael-Zahlen
bereit.
Lemma 2.5
Wenn
n
Beweis :
p
eine Carmichael-Zahl ist, dann ist
n
keine Primzahlpotenz.
Wir beweisen die Kontraposition: Wenn
und einen Exponenten
`≥2
Dazu genügt es, eine Zahl
ist, dann ist
a ∈
n
n = p`
für eine ungerade Primzahl
keine Carmichael-Zahl.
Z∗n anzugeben, so dass
an−1 mod n 6= 1
ist. Wir
denieren:
a := p`−1 + 1.
(Wenn z. B.
`
dass a < p
p = 7 und ` = 3 ist, ist n = 343 und a = 49 + 1 = 50.) Man sieht sofort,
= n ist, und dass a nicht von p geteilt wird, also a und n teilerfremd
28
sind; also ist
a ∈ Z∗n .
Nun rechnen wir modulo
n,
mit der binomischen Formel:
an−1 ≡ (p`−1 + 1)n−1
X n − 1
≡
(p`−1 )j
j
0≤j≤n−1
≡ 1 + (p` − 1) · p`−1
(3)
(mod n).
(Die letzte Äquivalenz ergibt sich daraus, dass für j ≥ 2 gilt, dass (` − 1)j ≥ ` ist,
`−1 j
also der Faktor (p
) = p(`−1)j durch n = p` teilbar ist, also modulo n wegfällt.)
`
`
`−1
`
Nun ist p − 1 nicht durch p teilbar, also ist (p − 1) · p
nicht durch n = p teilbar.
n−1
Damit folgt aus (3), dass a
6≡ 1 (mod n) ist, also an−1 mod n 6= 1.
Folgerung: Jede Carmichael-Zahl n lässt sich als n = n1 · n2
n2
teilerfremde ungerade Zahlen
≥3
schreiben, wo
n1
und
sind.
(Eine etwas genauere Untersuchung, die wir hier aber nicht benötigen, ergibt, dass
die Primfaktoren einer Carmichael-Zahl
n
alle verschieden sein müssen, und dass
n
mindestens drei Primfaktoren haben muss. Aus dieser Tatsache kann man entnehmen,
dass Carmichael-Zahlen eher selten sind.)
2.1.3 Nichttriviale Quadratwurzeln der 1
Lemma 2.6
p eine ungerade
b ∈ {1, p − 1}.
Wenn
Beweis :
Primzahl ist, dann gilt
b2 mod p = 1, b ∈ Zp
genau für
12 mod m = 1 und (m −
1)2 mod m = (m(m + 2) + 1) mod m = 1 ist. Nun sei b ∈ {0, . . . , p − 1} beliebig mit
b2 ≡ 1 (mod p). Dann gilt b2 − 1 ≡ 0 (mod p), also ist p ein Teiler von b2 − 1 =
(b + 1)(b − 1). Nach Fakt 1.15 ist p Teiler von b + 1 oder von b − 1. Im ersten Fall ist
b ≡ −1 (mod p), im zweiten Fall ist b ≡ 1 (mod p).
Oensichtlich gilt für jedes beliebige
m ≥ 2,
dass
Die im Lemma angegebene Eigenschaft lässt sich in ein weiteres Zertikat für zusammengesetzte Zahlen ummünzen:
Wenn es ein
dann ist
n
b ∈ {2, . . . , n − 2}
gibt, das
b2 mod n = 1
erfüllt,
zusammengesetzt.
b ∈ {2, . . . , n − 2} mit b2 mod n = 1 heiÿen nichttriviale Quadratwurzeln der 1 modulo n. Solche Zahlen gibt es nur, wenn n zusammengesetzt ist.
Zahlen
29
Beispielsweise sind die Zahlen 1, 27, 64 und 90 genau die Quadratwurzeln der 1 mo2
dulo 91; davon sind 27 und 64 = 91 − 27 nichttrivial. Wir beobachten: 27 mod 91 =
729 mod 91 = 1.
Beachte, dass
27 ≡ −1 (mod 7)
und
27 ≡ 1 (mod 13).
Allgemeiner
sieht man mit der Verallgemeinerung von Fakt 1.27 (Chinesischer Restsatz) auf
r
Faktoren leicht ein, dass es für ein Produkt n = p1 · · · pr aus verschiedenen ungerar
den Primzahlen p1 , . . . , pr genau 2 Quadratwurzeln der 1 modulo n gibt, nämlich die
Zahlen
b, 0 ≤ b < n,
die
b mod pj ∈ {1, pj − 1}, 1 ≤ j ≤ r,
erfüllen. Wenn
n
nicht
sehr viele verschiedene Primfaktoren hat, ist es also aussichtslos, einfach zufällig gewählte
b's
darauf zu testen, ob sie vielleicht nichttriviale Quadratwurzeln der
1
sind.
Dennoch wird uns dieser Begri bei der Formulierung eines ezienten Primzahltests
helfen.
2.1.4 Der Miller-Rabin-Test
Wir kehren nochmals zum Fermat-Test zurück und sehen uns die dort durchgeführte
n−1
Exponentiation a
mod n etwas genauer an. Die Zahl n − 1 ist gerade, daher kann
k
man sie als n − 1 = u · 2 schreiben, für eine ungerade Zahl u und ein k ≥ 1. Dann gilt
n−1
u
2k
a
≡ (a mod n) mod n, und wir können an−1 mod n mit k + 1 Zwischenschritten
berechnen: Mit
b0 = au mod n
b1 = b20 mod n = au·2 mod n,
2
b2 = b21 mod n = au·2 mod n,
.
.
.
i
bi = b2i−1 mod n = au·2 mod n,
.
.
.
k
bk = b2k−1 mod n = au·2 mod n
bk = an−1 mod n. Beispielsweise erhalten wir für n = 325 = 52 · 13 den Wert
n − 1 = 324 = 81 · 22 . In Tabelle 4 berechnen wir a81 , a162 und a324 , alle modulo 325,
für verschiedene a.
ist
Die Grundidee des Miller-Rabin-Tests ist nun, diese verlangsamte Berechnung der
n−1
Potenz a
mod n auszuführen und dabei nach nichttrivialen Quadratwurzeln der 1
Ausschau zu halten.
30
b0 = a81 b1 = a162 b2 = a324
a
F-Z.?
A-Z.?
×
×
×
×
2
252
129
66
7
307
324
1
32
57
324
1
49
324
1
1
65
0
0
0
126
1
1
1
201
226
51
1
×
224
274
1
1
×
Tabelle 4: Potenzen
an−1 mod n
mit Zwischenschritten,
n = 325
∗
Im Beispiel sehen wir, dass 2 ein F-Zeuge für 325 ist, der in Z325 liegt, und dass 65 ein
∗
F-Zeuge ist, der nicht in Z325 liegt. Dagegen sind 7, 32, 49, 126, 201 und 224 alles F324
Lügner für 325. Wenn wir aber 201
mod 325 mit zwei Zwischenschritten berechnen,
dann entdecken wir, dass 51 eine nichttriviale Quadratwurzel der 1 ist, was beweist,
dass 325 keine Primzahl ist. Ähnlich liefert die Berechnung mit Basis 224, dass 274
eine nichttriviale Quadratwurzel der 1 ist. Die entsprechenden Berechnungen mit 7,
162
32 und 49 dagegen liefern keine weiteren Informationen, weil 7
≡ 32162 ≡ −1
(mod 325) und 4981 ≡ −1 (mod 325) gilt. Auch die Berechnung der Potenzen von
81
126 liefert keine nichttriviale Quadratwurzel der 1, weil 126
mod 325 = 1 gilt.
Wie kann die Folge
sind
bi+1 , . . . , bk
b0 , . . . , b k
alle gleich 1. Daher beginnt die Folge
leeren) Folge von Elementen
bi = 1 or bi = n − 1, dann
b0 , . . . , bk mit einer (eventuell
überhaupt aussehen? Wenn
∈
/ {1, n − 1}
und endet mit einer (eventuell leeren)
Folge von Einsen. Diese beiden Teile können von einem Eintrag
n−1
getrennt sein;
dies muss aber nicht so sein. Alle möglichen Muster sind in Tabelle 5 angegeben.
Dabei steht ∗ für ein Element
∈
/ {1, n − 1}.
Es ergeben sich vier Fälle, mit einigen
Unterfällen:
Fall
Fall
Fall
b0 = 1.
2a: b0 = n − 1.
2b: b0 ∈
/ {1, n − 1},
1:
aber es gibt ein
In den Fällen 1, 2a und 2b gilt
bk = 1,
i ∈ {1, . . . , k − 1}
mit
bi = n − 1.
also hilft der kleine Satz von Fermat nicht
31
b0
b1 · · ·
···
bk−1
bk
Fall
1
1
···
1
1
1
···
1
1
1
n−1
1
···
1
1
1
···
1
1
2a
∗
∗ ···
∗
n−1
1
···
1
1
2b
∗
∗ ···
∗
∗
∗
···
∗
6= 1
3
∗
∗ ···
∗
1
1
···
1
1
4a
×
∗
∗ ···
∗
∗
∗
···
∗
1
4b
×
Tabelle 5: Potenzen
weiter. Die Folge
an−1 mod n
(b0 , . . . , bk )
A-Z.?
×
×
berechnet mit Zwischenschritten, mögliche Fälle.
enthält aber auch keine nichttriviale Quadratwurzel der
1. Es ergibt sich aus der Rechnung kein Hinweis darauf, dass
Fall
F-Z.?
n
zusammengesetzt ist.
bk 6= 1. Dann ist n zusammengesetzt, weil a ein F-Zeuge für n ist. Alle
b0 , . . . , bk−1 müssen von 1 und n − 1 verschieden sein.
Fall 4: b0 ∈
/ {1, n − 1}, aber es gibt ein i mit 0 < i ≤ k mit bi−1 ∈
/ {1, n − 1} und
bi = 1.
Dann ist bi−1 eine nichttriviale Quadratwurzel der 1 modulo n und damit ein Zertikat
dafür, dass n zusammengesetzt ist. (Fall 4b stellt den Sonderfall i = k dar, Fall 4a
den Fall i < k .)
3:
Werte
In den Fällen 1 und 2 kann man aus der Folge
n
b0 , . . . , b k
nichts weiter schlieÿen. (Wenn
eine Primzahl ist, entsteht eine Folge dieser Art.) In den Fällen 3 und 4 stellt die
Zahl
a
b0 , . . . , bk ) einen Beleg dafür dar, dass n keine
sich die a ∈ {1, . . . , n − 1}, die zu Fall 3 oder Fall
(mit ihren Potenzen
ist. Nach Tab. 5 lassen
Primzahl
4 führen,
wie folgt charakterisieren:
(∗)
b0 6= 1,
und
n−1
erscheint nicht in der Folge
(Man beachte, dass das letzte Folgenglied
folgender Denition.
32
bk
b0 , . . . , bk−1
zu
a.
gar keine Rolle spielt.) Dies führt zu
Denition 2.7
n ≥ 3 ungerade. Wir schreiben n − 1 = u · 2k , für u ungerade, k ≥ 1. Eine Zahl a,
i
1 ≤ a < n, heiÿt ein A-Zeuge für n, wenn au mod n 6= 1 und au·2 mod n 6= n − 1
für alle i mit 0 ≤ i < k gilt (Fälle 3 und 4). Wenn n zusammengesetzt ist und a,
1 ≤ a < n, kein A-Zeuge ist, dann heiÿt a ein A-Lügner für n (Fälle 1 und 2). Die
A
Menge der A-Lügner nennen wir Ln .
Sei
Aus der obigen Diskussion der möglichen Fälle folgert man leicht folgende Beobachtungen.
Lemma 2.8
Sei
n≥3
ungerade.
(a) Wenn
a
n
ein F-Zeuge für
(b) Wenn es einen A-Zeugen
a
ist, dann ist
für
n
a
ein F-Zeuge für
a ist auch ein A-Zeuge
(b0 , . . . , bk ) Fall 3 oder
für
n
n.
a
n
zusammengesetzt.
die zugehörige Folge
ist, dann gilt
(b) Sei
auch ein A-Zeuge.
gibt, dann ist
Beweis : Sei 1 ≤ a < n und sei b0 , . . . , bk
(a) Wenn
a
bk 6= 1,
i
au·2 mod n, 0 ≤ i ≤ k .
und daher tritt Fall 3 ein, und
ein A-Zeuge für
n.
Dann trit auf die Folge
Fall 4 zu. Wir haben oben schon gesehen, dass dann
Der Miller-Rabin-Test besteht nun einfach darin, ein aus
wähltes
a
darauf zu testen, ob
a
n
eine
zusammengesetzte Zahl sein muss.
{1, . . . , n − 1}
zufällig ge-
ein A-Zeuge ist.
Historisch hat schon der russische Mathematiker M. Artjuhov 1966 vorgeschlagen, die
u·2i
Folge bi = a
mod n, 0 ≤ i ≤ k , in einem Primzahltest für n zu benutzen. Im Jahr
1976 stellte G. M. Miller einen deterministischen Algorithmus vor, der auf dieser Idee
2
beruhte. Er testete die kleinsten O((log n) ) Elemente a ∈ {2, 3, . . . , n − 1} auf die
Eigenschaft, A-Zeugen zu sein. Der Algorithmus hat polynomielle Laufzeit und liefert
das korrekte Ergebnis, wenn die erweiterte Riemannsche Vermutung (ERH) stimmt,
eine berühmte Vermutung aus der Zahlentheorie, die bis heute unbewiesen ist. Um
1980 schlugen M. Rabin und (unabhängig) L. Monier vor, Millers Algorithmus so zu
modizieren, dass die zu testende Zahl
a
zufällig gewählt wird, und bewiesen, dass
dieser Algorithmus konstante Fehlerwahrscheinlichkeit haben wird. Der Algorithmus
heiÿt heute allgemein der
Miller-Rabin-Test .
Der Test selbst ist leicht und sehr ezient durchführbar: Man berechnet zunächst
b0 = au mod n und testet, ob b0 ∈ {1, n − 1} ist. Falls ja, trit Fall 1 bzw. Fall 2a zu,
die Ausgabe ist 0. Falls nein, berechnet man durch iteriertes Quadrieren nacheinander
die Werte
b1 , b2 , . . .,
bis
33
•
entweder der Wert
•
oder der Wert 1 auftaucht (Fall 4a,
•
oder
b1 , . . . , bk−1
n−1
auftaucht (Fall 2b, Ausgabe 0)
a
ist A-Zeuge, Ausgabe 1)
berechnet worden sind, ohne dass Werte
kommen sind (Fall 3 oder 4b,
a
n−1
oder
1
vorge-
ist A-Zeuge, Ausgabe 1).
In Pseudocode sieht das Verfahren dann folgendermaÿen aus. Im Unterschied zur
bisherigen Beschreibung wird nur eine Variable
b0 , b1 , . . .
b benutzt, die nacheinander die Werte
aufnimmt.
Algorithmus 2.3 Der Miller-Rabin-Primzahltest
Eingabe: Eine ungerade Zahl
n ≥ 5.
Methode:
1
2
3
4
5
6
7
8
9
Bestimme
u
k ≥ 1 mit n − 1 = u · 2k ;
{1, . . . , n − 1};
ungerade und
wähle zufällig ein a aus
b ← au mod n; // mit schnellem Potenzieren
if b ∈ {1, n − 1} then return 0; // Fall 1 oder 2a
for j from 1 to k − 1 do // wiederhole (k − 1)-mal
b ← b2 mod n;
if b = n − 1 then return 0; // Fall
if b = 1 then return 1; // Fall 4a
2b
return 1. // Fall 3 oder 4b
log n Divisionen durch 2, um u und k zu nden. (Zeile 1). (Wenn man benutzt, dass n normalerweise in Binärdarstellung gegeben sein wird, ist die Sache noch einfacher: k ist die
Zahl der Nullen, mit der die Binärdarstellung von n − 1 aufhört, u ist die Zahl, die
Wie steht es mit der Laufzeit des Algorithmus? Man benötigt höchstens
durch den Binärstring ohne diese letzten Nullen dargestellt wird.) Die Berechnung
u
von a mod n mit schneller Exponentiation 3 benötigt O(log n) arithmetische Opera3
tionen und O((log n) ) Bitoperationen (mit der Schulmethode für Multiplikation und
Division). Die Schleife in Zeilen 58 wird höchstens k -mal durchlaufen; oenbar ist
k ≤ log n. In jedem Durchlauf ist die Multiplikation modulo n die teuerste Operation.
Insgesamt benutzt der Algorithmus O(log n) arithmetische Operationen auf Zahlen,
2
3
die kleiner als n sind, und O((log n) ) Bitoperationen. Wenn man die Laufzeit mit
dem Fermat-Test vergleicht, und dazu die Details der schnellen Exponentiation ansieht, stellt man fest, dass die Multiplikationen modulo
n
in beiden Fällen exakt
gleich aussehen, nur dass beim Miller-Rabin-Test unterwegs noch Zwischenergebnisse darauf getestet werden, ob sie gleich 1 oder gleich
kaum Mehraufwand.
34
n−1
sind dies verursacht
Nun wenden wir uns dem Ein-/Ausgabeverhalten des Miller-Rabin-Tests zu.
Lemma 2.9
Wenn die Eingabe
n
für den Miller-Rabin-Test eine Primzahl ist, dann wird
0
aus-
gegeben.
Beweis : Wir haben oben schon festgestellt, dass Ausgabe 1 genau dann erfolgt, wenn
die zufällig gewählte Zahl
A-Zeugen, wenn
n
a
ein A-Zeuge ist. Nach Lemma 2.8(b) gibt es nur dann
zusammengesetzt ist.
2.1.5 Fehlerschranke für den Miller-Rabin-Test
Wir müssen nun noch die Fehlerwahrscheinlichkeit des Miller-Rabin-Tests für den
Fall analysieren, dass
n
eine zusammengesetzte (ungerade) Zahl ist. Dies wird also
für diesen Abschnitt angenommen.
Wir beweisen, dass die Wahrscheinlichkeit, dass der Miller-Rabin-Test die (uner1
ist. Dazu wollen wir ähnlich vorgehen wie
wünschte) Antwort 0 gibt, kleiner als
2
bei der Analyse des Fermat-Tests für Nicht-Carmichael-Zahlen (Beweis von Satz 2.3).
∗
Dort haben wir gezeigt, dass die F-Lügner für solche n höchstens die Hälfte von Zn
ausmachen.
Wenn
n
keine Carmichael-Zahl ist, ist dies leicht: Nach Lemma 2.8(a) gilt
F
LA
n ⊆ Ln ,
und wir können den Beweis von Satz 2.3 verwenden.
A
Es bleibt der Fall, dass n eine Carmichael-Zahl ist. Unser Plan ist, eine Menge Bn mit
∗
∗
A
LA
n ⊆ Bn ⊆ Zn zu denieren, die höchstens die Hälfte der Elemente von Zn enthält.
Weil
u
ungerade ist, gilt
0
(n − 1)u·2 ≡ (n − 1)u ≡ (−1)u ≡ −1 ≡ n − 1
(mod n).
Sei i0 das gröÿte i ∈ {0, 1, . . . , k} mit der Eigenschaft, dass es einen A-Lügner a# mit
i
au·2
# mod n = n − 1 gibt. (Wir werden dieses a# weiter unten nochmals benutzen.)
u·2k
Weil n eine Carmichael-Zahl ist, gilt a
mod n = an−1 mod n = 1 für alle a ∈ Z∗n ,
und daher
0 ≤ i0 < k .
Wir denieren:
i
BnA = {a ∈ Z∗n | au·2 0 mod n ∈ {1, n − 1} }.
(4)
Zur Veranschaulichung betrachte man Abb. 6. In der dort angegebenen Matrix ent∗
spricht jede Zeile einem der ϕ(n) Elemente von Zn , beginnend mit a1 = 1 und
35
a
b0
b1
···
a1 = 1
1
1
···
1
1
1
···
1
a2 = n − 1 n − 1
···
bk−1
bk
1
···
1
1
1
1
···
1
1
bi 0
a3
∗
∗
···
∗
n−1
1
···
1
1
a4
∗
∗
···
n−1
1
1
···
1
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
u·21
u·2i0 −1
u·2i0
u·2i0 +1
u·2k−1
a
au
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
a#
∗
∗
···
∗
n−1
1
···
1
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
a?
∗?
∗?
···
∗?
∗?
···
···
···
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
aϕ(n)
?
?
···
?
?
?
···
?
1
a
···
a
Tabelle 6: Sicht auf
BnA
36
a
a
als Teilmenge von
···
Z∗n
a
1
a2 = −1 ≡ n − 1. In der Zeile für a ist die von a erzeugte Folge b0 , . . . , bk eingetragen. Dass n eine Carmichael-Zahl ist, drückt sich dadurch aus, dass alle Einträge
in der bk -Spalte gleich 1 sind. Der Eintrag für a2 = −1 in der b0 -Spalte ist n−1. Spalte
i0 ist die am weitesten rechts stehende Spalte, in der es einen Eintrag −1 ≡ n − 1
∗
A
gibt, und a# ist ein Element von Zn , das zu diesem Eintrag führt. Die Menge Bn
∗
besteht aus den Elementen von Zn , die in Spalte i0 Eintrag 1 oder n − 1 haben. A
Wir werden zeigen, dass diese Menge Bn die gewünschten Eigenschaften hat.
Lemma 2.10
(a)
A
LA
n ⊆ Bn .
(b)
BnA ( Z∗n .
(c)
|BnA | ≤ 12 |Z∗n |,
Beweis :
also
Pra∈{1,...,n−1} (a
ist A-Lügner)
< 21 .
Teil (a) ist nur die Überprüfung, dass die Denition technisch sinnvoll ist.
Der eigentlich interessante Teil ist (b). Teil (c) ist dann Routine.
a ein beliebiger A-Lügner.
i
Fall 1: au mod n = 1. Dann ist auch au·2 0 mod n = 1, und daher gilt a ∈ BnA . (Die
Zeile zu a in Abb. 6 sieht aus wie die von a1 = 1.)
i
Fall 2: au·2 mod n = n − 1 für ein i < k . Dann ist 0 ≤ i ≤ i0 nach der Denition
A
von i0 . Wenn i = i0 ist, haben wir direkt, dass a ∈ Bn (Beispiel: a3 oder a# ); wenn
i < i0 ist, dann gilt
(a) Sei
i
i −i
i
au·2 0 mod n = (au·2 mod n)2 0
also ebenfalls
a ∈ BnA
(Beispiel:
a2
oder
mod n = 1,
a4 ).
(b) Wir benutzen die in Lemma 2.5 beobachtete Eigenschaft von Carmichael-Zahlen,
keine Primzahlpotenz zu sein. Nach diesem Lemma können wir
für teilerfremde ungerade Zahlen
n1 , n2 .
n = n1 · n2
schreiben,
Im Folgenden werden wir diese Zerlegung
und die Eigenschaften aus dem Chinesischen Restsatz (Fakt 1.27) benutzen.
Die grobe Idee der nun folgenden Konstruktion ist folgende: Wir haben das Element
i
i0
1 mit 1u·2 0 mod n = 1 und das Element a# mit au·2
≡ −1 (mod n). Aus diesen
#
∗
beiden Elementen basteln wir mit Hilfe des Chinesischen Restsatzes ein b ∈ Zn ,
n1 wie 1 und modulo n2
∈
/ {1, n − 1} gilt, also b ∈
/ BnA ist.
das sich modulo
u·2i0
b
wie
37
a#
verhält. Es wird sich zeigen, dass
x2 = a# mod n2 . Nach dem Chinesischen
bestimmte Zahl b ∈ {0, 1, . . . , n − 1}, die
Wir führen diese Idee jetzt formal durch. Sei
Restsatz (Fakt 1.27) gibt es eine eindeutig
b≡1
erfüllt. (Es folgt
(mod n1 )
b ≡ a# (mod n2 ).)
b ≡ x2
und
Wir zeigen, dass
(mod n2 )
b
in
Beh. 1: b ∈ Z∗n .
(5)
Z∗n − BnA
liegt.
Bew.: Oensichtlich gilt bn−1 mod n1 = 1n−1 mod n1 = 1. Weiter haben wir:5
bn−1 mod n2 = an−1
mod n2 = ((an−1
#
# ) mod n) mod n2 = 1 mod n2 = 1.
n−1
Wegen der Eindeutigkeitsaussage im Chinesischen Restsatz folgt daraus b
mod n =
1. Nach Lemma 2.2 folgt b ∈ Z∗n .
b∈
/ BnA .
A
: Indirekt. Annahme: b ∈ Bn .
i
u·2i0
1.
: b
mod n = 1. Dann wird bu·2 0 − 1 von n geteilt, also auch von n2 . Also
u·2i0
ist b
mod n2 = 1. Andererseits gilt, wenn wir modulo n2 rechnen:
Beh. 2:
Bew.
Fall
i
i
i
i
0
0
0
bu·2 0 ≡ xu·2
≡ au·2
≡ (au·2
mod n) ≡ n − 1 ≡ −1
2
#
#
(mod n2 ),
ein Widerspruch.
2.
Fall : bu·2 0 mod n = n − 1.
i
n1 .
Also ist
b
u·2i0
Dann wird
mod n1 = n1 − 1.
i
bu·2 0 + 1
von
u·2i0
b
Andererseits gilt
n geteilt, also auch von
i
≡ 1u·2 0 ≡ 1 (mod n1 ),
ebenfalls ein Widerspruch.
(c) Wie im Beweis von Satz 2.3 betrachtet man die injektive Funktion
ba mod n ∈ Z∗n . Zudem gilt gb (a) ∈
/ BnA für jedes a ∈ BnA , denn
i
i
i
i
gb : BnA 3 a 7→
i
gb (a)u·2 0 mod n = (bu·2 0 mod n)(au·2 0 ) mod n ∈ {bu·2 0 mod n, (n − bu·2 0 ) mod n}.
Daraus ergibt sich sofort
|BnA | ≤ 21 |Z∗n |.
1
Wir haben also eine Schranke von
für die Irrtumswahrscheinlichkeit im Miller2
Rabin-Algorithmus bewiesen. Eine etwas kompliziertere Analyse zeigt, dass sogar die
1
Fehlerschranke
gilt; man kann auch zeigen, dass es zusammengesetzte Zahlen n
4
gibt (zum Beispiel 703 = 19 · 37), bei denen eine Fehlerwahrscheinlichkeit von fast
1
tatsächlich auftritt. Durch `-fache Wiederholung, ebenso wie in Algorithmus 2.2,
4
−`
kann man die Fehlerschranke auf 4
reduzieren. Wir kürzen den Miller-Rabin-Test
mit MiRa-Test ab. Man beachte, dass bei jedem neuen Aufruf eine neue Zufallszahl
a
gewählt wird.
5 Wir verwenden hier und im Folgenden: Für beliebige
weil
x − (x + kn)
durch
n,
also erst recht durch
n1
38
k, x
teilbar ist.
ist
x ≡ (x + kn) (mod n1 ).
Dies gilt,
Algorithmus 2.4 Iterierter MR-Test
Eingabe: Ungerade Zahl
n ≥ 5,
` ≥ 1.
eine Zahl
Methode:
1
2
3
repeat ` times
if MiRa-Test(n) = 1 then return 1;
return 0;
Diesen Test wollen wir kurz IterMiRa(n, `) nennen. Wir erhalten zusammenfassend:
Proposition 2.11
Algorithmus 2.4 benötigt O(` · log n) arithmetische Operationen auf Zahlen, die klei2
3
ner als n sind, und O(` · (log n) ) Bitoperationen. Wenn n eine Primzahl ist, ist die
Ausgabe
0,
n
zusammengesetzt ist, ist die Wahrscheinlichkeit, dass
−`
ben wird, kleiner als 4 .
2.2
wenn
0
ausgege-
Die Erzeugung von Primzahlen
Für kryptographische Anwendungen (zum Beispiel für die Erzeugung von Schlüsselpaaren für das RSA-Public-Key-Kryptosystem) werden vielzirige Primzahlen benötigt. Eine typische Aufgabe in diesem Zusammenhang könnte lauten:
Finde eine zufällige Primzahl mit
Dabei hängt
µ
µ
Bits!
von der Anwendung ab; wir können uns z. B.
µ = 512
oder
µ = 2048
sein.
Man erinnere sich an den Primzahlsatz und an den Satz von Finsler, die angeben,
wie viele Primzahlen es in
[m, 2m)
gibt.
Ein naheliegender Ansatz zur Erzeugung einer zufälligen Primzahl in
folgender: Man wählt wiederholt eine (ungerade) Zahl aus
[m, 2m)
ist
[m, 2m) zufällig und wendet
auf sie den Miller-Rabin-Test an. Dies wiederholt man, bis eine Zahl gefunden wurde,
die die Ausgabe 0 liefert.
Algorithmus 2.5 GetPrime Randomisierte Primzahlerzeugung
Eingabe: Zahl
m ≥ 2,
Zahl
`≥1
// Zuverlässigkeitsparameter .
Methode:
1
2
3
4
repeat
n←
zufällige ungerade Zahl in
until IterMiRa(n, `) = 0;
return n.
[m, 2m);
// Algorithmus 2.4
39
Die Ausgabe ist korrekt, wenn er eine Primzahl zurückgibt, ein Fehler tritt auf, wenn
eine zusammengesetzte Zahl zurückgegeben wird. Auf den ersten Blick könnte man
meinen (aufgrund von Proposition 2.11), dass die Fehlerwahrscheinlichkeit höchstens
1/4` ist eben die Fehlerwahrscheinlichkeit des iterierten MiRa-Tests. Wir werden
sehen, dass wir auf der Basis der Analyse des Miller-Rabin-Tests nur ein etwas schwä-
6
cheres Ergebnis bekommen.
Wir denieren:
Primm := {p ∈ [m, 2m) | p
ist Primzahl}.
Satz 2.12
Bei der Anwendung von Algorithmus 2.5 auf eine gerade Zahl
(a) Für jedes
p ∈ Primm
gilt
m
gilt
:
Pr(GetPrime(m, `) = p | GetPrime(m, `) ∈ Primm ) =
In Worten
:
:
Jede Primzahl in
[m, 2m)
1
.
|Primm |
hat dieselbe Wahrscheinlichkeit, als Er-
gebnis zu erscheinen.
(b)
3 ln(2m)
=O
Pr(GetPrime(m, `) ∈
/ Primm ) ≤
2 · 4`
((!)
Nicht
1/4` ,
log m
4`
.
)
wie naiv vermutet.
3
(c) Die erwartete Rundenzahl ist ≤
ln(2m), der erwartete Rechenaufwand ist
2
O((log n)2 ) arithmetische Operationen und O((log n)3 ) Bitoperationen.
Beweis : (a) Eine Primzahl wird als Resultat genau dann geliefert, wenn keine zusammengesetzte Zahl fälschlicherweise vom Miller-Rabin-Test akzeptiert wird, bevor (in
Zeile
2)
die erste echte Primzahl gewählt wird. Jede der Primzahlen in
[m, 2m)
hat
dieselbe Wahrscheinlichkeit, diese erste gewählte Primzahl zu sein.
6 Tatsächlich ist die Fehlerwahrscheinlichkeit durch
1/4`
beschränkt. Dies kann man aber nur
durch sehr fortgeschrittene zahlentheoretische Untersuchungen über das Verhalten einer zufälligen
ungeraden Zahl beim Miller-Rabin-Test beweisen [P. Beauchemin, G. Brassard, C. Crépeau, C.
Goutier, C. Pomerance: The generation of random numbers that are probably prime. J. Cryptology
1(1): 53-64 (1988)].
40
(b)
Pr(GetPrime(m, `) ∈
/ Primm )
= Pr ∃i ≥ 1 : in Runden j = 1, . . . , i − 1
wird eine
zusammengesetzte Zahl gewählt
in Runde
i
≤
i≥1
|Primm |
1−
m/2
n gewählt
n liefert 0
wird zusammengesetzte Zahl
und der iterierte MiRa-Test auf
X
und erkannt ∧
i−1
·
1
4`
1
m/2
· `
|Primm | 4
3 ln(2m)
.
≤
2 · 4`
=
Wir haben benutzt, dass es in
[m, 2m) genau m/2 ungerade Zahlen gibt (m ist gerade).
Die letzte Ungleichung folgt aus der Ungleichung von Finsler (Satz 1.20).
(c) Da man in jeder Runde mit Wahrscheinlichkeit mindestens
wählt, ist die erwartete Rundenzahl nicht gröÿer als
Bemerkung:
m/2
|Primm |
|Primm |
eine Primzahl
m/2
= O(log m).
Bei der Erzeugung zufälliger Primzahlen für kryptographische Zwecke
2
wird man aus Ezienzgründen nicht unseren Algorithmus anwenden, der (log n)
Multiplikationen benötigt, sondern eine Kombination zweier verschiedener Primzahltests (z. B. Miller-Rabin und Lucas Strong Probable Prime Test) mit sehr wenigen
Iterationen und einem Test auf Teilbarkeit durch sehr kleine Primteiler. Dies erfordert nur
O(log n)
Multiplikationen. Die Dichte der zusammengesetzten Zahlen, die
von einem solchen Test nicht erkannt werden, ist als sehr gering einzuschätzen. Über
eine interessante experimentelle Untersuchung hierzu berichtet die kurze Notiz
people.csail.mit.edu/rivest/Rivest-FindingFourMillionLargeRandomPrimes.ps
von Ron Rivest (bekannt von RSA und von Cormen, Leiserson, Rivest und Stein).
A
Beweise und Bemerkungen für Abschnitt 1
Beweis
von
Lemma 1.6:
D = {sx + ty | s, t ∈ Z}. Weil x2 + y 2 > 0 eine Zahl in D
positives Element c. Wir wollen zeigen, dass c = 1 ist. Dazu
(a) Betrachte die Menge
ist, hat
D
ein kleinstes
41
wählen wir
s, t so, dass c = sx + ty
gilt und schreiben
x = qc + r
mit
0 ≤ r < c. Dann
ist
r = x − qc = x − qsx − qty = (−qs)x + (1 − qt)y,
r ∈ D. Nach Wahl von c kann aber r nicht positiv sein, also folgt r = 0.
Daraus folgt x = qc, also ist x durch c teilbar. Ganz genauso sieht man, dass auch y
durch c teilbar ist. Weil x und y teilerfremd sind, muss c = 1 sein.
also ist
= ggt(x, y). Wir denieren ganze Zahlen x0 = x/d und y 0 = y/d. Natürlich
y 0 teilerfremd (sonst wäre d nicht der gröÿte gemeinsame Teiler von x und
y ). Nach Teil (a) gibt es s, t mit sx0 + ty 0 = 1. Daraus folgt sx + ty = sx0 d + ty 0 d = d.
(b) Es sei d
0
sind x und
Bemerkung A.1
zu Fakt 1.11
Wenn man es genau nimmt, sind die Elemente von
Zm
nicht Zahlen, sondern Äqui-
valenzklassen
[a] = {qm + a | q ∈ Z},
für
0 ≤ a < m,
zur Äquivalenzrelation
x≡y
(mod m),
die durch m ist Teiler von
(auch:
x − y
x ≡ y(m)
oder
x ≡m y ),
deniert ist (vgl. Fakt. 1.10). Die Operationen
Z11 , dass [4] + [7] =
[4] und [7] zueinander invers. Allgemeiner gilt in jedem Zm
die Gleichheit [a] + [m − a] = [m] = [0], d. h., [m − a] ist das additive Inverse −[a]
zu [a]. Multiplikativ gilt in Zm , dass [1] neutrales Element ist, und dass [1] · [1] = [1]
und [m − 1] · [m − 1] = [m(m − 2) + 1] = [1], also [1] und −[1] = [m − 1] (triviale)
Quadratwurzeln der 1 sind.
Es ist bequem, die eckigen Klammern wegzulassen und für [i] einfach i zu schreiben.
Man muss dann nur aufpassen, dass man Ausdrücke wie −1 richtig interpretiert,
nämlich als das additive Inverse von 1 in Zm , also [m − 1].
werden auf den Repräsentanten ausgeführt, zum Beispiel gilt in
[11] = [0]
ist, also sind
Wenn man den rekursiven schnellen Exponentiationsalgorithmus zur Berechnung von
xn mod m (Algorithmus 1.3)
formulieren möchte, benötigt man die Binär-
iterativ
darstellung
b k . . . b1 b 0
von
n
in der Reihenfolge von links nach rechts. Diese Dar-
stellung ist oft durch die rechnerinterne Darstellung gegeben. Alternativ kann man
die Binärziern von
mitteln. In Runde
i
n
durch iterierte Division in der Reihenfolge b0 , b1 , . . . , bk er2i
benötigt man dann die Potenz x mod m als Faktor. Diesen
42
2i
kann man einfach durch iteriertes Quadrieren ermitteln, mit der Formel x mod m =
i−1
(x2 mod m)2 mod m. Dieser Ansatz führt zu folgendem alternativen Verfahren, das
2
ebenfalls O((log n)(log m) ) Ziernoperationen erfordert.
Algorithmus A.1 Schnelle modulare Exponentiation, iterativ
Eingabe: Ganze Zahlen
x, n ≥ 0,
and
m ≥ 1.
Methode:
0
1
2
3
4
5
6
7
8
u, s, c: integer;
u ← n;
s ← x mod m;
c ← 1;
while u ≥ 1 repeat
if u ungerade then c ← (c · s) mod m;
s ← s · s mod m;
u ← u div 2;
return c;
Hier ein Beispiel für den Ablauf: Dabei ist
x = 2, n = 4321 Binärdarstellung bk . . . b0 =
1000011100001), m = 101.
i
0
1
2
3
4
5
6
7
8
9
10
11
12
In Zeile
2
wird
stellung von
n
s
x mod m = x2 mod m initialisiert, und u mit n. Die Binärdarbk . . . b1 b0 sein, mit bk = 1. In jedem Schleifendurchlauf wird u in
mit
soll
162
542
882
682
792
802
372
562
52
252
si
bi
ci
1
2 = 2 1
2
2
2 = 4 0
2
2
4 = 16 0
2
mod 101 = 54 0
2
mod 101 = 88 0
2
mod 101 = 68 1 2 · 68 mod 101 = 35
mod 101 = 79 1 35 · 79 mod 101 = 38
mod 101 = 80 1 38 · 80 mod 101 = 10
mod 101 = 37 0
10
mod 101 = 56 0
10
mod 101 = 5 0
10
mod 101 = 25 0
10
mod 101 = 19 1 10 · 19 mod 101 = 89
0
43
(i + 1)-sten Mal ausgeführt wird, enthält u
die Zahl mit Binärdarstellung bk bk−1 . . . bi . In Zeile 6 jedes Durchlaufs wird der Inhalt
von s quadriert (modulo m); wenn also Zeile 5 zum (i + 1)-sten Mal ausgeführt wird,
2i
enthält s die Zahl si = x mod m. Das letzte Bit bi von u wird in Zeile 5 benutzt,
um zu entscheiden, ob p mit si multipliziert werden soll oder nicht. Mit vollständiger
Induktion zeigt man, dass nach der i-ten Ausführung von Zeile 5 die Variable p die
Q
2j
Zahl
mod m enthält. Die Abarbeitung der Schleife hält, wenn u 0 ge0≤j≤i, bj =1 x
worden ist, was oenbar nach genau k + 1 Durchläufen der Fall ist. An dieser Stelle
Q
2j
enthält p das gewünschte Ergebnis
mod m = xn mod m.
0≤j≤k, bj =1 x
Zeile
7
halbiert; wenn also Zeile
Beweis
von
5
zum
Lemma 1.22:
⇒: Es sei
ab mod m = 1. Das heiÿt: Es gibt ein q ∈ Z mit ab − qm = 1. Wenn nun
eine Zahl d > 0 sowohl a als auch m teilt, dann teilt d auch ab − qm = 1, also ist
d = 1. Also sind a und m teilerfremd.
⇐:
a und m seien teilerfremd. Nach Lemma 1.6(a) gibt es x, y ∈ Z mit xa+ym = 1.
Setze b := x mod m. Dann gilt:
(a · b) mod m = (a · (x mod m)) mod m = ax mod m = 1,
d. h.
b
ist ein multiplikatives Inverses von
Beweis
in
Zm
von
a.
Fakt 1.24: Natürlich ist die 1 das neutrale Element der Multiplikation
und in
Z∗m .
Wir bemerken zuerst, dass
a
1 = xa + ym = zc + um
schreiben, und erhält daraus
zu
m
unter Multiplikation modulo
abgeschlossen ist: Seien
und
c
Z∗m
m
teilerfremd. Nach Lemma 1.6(a) kann man
1 = (xa + ym)(zc + um) = (xz)(ac) + (xau + yzc + yum)m.
Wieder nach Lemma 1.6(a) folgt daraus, dass
ac
und
m
teilerfremd sind.
∗
Nach Lemma 1.22 hat jedes Element von Zm ein multiplikatives Inverses b ∈ Zm .
∗
Weil natürlich a auch das Inverse von b ist, folgt nach Lemma 1.22 auch, dass b ∈ Zm
ist.
Beweis
von
⇒: Sei
Proposition 1.25:
m eine Primzahl. Dann ist jedes a ∈ {1, . . . , m} = Zm −{0} zu m teilerfremd;
Z∗m = Zm − {0}.
nach der Denition folgt
⇐: Sei
ist
k =
modulo
m
eine zusammengesetzte Zahl, etwa durch
ggt(k, m)
m
> 1,
also kann
k
b
gleich
1
mit
2<k<m
teilbar. Dann
nach Lemma 1.22 kein multiplikatives Inverses
haben. (Man sieht auch direkt, dass
ist, also für kein
k
kb mod m = kb − qm
durch
k
teilbar
sein kann.)
44
Herunterladen