Elementare Zahlentheorie und Kryptographie
Elementare Zahlentheorie und Kryptographie
Elementare Zahlentheorie und Kryptographie
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
c) Für jeden anderen muß es praktisch unmöglich sein, zu einer gegebenen<br />
Nachrischt eine gültige Unterschrift von X zu erzeugen.<br />
d) Jedermann (nicht nur der Empfänger) soll in der Lage sein, für ein Paar<br />
(m, S) zu entscheiden, ob S eine zu m passende Signatur von X ist oder<br />
nicht. Der Empfänger soll nach dem Dialog jedem (z.B. einem Gericht)<br />
beweisen können, daß X die Nachricht m unterschrieben an ihn geschickt<br />
hat. Insbesondere soll das elektronische Unterschreiben von Verträgen<br />
ermöglicht werden.<br />
Sei (G, g) eine Einweggruppe, l = ord(g) <strong>und</strong> b = floor(log 2 (l)) die (ungefähre)<br />
Bitlänge von l. Ein üblicher Wert könnte (b = 160 oder b = 300 sein.) In<br />
der Praxis wird üblicherweise ein Hash-Wert der Nachricht unterschrieben. Das<br />
führt dazu, daß die Unterschrift immer die selbe (vielleicht ein paar h<strong>und</strong>ert<br />
Bit) Länge hat, selbst wenn die Nachricht sehr groß ist.<br />
Sei h : {0, 1} ∗ → {0, · · · , 2 b } eine Hash-Funktion. h ordnet also jedem (evtl.<br />
sehr langen) Bitvektor einen Kontrollwert (man sagt auch “Hash” oder “Fingerprint”)<br />
h(x) zu, dessen Bitlänge b ist.<br />
Wir verlangen, daß h die folgenden Eigenschaften hat.<br />
a) h(x) ist aus x schnell berechenbar.<br />
b) h ist eine Einweg-Funktion: Es ist praktisch unmöglich zu y ∈ {0, · · · , 2 b }<br />
ein x mit h(x) = y zu finden.<br />
c) h ist kollisionsresistent: Es ist praktisch unmöglich, zwei Bitvektoren x 1 ≠<br />
x 2 mit h(x 1 ) = h(x 2 ) zu finden.<br />
Gängige Hashfunktionen sind MD4, MD5, SHA1, WHIRLPOOL, RIPE-MD.<br />
Die Konstruktion von Hashfunktionen ist ein interessantes Thema; wir können<br />
aus Zeitgründen nicht näher darauf eingehen.<br />
Sei bv : G → {0, 1} ∗ eine leicht berechenbare Injektion. Eine solche Abbildung<br />
wird ohnehin gegeben sein, wenn man G auf dem Rechner realisiert: Die Elemente<br />
von G werden dann ohnehin intern als Bitvektor gespeichert. Für γ ∈ G<br />
sei h ′ (γ) = h(bv(γ)).<br />
Wir fassen zusammen:<br />
Für einen Bitvektor m ∈ {0, 1} ∗ ist h(x) ein b-Bit-Hash.<br />
Für ein Element γ ∈ G der Einweggruppe ist h ′ (x) ein b-Bit-Hash.<br />
Die Daten (G, g), l = ord(g), b, h <strong>und</strong> h ′ sind öffentlich bekannt. Wir<br />
gehen wieder von einer Gruppe von Usern aus. Wie in den beiden vorigen Abschnitte<br />
wählt jeder User X zufällig ein d X ∈ {2, · · · , ord(g)−1} (nicht zu klein)<br />
<strong>und</strong> berechnet E X := g d X<br />
∈ G.<br />
d X bleibt geheim (nur User X kennt d X ) <strong>und</strong> E X wird öffentlich gemacht.<br />
Vgl. das erste Beispiel in Abschnitt 5.3<br />
79