04.02.2013 Aufrufe

Full paper (pdf) - CDC

Full paper (pdf) - CDC

Full paper (pdf) - CDC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

MD5 zum Berechnen der ID Jedes SecretShare verfügt über eine ID,<br />

die es ermöglicht, zusammengehörige Sätze von Anteilen zu erkennen. Diese ID<br />

ergibt sich durch einen Hashwert über das jeweilige Geheimnis und wird beim<br />

Erzeugen der Anteile (dem Aufteilen des Geheimnisses) berechnet. Wir haben<br />

uns für die MD5-Hashfunktion entschieden, die in jeder Laufzeitumgebung per<br />

JCA verfügbar sein sollte. Die ID eines Anteils ist somit 16 Byte lang.<br />

Paßwort-Integritätsschutz Wir haben das Pedersen-Verfahren für verifizierbares<br />

Secret-Sharing nicht implementiert, weil es nicht ganz in unser Modell<br />

paßt und der Schutz von fehlerhaft berechneten Anteilen auch nicht benötigt<br />

wird (wir vertrauen dem Geber). Um trotzdem dem Kombinierer die Möglichkeit<br />

zu geben, von den Teilnehmern verfälschte Anteile zu erkennen, haben wir<br />

die Möglichkeit vorgesehen, daß der Geber die Anteile mit einem (den Teilnehmern<br />

unbekannten) Paßwort versieht. Dieses Paßwort geht dann gemeinsam mit<br />

der ID und dem Inhalt des Anteils in eine Prüfsumme ein (wieder MD5), die<br />

ohne Kenntnis des Paßworts nicht manipuliert werden kann. Auf diese Weise<br />

können bei der Kombination die Beiträge der Teilnehmer anhand des Paßwortes<br />

überprüft werden.<br />

Double Dispatch Das Interface SecretShare schreibt eine Methode combine()<br />

vor, mit der eine Menge gleichartiger SecretShare-Instanzen zusammengesetzt<br />

werden können. Diese Methode ist in allen konkreten Implementierungen von<br />

SecretShare derart realisiert, daß das hereingereichte Feld von SecretShare[]<br />

auf den konkreten Typ (beispielsweise ShamirSecretShare[]) eingeengt wird<br />

und dann einer weiteren combine()-Methode weitergereicht wird, welche die<br />

tatsächlichen Berechnungen durchführt. Dieser explizite Typecast ist notwendig,<br />

da Java beim Aufruf einer Methode lediglich den Typ des Empfängerobjekts<br />

dynamisch ermittelt, nicht jedoch die Typen der Argumente. Man bezeichnet<br />

diese Vorgehensweise als Single Dispatch. Würde Java direkt einen Double Dispatch<br />

unterstützen, hätten wir die Adaptermethoden combine(), in denen lediglich<br />

ein Typecast vorgenommen wird, nicht in jeder Klasse implementieren<br />

müssen.<br />

Key-Sharing Es wurden die einfachen (nicht redundanten) Key-Sharing-<br />

Verfahren für RSA (Abschnitt 3.4) und ElGamal (Abschnitt 3.8), die beiden<br />

redundaten RSA-Key-Sharing-Verfahren von Frankel, Gemmell, MacKenzie<br />

und Yung (in der abgewandelten Version aus Abschnitt 3.5.2) sowie von<br />

Shoup (Abschnitt 3.6) und das redundante Key-Sharing-Verfahren für spezielle<br />

ElGamal-Schlüssel (Abschnitt 3.8) implementiert. Die RSA-Teilschlüssel unterstützen<br />

sowohl Entschlüsselungen als auch das Erstellen von Signaturen, die<br />

ElGamal-Teilschlüssel eignen sich nur zum Entschlüsseln (aufgrund des angesprochenen<br />

Kommunikationsbedarfs bei Signaturen, siehe Abschnitt 3.8). Die<br />

Struktur der im folgenden kurz beschriebenen Klassen und Schnittstellen ist in<br />

Abbildung 5.2 dargestellt.<br />

KeyShare diese Schnittstelle erweitert SecretShare um eine Methode zum Erfragen<br />

des Namen des Algorithmus, für den der verteilte Schlüssel geeignet<br />

51

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!