Full paper (pdf) - CDC

Full paper (pdf) - CDC Full paper (pdf) - CDC

cdc.informatik.tu.darmstadt.de
von cdc.informatik.tu.darmstadt.de Mehr von diesem Publisher
04.02.2013 Aufrufe

Logarithmus von vi zur Basis v (also di). Natürlich darf dabei keine zusätzliche Information über di entstehen (die Beziehung vi = v di ist ja bereits bekannt). Sei H eine Hashfunktion mit einer Ausgabe von L1 Bits. Der Teilnehmer i wählt eine zufällige Zahl r ∈R {0 . . . 2 L(N)+3L1 − 1} (da er die Gruppenordnung p ′ q ′ nicht kennt, muß er mit hinreichend großen Zahlen arbeiten) und berechnet den Korrektheitsbeweis (z, c) als c = H(v, m 4L , vi, s 2 i , v r , m 4Lr ) und z = dic + r. Damit kann die korrekte Berechnung von s 2 i c = H(v, m 4L , vi, s 2 i , v z v −c i , m 4Lz s −2c i überprüft werden, denn es muß gelten (daß mit s 2 i anstatt si gerechnet wird, wird für den Sicherheitsbeweis benötigt). 3.7 Das ElGamal-Verfahren Neben dem RSA-Verfahren ist das auf der Schwierigkeit der Berechnung diskreter Logarithmen beruhende ElGamal-Verfahren [ElG85] die bekannteste Basis für Public-Key-Kryptosysteme. Es wurde 1985 von Taher ElGamal vorgeschlagen und ähnelt dem Diffie-Hellman-Schlüsselaustausch-Protokoll. Das Diffie-Hellman-Problem Die Sicherheit des ElGamal-Verfahrens beruht auf der Annahme, daß es keinen effizienten Algorithmus gibt, um das sogenannte Diffie-Hellman-Problem zu lösen. Das Diffie-Hellman-Problem besteht darin, für eine gegebene prime Restklassengruppe (Z/pZ) ∗ mit einem bekannten erzeugenden Element (Generator) g ∈ (Z/pZ) ∗ für zwei Elemente A = g a und B = g b das Element C = g ab zu berechnen, obwohl a und b unbekannt sind. Eine Möglichkeit, das Element C zu bestimmen, besteht darin die Exponenten a oder b zu berechnen. Dann ergibt sich C = A b = B a . Man bezeichnet a und b als diskrete Logarithmen von A beziehungsweise B zur Basis g in der Gruppe (Z/pZ) ∗ . Für dieses Diskrete-Logarithmus-Problem sind allerdings keine effizienten Algorithmen bekannt. Das Diffie-Hellman-Problem und das Diskrete-Logarithmus-Problem stehen dabei in einer ähnlichen Beziehung zueinander wie das RSA-Problem und das Faktorisierungs-Problem: es ist nicht bekannt, ob sie äquivalent sind. Da das Diffie-Hellman-Problem in keiner bekannten Beziehung zum RSA- Problem steht, bietet das ElGamal-Verfahren eine echte Alternative zum RSA- Verfahren: selbst wenn eines der Verfahren aufgrund neuer Erkenntnisse unsicher werden sollte, muß das andere davon nicht betroffen sein. Darüberhinaus läßt sich das ElGamal-Verfahren leicht auf andere Gruppen als (Z/pZ) ∗ übertragen, in denen das Diffie-Hellman- und das Diskrete-Logarithmus-Problem andere Lösungsansätze erfordern. Am bekanntesten sind hierbei die Elliptischen Kurven, deren Struktur kürzere Schlüssellängen (im Vergleich zu ElGamal über (Z/pZ) ∗ ) zulassen. 29 )

