Kurzskript zur elementaren Zahlentheorie und RSA - Institut für ...
Kurzskript zur elementaren Zahlentheorie und RSA - Institut für ...
Kurzskript zur elementaren Zahlentheorie und RSA - Institut für ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Universität Paderborn<br />
Fakultät <strong>für</strong> Elektrotechnik, Informatik <strong>und</strong> Mathematik<br />
<strong>Institut</strong> <strong>für</strong> Mathematik<br />
Elementare <strong>Zahlentheorie</strong><br />
&<br />
<strong>RSA</strong><br />
Eine kurze Wiederholung im Rahmen der Vorlesung<br />
“Mathematik <strong>für</strong> Informatiker I”<br />
(Wintersemester 2006/2007)<br />
Kai Gehrs<br />
gehrs@mupad.de<br />
Paderborn, 14. Februar 2007
Inhaltsverzeichnis<br />
Vorbemerkung 2<br />
1 Gr<strong>und</strong>lagen 2<br />
1.1 “Repeated Squaring” (Effizientes Potenzieren) . . . . . . . . . . 2<br />
1.2 Der Euklidische Algorithmus . . . . . . . . . . . . . . . . . . . . 3<br />
1.3 Restklassenringe <strong>und</strong> modulares Rechnen . . . . . . . . . . . . . 6<br />
2 Die Eulersche ϕ-Funktion 9<br />
2.1 Einige gruppentheoretische Resultate . . . . . . . . . . . . . . . 9<br />
2.1.1 Der Satz von Lagrange. . . . . . . . . . . . . . . . . . . . 10<br />
2.1.2 Der Satz von Euler. . . . . . . . . . . . . . . . . . . . . . 10<br />
2.1.3 Der kleine Satz von Fermat. . . . . . . . . . . . . . . . . 10<br />
3 Das <strong>RSA</strong>-Verfahren 11<br />
4 Ausgewählte Übungsaufgaben mit Lösungen 13<br />
4.1 Aufgabe 16: (Primfaktoren) . . . . . . . . . . . . . . . . . . . . 14<br />
4.2 Aufgabe 17: (Restklassen modulo Primpotenzen) . . . . . . . . 14<br />
4.3 Aufgabe 19: (Einheiten, Nullteiler <strong>und</strong> Partitionen) . . . . . . . 15<br />
4.4 Aufgabe 20: (Satz von Wilson) . . . . . . . . . . . . . . . . . . 15<br />
4.5 Aufgabe 23: (Modulares Rechnen) . . . . . . . . . . . . . . . . 16<br />
Literaturverzeichnis 17
2 1 GRUNDLAGEN<br />
Vorbemerkung<br />
Bei den vorliegenden Notizen handelt es sich um einen Auszug aus einem Skript<br />
über elementare Kryptographie. Diese Notizen wurden also nicht explizit <strong>für</strong> die<br />
Vorlesung “Mathematik <strong>für</strong> Informatiker I” geschrieben, sondern entstammen<br />
einem teilweise allgemeineren Kontext.<br />
Die hier angeführten Argumentationen <strong>und</strong> Beweise <strong>zur</strong> Begründung der<br />
Korrektheit bestimmter Beispiele <strong>und</strong>/oder Resultate sind zum Teil von<br />
Prof. Dr. Henning Krause im Rahmen der Vorlesung in der vorliegenden<br />
Form oder Notation nicht behandelt worden. Ferner erheben diese Notizen<br />
keinen Anspruch darauf, Algorithmen wie etwas den Erweiterten Euklidischen<br />
Algorithmus oder das Wiederholte Quadriere (“Repeated Squaring”) exakt<br />
in der Form darzustellen, wie die Resultate auf den Folien der Vorlesung von<br />
Prof. Dr. Henning Krause zu finden sind. Daher ist das Studium des Inhalts<br />
dieses <strong>Kurzskript</strong>s auch nicht relevant <strong>für</strong> die anstehenden Prüfungsklausuren<br />
im eigentlichen Sinne.<br />
Es ist lediglich so, dass die vorliegenden Notizen als Ergänzung zu der Zusatzübung<br />
Elementare <strong>Zahlentheorie</strong> vom 13.02.2007 gedacht sind. Wer also<br />
gerne noch einmal bestimmte Resultate in Form eines Fließtextes wiederholen<br />
möchte, kann dieses <strong>Kurzskript</strong> (auch unter Auslassen der hier angegebenen Beweise)<br />
noch einmal zu Wiederholungszwecken nutzen. Fassen Sie diese Notizen<br />
also einfach als optionales Bonusmaterial auf.<br />
1 Gr<strong>und</strong>lagen<br />
1.1 “Repeated Squaring” (Effizientes Potenzieren)<br />
In einer Reihe kryptographischer Verfahren ist es von essentieller Wichtigkeit,<br />
dass man effizient auch große Potenzen von Gruppenelementen berechnen kann.<br />
Das in diesem Abschnitt kurz vorgestellte Verfahren kann universell in einer<br />
beliebigen Gruppe G verwendet werden, um x k <strong>für</strong> ein Element x ∈ G <strong>und</strong> k ∈ N<br />
zu berechnen. Aus diesem Gr<strong>und</strong> geben wir den Algorithmus <strong>zur</strong> Berechnung<br />
solcher Potenzen auch zunächst in sehr allgemeiner Form an.<br />
Algorithmus 1.1. (“Repeated Squaring”) Sei G eine Gruppe, x ∈ G <strong>und</strong><br />
k ∈ N. Ferner sei k = ∑ n−1<br />
i=0 k i · 2 i die Binärdarstellung der Zahl k mit k n−1 = 1.<br />
(1) Setze y := x.
1.2 Der Euklidische Algorithmus 3<br />
(2) Für i = n − 2, . . . , 0 berechne:<br />
y := y 2<br />
Ist k i = 1, so berechne zusätzlich y := y · x.<br />
(3) Gebe y = x k aus.<br />
Anstatt eines Korrektheitsbeweises, bei dem man die Gültigkeit einer entsprechend<br />
geschickt gewählten Invariante nachweist, betrachten wir ein kleines Beispiel:<br />
Beispiel 1.2. Sei G eine Gruppe <strong>und</strong> x ∈ G. Wir wollen x 20 mit Hilfe von<br />
Algorithmus 1.1 berechnen. Es ist k 4 k 3 k 2 k 1 k 0 = 10100 die Binärdarstellung der<br />
Zahl 20. Zuerst setzen wir y := x. Wegen k 3 = 0 setzen wir y := y 2 = x 2 <strong>und</strong><br />
verzichten auf eine zusätzliche Multiplikation mit x. Im nächsten Schritt ist k 2 =<br />
1 zu betrachten. Wir berechnen also zuerst y := y 2 = x 4 <strong>und</strong> dann zusätzlich<br />
y := y · x = x 5 . Wegen k 1 = k 0 = 0 sind die nächsten beiden auszuführenden<br />
Schritte y := y 2 = x 10 <strong>und</strong> zuletzt ist der Wert von y ein weiteres Mal zu<br />
quadrieren: y := y 2 = x 20 .<br />
1.2 Der Euklidische Algorithmus<br />
Zur Erinnerung stellen wir diesem Abschnitt die folgenden beiden <strong>elementaren</strong><br />
Definitionen voran:<br />
Definition 1.3. Sei R ein Ring. Dann heißt a ein Teiler von b, a | b, falls es ein<br />
r ∈ R gibt mit b = r · a.<br />
Definition 1.4. Sei R ein euklidischer Ring (d.h. ein Ring, in dem man zwei<br />
Elemente per Division mit Rest durcheinander dividieren kann).<br />
(i) Dann heißt d ∈ R ein größter gemeinsamer Teiler von a, b ∈ R, d =<br />
ggT(a, b), falls d | a <strong>und</strong> d | b <strong>und</strong> <strong>für</strong> alle s ∈ R mit s | a <strong>und</strong> s | b stets<br />
s | d folgt.<br />
(ii) Ein Element k ∈ R heißt kleinstes gemeinsames Vielfaches von a <strong>und</strong> b,<br />
k = kgV(a, b), falls a | k <strong>und</strong> b | k <strong>und</strong> <strong>für</strong> alle l ∈ R mit a | l <strong>und</strong> b | l<br />
stets k | l folgt.<br />
Für R = Z sprechen wir häufig von “dem” größten gemeinsamen Teiler <strong>und</strong><br />
meinen damit den eindeutig bestimmten positiven größten gemeinsamen Teiler<br />
zweier ganzer Zahlen. Gleiches gilt <strong>für</strong> das kleinste gemeinsame Vielfache zweier<br />
ganzer Zahlen. Im folgenden Lemma fassen wir ohne Beweis einige der wesentlichen<br />
Eigenschaften des größten gemeinsamen Teilers ganzer Zahlen zusammen:
4 1 GRUNDLAGEN<br />
Lemma 1.5. Seien a, b, c ∈ Z. Dann gilt:<br />
(i) ggT(a, b) = |a| genau dann, wenn a | b.<br />
(ii) ggT(a, a) = ggT(a, 0) = |a| <strong>und</strong> ggT(a, 1) = 1.<br />
(iii) Kommutativität: ggT(a, b) = ggT(b, a).<br />
(iv) Assoziativität: ggT(a, ggT(b, c)) = ggT(ggT(a, b), c).<br />
(v) Distributivität: ggT(c · a, c · b) = |c| · ggT(a, b).<br />
(vi) Gilt |a| = |b|, so folgt stets ggT(a, c) = ggT(b, c).<br />
(vii) Ist g = ggT(a, b), g > 0, so existieren s, t ∈ Z mit g = s · a + t · b.<br />
Die Darstellung Lemma 1.5 (vii) liefert der Erweiterte Euklidische Algorithmus,<br />
der in einem beliebigen euklidischen Ring durchgeführt werden kann. Wir geben<br />
ihn der Einfachheit halber nur <strong>für</strong> ganze Zahlen an. Die hier vorgestellte Version<br />
kann aber leicht in eine Version <strong>für</strong> Polynome “umgeschrieben” werden, wenn<br />
man die entsprechenden Ungleichungen als Ungleichungen über den Grad der<br />
betrachteten Polynome interpretiert.<br />
Vorab aber noch ein kleines Lemma, das uns beim Beweis der Korrektheit des<br />
Algorithmus sehr nützlich sein wird:<br />
Lemma 1.6. Seien a, b ∈ Z. Dann gilt: ggT(a, b) = ggT(a mod b, b).<br />
Beweis. Division mit Rest liefert a = q · b + (a mod b). Es gilt: ggT(a, b) teilt<br />
sowohl a als auch b, also auch a mod b = a − q · b <strong>und</strong> damit ggT(a mod b, b).<br />
Umgekehrt teilt ggT(a mod b, b) sowohl a mod b als auch b <strong>und</strong> damit auch a = q·<br />
b + (a mod b). Wir erhalten also ggT(a, b) | ggT(a mod b, b) <strong>und</strong> ggT(a mod b, b) |<br />
ggT(a, b). Daraus folgt die Behauptung.<br />
Algorithmus 1.7. (Erweiterter Euklidischer Algorithmus (EEA)) Seien<br />
a, b ∈ Z mit |a| ≥ |b|.<br />
(1) Setze r 0 := a, r 1 := b, s 0 := 1, s 1 := 0, t 0 := 0, t 1 := 1 <strong>und</strong> i := 1.<br />
(2) Wiederhole den folgenden Schritt, bis r l+1 = 0 gilt <strong>für</strong> ein l ∈ N 0 :<br />
Berechne q i := r i−1 quot r i als ganzzahligen Quotienten von r i−1 <strong>und</strong><br />
r i .<br />
r i+1 := r i−1 − q i · r i (d.h. r i+1 = r i−1 mod r i )
1.2 Der Euklidische Algorithmus 5<br />
s i+1 := s i−1 − q i · s i<br />
t i+1 := t i−1 − q i · t i<br />
i := i + 1<br />
(3) Gebe r l , s l <strong>und</strong> t l aus.<br />
Dann ist r l ein größter gemeinsamer Teiler von a <strong>und</strong> b <strong>und</strong> es gilt r l = s l·a+t l·b.<br />
Beweis. (Korrektheit) Der Erweiterte Euklidische Algorithmus 1.7 terminiert,<br />
denn es gilt <strong>für</strong> r i mit i ≥ 2 die Ungleichung 0 ≤ r i = r i−2 mod r i−1 < r i−1 ≤ a.<br />
Damit bilden die Reste r i eine streng monoton fallende Folge ganzer Zahlen, die<br />
nach unten durch 0 beschränkt ist, d.h. der Algorithmus muss terminieren. Wir<br />
zeigen nun, dass <strong>für</strong> alle i gilt:<br />
s i · a + t i · b = r i .<br />
Für i = 0 <strong>und</strong> i = 1 ist die Behauptung klar per Definition von r 0 , r 1 , s 0 , s 1 , t 0 , t 1 .<br />
Sei nun i ≥ 2. Dann folgt per Induktion:<br />
s i · a + t i · b = (s i−2 − q i−1 · s i−1 ) · a + (t i−2 − q i−1 · t i−1 ) · b<br />
= (s i−2 · a + t i−2 · b) − (q i−1 · s i−1 · a + q i−1 · t i−1 · b)<br />
= r i−2 − q i−1 · (s i−1 · a + t i−1 · b)<br />
= r i−2 − q i−1 · r i−1<br />
= r i<br />
Damit folgt <strong>für</strong> i = l mit s l · a + t l · b = r l die behauptete Darstellung. Es bleibt<br />
zu zeigen, dass r l in der Tat ein größter gemeinsamer Teiler von a <strong>und</strong> b ist. Mit<br />
Lemma 1.6 <strong>und</strong> a = (a quot b) · b + (a mod b) = q 1 · b + r 2 folgt ggT(a, b) =<br />
ggT(a mod b, b) = ggT(r 2 , b) = ggT(r 2 , r 1 ). Wegen r i+1 = r i−1 mod r i folgt<br />
ggT(r i−1 , r i ) = ggT(r i−1 mod r i , r i ) = ggT(r i+1 , r i ). Wegen r l+1 = 0 <strong>und</strong><br />
r l = ggT(r l+1 , r l ) folgt per Rekursion r l = ggT(r 2 , r 1 ) = ggT(a, b).<br />
Wir betrachten ein Beispiel:<br />
Beispiel 1.8. Seien a = 126 <strong>und</strong> b = 35. zunächst definieren wir r 0 := 126,<br />
r 1 := 35, s 0 := 1, s 1 := 0, t 0 := 0 <strong>und</strong> t 1 := 1. Dann folgen wir der Vorschrift<br />
aus 1.7:<br />
i = 1<br />
q 1 = r 0 quot r 1 = 126 quot 35 = 3<br />
r 2 = r 0 − q 1 · r 1 = 126 − 3 · 35 = 21<br />
s 2 = s 0 − q 1 · s 1 = 1 − 3 · 0 = 1<br />
t 2 = t 0 − q 1 · t 1 = 0 − 3 · 1 = −3
6 1 GRUNDLAGEN<br />
i = 2<br />
q 2 = r 1 quot r 2 = 35 quot 21 = 1<br />
r 3 = r 1 − q 2 · r 2 = 35 − 1 · 21 = 14<br />
s 3 = s 1 − q 2 · s 2 = 0 − 1 · 1 = −1<br />
t 3 = t 1 − q 2 · t 2 = 1 − 1 · (−3) = 4<br />
i = 3<br />
q 3 = r 2 quot r 3 = 21 quot 16 = 1<br />
r 4 = r 2 − q 3 · r 3 = 21 − 1 · 14 = 7<br />
s 4 = s 2 − q 3 · s 3 = 1 − 1 · (−1) = 2<br />
t 4 = t 2 − q 3 · t 3 = −3 − 1 · 4 = −7<br />
i = 4<br />
q 4 = r 3 quot r 4 = 14 quot 7 = 2<br />
r 5 = r 3 − q 4 · r 4 = 14 − 2 · 7 = 0<br />
Damit folgt: ggT(126, 35) = r 4 = 7 <strong>und</strong> 7 = 2 · 126 + (−7) · 35.<br />
1.3 Restklassenringe <strong>und</strong> modulares Rechnen<br />
Restklassenringe ganzer Zahlen sind <strong>für</strong> uns die algebraische Struktur, in der<br />
wir später in kryptographischen Verfahren rechnen wollen. Gr<strong>und</strong>legend ist die<br />
folgende Definition.<br />
Bemerkung <strong>und</strong> Definition 1.9. Sei N ∈ N, N ≥ 2. Auf dem Ring der<br />
ganzen Zahlen Z definieren wir die Relation ∼ N vermöge<br />
a ∼ N b :⇐⇒ N | a − b.<br />
Die Relation ∼ N ist eine Äquivalenzrelation, so dass wir die Äquivalenzklassen<br />
nach ∼ N betrachten können. Die Klasse von a ∈ Z modulo N definieren wir als<br />
a mod N := [a] N := {b ∈ Z | b ∼ N a}.
1.3 Restklassenringe <strong>und</strong> modulares Rechnen 7<br />
Als Repräsentanten <strong>für</strong> a mod N wählen wir immer die kleinste nicht-negative<br />
ganze Zahl z mit 0 ≤ z ≤ N − 1 aus der Menge {b ∈ Z : N | (b − a)}. Die<br />
Menge der Äquivalenzklassen nach der Äquivalenzrelation ∼ N bezeichnen wir<br />
mit Z N . Wir definieren <strong>für</strong> a 1 mod N, a 2 mod N ∈ Z N eine Addition <strong>und</strong> eine<br />
Multiplikation wie folgt:<br />
a 1 mod N + a 2 mod N = (a 1 + a 2 ) mod N,<br />
a 1 mod N · a 2 mod N = (a 1 · a 2 ) mod N.<br />
Mit der so definierten Addition <strong>und</strong> Multiplikation wird Z N zu einem kommutativen<br />
Ring mit Nullelement 0 mod N <strong>und</strong> Einselement 1 mod N, der als Restklassenring<br />
von Z modulo N bezeichnet wird. Z N hat N Elemente. Ein bezüglich<br />
der Multiplikation invertierbares Element a mod N bezeichnen wir als Einheit<br />
modulo N. Die Menge aller Einheiten von Z N wird mit Z × N bezeichnet.<br />
Beispiel 1.10. Sei N = 6. Dann besteht Z N = Z 6 aus den Restklassen 0 mod 6,<br />
1 mod 6, 2 mod 6, 3 mod 6, 4 mod 6 <strong>und</strong> 5 mod 6. Es gilt:<br />
2 mod 6 + 3 mod 6 = (2 + 3) mod 6 = 5 mod 6,<br />
4 mod 6 + 5 mod 6 = (4 + 5) mod 6 = 9 mod 6 = 3 mod 6,<br />
2 mod 6 · 2 mod 6 = (2 · 2) mod 6 = 4 mod 6,<br />
2 mod 6 · 3 mod 6 = (2 · 3) mod 6 = 6 mod 6 = 0 mod 6,<br />
5 mod 6 · 5 mod 6 = (5 · 5) mod 6 = 25 mod 6 = 1 mod 6.<br />
Wir wollen uns nun ein wenig genauer mit dem Ring Z N = {k mod N | k ∈<br />
{0, . . . , N −1}} <strong>für</strong> ein N ∈ N beschäftigen. Unter anderem im Rahmen des <strong>RSA</strong><br />
Verfahrens 3.1 sind wir an den Einheiten Z × N<br />
modulo einer Zahl N interessiert.<br />
Es gilt:<br />
Lemma 1.11. Für N ∈ N gilt Z × N<br />
Worten erhalten wir:<br />
= {k mod N | ggT(k, N) = 1}. Mit anderen<br />
k ist invertierbar modulo N genau dann, wenn ggT(k, N) = 1.<br />
Beweis. Es sei r ∈ Z × N . Dann gibt es ein l ∈ Z× N<br />
mit r · l ≡ 1 mod N, d.h. r · l =<br />
m · N + 1 <strong>für</strong> ein m ∈ N. Folglich ist r · l − m · N = 1 <strong>und</strong> ggT(r, N) | 1. Es folgt<br />
ggT(r, N) = 1. Umgekehrt liefert <strong>für</strong> r mod N ∈ {k mod N | ggT(k, N) = 1}<br />
der Erweiterte Euklidische Algorithmus 1.7 die Darstellung 1 = s · r + t · N mit<br />
s, t ∈ Z. Reduktion modulo N liefert s mod N als Inverses von r mod N.
8 1 GRUNDLAGEN<br />
Bevor wir den Algorithmus explizit angeben, betrachten wir noch ein kleines<br />
Beispiel:<br />
Beispiel 1.12. Gesucht sei das modulare Inverse von 23 mod 110. Der Erweiterte<br />
Euklidische Algorithmus 1.7 liefert uns die Darstellung<br />
Reduktion modulo 110 liefert also<br />
1 = −43 · 23 + 9 · 110.<br />
1 mod 110 ≡ (−43 mod 110) · (23 mod 110) + (9 mod 110) · (110 mod 110)<br />
} {{ }<br />
=0 mod 110<br />
≡ (−43 mod 110) · (23 mod 110)<br />
≡ (67 mod 110) · (23 mod 110),<br />
also gilt (23 mod 110) −1 ≡ (67 mod 110).<br />
Der Beweis des obigen Lemmas ist konstruktiv <strong>und</strong> liefert uns unmittelbar den<br />
folgenden Algorithmus <strong>zur</strong> Berechnung modularer Inverser. In Wirklichkeit ist<br />
der folgende Algorithmus ein wenig allgemeiner formuliert. Als Eingabe werden<br />
k, N ∈ N erwartet. Ausgabe ist dann entweder das modulare Inverse von k<br />
modulo N, falls k invertierbar modulo N ist, oder “k ist nicht invertierbar<br />
modulo N”.<br />
Algorithmus 1.13. (Berechnung des modularen Inversen) Sei N ∈ N<br />
<strong>und</strong> k ∈ Z N .<br />
(1) Berechne mit Hilfe des Erweiterten Euklidischen Algorithmus 1.7 die Darstellung<br />
g = ggT(k, N) = s · k + t · N.<br />
(2) Ist g = 1, so gebe s mod N aus. Andernfalls gebe “k ist nicht invertierbar<br />
modulo N” aus.<br />
Die Korrektheit des Algorithmus folgt aus Lemma 1.11.<br />
Als weitere Folgerung aus den bisherigen Ergebnissen erhalten wir:<br />
Korollar 1.14. Der Ring Z N ist ein Körper genau dann, wenn N eine Primzahl<br />
ist.
2 Die Eulersche ϕ-Funktion <strong>und</strong> einige ihrer<br />
Eigenschaften<br />
Wir wollen in diesem Abschnitt die Eulersche ϕ-Funktion einführen <strong>und</strong> einige<br />
der Eigenschaften dieser Funktion beweisen, die <strong>für</strong> uns im kryptographischen<br />
Anwednungskontext von Nutzen sein werden.<br />
Definition 2.1. Sei N ∈ N. Dann ist die Eulersche ϕ-Funktion definiert durch<br />
ϕ(N) := #{1 ≤ x ≤ N | ggT(x, N) = 1}.<br />
Lemma 2.2. Für jede Primzahl p ∈ N gilt: ϕ(p) = p − 1.<br />
Beweis. Es gilt {1 ≤ x ≤ p | ggT(x, p) = 1} = {1, . . . , p − 1}. Dies zeigt die<br />
Behauptung.<br />
Lemma 2.3. Sei p ∈ N eine Primzahl <strong>und</strong> e ∈ N. Dann gilt: ϕ(p e ) = (p − 1) ·<br />
p e−1 .<br />
Beweis. In der Menge {1, . . . , p e } sind genau p e−1 Zahlen Vielfache von p. Folglich<br />
gilt ϕ(p e ) = p e − p e−1 = (p − 1) · p e−1 .<br />
Satz 2.4. Sei N = p e 1<br />
1 · . . . · p er<br />
r<br />
Primpotenzen. Dann gilt:<br />
die Zerlegung von N in paarweise teilerfremde<br />
ϕ(N) = (p 1 − 1) · p e 1−1<br />
1 · . . . · (p r − 1) · p er−1<br />
r<br />
Beweis. Nach Lemma 2.3 gilt: ϕ(p e i<br />
i ) = (p i − 1) · p e i−1<br />
i <strong>für</strong> 1 ≤ i ≤ r. Da die zu<br />
N teilerfremden Elemente aus {1, . . . , N} gerade den invertierbaren Elementen<br />
modulo N entsprechen, liefert uns der Chinesische Restsatz wegen Z × ∼ N = Z × p e 1<br />
. . .×Z × p er<br />
r<br />
die Behauptung, denn ϕ(N) = #Z × N = ∏ r<br />
i=1 #Z× p e i<br />
i<br />
2.1 Einige gruppentheoretische Resultate<br />
= ∏ r<br />
i=1 ϕ(pe i<br />
i ).<br />
Wir wollen in diesem Abschnitt die <strong>für</strong> uns wichtigsten gruppentheoretischen<br />
Resultate zusammenfassen. Die meisten Beweise lassen wir einfach weg <strong>und</strong><br />
verweisen auf die im Anhang zitierte Literatur.<br />
Zur Erinnerung:<br />
Definition 2.5. Die Anzahl der Elemente einer Gruppe G bezeichnen wir stets<br />
mit #G <strong>und</strong> nennen #G die Ordnung von G. G heißt eine endliche Gruppe,<br />
wenn #G < ∞.<br />
9<br />
1<br />
×
10 2 DIE EULERSCHE ϕ-FUNKTION<br />
2.1.1 Der Satz von Lagrange.<br />
Der Satz von Lagrange macht eine wichtige Aussage über die möglichen Ordnungen<br />
von Untergruppen einer gegebenen endlichen Gruppe.<br />
Satz 2.6. (Satz von Lagrange) Sei G eine endliche Gruppe. Dann gilt:<br />
(i) Die Ordnung jeder Untergruppe H von G teilt die Ordnung von G,<br />
d.h. #H | #G.<br />
(ii) Für jedes Element x ∈ G gilt: x #G = 1.<br />
Dabei bezeichnet 1 in (ii) das neutrale Element bezüglich der Verknüpfung auf<br />
G.<br />
2.1.2 Der Satz von Euler.<br />
Wir erinnern uns, dass <strong>für</strong> N ∈ N der Wert der Eulerschen ϕ-Funktion an<br />
der Stelle N gerade die Anzahl der zu N teilerfremden Zahlen aus {1, . . . , N}<br />
ist. Die in Z N bezüglich der Multiplikation invertierbaren Elemente sind genau<br />
durch diejenigen Restklassen gegeben, deren Repräsentanten teilerfremd zu N<br />
sind. Folglich besteht die Gruppe Z × N<br />
aus genau ϕ(N) Elementen. Mit anderen<br />
Worten:<br />
Lemma 2.7. Für N ∈ N gilt: #Z × N = ϕ(N).<br />
Unmittelbar aus diesem Resultat <strong>und</strong> dem Satz von Lagrange 2.6 folgt das<br />
nächste Theorem, das auf Leonard Euler <strong>zur</strong>ückgeht:<br />
Satz 2.8. (Satz von Euler) Für jedes x ∈ Z × N gilt xϕ(N) = 1.<br />
= ϕ(N) <strong>und</strong> dem Satz von La-<br />
Beweis. Die Behautpung folgt sofort aus #Z × N<br />
grange 2.6 (ii).<br />
2.1.3 Der kleine Satz von Fermat.<br />
Aus dem Satz von Euler wiederum ergibt sich unmittelbar das nächste Resultat:<br />
Satz 2.9. (Kleiner Satz von Fermat) Sei p eine Primzahl. Dann gilt <strong>für</strong> alle<br />
x ∈ Z p \ {0}: x p−1 = 1.<br />
Beweis. Es ist ϕ(p) = p − 1 nach 2.2. Da p prim ist, gilt Z × p = Z p \ {0}. Nach<br />
dem Satz von Euler 2.8 erhalten wir daher <strong>für</strong> alle x ≠ 0: 1 = x ϕ(p) = x p−1 .
11<br />
3 Das <strong>RSA</strong>-Verfahren<br />
Sender <strong>und</strong> Empfänger werden traditioneller Weise stets mit den Namen Alice<br />
<strong>und</strong> Bob versehen. Alice <strong>und</strong> Bob kommunizieren über einen offenen Kanal<br />
(z.B. das Internet) <strong>und</strong> Bob möchte Alice eine Nachricht übersenden derart,<br />
dass eine dritte, böswillige Person Eve, die den Kanal abhört, die Nachricht<br />
nicht verstehen kann. Die bezeichnende Vorgehensweise ist dann die folgende:<br />
Bob möchte Alice eine Nachricht x schicken. Dazu benutzt Bob eine Verschlüsselungsfunktion<br />
enc K (Encryption), mit deren Hilfe er ein y := enc K (x) erzeugt.<br />
K bezeichne dabei den Schlüssel, den Bob zum Verschlüsseln der Nachricht benutzt.<br />
Dann schickt Bob y an Alice <strong>und</strong> (vorausgesetzt die Nachricht y wird<br />
bei der bloßen Übermittlung nicht verfälscht) Alice kann dann mit Hilfe einer<br />
Funktion dec S (Decryption) aus y den Klartext x = dec S (y) berechnen, wobei<br />
S ihren privaten Schlüssel zum Entschlüsseln von Nachrichten bezeichnet.<br />
Schematisch ergibt sich also der folgende Ablauf:<br />
Bob berechnet y = enc K (x)<br />
Bob sendet y<br />
−−−−−−−→<br />
Eve hört mit<br />
Alice berechnet x = dec S (y)<br />
Folgende Voraussetzungen sollte man vernünftigerweise verlangen:<br />
1. Bob kann die Nachricht effizient (d.h. in polynomieller Zeit in der Codierungslänge<br />
der Eingabe <strong>für</strong> seine Verschlüsselungsfunktion dec K ) verschlüsseln<br />
2. Eve kann den Wert von y = enc K (x) zwar abhören, sollte jedoch nicht<br />
in der Lage sein, ohne Kenntnis der Funktion dec S (die von Alice geheim<br />
gehalten werden muss – genauer gesagt muss Alice ihren privaten Schlüssel<br />
S geheim halten) x aus y in polynomieller Zeit berechnen zu können<br />
3. Alice kann mit Hilfe von dec S effizient aus y den Wert x berechnen<br />
Das <strong>RSA</strong>-Kryptosystem ist nach seinen Erfindern R. L. Rivest, A. Shamir <strong>und</strong><br />
L. M. Adleman benannt. Es handelt sich bei diesem Verfahren um ein asymmetrisches<br />
oder Public-Key-Kryptosystem. Der Ablauf des <strong>RSA</strong>-Verfahrens wird<br />
wieder in unserem Model als Kommunikation zwischen Alice <strong>und</strong> Bob formuliert.<br />
Wenn Bob an Alice eine mit <strong>RSA</strong> verschlüsselte Nachricht, die wir uns<br />
als natürliche Zahl vorstellen, schicken möchte gehen beide nach dem folgenden<br />
Protokoll vor:<br />
Protokoll 3.1. (Das <strong>RSA</strong>-Verfahren) Gegeben sei ein Sicherheitsparameter<br />
n ∈ N. Bevor Alice <strong>und</strong> Bob miteinander kommunizieren können, trifft Alice die<br />
folgenden Vorbereitungen:
12 3 DAS <strong>RSA</strong>-VERFAHREN<br />
(1) Alice wählt zufällig zwei verschiedene Primzahlen p <strong>und</strong> q im Intervall<br />
[⌈2 n−1<br />
2 ⌉, ⌊2 n 2 ⌋].<br />
(2) Sie berechnet N := p · q <strong>und</strong> ϕ(N) = (p − 1) · (q − 1).<br />
(3) Dann wählt sie e ∈ R {2, . . . , ϕ(N) − 2} mit ggT(e, ϕ(N)) = 1.<br />
(4) Alice bestimmt d mit e · d ≡ 1 mod ϕ(N).<br />
(5) Schließlich veröffentlicht sie K := (N, e) als ihren öffentlichen Schlüssel<br />
<strong>und</strong> hält das Paar S := (N, d) geheim.<br />
(6) Die Werte p, q <strong>und</strong> ϕ(N) löscht Alice.<br />
Angenommen Bob möchte an Alice die Nachricht x mit x ∈ {0, . . . , N − 1}<br />
schicken:<br />
(7) Bob berechnet y := x e mod N <strong>und</strong> schickt y an Alice.<br />
Alice kann dann die Nachricht y wie folgt entschlüsseln:<br />
(8) Alice berechnet x ⋆ := y d mod N.<br />
Dann gilt x ⋆ = x.<br />
Beweis. (Korrektheit) Wir müssen x ⋆ = x zeigen. Ist x ∈ Z × N<br />
, so folgt die<br />
Behauptung unmittelbar aus dem Satz von Euler 2.8 <strong>und</strong> e · d ≡ 1 mod ϕ(N),<br />
denn ist e · d − 1 = k · ϕ(N) <strong>für</strong> ein k ∈ N, so folgt: x ⋆ ≡ x e·d ≡ x e·d−1 ·<br />
x ≡ (x ϕ(N) ) k · x ≡ 1 · x ≡ x mod N. Für ein allgemeines x ∈ Z N gilt ebenso<br />
x e·d ≡ x e·d−1 · x ≡ x k·ϕ(N) · x ≡ x k·(p−1)·(q−1) · x mod N. Wir erhalten also x e·d ≡<br />
(x (p−1) ) k·(q−1) · x ≡ x mod p <strong>und</strong> x e·d ≡ (x (q−1) ) k·(p−1) · x ≡ x mod q, wobei die<br />
Identitäten <strong>für</strong> x ≡ 0 mod p <strong>und</strong> x ≡ 0 mod q trivialerweise richtig sind <strong>und</strong> <strong>für</strong><br />
x ≢ 0 mod p <strong>und</strong> x ≢ 0 mod q aus dem kleinen Satz von Fermat 2.9 folgen. Da<br />
p <strong>und</strong> q teilerfremd sind <strong>und</strong> beide x e·d − x teilen, folgt auch N | x e·d − x, also<br />
x e·d − x ≡ 0 mod N <strong>und</strong> damit die Behauptung.<br />
Beispiel 3.2. Betrachten wir die Primzahlen<br />
p = 13 <strong>und</strong> q = 7,<br />
so ergibt sich in der Notation von oben:<br />
N = 91.
13<br />
Wegen ϕ(p · q) = (p − 1) · (q − 1) folgt<br />
Geben wir uns<br />
ϕ(N) = 72.<br />
e = 47<br />
als Bestandteil des öffentlichen Schlüssels vor, so ergibt sich der private Schlüssel<br />
d als modulares Inverses von e modulo ϕ(N), also als Inverses von 47 modulo 72.<br />
Zur Berechnung von d verwenden wir daher den Erweiterten Euklidischen Algorithmus<br />
1.7. Dieser liefert bei Eingabe von a = 72 <strong>und</strong> b = 47 die Elemente<br />
1, −15, 23, d.h.<br />
1 = ggT(72, 47) = (−15) · 72 + 23 · 47.<br />
Reduktion der gesamten Gleichung modulo ϕ(N) = 72 liefert<br />
also<br />
d.h.<br />
1 mod 72 ≡ (−15 mod 72) · (72 mod 72) +(23 mod 72) · (47 mod 72),<br />
} {{ }<br />
≡0 mod 72<br />
ist der gesuchte private Schlüssel.<br />
1 mod 72 ≡ (23 mod 72) · (47 mod 72),<br />
d = 23<br />
Nehmen wir nun an, wir hätten die verschlüsselte Botschaft<br />
x ⋆ = 32<br />
empfangen <strong>und</strong> sollten diese entschlüssel. Dann berechnen wir<br />
x ≡ (x ⋆ ) d ≡ (32 mod 91) 23 ≡ 37 mod 91<br />
mit Hilfe des Algorithmus 1.1 <strong>für</strong> “Repeated Squaring” (die Binärdarstellung<br />
von d <strong>für</strong> das Repeated Squaring ist 1 0 1 1 1).<br />
4 Ausgewählte Übungsaufgaben mit Lösungen<br />
In der Nummerierung der Aufgaben auf den schriftlichen Übungsblättern diskutieren<br />
wir noch einmal einige ausgewählte Aufgaben zu dem Themenkomplex<br />
“Elementare <strong>Zahlentheorie</strong>”:
14 4 AUSGEWÄHLTE ÜBUNGSAUFGABEN MIT LÖSUNGEN<br />
4.1 Aufgabe 16: (Primfaktoren)<br />
Es sei n ∈ N keine Primzahl. Zeigen Sie, dass es eine Primzahl p gibt mit p | n<br />
<strong>und</strong> p ≤ ⌈ √ n ⌉. Dabei bezeichnet ⌈a⌉ <strong>für</strong> eine beliebige reelle Zahl a die kleinste<br />
ganze Zahl g, so dass g ≥ a gilt (“Aufr<strong>und</strong>en” auf die nächst größere ganze Zahl).<br />
Musterlösung:<br />
Da n keine Primzahl ist, gibt es a <strong>und</strong> b mit 1 < a, b < n <strong>und</strong> n = a · b. Nach dem<br />
Satz über die Primfaktorzerlegung gibt es Primzahlen p 1 <strong>und</strong> p 2 mit p 1 | a <strong>und</strong> p 2 | b.<br />
Wären p 1 , p 2 > ⌈ √ n ⌉, so folgte ⌈ √ n ⌉ 2 < p 1 · p 2 ≤ a · b = n. Andererseits ist aber<br />
n 2 ≤ ⌈ √ n ⌉ 2 , was einen Widerspruch ergibt. Also ist p 1 oder p 2 kleiner oder gleich<br />
⌈ √ n ⌉.<br />
4.2 Aufgabe 17: (Restklassen modulo Primpotenzen)<br />
Es sei p eine Primzahl <strong>und</strong> k ∈ N. Wir betrachten die Menge der Restklassen<br />
Z p k. Zu a ∈ {0, 1, 2, . . . , p k − 1} sei<br />
α 0 + α 1 · p + . . . + α k−1 · p k−1<br />
die p-adische Darstellung der Zahl a (also insbesondere α i ∈ {0, 1, 2, . . . , p − 1}<br />
<strong>für</strong> alle i). Man nennt a eine Einheit modulo p k , wenn a <strong>und</strong> p k teilerfremd sind,<br />
d.h. wenn ggT(a, p k ) = 1 gilt.<br />
(i) Zeigen Sie, dass a genau dann eine Einheit modulo p k ist, wenn α 0 ≠ 0<br />
gilt.<br />
(ii) Wie viele solcher Einheiten gibt es in Z p k? Begründen Sie Ihre Antwort<br />
schlüssig.<br />
Musterlösung:<br />
(i) Es ist a genau dann eine Einheit modulo p, wenn ggT(a, p) ≥ p. Dies ist aber<br />
genau dann der Fall, wenn <strong>für</strong> a = α 0 + α 1 · p + . . . + α k−1 · p k−1 gilt, dass α 0 ≠ 0 ist.<br />
(ii) Nach Teil (i) wissen wir, dass a genau dann eine Einheit modulo p ist, wenn<br />
α 0 ≠ 0 gilt. Die Zahlen α 1 , . . . , α k−1 aus der p-adischen Zahldarstellung von a können<br />
wir also beliebig aus der Menge {0, 1, 2, . . . , p − 1} wählen <strong>und</strong> erhalten mit<br />
α 0 + α 1 · p + . . . + α k−1 · p k−1<br />
immer eine Einheit modulo p, sofern nur α 0 ≠ 0 gilt. Daher gibt es genau<br />
(p − 1) · p · . . . · p = (p − 1) · p k−1<br />
} {{ }<br />
(k−1)-mal
4.3 Aufgabe 19: (Einheiten, Nullteiler <strong>und</strong> Partitionen) 15<br />
Einheiten. Diese Zahl stimmt natürlich mit ϕ(p k ) überein, d.h. mit anderen Worten<br />
haben wir gezeigt, dass gilt:<br />
ϕ(p k ) = (p − 1) · p k−1 .<br />
4.3 Aufgabe 19: (Einheiten, Nullteiler <strong>und</strong> Partitionen)<br />
Sei m ∈ N, m ≥ 2. Es sei ferner N (Z m ) die Menge aller Nullteiler von Z m .<br />
Zeigen Sie, dass {N (Z m ), Z × m} eine Partition von Z m ist.<br />
Musterlösung:<br />
Wäre Z × m ∩ N (Z m ) ≠ ∅, so gäbe es ein Element [a] m ∈ Z m mit [a] m ∈ Z × m <strong>und</strong><br />
[a] m ∈ N (Z m ). Dann ist dieses Element verschieden von [0] m , da [0] m /∈ Z × m. Wegen<br />
[a] m ∈ Z × m gibt es ein [b] m ∈ Z × m mit [1] m = [a] m · [b] m . Ferner gibt es wegen [a] m ∈<br />
N (Z m ) ein [n] m ∈ N (Z m ), [n] m ≠ [0] m , mit 0 = [n] m · [a] m . Multiplikation von<br />
[1] m = [a] m · [b] m mit [n] m liefert:<br />
[n] m = [n] m · [a] m · [b] m = ([n] m · [a] m<br />
} {{ }<br />
=[0] m<br />
) · [b] m = [0] m .<br />
Widerspruch zu [n] m ≠ [0] m . Also folgt Z × m ∩ N (Z m ) = ∅.<br />
Um zu zeigen, dass Z m = Z × m ∪ N (Z m ) gilt, genügt es zu zeigen, dass jedes bezüglich<br />
der Multiplikation in Z m nicht invertierbare Element ein Nullteiler von Z m ist. Sei<br />
[x] m ∈ Z m \ Z × m, 0 ≤ x ≤ m − 1. Ist [x] m = [0] m , so ist [x] m ein Nullteiler. Ist [x] m ≠<br />
[0] m , so gibt es einen echten Teiler g > 1 mit g | x <strong>und</strong> g | m (wäre ggT(x, m) = 1, so<br />
wäre [x] m ja invertierbar, also ein Element von Z × m). Dann gibt es k, l ∈ {2, . . . , m−1}<br />
mit m = k · g <strong>und</strong> x = l · g. Es folgt:<br />
k · x ≡ m k · (l · g) ≡ m (k · g) · l ≡<br />
}{{} m m · l ≡ m 0.<br />
=m<br />
Wegen k ∈ {2, . . . , m − 1}, folgt [k] m ≠ [0] m . Damit ist aber [x] m ein Nullteiler von<br />
Z m . Dies zeigt die Behauptung.<br />
4.4 Aufgabe 20: (Satz von Wilson)<br />
Sei p eine Primzahl.<br />
(i) Bestimmen Sie alle x ∈ {0, 1, 2, . . . , p − 1} <strong>für</strong> die p ein Teiler von x 2 − 1<br />
ist.
16 4 AUSGEWÄHLTE ÜBUNGSAUFGABEN MIT LÖSUNGEN<br />
(ii) Verwenden Sie (i), um zu zeigen, dass <strong>für</strong> eine beliebige Primzahl p stets<br />
gilt:<br />
1 + 1 · 2 · 3 · . . . · (p − 1) ≡ p 0.<br />
Musterlösung:<br />
(i) Sei x ∈ {1, . . . , p−1}. Wir müssen zeigen, dass aus x 2 ≡ p 1 bereits folgt: x = 1 oder<br />
x = p−1. Es gilt x 2 ≡ p 1 genau dann, wenn x 2 −1 ≡ p 0 genau dann, wenn p ein Teiler<br />
von x 2 − 1 = (x − 1) · (x + 1) ist. Wegen der Eindeutigkeit der Primfaktorzerlegung<br />
<strong>und</strong> da p eine Primzahl ist, muss p ein Teiler von x − 1 oder x + 1 sein. Wegen<br />
x ∈ {1, . . . , p − 1} ist dies nur möglich <strong>für</strong> x = 1 oder x = p − 1. Also sind nur [1] p<br />
<strong>und</strong> [p − 1] p in Z × p bezüglich der Multiplikation zu sich selbst invers.<br />
(ii) Für p = 2 ist Behauptung richtig, denn<br />
2−1<br />
∏<br />
i ≡ 2 1 ≡ 2 −1.<br />
i=1<br />
Sei also nun p ≥ 3. Wir definieren die Menge<br />
M := { a ∈ {1, . . . , p − 1} | [a] p ist in Z × p nicht zu sich selbst invers } .<br />
Nach Teil (i) gilt: Z × p = {[1] p , [p − 1] p } ∪ {[a] p | a ∈ M}. Da in Z × p bezüglich der<br />
Multiplikation jedes Element ein Inverses besitzt (Z p = Z × p ∪ {[0] p } ist ein Körper),<br />
gibt es zu jedem [a] p ∈ Z × p \ {[1] p , [p − 1] p } ein b ∈ M, so dass [b] p bezüglich der<br />
Multiplikation invers zu [a] p ist. Folglich ist das Produkt über alle Elemente von M<br />
kongruent 1 modulo p, d.h. ∏<br />
m ≡ p 1.<br />
Damit folgt:<br />
p−1<br />
m∈M<br />
∏<br />
i ≡ p 1 · (p − 1) ·<br />
i=1<br />
Dies zeigt die Behauptung.<br />
∏<br />
m∈M<br />
m ≡ p p − 1 ≡ p −1.<br />
4.5 Aufgabe 23: (Modulares Rechnen)<br />
Sei p ≥ 2 eine Primzahl. Zeigen Sie, dass <strong>für</strong> ein beliebiges Element<br />
a ∈ {1, . . . , p − 1} gilt: a p−1<br />
2 ≡ p 1 oder a p−1<br />
2 ≡ p −1.
LITERATUR 17<br />
Musterlösung:<br />
Sei a ∈ {1, . . . , p − 1}. Wir setzen y := a p−1<br />
2 <strong>und</strong> müssen zeigen, dass y ≡ p 1 oder<br />
y ≡ p −1. Nach dem Kleinen Satz von Fermat folgt:<br />
y 2 = (a p−1<br />
2 ) 2 = a p−1 ≡ p 1.<br />
Also ist y eine der Lösungen der Gleichung z 2 ≡ p 1. Da Z p ein Körper ist, hat die<br />
Gleichung z 2 ≡ p 1 maximal zwei verschiedene Lösungen. Da sowohl 1 als auch p − 1<br />
Lösungen der Gleichung sind, folgt y = 1 oder y = p − 1. Damit gilt aber y ≡ p 1 oder<br />
y ≡ p p − 1 ≡ p −1.<br />
Literatur<br />
[1] J. A. Buchmann, Introduction to Cryptography, Undergraduate Texts in Mathematics,<br />
second edition, Springer-Verlag, 2001<br />
[2] J. Blömer, Vorlesungen zum <strong>RSA</strong>-Verfahren, Universität Paderborn, 2002<br />
[3] J. Blömer, Vorlesungen zu Algorithmen in der <strong>Zahlentheorie</strong>, Universität<br />
Paderborn, 2002<br />
[4] S. Bosch, Algebra, Springer Lehrbuch, 3. Auflage, Springer-Verlag, 1999<br />
[5] P. B<strong>und</strong>schuh, <strong>Zahlentheorie</strong>, Springer Lehrbuch, 2. Auflage, Springer-<br />
Verlag, 1992<br />
[6] H. Cohen, A Course in Computational Algebraic Number Theory, Graduate<br />
Texts in Mathematics 138, Springer-Verlag, 1993<br />
[7] J. Daemen, V. Rijmen, AES Proposal: The Rijndael Block Cipher, Document<br />
version 2 vom 03.09.1999, erhältlich im Web<br />
[8] J. von <strong>zur</strong> Gathen, Cryptography I, Skript zu den Vorlesungen <strong>zur</strong> Kryptographie,<br />
Universität Paderborn, Version vom März 2002<br />
[9] J. von <strong>zur</strong> Gathen & J. Gerhard, Modern Computer Algebra, Cambridge<br />
University Press 1999<br />
[10] G. Hardy, E. Wright, <strong>Zahlentheorie</strong>, R. Oldenbourg, München, 1958, Übersetzung<br />
ins Deutsche des Orginaltitels An Introduction to the Theory of<br />
Numbers erschienen bei Cambridge University Press
18 LITERATUR<br />
[11] K. Ireland, M. Rosen, A Classical Introduction to Modern Number Theorie,<br />
Graduate Texts in Mathematics 84, Second Edition, Springer-Verlag, 1990<br />
[12] K.-H. Kiyek, F. Schwarz, Lineare Algebra, Teubner Studienbücher Mathematik,<br />
B. G. Teubner, 1999<br />
[13] N. Koblitz, A Course in Number Theory and Cryptograpy, Graduate Texts<br />
in Mathematics 114, Second Edition, Springer-Verlag, 1994<br />
[14] U. Krengel, Einführung in die Wahrscheinlichkeitstheorie <strong>und</strong> Statistik,<br />
Vieweg Studium – Aufbaukurs Mathematik, 5. Auflage, Vieweg Verlag, 2000<br />
[15] H. Kurzweil, B. Stellmacher, Theorie der endlichen Gruppen – Eine<br />
Einführung, Springer Lehrbuch, 1. Auflage, Springer-Verlag, 1998<br />
[16] A. J. Menezes, P. C. van Oorschot, S. A. Vanstone, Handbook of Applied<br />
Cryptography, CRC Press, Boca Raton, Florida, 1997<br />
[17] G. Scheja, U. Storch, Lehrbuch der Algebra (Unter Einschluß der Linearen<br />
Algebra) Teil 1, Mathematische Leitfäden, B. G. Teubner, 1994<br />
[18] G. Scheja, U. Storch, Lehrbuch der Algebra Teil 2, Mathematische<br />
Leitfäden, B. G. Teubner, 1994<br />
[19] A. Weil, Basic Number Theory, Die Gr<strong>und</strong>lehren der Mathematischen Wissenschaften<br />
in Einzeldarstellungen Vol. 144, Springer-Verlag, 1973