Full paper (pdf) - CDC
Full paper (pdf) - CDC
Full paper (pdf) - CDC
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