Schlüsselerzeugung Um ein ElGamal-Schlüsselpaar zu erzeugen, wählt der Schlüsselgenerator eine Primzahl p und bestimmt eine Primitivwurzel g aus (Z/pZ) ∗ (dies ist ein Element aus (Z/pZ) ∗ , dessen Potenzen die ganze Gruppe (Z/pZ) ∗ erzeugen). Dann wählt er zufällig und gleichverteilt den geheimen Exponenten a aus {1 . . . p − 2} und berechnet den öffentlichen Schlüssel (p, g, A) mit A = g a (mod p). Die Größe von p bestimmt die Sicherheit des Verfahrens. Es muß unmöglich gemacht werden, diskrete Logarithmen in (Z/pZ)zu berechnen. Zur Zeit gelten 1024-Bit-Schlüssel als hinreichend sicher. Schlüsselverwendung Wie beim RSA-Verfahren können auch ElGamal-Schlüssel für zwei unterschiedliche Operationen, nämlich Verschlüsselung und Signatur herangezogen werden. Im Unterschied zu RSA sind hierbei jedoch zwei verschiedene Algorithmen anzuwenden. Um eine Nachricht m für den Empfänger mit dem öffentlichen Schlüssel (p, g, A) zu verschlüsseln, wählt der Absender eine Zufallszahl b ∈R {1 . . . p − 2} und berechnet B = g b (mod p). Anschließend wird die Nachricht als Zahl zwischen 1 und p−1 interpretiert und es ergibt sich der Schlüsseltext (B, c) mit c = A b m (mod p). Der Empfänger kann die Nachricht unter Verwendung seines geheimen Exponenten a entschlüsseln: B p−1−a c = B −a c = g b(−a) A b m = g −ab g ab m = m (mod p). Genau wie bei der RSA-Verschlüsselung wird man lange Nachrichten zunächst symmetrisch verschlüsseln und nur den symmetrischen Schlüssel mit ElGamal übermitteln. Im Gegensatz zu RSA ist die ElGamal-Verschlüsselung durch die Wahl von b randomisiert, so daß ein Padding mit Zufallszahlen nicht notwendig ist (die Sicherheit des Verfahrens beruht übrigens darauf, daß bei jeder Verschlüsselung ein neues b gewählt wird). Um eine Signatur für die Nachricht m zu erzeugen, benutzt der Absender mit dem privaten Schlüssel (p, g, a) eine kryptographische Hashfunktion, die die Nachricht auf einen Wert h(m) zwischen 1 und p − 2 abbildet. Anschließend wählt er eine Zufallszahl k ∈R {1 . . . p − 2} mit ggT(k, p − 1) = 1 und berechnet das Inverse k −1 von k modulo p − 1 sowie r = g k (mod p) und s = k −1 (h(x) − ar) (mod p − 1). Die Signatur ist das Paar (r, s). Bei der Verifikation kann mit dem öffentlichen Schlüssel (p, g, A) überprüft werden, ob gilt A r r s = g h(x) (mod p). In diesem Fall handelt es sich um eine gültige Signatur, denn A r r s = g ar g kk−1 (h(x)−ar) = g ar−ar+h(x) = g h(x) 30 (mod p).

Schlüsselerzeugung Um ein ElGamal-Schlüsselpaar zu erzeugen, wählt der<br />

Schlüsselgenerator eine Primzahl p und bestimmt eine Primitivwurzel g aus<br />

(Z/pZ) ∗ (dies ist ein Element aus (Z/pZ) ∗ , dessen Potenzen die ganze Gruppe<br />

(Z/pZ) ∗ erzeugen). Dann wählt er zufällig und gleichverteilt den geheimen Exponenten<br />

a aus {1 . . . p − 2} und berechnet den öffentlichen Schlüssel (p, g, A)<br />

mit<br />

A = g a<br />

(mod p).<br />

Die Größe von p bestimmt die Sicherheit des Verfahrens. Es muß unmöglich<br />

gemacht werden, diskrete Logarithmen in (Z/pZ)zu berechnen. Zur Zeit gelten<br />

1024-Bit-Schlüssel als hinreichend sicher.<br />

Schlüsselverwendung Wie beim RSA-Verfahren können auch ElGamal-Schlüssel<br />

für zwei unterschiedliche Operationen, nämlich Verschlüsselung und Signatur<br />

herangezogen werden. Im Unterschied zu RSA sind hierbei jedoch zwei verschiedene<br />

Algorithmen anzuwenden.<br />

Um eine Nachricht m für den Empfänger mit dem öffentlichen Schlüssel<br />

(p, g, A) zu verschlüsseln, wählt der Absender eine Zufallszahl b ∈R {1 . . . p − 2}<br />

und berechnet<br />

B = g b<br />

(mod p).<br />

Anschließend wird die Nachricht als Zahl zwischen 1 und p−1 interpretiert und<br />

es ergibt sich der Schlüsseltext (B, c) mit<br />

c = A b m (mod p).<br />

Der Empfänger kann die Nachricht unter Verwendung seines geheimen Exponenten<br />

a entschlüsseln:<br />

B p−1−a c = B −a c = g b(−a) A b m = g −ab g ab m = m (mod p).<br />

Genau wie bei der RSA-Verschlüsselung wird man lange Nachrichten zunächst<br />

symmetrisch verschlüsseln und nur den symmetrischen Schlüssel mit ElGamal<br />

übermitteln. Im Gegensatz zu RSA ist die ElGamal-Verschlüsselung durch die<br />

Wahl von b randomisiert, so daß ein Padding mit Zufallszahlen nicht notwendig<br />

ist (die Sicherheit des Verfahrens beruht übrigens darauf, daß bei jeder<br />

Verschlüsselung ein neues b gewählt wird).<br />

Um eine Signatur für die Nachricht m zu erzeugen, benutzt der Absender<br />

mit dem privaten Schlüssel (p, g, a) eine kryptographische Hashfunktion, die<br />

die Nachricht auf einen Wert h(m) zwischen 1 und p − 2 abbildet. Anschließend<br />

wählt er eine Zufallszahl k ∈R {1 . . . p − 2} mit ggT(k, p − 1) = 1 und berechnet<br />

das Inverse k −1 von k modulo p − 1 sowie<br />

r = g k<br />

(mod p) und s = k −1 (h(x) − ar) (mod p − 1).<br />

Die Signatur ist das Paar (r, s). Bei der Verifikation kann mit dem öffentlichen<br />

Schlüssel (p, g, A) überprüft werden, ob gilt<br />

A r r s = g h(x)<br />

(mod p).<br />

In diesem Fall handelt es sich um eine gültige Signatur, denn<br />

A r r s = g ar g kk−1 (h(x)−ar) = g ar−ar+h(x) = g h(x)<br />

30<br />

(mod p).

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!