Mathematische Grundlagen der Kryptographie 1. Ganze Zahlen 2

Werbung
Mathematische Grundlagen der Kryptographie
1. Ganze Zahlen
2. Kongruenzen und Restklassenringe
Stefan Brandstädter
Jennifer Karstens
18. Januar 2005
Inhaltsverzeichnis
1 Ganze Zahlen
1.1 Grundlagen . . . . . . . . . . . . . .
1.2 Teilbarkeit . . . . . . . . . . . . . . .
1.3 Darstellung ganzer Zahlen . . . . . .
1.4 O- und Ω-Notation . . . . . . . . . .
1.5 Aufwand von Addition,
Multiplikation und Division mit Rest
1.6 Polynomzeit . . . . . . . . . . . . . .
1.7 Größter gemeinsamer Teiler . . . . .
1.8 Euklidischer Algorithmus . . . . . . .
1.9 Erweiterter euklidischer Algorithmus
1.10 Zerlegung in Primzahlen . . . . . . .
i
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
2
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
5
5
6
7
7
Kapitel 1
Ganze Zahlen
In der Kryptographie spielen ganze Zahlen eine fundamentale Rolle.
• Inhalt: Grundlegende Eigenschaften, fundamentale Algorithmen
• kleinen lateinischen Buchstaben bezeichnen ganze Zahlen
1.1
Grundlagen
• Natürlichen Zahlen:
• Ganzen Zahlen:
= {0, ±1, ±2, ±3, . . .}
• Rationale Zahlen
• Es gilt
⊂
⊂
= {1, 2, 3, 4, 5, . . .}
und reelle Zahlen
⊂
• Grundrechenarten: Addition, Multiplikation
• Grundregel reeller Zahlen: a ∗ b = 0, dann a oder b Null
(andere Zahlenbereiche?)
Vergleichen reeller Zahlen:
√
√
• 3 < 3, aber 3 > 1
• α < β, α ≤ β
• α > β, α ≥ β
• Wenn α < β, dann auch α + γ < β + γ
• Wenn 0 < α und 0 < β, dann 0 < αβ
Beispiel 1.1.1. Es ist b5.43c = 5 und b−5.43c = −6.
1
KAPITEL 1. GANZE ZAHLEN
1.2
2
Teilbarkeit
Definition 1.2.1. Man sagt a teilt n, wenn es eine ganze Zahl b mit
n = ab gibt.
Eine ganze Zahl a 6= 0 teilt eine ganze Zahl b genau dann,
wenn es mindestens eine ganze Zahl n gibt, für die gilt: a ∗ n = b.
Man sagt auch a ist Teiler von b,
b ist teilbar durch a,
b ist Vielfaches von a und schreibt formal a | b.
Ist a kein Teiler von b, so schreibt man a - b.
Beispiel 1.2.2. Es gilt 13 | 195, weil 195 = 15 ∗ 13 ist. Genauso gilt −4 | 20,
weil 20 = (−4) ∗ (−5) ist. Die Teiler von 20 sind ±1, ±2, ±4, ±5, ±10, ±20.
0 ist die einzige ganze Zahl, die durch jede ganze Zahl
und selbst durch 0 teilbar ist.
Ist a 6= 1 und a 6= b, so nennt man a einen echten Teiler von b.
Eine natürliche Zahl ohne echten Teiler nennt man Primzahl.
Eine Primzahl die ein Teiler einer Zahl ist, nennt man Primteiler.
Division mit Rest von ganzen Zahlen: q = ba/bc und r = a − bq
Man nennt q den (ganzzahligen) Quotient
und r den Rest der Division von a durch b.
Man schreibt r = a mod b.
Ersetzt man a durch a mod b,
so sagt man auch, daß a modulo b reduziert wird.
Beispiel 1.2.3. Wenn a = 166 und b = 21 ist, dann erhält man q = 7 und
r = 19, d.h. 166 mod 21 = 19. Entsprechend gilt −30 mod 8 = 2.
1.3
Darstellung ganzer Zahlen
Ganze Zahlen werden normalerweise als Dezimalzahlen geschrieben, nur in
Computern werden sie in Binärentwicklung gespeichert. Allgemein kann man
ganze Zahlen mit Hilfe der sogenannten g-adischen Darstellung aufschreiben.
Für eine natürliche Zahl g > 1 und eine positive reelle Zahl α bezeichnt man
mit logg α den Logarithmus zur Basis g von α. Für eine Menge M bezeichnet
M k die Menge aller Folgen der Länge k mit Gliedern aus M .
KAPITEL 1. GANZE ZAHLEN
3
Beispiel 1.3.1. Es ist log3 27 = 3, weil 33 = 27 ist. Ferner ist log9 9 = 1, weil
91 = 9 ist.
Definition 1.3.2. Eine Folge (a1 , . . . , ak ) heißt g-adische
Entwicklung
von
a. Ihre Glieder heißen Ziffern und ihre Länge ist k = logg a + 1. Diese
Folge heißt Binärentwicklung von a, wenn g = 2 ist und
Hexadezimalentwicklung von a, wenn g = 16 ist.
Nur wenn die erste Ziffe von Null verschieden ist, ist die g-adische Entwicklung einer natürlichen Zahl eindeutig. Man schreibt auch a1 a2 . . . ak .
Beispiel 1.3.3. Die Folge 101011 ist die Binärentwicklung der Zahl
25 + 23 + 21 + 20 = 43. Bei der Hexadezimaldarstellung verwendet man für
die Ziffern 10 bis 15 die Buchstaben A, B, C, D, E, F . Schreiben wir nun 43
in Hexadezimaldarstellung auf, erhalten wir 2B = 2 ∗ 161 + 11.
Beispiel 1.3.4. Bestimmen wir nun die Binärentwicklung von 46. Da
32 = 25 < 46 < 64 = 26 ist, hat unsere Binärentwicklung die Länge 6.
Wir erhalten:
a1 = b46/32c = 1. 46 − 32 = 14.
a2 = b14/16c = 0.
a3 = b14/8c = 1. 14 − 8 = 6.
a4 = b6/4c = 1. 6 − 4 = 2.
a5 = b2/2c = 1. 2 − 2 = 0.
a6 = b0/1c = 0.
Somit ist die Binärentwicklung von 46 die Folge 101110.
Die Umwandlung von Binärentwicklungen in Hexadezimalentwicklungen
und umgekehrt ist besonders einfach. Da jeweils 4 aufeinanderfolgende Bits
(mit der kleinsten Stelle beginnend) einer Hexadezimalziffer entsprechen und
umgekehrt jede Hexadezimalziffer 4 Bits repräsentiert.
Beispiel 1.3.5. Wir betrachten die Binärentwicklung n = 110001011110.
Wir zerlegen die Binärentwicklung in Bitstrings der Länge 4, wobei wir bei
der kleinsten Stelle beginnen:
1110 = E, 0101 = 5, 1100 = C.
Daher ist C5E die Hexadezimalentwicklung von n.
Als binäre Länge bezeichnet man die Länge der Binärentwicklung einer
natürlichen Zahl. Die binäre Länge von 0 ist 1. Aber die binäre Länge einer
ganzen Zahl a ist die binäre Länge ihres Absolutbetrages |a|, sie wird auch
mit size(a) oder size a bezeichnet.
KAPITEL 1. GANZE ZAHLEN
1.4
4
O- und Ω-Notation
Beim Abschätzen des Berechnungsaufwandes und des Speicheraufwandes eines kryptographischen Algorithmus, ist es nützlich, die O- und die Ω-Notation
zu verwenden.
Mit dem großen lateinischen Buchstaben O, kann man obere Schranken angeben, untere Schranken zu finden ist im allgemeinen viel schwieriger, für sie
verwendet man den großen griechischen Buchstaben Ω.
Beispiel 1.4.1. Es ist 2n2 + n + 1 = O (n2 ), weil 2n2 + n + 1 ≤ 4n2 für alle
n ≥ 1 ist. Außerdem ist 2n2 + n + 1 = Ω (n2 ), weil 2n2 + n + 1 ≥ 2n2 für
alle n ≥ 1 ist.
1.5
Aufwand von Addition,
Multiplikation und Division mit Rest
Um den Laufzeit eines kryptographischen Verfahren abzuschätzen muß man
untersuchen, welchen zeitlichen Aufwand Addition, Multiplikation und Division mit Rest haben.
Zunächst legt man ein Rechenmodell fest, welches den tatsächlichen Berechnungsmaschinen möglichst ähnlich ist.
Die natürlichen Zahlen a und b sind durch ihre Binärentwicklung gegeben.
m ist die binäre Länge von a und n die binäre Länge von b.
Zum Rechnen schreiben wir die Binärentwicklungen von a und b untereinanden und rechnen Bit für Bit mit Übertrag.
Beispiel 1.5.1. Sei a = 11011, b = 10011. Wir berechnen a + b:
1
1
+
Übertrag 1
1 0
1 0 1
0 0 1
1 1
1 1 1
1
1
0
Beispiel 1.5.2. Sei a = 11011, b = 1001. Wir berechnen a ∗ b:
+
Übertrag
1 1 0
1 1
1
1 0
1
1 1
1
∗
1
1
1
1
1 0 0 1
1 0 1 1
1
0 0
1 1
Beispiel 1.5.3. Sei a = 11010, b = 1001. Wir dividieren a mit Rest durch b:
KAPITEL 1. GANZE ZAHLEN
1
1
1 0 1
0 0 1
1 0 0
0 =
1 0 0
5
1 ∗ 1
0 + 1
0 0
0
0
Zusammenfassung:
1. Die Addition (a + b) benötigt die Zeit O(max{size a, size b}).
2. Die Multiplikation (a ∗ b) benötigt die Zeit O((size a)(size b)).
3. Die Division mit Rest von a durch b benötigt
die Zeit O((size b)(size q)), wobei q der Quotient ist.
Der benötigte Platz ist O(size a + size b).
1.6
Polynomzeit
Wenn man ein kryptographisches Verfahren analysieren will, muß man zeigen, daß es in der Praxis effizient funktioniert aber nicht effizient gebrochen
werden kann.
Unser Algorithmus arbeitet mit den ganzen Zahlen z1 , . . . , zn . Dieser Algorithmus hat polynomielle Laufzeit, wenn er die Laufzeit
O((size z1 )e1 (size z2 )e2 · · · (size zn )en )
hat, wobei e1 , . . . , en nicht negative ganze Zahlen sind. Dieser Algorithmus
gilt als effizient, da er polynomielle Laufzeit hat, praktisch ist er aber erst
effizient, wenn die O-Konstanten und die Exponenten ei klein sind.
1.7
Größter gemeinsamer Teiler
Definition 1.7.1. Ein gemeinsamer Teiler von a und b ist eine ganze Zahl
c, die a und auch b ohne Rest teilt.
Berechnet man alle gemeinsamen Teiler zweier ganzer Zahlen a 6= 0 und
b 6= 0 und entfernt mögliche Doppelgänger, so gibt es genau einen größten.
Dieser heißt größter gemeinsamer Teiler (ggT) von a und b und wird oft
auch mit gcd(a, b) bezeichnet, wobei gcd die Abkürzung für greatest common
divisor ist.
Der ggT zweier ganzer Zahlen kann nie negativ sein, der ggT von 0 und 0
wird 0 gesetzt.
KAPITEL 1. GANZE ZAHLEN
6
Beispiel 1.7.2. Der gcd(12, 30) = 6.
Der gcd(-20, 40) = 20.
Der gcd(-20, -16) = 4.
Der gcd(7, 0) = 7.
Die Gleichung ax + by = n ist für alle a, b, n genau dann durch ganze
Zahlen x und y lösbar, wenn gcd(a, b) ein Teiler von n ist.
Aber wie wird nun gcd(a, b) berechnet und wie werden die Zahlen x und
y bestimmt, damit die Gleichung ax + by =gcd(a, b) erfüllt wird.
Die effiziente Lösung dieser Probleme mit Hilfe des euklidischen Algorithmus, oder ähnlich effizienten Algorithmen ist für fast alle kryptographischen
Techniken ein sehr wichtiger Umstand.
1.8
Euklidischer Algorithmus
• Sehr effizientes Verfahren zur Bestimmung des ggT(a, b)
• Einer der ältesten bekannten Algorithmen der Welt
• Griechischer Mathematiker Euklid, um 300 v. Chr., Die Elemente
• Funktion: Ohne Kenntnis der Primfaktorzerlegung der Zahlen a und b
• Prinzip: auch gegenseitige Wechselwegnahme genannt
• Eingangsgrößen sind zwei natürliche Zahlen a und b
Bei der Berechnung verfährt man nach Euklid wie folgt:
1. Setze m = a; n = b
2. Ist m < n, so vertausche m und n
3. Berechne r = m − n
4. Setze m = n, n = r
5. Ist r 6= 0 weiter mit Schritt 2
Nach Ablauf des Verfahrens hat man mit m den gcd(a, b) gefunden.
KAPITEL 1. GANZE ZAHLEN
1.9
7
Erweiterter euklidischer Algorithmus
• Erweiterung des klassischen euklidischen Algorithmus
• Optimierung: Division mit Rest und nicht mehr mit Subtraktion
• Liefert die Koeffizienten x und y mit gcd(a, b) = ax + by
Der Algorithmus sieht wie folgt aus:
1. Setze m = a, n = b,
x = 1, y = 0,
u = 0, v = 1
2. Berechne q und r mit m = q ∗ n + r (Division mit Rest)
3. Setze m = n, n = r,
u0 = x − q ∗ u,
v0 = y − q ∗ v
4. Setze x = u, y = v,
u = u0 , v = v 0
5. Falls n 6= 0 weiter mit Schritt 2.
Nach Beendigung erhält man die Koeffizienten x und y und den gcd(a, b) =
m = ax + by.
Die Laufzeit des erweiterten euklidischen Algorithmus, für zwei ganze
Zahlen a und b beträgt O((size a)(size b)).
1.10
Zerlegung in Primzahlen
Es ist bewiesen, daß sich jede natürliche Zahl, bis auf 1 und die Primzahlen
selbst, als Produkt von Primzahlen schreiben läßt. Es ist weiterhin bewiesen,
daß es unendlich viele Primzahlen gibt.
• Primfaktorzerlegung: Darstellung einer natürlichen Zahl a als Produkt
von Primfaktoren
• Bis heute noch keine effizienten Algorithmen für Primfaktorzerlegung
bekannt
• Sicherheit des RSA-Verschlüsslungsverfahrens, sowie andere wichtige
kryptographische Verfahren
KAPITEL 1. GANZE ZAHLEN
8
• Ist das Faktorisierungsproblem schwer? (noch kein Beweis bekannt!)
Beispiel 1.10.1 Der französische Jurist Pierre de Fermat (1601 bis 1665)
glaubte, daß alle nach ihm benannten Fermat-Zahlen
i
Fi = 2 2 + 1
Primzahlen seien, aber dem ist nicht so. Denn 1732 fand Euler heraus, daß
F5 = 641 ∗ 6700417 zusammengesetzt ist und demnach keine Primzahl ist.
• F0 = 3, F1 = 5, F2 = 17, F3 = 257 und F4 = 65537 sind Primzahlen
• F6 , F7 , F8 und F9 sind zusammengesetzt
• Zerlegung der 39-stelligen Fermat-Zahl F7 hat bis 1970 gedauert (Problem der Faktorisierung)
• 155-stellige Fermat-Zahl F9 schon 20 Jahre später faktorisiert (enorme
Weiterentwicklung)
Herunterladen