Sichere Mediation mit mobilem Code | Implementierung und
Transcription
Sichere Mediation mit mobilem Code | Implementierung und
Lena Wiese Sichere Mediation mit mobilem Code | Implementierung und Sicherheitsanalyse Diplomarbeit 13. Oktober 2004 betreut und begutachtet durch Prof. Dr. Joachim Biskup und Dr. Barbara Sprick Arbeitsgruppe ISSI (Informationssysteme und Sicherheit) Lehrstuhl VI Fachbereich Informatik Universitat Dortmund Die Informatik ist eine junge Wissenschaft und trotzdem schon vielfach in "Anwendung. Dies ist Gunst und Last zugleich. [...] Deshalb gilt in der Informatik mehr noch als in anderen Wissenschaften das Prinzip der standigen kritischen Hinterfragung der Inhalte und das Bewutsein der Beschranktheit und Relativitat der erlangten Erkenntnisse.\ Manfred Broy i Vorwort Vorwort und Danksagung Dieser Text wurde als Diplomarbeit am Informatik-Lehrstuhl 6 der Universitat Dortmund in der Arbeitsgruppe "Informationssysteme und Sicherheit\ (ISSI) verfasst; ISSI bearbeitet unter vielen anderen Projekten das Thema sichere Mediation. Die Diplomarbeit besteht aus funf Teilen. Der erste Teil umfasst einfuhrende Angaben zum Thema Mediation und die Aufgabenstellung. Teil II beginnt mit einer technischen Diskussion des mobilen Codes und geht dann uber zu Sicherheitsrisiken durch mobilen Code. Teil III beschreibt die Implementierung des Programms, das zu dieser Diplomarbeit entwickelt wurde, und Teil IV fugt die Diskussion und die Implementierung zweier Erweiterungen hinzu. Teil V enthalt einige abschlieende Bemerkungen. Das Glossar auf Seite 124 erklart die wichtigsten Begrie. Der Index ab Seite 126 hilft bei der Suche nach Schlagwortern. Auf den letzten Seiten dieser Arbeit (ab Seite 132) bendet sich ein vollstandiges Inhaltsverzeichnis. Die CD in Anhang G auf Seite 121 enthalt Bedienungsanleitungen fur alle drei Programmmodule, die Programme selbst und den Quellcode. Die unverzichtbaren Hinweise von Peter Rechenberg (siehe [Rec03]) zu einem guten Schreibstil in technischen Texten waren mir eine groe Hilfe beim Verfassen dieser Arbeit. Insbesondere habe ich, soweit es ging, Anglizismen vermieden, da ich der Ansicht bin, dass das Deutsche auch im Bereich der Informatik als Fachsprache verwendet werden kann. Eine Ausnahme bilden die Begrie Client, Server und Interface (Interface nur, sofern es sich auf eine Java-Klasse bezieht), sowie einige wenige andere Begrie; eine U bersetzung dieser Begrie wurde im jeweiligen Zusammenhang eventuell zu Missverstandnissen fuhren. Die Benennung der Klassen meines Programms ist mit Bedacht und mit Hilfe eines EnglischWorterbuchs geschehen. Ich habe mich bemuht, im gesamten Text die "neue\ deutsche Rechtschreibung zu verwenden. Das gilt ganz besonders fur die Kommasetzung und die Gro- und Kleinschreibung. In Bezug auf die Getrennt- und Zusammenschreibung ziehe ich es jedoch vor, adjektivische Wendungen zusammenzuschreiben (wie es der Duden 2004 auch wieder zulasst), da die Getrenntschreibung oft den Sinn der Aussage verdreht. Warenzeichen werden im Text nicht ausdrucklich gekennzeichnet. Alle Warenzeichen und eingetragenen Warenzeichen sind Eigentum ihrer jeweiligen Inhaber. Meine Arbeit hat von einigen Projekten freier oder oener Software protiert. Als Erstes zu nennen ist hier die Eclipse Plattform (siehe [ECL]), die mich bei der Entwicklung mit Java sehr unterstutzt hat. Das Gleiche gilt fur OpenOce (siehe [OPE]) und The Gimp (siehe [GIM]) fur die Graphikerstellung. Mein Programm kommt nicht ohne die Funktionalitat der Formatted Dataset API (siehe [FDS]) und den Algorithmenreichtum der Bouncy Castle Crypto API (siehe [BCP]) aus. Ich danke Joachim Biskup und Barbara Sprick fur die fachlich und menschlich sehr gute Betreuung. Ebenso danke ich Jan-Hendrik Lochner fur die enge Zusammenarbeit. Ich bin allen weiteren Mitarbeitern des Lehrstuhls 6, die mir zum praktischen Einsatz meines Programms im Rechnernetz des Lehrstuhls Tipps und Beistand geben konnten, fur ihre Hilfe dankbar. Ein herzliches "thank you\ geht an Mike Amling, der mir einen Algorithmus zu mehrfachen RSA-Verschlusselung vorgeschlagen hat. Ich danke T. R. und A. R. fur die unnachahmliche Unterstutzung und fur alles, was sie fur mich getan haben. ii Zusammenfassung iii Zusammenfassung Das Konzept des Multimediamediators umfasst ein Verfahren zur sicheren Mediation zwischen informationssuchenden Kunden und verteilten Datenquellen. Ein Mediator erstellt aus der Gesamtanfrage eines Kunden Teilanfragen und leitet sie an die Datenquellen weiter. Er fasst danach die Teilantworten der Datenquellen zu einer Gesamtantwort zusammen. Das Hauptanliegen dieser Diplomarbeit ist es, das Konzept des Multimediamediators um einen entscheidenden Punkt zu erweitern: die Verheimlichung der Antwortdaten vor dem Mediator. Jede Datenquelle verschlusselt dazu ihre Teilantwort mit einem oentlichen Schlussel des Kunden. Der Mediator kann auf den verschlusselten Teilantworten keine Gesamtantwort berechnen. Er erstellt mobilen Code, der zusatzlich zu den verschlusselten Teilantworten die Rechenoperationen bereitstellt, um aus den unverschlusselten Teilantworten die Gesamtantwort zu berechnen. Diesen mobilen Code schickt er an den Kunden. Der Kunde entschlusselt die Teilantworten, fuhrt danach den Code aus und erhalt so die Gesamtantwort. Das Ausfuhren des mobilen Codes bringt fur den Kunden Sicherheitsrisiken mit sich. Der Kunde stellt Code, dessen Hersteller er nicht kennt oder dem er nicht vertraut, die Ressourcen seines Rechners zur Verfugung. Der mobile Code selbst mochte gegenuber dem Kunden seinen Programmcode geheimhalten. In dieser Arbeit werden die Sicherheitsanforderungen aller Beteiligten und Manahmen gegen mogliche Angrie theoretisch erortert. Das Multimediamediator-System mit mobilem Code wurde in der Programmiersprache Java umgesetzt. Es wird untersucht, inwieweit Java Mechanismen bereitstellt, um den Kundenrechner vor Angrien des mobilen Codes und den Code vor Ausspahung durch den Kunden zu schutzen. Als Erweiterungen werden der Einsatz von mehreren Verschlusselungsschlusseln und die Hierarchisierung von Mediatoren theoretisch und praktisch behandelt. Abstract The concept of the Multimediamediator comprises a technique for secure mediation between clients searching for information and distributed data sources. A mediator constructs partial queries out of a client's global query and forwards them to the data sources. Subsequently the mediator combines the partial responses to a global response. The main objective of this diploma thesis is to add the following crucial extension to the Multimediamediator-concept: concealing the response data from the mediator. To achieve this, each data source encrypts its partial query with a public key belonging to the client. The mediator is not able to calculate the global response from the encrypted partial responses. It constructs mobile code that in addition to the encrypted partial responses contains operations to calculate the global response from the decrypted partial responses. Thereafter it sends this mobile code to the client. The client decrypts the partial responses, executes the code and thereby obtains the global response. Executing mobile code holds security risks for the client. The client leaves computational resources to code whose producer is unknown to him and whom he doesn't put trust in. The mobile code itself wants to keep its program code a secret to the client. The security requirements of all participants and countermeasures against potential attacks are analysed theoretically. In this thesis the Multimediamediator-system with mobile code was implemented in the Java programming language. It is examined what kind of mechanisms Java oers to prevent the mobile code from attacking the client computer and the client from spying the mobile code. As extensions, the usage of multiple encryption keys and the employment of a hierarchy of mediators are covered theoretically and practically. iv v Inhaltsubersicht Inhaltsubersicht Vorwort und Danksagung Zusammenfassung . . . . Abstract . . . . . . . . . Inhaltsubersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i iii iii v I Einleitung 1 Das Konzept der Mediation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Berechnungen des Mediators auf den Teilantworten . . . . . . . . . . . . . . . . 1 2 7 8 II Diskussion 19 4 Kommunikationsschemata fur den Multimediamediator . . . . . . . . . . . . . . 20 5 Vor- und Nachteile von mobilem Code . . . . . . . . . . . . . . . . . . . . . . . . 28 6 Sicherheitsrisiken durch mobilen Code . . . . . . . . . . . . . . . . . . . . . . . . 34 III Implementierung 55 7 Eingesetzte Java-Mechanismen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 8 Umsetzung des Multimediamediators mit mobilem Code . . . . . . . . . . . . . 66 9 Mogliche Angrie auf das Mediatorsystem . . . . . . . . . . . . . . . . . . . . . 85 IV 10 11 12 13 Erweiterungen Auswirkungen einer Mediatorhierarchie . . . Umsetzung der Mediatorhierarchie . . . . . . Auswahl mehrerer Eigenschaftsnachweise . . Umsetzung der Auswahl mehrerer Zertikate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 96 100 104 105 V Resumee und Vorschlage fur die Zukunft 109 14 Resumee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 15 Vorschlage fur die Zukunft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 vi Inhaltsubersicht VI A B C D E F G Anhang U bersicht der Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . Sequenzdiagramm einfach (Kunde) . . . . . . . . . . . . . . . . . . . Sequenzdiagramm einfach (Mediator und Datenquelle) . . . . . . . . Sequenzdiagramm erweitert (Kunde) . . . . . . . . . . . . . . . . . . Sequenzdiagramm erweitert (Mediator und Datenquelle) . . . . . . Verwendete Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . Datentrager mit Bedienungsanleitung, Programmen und Quellcode . Abbildungsverzeichnis Tabellenverzeichnis . Glossar . . . . . . . . Index . . . . . . . . . Literaturverzeichnis . Inhaltsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 . 115 . 116 . 117 . 118 . 119 . 120 . 121 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 123 124 126 126 132 1 I. Einleitung Inhalt 1 Das Konzept der Mediation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Der Multimediamediator . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Berechnungen des Mediators auf den Teilantworten . . . . . . . . . 3.1 Berechnungen auf verschlusselten Daten . . . . . . . . . . . . . . . . . . 3.2 Auswertung von SQL-Ausdrucken auf verschlusselten Tabellen . . . . . 3.3 Eingeschranktes Verfahren fur Berechnungen des Multimediamediators . 3.4 Datensatzverschlusselung mit Teilschlusseln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3 7 8 8 11 12 14 Mediation ist die Einschaltung eines (meist) neutralen und unpar"teiischen Dritten im Konikt, der Parteien bei ihren Verhandlungsund Losungsversuchen unterstutzt, jedoch uber keine eigene (Konikt-)Entscheidungskompetenz verfugt.\ Stephan Breidenbach [Bre95] 2 1 Das Konzept der Mediation 1 Das Konzept der Mediation Mit der zunehmenden Digitalisierung von Informationen wachst die Zahl von Informationssystemen. Gleichzeitig gibt es immer mehr vernetzte Recher, die es ermoglichen, jederzeit und von jedem Ort aus auf diese Informationen zuzugreifen. Einfache Anfragen an einzelne Datenbanken sind von einem Kunden eines Informationssystems { also einem Menschen auf Informationssuche { noch von Hand durchzufuhren; schwierig wird es, wenn die Daten in verschiedenen Datenbanken gespeichert sind. Diese Datenbanken konnen zudem unabhangig voneinander sein und unterschiedlich aufbereitete Daten bereit halten; eventuell sind sie nur temporar verfugbar. Zusammenfassend lasst sich sagen, dass sich ein verteiltes Datenbanksystem durch Autonomie, Heterogenitat und Dynamik der Datenquellen auszeichnet. Ein Kunde muss nicht nur eine Auswahl unter den erreichbaren Datenbanken treen; aus der puren Menge an Daten, die ihm zur Verfugung gestellt werden, muss er die Informationen heraussuchen, die ihn interessieren (vgl. [Wie99], Seite 1). Wiederhold und Genesereth (siehe [WG97] und [Wie99]) fuhren das Konzept der Mediation ein, um Kunden beim Finden von relevanten Informationen in einer groen Menge von heterogenen Daten zu unterstutzen. Ein Kunde stellt eine Anfrage anstatt an mehrere Datenbanken idealerweise an eine einzige Kontaktstelle, den sogenannten Mediator. Der Mediator ruft Daten von verschiedenen Datenbanken ab, ubertragt die Daten der einzelnen Datenquellen in eine einheitliche Datenreprasentation, fugt die Daten zusammen und erhoht die Informationsdichte des Ergebnisses durch Abstraktion oder Zusammenfassung der Einzeldaten (vgl. [WG97], Seite 38). Fur eine Datenbankanfrage bedeutet das explizit, dass der Mediator die Anfrage aufspaltet, Teilanfragen an Datenquellen stellt, aus den Teilantworten die Gesamtantwort berechnet und die Gesamtantwort an den Kunden zuruckzuschickt. Fur Teilnehmer an einem Mediatorsystem kann man drei verschiedene Rollen identizieren: einen oder mehrere Kunden, einen Mediator und eine oder mehrere Datenquellen. Dieses Modell kann durch eine Hierarchie von Mediatoren erweitert werden: Ein Mediator kann eine Teilanfrage an einen anderen Mediator weiterleiten. Dieser zweite Mediator tritt dann als Datenquelle auf. Kunde 2 Kunde 3 Gesam ta nfrag e e frag mtan Gesa Mediator 1 Mediator 2 Gesamtanfrage Teilanfrage Teil anfrage Kunde 1 Quelle 1 Quelle 2 rag e Tei lanf Teilanfrage Quelle 3 Abbildung 1: Schema eines Mediatorsystems Die Begrie "Kunde\, "Mediator\ und "Datenquelle\ umfassen sowohl Menschen als auch Rechner beziehungsweise Programme: Kunde meint sowohl das Programm zum Ausfuhren einer Anfrage als auch dessen Benutzer(in) und der Rechner auf dem es lauft; Mediatoren und Datenquellen meinen sowohl die Rechner, auf denen die Programme zur Bearbeitung der Anfrage laufen, als auch der oder die Administrator(in) des jeweiligen Systems. Nur wenn im jeweiligen Zusammenhang eine Unterscheidung zwischen Mensch, Maschine und Programm notig ist, werden sie explizit benannt. 1.1 Der Multimediamediator 3 1.1 Der Multimediamediator Das Basismodell der Mediation nach Wiederhold und Genesereth berucksichtigt noch keine sicherheitsrelevanten Aspekte. Alle Beteiligten konnen aber Sicherheitsforderungen an das System stellen. Datenquellen mochten ihre Angaben nur an berechtigte Kunden weiterleiten. Dabei mochten sie durch den Mediator insofern abgeschirmt werden, dass die Kunden nichts uber die Datenverteilung und die Identitat der Quellen erfahren. Kunden mochten, dass ihre Anfragen und die Antworten vertraulich behandelt werden. Sie mochten, dass dem Mediator der Inhalt der Antworten verborgen bleibt und dass die Kommunikation mit dem Mediator nicht korrumpiert werden kann. Eventuell mochten sie gegenuber dem Mediator und den Datenquellen auch anonym bleiben. Die zentralen Sicherheitsziele sind demnach: 1. Vertraulichkeit der Daten gegenuber dem Mediator, gegenuber Kunden, die nicht berechtigt sind die Daten zu sehen, und gegenuber Dritten (zumindest wahrend der U bertragung der Daten) 2. Anonymitat der Quellen gegenuber den Kunden 3. Vertraulichkeit der Anfrage gegenuber nicht berechtigten Kunden, Dritten und eventuell sogar gegenuber dem Mediator 4. Unbeobachtbarkeit der Kommunikation durch nicht berechtigte Kunden und Dritte 5. Datenintegritat auf dem gesamten Kommunikationsweg 6. Anonymitat der Kunden gegenuber den Datenquellen Die Arbeitsgruppe "Informationssysteme und Sicherheit\ am Lehrstuhl 6 des Fachbereichs Informatik der Universitat Dortmund hat ein Verfahren zur sicheren Mediation vorgestellt (siehe [ABFK03] und die darin enthaltenen Referenzen). Ihr System heit Multimediamediator (MMM). Im Konzept des Multimediamediator pruft eine Datenquelle anhand von Nachweisen (engl. credentials), ob ein Kunde berechtigt ist, die Daten zu erhalten, die er angefordert hat. Die Nachweise mussen von einer allgemein anerkannten Zertizierungsstelle ausgestellt sein: ein Kunde sollte sich die Nachweise nur von einer Zertizierungsstelle mit einem guten Ruf austellen lassen, da eine Datenquelle Nachweise nur akzeptieren wird, wenn sie der ausstellenden Zertizerungsstelle vertraut. Es gibt zum einen Identitatsnachweise, die einen oentlichen Schlussel an die Identitat eines Kunden knupfen, und zum anderen Eigenschaftsnachweise, die einen oentlichen Schlussel an Eigenschaften des Kunden knupfen. Fur einen oentlichen Schlussel kpub , eine Identitat id und eine Eigenschaft r ist I = (kpub ; id) ein Identitatsnachweis und R = (kpub ; r) ein dazugehoriger Eigenschaftsnachweis. Mediator und Datenquellen sehen nur die Eigenschaftsnachweise und vertrauen der Zertizierungsstelle, dass diese die Identitat und die zertizierten Eigenschaften des Kunden gepruft hat. Die Geheimhaltung der Identitatsnachweise ermoglicht es so, die Identitat des Kunden vor dem Mediator und den Datenquellen zu verbergen und sichert damit seine Anonymitat. Der Kunde stellt seine Anfrage zusammen mit einer Menge von Eigenschaftsnachweisen. Der Multimediamediator wahlt die fur eine Teilanfrage notwendige Teilmenge an Eigenschaftsnachweisen aus und leitet sie mit der jeweiligen Teilanfrage an die Datenquellen weiter. Er vereinfacht dem Kunden die Anfrage dadurch, dass er die relevanten Datenquellen selbst identizieren und lokalisieren kann. Er verfugt uber eine abstrakte Datenbeschreibung { das sogenannte Anwendungsschema, das die Datenbankschemata der angeschlossenen Datenquellen verknupft. So uberblickt der Multimediamediator die verfugbaren Daten und kann die Anfragen entsprechend aufspalten. Das Mediatorsystem ist dynamisch. Kunden und Datenquellen konnen zur Laufzeit das System betreten und wieder verlassen. Daher ist nur ein Entwurf auf einer hohen Abstraktionsebene moglich, bei dem die Datenquellen mit dem Mediator ihr Datenangebot vertraglich 4 1 Das Konzept der Mediation k pub r Zertifizierungs stelle k pub r k pub id Kunde Mediator k pub: öffentlicher Schlüssel des Kunden r: Eigenschaften id: Identität des Kunden Abbildung 2: Identitats- und Eigenschaftsnachweise festlegen (siehe top-down design paradigm in [ABFK03], Seite 369). Wird eine neue Datenquelle an den Multimediamediator angeschlossen, muss der Teil des Anwendungsschemas, der sich auf die von der Datenquelle angebotenen Informationen bezieht, in das Datenquellenschema eingebettet werden. Datenquellen konnen allerdings fur semantisch gleiche Eintrage unterschiedliche Datentypen benutzen. Beispielsweise kann eine Datenbank zur Speicherung eines Zeitintervalls Ganzzahlen und eine andere Fliekommazahlen benutzen. Um in einem solchen Fall Typkonikte zu vermeiden, muss der Multimediamediator uber eine Umwandlungsfunktion zwischen den Daten aus verschiedenen Datenquellen verfugen. Zwischen Mediator und Datenquellen fuhren sogenannte Datenhullen (engl. wrappers) diese Umwandlung durch. Die Datenquellen haben die Entscheidungsfreiheit einen Eigenschaftsnachweis anhand von Zugrisregeln, die sie im Voraus denieren, zu akzeptieren oder abzulehnen.Der Multimediamediator kann die Kunden daruber informieren, welche Eigenschaftsnachweise die Datenquellen verlangen. Jedoch tut er das nur, wenn der Kunde diese Metainformation erhalten darf. Der Mediator kann selbst Zugrisregeln denieren und abhangig von diesen Regeln den Kunden verschiedene Sichten auf die Daten zur Verfugung stellen. Eigenschaften des Kunden liegen in den Eigenschaftsnachweisen als sogenannte Autorisierungsattribute vor. Ein solches Autorisierungsattribut besagt zum Beispiel "Die Person, deren Identitat mit dem oentlichen Schlussel kpub verknupft ist, ist Studentin der Universitat Dortmund\. Innerhalb eines Eigenschaftsnachweises konnen mehrere Autorisierungsattribute mit boolschen Operatoren verknupft werden. Liegen mehrere boolsche Ausdrucke uber Autorisierungsattributen vor (etwa aus mehreren Eigenschaftsnachweisen), werden sie konjugiert. Die Datenquelle deniert Regeln fur den Zugri auf ihre Daten, indem sie ein Privileg mit einem boolschen Ausdruck uber Autorisierungsattributen verknupft. Ein Privileg p gibt an, mit welcher Methode m auf ein Datenobjekt o zugegrien werden darf: p = (o; m). Die Zugrisregel "Eine Person hat Lesezugri auf die Mathematikdatenbank matdat, wenn sie Student(in) UND in NRW eingeschrieben ist\ verknupft das Privileg p ="Lesezugri auf die Mathematikdatenbank matdat\ mit der Konjunktion von Autorisierungsattributen a ="Eine Person ist Student(in) UND in NRW eingeschrieben\. Die Datenbank erlaubt dem Kunden den Zugri (das heit sie gewahrt ihm Privileg p), wenn die zertizierten Eigenschaften r des Kunden die mit dem Privileg verknupften Autorisierungsattribute a implizieren. Im Beispiel gilt diese Implikation, da eine Studentin der Universitat Dortmund Studentin und in NRW eingeschrieben ist. Wenn die Autorisierung erfolgreich war, berechnet die Datenquelle ihre Teilantwort und verschlusselt sie mit den oentlichen Schlusseln aus allen Eigenschaftsnachweisen, die fur den Zugri auf die Daten notwendig waren. Dies stellt sicher, dass nur die Person die Daten entschlusseln kann, die ihre Berechtigung mit den Eigenschaftsnachweisen dargelegt hat und die privaten Entschlusselungschlussel besitzt. So gelangen sie zumindest nicht auf dem U bertragungsweg in falsche Hande. Insbesondere gegenuber dem Mediator, anderen Kunden und anderen Daten- 1.1 Der Multimediamediator 5 quellen werden die Antworten also wahrend der U bertragung geheim gehalten. Im Idealfall berechnet der Multimediamediator aus den verschlusselten Teilantworten die Gesamtantwort und leitet sie an den Kunden weiter, ohne selbst den Inhalt entschlusseln zu konnen. Das ist leider nicht problemlos moglich. In dieser Diplomarbeit mochte ich daher ein Verfahren entwickeln, mit dem der Kunde dennoch die Gesamtantwort erhalten kann, ohne die oben genannten Sicherheitsziele zu verletzen. Zunachst mochte ich aber noch kurz darauf eingehen, welche grundlegenden Verhaltensweisen fur ein faires Mediatorsystem, in dem kein Teilnehmer einen anderen angreift, vorausgesetzt werden: Kunden mussen sich darauf verlassen konnen, { dass die Datenquellen korrekte Antworten liefern. { dass der Mediator die Anfragen korrekt aufspaltet. { dass der Mediator die Teilanfragen korrekt weiterleitet und die Teilantworten nicht verandert. { dass der Mediator und die Datenquellen die Eigenschaftsnachweise nicht veruntreuen und keine Daten sammeln. Datenquellen mussen sich darauf verlassen konnen, dass die Kunden die gelieferten Daten nicht weiterverbreiten. Kunden und Datenquellen mussen darauf vertrauen, dass die Zertikatsaussteller korrekt arbeiten, Zertikate nicht gefalscht werden konnen und die Schlusselinfrastruktur funktioniert. Mediatoren mussen sicher sein, dass kein anderer Teilnehmer ihre Betriebsgeheimnisse, wie den Algorithmus zur Aufspaltung der Anfrage, ihr Anwendungsschema oder die Identitat ihrer Geschaftspartner (das sind Datenquellen oder andere Mediatoren), in Erfahrung bringen kann. Zusatzlich kann man die Eigentumer der Daten als eigenstandige Rolle betrachten (siehe [ABFK03], Seite 374). Sie stellen ihre Daten uber die Datenquellen den Kunden zur Verfugung. Die Dateneigentumer mussen darauf vertrauen, dass die Datenquellen die Zugrisuberprufungen korrekt durchfuhren und Daten nur an berechtigte Kunden weitergeben. Die Dynamik und Anonymitat, die das Multimediamediator-System auszeichnen, sind mit Grunde fur niedriges Vertrauen zwischen den Teilnehmern. Die Basis fur das Vertrauen, dass die anderen Teilnehmer fair handeln, ist nicht gegeben. Vielmehr kann ein Teilnehmer versuchen, eigene Interessen gegen die anderen durchzusetzen oder zum eigenen Vorteil den anderen zu schaden. Fur einige solcher Angrie gegen die Sicherheitsinteressen der anderen Teilnehmer schlagen die Autoren von [ABFK03] folgende Gegenmanahmen vor: Benutzt ein Kunde immer denselben oentlichen Schlussel, kann eine Datenquelle leicht ein Prol des Kunden erstellen. Sie kann dann versuchen von den zertizierten Eigenschaften auf die Identitat des Kunden zu schlieen oder ihre Antworten von diesem Prol abhagig zu machen. Um das zu verhindern sollte ein Kunde moglichst fur verschiedene Anfragen unterschiedliche Schlussel benutzen. Schon bei der U bertragung der verschlusselten Antworten lauert das erste Angrisrisiko. Wenn ein Angreifer die gleichen Eigenschaften wie ein Kunde nachweisen kann, die Anfrage des Kunden kennt und die verschlusselte Antwort abfangt, kann er dieselbe Anfrage stellen und so an die Klartext-Antwort gelangen. Mit diesen Informationen kann er versuchen, den privaten Schlussel des Kunden zu ermitteln. Abhilfe bietet ein hybrides 6 1 Das Konzept der Mediation Verschlusselungsverfahren (also ein Verfahren mit einem symmetrischen Sitzungschlussel, der mit dem asymmetrischen Schlussel verschlusselt wird) oder das Einbringen von Zufallstext in die Antwort. Die Menge der ubertragenen Daten, also die Groe des Datensatzes, kann eine interessante Information fur Angreifer sein. Antworten mussen als Gegenmanahme entweder aufgeblaht oder gestuckelt werden, um immer gleich groe Datensatze zu ubertragen. Ein Angreifer kann einen Eigenschaftsnachweis eines Kunden missbrauchen, indem er mit diesem Ausweis eine Anfrage stellt. So gelangt er an die verschlusselte Antwort, die er zwar nicht lesen kann, aber ihm vielleicht zu anderen Informationen verhilft. Als Urheber der Anfrage wird dennoch der Kunde vermutet. Er kann sich gegen Falschanschuldigen nur wehren, wenn jede Anfrage zusatzlich signiert wird. Datenquellen, die Kunden verbieten, die empfangenen Daten weiterzugeben, konnen diese Weiterverbreitung nicht verhindern. Sie konnen ihr Eigentumsrecht nur durch Wasserzeichen kenntlich machen. Die Darstellung des Multimediamediators in diesem Abschnitt soll nur einen einfuhrenden U berblick geben. Weitere Details des Konzepts { zum Beispiel zu Regeln fur den Zugri auf die verwendeten Schemata { sind im Originaltext und in der Dissertation [Kar02] zu nden. 7 2 Aufgabenstellung geschrieben von Barbara Sprick Mediation ist ein Leitbild zur Bildung hochleistungsfahiger Informationssysteme, die fur einen Benutzer zielgerichtet Daten aus verteilten, autonomen und heterogenen Quellen aunden und zur verlangten Information zusammenfuhren und aufbereiten. Im Rahmen eines Projektes des Landes Nordrhein Westfalen wurde in der Gruppe ISSI am Lehrstuhl 6, des Fachbereichs Informatik der Universitat Dortmund ein Verfahren zur sicheren Mediation entwickelt [ABFK03, ABK01]. Im einfachen, unsicheren Fall senden Kunden SQLAnfragen an den Mediator, der diese in kleine Teilanfragen zerlegt und an die entsprechenden Quellen weiterleitet. Die Quellen berechnen die entsprechenden Teilantworten und schicken diese zuruck an den Mediator, der hieraus dann die vom Kunden gestellte SQL-Anfrage auswertet und die Antwort dem Kunden zurucksendet. In dem Verfahren fur sichere Mediaton sendet der Mediator nicht nur die entsprechenden Teilanfragen an die Quellen, sondern zusatzlich noch einen (von einer TTP zertizierten) oentlichen Schlussel des Kunden. Nun verschlusseln die Quellen ihre Teilantworten mit dem oentlichen Schlussel des Kunden und senden die verschlusselten Antworten an den Mediator zuruck. Ohne die Antworten entschlusseln zu konnen, kann der Mediator nur sehr beschrankt mit diesen verschlusselten Teilantworten rechnen und die vom Kunden gestellte SQL-Anfrage auswerten. Um dieses Problem zu losen, wird ein eingeschrankter Teil von SQL identiziert, der leicht in Ausdrucke der relationalen Algebra ubersetzt werden kann. Jeder solche Ausdruck entspricht einem Syntaxbaum, dessen Blatter mit den verschlusselten Teilanfragen beschriftet sind und dessen innere Knoten mit den (wenigen verschiedenen) Operatoren der Algebra beschriftet sind. Ziel dieser Diplomarbeit ist, ein Java-Tool zu erstellen, das fur eine gegebene SQL-Anfrage und fur gegebene verschlusselte Teilantworten mobilen Code erzeugt. In der geschutzten Umgebung des Kunden soll dieser Code unter Eingabe des geheimen Schlussels des Kunden die Teilantworten decodieren und die SQL-Anfrage anhand der decodierten Teilantworten auswerten. Da mobiler Code auf den Rechnern der Kunden ausgefuhrt wird, birgt die Anwendung mobilen Codes selbst wieder Sicherheitsprobleme [MF99, GMPS97]. In dieser Diplomarbeit sollen von Java vorgesehene Sicherheitsmechanismen zur Reduzierung dieser Risiken (bspw. digitale Zertikate, das Ausfuhren des Codes in einer Sandbox, etc.) verwendet und analysiert werden. Zusatzlich zu der Hauptaufgabe werden alternativ folgende Erweiterungen bearbeitet: 1. Wird in einer ersten Version die Verwendung eines Schlussels pro Anfrage angenommen, so kann diese Annahme spater gelockert werden: Hat ein Benutzer mehrere Schlussel, so konnen unterschiedliche Quellen ihre Antworten auch mit unterschiedlichen oentlichen Schlusseln verschlusseln. In diesem Fall bedarf es auch unterschiedlicher Schlussel zum Entschlusseln der Teilantworten, wobei der vom Mediator erstellte mobile Code die Zuordnung der entsprechenden Schlussel zu den jeweiligen Teilantworten sicherstellen muss. Diese Verwaltung zu implementieren ist eine mogliche Erweiterung der Hauptaufgabe. 2. In der ersten Version wird angenommen, dass die Quellen dem Mediator ihre Daten als verschlusselte Antworten auf SQL-Anfragen schicken. In dem Mediatorkonzept in [ABFK03] kann jedoch auch ein Mediator als Quelle agieren. In diesem Fall wurde die Quelle nicht direkt eine verschlusselte Antwort zurucksenden, sondern selbst wieder mobilen Code zur Berechnung der Antwort erstellen. Eine weitere mogliche Erweiterung der Hauptaufgabe ist, den Einuss von mobilem Code eingebettet in anderen mobilen Code auf die Sicherheitsanforderungen, die Sicherheitsprobleme und die zuvor analysierten Losungen zu untersuchen. 8 3 Berechnungen des Mediators auf den Teilantworten 3 Berechnungen des Mediators auf den Teilantworten Der Mediator nimmt dem anfragenden Kunden die Aufteilung der Gesamtanfrage in Teilanfragen und die Suche nach den richtigen Datenquellen ab. Als Anfragesprache benutzt der Kunde (in diesem Falle der menschliche Benutzer oder auch ein anderes Programm auf dem Kundenrechner, das Datenbankanfragen erzeugt) eine Teilmenge der Structured Query Language (SQL), die sich als relationale Algebra darstellen lasst. Der Mediator erstellt aus einer Anfrage einen Algebrabaum; in diesem Baum benden sich algebraische Operatoren in den inneren Knoten und Teilanfragen in den Blattern. Als Denitionsgrundlage der Algebra habe ich die algebraischen Basisoperatoren nach Kemper und Eickler ([KE96]) benutzt. Ein algebraischer Operator ist demnach ein Element aus der Menge fVereinigung, Kreuzprodukt, Mengendierenz, Projektion, Selektion, Umbenennung von Attributen g. Eine Teilanfrage an einem Blatt ist eine SQL-Anfrage, die von einer Datenquelle unabhangig von anderen Datenquellen beantwortet werden kann. Die Datenquellen verschlusseln ihre Teilantwort auf die Teilanfragen mit den oentlichen Schlusseln des Kunden. Die Forderung nach Verschlusselung der Teilantworten ist unabdingbar, da vertrauliche Daten nicht einmal dem Mediator bekanntgegeben werden sollen. Idealerweise sollte der Mediator auf die verschlusselten Teilantworten die Operatoren im Algebrabaum anwenden und so eine verschlusselte Gesamtantwort berechnen. Er schickt die verschlusselte Gesamtantwort an den Kunden, der sie entschlusseln und die Daten lesen kann. Diese Vorgehen bietet folgende Vorteile: Der Kunde erhalt nur die minimale Datenmenge als Antwort und muss sie (auer der Entschlusselung) nicht weiter bearbeiten. Die Datenquellen geben ihre verschlusselten Teilantworten nur an den Mediator weiter. Die Teilantworten gelangen nicht in die Hande des Kunden, der zwar die Berechtigung hat, die Daten zu lesen, aber vielleicht gar nicht wei, wie er danach fragen soll. Berechnungen auf verschlusselten Daten (engl. computing with encrypted data, CED) sind aber nur eingeschrankt moglich. Das Problem der Berechnungen auf Schlusseldaten ist wohl schon so alt wie die Kryptographie selbst. Welche theoretischen Ansatze es fur Berechnungen auf verschlusselten Daten gibt, mochte ich im folgenden Abschnitt vorstellen. Abschnitt 3.2 behandelt danach ein Verfahren fur die teilweise Auswertung von SQL-Ausdrucken auf verschlusselten Tabellen. Alternativ zu einer Berechnung auf vollstandig verschlusselten Daten kann dem Mediator die Moglichkeit gegeben werden, Relationen teilweise zu entschlusseln. Dazu stelle ich die Datensatzverschlusselung mit Teilschlusseln in Abschnitt 3.4 vor. 3.1 Berechnungen auf verschlusselten Daten Theoretische Modelle fur eine verteilte Berechnung auf verschlusselten Daten gehen in der Regel von zwei Teilnehmern aus; sie werden haug als Alice und Bob bezeichnet. Alice hat einen Eingabewert x und Bob eine Funktion f ; Alice mochte den Funktionswert f (x) zu ihrer Eingabe erhalten. Dabei darf Bob den Funktionswert nicht herausbekommen und Alice nichts Entscheidendes uber die Funktion f erfahren. Bob ist auf polynomielle Rechenzeit beschrankt, wahrend Alice unbeschrankte Rechenzeit zur Verfugung hat. Ein Optimierungsziel ist, die Zahl der Kommunikationsrunden zwischen Alice und Bob moglichst gering zu halten; optimal ist also eine Kommunikationsrunde: Alice schickt ihre Klartexteingabe x (die sie vorher verschlusselt) an Bob und Bob sendet f (x) (ebenfalls in verschlusselter Form) an Alice. Ein Protokoll mit nur einer Kommunikationsrunde heit auch nichtinteraktiv\. Daneben gibt es zwei Modelle fur mogliche Angrie. In dem einen Modell ist "der Angreifer "ehrlich aber neugierig\; er halt sich an das vereinbarte Kommunikationsprotokoll aber versucht, seinen Opfern passiv zu schaden, 3.1 Berechnungen auf verschlusselten Daten 9 indem er vertrauliche Informationen abfangt (diese Informationen kann er dann aber an andere weitergeben, die einen aktiven Angri durchfuhren). In dem anderen Modell ist der Angreifer bosartig\ und versucht aktiv (etwa durch falsche oder zu lange Berechnungen) einen korrekten "Abauf des Protokolls zu verhindern. Fur Berechnungen auf verschlusselten Zahlen aus einer Gruppe Z=N Z (fur N 2 N) haben Sander, Young und Yung (siehe [SYY99]) ein nichtinteraktives Protokoll entwickelt, mit dem mit einer Funktion f aus der Komplexitatsklasse1 NC 1 zu einer verschlusselten Eingabe e(x) der Funktionswert f (e(x)) berechnet werden kann; Bob muss die Eingabe nicht entschlusseln, um die Funktion f auf e(x) auszuwerten2 . Alice kann mit der entsprechenden Entschlusselungsfunktion aus f (e(x)) ezient den Wert f (x) berechnen; sie kann jedoch aus dem Ergebnis keine Ruckschlusse auf die Funktion f ziehen. Sie verwenden ein probabilistisches Verschlusselungsschema e, bei dem ein Eingabebit auf mehrere Schlusselreprasentationen abgebildet wird. Fur die Halbgruppe Z=2Z geben Sander et al. ein UND-homomorphes Verschlusselungsschema e0 an: sie entwerfen einen Operator , so dass fur zwei Klartexteingaben x1 ; x2 2 Z=2Z gilt: e0 (x1 ) e0 (x2 ) = e0 (x1 UND x2 ). Bisher wurden nur wenige solcher Verschlusselungsschemata entwickelt. Ein allgemeines algebraisches homomorphes Verschlusselungsschema fur Z=2Z, fur das man einen additiven Operator und einen mulitplikativen Operator benotigt, wurde unter der Annahme, dass man aus dem Ergebnis einer Multiplikation oder Addition die Eingabewerte nicht ableiten kann, beliebige Berechnungen auf verschlusselten Daten ermoglichen (siehe [SYY99], Seite 556). Young und Yung merken als generelles Problem solcher Verschlusselungsschemata jedoch an, dass die Eingabewerte durch die Verschlusselung groer und die Operatoren komplexer werden (vgl. [YY04], Seite 143). Eng verwandt mit Berechnungen auf verschlusselten Daten ist die sichere Funktionsauswertung (engl. secure function evaluation). Die beiden Teilnehmer Alice und Bob stellen Eingaben fur eine gemeinsame Funktion bereit. Beide sollen das Endergebnis erhalten, ohne dass sie die Eingabe des anderen Teilnehmers in Erfahrung bringen (vgl dazu auch [YY04], Seite 145). Cachin et al. (siehe [CCKM00]) betrachten sichere Funktionsauswertung und fordern zusatzlich, dass Bob den Funktionswert nicht erfahrt. Sie zeigen, dass mit "beschrankter Alice\ und unbeschranktem Bob\ ein nichtinteraktives Protokoll zur sicheren Berechnung von Funktionen "existiert, die durch Schaltkreise polynomieller Groe berechnet werden konnen. Jedoch mussen alle Eingaben zum gleichen Zeitpunkt erfolgen. Goldreich (siehe [Gol04], Seite 693) betrachtet verteilte Berechnung mit mehreren Teilnehmern. Er beschreibt ein sicheres Protokoll (in dem kein Teilnehmer die Eingabe der anderen Teilnehmer erfahrt) fur beliebige Funktionen, die sich durch Schaltkreise darstellen lassen. Er zeigt, wieviele Teilnehmer maximal das Protokoll aktiv angreifen durfen, damit das Protokoll sicher bleibt. Fur jeden Eingabebaustein des Schaltkreises ist allerdings eine "vergessliche U bertragung\ (engl. oblivious transfer; siehe [CCKM00], Seite 516) notig (vgl. dazu auch [AMP04], Seite 41). Nachdem lange Zeit nur Berechnungen auf verschlusselten naturlichen Zahlen moglich waren, haben Stern, Foque und Wackers (siehe [FSW03] in [Bla03]) ein homomorphes Kryptosystem fur beschrankte rationale Zahlen entworfen: in ihm sind Multiplikation und Addition auf einer verschlusselten Darstellung von rationalen Zahlen durchfuhrbar. Sie bauen dafur auf dem Paillier-Kryptosystem fur Berechnungen auf verschlusselten naturlichen Zahlen auf (siehe dazu [Pai99]). Neben den Versuchen, allgemeine homomorphe Verschlusselungsschemata zu nden, wird die Nick's class\ NC 1 umfasst alle Folgen boolscher Funktionen, die durch Schaltkreise logarithmischer Tiefe "und polynomieller Groe berechnet werden konnen; vgl. etwa [Weg96], Seite 18. 2 Ein Schaltkreis, der die Funktion f berechnet, besteht aus ODER- und NICHT-Gattern. UND-Gatter werden nach den DeMorgan-Regeln ersetzt. 1 10 3 Berechnungen des Mediators auf den Teilantworten Auswertung einzelner Operatoren auf verschlusselten Daten untersucht. Freedman, Nissim und Pinkas (siehe [FNP04]) betrachten den Fall, in dem Alice und Bob jeweils eine Menge mit mehreren Elementen haben und die Elemente in der Schnittmenge berechnen wollen, ohne dass dem jeweils anderen die restlichen Elemente bekannt gegeben werden. Sie berechnen die Schnittmenge mit Hilfe eines Polynoms P , dessen Nullstellen die ka Elemente x1 ; : : : ; xka von Alice sind: P (y) = (x1 y) (xka y) = X y ka u=0 u u Die Koezienten u des Polynoms werden homomorph mit einer Erweiterung des PaillierKryptosystems e00 verschlusselt. Alice erstellt dieses Polynom, berechnet die Koezienten durch Interpolation, verschlusselt sie und sendet sie an Bob. Bob wertet das verschlusselte Polynom auf jedem seiner Elemente y1 ; : : : ykb aus und multipliziert das Ergebnis mit einer jeweils neuen Zufallszahl rj ; schlielich verschlusselt er das Element und addiert es hinzu: yj0 = e00 (rj P (yj ) + yj ) fur j = 1; : : : kb : Freedman et al. verringern den Berechnungsaufwand fur das Polynom durch verschiedene Verfahren. Bob permutiert die Ergebnisse und schickt sie an Alice. Alice entschlusselt sie und erhalt als Schnittmenge fxi jxi = e00 1 (yj0 ); i = 1; : : : ka ; j = 1; : : : kb g (e00 1 sei die passende Entschlusselungsfunktion). Fur alle anderen Elemente von Bob erhalt sie Zufallszahlen. Freedman et al. zeigen, dass ihr Verfahren sicher gegen bosartige Alice und bosartigen Bob ist. In dem Fall benotigen sie jedoch mindestens funf Kommunikationsrunden. Schlielich erweitern sie ihr Protokoll auf mehrere Teilnehmer. A hnliches zeigen Aggarwal, Mishra und Pinkas (siehe [AMP04]) fur die Berechnung des kkleinsten Elements der Vereinigung von zwei Mengen. Sie benotigen O(k) Kommunikationsrunden. In einem folgenden Artikel beschreiben Malkhi et. al (siehe [MNPS04]) die praktische Umsetzung einer sicheren Funktionsauswertung mit zwei Teilnehmern. Sie entwarfen eine Programmiersprache und ein U bersetzungsprogramm, das ein Programm dieser Sprache in einen Schaltkreis umwandelt. Die Ausdrucksfahigkeit der Sprache ist begrenzt. Es durfen zum Beispiel keine Rekursionen benutzt werden, damit aus dem Schaltkreis keine Informationen uber den Kontrolluss abgeleitet werden konnen. Bei der Auswertung des Schaltkreises muss einer der Teilnehmer fur jeden Eingabebaustein seine verschlusselte Eingabe an den anderen Teilnehmer senden. Man kann das Multimediamediator-System als Sonderform der sicheren Funktionsauswertung betrachten. Allerdings sollen die Teilnehmer, die die Eingaben liefern { also die Datenquellen, das Funktionsergebnis nicht erfahren, sondern der Kunde. Fur den Multimediamediator ware eine nichtinteraktive Berechnung auf den verschlusselten Teilantworten optimal. Das heit, dass die Datenquellen dem Mediator die verschlusselten Tabellen ubergeben und der Mediator auf den verschlusselten Tabellen die verschlusselte Gesamtantwort berechnet, ohne nochmals mit den Datenquellen oder jemand anderem kommunizieren zu mussen. Der Mediator leitet die verschlusselte Gesamtantwort dann an den Kunden weiter. An der Berechnung nehmen nicht nur zwei Teilnehmer teil, sondern viele Datenquellen und Mediatoren konnen zum Ergebnis beitragen. Da die bisher bekannten Verschlusselungsschemata nur mit einem eingeschrankten Operatorensatz arbeiten, ist eine allgemeine Ausfuhrung von Programmen auf verschlusselten Daten nicht moglich. Ein zusatzliches ungelostes Problem ist, dass die Datenquellen die Teilantworten eventuell sogar mit verschiedenen Schlusseln und mehrfach verschlusseln sollen. Mir sind keine Ansatze bekannt, die auf derart verschlusselten Daten rechnen konnten. 11 3.2 Auswertung von SQL-Ausdrucken auf verschlusselten Tabellen 3.2 Auswertung von SQL-Ausdrucken auf verschlusselten Tabellen Es gibt Bemuhungen, die Auswertung von SQL-Ausdrucken auf verschlusselten Tabellendaten zu ermoglichen. Hacgumus, Iyer, Li und Mehrota (siehe [HILM02]) benutzen Partitionierungen von Wertebereichen, auf denen die Berechungen durchgefuhrt werden. Leider lasst sich dieser Ansatz nicht auf den Multimediamediator ubertragen, da sein Anwendungsbereich anders gelagert ist. Hacgumus et al. schlagen den Einsatz von relationalen Operatoren auf verschlusselten Tabellen vor, um Datenbanksysteme zu entlasten: ein Datenbanksystem bekommt eine Anfrage eines Kunden und mochte einen Teil der Auswertungsarbeit von einem anderen Rechner ausfuhren lassen, der seine Rechenzeit anbietet. Dieser Rechenanbieter soll die Daten aber nicht transformierte Tabelle und Anfrage Anfrage Datenbank Kunde Ergebnis Berechnung auf entschlüsselten Daten Rechen anbieter Obermenge des Ergebnisses Berechnung auf verschlüsselten Daten Abbildung 3: Rechenanbieter fur Datenbanksysteme lesen konnen. Er bekommt von dem Datenbanksystem daher eine verschlusselte Tabelle und berechnet mit seinen relationalen Operatoren eine Teilmenge der Zeilen3 . Diese Zeilen werden an das Datenbanksystem zuruckgeschickt. Es entschlusselt die Zeilen und berechnet auf den entschlusselten Zeilen das wirkliche Ergebnis. Fur das Datenbanksystem sinkt damit der Rechenaufwand. Allerdings muss das Datenbanksystem die Tabelle nicht nur verschlusseln sondern dem Rechenanbieter zusatzliche Angaben machen, damit er seine Teilauswertung durchfuhren kann. Das Datenbanksystem partitioniert den Wertebereich jedes Attributs in disjunkte Teilbereiche und nummeriert diese Teilbereiche durch. Die Tabelle wird zeilenweise verschlusselt und danach durch weitere Attribute erganzt. Fur jedes Attribut A erhalt die Tabelle eine neues Attribut AS . Fur den Wert jedes Attributs in einer Zeile wird die unverschlusselte Nummer des Teilbereichs angegeben, in dem sich der Wert bendet: Fur ein Attribut A und den Wert vi dieses Attributes in der Zeile i wird in der neuen Spalte AS der Wert num(vi ) eingetragen (es sei num die Funktion, die einem Wert die Nummer des Teilbereiches zuweist, in dem der Wert sich bendet). Da der Rechenanbieter die Partitionierungsfunktion (und die Nummerierung), die das Datenbanksystem benutzt, nicht kennt, erhalt er dadurch zunachst keine vertraulichen Informationen. Ein Beispiel fur diese Partitionierung bendet sich im Originaltext [HILM02]. Wenn die Teilbereiche zusammenhangend sind, kann die Nummerierung der Teilbereiche ordnungserhaltend sein (so denn der Wertbereich des Attributs eine Ordnung aufweist). Das bedeutet, dass fur ein Attribut A und dessen Wertebereich (A) gilt: wenn vi ; vj 2 (A) und vi < vj , dann gilt num(vi ) num(vj ). Damit wird aber auch dem Rechenanbieter die Ordnung unter den Teilbereichen bekannt gemacht. Nach der Verschlusselung und Erganzung der Tabelle wird die Anfrage so umgeformt, dass sie vom Rechenanbieter ausgefuhrt werden kann. Dazu mussen zunachst einmal die Bedingungen, die in der Anfrage vorkommen, geandert werden. Fur den ordnungserhaltenden Fall sieht das so aus: Rechenanbieter kann verschlusselte Tabellen auch dauerhaft speichern, um das Ubertragen einer Tabelle in jeder Anfrage einzusparen. 3 Der 12 3 Berechnungen des Mediators auf den Teilantworten Bei Test auf Gleichheit von Attributen mit einer Konstanten wird statt der Konstante die Nummer des Teilbereichs eingesetzt, in der sich die Konstante bendet. Also aus der Bedingung "A = 4\ wird die neue Bedingung "AS = num(4)\. Bei einem Kleinervergleich wird muss zusatzlich die Gleichheit mit aufgenommen werden, da Attributwert und Vergleichskonstante im selben Teilbereich liegen konnen: aus der Bedingung "A < 4\ wird die neue Bedingung "AS num(4)\. Groervergleiche werden analog zu Kleinervergleichen umgesetzt. Die Nummerierung der Teilbereiche muss nicht ordnungerhaltend sein. So erfahrt der Rechenanbieter nicht einmal die Reihenfolge der Werte in der Tabelle. Allerdings gestaltet sich die Umformung der Anfrage schwieriger. Bei Groer- und Kleinervergleichen wird dann die Vergleichskonstante durch eine Menge von Teilbereichsnummern ersetzt. Weitere Umformungen von Bedingungen (insbesondere der Vergleich zweier Attributwerte und die boolsche Verknupfung von Bedingungen) mochte ich hier nicht auuhren; sie sind im Originaltext zu nden. Hacgumus et al. beschreiben abschlieend die Funktionsweise ihrer relationalen Operatoren fur den Rechenanbieter. Jeder Operator rechnet auf den Teilbereichsnummern. Das Ergebnis der anbieterseitigen Auswertung ist daher eine Obermenge des wirklichen Ergebnisses. Das Datenbanksystem entschlusselt das Ergebnis des Anbieters und fuhrt dann eine Nachbearbeitung durch, um das wirkliche Ergebnis zu erhalten, das sie an den Kunden zurucksendet. Diese Verfahren zur Berechnung von SQL-Ausdrucken auf verschlusselten Tabellen verschleiert die Werte innerhalb der Tabelle. Die Struktur der Tabelle (also die Anzahl der Zeilen und Spalten) wird dem Rechenanbieter dennoch bekannt gemacht. Eine endgultige Auswertung ndet wieder auf den unverschlusselten Daten statt. Der Ansatz von Hacgumus et al. lasst sich nicht auf den Multimediamediator ubertragen. Alle Datenbanksysteme mussten eine gemeinsame Partitionierungs- und Nummerierungsfunktion benutzen, damit der Mediator zumindest teilweise die Ausfuhrung durchfuhren konnte. Das Endergebnis kann er jedoch nicht selbst berechnen, sondern nur eine Obermenge dessselben. Aus dieser Obermenge musste dann das wirkliche Endergebnis ermittelt werden; dazu kommt als Einziger der Kunde in Frage, da nur er berechtigt ist, das Endergebnis zu erhalten. Es mussten ihm die von allen Datenbanken verwendete Partitionierungs- und Nummerierungsfunktion bekannt gegeben werden, die sich nach im Ansatz von Hacgumus et al. jedoch nicht andern soll, um standige Neuberechnungen zu vermeiden. Eine verschlusselte Tabelle ist deshalb weder vor den anderen Datenbanksystemen noch vor Kunden geschutzt, die bereits eine Antwort erhalten haben. Wenn sich die Funktionen mit jeder Anfrage andern, mussten alle beteiligten Datenbanksysteme bei einer Anfrage auf die neuen Funktionen einigen, ihre Tabellen neu verschlusseln und sie dem Rechenanbieter zukommen lassen. 3.3 Eingeschranktes Verfahren fur Berechnungen des Multimediamediators Damit ein Mediator nichtinteraktiv eine Gesamtantwort mit relationalen Operatoren aus verschlusselten Teilantworten berechnen kann, sind starke Einschrankungen des Verschlusselungsverfahrens und der Funktionalitat notig: Relationale Operatoren betrachten einzelne Attributwerte und mussen auf Tabellen arbeiten, deren Struktur (die Spalten- und Zeilenanzahl) sie kennen; alle Teilantworten mussen mit demselben Schlussel verschlusselt werden, um Vergleich auf Schlusseldaten und das Zusammensetzen von Tabellen zu ermoglichen, und als Vergleichsoperator fur Selektionspradikate sind nur = und 6= zugelassen. Um die Tabellenstruktur zu erhalten, muss die Datenquelle jede Zelle der Tabelle (auch die Attributnamen) einzeln mit dem oentlichen Schlussel des Kunden verschlusseln und die Tabelle mit den verschlusselten Eintragen zuruckliefern. Die Operatoren Vereinigung und Kreuzprodukt konnen auf den verschlusselten Tabellen wie auf unverschlusselten arbeiten, da sie die Tabellen nur aneinander hangen; ebenso die Mengendierenz, da sie nur die Gleichheit von Eintragen uberpruft. Den 3.3 Eingeschranktes Verfahren fur Berechnungen des Multimediamediators 13 Operatoren Selektion und Projektion, die die Angabe eines Selektionspradikates beziehungsweise einer Menge von Projektionsattributen benotigen, mussen diese Eingaben verschlusselt ubergeben werden. Fur ein Selektionspradikat "Name = 'Muller'\ mussten "Name\ und "Muller\ zu den Schlusseltexten crypt("Name\) und crypt("Muller\) verschlusselt werden und in der verschlusselten Tabelle die Spalte crypt("Name\) nach Eintragen mit dem Wert crypt("Muller\) durchsucht werden. Der Operator zur Umbenennung von Attributen benotigt als Eingabe den verschlusselten Namen des Attributs und den verschlusselten neuen Wert. Auf Schlusseltexten sind im Allgemeinen bisher nur Gleichheits- beziehungsweise Ungleichheitsvergleiche moglich; Vergleiche auf Gleichheit von Zelleninhalten konnen auf Schlusseltexten ohne weitere Angabe durchgefuhrt werden unter der Voraussetzung, dass alle Werte mit demselben Schlussel verschlusselt wurden. Groer- und Kleinervergleiche konnen nicht ausgewertet werden, da die Verschlusselung die Ordnung auf den Daten zerstort. Tritt in einem Selektionspradikat aber zum Beispiel ein auf, kann von der Datenquelle eine partielle Ordnung auf den verschlusselten Daten des betreenden Attributs mitgeliefert werden. Diese bleibt dann solange gultig, wie der Spalte keine neuen Eintrage hinzugefugt werden (zum Beispiel durch eine Vereinigung). Dieses Verfahren der Berechnung auf verschlusselten Tabellenzellen umfat nicht den vollen Funktionsumfang, den der Multimediamediator bieten soll. Damit die Schlusseltexte uberhaupt vergleichbar sind, muss das Verschlusselungsverfahren folgende Eigenschaften haben: alle Teilantworten mussen mit demselben Schlussel verschlusselt werden gleiche Klartexte mussen in gleiche Schlusseltexte umgewandelt werden das Verschlusselungsverfahren muss kollisionsfrei sein; ein Schlusseltext darf nicht zu mehreren Klartexten gehoren Die Vertraulichkeit der Daten ist mit diesem Verfahren aus mehreren Grunden nicht gewahrleistet. Da dem Mediator nicht nur das Schema, sondern auch die Zeilenanzahl der Tabelle bekannt gemacht wird, kennt er die Anzahl der Zeilen und Spalten und die Anordnung der Schlusseldaten in der Tabelle. Er kann Schlusseldaten dadurch thematisch gruppieren. Er bekommt eine groe Anzahl kurzer Schlusseltexte zu sehen, die alle mit demselben Schlussel verschlusselt wurden, und hat daher die Moglichkeit eventuell einzelne Klartexte aus dem Kontext zu raten. Ohne die Klartexte zu kennen kann er auf den Schlusseltexten die prozentualen Anteile gleicher Eintrage ermitteln. Beispielsweise lasst sich fur eine Spalte "Geschlecht\ mit Werten 2 fmannlich, weiblichg schon eine entscheidende Information (namlich das Frauen-Manner-Verhaltnis) mit ein wenig Vorwissen aus den Schlusseltexten ermitteln. Wenn dem Mediator beispielweise bekannt ist, dass er eine Tabelle mit Daten von Informatikstudierenden bearbeitet, wird eine Spalte mit nur zwei Werten die Spalte sein, die das Geschlecht angibt; die kleinere Anzahl wird davon in der Regel der Frauenanteil, die groere Anzahl der Manneranteil sein. Der Mediator kann auerdem selbst einen Teil der Tabelle von der Datenquelle abfragen, fur den er eine Berechtigung besitzt. Er kann mit der Antwort einen Klartextangri auf die mit dem Kundenschlussel verschlusselte Tabelle durchfuhren. Eventuell reicht es sogar, die verschlusselten mit den entschlusselten Daten in Beziehung zu setzen. Denning ([Den82], S. 148) beschreibt als Beispiel eine Gehaltstabelle, in der anhand der verschlusselten Gehalter und der nichtverschlusselten Namen herausgefunden werden kann, welche Personen dasselbe verdienen. Wie oben schon erwahnt, ist der Multimediamediator bei der Berechnung auf verschlusselten Tabellen auf Gleichheitsvergleiche eingeschrankt. Groer- und Kleinervergleiche sind nur auf Relationen der Teilantworten moglich aber nicht mehr in zusammengefugten Relationen; die Angabe und Prufung der partiellen Ordnung auf den Teilantworten ist ein groer zusatzlicher Aufwand. Durch die partielle Ordnung erhalt der Mediator zudem wieder Zugri auf vertrauliche Informationen: in der Gehaltstabelle kann er beispielsweise herausnden, welche Person das meiste verdient. Der Mediator kann nicht nur geheime Daten ausspionieren. Da jede Tabellenzelle einzeln verschlusselt ist, kann er die Inhalte Tabellenzellen austauschen, indem er zum Beispiel Werte aus anderen Zellen kopiert. So kann er die Gesamtantwort falschen, ohne 14 3 Berechnungen des Mediators auf den Teilantworten Daten entschlusseln zu mussen. Einen Vorteil bietet das Verfahren mit verschlusselten Tabellenzellen jedoch: die Anfrage kann vom Kunden schon teilweise verschlusselt werden. Als Selektionspradikat kann er beispielweise sofort "crypt("Name\) = 'crypt("Muller\)'\ angeben. Der Mediator kennt dann die Attributnamen und die Vergleichskonstanten nicht. Wenn in Teilanfragen Selektionen oder Projektionen vorkommen, muss die Datenquelle sie auf der mit demselben Schlussel wie die Anfrage verschlusselten Tabelle durchfuhren. 3.4 Datensatzverschlusselung mit Teilschlusseln Wenn der Mediator nicht auf vollstandig verschlusselten Daten rechnen kann, kann man ihm einen Teil der Daten entschlusselt zur Verfugung stellen. Er kann dann mit diesen Daten rechnen, wahrend der Rest der Daten ihm weiterhin unbekannt ist. Im Folgenden mochte ich theoretisch prufen, ob eine solche Methode fur den Multimediamediator verwendbar ist. Das Verfahren, das ich als Grundlage nutze, ist die "Datensatzverschlusselung mit Teilschlusseln\ von Davida, Wells und Kam (siehe [DWK81]). Davida et al. gehen von einer Menge von t Datensatzen aus, die jeweils die gleiche Anzahl n von Feldern mit den Inhalten fij (fur i = 1 : : : t; j = 1 : : : n) besitzen. Man benotigt insgesamt n Schlussel zum Verschlusseln (die "Schreibschlussel\) und n korrespondierende Schlussel zum Entschlusseln (die "Leseschlussel\). Es wird immer ein Datensatz als Ganzes verschlusselt. Jedes Feld innerhalb eines Datensatzes wird mit einem Schreibschlussel verschlusselt und die n Verschlusselungsergebnisse werden aufsummiert. Aus dem verschlusselten Datensatz kann ein Feld nur mit dem korrespondierenden Leseschlussel entschlusselt werden. Die Leseschlussel werden auch "Teilschlussel\ genannt, da sie einzeln nie den gesamten Datensatz sondern nur einen Teil (namlich das jeweilige Feld) entschlusseln. Umgesetzt auf den Multimediamediator ergibt sich folgendes Bild: Eine Tabelle mit t Zeilen und n Spalten ist eine Menge von t Datensatzen, namlich den t Zeilen der Tabelle. Die n Felder eines Datensatzes sind die n Zellen der Zeile. Fur jede Spalte der Tabelle gibt es einen Leseschlussel zum Entschlusseln (fur die j -te Spalte sei dies dj ) und einen Schreibschlussel zum Verschlusseln (dies sei ej ). Die Leseschlussel sind beliebige verschiedene Primzahlen; allerdings muss dj groer sein als die Daten, die spater mit ej verschlusselt werden. Zur Berechnung der Schreibschlussel wird das Produkt aller Leseschlussel benotigt: D := nj dj . Die Schreibschlussel ej berechnen sich dann aus den dj und D wie folgt: Zunachst berechnet man eine multiplikative Inverse bj zu dDj in Zdj , so dass also gilt dDj bj = 1 mod dj . Mit als der Eulerschen Totientenfunktion ist eine mogliche Inverse bj = ( dDj ) dj mod dj . Da dj prim ist und fur eine Primzahl p gilt (p) = p 1, kann man noch vereinfachen: bj = ( dDj )dj mod dj . Fur Davida et al. ist das die kanonische Darstellung der Inversen. Der Schreibschlussel ej ergeben sich dann als: ej = ( dDj )bj . Jede Tabellenzelle fij wird mit einer Zufallszahl xj konkateniert, bevor sie verschlusselt wird (jj sei der Konkatenationsoperator). Die Zufallszahl xj soll eine Kryptoanalyse zu erschweren, die die Berechnung eines groten gemeinsamen Teilers auf zwei Datensatzen versucht. Eine Tabelle wird von einer Datenquelle zeilenweise verschlusselt, wobei sich der Schlusseltext Ci der Zeile i nach der folgenden Formel ergibt: =1 ( ) 1 2 Ci = X e (x jjf ) mod D n j =1 j j ij fur i = 1 : : : t Nach dem chinesischen Restklassensatz (vgl. etwa [Weg96], Seite 105) gilt, dass Ci eine Losung des Gleichungssystems der Form Ci = (xj jjfij ) mod dj fur j = 1 : : : n ist. Diese Losung ist eindeutig in ZD . Demnach kann (xj jjfij ) mit dem Schlussel dj ausgelesen werden, indem 3.4 Datensatzverschlusselung mit Teilschlusseln 15 Ci mod dj berechnet wird. Davida, Wells und Kam stellen auerdem eine Art randomisier- tes Signaturverfahren vor, um die Authentizitat von Datensatzen nachprufen zu konnen. Ein groes logistisches Problem bei diesem Ansatz ist meiner Meinung nach die groe Menge an Schlusseln, die benotigt wird. Jede Teilantwort hat so viele Teilschlussel, wie sie Spalten besitzt. 3.4.1 Umsetzung auf den Multimediamediator Der Mediator kann aus den verschlusselten Teilantworten die verschlusselte Gesamtantwort berechnen, ohne die Gesamtantwort vollstandig lesen zu konnen, wenn er nur die Tabellenzellen entschlusseln darf, die er fur die Ausfuhrung der Operatoren im Algebrabaum benotigt. Dazu muss er bei den Datenqellen die Leseschlussel (die jeweils fur eine Spalte gelten) beantragen. Die Datenbank kann dann entscheiden, ob es sicher ist, dem Mediator den Schlussel zu geben, oder ob der dadurch schon zu viele Kenntnisse uber die Gesamtantwort erhalt. Die Beantragung und U bertragung der Schlussel sind als Extra-Kommunikationsrunden zu sehen, so dass hier nur ein interaktives Protokoll moglich ist. Es muss sichergestellt werden, dass der Mediator nicht alle dj eines Datensatzes erhalt. Er kann sonst D und alle ej ausrechnen. Abgesehen davon, dass der Mediator den vollstandigen Datensatz zu sehen bekommt, konnte er damit die Tabellendaten verandern und erneut verschlusseln, ohne dass es dem Kunden auallt. Dagegen gibt es ein Mittel: Eine Datenquelle kann Fullspalten, die keine relevanten Daten enthalten, in ihre Teilantworten einfugen. Die Leseschlussel fur diese Fullspalten halt sie in jedem Fall geheim. Dem Kunden mussen zur Entschlusselung die Leseschlussel fur Nicht-Fullspalten zuganglich gemacht werden. Sie werden mit den oentlichen Schlusseln aus den Eigenschaftsnachweisen verschlusselt und in einem "Schlusselbund\ zusammengefasst. Nur berechtigte Kunden konnen also die Leseschlussel entschlusseln und damit die Gesamtantwort erhalten. In folgenden Abschnitt diskutiere ich, wie die algebraischen Operatoren "Umbenennung von Attributen\, "Selektion\, "Projektion\, "Vereinigung\, "Mengendierenz\ und "Kreuzprodukt\ fur die Datensatzverschlusselung umgesetzt werden konnen und welche Auswirkungen das auf die Geheimhaltung der Tabellen hat. 3.4.2 Umsetzung der algebraischen Operatoren Ich gehe vereinfachend davon aus, dass die Metadaten der Tabelle (also die Attributnamen) unverschlusselt sind. Da das Konzept des Multimediamediators ein Anwendungsschema fur den Mediator vorsieht, das die Metadaten der Datenquellen vereint, bringen unverschlusselte Metadaten keine neuen Erkenntnisse fur ihn. Zunachst betrachte ich die unaren Operatoren "Umbenennung von Attributen\, "Selektion\ und "Projektion\: Die Umbenennung ist auf den unverschlusselten Metadaten problemlos moglich. Es wird der alte Attributname durch den neuen ersetzt. Bei einer Selektion mussen die Selektionsspalten entschlusselt werden. Fur die Selektionsspalten k1 ; k2 : : : kl beantragt der Mediator bei der Datenquelle die Schlussel dk1 ; dk2 : : : dkl . Damit entschlusselt er diese Spalten. Danach wertet der Mediator das Selektionspradikat aus. Erfolgt die Selektion fur ein Attribut durch den Vergleich mit einer Konstante, wird fur jede Zeile der Wert des Attributs mit der Konstante verglichen. Erfolgt die Selektion fur ein Attribut durch den Vergleich mit einem Vergleichsattribut, muss zusatzlich diese Vergleichsspalte entschlusselt werden. In das Endergebnis werden alle Ci ubernommen, fur die das Selektionspradikat erfullt ist. Fur eine rechnerische Ausfuhrung einer Projektion musste der Mediator alle Spalten einer Tabelle entschlusseln konnen, denn durch eine Herausnahme von Spalten k1 ; k2 : : : kl verfallen die Schlussel dk1 ; dk2 : : : dkl ; sie ieen nicht mehr in die Berechnung von D ein. Mit einer A nderung des Wertes D andern sich aber samtliche Schreibschlussel und damit die Verschlusselungsergebnisse fur die Zeilen. 16 3 Berechnungen des Mediators auf den Teilantworten Eine Neuverschlusselung der Tabelle fur die Projektion ist jedoch gar nicht notwendig: Man kann die Projektionsspalten k1 ; k2 : : : kl auch einfach in Fullspalten umdenieren und die Schlussel dk1 ; dk2 : : : dkl (beziehungsweise ihre verschlusselte Darstellung) aus dem Schlusselbund entfernen. An der verschlusselten Tabelle andert sich dadurch nichts. Die binaren Operatoren "Vereinigung\, "Mengendierenz\ und "Kreuzprodukt\ bergen groere Probleme bei der Umsetzung. Es werden zwei Tabellen zusammengesetzt, die in der Regel mit verschiedenen Schreibschlusseln verschlusselt wurden. Dabei gehe ich davon aus, dass die jeweiligen Tabellen operationsvertraglich sind. Zunachst einmal will der Mediator Tabellen verschlusseln, die er direkt als Teilantworten von den Datenquellen erhalten hat und die noch nicht weiter bearbeitet wurden. Eine Vereinigung von zwei Tabellen kann ausgefuhrt werden, ohne die Tabelleninhalte zu kennen. Die Aufgabe besteht darin, dafur zu sorgen, dass alle Datensatze mit denselben Schreibschlusseln verschlusselt wurden. Dafur kann er die Leseschlussel (fur Nicht-Fullspalten) der einen Tabelle und die Schreibschlussel und den Wert D der anderen beantragen. Er entschlusselt die eine Tabelle und verschlusselt sie erneut mit den Schreibschlusseln der anderen. Der Mediator kann bei der Neuverschlusselung einer Tabelle alternativ auch die Datenquellen um Mithilfe bitten: Bei einer Vereinigung von zwei Tabellen, deren Spalten mit unterschiedlichen ej verschlusselt wurden, kann der Mediator eine Datenquelle nach ihren Schreibschlusseln fur Nicht-Fullspalten und dem Wert D fragen. Dann bittet er die zweite Datenquelle, ihre Tabelle mit diesen Schreibschlusseln und diesem D zu verschlusseln. In beiden Fallen konnte die ersten Datenquelle die neu verschlusselten Daten der zweiten Datenquelle entschlusseln, da sie im Besitz der Leseschlussel ist. Wenn die zweite Tabelle von der ersten subtrahiert werden soll und die Schnittmenge zwischen beiden Tabellen nicht leer ist, muss der Mediator auf jeden Fall alle Leseschlussel der Nicht-Fullspalten der beiden Tabellen haben. Sonst kann er die Zeilen, die gleich sind, nicht herausnden. Die Datenquellen konnten ihm die Schlussel aber schrittweise zur Verfugung stellen. Wenn der Mediator anhand weniger entschlusselter Spalten bereits sieht, dass es keine gleichen Zeilen in den Tabellen gibt, braucht er die weiteren Schlussel nicht zu beantragen. Um das Kreuzprodukt auszurechnen, braucht der Mediator die Kenntnis aller Tabelleninhalte, da er jeweils einen Datensatz aus der ersten Tabelle mit einem Datensatz aus der zweiten Tabelle addieren muss. Dazu muss er alle Spalten entschlusseln und neu verschlusseln. Es muss sichergestellt sein, dass alle Leseschlussel verschieden sind, da andernfalls der chinesische Restklassensatz nicht mehr gilt. Allerdings kann der Mediator auch wieder auf die Mithilfe der Datenquellen zuruckgreifen. Die erste Datenquelle muss Leseschlussel d1j1 und die zweite Datenquelle d2j2 benutzen, die paarweise verschieden sind (mit j1 = 1 : : : n + k1 und j2 = 1 : : : n + k2 fur die n NichtFullspalten und die k1 Fullspalten der ersten und die k2 Fullspalten der zweiten Datenquelle); es muss also gelten dlj1 6= dlj2 fur l 2 f1; 2g, j1 = 1 : : : n + k1 und j2 = 1 : : : n + k2 . Wenn die beiden Datenquellen sich auf entsprechende Schlussel geeinigt und D berechnet haben (mit einem Verfahren wie zum Beispiel "vergessliche U bertragung\ (engl. oblivious transfer; siehe [CCKM00], Seite 516), konnen sie ihre Schreibschlussel berechnen und ihre Daten verschlusseln. (Oder der Mediator berechnet aus den Teilprodukten jn1+=1k1 d1j1 und nj2+=1k2 d2j2 den Wert D.) Danach kann der Mediator die beiden Teildatensatze modulo D addieren. Wenn die Datenquellen sich auf die Leseschlussel einigen konnten, ohne deren Werte wirklich auszutauschen, dann kann auch keine aus den verschlusselten Tabellen die Daten der anderen Datenquelle herauslesen. 3.4 Datensatzverschlusselung mit Teilschlusseln 17 Die Weiterverarbeitung solcher Tabellen innerhalb des Algebrabaums ist schwierig; der Mediator muss die U bersicht uber die verwendeten Schlussel behalten und wissen, bei wem er die entsprechenden Schlussel beantragen muss. Es konnte ein zusatzlicher Teilnehmer am Multimediamediator-System eingefuhrt werden. Eine Instanz, die die Entschlusselung und Neuverschlusselung von Datensatzen vornimmt, wenn es zu Konikten in den binaren Operatoren kommt. Dieser Teilnehmer sieht dann zwar die entschlusselten Datensatze, wei aber nicht, durch welche Operatoren sie zusammengesetzt werden. 18 3 Berechnungen des Mediators auf den Teilantworten 19 II. Diskussion Inhalt 4 Kommunikationsschemata fur den Multimediamediator . . . . . . . . . . . 4.1 Anforderungen und Nachteile . . . . . . . . . . . . . 4.2 Aufteilung von Entschlusselung und Berechnung . . 4.3 Kommunikation zwischen Mediator und Kunde . . . 5 Vor- und Nachteile von mobilem Code . . . . . . . 5.1 Verringerung der ubertragenen Datenmenge . . . . . 5.2 Unabhangigkeit von der Netzverbindung . . . . . . . 5.3 Vermeidung eines verteilten Berechnungszustands . . 5.4 Lokalitat von Ressourcen . . . . . . . . . . . . . . . 5.5 Einfachheit des Empfangersystems . . . . . . . . . . 5.6 Erweiterbarkeit des Empfangersystems . . . . . . . . 6 Sicherheitsrisiken durch mobilen Code . . . . . . . 6.1 Angrie des mobilen Codes gegen den Kunden . . . 6.2 Schutz des Kunden vor Angrien des mobilen Codes 6.3 Angrie des Mediators gegen den Kunden . . . . . . 6.4 Schutz des Kunden vor Angrien des Mediators . . . 6.5 Schutz der Teilantworten auf dem Mediator . . . . . 6.6 Schutz des mobilen Codes bei der U bertragung . . . 6.7 Schutz des mobilen Codes auf dem Kundenrechner . 6.8 Verhinderbarkeit von Angrien mit Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 20 21 23 28 28 29 30 30 31 31 34 35 38 43 45 46 47 48 53 Vertrauen ist die emotionale Sicherheit, einem anderen Menschen "und dem eigenen Dasein oen gegenubertreten und sich hingeben zu konnen. Vertrauen ist die Grundlage jeglicher nahen zwischenmenschlichen Beziehung, aber auch der Begegnung mit Freunden sowie fur jedes Gesprach.\ Brockhaus 20 4 Kommunikationsschemata fur den Multimediamediator 4 Kommunikationsschemata fur den Multimediamediator Die Einschrankungen der Berechnung auf verschlusselten Tabellenzellen und der Berechnung mit Teilschlusseln sollen fur den Multimediamediator nicht hingenommen werden: man mochte es den Datenquellen ermoglichen, unterschiedliche Schlussel zur Verschlusselung der Teilantworten zu verwenden, und dem Mediator die genaue Struktur (zumindest die Zeilenanzahl) einer Teilantwort verheimlichen. Auerdem soll der Mediator moglichst wenig mit den anderen Teilnehmern kommunizieren. Um Vergleiche zwischen Tabellen durchfuhren zu konnen, die mit unterschiedlichen Schlusseln verschlusselt wurden, mussen entschlusselte Daten ausgewertet werden. Der Mediator soll die Daten aber nicht zu Gesicht bekommen. Daher muss die Entschlusselung auf dem Kundenrechner stattnden. Um die Vertraulichkeit der Teilantworten zu wahren, durfen die entschlusselten Daten den Kundenrechner nicht mehr verlassen. Das bedeutet jedoch, dass der Kundenrechner zusatzlich die Funktionalitat bereitstellen muss, die Gesamtantwort zu berechnen. Welche Moglichkeiten es gibt, um das alles zu gewahrleisten, mochte ich im Abschnitt 4.2 erlautern und in dem dann folgenden Abschnitt 4.3 mogliche Schemata fur die Kommunikation zwischen Mediator und Kunde diskutieren. Zunachst mochte ich aber noch kurz auf allgemeine Anforderungen an den Multimediamediator und auf generelle Nachteile im Konzept der Mediation eingehen. 4.1 Anforderungen und Nachteile Es gibt einige grundsatzliche Anforderungen an das Multimediamediator-System, die es mit anderen verteilten Anwendungen gemein hat. Ich mochte folgende Mechanismen in dieser Diplomarbeit als gegeben voraussetzen: Zertikatsausstellung: Bevor ein Kunde auf geschutzte Daten zugreifen kann, muss er sich die entsprechenden Zertikate von dritter Stelle ausstellen lassen. Die Datenquellen mussen zur Zugriskontrolle die Moglichkeit haben, die Authentizitat der Zertikate zu uberprufen. Schlusselverteilung: Wenn der Kunde sicher sein will, dass eine Antwort vom richtigen Mediator kommt, muss der Mediator die Antwort signieren und der Kunde mit dessen oentlichem Schlussel die Signatur uberprufen; dazu muss der Kunde aber zunachst auf sicherem Wege den Schlussel des Mediators erhalten und das nicht nur fur einen, sondern fur alle Mediatoren, die er benutzen mochte. Korrektheit und Vollstandigkeit der Antwort: Die Korrektheit einer Antwort kann nicht immer sichergestellt werden. Falls beispielsweise eine Datenquelle zeitweise nicht zur Verfugung steht, kann es vorkommen, dass die Antwort nicht vollstandig ist und relevante Daten fehlen. Der Mediator muss in diesem Falle zum Zeitpunkt der Anfrage Ersatzdatenquellen nden. Durch die Nutzung eines Mediators erleichtert sich der Kunde die Anfrage. Er nimmt damit aber auch Nachteile in Kauf, die dem Konzept der Mediation inharent sind. Als die zwei Hauptprobleme sehe ich die folgenden an: Unverschlusselte Anfrage: Der Mediator bekommt die Anfrage als Klartext, da er sonst die Aufspaltung der Anfrage nicht durchfuhren kann. Damit erfahrt der Mediator zumindest das Themeninteresse des Kunden und die Anfrage gibt ihm Vorwissen uber die Antwort, so dass er vom Schlusseltext auf den Klartext der Antwort schlieen konnte. Kontrolle der Datenquellen: Die Abkapselung der Datenquellen von den Kunden fuhrt dazu, dass die Kunden keinerlei Metainformationen uber die Datenquellen erhalten; sie 4.2 Aufteilung von Entschlusselung und Berechnung 21 konnen Glaubwurdigkeit, Qualitat, Kontext und Aktualitat der Quellen nicht uberprufen, sondern mussen dem Mediator vertrauen, dass er zuverlassige Quellen benutzt. Das ist speziell ein Problem, wenn zusatzlich eine Monopolisierung stattndet und ein einziger Mediator die Anfragen nahezu aller Kunden beantwortet. 4.2 Aufteilung von Entschlusselung und Berechnung Die Aufspaltung der Anfrage fuhrt dazu, dass die Teilantworten zu einer Gesamtantwort zusammengesetzt werden mussen. Aus der Verschlusselung der Teilantworten folgt, dass die Daten wieder entschlusselt werden mussen. Diese beiden Aufgaben konnen auf verschiedene Arten zwischen Multimediamediator und Kunde aufgeteilt werden. Dabei mochte man den Kunden moglichst entlasten, aber gleichzeitig die Vertraulichkeit von zu schutzenden Daten und geheimen Schlusseln gewahrleisten. Grundsatzlich kann man feststellen, dass die Verschlusselung der Teilantworten dazu fuhrt, dass zum Kunden sehr viel mehr Daten ubertragen werden, als er fur die Gesamtantwort eigentlich braucht; dies wird in Abschnitt 5.1 weiter erlautert. Zu beachten ist hierbei, dass der Kunde trotzdem nur Daten von den Datenquellen bekommt, die er zu sehen berechtigt ist. Falls die Datenquelle eine Anfrage nach einer Relation bekommt, von der der Anfrager nur einen Teil sehen darf, dann schickt die Datenquelle auch nur diesen Teil zuruck. Den Teil der Relation, den der Anfrager nicht sehen darf, behalt sie weiterhin fur sich. Die Datenquellen verschlusseln zunachst einmal ihre Teilantworten mit den oentlichen Schlusseln des Kunden. Da die Berechnung auf verschlusselten Daten { wie oben erlautert { nicht praktikabel ist, ergeben sich fur die Aufteilung von Entschlusselung und Berechnung vier Moglichkeiten: Szenario A: Der Mediator entschlusselt die Teilantworten und berechnet aus den entschlusselten Teilantworten die Gesamtantwort, die er dann (eventuell in verschlusselter Form) an den Kunden sendet. Dieses Szenario hat zwei Nachteile: Der Mediator bekommt auf jeden Fall die Teilantworten zu sehen, da er mit den entschlusselten Daten rechnet. Zusatzlich muss der Kunde dem Mediator aber auch seine privaten Entschlusselungschlussel zuganglich machen, damit der Mediator die Entschlusselung der Teilantworten durchfuhren kann. Wenn es eine Moglichkeit gabe, den Mediator die Daten so entschlusseln zu lassen, dass er den Schlussel weder sehen und kopieren, noch mehrfach verwenden kann, wurde der zweite Nachteil wegfallen. Die Wunschvorstellung ist also, dass der Kunde den Schlussel in einer "schwarzen Kiste\ sendet. Der Mediator kann die Kiste nicht einsehen; das heit, er bekommt den Schlussel nicht zu Gesicht. Aber er kann einmal eine verschlusselte Teilantwort in die Kiste eingeben und bekommt die entschlusselten Daten heraus. Als Hardwarelosung ware es moglich, den Schlussel auf einer Chipkarte dem Mediator zu senden und die Entschlusselung auf der Chipkarte durchzufuhren. Dies ware aber (sowohl fur Kunden als auch Mediatoren) ein sehr groer Aufwand. Eine reine Softwarelosung fur die Entschlusselung unter Geheimhaltung des Schlussels ist zur Zeit nicht realisierbar. Wenn der Kunde seinen Schlussel namlich kryptographisch schutzt, musste der Mediator eine Moglichkeit haben, mit dem verschlusselten Schlussel andere Daten zu entschlusseln. Er musste also mit dem verschlusselten Schlussel rechnen konnen. Dass das nicht generell moglich ist, habe ich im Abschnitt 3.1 dargestellt. Der Kunde musste also dem Mediator Zugri auf seinen Schlussel im Klartext erlauben. Allerdings gibt es auch fur Berechnungen mit Schlusseln auf fremden Rechnern theoretische Ansatze; Sander und Tschudin (siehe [ST98]) geben ein Signierschema an, bei dem durch Komposition einer Berechnungsfunktion mit einer Signierfunktion nur Fuktionswerte der Berechnungsfunktion signiert werden konnen; deshalb kann die Signierung auf einem beliebigen 22 4 Kommunikationsschemata fur den Multimediamediator Rechner durchgefuhrt werden. Eine solche Komposition musste auch fur die Entschlusselungsfunktion des Kunden moglich sein. Allerdings musste dann der Kunde seine Entschlusselungsfunktion mit der Berechnungsfunktion des Mediators komponieren; der Mediator musste dem Kunden also seine Berechnungsfunktion bekannt geben. Andernfalls konnte der Mediator auch andere Daten entschlusseln, die mit dem Schlussel verschlusselt wurden, wenn er erst einmal im Besitz des Entschlusselungsschlussels ware. Der Kunde konnte daher nicht kontrollieren, was der Mediator mit seinem Schlussel machte. Der Kunde hat in diesem Szenario die wenigste Arbeit: Er muss mit der Anfrage nur seine Entschlusselungsschlussel mitschicken und eventuell die Gesamtantwort entschlusseln, wenn der Mediator sie in verschlusselter Form zurucksendet. Szenario B: Der Mediator sendet die verschlusselten Teilantworten an den Kunden. Der Kunde entschlusselt die Teilantworten, um nachzuweisen, dass er im Besitz der Entschlusselungschlussel ist. Danach sendet er die entschlusselten Teilantworten an den Mediator, der daraus die Gesamtantwort berechnet. Der Nachteil, dass der Mediator die entschlusselten Teilantworten zu sehen bekommt, bleibt bestehen.Der Kunde behalt aber seine privaten Schlussel fur sich, da er die Entschlusselung durchfuhrt. Dieses Szenario entspricht einer Client-Server-Architektur, wie sie Holger Peine ([Pei02], Seite 2) in seiner Dissertation als traditionelles, synchrones Kommunikationsschema in Rechnernetzen vorstellt: Ein Client sendet Anfragen an einen Server und der Server Antworten an den Client. Charakteristisch fur eine Client-Server-Kommunikation sind nach Peine: 1. ein hauger Datenverkehr uber eine logische Verbindung, die auf einer sehr zuverlassigen und performanten physischen Verbindung aufbaut 2. ein im Vorhinein festgelegtes Protokoll, uber das der Anfrage-Antwort-Dialog gefuhrt wird 3. eine dauerhaft bestehende Verbindung. In der Denition von Peine werden keine ausfuhrbaren Programme verschickt, sondern der Server verarbeitet die Anfrage und sendet die Antwortdaten und der Client verarbeitet die Antwortdaten. Der Dialog des Kunden mit dem Multimediamediator sieht wie folgt aus: Der Kunde sendet als erste Anfrage seine Suchanfrage. Er bekommt als erste Antwort die verschlusselten Teilantworten. Er sendet als zweite Anfrage die entschlusselten Teilantworten und bekommt als zweite Antwort die Gesamtantwort. Der Kunde hat durch die Entschlusselungsarbeit mehr zu tun als in Szenario A; die Berechnung der Gesamtantwort nimmt der Mediator dem Kunden jedoch ab. Szenario C: Der Kunde ubernimmt sowohl das Entschlusseln der Teilantworten als auch das Berechnen der Gesamtantwort. Er bekommt dazu vom Mediator einen Algebrabaum mit den verschlusselten Teilantworten in den Blattern. Er entschlusselt zunachst die Teilantworten und berechnet dann auf den entschlusselten Daten die Gesamtantwort. Der Mediator hat damit weder Zugri auf entschlusselte Teilantworten noch auf private Schlussel des Kunden. Allerdings benotigt der Kunde ein Programm, dass die Berechnung der Gesamtantwort vornimmt. Der Kunde hat in diesem Szenario die meiste Arbeit. Szenario D: Im letzten Fall kann der Mediator die Entschlusselung aber nicht die Berechnung vornehmen. Er entschlusselt die Teilantworten mit dem Schlussel des Kunden; dafur gibt es dieselben Moglichkeiten wie in Szenario A. Er schickt dann einen Algebrabaum mit den entschlusselten Teilantworten an den Kunden. Der Kunde berechnet aus dem Algebrabaum die Gesamtantwort. Diese Variante vereint alle Nachteile der anderen Szenarien in sich. 23 4.3 Kommunikation zwischen Mediator und Kunde Szenario Szenario A Vorgehensweise Nachteile Mediator entschlusselt private Schlussel werden und berechnet freigegeben und Mediator kann Daten lesen Szenario B Kunde entschlusselt Mediator kann Daten lesen und Mediator berechnet Szenario C Kunde entschlusselt Kunde muss Programm zur und berechnet Berechnung besitzen Szenario D Mediator entschlusselt private Schlussel werden und Kunde berechnet freigegeben, Mediator kann Daten lesen und Kunde muss Programm zur Berechnung besitzen Tabelle 1: Aufteilung von Entschlusselung und Berechnung zwischen Kunde und Mediator In Tabelle 1 werden die vier Szenarien noch einmal aufgelistet. Dem Mediator soll im Multimediamediator-Konzept moglichst wenig Vertrauen entgegengebracht werden. Er soll zwar aus der Anfrage einen Algebrabaum erstellen, die Teilanfragen an Datenquellen senden und die verschlusselten Teilantworten in den Algebrabaum einsetzen. Er soll aber nicht mit dem Entschlusselungsschlussel des Kunden rechnen und die Teilantworten nicht entschlusselt zu Gesicht bekommen. Nur Szenario C erfullt diese Anforderungen. Dem Kunden muss daher die Mehrarbeit zu Berechnung der Gesamtantwort aufgeburdet werden. 4.3 Kommunikation zwischen Mediator und Kunde Es stellt sich die Frage, in welcher Form der Multimediamediator die Antwort an den Kunden sendet. Der Kunde ist nur an der Gesamtantwort interessiert und nicht an den einzelnen Teilantworten der Datenquellen; das Konzept der Mediation sieht gerade vor, dass dem Kunden nur die relevanten Daten geliefert werden. Er sollte als zusatzliche Angabe hochstens den (oder die) Entschlusselungsschlussel auswahlen mussen, damit im Vergleich zu einer Anfrage ohne Verschlusselung die Benutzung nicht zu umstandlich wird. Aufgabe des Kundenprogramms ist es, aus der Antwort des Mediators die Gesamtantwort zu berechnen und dem Benutzer zu prasentieren. Fur die Auslieferung und Berechnung der Gesamtantwort gibt es drei Kommunikationsschemata, die den Rechenaufwand unterschiedlich auf die Teilnehmer verteilen: mobile Daten, mobiler Code und mobile Agenten. Auf den ersten Blick scheint der Begri "mobiler Code\ intuitiv verstandlich { es handelt sich um ein Softwaremodul, das auf einem Rechner erstellt und auf einem anderen Rechner ausgefuhrt wird. Eine eindeutige Denition ist jedoch nicht trivial und eine Abgrenzung zu den Begrien "mobile Daten\ und "mobile Agenten\ schwierig. In diesem Abschnitt werden daher diese drei Konzepte zunachst beschrieben und dann auf den Multimediamediator ubertragen. Zunachst aber noch eine Begrisklarung: Auf Bitebene der Netzverbindung zwischen zwei Rechnern gibt es keinen Unterschied zwischen Daten und Code; Daten werden nur dann zu Code, wenn ein Prozessor sie als Programmanweisungen interpretieren kann. Peine ([Pei02], Seite 9) schreibt dazu: "Eine Menge von Daten wird allein dadurch zu Code, dass ein Prozessor sie sich ansieht und Aktionen durchfuhrt, wie er sie in diesem Code beschrieben sieht\4 . Ich mochte Daten und Code auf der Prozessor- und nicht der Bitebene betrachten. 4 Ubersetzt aus dem Englischen; Originaltext: "A piece of data becomes code only by some processor looking at it and performing actions as it sees described in that code.\ 24 4 Kommunikationsschemata fur den Multimediamediator Basierend auf [Pei02], [Vig98] und [Bau00] stelle ich fur diese Diplomarbeit die folgenden Denitionen auf: Mobile Daten, Bearbeitungsprogramm: Beim Konzept der mobilen Daten gibt es einen Kunden, der Informationen anfragt, und einen Anbieter, der diese Informationen bereithalt. Die Kommunikation zwischen Kunde und Anbieter ist reiner Datenaustausch ohne Programmanweisungen; die Berechnung oder Datenverarbeitung der Daten auf dem Kundenrechner erfolgt durch ein Programm, das bereits vorher auf dem Kundenrechner vorhanden war, ein sogenanntes Bearbeitungsprogramm. Mobile Daten sind unabhangig von fest vorgegebenen Bearbeitungsprogrammen (sie sind sogar unabhangig von der Programmiersprache eines Bearbeitungsprogramms) { es konnen auf Kundenseite andere benutzt werden als auf Anbieterseite. Mobile Daten werden aber immer in einem fest vereinbarten Format zwischen Kunde und Anbieter ubertragen. Die Kontrolle des Datenverkehrs obliegt allein dem Kunden und dem Anbieter; das heit, die U bertragung wird explizit vom Kunden angefordert und dann vom Anbieter durchgefuhrt. Mobiler Code, Ausfuhrungsumgebung, Code auf Nachfrage, Fernauswertung: Mobiler Code besteht aus einer festkodierten Anweisungsfolge, die von einem Prozessor ausgefuhrt werden kann. Eventuell gehort auch ein Satz Daten dazu, auf dem der Code arbeitet. Eine Instanz eines mobilen Codes wird an nur einen Empfangerrechner geschickt und nur auf ihm ausgefuhrt. Eine Installation des Codes ist dazu nicht notwendig, sondern die Ausfuhrung kann sofort gestartet werden. Um dem Empfanger Kontrolle uber den Ablauf des mobilen Codes zu geben, sollte der Code in einer Ausfuhrungsumgebung laufen, einem Programm, das das darunterliegenden Betriebssystem vom mobilen Code abschirmt. Der Empfanger kann dem Code mit der Ausfuhrungsumgebung sicherheitsrelevante Aktionen verbieten (Naheres dazu folgt im Abschnitt 6.2). Fong ([Fon98], Seite 4) unterscheidet mobilen Code noch darin, ob der Empfanger oder der Sender die Kommunikation zwischen Sender und Empfanger initiiert. Beginnt der Empfanger, handelt es sich um Code auf Nachfrage: der Sender verlagert mit dem Code Rechenaufgaben, die eigentlich in seinem Aufgabenbereich liegen, auf den Empfanger; ein Beispiel dafur sind Applets. Beginnt der Sender die U bertragung, handelt es sich um Fernauswertung: ein Datenanbieter kann mit mobilem Code, den er als Anfrage vom Kunden bekommt, auch die Datenverarbeitung durchfuhren, die sonst der Kunde durchfuhren wurde; der Kunde ist der Anbieter des mobilen Codes. Im Gegensatz zu mobilen Daten verschieben sich also bei mobilem Code die Rollen Kunde und Anbieter { man kann stattdessen besser von Empfanger und Sender des Codes sprechen. Ein eindeutiges Datenformat muss nicht mehr festgelegt werden. Allerdings muss der Code dem Empfangersystem eine oentliche Schnittstelle fur die Ausfuhrung bieten. Die U bertragung und Ausfuhrung des Code konnen aber mussen nicht der Kontrolle des Empfangers unterliegen. Computerviren sind ein Beispiel fur nichtkontrollierbaren mobilen Code ohne Ausfuhrungsumgebung und ohne Kontrolle der U bertragung. mobile Agenten, starke und schwache Migration, Agentensystem: Der Begri mobile Agenten wurde zuerst im Bereich der Kunstlichen Intelligenz eingefuhrt. Unabhangig davon hat aber auch die Programmiersprache Telescript diesen Begri fur ihre Programmmodule verwendet; sie wird heute als das erste Agentensystem bezeichnet. Von einer hohen Abstraktionsebene aus betrachtet, handelt der mobile Agent in der virtuellen Welt im Auftrag eines realen Individuums. Ein mobiler Agent besteht { wie mobiler Code { aus Daten und Code. Eine Instanz eines mobilen Agenten fuhrt verteilte Berechnungen auf mehreren Rechnern aus. Die Berechnungen verandern die Daten. Eine Installation des Agenten-Codes ist nicht notwendig. Werden zwischen zwei Wirtsrechnern nur der Code und die Daten ubertragen und beginnt die Ausfuhrung jedesmal an 4.3 Kommunikation zwischen Mediator und Kunde 25 demselben Startpunkt im Agentenprogramm, spricht man von schwacher Migration. Wird auerdem auch noch der aktuelle Prozesszustand ubertragen und setzt der Agent seine Berechnungen an der Stelle fort, an der er sie unterbrochen hatte, spricht man von starker Migration5 . Die Wirtsrechner bilden ein Netzwerk aus gleichberechtigten Partnern. Auf jedem von ihnen lauft der Agent in einer Ausfuhrungsumgebung { hier ein sogenanntes Agentensystem. Ein Agent bendet sich meist auf dem Rechner, der die Ressourcen hat, die er gerade benotigt. Der Aufenthaltsort kann aber auch abhangig von der Auslastung des Netzwerks und der einzelnen Rechner gewechselt werden. Ein Agent kann mit anderen Agenten oder mit anderen Wirtsrechnern uber das Netz kommunizieren. Ein mobiler Agent kann seinen Aufenthaltsort wechseln, ohne dass sein Wirtsrechner Kontrolle daruber hat. Auch er muss dem Agentensystem aber eine Schnittstelle fur die Ausfuhrung bereitstellen. Die Grenzen zwischen den drei Typen verteilter Berechnung sind ieend und in der Literatur ist keine eindeutige Denition zu nden. Fur den Multimediamediator sehe ich die folgenden Moglichkeiten, die Kommunikationsschemata einzusetzen. Eine Umsetzung des Multimediamediators mit mobilen Daten verlangt, dass Kunden und Mediatoren sich auf ein Datenformat einigen { beziehungsweise ein Mediator seinen Kunden ein Datenformat vorgibt. Das Datenformat bildet den Algebrabaum ab; dazu lasst sich zum Beispiel XML (Extensible Markup Language) benutzen. Der Kunde bekommt vom Mediator auf seine Anfrage eine Datei mit dem entsprechenden Algebrabaum. Um die Gesamtantwort zu erhalten, benutzt er ein Bearbeitungsprogramm, das die verschlusselten Teile in dieser Datei entschlusselt, die Datei einliest und den Algebrabaum berechnet { allerdings mit Operatoren, deren Programmcode im Bearbeitungsprogramm enthalten und damit bereits auf dem Kundenrechner installiert sind. Wenn im Laufe der Zeit der Mediator sein Datenformat andert (zum Beispiel neue Operatoren einfugt oder ein anderes Format fur die Teilantworten benutzt) oder bessere Algorithmen fur die Operatoren gefunden werden, bedeutet das fur den Kunden, dass er sein Bearbeitungsprogramm aktualisieren muss; er hat damit zusatzlichen Installationsaufwand. Zudem muss das Bearbeitungsprogramm auf eine groe Menge von Datenformaten und passenden Operatoren vorbereitet sein. Es muss dazu eine Vielzahl von Bibliotheken bereithalten, auch wenn die Formate vielleicht nie benutzt werden. Eine Umsetzung des Multimediamediators mit mobilem Code bedeutet, dass der Mediator dem Kunden den Algebrabaum als ausfuhrbares Programm schickt. Fur eine objektorientierte Programmiersprache sieht das so aus, dass Operatoren-Objekte die inneren Knoten und Teilantwort-Objekte die Blatter des Baumes bilden. Die Operatoren-Objekte haben eine Methode, die auf dem Kind oder den Kindern die gewunschte Berechnung durchfuhrt. Als Antwort auf eine Kundenanfrage erstellt der Mediator die entsprechende Instanz eines solchen Algebrabaums und schickt sie an den Kunden. In Java heit das insbesondere, dass die Instanz des Baums und zusatzlich der Binarcode der Operatoren und der Datenformate des Baums und der Teilantworten mitgeschickt wird. Mediator und Kunden mit mobilem Code sind damit im Gegensatz zu Mediator und Kunden mit mobilen Daten erweiterbar. Die Schnittstelle zwischen mobilem Code und Kundenrechner sollte besonders allgemein und klein gehalten werden, damit A nderungen an Datenformat und Operatoren keine Neuinstallation auf dem Kundenrechner verursachen. Im mobilen Code sind nur die Bibliotheken enthalten, die der Code fur seine Ausfuhrung benotigt. Der Kunde macht sich damit jedoch insofern abhangig von der Programmiersprache des 5 Man kann den Prozesszustand dann im Gegensatz zu den (Last-)Daten, auf denen die Berechnungen des Agenten durchgefuhrt werden, als eigentstandigen Satz von Ausfuhrungsdaten betrachten. 26 4 Kommunikationsschemata fur den Multimediamediator mobilen Codes, dass er eine Laufzeitumgebung fur die Programmiersprache bereitstellen muss. Mobile Agenten lassen sich in der Kommunikationsrichtung Mediator zu Kunde nicht einsetzen, denn jede Antwort wird zu nur einem Kunden geschickt und nicht zu mehreren Rechnern. Das Agenten-Konzept konnte vielmehr das Mediator-Konzept sogar ersetzen, indem der Kunde einen Agenten mit einer Anfrage erstellt und dieser Agent selbststandig bei den Datenquellen die Antwort zusammensucht. Agenten konnten das Mediatorsytem aber auch erganzen, indem der Kunde einen Agenten mit einer Anfrage an den Mediator sendet, der Mediator die Anfrage aufspaltet und die Datenquellen vorgibt, die der Agent zu Beantwortung der Anfrage aufsucht, bevor er zum Kunden zuruckkehrt. mobile Daten Mediator sendet Algebrabaum in festgelegtem Format; Kunde hat Bearbeitungsprogramm, das die Gesamtantwort berechnet mobiler Code Mediator sendet Algebrabaum als ausfuhrbares Programm, das die Gesamtantwort berechnet; Kunde bindet dazu Bibliotheken zur Laufzeit ein mobile Agenten nicht fur Kommunikationsrichtung Mediator zu Kunde; aber als Erweiterung der Kommunikation des Mediators mit den Datenquellen denkbar Tabelle 2: Schemata der Kommunikation des Mediators mit dem Kunden Tabelle 2 stellt die drei Konzepte fur den Multimediamediator noch einmal gegenuber. Wenn Sicherheitseinstellungen auf dem Kundenrechner vorgenommen werden sollen, ist bei allen drei Ansatzen ein Kundenmodul notwendig, namlich bei mobilen Daten ein Bearbeitungsprogramm, bei mobilem Code eine Ausfuhrungsumgebung und bei mobilen Agenten ein Agentensystem. Solch ein Kundenmodul muss fur alle drei Ansatze aus vertrauenswurdiger Quelle stammen oder aber einmal bei der Installation auf seine Unbedenklichkeit gepruft werden. Da Kunden und Datenquellen das Multimediamediator-System dynamisch betreten und verlassen konnen, bietet mobiler Code den Vorteil, dass beliebige Antwortformate durch mitgelieferte Programmmodule verarbeitet werden konnen. Ein starres Bearbeitungsprogramm auf Kundenseite { wie bei mobilen Daten vorhanden { kann zu schnell an Aktualitat verlieren und muss dann neu installiert werden. Die Neuinstallation muss aktiv vom Kunden durchgefuhrt werden, wahrend die Programmmodule des mobilen Codes immer aktuell und sofort lauahig sind, ohne dass der Kunde etwas tun muss. Unter der Annahme, dass sich die Antwortformate nur selten andern, ist der groe Vorteil der mobilen Daten, dass sie nur das Bearbeitungsprogramm benotigen. Dieses Programm muss nur einmal gepruft werden. Wenn das Bearbeitungsprogramm zertiziert wurde und der Hersteller dem Kunden vertraglich eine korrekte und schadensfreie Ausfuhrung zusichert, muss dieses Zertikat nur einmal vor der Installation gepruft und der Vertrag nur einmal mit dem Hersteller abgeschlossen werden. Bei mobilem Code musste jeder einzelne Code zertiziert werden; der Kunde geht fur jeden Code ein neues Vertragsverhaltnis mit dem Codehersteller ein (siehe dazu auch 6.2.2 auf Seite 40). Unter der Annahme, dass sich die Antwortformate haug andern, musste auch fur jede Aktualisierung und Neuinstallation des Bearbeitunsprogramms ein Zertikat uberpruft und ein Vertrag akzeptiert werden. Ein Bearbeitungsprogramm fur mobile Daten ist zudem umfangreicher als die Ausfuhrungsumgebung fur mobilen Code, da es fur alle moglichen Antwortformate Berarbeitungsroutinen bereithalten muss. Die Ausfuhrungsumgebung des mobilen Codes dagegen enthalt nur grundlegende Routinen, mit denen der Code ausgefuhrt werden soll. Im mobilen Code selbst werden nur die aktuell benotigten Routinen mitgeschickt, so dass der Code nicht so umfangreich ist wie 4.3 Kommunikation zwischen Mediator und Kunde 27 ein ganzes Bearbeitungsprogramm. Auf weitere Vor- und Nachteile von mobilem Code mochte ich in den folgenden Abschnitten eingehen. Da es immer ein Risiko birgt, Code aus unbekannter Quelle auszufuhren, muss eine Ausfuhrungsumgebung fur mobilen Code Vorkehrungen treen, um Angrie des Codes zu vermeiden. In Abschnitt 6 auf Seite 34 wird mobiler Code unter Sicherheitsaspekten betrachtet. 28 5 Vor- und Nachteile von mobilem Code 5 Vor- und Nachteile von mobilem Code Mobiler muss sich dem Vergleich mit anderen Ansatzen stellen konnen. Sein funktional starkster Konkurrent sind mobile Daten. Im Folgenden benutze ich externe Methodenaufrufe (engl. remote procedure calls, RPCs) als Beispiel fur eine Kommunikation mit mobilen Daten. Das Konzept der externen Methodenaufrufe sieht wie folgt aus: Ein Methodenanbieter (der sogenannte RPC-Server) stellt die zu einer Methode gehorende Schnittstelle nach auen zur Verfugung. Er publiziert eine Beschreibung der Methodenfunktionalitat mittels einer Beschreibungssprache (einer Sprache zur Denition der Schnittstelle, engl.interface denition language, IDL); dies ist im einfachsten Fall die Signatur der Methode. Der Kunde (RPC-Client) kann die externe Methode uber sogenannte Methodenstumpfe aufrufen. Der Methodenaufruf und die U bergabe der Parameter als Anfrage und die Ruckgabe des Funktionswertes als Antwort erfolgen synchron uber eine Netzverbindung. Der Methodenname, die Parameter und die Ruckgabewerte sind die mobilen Daten. Das Hauptprogramm und die Methodenstumpfe auf Kundenseite und die Methodenimplementierung auf Anbieterseite sind die Datenbearbeitungsprogramme. Die Funktionalitat eines Programms mit mobilem Code ist auch mit mobilen Daten umsetzbar, solange alle benotigten Schnittstellen von auen zugreifbar gemacht werden konnen. Dies betonen [HCK95] und [Pei02]. Man verspricht sich durch mobilen Code aber eine schnellere oder zuverlassigere Ausfuhrung einer Berechnung; Fong (siehe [Fon98]) und Peine (siehe [Pei02]) zeigen die Vorteile des mobilen Codes anhand von sechs Eckdaten auf. Ob diese Vorteile auch fur den Multimediamediator zutreen oder ob man auch Nachteile durch mobilen Code in Kauf nehmen muss, mochte ich in den folgenden sechs Abschnitten untersuchen. Tabelle 3 stellt mobilen Code im Vergleich zu mobilen Daten im allgemeinen Fall dem mobilen Code im speziellen Fall des Multimediamediators noch einmal gegenuber. 5.1 Verringerung der ubertragenen Datenmenge Bei mobilen Daten kann die ubertragene Datenmenge im Vergleich zu mobilen Daten reduziert werden, wenn der Kunde seine Datenbearbeitungsmethoden in mobilem Code "verpackt\ und an den Anbieter (im Sinne der mobilen Daten; siehe Abschnitt 4.3, Seite 24) schickt. Hierbei handelt es sich um eine Fernauswertung, die im selben Abschnitt beschrieben wurde. Die gesamte Berechnung kann dann auf dem Anbieter ausgefuhrt werden und nur die Gesamtantwort wird an den Kunden ubermittelt. Aber auch vom Anbieter kann Code an den Kunden gesendet werden: bei einem externen Methodenaufruf kann der Algorithmus, der hinter der externen Methode steckt, vom Methodenanbieter auf den Kundenrechner ubertragen werden. Der Aufruf kann dann lokal durchgefuhrt werden und muss nicht uber das Netz geschickt werden. Dies ware Code auf Nachfrage, der der Fernauswertung in Abschnitt 4.3 gegenubergestellt wurde. Peine ([Pei02], Seite 3) schreibt, dass mobiler Code potenziell die ubertragene Datenmenge reduziert. Meiner Ansicht nach hat der Einsatz von mobilem Code jedoch in der Regel zur Folge, dass zusatzlich Daten ubertragen werden mussen (allgemein durch die Versendung des Programmcodes und in Java zusatzlich durch fehlende Klassendenitionen); das gesamte ubertragene Datenaufkommen pro Anfrage wird nur dann verringert, wenn andernfalls ein hauger Datenaustausch zwischen Kunde und Anbieter stattnden wurde oder eine groe Menge an Parametern ubertragen werden musste. Allerdings kann man auch das Datenbearbeitungsprogramm in diese Rechnung miteinbeziehen. Im Bearbeitungsprogramm mussen, wie im letzten Abschnitt bereits erwahnt, eine Vielzahl von Bibliotheken bereits vorhanden sein, die ja zunachst einmal auf dem Kundenrechner gelangen mussen. Auch Aktualisierungen der Bibliotheken mussen an den Kunden ubertragen werden. Der mobile Code enthalt dagegen nur die geringe Anzahl von Bibliotheken, die er fur seine aktuelle Ausfuhrung benotigt. In der Gesamtbilanz kann mobiler Code daher besser dastehen. 5.2 Unabhangigkeit von der Netzverbindung 29 Bei dem in dieser Arbeit entwickelten mobilen Code ist es so, dass nicht nur zusatzliche Bibliotheken ubertragen werden, sondern dass sogar die Nutzdaten unnotig aufgeblaht werden, da mehr Daten ubertragen werden, als fur die eigentliche Berechnung notig sind. Die Aufblahung der Datenmengen ist jedoch eine Folge der Verschlusselung: da die Teilantworten verschlusselt werden und der Mediator sie vollstandig an den Kunden weiterleiten muss, ist die Datenmenge im Vergleich zu einer unverschlusselten Gesamtantwort sehr hoch. Dies ware aber auch mit mobilen Daten der Fall. Mogliche Optimierungen mochte ich im Folgenden kurz vorstellen. 5.1.1 Optimierungen der Teilanfragen Derzeit wird die Gesamtanfrage vollstandig in atomare Ausdrucke zerlegt; eine genauere Beschreibung folgt in Abschnitt 8.2.2 auf Seite 72. Durch eine geschicktere Aufspaltung der Anfrage, konnte der Mediator ezientere Teilanfragen stellen. Der Mediator konnte den Datenquellen etwa mitteilen, welche Attribute einer Relation er fur die Berechnung der Gesamtantwort tatsachlich benotigt. Das kann er erreichen, indem er in die Teilanfragen Projektionen auf die in der Anfrage vorkommenden Attribute einfugt (auch die, die implizit in Verbunden vorkommen). Die Datenquelle braucht dann nur die betrachteten Spalten zuruckzuschicken. Die Anfrage konnte auch nur soweit aufgespalten werden, bis Teilanfragen existieren, die sich auf jeweils eine Datenquelle beziehen; diese komplexeren Teilanfragen konnte dann vollstandig von der jeweiligen Datenquelle beantwortet werden, ohne dass die Anfrage weiter zerlegt werden muss. Dadurch wird der Algebrabaum kleiner; das heit, er enthalt weniger Operatoren und damit auch weniger Ebenen. Das verkurzt die Berechnungsdauer auf dem Kundenrechner. Mit den in 3.2 (Seite 11) dargelegten Einschrankungen kann der Ansatz von Hacgumus et al. genutzt werden, um weniger Daten an den Kunden zu ubertragen. Er kann Daten aus den Teilantwort herausrechnen, die auf jeden Fall nicht in der Gesamtantwort vorkommen und die verbleibenden dann an den Kunden ubertragen. Eine Weitergabe von Selektionen an Datenquellen kann es dem Mediator in einigen Fallen auch erlauben, auf den verschlusselten Teilantworten die Gesamtantwort zu berechen (zumindest wenn die Teilantworten mit demselben Schlussel verschlusselt wurden). Fur ein Beispiel siehe [ABFK03], Seite 390f. Da solcherlei Optimierungen aber nicht Thema dieser Arbeit sind, werde ich sie ihm praktischen Teil nicht umsetzen. Dass eine U bertragung von unnotigen Daten im Gegenteil sogar Vorteile fur die Geheimhaltung der Daten liefert, werde ich in Abschnitt 6.5 (siehe Seite 46) darlegen. 5.2 Unabhangigkeit von der Netzverbindung Bei Kommunikation mit mobilen Daten kann es vorkommen, dass zur Berechnung eines Ergebnisses mehrfach Verbindungen vom Kunden zum Anbieter aufgebaut werden und Verbindungen uber einen langen Zeitraum aufrecht erhalten werden. Mehrfache Verbindungen sind beispielsweise notwendig, wenn vom Kunden mehrere externe Methoden nacheinander aufgerufen werden. Eine Verbindung zum Anbieter muss lange gehalten werden, wenn die Berechnung des Ruckgabewertes einer externen Methode viel Zeit beansprucht. Mit mobilem Code kann eine Berechnung unabhangig von einer standigen Verbindung der Kommunikationspartner durchgefuhrt werden. Im Idealfall wird nur eine temporare Verbindung und eine einmalige U bertragung des mobilen Codes benotigt. Danach ist eine vollig autarke Berechnung des Endergebnisses moglich. Dies ist in dynamischen Netzen ein groer Vorteil, da eine einmalige Datenubertragung weniger anfallig gegenuber Verbindungsabbruchen ist als eine langanhaltende Kommunikation. So wird zwar nicht die qualitative aber die quantitative Robustheit erhoht: Verbindungsabbruche konnen immer noch auftauchen, richten aber keinen so groen Schaden an (vgl. dazu auch Peine [Pei02], Seite 17). Im Vergleich zum Mediatorsystem mit mobilen Daten bietet der mobile Code in diesem Punkt 30 5 Vor- und Nachteile von mobilem Code pro Anfrage keinen Vorteil, da der Mediator die Bundelung der Antworten schon ubernimmt. Eine mehrfache Netzverbindung ist daher auch mit mobilen Daten nicht notwendig. Im Gegenteil ist ein Multimediamediator mit mobilem Code durch die hohere ubertragene Datenmenge noch eher durch Verbindungsabbruche gefahrdet als mit mobilen Daten. Wenn man auch hier das Bearbeitungsprogramm der mobilen Daten in die Betrachtungen mit einbezieht, muss man neben den mobilen Daten auch die Aktualisierungen des Bearbeitungsprogramms ubertragen und braucht auch dafur Netzverbindungen; da das Bearbeitungsprogramm und die Aktualisierungen umfangreicher sind als ein einzelner mobiler Code, mussen diese Verbindungen stabiler sein, als fur eine U bertragung eines mobilen Codes. 5.3 Vermeidung eines verteilten Berechnungszustands Bei einer Client-Server-Kommunikation (siehe Abschnitt 4.2) mussen die Daten sowohl auf der Server- als auch auf der Client-Seite bearbeitet werden. Der Zustand einer Berechnung ist daher verteilt zwischen beiden Parteien. Dieser Berechnungszustand kann inkonsistent werden, wenn die Teilzustande auf beiden Seiten parallel bearbeitet und unabhangig voneinander verandert werden. Es muss beispielsweise darauf geachtet werden, dass der Client nicht schon vor dem Ende einer Anfrage an den Server mit Daten weiterrechnet, in die zunachst noch der Ruckgabewert eingerechnet werden muss (die Daten sich also durch den Ruckgabewert noch andern). Wenn eine Berechnung auf zwei Parteien verteilt ist, aber eine Partei die (Teil-)Berechnung der anderen Partei ubernehmen kann, bietet mobiler Code den Vorteil, dass die gesamte Berechnung lokal durchgefuhrt werden kann. Die Ausfuhrung ndet dann in einem Ausfuhrungsstrang lokal statt und wird nicht durch einen inkonsistenten verteilten Berechnungszustand gefahrdet. Das Konzept der Mediation sieht die Verteilung einer Berechnung auf mehrere Parteien vor. Beim Multimediamediator wird eine Anfrage vom Kunden uber einen primaren Mediator auf mehrere Datenquellen und eventuell auf weitere Mediatoren verteilt. Mediatoren nehmen dabei aber Aufgaben wahr, die nicht auf den Kunden ubertragen werden konnen; dies sind insbesondere die Aufspaltung der Anfrage und die Erstellung des mobilen Codes. Die Datenquellen sind fur die Erstellung der Teilantworten zustandig. Die Berechnung muss also auf alle Parteien verteilt bleiben. Das gilt sowohl fur eine Umsetzung mit mobilem Code als auch fur eine Umsetzung mit mobilen Daten. Aus den folgenden Grunden kann es jedoch nicht passieren, dass der verteilte Berechnungszustand im Mediatorsystem inkosistent wird, auch wenn aus Optimierungsgrunden die Teilanfragen an die betroenen Datenquellen parallel gestellt werden: Zum Einen sind die Datenquellen in der Beantwortung der Teilanfragen unabhangig und der Mediator bearbeitet die Teilantworten nicht weiter; Inkonsistenzen beim Aufbau des Antwortbaumes sind daher zu verhindern . Zum Anderen ndet die Kommunikation zwischen Kunde und Mediator innerhalb einer Anfrage nur seriell statt; wenn die Anfrage des Kunden synchron an den Mediator gestellt wird, muss der Kunde auf die Ruckantwort des Mediators warten, bevor er die Berechnung der Gesamtantwort beginnen oder eine neue Anfrage starten kann. 6 5.4 Lokalitat von Ressourcen Mobiler Code kann dort sein, wo sich die ortsgebundene Ressource bendet, auf die er zugreift. Dadurch ist eine Echtzeitbenutzung der Ressource moglich, ohne dass eine Netzverzogerung die Berechnung beeinut. Eine solche Ressource ist zum Beispiel der Bildschirm; JavaScript als mobiler Code kann die Anzeige einer Webseite dynamisch andern, ohne dass dafur eine HTTP-Anfrage an den Server der Webseite gestellt werden muss. 6 Bei einer seriellen, synchronen Versendung der Teilanfragen muss der Mediator auf die Teilantwort der Datenquelle warten. Bei einer parallelen, asynchronen Versendung kann der Mediator die Teilanfragen durchnummerieren und die Teilantworten an der entsprechenden Stelle in den Algebrabaum einsetzen. 5.5 Einfachheit des Empfangersystems 31 Betrachtet man beim Multimediamediator den privaten Entschlusselungsschlussel des Kunden als Ressource, ist der Aufenthalt des mobilen Codes an dem Ort an dem sich diese Ressource bendet { namlich auf dem Kundenrechner { nicht allein eine Option sondern sogar notwendig. Der mobile Code kann den privaten Schlussel nur auf dem Kundenrechner benutzen (beziehungsweise der Kunde den Code entschlusseln). Eine Veroentlichung des Schlussels oder ein Zugri auf den Schlussel durch den Mediator macht das System hinfallig. Auch mobile Daten konnen zum Standort der Ressource gesendet werden. Sie sind dort allerdings auf jeden Fall auf ein Bearbeitungsprogramm angewiesen, das die Methoden zur Benutzung der Ressource bereithalt. Mobiler Code kann im Gegensatz dazu im Zusammenspiel mit der Eigenschaft "Erweiterbarkeit des Empfangersystems\ (siehe Abschnitt 5.6) die ortsgebundene Ressource exibel benutzen, indem der Code die benotigten Methoden mitbringt. 5.5 Einfachheit des Empfangersystems Das Konzept der mobilen Daten sieht sowohl fur Kunden- als auch fur Anbieterseite Programme zur Bearbeitung von Daten vor. Bei externen Methodenaufrufen etwa sind das auf Kundenseite das Hauptprogramm und die sogenannten Methodenstumpfe, die auch eine Parameterumwandlung durchfuhren konnen, und auf Anbieterseite die eigentliche Methode selbst. Die Idealvorstellung fur mobilen Code ist es dagegen, dass nur der Sender ein Programm hat, das den mobilen Code erstellt und ihn an den Empfanger schickt. Auf Empfangerseite wird der Code ohne weitere Hilfsprogramme innerhalb des Betriebssystems ausgefuhrt. Die Empfanger sind allerdings meist keine homogene Gruppe, sondern benutzen unterschiedliche Betriebssysteme. Der mobile Code braucht dann auch auf der Empfangerseite ein Programm: eine Ausfuhrungsumgebung, die von der zugrundeliegenden Plattform abstrahiert. Diese Ausfuhrungsumgebung gibt dem Empfanger auch die Moglichkeit, die Ausfuhrung des Codes zu kontrollieren. Meiner Ansicht nach ist eine Ausfuhrungsumgebung unabdingbar, wenn fur den mobilen Code Sicherheitseinstellungen vorgenommen werden sollen, da nur ein vertrauenswurdiges Modul auf Kundenseite diese Aufgabe sicher durchfuhren kann. Der mobile Code selbst darf keine Sicherheitseinstellungen auf dem Kundenrechner vornehmen; er muss hochstens nachweisen, dass er bestimmte Sicherheitsregeln einhalt. Ein Verfahren dazu stelle ich in Abschnitt 6.2.3 auf Seite 41 vor. Auerdem schirmt die Ausfuhrungsumgebung das Betriebssystem vom mobilen Code ab. Wie oben schon erwahnt muss die Ausfuhrungsumgebung ein unbedenkliches Programm sein und eventuell bei der Installation uberpruft werden. Zentrales Ziel eines Systems mit mobilem Code sollte es sein, die Ausfuhrungsumgebung moglichst klein zu halten. Mobiler Code bietet den Vorteil, dass die Ausfuhrungsumgebung im Vergleich zum Bearbeitungsprogamm mobiler Daten wenig Speicherplatz und Rechenzeit verbraucht; jeder Code bringt eine geringe Anzahl dynamischer Bibliotheken mit, die auch nur wahrend der Ausfuhrung des Codes auf dem Rechner vorhanden sein mussen. Im Fall des Multimediamediators erscheint es mir zudem wichtig, dass die gesamte Anfragedauer nicht wesentlich groer ist als die Anfragedauer ohne Verschlusselung und Schutzmechanismen. Bei Suchanfragen sind Benutzer (im Gegensatz zu beispielsweise Programminstallationen) meist sehr ungeduldig und verzichten im dem Fall, dass die Suche zu lange dauert, lieber auf Verschlusselung. Die Handhabbarkeit sollte durch verschlusselte Antworten auch nicht verschlechtert werden. Der Kunde muss ein Passwort fur den Zugri auf die privaten Schlussel angeben; viel mehr sollte er aber nicht zusatzlich tun mussen, da sonst die Akzeptanz fur ein solches Anfrageprogramm wieder sinkt. Das muss aber auch fur das Bearbeitungsprogramm von mobilen Daten gelten. 5.6 Erweiterbarkeit des Empfangersystems Wahrend bei mobilen Daten die Teilnehmer selbst fur die Aktualisierung ihrer Programme zustandig sind, kann ein Sender von mobilem Code die jeweils aktuelle Version oder einen 32 5 Vor- und Nachteile von mobilem Code Vergleichswert allgemein Multimediamediator Verringerung der ubertragenen Datenmenge -/0/+ -/0 Unabhangigkeit von der Netzverbindung + 0 Vermeidung eines verteilten Berechnungszustands + 0 Lokalitat von Ressourcen + + Einfachheit des Empfangersystems + + Erweiterbarkeit des Empfangersystems + + Tabelle 3: Vergleich des mobilen Codes mit mobilen Daten. +: besser als mobile Daten; 0: kein Unterschied; -: schlechter als mobile Daten Korrekturcode schicken; der Empfanger muss sich nicht mit der Aktualisierung seines Systems befassen. Das ist der grote Vorteil von mobilem Code gegenuber mobilen Daten. Fong ([Fon98], Seite 6) nennt als Beispiel erweiterbare Betriebssysteme. Peine ([Pei02], Seite 3f) weist auerdem darauf hin, dass mobiler Code leistungsfahiger und funktionsreicher sein kann als traditionelle Protokolle, da ihm unter Umstande die gesamte Softwareschnittstelle des Empfangerrechners zu Verfugung steht und er nicht nur auf Schnittstellen zugreifen kann, die ubers Netz veroentlicht werden. Meiner Ansicht nach ist eine Moglichkeit zur Erweiterung des Empfangersystems sogar unabdingbar, denn mobiler Code benotigt oft zusatzliche Bibliotheken oder Klassendateien. Die Bibliotheken mussen entweder vorher auf allen potenziellen Empfangern verteilt werden, immer mit dem Code mitgeschickt werden oder vom Empfanger nachbestellt werden. Alle drei Varianten bringen unterschiedliche Nachteile mit sich: Die Verteilung im Voraus erhoht den Administrationsaufwand auf Empfangerseite und die groere Menge an Bibliotheken belegt mehr Speicherplatz, obwohl viele Bibliotheken eventuell gar nicht benutzt werden. Entscheidend fur die Ausfuhrung des mobilen Codes ist auerdem die Versionskontrolle: greift der mobile Code auf neue Bibliotheken zu, mussen diese auch bei allen potenziellen Empfangern aktualisiert werden. Das sofortige Mitschicken der Bibliotheken vergroert die Menge der zu ubertragenden Daten erheblich und ist nutzlos, wenn die Bibliothek auf Empfangerseite schon vorhanden war. Versionskonikte konnen jedoch nicht auftreten, da eine Aktualisierung der Bibliotheken nur von der sendenden Stelle vorgenommen werden muss. Eine Nachbestellung von Bibliotheken kann entweder statisch vor Ausfuhren des Codes oder dynamisch zur Laufzeit des Codes durchgefuhrt werden. Im ersten Fall muss der mobile Code eine Moglichkeit bieten, den Typ und die Version der benotigten Bibliotheken herauszunden; diese mussen dann mit denen auf dem Empfangersystem abgeglichen werden. Im zweiten Fall muss das Empfangersystem Fehler behandeln, die durch nichtvorhandene Bibliotheken zur Laufzeit auftreten, diese in Bestellungen umsetzen und nach Erhalt der Bibliothek das Programm an der unterbrochenen Stelle wieder aufnehmen. Die Nachbestellung von Bibliotheken widerspricht dem Konzept des mobilen Codes darin, dass eine einzelne Verbindung mit dem Sender nicht ausreicht und eventuell mehrere Verbindungen aufgenommen werden mussen. Die Nachbestellung erhoht dadurch zudem die Laufzeit des mobilen Codes. Bei Aktualisierung der Bibliotheken reicht aber auch hier die A nderung an der zentralen Stelle. Im Falle des Multimediamediators habe ich mich fur das sofortige Mitschicken der Bibliotheken entschieden. Vor folgendem Hintergrund erscheint mir das sinnvoll: Ein Kunde spricht viele wechselnde Mediatoren an (und der Mediator wiederum verschiedene Datenquellen) und bekommt daher eventuell Antworten in sehr unterschiedlichen Datenformaten, die jeweils andere Operatoren benotigen. 5.6 Erweiterbarkeit des Empfangersystems 33 Ein Mediator bekommt Anfragen von vielen verschiedenen Kunden und kann nicht sicherstellen, dass auf jedem von ihnen die Bibliotheken im Voraus vorhanden sind. Ein Kunde loscht schon vorhandene Bibliotheken eventuell im Laufe der Zeit. Ein Verteilen der Bibliotheken im Voraus ist wegen der Dynamik des Systems kaum moglich. Da eine Nachbestellung zusatzliche Zeit in Anspruch nimmt, ist sie fur ein Anfragesystem auch eher ungeeignet. 34 6 Sicherheitsrisiken durch mobilen Code 6 Sicherheitsrisiken durch mobilen Code In einem dynamischen System mit vielen wechselnden Teilnehmern, deren Identitat unbekannt ist, ist die Basis fur gegenseitiges Vertrauen gering. Jeder Teilnehmer bildet einen eigenen Schutzbereich, den er durch geeignete Manahmen (z. B. benutzerbasierte Authentizierung oder Firewalls) von der Umwelt abschirmen kann. Um die Funktionalitat von mobilem Code nutzen zu konnen, muss ein Teilnehmer nichtvertrauenswurdigen Code in seinen Schutzbereich hereinlassen. Auch wenn der Empfanger dem Sender des Codes vertraut, ist die ursprungliche Herkunft des Codes oft unbekannt. Email-Viren, die Adressbucher kompromittieren, nutzen dieses Vertrauen des Empfangers gegenuber dem Sender zur Verbreitung aus. Als Prinzipale - also sicherheitsrelevante Individuen oder Programme - fur mobile Agenten benennen Berkovits, Guttman und Swarup ([BGS98], Seite 121) den Codehersteller, den Sender, das Programm innerhalb des Agenten, den Agenten selbst (Programm und Daten) und einen oder mehrere Wirtsrechner. Dies lasst sich auf mobilen Code ubertragen, wobei der mobile Code aber nur einen Wirtsrechner { den sogenannten "Kundenrechner\ { besucht. Die Person, die hinter dem Kundenrechner steht und eigentlich die Sicherheitsforderungen stellt, ist der oder die menschliche Besitzer(in) des Rechners. Der Codehersteller und Sender stimmen im Szenario des Multimediamediators uberein; beides ist der Mediator. Im Modell von Berkovits et al. produziert der Codehersteller auch die Daten des mobilen Agenten. Dies ist beim mobilen Codes des Multimediamediator nicht der Fall: die Daten, die der mobile Code enthalt, werden von den Datenquellen bereitgestellt. Fur das Multimediamediator-System betrachte ich daher die folgenden Prinzipale: den Mediator (als Codehersteller und Sender) die Datenquellen (als Datenlieferanten) den mobilen Code als Ganzes den Programmcode innerhalb des mobilen Codes die Daten innerhalb des mobilen Codes der Kunde (der Begri "Kunde\ bezeichnet weiterhin den/die Besitzer(in), den Kundenrechner und die Ausfuhrungsumgebung als Gesamtheit) Die folgenden Abschnitte sollen einen U berblick daruber geben, welche Prinizipale durch den Einsatz von mobilem Code Opfer von Angrien werden konnen. Der Kunde kann vom Mediator direkt angegrien werden; damit beschaftigt sich Abschnitt 6.4. Indirekt kann der Mediator (in der Funktion als Codehersteller) den Kunden mittels des mobilen Codes angreifen; das ist das Thema des Abschnitts 6.1. Die Daten des mobilen Codes konnen vom Mediator angegrien werden (siehe Abschnitt 6.5). Der mobile Code ist wahrend der U bertragung zum Kunden Angrien Dritter ausgesetzt (siehe Abschnitt 6.6). Auf dem Kundenrechner kann mobiler Code vom Kunden selbst und von anderen mobilen Codes angegrien werden; beide Falle behandelt Abschnitt 6.7. Zu den verschiedenen Angrien stelle ich Gegenmanahmen vor. Einige dieser Manahmen bauen auf asymmetrischen Verschlusselungsverfahren zur Signierung oder Geheimhaltung von Nachrichten auf. Die korrekte Verteilung der oentlichen Schlussel auf die wechselnden Teilnehmer bleibt dabei weiterhin ein Problem, das von keinem der vorgestellten Verfahren gelost wird, und daher in einem zusatzlichen Schritt im Voraus geregelt werden muss. Abschnitt 6.8 (Seite 53) gibt eine U bersicht daruber, ob und wie die hier besprochenen Angrie konkret mit der Programmiersprache Java verhindert werden konnen. Die genaue Umsetzung wird in Abschnitt 9 (Seite 85) besprochen. 35 6.1 Angrie des mobilen Codes gegen den Kunden 6.1 Angrie des mobilen Codes gegen den Kunden Der/die Besitzer(in) des Kundenrechners mochte vor Angrien des mobilen Codes auf den Kundenrechner geschutzt sein. Ousterhout et al. (siehe [OLW98], Seite 220) und Fong (siehe [Fon98], Seite 10) identizieren als die drei groen Sicherheitsziele fur den Kundenrechner in Zusammenhang mit mobilem Code: die Vertraulichkeit der auf ihm vorhandenen Daten und Programme die Integritat des Kundenrechners die Verfugbarkeit des Kundenrechners Der mobile Code soll also von jeglicher Form von Spionage, Daten- und Programmkorruption und Ressourcendiebstahl abgehalten werden. In den folgenden drei Abschnitten 6.1.1 bis 6.1.3 wird zunachst diskutiert, uber welche Zugrie und Kommunikationskanale solche Angrie moglich sind. Fur mobilen Code sind bestimmte Daten oder Ressourcen auf dem Kundenrechner bevorzugte Angrisziele. Diese besonderen Angrisziele werden exemplarisch fur den jeweiligen Angristyp vorgestellt. Mobiler Code kann durch bestimmtes Verhalten Angrie erleichtern oder auslosen. Die folgenden Verhaltensweisen mobiler Codes werden in den Abschnitten 6.1.4 bis 6.1.6 analysiert: mehrere Codes konnen unerlaubterweise zusammenarbeiten und ein Komplott bilden ein Code kann unter falscher Identitat auftreten ein mobiler Code kann bosartigen Code aus dem Netz laden In Tabelle 4 auf Seite 37 sind alle Angris- und Verhaltensformen noch einmal aufgelistet. Abbildung 4 stellt die sieben verschiedenen Kommunikationskanale ((0) bis (6)) auf dem Kundenrechner dar, die mobiler Code fur die im Folgenden beschriebenen Angrie ausnutzen kann. Welche Manahmen der Kunde ergreifen kann, um Angrie des mobilen Codes abzuwehren, wird in Abschnitt 6.2 ab Seite 38 diskutiert. Kunde mobiler Code 1 Ausführungsumgebung Pro (6) Daten gramm mobiler Code 2 (5) (3) (0) Pro Daten gramm (1) Daten (z.B. Schlüssel) und Programme (2) Außenwelt Mediator (4) Ressourcen (z.B. Speicher und Prozessor) Abbildung 4: Angrie des Codes auf den Kunden 6.1.1 Spionage Mobiler Code kann probieren, beliebige Daten des Kunden einzulesen. Dazu benotigt er Lesezugri auf diese Daten (Kommunikationskanal (0) in Abbildung 4). Im Gegensatz zu mobilen Agenten kann der mobile Code Daten des Kunden nicht auf andere Wirtsrechner mitnehmen; 36 6 Sicherheitsrisiken durch mobilen Code der mobile Code bleibt ausschlielich auf dem Kundenrechner. Wenn mobiler Code also die Vertraulichkeit der Daten des Kunden angreift und geheime Daten ausspioniert, kann er daraus nur einen Nutzen ziehen, wenn er die Daten nach auen kommunizieren kann (siehe dazu auch [OLW98], Seite 220-221). Er benotigt eine Verbindung zu einem anderen Rechner (Kommunikationskanal (2) in Abbildung 4). Dieser andere Rechner kann inbesondere der Mediator sein; er ist der Sender des mobilen Codes (das heit, der Kunde wird nicht unbedingt mitrauisch, wenn der Code versucht, eine Verbindung zu seinem Sender herzustellen). Durch die Hande des Mediators gehen alle Anfragen und Antworten und die durch den Code ausspionierten Daten konnten ihm Vorteile verschaen. Innerhalb des Multimediamediator-Systems sind die Entschlusselungsschlussel des Kunden fur Spione von groem Interesse. Der Kunde benutzt die dazugehorigen Verschlusselungsschlussel typischerweise uber einen langeren Zeitraum in mehreren Anfragen. Wenn der mobile Code sie einem Angreifer zuganglich macht, kann dieser abgefangene Antworten entschlusseln. Die reine Spionage ist ein Angri nach dem Modell des ehrlichen aber neugierigen Angreifers (siehe Abschnitt 3.1 auf Seite 8). Wenn der Code aber versucht, die Schutzmechanismen fur die Entschlusselungsschlussel zu brechen oder eine Verbindung nach auen aufzubauen, kann das dann schon als aktiver Angri nach dem Modell des bosartigen Angreifers gewertet werden. 6.1.2 Daten- und Programmkorruption Ein System mit mobilem Code muss dafur sorgen, dass die Integritat der Programme und Daten auf dem Kundenrechner nicht verletzt wird. Mobiler Code konnte jedoch mit Schreibrecht uber Kommunikationskanal (1) Daten und Programme andern (vgl. dazu [SBK01], Seite 149). Im Falle des Multimediamediators sind insbesondere andere mobile Codes (uber Kommunikationskanal (3)) betroen. Ein bosartiger mobiler Code konnte den Programmcode anderer mobiler Codes oder ihre Daten so verandern, dass sie falsche Ergebnisse berechnen. Er konnte auch die Programmcodes verandern oder austauschen, so dass sie Angrie auf den Kundenrechner ausfuhren; Young und Yung (siehe [YY04], Seite 147) bezeichnen dies als Infektion\ der Programmcodes. Wenn der Angreifer einfach nur eine Behinderung des Kunden" im Sinn hat, konnte er versuchen, die Entschlusselungschlussel zu uberschreiben. Dann ist keine Entschlusselung (und damit keine Ausfuhrung) eines anderen mobilen Codes moglich, bis der Kunde die Schlussel wiederhergestellt hat. Wenn der Kunde die Schlussel nicht wiederherstellen kann und er sich neue besorgen muss, kann er alte oder in Zwischenzeit empfangene mobile Codes gar nicht mehr entschlusseln. Auch die Ausfuhrungsumgebung ist ein ideales Angrisziel, weil sie die Sicherheitseinstellungen und -uberprufungen auf dem Kundenrechner vornimmt. Wenn es einem bosartigen mobilen Code gelingt, die Sicherheitseinstellungen zu verandern oder die Ausfuhrungsumgebung durch ein Programm zu ersetzen, das keine Sicherheitsuberprufungen durchfuhrt, onet er damit Moglichkeiten fur andere Angrie. 6.1.3 Ressourcendiebstahl Die Verfugbarkeit der Ressourcen des Kundenrechners sollte durch mobilen Code nicht stark eingeschrankt werden. Ein mobiler Code sollte die Ausfuhrung anderer Prozesse auf dem Rechner kaum beeinussen. Wenn mobiler Code ausgefuhrt wird, konnte er jedoch uber Kommunikationskanal (4) den Prozessor blockieren, allen verfugbaren Arbeitsspeicher belegen oder auch langdauernde Eingabe- und Ausgabeoperationen durchfuhren. Dies ist fur den Kunden besonders argerlich, wenn der mobile Code falsche Ergebnisse berechnet oder ohne die Zustimmung des Kunden im Auftrag anderer etwas berechnet und versucht, das Ergebnis an seine Auftraggeber zu schicken. 37 6.1 Angrie des mobilen Codes gegen den Kunden Angri auf Integritat in Form von Beispiel Programm- und Loschen oder Verandern von Daten/Programmen Datenkorruption auf dem Kundenrechner; insbesondere Verandern von anderen mobilen Codes oder der Ausfuhrungsumgebung Vertraulichkeit Spionage Auslesen und Weitergeben geheimer Informationen; insbesondere des Schlussels zum Entschlusseln der Antworten Verfugbarkeit Ressourcendiebstahl rechenzeit- oder speicherplatzverschwendende Berechnungen; insbesondere mobiler Code, der eine falsche oder keine Antwort berechnet alle obigen Komplott mehrerer obwohl einzelne Codes harmlos erscheinen, fuhCodes ren sie bei einer Kooperation einen Angri durch; Code1 liest bspw. den Entschlusselungsschlussel ein und gibt ihn an Code2 weiter, der eine Netzverbindung aufbaut ! der Entschlusselungsschlussel wird ausspioniert alle obigen Auftreten unter mobiler Code gibt sich als vertrauenswurdiges Profalscher Identitat grammmodul aus, bspw. als Teil der Ausfuhrungsumgebung alle obigen Nachladen von Code darf eine Netzverbindung aufbauen und ladt schadlichem Code und startet anderen, schadlichen Code. Tabelle 4: Angrie des mobilen Codes auf den Kundenrechner 6.1.4 Komplott mehrerer Codes Bei einem System mit mobilem Code kann es vorkommen, dass sich mehrere mobile Codes zur gleichen Zeit auf einem Kundenrechner benden und eventuell sogar gleichzeitig ausgefuhrt werden. Zwar kann es sein, dass die einzelnen mobilen Codes harmlos aussehen; sie bekommen daher vom Kundenrechner die Erlaubnis, eine Aktion auszufuhren. Wenn die mobilen Codes die Moglichkeit haben zu kommunizieren (unidirektional uber Kommunikationskanal (3) beziehungsweise uber Kommunikationskanal (5) oder bidirektional uber beide Kanale), konnte es aber zu Nebenwirkungen kommen, die beim Starten der Codes nicht abzusehen waren. Sie konnten ein Komplott gegen den Kundenrechner bilden. Wenn einem mobilen Code Code1 beispielweise erlaubt wird, einen privaten Schlussel einzulesen, um eine Entschlusselung von Daten durchzufuhren, und einem Code Code2 erlaubt wird, eine Netzverbindung aufzubauen, kann Code1 den Schlussel an Code2 weitergeben, der ihn dann schlielich uber die Netzverbindung an einen Angreifer schickt. Die Kommunikation wurde uber die Kommunikationskanale (0), (3) und (2) laufen. Es ist nicht einmal notwendig, dass beide Codes gleichzeitig laufen. Code1 konnte den Schlussel auch einlesen (uber Kommunikationskanal (0)), in eine Datei schreiben (Kommunikationskanal (1)), die Code2 bei einer spateren Ausfuhrung lesen kann. Dies ist ein Beispiel fur den Angri aber auch die beiden anderen Angrie "Korruption\ und "Ressourcendiebstahl\ "kSpionage\; onnen durch Komplotte von mobilen Codes ausgefuhrt werden, ohne dass der Kunde es merkt. Zwei Codes konnten beispielsweise in standigem Wechsel Methoden voneinander aufrufen und so die Ressource Prozessor blockieren. Wenn ein Code Lese- und der andere Schreibrecht auf einer Datei hat, konnen auerdem Daten des Dateisystems korrumpiert werden, indem Code1 die Datei einliest und verandert, an Code2 ubergibt und Code2 die Datei zuruckschreibt. 38 6 Sicherheitsrisiken durch mobilen Code 6.1.5 Auftreten unter falscher Identitat Wenn es dem mobilen Code gelingt, den menschlichen Benutzer zu uberzeugen, dass hinter ihm eine vertrauenswurdige Identitat steht, konnte er vertrauliche Daten ausspionieren (siehe dazu [Fon98], Seite 11, und [KLO98], Seite 193, unter dem Begri masquerading). Der Code konnte zum Beispiel vortauschen, dass er zur Ausfuhrungsumgebung gehort, indem er ein Eingabefenster onet, und dann den Benutzer um erneute Eingabe eines Passworts bitten. Dazu benotigt er uber Kommunikationskanal (4) Zugri auf die Ressource Bildschirm. Er konnte den Benutzer mit einem Warnhinweis auch dazu bringen, Dateien oder Programme von Hand zu loschen (das ware Korruption der Daten oder Programme) oder Programme unter einer hoheren Prioritat zu starten (das kann zu Ressourcendiebstahl fuhren). Eine falsche Identitat konnte ein mobiler Code auch annehmen, wenn er vortauscht, von einem Mediator zu kommen, dem der Kunde vertraut. 6.1.6 Nachladen von schadlichem Code Wenn mobilem Code erlaubt wird, eine Netzverbindung uber Kommunikationskanal (2) aufzubauen, und er sogar uber Kommunikationskanal (6) Daten empfangen darf, kann er uber diese Verbindung auch zusatzlichen Code herunterladen (siehe dazu [YY04], Seite 140, unter dem Begri malware loaders). Selbst wenn der erste Code fur sich genommen unschadlich ist, muss er das im Zusammenspiel mit dem nachgeladenen Code nicht mehr sein. Wenn es dem ersten Code gelingt, den nachgeladenen Code zu starten oder er den Benutzer dazu bringt den Code zu starten, konnte der nachgeladene Code Angrie auf den Kundenrechner ausfuhren. Young und Yung ([YY04]) schreiben dazu, dass der Sender des ersten Codes die Verantwortung fur entstandene Schaden abstreiten konnte, da er selbst nur Code geschickt hat, der fur sich allein genommen harmlos erscheint. 6.2 Schutz des Kunden vor Angrien des mobilen Codes Der Kundenrechner kann nur automatisiert vor Angrien, wie sie in Abschnitt 6.1 geschildert wurden, geschutzt werden, wenn der/die Besitzer(in) vorher darlegt, welche Sicherheitsforderungen an den mobilen Code gestellt werden. Die Kontrolle, ob mobiler Code die Sicherheitsforderungen einhalt, kann man generell in statische und dynamische U berprufungen einteilen. Statische U berprufungen werden vor dem Start des Codes durchgefuhrt und sollen sicherstellen, dass die gepruften Sicherheitseigenschaften uber die ganze Laufzeit des Codes gultig sind. Dynamische U berprufungen nden wahrend der Laufzeit des Codes statt und kontrollieren bei jeder einzelnen Operation die Einhaltung der Sicherheitsforderungen. Mischformen sind moglich und werden zum Beispiel auch von der virtuellen Java-Maschine praktiziert, die ich in Abschnitt 7 auf Seite 56 kurz vorstelle. Statische U berprufungen bedeuten einen zeit- und rechenintensiven Schritt vor Programmstart, haben aber keine negativen Auswirkungen auf die Laufzeit nach dem Start. Dynamische U berprufungen verzogern nicht den Start des Programmes, verlangern jedoch die Laufzeit. Sie bergen auerdem das Problem, dass der Code eventuell schon Operationen durchgefuhrt und Ressourcen zugewiesen bekommen hat, wenn er durch eine dynamische U berprufung abgebrochen wird; diese Operationen und Ressourcenzuweisungen mussen eventuell wieder ruckgangig gemacht werden. In der Literatur habe ich zwei Ansatze fur statische U berprufungen gefunden, die ich im Folgenden vorstellen mochte: "Authentizierung des Codeherstellers\ und "Programmuberprufung\. Als Beispiel fur dynamische U berprufungen mochte ich die Methode "dynamische Zugrikontrolle\ anfuhren. Das Konzept des "Sandkastens\ kann auf statische und dynamische Weise umgesetzt werden. 6.2 Schutz des Kunden vor Angrien des mobilen Codes 39 6.2.1 Dynamische Zugriskontrolle Der Kundenrechner muss Zugrie des mobilen Codes auf seine Ressourcen kontrollieren, also zu einem Zeitpunkt erlauben oder ablehnen konnen. Fong ([Fon98], Seite 13) beschreibt die Grundlage der Zugriskontrolle wie folgt: "In traditionellen Betriebssystemen werden die Ressourcen eines Wirtsrechners als Objekte und Benutzerprozesse als Subjekte modelliert. Ein Subjekt kann Operationen auf einem Objekt durchfuhren. Die Erlaubnis, eine bestimmte Operation auf einem Objekt durchzufuhren, wird als Zugrisberechtigung bezeichnet. Sicherheitsregeln werden als Zuweisungen von Berechtigungen an Subjekte ausgedruckt. Ein Schutzbereich ist eine Sammlung von Zugrisrechten. Ein Benutzerprozess erhalt seine Zugrisrechte, indem er einem Schutzbereich zugewiesen wird.\7 Fur die Umsetzung der Zugriskontrolle nennt Fong zum Einen die Zugriskontroll-Liste, die zu jedem Objekt angibt, welches Subjekt es mit welchen Rechten benutzen darf, und zum Anderen Fahigkeiten, die Subjekten zugwiesen werden und ihnen damit das Recht geben, auf das assoziierte Objekt zuzugreifen. Die Zugriskontrolle ist insofern dynamisch, als dass zur Laufzeit eines Programms bei dem Versuch eines Subjekts, auf ein Objekt zuzugreifen, gepruft wird, ob das Subjekt die Zugrisberechtigung besitzt. Eventuell kann sich auch die Sicherheitsregel zur Laufzeit andern. Auerdem konnen Subjekte zur Laufzeit Schutzbereichen neu zugewiesen werden oder wieder aus ihnen entfernt werden. Fong ([Fon98], Seite 11) betont, dass Code nur ein Minimum an Berechtigungen zugewiesen werden soll; im Idealfall sind das nur die Berechtigungen, die der Code fur seine Ausfuhrung benotigt. Die Zuweisung kann von mehreren Faktoren abhangig gemacht werden. Beispielsweise kann gepruft werden, ob und von wem der gerade ausgefuhrte Code signiert wurde. Der Kunde muss sich beim Aufstellen der Sicherheitsregel dann bewusst sein, welche Bedeutung die Signatur unter dem Code hat. Genauso konnen auch zeit-, kontext-, vergangenheits-, datenabhangige Bedingungen in der Zugrisregel angegeben werden (vgl. dazu auch [Den82], Seite 194). Die Angabe einer zeitabhangigen Bedingung kann dazu dienen, die Ausfuhrung der mobilen Codes von der Ausfuhrung sicherheitskritischer oder rechenintensiver Aufgaben zu trennen. Eine kontextabhangige Bedingung kann etwa sein, welche anderen mobilen Codes derzeit ausgefuhrt werden; durch eine solche Bedingung kann verhindert werden, dass zwei potenziell gefahrliche Codes zusammen ausgefuhrt werden und ein Komplott bilden. Ebenso kann die Ausfuhrung des Codes davon abhangig gemacht werden, welche Aktionen schon fruher ausgefuhrt wurden und wieviel Vorwissen der mobile Code damit vielleicht schon hat. Eine Bedingung in Abhangigkeit von Daten hat zum Beispiel dann Sinn, wenn der Code den Besitz von Daten nachweisen muss, bevor er andere Aktionen ausfuhren darf. Dynamische Zugriskontrolle ist nur dann wirklich sinnvoll, wenn Code zur Laufzeit Berechtigungen in Abhangigkeit von den obengenannten Faktoren zugewiesen werden sollen. Ob der mobile Code des Multimediamediators dies benotigt, hangt vom gewahlten Entwurf ab. Wenn mobiler Code selbst den Entschlusselungsschlussel einlesen oder seine Antwort in eine Datei schreiben soll, benotigt er dafur dynamische Berechtigungen. Beispielweise muss jeder Code einen anderen Schlussel einlesen oder seine Daten in eine andere Datei schreiben. Wenn der mobile Code jedoch nur unkritische Operationen durchfuhrt und er im Grunde keine dynamischen Berechtigungen braucht (also beispielsweise die Entschlusselung vom Kundenmodul durchgefuhrt wird), ist eine dynamische Zugriskontrolle fur den mobilen Code gar nicht notwendig. 7 Ubersetzung aus dem Englischen; Originaltext: "In traditional operating systems, resources of the host are modeled as objects, while user processes are modeled as subjects. A subject can perform operations on an object. The permission to perform a certain operation on an object is said to be an access right. Security policies are expressed as an assignment of rights to subjects. A protection domain is a collection of access rights. A user process acquires its access rights by being associated to a protection domain.\ 40 6 Sicherheitsrisiken durch mobilen Code 6.2.2 Authentizierung des Codeherstellers Technische Schutzmanahmen, die den mobilen Code auf dem Kundenrechner kontrollieren, werden selten angewandt. Oftmals wird von Webseiten heruntergeladener oder per Email empfangener Code im Vertrauen auf den Sender ausgefuhrt. Ein Schritt zu einer groeren Vertrauensbasis ist es, den Hersteller des Codes zu authentizieren. Wenn der Hersteller seinen Code signiert, konnen allen Empfanger die Herkunft des Codes feststellen. Wenn der Empfanger eine Kette von vertrauenswurdigen Zertikaten aufbauen kann, die die Identitat des Codeherstellers bestatigt, hat der Empfanger fur sich eine Vertrauensbasis fur die Ausfuhrung des Codes geschaen. Der Empfanger hat aber keine Sicherheit und keinen Beweis, dass der Code unschadlich ist. David M. Chess [Che98] beschreibt auerdem, dass die Signatur unter mobilem Code verschiedene Bedeutungen fur den Empfanger haben kann. Sie kann beispielsweise belegen, dass der Kunde fur eine Leistung bezahlt hat, dass der Code gepruft und ungefahrlich ist, oder dass der erste Sender bescheinigt, dass sich der mobile Code in einem korrekten Startzustand bendet. Der Empfanger muss sich der jeweiligen Bedeutung einer Signatur bewut sein. Es muss sichergestellt werden, dass die Signatur den Codehersteller reprasentiert. Wenn der Kunde eine Sicherheitsgarantie haben will, dass der Code ihn nicht angreift, muss der Codehersteller vertraglich die Unbedenklichkeit seines Codes bestatigen (siehe dazu [Yee99], Seite 262). Solange im Multimediamediator-System nur ein Mediator angefragt wird und keine Weiterleitung von Teilanfragen stattndet, ist dieser eine Mediator auch der einzige Hersteller des mobilen Codes. Der Mediator kann den Code signieren und dem Kunden vertraglich zusichern, dass der Code unschadlich ist. Wenn der Kunde auf sicherem Weg den oentlichen Schlussel des Mediators erhalt, kann er die Signatur unter dem Code prufen und hat damit den Codehersteller authentiziert. Bei entsprechender rechtlicher Grundlage fur digitale Signaturen und einem Vertrag zwischen Kunde und Mediator kann der Kunde den Mediator fur entstandene Schaden verantwortlich machen (zumindest solange er nachweisen kann, dass sie durch mobilen Code des Mediators entstanden sind). Stellvertretend kann eine Zertizierungsstelle diese Position ubernehmen und Zertikate und Vertrage fur Programme ausstellen. Der Kunde fuhrt das Programm aus, wenn er das Zertikat als echt anerkennt und dem Vertrag zustimmt. Bei mobilen Agenten, die mehrere Wirtsrechner besuchen, kann nur ihr statischer Teil vom Hersteller signiert werden. Peine ([Pei02], Seite 36) schreibt: "Ein mobiler Agent besteht nicht nur aus Daten sondern auch aus Code, der auf den Daten arbeitet und sie eventuell wahrend seiner Ausfuhrung verandert.\8 Dem mochte ich hinzufugen, dass als ein Sonderfall auch der Code { in einer Art verteilter Programmierung { nicht statisch sein muss, sondern dass Wirte dem Agenten neue Funktionalitaten hinzufugen konnen und der Code damit mehrere Hersteller haben kann, die jeweils nur fur den durch sie erstellen Teilcode burgen konnen. Daher konnen sowohl alle Daten als auch aller Code, die auf den Wirtsrechnern verandert werden, nicht in die Signatur einieen. Dynamische Daten (und dynamischer Code) des Agenten konnen nur vom jeweils letzten Wirt, der eine A nderung daran vorgenommen hat, signiert werden. Der neue Wirt fuhrt dann den Agenten im Vertrauen zu diesem letzten Wirt aus. Da der letzte Wirt aber eventuell nicht A nderungen anderer Wirte an anderen Teilen des Codes auf ihre Unbedenklichkeit uberpruft hat, vertraut der neue Wirt auch implizit den vorigen Wirten, die A nderungen vorgenommen haben. Dieses Verfahren wenden Gray et al. (siehe [GKCR98], Seite 162) in ihrem Agentensystem an. Jeder Wirt musste zur U berprufung der Signaturen die oentlichen Schlussel aller dieser Wirte auf sicherem Wege erhalten. Das ist in der Regel aber zu umstandlich und unubersichtlich. Der letzte Wirt muss daher als Treuhander auftreten und fur die A nderungen der vorigen Wirte burgen. Dieses Verfahren verkompliziert sich noch, wenn Signaturen fur ungultig erklart und widerrufen werden konnen. Wenn alle Wirte alte Signaturen entfernen und ihre eigene treuhanderisch 8 Ubersetzung aus dem Englischen; Originaltext: "A mobile agent consists not only of data but also of code, which operates on and potentially changes the data during the agent's operation\ 6.2 Schutz des Kunden vor Angrien des mobilen Codes 41 unter den Code setzen, kann man nicht mehr feststellen ob die Signatur eines vorigen Wirtes zuruckgezogen wurde. A hnliche Probleme treten fur mobilen Code auf, wenn man eine Hierarchie von Mediatoren betrachtet. Wenn der Mediator Teilanfragen an andere Mediatoren delegiert, sind diese Mediatoren Hersteller von Teilcode. Welche Folgen es fur die Authentizierung des Codeherstellers durch den Kunden hat, lege ich in Abschnitt 10 auf Seite 96 dar. Fur den Multimediamediator soll Code aber nicht nur auf Vertrauens- oder Vertragsbasis ausgefuhrt werden, sondern der Kundenrechner auch technisch abgesichert werden. Signaturen spielen aber dennoch eine Rolle; mit ihnen kann man prufen, ob die Antwort unverandert zwischen Mediator und Kunde ubertragen wurde. Darauf gehe ich in Abschnitt 6.6 (Seite 47) noch kurz ein. 6.2.3 Programmuberprufung Eine Methode, mit der sich der Kunde davon uberzeugen kann, dass ein mobiler Code unschadlich ist, ist die U berprufung des Codes vor der Ausfuhrung. Die fur den Kunden aufwandigste Methode, die vom menschlichen Benutzer die meiste Interaktion verlangt, ist es, sich den Quellcode des Programms anzuschauen. Es gibt aber auch eine Methode, die den Benutzer entlastet und die Prufung automatisch vornimmt: beweismitfuhrender Code (engl. proof carrying code, PCC). Das Konzept des beweismitfuhrenden Codes wurde von Necula und Lee entwickelt (vgl. [Lee97, NL98]). Teilnehmer eines PCC-Systems sind der Kunde, der Codehersteller und der Beweishersteller. Der mobile Code wird zusammen mit einem Beweis, der die Unbedenklichkeit des Codes bescheinigt, vom Codehersteller an den Kunden ausgeliefert. Nach einer Prufung des Beweises wird der Code ohne weitere Laufzeitkontrollen ausgefuhrt. Fur ein PCC-System benotigt man: eine Spezikationssprache fur Sicherheitsregeln, eine Logik, die Programme und Spezikation verknupft, indem sie die Bedingungen darstellt, unter denen ein Code sicher ausgefuhrt werden kann, eine Sprache, in der die Beweise dargestellt werden, und einen Algorithmus, um Beweise zu uberprufen. Der Codehersteller fugt per Hand oder mittels eines entsprechenden Compilers zusatzliche Eintrage in seinen Code ein, anhand derer hinterher der Beweis aufgebaut wird. Der Kunde stellt zunachst Sicherheitsregeln fur sein System auf, in denen er angibt, welche Ressourcen mobiler Code wie lange oder wie oft benutzen darf. Nach Erhalt des Codes pruft ein Programm { der Verikationsbedingungen-Generator (VCGen) { auf dem Kundenrechner einfache Sicherheitseigenschaften des Codes (zum Beispiel Ziele der Sprunge im Programmcode). Falls VCGen eine Anweisung im Code entdeckt, die eventuell die Sicherheitsregeln verletzt, generiert das Programm ein Pradikat, das angibt, unter welchen Bedingungen die Anweisung sicher ausgefuhrt werden kann. Dieses Pradikat wird von Necula und Lee Verikationsbedingung genannt. Aus allen Verikationsbedingungen zusammen wird ein globales Sicherheitspradikat fur den Code erstellt und vom Kunden an den Beweishersteller geschickt. Der Beweishersteller versucht das Sicherheitspradikat zu beweisen und schickt im Erfolgsfall den Beweis an den Kunden. Der Beweishersteller kann identisch mit dem Codehersteller sein und dann sowohl das Sicherheitspradikat als auch den Beweis selbst erstellen und beides direkt mit dem Code an den Kunden schicken. Auf dem Kundenrechner uberpruft ein zweites Programm { der Beweisprufer{, ob jeder Deduktionsschritt im Beweis den Sicherheitsregeln gehorcht. Der Kunde muss aus dem Code danach noch ein vertrauenswurdiges Sicherheitspradikat ableiten. Der Beweisprufer pruft, ob der Beweis das richtige Sicherheitspradikat beweist, und dem Kunden kein falsches Sicherheitspradikat mit dem Beweis (beziehungsweise der Beweis fur ein falsches Sicherheitspradikat) 42 6 Sicherheitsrisiken durch mobilen Code Code hersteller 1. Sicherheitsprädikat SP2 ableiten annotierter Code Kunde Beweis hersteller 2. Beweis überprüfen 3. SP1 ==SP 2 ? formaler Beweis für SP 1 4. Code ausführen Abbildung 5: Beweismitfuhrender Code untergeschoben wurde. Falls alle Schritte durchlaufen wurden, wird der Code nun installiert und ausgefuhrt. Mit dem Ansatz des beweismitfuhrenden Codes sind nur statische a-priori U berprufungen moglich; man kann dem Code zur Laufzeit beispielsweise keine zusatzlichen Berechtigungen erteilen. Peine ([Pei02], Seite 40) bemangelt, dass die Komplexitat eines Beweises von der Komplexitat des Programmes und der Sicherheitsregeln abhangt. Auerdem kann es schwierig oder sogar unmoglich sein Beweise uberhaupt zu nden { geschweige denn diese automatisch generieren zu lassen. Necula und Lee weisen darauf hin, dass die zeitaufwandige Arbeit der Beweiserstellung zumindest nicht den Kunden belastet sondern vom Beweishersteller durchgefuhrt wird. Sie haben beobachtet, dass die Beweisgroe sich in der Regel linear zur Programmgroe verhalt; nur in Ausnahmen kommt es zu einer exponentiellen Beweisaufblahung (vgl. [NL98], Seite 88). Einen Ansatz zur Verkleinerung der Beweise (beziehungsweise zur Verringerung der zu ubertragenden Beweisteile) stelle ich an geeigneter Stelle in Abschnitt 6.7.4 auf Seite 52 vor. Fong ([Fon98], Seite 30) weist des Weiteren auf Ansatze mit zertizierenden U bersetzern hin, bei denen mobiler Code nicht von einem Beweis sondern nur von einem Zertikat begleitet wird, dass Sicherheitseigenschaften bescheinigt. Ein Beispiel-PCC-System von Necula und Lee (Onlinedemo unter [Nec02]) in Java wandelt den Java-Binarcode in x86-Maschinensprache um und fugt dem Maschinenprogramm gleichzeitig Annotationen zur Ableitung des Sicherheitspradikats und des Beweises hinzu. Die Beweisherstellung erfolgt fur sehr mathematischen Code { beispielsweise Sortier-Algorithmen { automatisch. Auf der Kundenseite wird das Maschinenprogramm uber das Java Native Interface (JNI) eingebunden; der Code unterliegt damit nicht den standardmaigen JavaSicherheitsuberprufungen (Naheres dazu in Abschnitt 7 auf Seite 56). Leider gibt es nur wenige praktische Beispiele fur beweismitfuhrenden Code und kommerzielle Systeme sind gar nicht vorhanden. Beweise fur Programme mit viel Benutzerinteraktion oder Netzkommunikation konnen derzeit kaum automatisch erstellt werden. Auerdem kann es vorkommen, dass Beweise je nach Plattform unterschiedlich ausfallen mussen. Beispielsweise kann ein Beweis, der die Integritat des Speichers belegen will, von der Speicherwortlange der Plattform abhangig sein. Es fehlen also noch Weiterentwicklungen im Bereich der automatischen Beweiserstellung, bevor ein kommerzielles System Erfolg hatte, denn nur wenige Programmierer(innen) waren meiner Ansicht nach bereit (oder hatten aus wirtschaftlicher Sicht die Zeit), ihre Programme von Hand zu beweisen. Dennoch ist beweismitfuhrender Code der einzige mir bekannte Ansatz, der nur codeinharente Eigenschaften betrachtet und auerliche Gesichtspunkte wie Codehersteller in Form von signierten Programmen nicht zu berucksichtigen braucht. Aber auch beweismitfuhrender Code kommt nicht ohne ein Programmmodul auf Kundenseite aus: der Kunde braucht ein Programm zu Erstellung der Sicherheitsregel und zur Beweisuberprufung. Auerdem muss der Code in prozessorlesbarem Klartext verarbeitet werden, um das 43 6.3 Angrie des Mediators gegen den Kunden Sicherheitspradikat abzuleiten; die Nachteile davon werden in Abschnitt 6.7 dargestellt. Auch der Multimediamediator kann mit beweismitfuhrendem Code umgesetzt werden. Allerdings wird der Code, der an den Kunden gesendet wird, zur Laufzeit durch den Mediator erstellt. Der Mediator muss daher auch den Beweis zur Laufzeit erstellen und kann diese zeitaufwandige Arbeit nicht im Vorhinhein durchfuhren. Da jeder Algebrabaum sich aber aus modularen Operatoren zusammensetzt, kann der Mediator schon Beweise und Sicherheitspradikate fur die Operatoren bereithalten. Nach der Erstellung eines Algebrabaums muss er dann nur noch einen Beweis fur die sichere\ Zusammensetzung der Operatoren erstellen. Wichtig ist hierbei, dass die Sprache, in"der die Beweise verfasst sind, solche Zusammensetzungen von Beweisen zulasst. Einen weiteren Anwendungsbereich fur beweismitfuhrenden Code innerhalb des Multimediamediator-Systems werde ich in Abschnitt 6.4.2 vorstellen. 6.2.4 Sandkasten Ein Sandkasten fur mobilen Code ist eine Umgebung, in der dem Code nur eingeschrankte Aktionen auf dem Kundenrechner erlaubt sind. Die Menge der erlaubten Aktionen ist festgelegt und wird nicht verandert. Ein Sandkasten kann mit dynamischen Sicherheitsuberprufungen umgesetzt werden, indem vor Ausfuhrung des Codes eine Sicherheitsregel deniert wird, die nicht mehr geandert wird. Auerdem durfen Subjekte keinen weiteren Schutzbereichen zugewiesen werden. Sie bleiben in dem Schutzbereich, in dem sie sich beim Start des Programms befanden. Zur Laufzeit des Codes wird gepruft, ob die Sicherheitsregel eine Operation zulasst oder nicht. Ein Sandkasten kann aber auch statisch die Einhaltung der Sicherheitsanforderungen umsetzen, indem eine Programmiersprache verwendet wird, die die unerwunschten Operationen gar nicht enthalt. Volpano und Smith (siehe [VS98]) fordern fur den Entwurf einer sicheren Sprache, dass zuerst die Schutzziele deniert und danach anhand dieser Ziele die Sprache entworfen werden sollte. Dem mobilen Code kann auch eine nur eingeschrankte, ungefahrliche Schnittstelle einer Laufzeitumgebung zur Verfugung gestellt werden. In einem Entwurf des Multimediamediators, der dem mobilen Code keine Berechtigungen oder nur eine feste Menge an sicherheitskritischen Operationen zugesteht, ist ein statischer Sandkasten bezuglich der Laufzeit die ezienteste Losung, da zur Laufzeit keine Berechtigungen uberpruft werden mussen. 6.3 Angrie des Mediators gegen den Kunden Der Mediator hat im Multimediamediator-System eine zentrale Position. Er hat Zugri auf die Gesamtanfrage und die Eigenschaftsnachweise, erstellt den Programmcode des mobilen Codes und erhalt die Teilantworten von den Datenquellen (siehe Abbildung 6). Diese Position kann Kunde k pub r Gesamtanfrage mobiler Code Pro gramm Daten Quelle Mediator Teilanfrage Abbildung 6: Zentrale Position des Mediators 44 6 Sicherheitsrisiken durch mobilen Code er ausnutzen, um dem Kunden zu schaden. Im Folgenden mochte ich diskutieren, auf welche Art der Mediator die Korrektheit der Antwort, die Verfugbarkeit des Kundenrechners und die informationelle Selbstbestimmung des Kunden angreifen kann. Die moglichen Angrie sind in Tabelle 5 noch einmal aufgefuhrt. Gegenmanahmen, die der Kunde ergreifen kann, werden in Abschnitt 6.4 behandelt. 6.3.1 Korrektheit der Antwort Der Hauptangrispunkt ist fur den Multimediamediator die Antwort, die er an den Kunden sendet. Da der Mediator vollkommene Kontrolle uber die Erstellung der Antwort hat, kann er versuchen, sie als bosartiger Angreifer aktiv zu falschen. Er kann vor allem Operatoren oder Teilantworten vertauschen oder die Aufspaltung der Gesamtanfrage falsch durchfuhren und in Folge davon falsche Teilanfragen stellen. Aber auch mit der Auswahl der Datenquellen kann der Mediator die Antwort beeinussen. Wenn der Mediator einige Quellen bevorzugt auswahlt, fallt die Antwort dementsprechend aus. Der Mediator konnte sogar unabhangige Quellen durch unzahlige ngierte Anfragen ausschalten, so dass nur noch von ihm gewunschte Quellen erreichbar sind. Der Mediator kann auf eine Anfrage auerdem eine Antwort schicken, die er bereits fruher zu einer anderen Anfrage des Kunden erstellt hat. Dieses Wiedereinspielen fallt dem Mediator besonders leicht, weil die in der Anfrage enthaltenen Schlussel kennt. Er kann eine Antwort wiedereinspielen, die mit denselben Schlusseln verschlusselt wurde. 6.3.2 Informationelle Selbstbestimmung Durch die Hande des Mediators gehen mit jeder Anfrage Eigenschaftsnachweise eines Kunden. Da die Nachweise Eigenschaften des Kunden mit einem Schlussel verknupfen, kann der Mediator (wie im U brigen auch die Datenquellen) Prole zu den Schlusseln bilden (vgl. dazu [ABFK03], Seite 379), die die Eigenschaften zusammenfuhren, die zu einem Schlussel gehoren. Als ehrlicher aber neugieriger Angreifer konnte der Mediator versuchen, aus der Anfrage des Kunden oder den Teilantworten der Datenquellen Informationen abzuleiten (vgl. dazu [ABFK03], Seite 374f) und in die Prole aufzunehmen. Er konnte damit zum Beispiel eine Menge von Eigenschaften mit bestimmten Themeninteressen verbinden oder im schlimmsten Fall einzelne Person identizieren. Der Mediator kann die Eigenschaftsnachweise auch an Dritte verkaufen, die zum Beispiel Prole sammeln oder versuchen, die Nachweise zu falschen. Wenn bei einer Anfrage ein Schlussel verwendet wird, der zu einem Prol gehort, konnte der Mediator die Auswahl der Datenquellen von diesem Prol abhangig machen und damit wiederum die Korrektheit der Antwort angreifen. 6.3.3 Verfugbarkeit des Kundenrechners Der Mediator kann dem Kunden auch eine ubertrieben lange Antwort schicken und dadurch die Verfugbarkeit des Kundenrechners einschranken. Das Gleiche gilt, wenn der Mediator den Kunden lange auf die Antwort warten lasst. Angri auf in Form von Korrektheit der Antwort Falschen der Antwort Korrektheit der Antwort Wiedereinspielen eines mobilen Codes Verfugbarkeit des Kundenrechners Schicken einer langen Antwort Informationelle Selbstbestimmung des Kunden Sammeln personenbezogener Daten Informationelle Selbstbestimmung des Kunden Veruntreuen von Eigenschaftsnachweisen Tabelle 5: Angrie des Mediators auf den Kunden 6.4 Schutz des Kunden vor Angrien des Mediators 45 6.4 Schutz des Kunden vor Angrien des Mediators Die in Abschnitt 6.3 dargestellten Angrie, sind in einem Mediatorsystem ohne mobilen Code auch moglich. Insbesondere die Angrie auf die Verfugbarkeit es Kundenrechners (Schicken langer Antworten und Wartenlassen des Kunden) sind sehr allgemeine Probleme; der Kunde konnte als einfaches Gegenmittel seine Anfrage abbrechen und den Mediator wechseln. Zu dem Punkt der informationellen Selbstbestimmung wird in Abschnitt 6.4.1 kurz eine Gegenmanahme angegeben. Da der mobile Code allein fur die U berprufung der Korrektheit der Antwort eine Erweiterung bringt, mochte ich nur diesen Punkt in Abschnitt 6.4.2 ausfuhrlicher erlautern. 6.4.1 Informationelle Selbstbestimmung des Kunden Um die Prolbildung fur den Mediator zu erschweren, sehen [ABFK03] (Seite 379) den Kunden als verpichtet an, jede seiner Eigenschaften in mehreren Eigenschaftsnachweisen mit verschiedenen Schlussel bereitzuhalten. Der Kunde konnte dann fur jede Anfrage Eigenschaftsnachweise einen bisher unbenutzten Schlussel benutzen, so dass zumindest nicht mehr der Schlussel als Verbindungselement zwischen verschiedenen Anfragen zu verwenden ist. 6.4.2 Korrektheit der Antwort Der Kunde kann Falschungen der Antwort nur schwer feststellen. Der Mediator soll ja gerade als Mittler zwischen Kunde und Datenquellen auftreten, so dass der Kunde die Datenquellen nicht kennen und selbst keine Anfragen ein einzelne Quellen stellen muss. Der Kunde kann groeres Vertrauen in die Antwort eines Mediators mit einem guten Ruf haben. Der Kunde kann Falschungen eventuell entdecken, wenn er dieselbe Anfrage an mehrere unabhangige Mediatoren sendet. Die Sicherheit, dass die Antwort semantisch und syntaktisch korrekt ist, hat er aber mit beiden Methoden nicht. Um zumindest die syntaktische Korrektheit der Antwort nachprufen zu konnen, bietet sich beweismitfuhrender Code an, der in Abschnitt 6.2.3 auf Seite 41 vorgestellt wurde. Der Mediator muss jetzt aber keinen Beweis liefern, dass der Code gewisse Sicherheitsregeln einhalt, sondern er legt mit dem Beweis dar, dass der gesendete mobile Code (beziehungsweise der darin enthaltenen Algebrabaum) eine Antwort auf die Anfrage ist. Der Mediator muss fur die Zusammensetzung der Operatoren im Algebrabaum nachweisen, dass sie eine syntaktisch korrekte Aufspaltung der Anfrage darstellt { etwa indem er einen Beweis liefert, der den Algebrabaum wieder auf die ursprungliche Anfrage zuruckfuhrt. Der Kunde muss prufen, ob dieser Beweis korrekt ist (also nur aus korrekten Schritten besteht und auch die richtige Anfrage beweist) und sich danach vergewissern, dass der Beweis auch den Algebrabaum als Grundlage benutzt, der in der Antwort enthalten ist. Damit kann sich der Kunde vor Verandern oder Vertauschen von Operatoren und auch vor Wiedereinspielen von mobilen Codes schutzen. Wenn der Kunde nachprufen will, ob die Teilantworten in den Blattern an der richtigen Stelle eingefugt wurden, muss es eine Moglichkeit geben, zu beweisen, dass eine Teilantwort das Ergebnis der entsprechenden Teilanfrage an eine Datenquelle ist. Als einfaches Mittel konnte der Mediator den Text der Teilanfragen in die Blatter des Antwortalgebrabaums schreiben. Wenn die Datenquelle unabhangig vom Mediator ist und nicht mit ihm gemeinsam den Kunden angreifen will, kann sie in ihre verschlusselte Teilantwort den Teilanfragetext mit einbringen. Die Ausfuhrungsumgebung des mobilen Codes auf dem Kundenrechner kann dann den Teilanfragetext im Blatt des Algebrabaums mit dem Teilanfragetext in der Teilantwort vergleichen. Eventuell will der Mediator die Information uber die Teilanfrage dem Kunden gar nicht liefern; er musste dann alternativ in das Blatt des Antwortalgebrabaums eine Kennzier schreiben, die die Datenquelle in ihre Teilantwort einfugt. Ob die Teilanfragen jedoch korrekt gestellt wurden und die Teilantworten inhaltlich korrekt sind, kann der Kunde auch mit dieser Methode nicht nachprufen. 46 6 Sicherheitsrisiken durch mobilen Code 6.5 Schutz der Teilantworten auf dem Mediator Der Mediator ist der Hersteller des Programmcodes des mobilen Codes. Eine Veranderung des Programmcodes kann daher als Angri des Mediators auf den Kunden gewertet werden (siehe Abschnitt 6.3.1, Seite 44). Die Daten des mobilen Codes werden jedoch in Form von Teilantworten von den Datenquellen geliefert. Der Mediator konnte daher Interesse daran haben, die Teilantworten anzugreifen. Diese Gefahr ergibt sich nicht durch den Einsatz von mobilem Code, sondern tritt allgemein bei Mediation auf. Da mit dem mobilen Code jedoch die Teilantworten an den Kunden ubertragen werden, ergeben sich fur den Kunden Prufmoglichkeiten, die in Abschnitt 6.5.2 besprochen werden. Im Folgenden mochte ich Angrie und Gegenmanahmen sofort zusammen betrachten. 6.5.1 Klartextangri auf den privaten Schlussel Wenn der Mediator selbst die Berechtigung hat, die Teilantwort auf eine Teilanfrage zu erhalten, kann er die Teilanfrage einmal mit den Eigenschaftsnachweisen des Kunden und ein zweites Mal mit seinen Eigenschaftsnachweisen stellen. Er kann so in den Besitz des Klartextes zu der mit den Schlusseln des Kunden verschlusselten Teilantwort gelangen. Der Mediator kann damit versuchen, den privaten Schlussel des Kunden zu ermitteln. Diesen Angri beschreiben [ABFK03] auf Seite 374. Sie geben den Einsatz eines hybriden Verschlusselungsverfahrens und das Einbringen von Zufallstext in die Teilantwort an, um diesem Angri vorzubeugen. 6.5.2 Verandern der Teilantwort Unter der Annahme, dass die Verschlusselung der Teilantworten vom Mediator nicht zu brechen ist, bleibt ihm es moglich, Teile der verschlusselten Teilantwort auf gut Gluck zu verandern. Der Kunde erhalt jede Teilantwort vollstandig innerhalb des mobilen Codes. Er konnte eine Teilantwort auf solche Veranderungen hin uberprufen, wenn die Datenquelle vor der Verschlusselung eine Prufsumme der Teilantwort berechnet und sie zusammen mit der Teilantwort verschlusselt. Nach der Entschlusselung der Teilantwort auf dem Kundenrechner kann der Kunde erneut eine Prufsumme der Teilantwort berechnen und sie mit der mitgeschickten vergleichen. Wenn jede Datenquelle nicht nur eine Prufsumme der Teilantwort berechnet, sondern die Teilantwort signiert, wie es [Yee99] (Seite 266) fur mobile Agenten vorschlagt, konnte im Zweifelsfalle eine Zuordnung einer Teilantwort zu einer Datenquelle durchgefuhrt werden. Die Teilantworten mussten signiert werden, bevor sie verschlusselt werden, damit der Mediator die Signatur nicht abtrennen und eine neue anhangen kann. Im allgemeinen Fall mochte die Datenquelle anonym bleiben. Der Kunde konnte daher den Signaturprufschlussel auf eine Weise erhalten, die die Anonymitat der Datenquelle wahrt. Dies konnte wie bei den Eigenschaftsnachweisen des Kunden durch eine Trennung von Identitatsnachweis und Prufschlusselnachweis der Datenquellen geschehen. Mit der Teilantwort erhalt der Kunde dann nur den Prufschlusselnachweis, um die Integritat der Teilantwort prufen zu konnen. Falls er jedoch entdeckt, dass die Signatur unter einer Teilantwort nicht stimmt, und er vermutet, dass der Mediator die Teilantwort verandert hat, konnte er rechtliche Schritte einleiten. Die Datenquelle konnte identiziert werden und die korrekte Teilantwort vorlegen9 . 6.5.3 Informationen aus der verschlusselten Antwort Wenn der Mediator die Teilantworten nicht aktiv angreifen will, hat er immer noch die Moglichkeit, aus den verschlusselten Teilantworten Informationen abzuleiten. 9 Mit diesem Verfahren k onnte auch eine Qualitatssicherung der Antworten erreicht werden. Wenn der Kunde an der Qualitat einer Teilantwort zweifelt, konnte er eine Identizierung der Datenquelle und eine Untersuchung veranlassen. 47 6.6 Schutz des mobilen Codes bei der Ubertragung Bei einem Verschlusselungsverfahren, in dem gleiche Teilantworten immer zum selben Schlusseltext verschlusselt werden, konnte der Mediator feststellen, welche Teilanfragen dieselben Teilantworten liefern. Mit einem hybriden Verschlusselungsverfahren ist dies nicht mehr moglich. Wenn namlich die Datenquelle fur jede Antwort, die sie erstellt, einen neuen Sitzungsschlussel produziert, werden gleiche Teilantworten zu unterschiedlichen Schlusseltexten verschlusselt. Allein aus der Groe der Teil- oder Gesamtantwort konnte der Mediator Schlusse ziehen (siehe dazu [ABFK03], Seite 374f). Mit dem Einsatz des mobilen Codes kann es diesbezuglich ein Vorteil sein, dass der Mediator die Gesamtanfrage vollstandig aufspaltet. Wie in Abschnitt 5.1.1 (Seite 29) schon angesprochen, hat der Mediator zwar die Moglichkeit, rationellere Teilanfragen zu stellen. Dadurch wird der Algebrabaum kleiner und es gibt weniger Teilantworten; das wirkt sich dann positiv auf die zu ubertragende Datenmenge und die Berechnungszeit auf dem Kundenrechner aus. Jedoch verringert sich die Groe der Teilantworten, da sie weniger uberussige Daten enthalten: Daten, die in der Gesamtantwort nicht benotigt werden, werden durch die komplexere Teilanfrage schon von der Datenquelle aussortiert. Das Verhaltnis von relevanten zu uberussigen Daten in den Teilantworten ist hoher. Dadurch fallt es dem Mediator eventuell leichter, die Inhalte der Teilantworten zu erraten. Im Interesse der Datenquellen (bezuglich der Geheimhaltung der Daten) und des Kunden (bezuglich seiner informationellen Selbstbestimmung) kann es daher liegen, keine Optimierungen der Teilanfragen durchzufuhren. 6.6 Schutz des mobilen Codes bei der Ubertragung Mobiler Code muss vor Ausspahen, Verandern, Abfangen oder Wiedereinspielen durch Dritte geschutzt werden. Er ist dadurch aber nicht mehr gefahrdet als jede andere Nachricht zwischen Kunde und Mediator. A hnliches beschreibt auch Peine ([Pei02], Seite 35) fur sein System. Die Gesamtantwort des Mediators bei unverschlusselter Mediation konnte ebenso angegrien werden. Wenn bei sicherer Mediation nur die Teilantworten verschlusselt sind aber nicht der mobile Code selbst, kann ein Rechner, der auf dem U bertragungsweg zwischen Kunde und Mediator steht, den Algebrabaum lesen. Er kann den Baum dann auch unbemerkt verandern, bevor er den Baum weiter an den Kunden sendet. Daher ist es wichtig, den mobilen Code in geeigneter Weise verschlusselt und signiert vom Mediator an den Kunden zu ubertragen. Damit konnen die Geheimhaltung und die Integritat des mobilen Codes sichergestellt und auerdem der Mediator als Absender authentiziert werden. Wenn der Angreifer die Antwort des Mediators abfangt, wird das Ausbleiben der Antwort dem Kunden auallen. Jedoch kann der Angreifer das Abfangen einer Antwort mit dem Wiedereinspielen einer Antwort fur den Kunden verbinden, die er bereits fruher abgefangen hat. Wenn der Kunde dieselben Schlussel in den beiden entsprechenden Anfragen angegeben hat, wird er die wiedereingespielte Antwort entschlusseln konnen und (falls dem Kunden die falsche Antwort uberhaupt auallt) dem Mediator die Schuld fur die falsche Antwort geben. Um dem entgegenzuwirken kann der Kunde eine Seriennummer (oder einen Zeitstempel) mit jeder Anfrage mitschicken. Die Anfrage muss dabei verschlusselt werden, da sonst ein Angreifer die Seriennumer in der Anfrage auslesen und eine falsche Antwort mit dieser Seriennummer an den Kunden senden konnte. Der Mediator fugt die Seriennummer in seinen mobilen Code ein, bevor er ihn verschlusselt. Der Kunde kann nach dem Entschlusseln anhand der Seriennummer erkennen, ob er die richtige Antwort erhalten hat. Der Angreifer kann weiterhin anhand des verschlusselten mobilen Codes Schlusse zu ziehen. Chess (siehe [Che98], Seite 12) schreibt: "Hier gibt es immer noch Anfalligkeiten fur die Analyse des Datenaufkommens, gestohlene Schlussel, Angrie auf die Schlusselverteilungs-Infrastruktur und so weiter; aber zumindest sind die Probleme grotenteils wohlverstanden.\ Mit solchen 10 10 Ubersetzung aus dem Englischen; Originaltext: "There are still vulnerabilities here, to trac analysis, stolen keys, attacks on the key-distribution infrastructure, and so forth, but at least the problems are mostly well 48 6 Sicherheitsrisiken durch mobilen Code Angrien mochte ich mich innerhalb dieser Diplomarbeit nicht weiter befassen. 6.7 Schutz des mobilen Codes auf dem Kundenrechner Es muss nicht nur der Kunde vor dem mobilen Code geschutzt werden. Auch der mobile Code selbst muss vor einem Zugri durch den Kunden geschutzt werden. Der Codehersteller mochte dem Kunden seinen Algorithmus und seine Daten nur insofern zur Verfugung stellen, dass der Kunde am Ende die angeforderten Ergebnisse erhalt. Aus wirtschaftlichen und urheberrechtlichen Interessen mochte der Codehersteller eventuell seinen Algorithmus oder auch sein Datenformat geheimhalten. Fur den Schutz der Daten kommt im Multimediamediator-System zusatzlich hinzu, dass die Datenquellen ihre Daten nur Berechtigten zuganglich machen wollen. Um den mobilen Code ausfuhren zu konnen, muss zumindest der Prozessor des Kundenrechners Zugri auf den mobilen Code haben. Der Kunde hat damit potenziell die Moglichkeit, alle Operationen zu sehen, die der mobile Code ausfuhrt. Zudem liegen Programmcode und Daten des mobilen Codes in der Regel vor der Ausfuhrung auf der Festplatte des Kunden. Dort kann er auf jeden Fall Einblick nehmen, wenn es sich um eine interpretierte Sprache handelt oder der Binarcode einer kompilierten Sprache dekompiliert werden kann. Der Codehersteller ist daher an Techniken interessiert, bei denen der Code in einem speziellen Format oder in einer speziellen Umgebung ausgefuhrt wird, so dass der Kunde den Code nicht zu Gesicht bekommt. Dieses Interesse steht zunachst einmal im Konikt mit dem Interesse des Kunden, der den mobilen Code einsehen mochte, um seine Unbedenklichkeit zu uberprufen. Der Kunde musste zur Programmuberprufung auf eine andere Schutzmethode zuruckgreifen, bei der er nicht Einblick in den Code nehmen muss; hier kommen im Grunde nur zertizierter oder signierter Programmcode (mit entsprechender vertraglicher Bindung des Codeherstellers) oder ein Sandkasten in Frage. Selbst beweismitfuhrender Code muss das Klartextprogramm bearbeiten, um das Sicherheitspradikat berechnen zu konnen. Im Gegensatz zu mobilen Daten enthalt der mobile Code Programmcode, der auf Daten arbeitet. Wenn diese Daten und der Programmcode aus verschiedenen Quellen stammen, wie das bei Multimediamediator der Fall ist, kann es im Interesse des Programmcodes liegen, die Daten falsch zu bearbeiten. Wenn auerdem verschiedene Teile des Codes aus unterschiedlichen Quellen stammen, konnen sich diese Programmteile sogar gegenseitig angreifen. Der mobile Code muss also gewissermaen vor sich selbst geschutzt werden. Ob und wie weit es fur mobilen Code moglich ist, die Schutzziele "Geheimhaltung des Programmcodes und der Daten\ und "Integritat der Daten und der Programmausfuhrung\ zu erreichen, mochte ich in den folgenden Abschnitten diskutieren. Dazu gehe ich zunachst auf Softwaremethoden zum Schutz der Daten und des Programmcodes ein und stelle dann eine Hardwarelosung in Abschnitt 6.7.5 vor. 6.7.1 Datenintegritat wahrend des Aufenthalts auf dem Kundenrechner Berechnungen auf verschlusselten Daten (siehe Abschnitt 3.1, Seite 8) sind auch auf dem Kundenrechner nicht moglich. Sind die Daten eines mobilen Codes aber erst einmal entschlusselt, unterliegen sie der vollstandigen Kontrolle des Kunden und der mobile Code kann sie nicht vor Loschen oder Verandern schutzen. Eine Korruption der Daten lasst sich durch eine alleinige Softwarelosung nicht verhindern (vgl. dazu die allgemeinen Anmerkungen in [Pei02], Seite 46). Aber eine Veranderung der Daten von mobilem Code, der nur auf seinem Kundenrechner residiert, schadet nur diesem einen und nicht weiteren Empfangern. Wenn ein Kunde beispielsweise absichtlich Teilantworten verfalscht (siehe Pfeil (0) in Abbildung 7), bekommt auch nur er eine falsche Gesamtantwort zu sehen. Ein Angri auf die Datenintegritat eines mobilen Codes ist jedoch auch ohne aktive Beteiligung des Kunden moglich. Wahrend seiner Ausfuhrung kann ein mobiler Code versuchen, die Daten understood.\ 49 6.7 Schutz des mobilen Codes auf dem Kundenrechner eines anderen Codes zu verandern (siehe Pfeil (1) in Abbildung 7). Dem Kunden wurde das eventuell nicht einmal auallen. Die Ausfuhrungsumgebung muss solche Angrie verhindern, indem sie die Daten verschiedener mobiler Codes voneinander abtrennt. Wenn mobile Codes auf dem Kundenrechner auf gar keinen Fall zusammenarbeiten durfen, ist das einfach umzusetzen (beispielsweise durch getrennte Ausfuhrungsumgebungen). Wenn es jedoch zur Funktionalitat der mobilen Codes gehort, mit anderen zusammenzuarbeiten und gemeinsam Berechnungen auf dem Kundenrechner auszufuhren, ist es schwer zu kontrollieren, ob ein Zugri auf einen anderen mobilen Code Daten diese mobilen Codes in unzulassiger Weise geandert hat. Chess, Harrison und Kershenbaum (siehe [HCK95], Seite 4) schreiben dazu allgemein im Fall eines mobilen Agenten: "Es ist schwierig, notwendige und hinreichende Tests zu denieren, die der Agent bestehen muss, um festzustellen, ob er das Wirtssystem inzieren oder auf andere Weise korrumpieren will.\11 . Fur den Multimediamediator ist zunachst einmal keine Kooperation von mobilen Codes auf dem Kundenrechner vorgesehen. Deswegen sollten verschiedene mobile Codes physisch und logisch so von einander getrennt werden, dass sie nicht gegenseitig ihre Daten verandern konnen. Eine denkbare Erweiterung des Multimediamediator-Systems ware es, mehrere mobile Codes ihre Ergebnisse durch weitere relationale Operatoren verknupfen zu lassen. Dafur musste dann sichergestellt werden, dass die Daten der mobilen Codes in ihrer Integritat nicht verletzt werden. Kunde (2) Pro gramm (0) Daten mobiler Code 2 Pro gramm Daten (1) mobiler Code 1 Abbildung 7: Drei mogliche Angreifer auf die Datenintegritat Im Fall des Multimediamediators stammen die Daten von mehreren Datenquellen, die Operatoren werden jedoch vom Mediator bereitgestellt. Der Mediator kennt daher das Datenformat der Quellen. Er kann seine Operatoren so entwickeln, dass sie die Teilantworten falsch auswerten (siehe Pfeil (2) in Abbildung 7). Da die Operatoren die Teilantworten unverschlusselt auswerten, konnen sie sogar beliebige Werte in den Teilantworten ersetzen. Der Kunde kann solche Angrie entdecken, wenn er eine U berprufung des Programmcodes der Operatoren durchfuhrt (siehe Abschnitt 6.2.3 auf Seite 41). Ein Mediator kann seine Operatoren aber auch von einer unabhangigen Prufstelle, die fur den Kunden als Vertragspartner fungiert, zertizieren lassen; eine solches Verfahren schlagen Seltzsam, Borzsonyi und Kemper mit ihrem OperatorCheck server vor (siehe [SBK01]). Alternativ kann der Mediator beweismitfuhrenden Code verwenden und Beweise fur die semantische Korrektheit seiner Operatoren mitsenden. Die Forderung nach Integritat der mit dem Code verschickten Daten ist noch viel wichtiger im Kontext der mobilen Agenten, insbesondere wenn eine Veranderung der Daten durch Wirtsrechner Auswirkungen auf die Funktionsweise des Agenten hat. Wenn neu hinzugekommene Teilergebnisse von jedem Wirtsrechner signiert werden, kann der Auftraggeber zumindest feststellen, dass die den Agenten begleitenden Daten verandert wurden, wenn der Auftraggeber 11 Ubersetzung aus dem Englischen; Originaltext: It is dicult to dene necessary and sucient tests that the agent must pass in order to determine whether "it intends to infect or otherwise corrupt the host system.\ 50 6 Sicherheitsrisiken durch mobilen Code alle Signaturprufsschlussel hat. Karjoth et al. (siehe [KAG98]) entwarfen eine Signatur- und Verschlusselungskette fur mobile Agenten, mit der auch die Integritat und Geheimhaltung der Teilergebnisse der einzelnen Wirtsrechner sichergestellt werden kann; sie funktioniert jedoch nur, wenn Wirte nicht mit den Teilergebnissen der anderen Wirte rechnen mussen. 6.7.2 Geheimhaltung der Daten nach Auslieferung an den Kunden Das Konzept der sicheren Mediation mit dem Multimediamediator hat seine Anwendung in verteilten Informationssystemen, in denen Vertraulichkeit von Daten gewahrleistet werden muss. Auf dem Weg von den Datenquellen zum Kunden sind vertrauliche Daten in den Teilantworten dadurch geschutzt, dass sie mit Schlusseln verschlusselt sind, die an Eigenschaften geknupft sind, die nachweisen, dass der Besitzer der Schlussel berechtigt ist, die Daten zu sehen. Wenn der empfangende Kunde die Entschlusselung vornehmen kann, hat er sich als Besitzer der Schlussel authentiziert und somit letztlich gezeigt, dass er berechtigt ist, die Daten zu lesen. Allerdings hat er dann auch die Moglichkeit, Daten zu kopieren und an Leute weiterzuverbreiten, denen die Datenqellen nicht die Berechtigung erteilen wurden, die Daten zu lesen. Dies konnen die Datenquellen mit Softwaremanahmen allein nicht verhindern. Sie (oder die Dateneigentumer) konnen jedoch in ihre Daten ein digitales Wasserzeichen einrechnen, mit dem sie ihre Urheberrechte deutlich machen konnen. Zum derzeitigen Stand der Technik sind digitale Wasserzeichen aber vorwiegend fur Bild- und teilweise fur Tondokumente anwendbar, bei denen ein Grundrauschen beziehungweise ein Verandern von niedrigwertigen Bits keine (oder zumindest keine groe) Auswirkung auf die enthaltene Information haben. Digitale Wasserzeichen sind nicht falschungssicher und Kopierschutzmechanismen, die auf Wasserzeichen aufbauen, sind auf manipulationssichere Hardware angewiesen (vgl. zu diesem Themenkomplex [PAK98] in [Auc98] und [Dit00]). Fur textuelle Daten wie Datenbanktabellen sind digitale Wasserzeichen im Allgemeinen schwierig zu realisieren. Im Multimediamediator-Konzept kommt hinzu, dass aus mehreren Tabellen eine Gesamtantwort ausgerechnet wird, in der sich dann nur Teile der ursprunglichen Tabellen benden. Eine Tabelle kann daher nicht einmal als Ganzes markiert werden. Wenn stattdessen die Datenzellen einer Tabelle einzeln gekennzeichnet wurden, ware die Zusammengehorigkeit der Daten damit nicht mehr markiert. Fur Tabellen, auf denen Berechnungen ausgefuhrt werden, ware daher eine wichtige Anforderung an ein Wasserzeichen-Verfahren, dass Teile aus einer Tabelle herausgenommen werden konnen, ohne das Wasserzeichen zu zerstoren. Ein anderer Aspekt beim Multimediamediator ist, dass der Kunde samtliche unverschlusselte Teilantworten in die Hand bekommt. Er hat damit Zugri auf viel mehr urheberrechtlich geschutztes oder vertrauliches Material, als er in der Gesamtantwort benotigt. Dasselbe trit auf den Mediator im Fall der unverschlusselten Mediation zu. Aus diesem Gesichtspunkt ware fur die Datenquellen eine Optimierung des Aufspaltungsalgorithmus' von Vorteil (siehe Abschnitt 5.1.1 auf Seite 29); sie wurden komplexe Teilanfragen, auf die sie wenige Daten zuruckliefern, bevorzugen. Das steht im Widerspruch zum Wunsch, den Umfang der relevanten Daten in den Teilantworten vor dem Mediator in einer groeren Teilantwort zu verstecken (siehe Abschnitt 6.5.3, Seite 46). Die Datenquelle muss entscheiden, was sie als die groere Gefahr ansieht; davon abhangig kann sie einen Mediator als Vertragspartner auswahlen, der ihr entweder komplexe oder atomare Teilanfragen sendet. Vielleicht kann hier auch eine Erweiterung des Multimediamediator-Konzepts Abhilfe schaen. Belmon und Yee schlagen in [BY98] beispielsweise den Einsatz von mobilen Agenten vor, um auf Datenbanken nur die minimal benotigte Menge von Daten herauszusuchen. Der Mediator konnte, anstatt jede Datenquelle einzeln anzusprechen, einen solchen Agenten erstellen und ihn die Teilantworten auf den Datenquellen zusammensuchen lassen. Wenn die Teilantworten alle zusammen verschlusselt werden, erfahrt der Mediator auch nichts uber die Groe einzelner Teilantworten. 6.7 Schutz des mobilen Codes auf dem Kundenrechner 51 6.7.3 Geheimhaltung des Programmcodes auf dem Kundenrechner Wenn Code ausgefuhrt wird, also in den Hauptspeicher geladen und im Prozessor verarbeitet wird, ist er fur den ausfuhrenden Rechner sichtbar. Gerade Java-Code ist auch im Binarformat nicht "geschutzt\, da Dekompilierer aus dem Bytecode wieder fur Menschen lesbaren Quelltext erstellen konnen. Eine einfache Gegenmanahme gegen einen Leseangri ist es, den Code funktional und syntaktisch korrekt zu lassen, aber durch Einfuhrung zusatzlicher Variablen, Kontrollanweisungen oder Methoden die Funktion und den Kontrollu zu verschleiern. Diese Verschleierung des Codes bietet aber hochstens einen kurzzeitigen Schutz, denn auch hier gibt es Programme, die den verschleierten Code wieder vereinfachen (siehe [Rou03] zur Verschleierung von Java-Programmen). Die theoretische Betrachtung der Codeverschleierung steht gerade erst am Anfang. Barak et al. (siehe [BGI+ 01]) geben eine Familie F von Programmen an, fur die es keine Verschleierung geben kann: eine Eigenschaft : F ! f0; 1g kann mit bloem Orakelzugri auf ein Programm f der Familie nicht ezient berechnet werden (die Wahrscheinlichkeit, dass die Eigenschaft von einer probabilistischen Turingmaschine in polynomieller Zeit mit f als Orakel berechnet wird, hat nur einen vernachlassigbaren Unterschied zu bloem Raten); mit Rechenzugri auf eine beliebiges Programm der Familie kann die Eigenschaft jedoch ezient berechnet werden. Dagegen geben Lynn et al. (siehe [LPS04]) erste positive Ergebnisse der Codeverschleierung an. Sie verschleiern die Funktionalitat eines Zugriskontrollmechanismus' durch die Komposition mehrerer Verschleierungsfunktionen. Selbst wenn eine Dekompilierung nicht moglich ist, kann der Rechner den Code beliebig oft mit unterschiedlichen Parametern ausfuhren und so versuchen den Algorithums zu erraten (vgl. dazu etwa Hohl [Hoh98], Seite 110). Das Konzept der umgebungsabhangigen Schlussel ermoglicht es zumindest, Teile des Programmcodes solange verschlusselt zu halten, bis vorher festgelegte Bedingungen erfullt sind. Riordan und Schneier (siehe [RS98]) benutzen als Beispiel eine Patentdatenbank, in der ein Softwareagent nachschaut, ob ein bestimmtes Patent schon angemeldet wurde. Eine Variante der umgebungsabhangigen Schlussel sind zeitabhangige Schlussel, die aber einen zuverlassigen externen Zeitgeber benotigen, damit eine Zeit-Worterbuchattacke { also das Ausfuhren des Programms mit verschiedenen Systemzeiten { verhindert werden kann. Eine Geheimhaltung des Funktionsweise eines Programms bieten Berechnungen mit verschlusselten Funktionen (engl. computing with encrypted functions, CEF). Die verschlusselte Funktion wird an den Berechner gesendet, der auch die geheimen Eingabedaten besitzt, das verschlusselte Ergebnis zu seiner Eingabe berechnet und das Ergebnis zuruck an den Auftraggeber; idealerweise ist keine weitere Interaktion notig. Tomas Sander und Christian Tschudin (siehe [ST98], Seite 48) unterscheiden zwischen einer Funktion F und einem Programm P (F ) (in prozessorverarbeitbarem Klartext), das die Funktion berechnet. Um die Funktion F zu verstecken, soll sie zu einer Funktion E (F ) verschlusselt werden, die wiederum in einem Klartextprogramm P (E (F )) dargestellt werden kann. Betrachten wir wieder Alice und Bob als Teilnehmer der verteilten Berechnung. Alice erstellt das verschlusselte Programm P (E (F )) und sendet es an Bob. Bob berechnet P (E (F ))(x) zu seiner Eingabe x und sendet das Ergebnis an Alice. Nach der Entschlusselung erhalt Alice f (x). Der Rechenablauf ist in Abbildung 8 schematisch dargestellt. Zunachst betrachteten die Autoren die Auswertung von verschlusselten Polynomen mit Hilfe eines homomorphen Verschlusselungsschemas (siehe Abschnitt 3.1 auf Seite 9). Die Ergebnisse der Berechnung auf verschlusselten Daten (wie in Abschnitt 3.1 beschrieben; siehe [SYY99]) lassen sich auf verschlusselte Programme ubertragen. Als Eingabedaten kodierte (und verschlusselte) Schaltkreise konnen von universellen Schaltkreisen ausgewertet werden. Universelle Schaltkreise haben jedoch polynomielle Tiefe und Groe im Vergleich zu den kodierten Schaltkreisen, die sie auswerten sollen. Der universelle Schaltkreis fur Schaltkreise aus NC 1 benden sich in der Komplexitatsklasse NC 2 , die die Familie der Schaltkreise mit qua- 52 6 Sicherheitsrisiken durch mobilen Code Alice (4) (5) f(x) (1) E(f)(x) (2) P(E(f))(x) Bob x (3) Abbildung 8: Berechnungen mit verschlusselten Funktionen dratischer Groe und quadratisch logarithmischer Tiefe umfasst. Um die Berechnungen auf verschlusselten Schaltkreisen in polynomieller Zeit durchfuhren zu konnen, mussen ihre universellen Schaltkreise aus der Klasse NC 1 sein. Daspschrankt die Eingabemenge ein; p beispielsweise auf Familien von Schaltkreisen der Tiefe d = O( log n) und der Groe s = 2O( log n) bezuglich der Lange n der Eingabe fur den ursprunglichen Schaltkreis. Wenn jedoch Berechnungen mit verschlusselten Funktionen und damit auch Berechnungen auf verschlusselten Daten allgemein und ezient moglich waren, sollte der Mediator sofort die Gesamtantwort aus den verschlusselten Teilantworten berechnen (siehe Abschnitt 3 auf Seite 8). 6.7.4 Integritat der Codeausfuhrung Abgesehen vom Ausspahen des Codes (siehe Abschnitt 6.7.1) kann der Kunde auch die Ausfuhrung des Codes beeinussen. Damit hat er die Moglichkeit, den Code falsche Ergebnisse berechnen zu lassen. Fur mobilen Code bedeutet das lediglich, dass der Kunde sich selbst schadet. Wiederum sind es die mobilen Agenten fur die sichergestellt werden muss, dass alle Wirtsrechner sich korrekt verhalten. Ich mochte hier kurz zwei probabilistische Verfahren zur Integritatsprufung anfuhren: Um nachzuweisen, dass ein Agent auf jedem Wirtsrechner korrekt ausgefuhrt wurde, benutzen Biehl, Meyer und Wetzel (siehe [BMW98]) probabilistische Beweise, die der Agent mit sich fuhrt und die vom Auftraggeber des Agenten uberpruft werden konnen. Wenn der Auftraggeber schon vor dem Senden des Agenten zufallig die Bits auswahlt, die er in den Beweisen uberprufen will, und Angaben uber diese Bits mit dem Agenten mitsendet, muss jeder Wirtsrechner nur diese Bits seines Beweises schicken. Damit der Wirtsrechner nicht erfahrt, welche Bits der Auftraggeber sehen will, benutzen Biehl et al. die Methode der "vertraulichen Informationsabfrage\ (engl. private information retrieval). Loureiro et al. (siehe [LBR02]) betrachten Berechnungen mit verschlusselten Funktionen, die sich durch Schaltkreise darstellen lassen. In die Darstellung eines Schaltkreises fugen sie kleine Fehler ein. Die Fehler erzeugen im Ergebnis einen Fehlervektor mit einem Hamminggewicht t (das ist die Anzahl der Nicht-Null-Bits). Aus dem Endergebnis des Agenten, der die verschlusselte Funktion enthalt, rechnet der Auftraggeber den Fehlervektor heraus und vergleicht dessen Hamminggewicht mit t. Stimmt das Hammingewicht des Ergebnisses, akzeptiert er das Ergebnis. 6.7.5 Sichere Koprozessoren Seit einiger Zeit gibt es Bemuhungen, Datenverarbeitung mit einem abgesicherten HardwareModul (oft in Form eines Koprozessors) durchzufuhren, das es unmoglich macht, auf Daten innerhalb dieses Moduls zuzugreifen. Das Modell von Yee und Tygar (siehe [YT95]) sieht vor, dass der Koprozessor aus einer Recheneinheit, einem Nur-Lese-Speicher und sicherem nicht- 6.8 Verhinderbarkeit von Angrien mit Java 53 uchtigen Speicher besteht12 . Die Hardware muss soweit wie moglich vor physischen U bergriffen geschutzt werden. Der Speicher des Koprozessors enthalt einen geheimen symmetrischen Schlussel und ein asymmetrisches Schlusselpaar. Der Koprozessor besitzt eine Verschlusselungsund eine Entschlusselungsoperation. Spezielle Ver- und Entschlusselungshardware kann die Recheneinheit zusatzlich unterstutzen. Der Entwurf der Trusted Computing Group (TCG, siehe [TCG]) unter den Namen "zuverlassige Datenverarbeitung\ (engl. trusted computing) beziehungsweise "vertrauenswurdige Datenverarbeitung\ (engl. trustworthy computing; vorwiegend von der Microsoft Corporation [MIC] verwendet) sieht auerdem einen "sicheren Pfad\ zwischen den Eingabe- und Ausgabegeraten und dem Koprozessor vor. Die Schlusselverwaltung (insbesondere die Neugenerierung oder die Migrierung auf andere Rechner) soll in dem Entwurf nur eingeschrankt moglich sein. Innerhalb des Prozessors werden Daten unverschlusselt bearbeitet. Nur registrierte, "vertrauenswurdige\ Programme konnen auf Daten zugreifen, die vom kryptographischen Prozessor entschlusselt wurden. Ein beliebtes Beispiel ist ein Abspielprogramm fur Filme, die urheberrechtlich geschutzt sind. Ein Film wird dann nur verschlusselt ausgeliefert. Wenn der Kunde vom Rechteinhaber einen Entschlusselungsschlussel gekauft hat, kann ein registriertes Abspielprogramm den kryptographischen Prozessor beauftragen, den Film zu entschlusseln, und danach den entschlusselten Film anzeigen. Auf diese Weise kann auch Programmcode geheim gehalten werden. Der Programmcode wird nur innerhalb des Prozessors entschlusselt und dann ausgefuhrt. Die Verwendung von Einmalschlusseln ermoglicht es, dass der Code nur einmal ausgefuhrt werden kann. Zuverlassige Datenverarbeitung kann auch dazu dienen, Daten an einen Rechner zu binden. Der kryptographische Prozessor muss dazu feststellen, ob der Rechner, in dem er und die Daten sich benden, ein anderer ist als der, auf dem die Daten erstellt wurden, oder ob der Rechner verandert wurde, seit die Daten verschlusselt wurden. Beim Systemstart wird beispielsweise aus den Seriennummern der angeschlossenen Hardware-Komponenten ein Kennwert des Systems berechnet. Bei der Verschlusselung von Daten wird dieser Kennwert den Daten vorangestellt. Der kryptographische Prozessor gibt nach der Entschlusselung die Daten nur frei, wenn der Kennwert der verschlusselten Daten mit dem aktuellen System-Kennwert ubereinstimmt. Handelt es sich um einen fremden Rechner oder wurde der Rechner zwischenzeitlich verandert, konnen die Daten nicht mehr entschlusselt werden. Voraussetzung fur diese Ansatze ist immer, dass ein Kundenrechner mit der entsprechenden Hardware ausgerustet ist. Wenn ein Kunde des Multimediamediator-Systems im Besitz eines sicheren Koprozessors ist, kann ein Mediator seinen mobilen Code bei einer Zertizierungsstelle registrieren lassen. Er erhalt dann ein Zertikat fur seinen Code. Der Mediator sendet den Code mit dem Zertikat an den Kunden. Der sichere Koprozessor des Kunden pruft das Zertikat. Wenn er es akzeptiert, fuhrt er den Code aus, ohne dass der Kunde den Code zu sehen bekommt. 6.8 Verhinderbarkeit von Angrien mit Java Tabelle 6 (Seite 54) stellt dar, welche Angrie durch welche Mechanismen der Programmiersprache Java oder bereits vorhandene Bibliotheken verhindert werden konnen. Die erste Spalte gibt den Angri an. Die zweite Spalte (mit dem Titel ?\) gibt an, ob der Angri verhinderbar ist (mit dem Zeichen "p\) oder nicht (mit dem Zeichen""{\). Die dritte Spalte enthalt eine kurze Begrundung, warum ein Angri nicht verhindert werden kann, oder eine kurze Erklarung, wie ein Angri verhindert werden kann. Die vorgeschlagenen Gegenmanahmen zum Schutz der Teilantworten (Einbringen einer Seriennummer oder des Teilanfragetextes in die Teilantwort und Signierung der Teilantworten) 12 Im englischen Original: "A secure coprocessor is a hardware module containing (1) a CPU, (2) bootstrap ROM, and (3) secure non-volatile memory.\ 54 6 Sicherheitsrisiken durch mobilen Code wurden nicht implementiert. Sie konnen bei einer Erweiterung des Systems umgesetzt werden. Dazu mussen insbesondere auf Kundenseite Methoden eingefugt werden, die die entsprechenden U berprufungen vornehmen. Die restlichen Gegenmanahmen wurden implementiert und die vierte Spalte verweist auf die Abschnitte, in denen die Manahmen ausfuhrlicher erklart werden. Angri Spionage mobiler Code gegen Kunde ? Begr undung/Erklarung p Abschnitt keine Leserechte auf Dateien fur den Code vorhan- 9.1.7 und den, keine Referenzen auf Kundenmodulklassen und 9.1.3 keine Netzverbindung fur den Code moglich Programm- und p keine Schreibrechte fur den Code vorhanden 9.1.4 und Datenkorruption 9.1.5 Ressourcendiebstahl { Lange Berechnungen, Belegen des Arbeitsspeichers, 9.1.1 und Starten von Threads und Blockierung von Eingabe- 9.1.7 und Ausgabestromen moglich Komplott mehrerer p eigene virtuelle Maschine fur jeden Code 9.1.8 Codes Auftreten unter p keine Benutzungsschnittstellen und kein nativer Co- 9.1.2 und falscher Identitat de fur den Code moglich 9.1.6 Nachladen von p keine Netzverbindung fur den Code moglich 9.1.3 schadlichem Code Mediator gegen Kunde p Auswahl Prolbildung verschiedener Verschlusselungsschlussel 8.3 Falsches Einsetzen p Seriennummer oder Teilanfragetext in der Teilant- { der Teilantwort wort Mediator gegen Teilantworten p Verandern der Signieren der Teilantworten { Teilantwort p hybrides Verschlusselungsverfahren Klartextangri; 8.1 Ableiten von Informationen Dritte gegen mobilen Code Abfangen und Wie- p Zeitstempel 9.2 dereinspielen Kunde gegen mobilen Code Lesen und Veran- { Dekompilieren des Binarcodes und Lesen der Daten 9.3 dern moglich mobiler Code gegen eigene Teilantworten Schadliche Opera- { Falsche Auswertung von Teilantworten moglich 9.3.1 toren U berschreiben des p nur Entdeckung von Duplikaten in Java-Archiven 9.3.2 Datenformats andere mobile Codes gegen mobilen Code Lesen und Veran- p eigenes Arbeitsverzeichnis und eigene virtuelle Ma- 9.3 dern schine fur jeden Code Tabelle 6: Verhinderbarkeit von Angrien mit Java 55 III. Implementierung Inhalt 7 Eingesetzte Java-Mechanismen . . . . . . . . . . . . . . . . . . . . . . . . . . ... ... ... ... ... ... ... ... ... 8 Umsetzung des Multimediamediators mit mobilem Code . . . 8.1 Datenquellenmodul . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Mediatormodul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3 Kundenmodul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Mogliche Angrie auf das Mediatorsystem . . . . . . . . . . . . 9.1 Angrie des mobilen Codes auf den Kunden . . . . . . . . . . . . . 9.2 Angrie Dritter wahrend der U bertragung . . . . . . . . . . . . . . 9.3 Angrie auf mobilen Code wahrend des Aufenthalts beim Kunden 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 Sicherheit auf Binarcode-Ebene . . . . . . Entstehung des Java-Sicherheitskonzepts . Klassenlader-Hierarchie . . . . . . . . . . Das Java-Berechtigungskonzept . . . . . . Beispielhafte Berechtigungen . . . . . . . Privilegierter Code . . . . . . . . . . . . . Kryptographie . . . . . . . . . . . . . . . Schutz von Java-Archiven . . . . . . . . . JDBC, RMI und JNI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 56 57 58 58 61 62 62 64 65 66 66 69 78 85 85 91 92 Vertrauen bedeutet nicht Blindheit. Es geht zusammen mit Kontrolle: Man "kann es nur erwarten, wenn man Menschen ihr eigenes Urteil lasst und Transparenz garantiert.\ Gesine Schwan 56 7 Eingesetzte Java-Mechanismen 7 Eingesetzte Java-Mechanismen Das Konzept des Mediators sieht wechselnde Kunden und Datenbanken und damit eine Vielzahl von Plattformen vor. Die Programmiersprache Java [JAV] ist fur ein solches System pradestiniert, da sie von der zugrundeliegenden Plattform abstrahiert und eine einheitliche Laufzeitumgebung bereitstellt. Die Plattformunabhangigkeit der Programmiersprache Java wird durch die Umsetzung des Konzeptes einer virtuellen Maschine (Abk.: VM) realisiert. Java Quellcodes werden in Binardateien ubersetzt, die aus Befehlen in der Sprache der virtuellen Maschine bestehen. Die Java-Binardateien werden als Klassendateien bezeichnet. Ausgefuhrt werden die Dateien in einer Laufzeitumgebung, die den Befehlssatz der virtuellen Maschine emuliert. Die virtuelle Maschine sorgt dafur, dass die Binarcodes auf allen Plattformen von der gleichen Speicherwortlange und Byteordnung ausgehen konnen. Die Grundeinheit der virtuellen Maschine sind 8 Byte; langere Worter werden in Dickender-Reihenfolge (engl. big endian byte order13 ) zusammengesetzt. Java ist fur die Umsetzung des Multimediamediators gut geeignet, da zum Einen auf der Sprachebene (in der virtuellen Maschine) Prufungen des Binarcodes zur Laufzeit stattnden und zum Anderen eine breitgefacherte kryptographische Programmierschnittstelle zur Verfugung gestellt wird. Die Java-Standardumgebung enthalt auerdem Pakete fur Datenbankzugrie und Netzwerkkommunikation. Die von mir verwendete Java-Version ist 1.4.2; Java 1.5 bendet sich derzeit noch im Beta-Stadium. Als Entwicklungsumgebung hat mir Eclipse [ECL] gute Dienste geleistet. 7.1 Sicherheit auf Binarcode-Ebene Java ist auf hardwarenaher Ebene sicherer entworfen worden als andere Programmiersprachen (vgl. [JAS]). Davon will ich an dieser Stelle nur einige Aspekte aufgreifen. Nahere Angaben sind beispielsweise unter [Yel96] und [Eng03] zu nden. Ein entscheidender Gegensatz zum Beispiel zu C++ ist es, dass in Java keine Zeiger existieren und damit auch keine Zeigerarithmetik moglich ist. Es gibt nur Referenzen auf Objekte; Speicheradressen sind also immer an Objekte gebunden und ein direkter Zugri auf eine Speicheradresse ist nicht moglich. Java lat keine uninitialisierten Variablen im dynamischen Speicher zu und die primitiven Datentypen haben auf allen Plattformen dieselbe Lange. Java ist zudem streng typisiert: Jedes Objekt muss zu einer vorher denierten Klasse gehoren und zur Laufzeit kann der Typ eines Objektes nicht in einen inkompatiblen Typ umgewandelt werden. Dies alles sorgt dafur, dass Speicherzugrie immer ein wohldeniertes Ergebnis zuruckliefern. Wichtig fur die sichere Ausfuhrung eines Programms ist auerdem, dass die Speicherverwaltung zuverlassig funktioniert. Java besitzt eine automatische Speicherbereinigung (engl. garbage collection), die unreferenzierten dynamischen Speicher wiedergewinnt und damit Speicherlocher vermeidet. Die Programmiererin oder der Programmierer mussen Speicher nicht explizit wieder freigeben. Einige sicherheitskritische Operationen sind mit Java also gar nicht moglich; dennoch muss Programmcode auf die Einhaltung weiterer Sicherheitsanforderungen uberpruft werden. Ein paar der Sicherheitsuberprufungen konnen schon zum Zeitpunkt der U bersetzung des Quellcodes stattnden. Allerdings konnen solche U berprufungen durch bosartige U bersetzer umgegangen werden. Daher wird im laufenden Java-System jeder geladene Klassencode uberpruft. Alle statischen U berprufungen werden direkt nach dem Laden des Klassencodes durchgefuhrt. Dazu gehort, dass die Klassendatei syntaktisch korrekt ist, keine Speicherbereiche uber- oder unterlaufen, keine unzulassigen Speicherzugrie stattnden, jede Anweisung die korrekten Parameter erhalt, Sprunge nur zum Anfang einer Anweisung fuhren und Typumwandlungen legal sind. 13 Zum Ursprung des Begries siehe beispielsweise http://www.computerbase.de/lexikon/Byte-Reihenfolge (Stand der Webseite: 22. Juni 2009) und Jonathan Swift: "Gullivers Reisen\. 7.2 Entstehung des Java-Sicherheitskonzepts 57 Andere Bedingungen werden dynamisch zur Ausfuhrungszeit des Objektes uberpruft. Dazu gehort, dass Referenzen auf andere Klassen und Zugrie auf Methoden und Attribute legal sind. Mit diesen Sicherheitsuberprufungen schutzt Java das ausfuhrende System auf der Ebene des Arbeitsspeichers gegen Spionage und Veranderungen von Speicherinhalten auerhalb des Zugrisbereichs. Allerdings lasst sich Ressourcendiebstahl mit Java nicht verhindern. Es ist weder moglich, die Menge an Arbeitsspeicher zu begrenzen, die einem Objekt zugewiesen wird, noch die von einem Objekt verwendeten Rechenzyklen einzuschranken. Ein Java-Objekt kann daher allen der virtuellen Maschine zugewiesenen Arbeitsspeicher14 fur sich beanspruchen oder sehr rechenintensive Operationen ausfuhren. Ein anderer Aspekt ist, dass die Bereichsmodikatoren (public, protected, Paketzugri und private) nicht ausreichend sind, um Zugrie von anderen Klassen zu verhindern. Aus softwaretechnischer Sicht ist es meistens sinnvoll, Klassen auf mehrere Pakete zu verteilen. Dadurch mussen aber eventuell Klassen oentlich gemacht werden, die nur von einer geringen Anzahl anderer Klassen aus anderen Paketen zugreifbar sein sollten. Einen Zugri aber nur einer bestimmten Anzahl von Klassen zu erlauben, ist nicht moglich, sondern die jeweilige Klasse ist dann von uberall her zugreifbar. Die Bereichsmodikatoren sind also kein Mittel, um unerwunschte Zugrie auf eine Klasse zu verhindern und es mussen andere Mittel eingesetzt werden, um Klassenzugrie zu steuern. 7.2 Entstehung des Java-Sicherheitskonzepts Neben der Binarcode-U berprufung, die vorwiegend die syntaktische Korrektheit einer Klassendenition sicherstellt, bietet Java auch Mechanismen, mit denen auf der Ebene von Programmmodulen (also einer Menge von Klassen) Einschrankungen fur die Ausfuhrung von Klassen vorgenommen werden konnen. Verfolgt man die Entwicklung der Programmiersprache Java in den Jahren 1994 bis 2004, wird deutlich, dass die Sicherheitsmechnismen einen immer hoheren Stellenwert eingenommen haben und deutlich komplexer geworden sind (vgl. dazu auch [Gon02]). In der Java-Version 1.0 gab es zunachst eine strikte Trennung zwischen lokalem Code und heruntergeladenem Code; lokaler Code umfasste Anwendungen, die von der Festplatte geladen wurden, und heruntergeladener Code waren Applets innerhalb einer Webseite. Wahrend lokaler Code uneingeschrankten Zugri auf die Java-Programmierschnittstelle und die daruber zugreifbaren Ressourcen hatte, wurde der Funktionsumfang des heruntergeladenen Codes dadurch eingeschrankt, dass Browserprogramme ihn in einem Sandkasten ausfuhrten. Dieser Sandkasten erlaubte dem Code nur eine festgelegte Menge von Operationen. In der Version 1.1 bestand die Moglichkeit, heruntergeladenen Code durch Signaturen aus dem Sandkasten herauszulassen. Galt die Signatur des Codes auf dem Empfangersystem als vertrauenswurdig, wurde er wie lokaler Code behandelt. Code, der von einem nicht vertrauenswurdigen Signierer, falsch oder gar nicht signiert wurden, wurde weiterhin im Sandkasten ausgefuhrt. Im Laufe der Zeit wurde deutlich, dass auch lokaler Code aus nichtvertrauenswurdiger Quelle stammen kann. Seit Version 1.2 ist es moglich, jedes Java-Programm mit Sicherheitsuberprufungen auszufuhren. Es gibt kein "Schwarz-Wei\-Prinzip mehr, das Programme in lokalen oder heruntergeladenen Code einteilt, sondern verschiedenen Codes und Programmmodulen konnen eine Vielzahl von Berechtigungen zugewiesen werden. Applets laufen weiterhin standardmaig innerhalb eines Sandkastens, aber auch ihnen konnen zusatzliche Berechtigungen zugewiesen werden. Im Folgenden werde ich grundlegende Java-Mechanismen und Teile der aktuellen Sicherheitsarchitektur vorstellen. Ich beginne in Abschnitt 7.3 mit dem Vorgehen zum Laden von Klassen; fur den Multimediamediator mussste ein Mechanismus geschaen werden, um Klassen, die beim Start der virtuellen Maschine unbekannt waren, zur Laufzeit einbinden zu konnen. Abschnitt 7.4 behandelt die Vergabe von Berechtigungen an Programmmodule und die U ber14 Die Menge an Arbeitsspeicher, die der virtuellen Maschine zugewiesen wird, kann mit der Kommandozeilenoption -Xmx beim Start der virtuellen Maschine festgelegt werden. Dadurch ist indirekt der Arbeitsspeicher fur Programme, die in dieser virtuellen Maschine ausgefuhrt werden, auf diesen Wert begrenzt. 58 7 Eingesetzte Java-Mechanismen prufung dieser Berechtigungen; Abschnitt 7.5 stellt exemplarisch einige Berechtigungen vor, die dem mobilen Code nicht erteilt werden sollen. Privilegierter Code, der in Abschnitt 7.6 eingefuhrt wird, bietet eine Moglichkeit, die Berechtigungsuberprufungen vorzeitig abzubrechen; er wurde aus diesem Grund nicht fur den Multimediamediator mit mobilem Code eingesetzt. Abschnitt 7.7 stellt dar, wie Verschlusselung und Signierung mit Java durchgefuhrt werden konnen; ohne diese Funktionen kommt das sichere Multimediamediator-System nicht aus. Der Schutz von einzelnen Programmmodulen ist Thema des Abschnitts 7.8; die dort erklarten Verfahren, erschweren es dem mobilen Code, einzelne Klassen anzugreifen. Der letzte Abschnitt 7.9 stellt zum Einen zwei Programmierschnittstellen vor, die funktionell fur die Umsetzung des Multimediamediators benotigt wurden. Zum Anderen beschreibt er eine Programmierschnittstelle, die die Einbindung von anderen Programmiersprachen erlaubt; dies soll dem mobilen Code nicht erlaubt werden. 7.3 Klassenlader-Hierarchie Bevor ein Objekt ausgefuhrt werden kann, muss sein Klassen-Binarcode in eine virtuelle Maschine geladen werden. Diese Aufgabe ubernehmen Klassenlader. Beim Start der virtuellen Maschine werden standardmaig drei Klassenlader gestartet: der Urklassenlader, der Erweiterungsklassenlader und der Systemklassenlader. Der Urklassenlader ist eng verknupft mit der virtuellen Maschine und ladt alle Klassen, die zur Java-Standardumgebung gehoren. Der Erweiterungsklassenlader ladt alle Klassen aus Java-Archiven, die in einem bestimmten Verzeichnis liegen (dem sogenannten Erweiterungsverzeichnis); diese Archive konnen den Binarcode einer Anwendung oder einer von mehreren Anwendungen verwendeten Bibliothek enthalten. Im Erweiterungsverzeichnis hat nur ein Administrator Schreibrecht und die gewunschten JavaArchive mussen per Hand in das Verzeichnis kopiert werden; daher sollte es sich um vom Administrator gepruften, zuverlassigen Code handeln. Der Systemklassenlader schlielich ladt alle Klassen innerhalb eines Suchpfades (des sogenannten Klassenpfads), der beim Starten der virtuellen Maschine angegeben wird. Der Klassenpfad kann bei jedem Aufruf verschieden sein. Jeder Klassenlader auer dem Urklassenlader hat einen Elternklassenlader; alle Klassenlader einer laufenden virtuellen Maschine benden sich in einer baumartigen Hierarchie, deren Wurzel der Urklassenlader ist. Der Systemklassenlader ist Kind des Erweiterungsklassenladers und der Erweiterungsklassenlader ist Kind des Urklassenladers; siehe dazu auch Abbildung 9. Die JavaSpezikation sieht vor, dass ein Klassenlader, wenn er aufgerufen wird, eine Klasse zu laden, diese Aufgabe zunachst an seinen Elternklassenlader delegiert. Erst wenn der Elternklassenlader die Klasse nicht ndet, versucht der aufgerufenen Klassenlader, die Klasse zu laden. Das stellt sicher, dass die Java-Standardklassen vom Urlader geladen werden und nicht durch gefalschte Klassen ersetzt werden konnen, die von einem Klassenlader geladen werden, der sich tiefer in der Hierarchie bendet. Mit den Standard-Klassenladern kann nur ein statischer Satz von Binarcodes geladen werden. Alle benotigten Binarcodes mussen beim Start der virtuellen Maschine in den Erweiterungsverzeichnissen vorhanden oder ihr Dateiname im Klassenpfad enthalten sein. Zur Laufzeit konnen dort keine Binarcodes hinzugefugt werden. Es konnen anwendungsspezische Klassenlader implementiert und in die Hierarchie eingeordnet werden. Um diese Klassenlader innerhalb der Anwendung zu benutzen, muss explizit entweder die Methode ClassLoader.loadClass(String classname) oder die Methode Class.forName(String classname, boolean resolve, ClassLoader classloader) aufgerufen werden. 7.4 Das Java-Berechtigungskonzept Jedes instanziierte Objekt in der virtuellen Maschine bendet sich in einem Schutzbereich, der durch ein Objekt der Klasse java.security.ProtectionDomain dargestellt wird. Schutzbe- 59 7.4 Das Java-Berechtigungskonzept Urklassenlader loadClass() Erweiterungsklassenlader loadClass(){ parent.loadClass(); ... } Systemklassenlader loadClass(){ parent.loadClass(); ... } Abbildung 9: Standardklassenlader-Hierarchie reiche trennen Objekte mit unterschiedlichen Berechtigungen voneinander. Eine spezielle Art von Schutzbereichen sind Systembereiche, die alleinigen Zugri auf die externen Ressourcen wie Dateisystem, Netzwerk, Bildschirm und Tastatur haben. Andere Objekte, die auf eine Ressource zugreifen wollen, mussen dafur ein Objekt aus einem Systemschutzbereich aufrufen { zum Beispiel System.out fur die Standardausgabe. Der Schutzbereich, dem ein Objekt zugewiesen wird, wird bestimmt durch den Herkunftsort des Codes (das ist ein Objekt der Klasse java.security.CodeSource), eine Menge von Zertikaten, die die oentlichen Schlussel enthalten, mit deren privaten Gegenstucken der Code signiert wurde, eine Menge von Prinzipalen (das sind in diesem Zusammenhang Benutzer, die ein Programm ausfuhren), und den Klassenlader, der das Objekt geladen hat. Zwei Klassen, bei denen alle vier Werte ubereinstimmen, gehoren zum selben Schutzbereich. Unterscheiden sich zwei Klassen hingegen in mindestens einem der Werte, gehoren sie zu verschiedenen Schutzbereichen. Wenn einem ProtectionDomain-Objekt bei der Instanziierung eine Menge von Berechtigungen ubergeben wird, bleiben diese als statische Berechtigungen uber die ganze Lebensdauer des Objektes in Kraft. Zur Laufzeit werden aber bei jeder Berechtigungsuberprufung noch die in der aktuellen Sicherheitsregel enthaltenen dynamischen Berechtigungen berucksichtigt, die diesem Schutzbereich nach der Instanziierung zugewiesen wurden. Alle Berechtigungsuberprufungen werden mit Hilfe einer Instanz der Klasse java.lang.SecurityManager durchgefuhrt. Wenn ein Objekt eine sicherheitsrelevante Operation ausfuhren will, wird in der aufgerufenen Methode mittels des SecurityManagers uberpruft, ob das aufrufende Objekt berechtigt ist, die Operation auszufuhren. Der SecurityManger benutzt dazu eine seiner check-Methoden. Wird beispielsweise die delete-Methode eines java.io.File-Objekts aufgerufen, ruft diese Methode wiederum die checkDelete-Methode des SecurityMangers auf. Nur wenn diese Methode keine java.security.AccessControlException wirft, wird die Datei schlielich geloscht. Hier ist der relevante Abschnitt aus der Klasse File: 60 7 Eingesetzte Java-Mechanismen ... public class File implements java.io.Serializable, Comparable { static private FileSystem fs = FileSystem.getFileSystem(); ... public boolean delete() { SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkDelete(path); } return fs.delete(this); } ... } Die Sicherheitsregel, die zur Laufzeit in Kraft ist und die vergebenen Berechtigungen angibt, wird reprasentiert durch die Klasse java.security.Policy. Diese Klasse selbst ist eine abstrakte Klasse und muss daher von einer geeigneten Klasse beerbt werden. Ein Objekt einer solchen Unterklasse bildet jeden vorhandenen Schutzbereich auf eine Menge von Berechtigungen ab. Die mit Java mitgelieferte Standardimplementierung von Sun Microsystems (siehe [SUN]) initialisiert eine Sicherheitsregel, indem sie Kongurationsdateien einliest. Neben zwei voreingestellten Dateistandorten { im Java-Installationsverzeichnis und im Startverzeichnis des aktuellen Benutzers { kann man beim Programmaufruf oder im Programm selbst, bevor ein SecurityManager gestartet wird, eine zusatzliche Kongurationsdatei angeben. Mit diesem Verfahren ist nur eine statische Sicherheitsregel realisierbar; zur Laufzeit konnen nach dem Start des SecurityManagers keine weiteren Berechtigungen vergeben werden. Berechtigungen werden durch Unterklassen der Klasse java.security.Permission dargestellt, die ebenfalls abstrakt ist. Zu einem Permission-Objekt kann man ein Ziel und mehrere Aktionen angeben; das heit, dass die Berechtigung fur die Ausfuhrung der Aktionen auf dem Ziel-Objekt erteilt wird. Beispielsweise kann man fur die Klasse java.io.FilePermission einen Dateinamen und eine Zugrisart angeben: FilePermission("/tmp/a.txt", "read") erlaubt den Lesezugri auf die Datei /tmp/a.txt. Die Klasse Permission gibt die Methode implies(Permission permission) vor; mit dieser Methode muss jede Berechtigung entscheiden konnen, ob sie die als Parameter ubergebene Berechtigung impliziert. Eine Leseberechtigung fur ein Dateisubsystem beinhaltet auch eine Leseberechtigung fur jede einzelne Datei in diesem Subsystem. Wenn es zum Beispiel im Verzeichnis /tmp/ eine Datei a.txt gibt, dann gilt: FilePermission("/tmp/*", "read") impliziert FilePermission("/tmp/a.txt", "read"). Selbst wenn man von der Schadlosigkeit eines Programms uberzeugt ist, sollte man ihm nur das Minimum an Berechtigungen geben, dass es fur seine Berechnungen braucht. Das verringert die Zahl moglicher Angrisziele, falls das Programm durch ein schadliches mit dem selben Herkunftsort ersetzt wird oder zwei Programme kooperieren und damit de facto ihre Berechtigungen kombinieren. Auerdem sollte man sich bewut sein, welche Nebenwirkungen die Vergabe von Berechtigungen haben kann. Eine Schreibberechtigung fur das gesamte Dateisystem bedeutet beispielsweise auch, dass Java-Standardbibliotheken durch schadliche Varianten ersetzt werden konnen. Eine Berechtigung zum Erstellen von Klassenladern erlaubt es einem Programm, schadliche Klassen zu laden und in einen beliebigen Schutzbereich einzufugen. Sun Microsystems hat auf einer Webseite weitere Gefahrdungen aufgelistet, die durch die Vergabe von Berechtigungen entstehen konnen (siehe [Per97]). Das Berechtigungskonzept von Java verlangt, dass in einer Kette von Methodenaufrufen zwischen verschiedenen Objekten alle Objekte in dieser Aufrufkette auch die Berechtigung haben, die das letzte Objekt in der Kette fur eine sicherheitsrelevante Operation benotigt. Wenn Ob- 61 7.5 Beispielhafte Berechtigungen jekt A eine Methode von Objekt B aufruft und diese Methode eine Datei loschen soll, mussen sowohl Objekt B als auch Objekt A berechtigt sein, diese Datei zu loschen. Ware dem nicht Berechtigungen 1 Berechtigungen 2 FilePermission("a.txt", "delete") Schutz bereich 1 eteFile del () B. Objekt A Schutz bereich 2 Objekt B delete(„a.txt le. “) Fi a.txt Abbildung 10: Aufrufkette zwischen verschiedenen Schutzbereichen so, konnte jedes Objekt ein anderes Objekt mit der entsprechenden Berechtigung instanziieren und die sicherheitsrelevante Operation aufrufen. Sobald ein Objekt in der Aufrufkette die Berechtigung nicht besitzt, wird die Ausfuhrung der gesamten Aufrufkette mit einer AccessControlException in der check-Methode abgebrochen; im positiven Fall beendet sich die Methode einfach ohne Ruckgabewert. Die Gesamtmenge an Berechtigungen fur eine Aufrufkette entspricht dem Durchschnitt der Berechtigungsmengen der einzelnen Objekte in der Aufrufkette. Diese Durchschnittsbildung, also die Berechtigungsuberprufung fur einen Aufruf, wird aber nicht bei jedem Wechsel des Schutzbereichs in der Aufrufkette durchgefuhrt, sondern erst, wenn eine sicherheitskritische Operation aufgerufen wird; denn erst dieser Aufruf macht eine Berechtigungsuberprufung notwendig. Durch diese Art der U berprufung wird die Ausfuhrung der sicherheitskritischen Operation zwar verlangert, der nichtsicherheitskritische Fall { wenn keine sicherheitskritische Operation aufgerufen wird { lauft aber schneller ab. 7.5 Beispielhafte Berechtigungen Neben den Aktionen "Lesen\ und "Loschen\ gibt es fur Datei-Berechtigungen auch Aktionen zum Schreiben und Ausfuhren von Dateien; beispielsweise gibt folgendes Berechtigungsobjekt die Berechtigung fur alle Aktionen auf der der Datei "/tmp/a.txt\: FilePermission("/tmp/a.txt", "read, write, delete, execute"). Jeder Code kann eine graphische Benutzungsschnittstelle starten. Standardmaig ist ein solches Fenster aber mit einem Warntext ausgestattet, der signalisiert, dass der Code, der das Fenster geonet hat, nicht dazu autorisiert worden ist. Wenn der onende Code jedoch die Berechtigung java.awt.AWTPermission("showWindowWithoutWarningBanner") erhalt, wird der Warntext nicht mehr angezeigt. Es gibt eine spezielle Berechtigungen zum Beenden der virtuellen Maschine, so dass nicht jeder beliebige Code die Ausfuhrung des Programms abbrechen kann. Nur Code, der die Berechtigung java.lang.RuntimePermission("exitVM") innehat, darf das Programm beenden. Auerdem gibt es Berechtigungen, um eine Referenz auf ein Klassenladerobjekt zu bekommen (java.lang.RuntimePermission("getClassLoader")) und selbst einen neuen Klassenlader zu instanziieren (java.lang.RuntimePermission("createClassLoader")). Da die Klassenlader bestimmen, ob und welche Klassen geladen werden, sollte nicht jeder Code Zugri auf die Klassenlader haben oder gar einen neuen erstellen konnen. Um den Aufbau einer Netzverbindung zu erlauben, gibt es die java.net.SocketPermission. 62 7 Eingesetzte Java-Mechanismen Der Name und Port des Rechners, zu dem die Kommunikation aufgenommen werden soll, werden als Ziel angegeben; als Aktionen sind das Annehmen einer Verbindung, das Verbinden zum angegeben Rechner, das Warten auf Verbindungen und das Auosen des Rechnernamens moglich. SocketPermission("host.de:777","accept, connect, listen, resolve") erlaubt zum Beispiel alle Verbindungsaktionen zum Rechner host.de auf Port 777. Den Zugri auf Klassen kann nur paketweise kontrolliert werden. Dazu muss aber zunachst der Name des Pakets an die Systemvariable package.access angehangt werden. Nur fur Pakete, deren Namen in der Variablen steht, wird uberhaupt eine Zugriskontrolle durchgefuhrt; auf alle anderen Pakete wird der Zugri immer gestattet. Steht der Name eines Paketes jedoch in der Variablen, konnen Klassen aus dem Paket nur von Code geladen werden, der eine Berechtigung dazu hat. RuntimePermission("accessClassInPackage.javax.swing.*") beispielsweise erlaubt den Zugri auf alle Klassen im Paket javax.swing. 7.6 Privilegierter Code Es besteht eine Moglichkeit, eine sicherheitsrelevante Operation durchzufuhren, obwohl der Aufrufer die Berechtigung dazu selbst nicht hat; dazu muss er eine Methode mit sogenanntem privilegierten Code aufrufen. Privilegierter Code ist Code, der innerhalb der statischen doPrivileged-Methode aus der Klasse java.security.AccessController ausgef uhrt wird. Die doPrivileged-Methode benotigt als Parameter ein Objekt einer neu denierte Klasse, die das Interface java.security.PrivilegedAction implementiert. Diese Klasse wird im Kompilierungsschritt in eine eigenen Binardatei (.class-Datei) ubersetzt. Weitere technische Hinweise zu privilegiertem Code nden sich auf der Sun-Webseite [Pri01]. Wenn das PrivilegedAction-Objekt die Berechtigung hat, die entsprechende sicherheitsrelevante Operation durchzufuhren, und alle in der Aufrufkette folgenden Klassen ebenfalls die Berechtigung haben, wird die Operation erlaubt. Der Aufrufer der doPrivileged-Methode und seine Vorganger in der Aufrufkette brauchen die Berechtigung selbst nicht. Der Vorteil des privilegierten Codes ist es, dass der sicherheitskritische Bereich klein gehalten wird. Das bedeutet, dass die jeweilige Berechtigung nur einem kleinen Stuck Code zugewiesen wird { idealerweise nur der PrivilegedAction-Klasse. Code, der sich sonst mit dem sicherheitsrelevanten Code in einer Klasse benden wurde (oder im selben Java-Archiv; siehe dazu Abschnitt 7.8 auf Seite 64) aber selbst keine sicherheitsrelevanten Operationen durchfuhrt, braucht mit Benutzung des privilegierten Codes die Berechtigung nicht, da der Code, der die Berechtigung benotigt, in die PrivilegedAction-Klasse ausgelagert wird. Die Berechtigungsprufung wird dadurch auch schneller, da nicht die gesamte Aufrufkette gepruft wird, sondern nur bis der privilegierte Code erreicht wird. Diese Methode hat jedoch auch Nachteile: Die Aufrufe von sicherheitsrelevanten Operationen werden schwieriger zu kontrollieren. Mit privilegiertem Code ist es zudem wichtig, dass der privilegierte Code sensible Daten nicht an seinen Aufrufer weiterreicht. Der Aufrufer ist ja eventuell nicht berechtigt, diese Daten zu sehen. Beispielsweise sollte eine PrivilegedAction, die eine Entschl usselung durchfuhrt, den Entschlusselungsschlussel nicht als Ruckgabewert an ihren Aufrufer zuruckgeben. Diese semantischen Sicherheitsanfoderungen konnen von Java nicht automatisch uberpruft werden. 7.7 Kryptographie Java bietet mit dem Paket javax.crypto und Teilen des Paketes java.security eine Schnittstelle fur kryptographische Algorithmen an, die auch unter dem Namen Java Cryptography Extensions (JCE) bekannt ist. Bereitgestellte Algorithmen sind beispielsweise symmetrische Block- und Datenstromverschlusselungsverfahren und Signierungsverfahren. Da JCE nur fur einige Algorithmen eine Implementierung bereitstellt, konnen sogenannte Kryptographie-Anbieter (engl. cryptography provider) eingebunden werden und ebenfalls uber die JCE-Schnittstelle benutzt werden, wenn die Ver- und Entschlusselungsobjekte mit dem jeweiligen Anbieter initiali- 7.7 Kryptographie 63 siert werden. Der Binarcode der Kryptographie-Anbieter liegt meist als Java-Archiv vor; dieses Archiv muss im Suchpfad des Klassenladers vorhanden sein, damit der Klassenlader Klassen aus ihm laden kann. Auerdem muss der Kryptographie-Anbieter bei der Java-VM registriert werden, bevor ein Java-Programm ihn verwenden kann. Die Registrierung eines Anbieters kann statisch durch einen Eintrag in eine Kongurationsdatei, beim Start der virtuellen Maschine durch einen Kommandozeilenparameter oder aber auch durch das Programm selbst erfolgen, soweit das Programm die entsprechende Berechtigung (namlich java.security.SecurityPermission mit dem Ziel "setProperty.security.provider.providername ") besitzt. Die Verwaltung kryptographischer Schlussel und Zertikate ndet in Java durch einen \Schlusselspeicher\ (ein Objekt der Klasse java.security.KeyStore) statt. Fur Schlusselspeicher, die im Standardformat JKS (Abkurzung fur Java Keystore) auf der Festplatte gespeichert werden, ist das Kommandozeilenprogramm keytool im Java-Standardpaket enthalten, mit dem Schlusselspeicher erstellt, Schlussel(paare) generiert und Zertikate im- und exportiert werden konnen. Jeder Eintrag { egal ob Schlussel oder Zertikat { wird mit einem Alias versehen, uber den der Zugri geregelt wird. Ein Schlusseleintrag ist entweder ein asymmetrischer, privater Schlussel zusammen mit einer Zertikatskette fur den dazugehorenden oentlichen Schlussel oder ein symmetrischer, geheimer Schlussel. Ein Zertikatseintrag ist ein Zertikat mit dem oentlichen Schlussel einer Person oder Firma; wichtig ist hierbei, dass die Authentizitat des Zertikats gewahrleistet ist, da aus den Zertikatseintragen Zertikatsketten aufgebaut werden, um Signaturen zu uberprufen. Der Besitzer eines Schlusselspeichers sollte nicht unbedacht Zertikate aufnehmen. Geheime Schlusseleintrage (also symmetrische Schlussel oder der private Teil asymmetrischer Schlussel) werden durch passwortbasierte Verschlusselung geschutzt; gerat das Passwort in Vergessenheit, ist der Schlussel nicht wiederherzustellen. Zertikatseintrage und Zertikate des oentlichen Teils eines asymmetrischen Schlussels konnen ohne Angabe eines Passwortes ausgelesen werden. Auch dem Schlusselspeicher selbst wird ein Passwort beim Erstellen zugewiesen. Bei jedem Speichern des Schlusselspeichers muss das Passwort angegeben werden, denn aus dem Passwort und dem gesamten Schlusselspeicher-Inhalt wird eine SHA-Prufsumme gebildet, die an das Ende der Schlusselspeicher-Datei geschrieben wird. Wenn das Passwort auch beim Laden des Schlusselspeichers angegeben wird, kann seine Integritat gepruft werden. Die Integritatsprufung ist aber nicht obligatorisch und daher die Angabe des Passworts beim Laden optional. Sun Microsystems (siehe [SUN]) liefert mit dem Java-SDK einen Schlusselspeicher aus, der selbstsignierte Zertikate einiger Zertizierungsbehorden (Certication Authorities, CAs) enthalt. Diese Zertikate dienen als Wurzel von Authentizitatsprufungen. Die SchlusselspeicherDatei mit den Wurzelzertikaten ist /jre/lib/security/cacerts. Diese Datei bendet sich im Java-Installationsverzeichnis. Die Hauptklasse fur jede Ver- und Entschlusselung ist javax.crypto.Cipher. Ein Objekt dieser Klasse kann mit Algorithmen von verschiedenen Kryptographie-Anbieter initialisiert werden. Cipher f uhrt die Ver- und Entschlusselung eines Byte-Feldes (byte[]) durch. Fur die Verschlusselung von serialisierbaren Java-Objekten kann man der Klasse javax.crypto.SealedObject einen initialisierten Cipher ubergeben. SealedObject erstellt dann die serialisierte Darstellung des Objektes und verschlusselt diese mit dem Cipher. Die Entschlusselung wird auch mit einem Cipher durchgefuhrt. SealedObject deserialiert nach der Entschlusselung das in ihm enthaltenen Objekt, so dass es im laufenden Programm sofort verwendet werden kann. Analog zum Cipher gibt es fur die Signierung die Klasse java.security.Signature. Diese Klasse kann beliebige Signieralgorithmen ausfuhren, wenn sie mit einem entsprechenden Kryptographie-Anbieter initialisiert wurde. Es kann eine Signatur fur ein Byte-Feld erstellt werden. Fur die Signierung eines Java-Objekts wird das Signature-Objekt verwendet, indem es dem Konstruktor eines java.security.SignedObject ubergeben wird. Auch fur die Prufung einer Signatur ist die Klasse Signature zustandig: entweder direkt mit der Methode verify() fur ein Byte-Feld oder wiederum als U bergabeparameter fur das zu prufende SignedObject. 64 7 Eingesetzte Java-Mechanismen 7.8 Schutz von Java-Archiven Eine Menge von Java-Klassen (insbesondere deren Binarcodes aber auch die Quellcodes oder andere Materialen wie Graphiken) konnen in einem Java-Archiv (JAR) zusammengefasst werden. Die Dateistandorte solcher Archive konnen dem Suchpfad eines Klassenladers hinzugefugt werden. Der Klassenlader kann dann Klassen aus diesem Archiv laden. Die archivierten Klassen mussen nicht alle aus einem Paket stammen, sondern ein Archiv kann Klassen aus verschiedenen Paketen enthalten. Ebenso konnen Klassen aus einem Paket uber mehrere JARs verteilt sein. Metainformationen uber das Java-Archiv sind in der sogenannten Manifest-Datei im JAR enthalten. Mit dem folgenden Eintrag kann beispielsweise die Hauptklasse einer Anwendung und ein initialer Suchpfad fur den Klassenlader angegeben werden: Manifest-Version: 1.0 Created-By: 1.4.2_03 (Sun Microsystems Inc.) Class-Path: bin/client.jar Main-Class: org/mmm/start/Starter Um immer die richtige Version einer Klasse zu laden oder auch das U berschreiben von Klassen durch gefalschte Klassen auerhalb des Archivs zu verhindern, mochte man oft sicherstellen, dass alle Klassen eines Pakets aus demselben Java-Archiv geladen werden. Dazu verwendet man das Versiegeln von Java-Archiven. Es wird folgender Eintrag in das Manifest des Archiv eingefugt: Sealed: true Der Klassenlader ladt dann die Klassen aller Pakete innerhalb des Archivs nur aus diesem Archiv. Solange dieser Manifest-Eintrag selbst nicht verandert oder das JAR ausgetauscht wird, bietet das Sicherheit davor, dass sich Klassen in Pakete "einschleichen\. Wenn zum Beispiel das Paket org.mmm.client im versiegelten JAR client.jar eingepackt ist und eine Klasse org.mmm.client.Attack im Paket attack.jar abgelegt ist, wird der Versuch, diese Klasse zu laden, einen Programmfehler produzieren: java.lang.SecurityException: sealing violation: package org.mmm.client is sealed. Der Dateistandort eines Java-Archivs ist fur die Klassen im Archiv der Herkunftsort und bestimmt daher den Schutzbereich der Klassen mit, wie es in Abschnitt 7.4 (Seite 58) beschrieben wurde. In der Kongurationsdatei fur die aktuelle Sicherheitsregel kann der Dateistandort des Java-Archivs benutzt werden, um allen Klassen innerhalb des Archivs eine Menge von Berechtigungen zuzuweisen. Ein Eintrag in der Kongurationsdatei sieht dann etwa so aus: grant codeBase "file:client.jar" { permission java.io.FilePermission "a.txt","read"; }; Alle Klassen innerhalb des Archivs client.jar erhalten die Berechtigung die Datei a.txt (relativ zum Dateistandort der Kongurationsdatei { also im selben Verzeichnis) zu lesen. Auerdem gibt es die Moglichkeit, Java-Archive zu signieren. Damit kann sichergestellt werden, dass ein JAR nicht verandert wurde, seit es die Hande des Signierers verlassen hat. Abhangig von den Signaturen konnen auch wieder Berechtigungen an das JAR vergeben werden. Ein Eintrag in der Kongurationsdatei ware zum Beispiel der folgende: keystore "myprivatekeystore"; grant signedBy "trustedcert1,trustedcert2" { permission java.io.FilePermission "a.txt","write"; }; Der Schlusselspeicher myprivatekeystore muss vorhanden sein und die Zertikate mit den oentlichen Signaturprufschlussel trustedcert1 und trustedcert2 enthalten. Wenn zwei Si- 7.9 JDBC, RMI und JNI 65 gnaturen eines Archivs mit diesen beiden Schlusseln veriziert werden konnen, erhalten alle Dateien innerhalb des Archivs die Berechtigung, in die Datei a.txt zu schreiben. 7.9 JDBC, RMI und JNI Fur die Umsetzung des Multimediamediator musste ich neben der Erstellung einer Sicherheitsarchitektur auch Datenbankzugrie und Kommunikation zwischen mehreren Rechnern ermoglichen. Ich habe dafur Java Database Connectivity (Abk. JDBC) und Remote Method Invocation RMI verwendet, die beide zur Java-Standardumgebung gehoren. Um mit Java auf einen Datenbankserver zugreifen zu konnen, benotigt man einen zusatzlichen Treiber, der in der Regel von den Datenbankherstellern bereitgestellt wird. Alle JavaDatenbanktreiber mussen die JDBC-Spezikation einhalten. Eine Anwendung, die auf eine Datenbank zugreifen will, ladt den Treiber und baut uber ihn unter Angabe von Datenbankname, Benutzername und Passwort eine Verbindung zur Datenbank auf. U ber diese Verbindung werden die Datenbankanfragen gestellt. Der Ruckgabewert zu einer Anfrage ist ein Objekt vom Typ java.sql.ResultSet, das von der Anwendung zeilenweise bearbeitet werden kann. Remote Method Invocation (RMI) ist die Java-Implementierung von externen Methodenaufrufen (siehe Abschnitt 5, Seite 28). Eine RMI-Registratur (im englischen Original rmiregistry) verwaltet alle aktiven und registrierten RMI-Objekte eines Rechners. Eine RMI-Registratur wird uber den Rechnernamen oder die IP-Adresse des Rechners adressiert, der sie ausfuhrt. Zu jedem Objekt, das von auen angesprochen werden soll, wird eine Schnittstelle veroentlicht. Unter dem Namen dieser Schnittstelle wird das Objekt bei der RMI-Registratur registriert und ist ab dann zu erreichen. Beim Aufruf eines externen Objektes wird auf den aufrufenden Rechner ein Objektstumpf ubertragen; dieser Stumpf reprasentiert das externe Objekt lokal und fuhrt die Methodenaufrufe auf diesem Objekt durch. U bergabeparameter und Ruckgabewerte brauchen keine Objektstumpfe; sie werden in serialisierter Form ubertragen. Ich benutze RMI nicht wie in Abschnitt 5 beschrieben zum Aufbau einer Kommunikation mit mobilen Daten, bei der in einem Anfrage-Antwort-Dialog die Gesamtantwort aufgebaut wird. Vielmehr setze ich RMI als U bertragunsprotokoll fur den mobilen Code ein. Es wird also nur ein externer Methodenaufruf als Anfrage durchgefuhrt, dessen Ruckgabewert alle benotigten Bibliotheken und Daten des mobilen Codes sind. Abschlieend stelle ich noch eine Technik vor, die die Funktionalitat von Java-Programmen erweitert, sie aber auch sehr angreifbar macht. Das Java Native Interface (JNI) bietet eine Schnittstelle zwischen Java-Code und Programmen, die in einer anderen Programmiersprache verfasst wurden. Diese Programme werden als sogenannte Bibliotheken vom Java-Code mit einem Aufruf von System.loadLibrary() geladen. Die JNI ermoglicht eine bidirektionale Kommunikation: Einerseits kann der Java-Code Methoden des nativen Codes aufrufen und ihnen mit der nativen Sprache kompatible Parameter ubergeben (und auch Objekte erzeugen, wenn die andere Programmiersprache objektorientiert ist); andererseits kann der native Code Java-Objekte erzeugen und Java-Methoden aufrufen und kompatible Parameter ubergeben. Nativer Code unterliegt aber nicht den Java-Binarcode-U berprufungen. Bei einem Aufruf von nativem Code innerhalb von Java-Code wird nur gepruft, ob der Aufrufer berechtigt ist, Bibliotheken mit dem angegebenen Namen zu laden. 66 8 Umsetzung des Multimediamediators mit mobilem Code 8 Umsetzung des Multimediamediators mit mobilem Code Mein Programm unterteilt sich entsprechend den Teilnehmern, die im MultimediamediatorSystem identiziert wurden, in ein Kundenmodul, ein Mediatormodul und ein Datenquellenmodul. Demzufolge habe ich mein Programm in drei Pakete eingeteilt: org.mmm.client, org.mmm.mediator und org.mmm.datasource. Die drei Unterpakete org.mmm.client.view, org.mmm.mediator.view und org.mmm.datasource.view enthalten die jeweiligen Benutzungsschnittstellen. Zum Kundenmodul gehort auch das Paket org.mmm.start, das sicherheitsrelevante Einstellungen auf dem Kundenrechner durchfuhrt, bevor das eigentliche Anfrageprogramm gestartet wird. Zusatzlich gibt es noch das Paket org.mmm.core, das Klassen enthalt, die die anderen Pakete gemeinsam benutzen. Das hat den Vorteil, dass die obengenannten Pakete nur Klassen aus org.mmm.core importieren mussen, aber von den jeweils anderen Paketen unabhangig sind. Eine U bersicht uber die in org.mmm enthaltenen Pakete und Klassen gibt Abbildung 28 in Anhang A auf Seite 115. Die Software soll alle Sicherheitsforderungen aus dem Abschnitt 6 erfullen aber dennoch ergonomisch und auch performant sein. Dies ist zunachst einmal ein Zielkonikt; gerade die Verschlusselungsalgorithmen, die Java-inharenten Sicherheitsuberprufungen aber auch graphische Benutzungsschnittstellen fuhren zu Verzogerungen. Um die Bedienbarkeit zu erleichtern habe ich trotzdem fur alle Module eine graphische Benutzungsschnittstelle erstellt. Auf die Verschlusselung und die Sicherheitsuberprufungen kann hier nicht verzichtet werden. Im Vergleich zu einer unverschlusselten und unuberpruften Antwort muss also eine langere Ausfuhrungsdauer in Kauf genommen werden. In den folgenden Abschnitten stelle ich die drei Module im Einzelnen vor. Ich gehe dabei insbesondere auf ihr Zusammenspiel und die sicherheitsrelevanten Aspekte ein. Das Mediatormodul benutzt fur die Aufspaltung der Anfrage die SQL2Algebra-Bibliothek, die lehrstuhlintern von Jan-Hendrik Lochner entwickelt wurde. Da die Algebra nur eine Teilmenge der SQL umfasst, kann nur eine eingeschrankte Menge von SQL-Konstrukten in Anfragen verwendet werden. Auerdem muss die von Jan-Hendrik Lochner denierte Anfrage-Syntax eingehalten werden. 8.1 Datenquellenmodul Zunachst einmal benotigt man einen Rechner, auf dem ein Datenbankserver lauft, der die Relationen verwaltet und die Teilanfragen des Mediators beantworten soll. Das Datenquellenmodul, mit dem der Mediator kommuniziert, kann, muss aber nicht auf demselben Rechner laufen. Es benotigt aber Zugri auf den zur Datenbank passenden Java-Datenbanktreiber, der in Abschnitt 7.9 (Seite 65) vorgestellt wurde. Das Datenquellenmodul baut uber den Datenbanktreiber eine Verbindung zum Datenbankmanagementsystem auf dem Datenbankserver auf. U ber diese Verbindung sendet das Datenquellenmodul SQL-Anfragen an das Datenbankmanagementsystem und erhalt die Teilantwort-Relationen zuruck. Die Kommunikation des Mediators mit dem Datenquellenmodul lauft ausschlielich uber Remote Method Invocation (RMI); auer fur das Datenquellenmodul sollten fur niemanden direkte SQL-Anfragen an den Datenbankserver moglich sein, da das Datenquellenmodul die Teilantworten noch verschlusseln muss. Auf dem Rechner des Datenquellenmoduls muss also auerdem eine RMI-Registratur gestartet werden. Das Datenquellenmodul registriert seine RMI-Schnittstelle org.mmm.core.Datasource bei der RMI-Registratur. Danach startet es die graphische Benutzungsoberache. Der oder die Administrator(in) des Datenquellenmoduls kann daruber die IP-Adresse oder den Rechnernamen des Datenbankservers angeben und auch zur Laufzeit andern. Auch der Klassenname des Datenbanktreibers wird durch ein Eingabefeld in der Benutzungsoberache angegeben; dadurch kann das Datenquellenmodul mit allen Datenbanken und deren Treibern arbeiten, die sich an die JDBC-Schnittstelle halten. Auerdem kann in der Benutzungsschnittstelle der symme- 67 8.1 Datenquellenmodul Abbildung 11: Benutzungsschnittstelle des Datenquellenmoduls Q trische Verschlusselungsalgorithmus und die Schlussellange fur das Verschlusselungsverfahren angegeben werden, mit dem die Teilantwort-Relationen verschlusselt werden. Die Benutzungsschnittstelle ist in Abbildung 11 dargestellt. Nahere Erlauterungen zu RMI und JDBC nden sich im Abschnitt 7.9 (Seite 65). Nach dem Start wartet das Datenquellenmodul auf Anfragen eines Mediators in Form eines org.mmm.core.QueryWithCertificate. Eine Anfrage wird u ber den JDBC-Treiber an den Datenbankserver weitergeleitet; die Antwort ist vom Typ java.sql.ResultSet. Das Datenquellenmodul wandelt mittels der Formatted Dataset API (FDSA; sieht [FDS]) das ResultSet in ein String-Feld (java.lang.String[]) mit den Metadaten und eine Object-Matrix (java.lang. Object[][]) mit dem Tabelleninhalt um. Daraus erstellt das Datenquellenmodul die Teilantwort als Instanz der Klasse org.mmm.datasource.array.ArrayResult. Diese Teilantwort wird ry ue Certi With ficate Da Datenbanktreiber tenquelle Mediator k pub Se al e dR esult FDSA seal transform k session seal Datenbank server ResultSet ArrayResult SealedResult k pub : öffentlicher Schlüssel des Kunden k session : Sitzungsschlüssel Abbildung 12: Ablaufschema fur das Datenquellenmodul vom Datenquellenmodul verschlusselt und an den aufrufenden Mediator zuruckgegeben. Ein schematischer Ablauf der Aufgaben des Datenquellenmoduls ist in Abbildung 12 dargestellt. Auerdem bendet sich im Anhang C (Abbildung 30, Seite 117) das Sequenzdiagramm fur das Datenquellenmodul. In den folgenden beiden Abschnitten stelle ich das Verschlusselungsverfahren vor und gehe auf mogliche Datenformate ein. 68 8 Umsetzung des Multimediamediators mit mobilem Code 8.1.1 Verschlusselung einer Teilantwort Die Verschlusselung einer Teilantwort ndet mit einem hybriden Verfahren statt. Das Datenquellenmodul erstellt einen symmetrischen Sitzungsschlussel (entsprechend den Angaben in der Benutzungsschnittstelle), mit dem die Teilantwort verschlusselt wird; dieser symmetrische Schlussel selbst wird mit dem oentlichen Schlussel aus der Anfrage verschlusselt. Die verschlusselte Teilantwort liegt dann als javax.crypto.SealedObject und der verschlusselte symmetrische Schlussel als byte[] vor. Sie werden in einem org.mmm.core.SealedResult zusammengefasst. Bei der Verschlusselung greife ich auf die Klasse javax.crypto.Cipher zuruck, die ich im Rahmen der Java Cryptography Extension in Abschnitt 7.7 (Seite 62) vorgestellt habe. Das hybride Verfahren bietet den Vorteil, dass die unter Umstanden groe Menge von Antwortdaten mit einem schnelleren symmetrischen Verfahren und der kurze Sitzungschlussel mit einem langsameren asymmetrischen Verfahren verschlusselt werden. Da jede Antwort zudem mit einem neuen Sitzungsschlussel verschlusselt wird, werden Angrie erschwert, die durch den Vergleich mehrerer verschlusselter Texte den Schlussel herausbekommen wollen. Fur die symmetrische Verschlusselung der Daten kann ein beliebiger Algorithums gewahlt werden. Die einzigen Voraussetzungen sind, dass das Datenquellenmodul Zugri auf einen Kryptographie-Anbieter hat, der den Verschlusselungsalgorithmus mit der gewahlten Schlussellange anbietet dass der erzeugte symmetrische Sitzungsschlussel nicht zu lang ist, um mit dem oentlichen Schlussel verschlusselt zu werden dass das Kundenmodul Zugri auf einen Kryptographie-Anbieter hat, der den Entschlusselungsalgorithmus mit der gewahlten Schlussellange anbietet. Der Name des verwendeten Algorithmus' ist im SealedObject enthalten und wird vom Kundenmodul vor der Entschlusselung abgefragt. Der oentliche Schlussel in der Anfrage ist Teil eines asymmetrischen Schlusselpaares. Die Java Cryptography Extensions bieten jedoch keine Implementierung asymmetrischer Verschlusselungsalgorithmen. Daher habe ich fur die asymmetrische Verschlusselung des Sitzungsschlussels (und auch dessen Entschlusselung) auf den Kryptographie-Anbieter Bouncy Castle Provider (siehe [BCP]) zuruckgegrien. Dieser Anbieter stellt als einziges asymmetrisches Blockverschlusselungsverfahren einen Algorithmus mit RSA-Schlusseln und dem Modus Electronic Cipherbook (ECB) zur Verfugung (zu Algorithmenarten und Betriebsmodi siehe etwa [Sch02] ab Seite 223). Da sowieso nur Klartexte verschlusselt werden konnen, die kurzer sind als der Modulus des RSA-Schlussel, ist ECB auch der einzig sinnvolle Modus { die Lange des Modulus entspricht der verschlusselbaren Blocklange. Der einzige variable Wert ist der der Auspolsterung von zu kurzen Blocken. Hier hab ich mich fur Optimal Asymmetric Encryption Padding (OAEP) entschieden, wie es von den RSA Laboratories empfohlen wird (siehe [RSA]). Die asymetrische Verschlusselung ist auf diesen Algorithmus festgelegt und kann nicht geandert werden. Die Teilantworten sollten bei der U bertragung von den Datenquellen zum Kunden nicht nur verschlusselt sondern auch signiert werden, damit der Mediator die Integritat uberprufen kann. Der Mediator benotigt fur die Signaturprufung allerdings oentliche Signaturprufschlussel von allen Datenquellen, die er benutzt. Da dieses Problem der Schlusselverwaltung nicht direkt mit der Umsetzung des mobilen Codes zu tun hat, habe ich die Signaturprufung der Teilantworten zunachst nicht implementiert. 8.1.2 Datenformate Die Datenquellen sind frei in der Wahl der verwendeten Datenformate. Ich habe das Format org.mmm.arrayformat.ArrayResult implementiert, das die Metadaten als String[] und die 8.2 Mediatormodul 69 Tabellendaten als Object[][] enthalt. Wenn eine Datenquelle dagegen ein Format bereithalt, das die Antwortdaten beispielsweise in einer Liste oder einer XML-Datei speichert, muss sie eine Antwort-Klasse bereitstellen, die org.mmm.core.Result implementiert. Dieses Interface wird vom Kundenmodul benutzt. Das Kundenmodul ist damit unabhangig vom tatsachlich verwendeten Datenformat. Wenn zudem mehrere Teilantworten in unterschiedlichen Formaten zusammengefugt werden mussen, mussen die einzelnen Datenquellen oder der Mediator Umwandlungsoperatoren in die anderen Formate bereitstellen oder das in [ABFK03] beschriebene Datenhullen-Konzept umsetzen, das die Umwandlung in ein anderes Format schon auf der Datenquellenseite vornimmt. Auf Seiten des Kunden ergeben sich dadurch aber keine A nderungen. Hier tritt der Vorteil des Konzepts des mobilen Codes zu Tage, da das Kundenmodul zur Laufzeit neue Datentypen einbinden kann, die im mobilen Code enthalten sind. 8.2 Mediatormodul Auch die Kommunikation eines Kunden mit einem Mediator lauft uber Remote Method Invocation. Auf dem Mediatorrechner muss daher eine RMI-Registratur gestartet werden. Die RMISchnittstelle, die das Mediatormodul bereitstellt, ist das Interface org.mmm.core.MMMTask; dessen Methode request() wird von einem anfragenden Kundenmodul aufgerufen. Das Mediatormodul registriert nach dem Start seine Schnittstelle bei der RMI-Registratur und startet die graphische Benutzungsschnittstelle. Abbildung 13: Benutzungsschnittstelle des Mediatormoduls (Datenquellenauswahl) In dem von mir erstellten Programm wird eine Teilanfrage nur an eine Datenquelle gestellt, da der Algorithmus zur Zuweisung von mehreren Teilanfragen an verschiedene Datenquellen noch nicht existiert. U ber die Benutzungsschnittstelle des Mediators kann also nur eine Datenquelle ausgewahlt werden, zu der der Rechnername der Datenquelle, der Name der Datenbank und Benutzername und Passwort des Datenbankservers angegeben werden. Der Mediator muss ein registrierter Benutzer des Datenbankmanagementsystems sein, um eine Anfrage ausfuhren zu konnen. Ein Bildschirmfoto der Benutzungsschnittstelle (mit aktiviertem ersten Reiter) ist in Abbildung 13 zu sehen. Fur jede eingehende Anfrage wird ein org.mmm.mediator.RequestSplitter erzeugt, der die weitere Behandlung der Anfrage ubernimmt. Der RequestSplitter leitet die Anfrage zunachst an ein Objekt der Klasse org.mmm.mediator.TreeGenerator weiter, das fur den Aufbau des mobilen Codes zustandig ist. Der TreeGenerator benutzt die SQL2Algebra-Bibliothek von 70 8 Umsetzung des Multimediamediators mit mobilem Code Jan-Hendrik Lochner, die aus der Anfrage zuerst einen Syntaxbaum und schlielich einen Algebrabaum erstellt. In diesem Baum stehen lediglich java.lang.Strings in den Knoten; daher nenne ich ihn im Folgenden Stringbaum\, um ihn von dem Algebrabaum (dem "Antwortbaum\) zu unterscheiden, der "den mobilen Code reprasentiert. Eine beispielhafte U bersetzung einer Anfrage in den Syntaxbaum und den Stringbaum ist in Abbildung 14 angegeben. select distinct tv1.COF_NAME from COFFEES tv1 where tv1.PRICE=7.99; + Syntaxbaum der SQL-Anfrage ---------------------------->Start -> Anfrage -> EinfacheAnfrage -> Select -> ATListe -> ATerme -> ATerm -> TVariable -> Attribut -> From -> VBListe -> RSymbol -> TVariable -> Where -> Bedingung -> Formel -> Atomformel -> Term -> ATerm -> TVariable -> Attribut -> VglPraedikat -> Term -> Zahl ) Algebra-Baum ("Stringbaum") -------------|- PROJECT{COF_NAME} |-- SELECT{PRICE=7.99} |--- COFFEES Abbildung 14: U bersetzung einer SQL-Anfrage in einen Stringbaum Der RequestSplitter baut den Antwortbaum auf, indem er im Stringbaum eine Tiefensuche durchfuhrt. Gelangt er dabei an ein Blatt, liest er die Teilanfrage aus, mit der das Blatt beschriftet ist. Er erstellt aus dieser Teilanfrage und dem Zertikat aus der Anfrage des Kunden ein QueryWithCertificate-Objekt. Dieses Objekt schickt er an die ausgewahlte Datenquelle weiter, indem er ihre Methode request() aufruft (beziehungsweise requestSigned(), wenn er eine signierte Antwort haben mochte). Er ubergibt ihr zusatzlich die eingegebenen Anmeldeinformationen fur das Datenbankmanagementsystem. Die Teilantwort, die er bekommt, dient als Blatt im Antwortbaum. Nahere Informationen dazu liefert der Abschnitt 8.2.2. Der Antwortbaum wird also beginnend bei den Blattern aufgebaut. Auf dem Ruckweg der Tiefensuche auf dem Stringbaum wird fur jeden inneren Knoten ein entsprechendes Operator-Objekt fur den Antwortbaum erzeugt und die zuvor bearbeiteten Knoten als Kinder eingesetzt. Welche 71 8.2 Mediatormodul konkrete Klasse instanziiert wird, hangt zum einen vom Datenformat der Kinder und zum anderen von der Beschriftung des Knotens im Stringbaum ab. Steht im Stringbaum beispielsweise UNION\ und ist das Datenformat der Kindknoten org.mmm.arrayformat.ArrayResult, dann "wird ein org.mmm.arrayoperators.ArrayResultUnion erstellt. Wie man anhand der unterschiedlichen Paketnamen bereits vermuten kann, werden die Binarcodes der Operatoren nicht von den Datenquellen sondern vom Mediator bereitgestellt. Die von mir implementierten Operatoren werden im Abschnitt 8.2.3 noch naher erlautert. Der gesamte Antwortbaum wird in einem Objekt der Klasse org.mmm.core.ResultExtractor gekapselt, das eine Referenz auf die Wurzel des Antwortbaums enthalt. Nach dem Aufbau des Antwortbaums fugt der Mediator dem ResultExtractor Java-Archive in Form von Byte-Feldern (byte[]) hinzu; sie enthalten den Binarcode fur die verwendeten Datenformate und Operatoren, damit diese auch auf vom Kundenmodul instanziiert werden konnen. Nun ist der mobile Code fertiggestellt. Er wird verschlusselt und signiert und die RMI-Methode gibt ihn an den Kunden zuruck. Alle Aufgaben des Mediatormoduls sind im Ablaufschema in Abbildung 15 dargestellt. Der zeitliche Ablauf ist am Sequenzdiagramm in Abbildung 30 (Anhang C, Seite 117) zu sehen. Ein paar Einzelheiten des Mediatormoduls mochte ich im Folgenden noch naher erlautern. ficate hCerti SQL2Algebra AlgebraTreeComponent Kunde ResultOperator i Kn nne ot rer en t yWi er Qu Blatt Datenquelle SealedResult Mediator ResultExtractor Re sul tExt ractor ResultProxy JARDatei Abbildung 15: Ablaufschema fur das Mediatormodul 8.2.1 Aufbau des Algebrabaums Fur den Antwortbaum habe ich das Entwurfsmuster der rekursiven Komposition (recursive composition; vgl. [GHJV95], Seite 36) gewahlt. Alle Knoten im Baum mussen das Interface org.mmm.core.AlgebraTreeComponent implementieren und referenzieren andere Knoten des Baumes nur uber dieses Interface. AlgebraTreeComponent schreibt den implementierenden Klassen die Methode calculateResult() vor; der Ruckgabewert ist ein Result. Diese eindeutige Schnittstelle ermoglicht es den einzelnen Klassen, auf dem Kundenrechner von der Wurzel des Antwortbaums beginnend rekursiv die Gesamtantwort auszurechnen. Abbildung 16 zeigt die Komponenten, die im Baum auftauchen. Ein Knoten des Baums kann ein Operator vom Typ org.mmm.core.ResultOperator oder eine Teilantwort-Referenz vom Typ org.mmm.core.ResultProxy sein, die ich in den folgenden beiden Abschnitten vorstellen werde. In der Abbildung sieht man auch, dass ein Objekt der Klasse ResultExtractor eine Referenz auf genau ein Objekt vom Typ AlgebraTreeComponent hat; das ist die Wurzel des Algebrabaumes. Operatoren haben mehrere Referenzen auf weitere Baumkomponenten; das sind die Kinder des Operators im Algebrabaum. 72 8 Umsetzung des Multimediamediators mit mobilem Code Abbildung 16: Rekursive Komposition fur den Algebrabaum 8.2.2 Teilanfragen In der derzeitigen Version der SQL2Algebra-Bibliothek sind die Teilanfragen alle von der Form select distinct * from tabellenname\, da die Gesamtanfrage vollstandig in atomare Aus"dr ucke zerlegt wird. Als Teilantwort zu einer solchen Teilanfrage liefert die Datenquelle immer die ganze Tabelle an den Mediator zuruck. Der Mediator sendet mit dem Antwortbaum alle Teilantworten weiter an den Kunden. Von einer Teilantwort werden aber eventuell nur wenige Spalten und Zeilen in der Gesamtantwort benotigt, denn durch Projektionen und Selektionen werden viele Eintrage dieser Tabelle hinterher wieder verworfen. In meinem Programm setze ich die in Abschnitt 5.1 (Seite 28) erwahnten Optimierungen aber nicht ein; die Datenquelle liefert immer eine vollstandige Tabelle als Teilantwort zuruck. Die Teilantwort bekommt der Mediator als org.mmm.core.SealedResult. Diese Teilantwort wird nicht direkt als Blatt in den Antwortbaum eingesetzt sondern in eine Teilantwortentabelle (eine java.util.Hashtable) eingetragen, in der alle verschlusselten Teilantworten des mobilen Codes gespeichert werden. Als Blatt wird ein org.mmm.mediator.ResultProxy, der auf den Eintrag in der Teilantwortentabelle verweist, erzeugt und in den Algebrabaum eingehangt. Dieser ResultProxy ermoglicht es, auf dem Kundenrechner die verschlusselte durch die entschlusselte Teilantwort zu ersetzen, ohne in den Elternknoten der Blatter die Referenz auf die verschlusselte Teilantwort durch eine neue Referenz auf die entschlusselte Teilantwort ersetzen zu mussen. Es wird spater auf dem Kundenrechner das SealedResult entschlusselt und das daraus entstehende Result an dieselbe Stelle in der Teilantwortentabelle eingetragen. ResultProxy implementiert das Interface AlgebraTreeComponent. Seine calculateResult-Methode sucht den entsprechenden unverschlusselten Eintrag aus der Teilantwortentabelle heraus und gibt ihn zuruck. Es braucht dazu eine Referenz auf die Teilantwortentabelle. Die erhalt es von dem ResultExtractor, in dem es enthalten ist; deswegen braucht ein ResultProxy-Objekt auch immer eine Referenz auf den entsprechenden ResultExtractor, wie es in Abbildung 16 zu sehen ist. 73 8.2 Mediatormodul 8.2.3 Operatoren Das Kundenmodul arbeitet nur mit der abstrakten Klasse org.mmm.core.ResultOperator. Hier stelle ich die Operatoren fur das Format org.mmm.arrayformat.ArrayResult vor, die im Paket org.mmm.arrayoperators deniert sind. Abbildung 17: Relationale Operatoren Wie in Abschnitt 3 erwahnt, habe ich zunachst die Operatorenklassen ArrayResultSelection, ArrayResultProjection, ArrayResultUnion, ArrayResultDifference, ArrayResultCrossproduct und ArrayResultRenaming 74 8 Umsetzung des Multimediamediators mit mobilem Code implementiert. Da ResultOperator das Interface AlgebraTreeComponent implementiert, mussen alle Operatoren die Methode calculateResult() implementieren. Alle Operatoren rufen zunachst diese Berechnungsmethode auf ihren Kindern (beziehungsweise ihrem Kind { denn der Umbenennungs-, der Selektions- und der Projektionsoperator sind unar und haben nur ein Kind) auf und wenden danach auf die zuruckgegebenen Result-Objekte ihren Algorithmus an. Der Selektionsoperator ArrayResultSelection ist etwas komplexer als die anderen Operatoren: ihm muss zusatzlich ein Selektionspradikat ubergeben werden. Innerhalb des Selektionspradikats lasse ich nur die arithmetischen Vergleichsoperatoren (=, , , , und 6=) zu. Die logischen Operatoren (_, ^ und :) konnen durch eine weitere Ebene im Antwortbaum dargestellt werden; ^ beispielweise durch Mengendierenz. Da die von Jan-Hendrik Lochner verwendete Algebra allerdings nur die Vergleichsoperatoren = und 6= enthalt, konnen nur diese in einer Anfrage verwendet werden. Von meiner Seite aus sind alle obengenannten arithmetischen Vergleichsoperatoren fur die Selektion moglich und konnen bei einer Erweiterung der Algebra benutzt werden. Abbildung 18: Vergleichsoperatoren fur die Selektion 75 8.2 Mediatormodul Die arithmetischen Vergleichsoperatoren werden jeweils durch eine eigene Unterklasse des Interface org.mmm.selectioncomparators.SelectionComparator dargestellt. Alle vorhandenen Vergleichsoperatoren sind in Abbildung 18 abgebildet. Einem Selektionsoperator wird bei der Instanziierung ein SelectionComparator ubergeben. Mit ihm wird dann bei der Auswertung der Selektion auf der Kindrelation entschieden, welche Zeilen in das Selektionsergebnis ubernommen werden. Dabei kann ein Vergleichsoperator in einem von drei Modi laufen: Zahlenvergleich, Zeichenkettenvergleich oder Attributvergleich. Zahlenvergleich und Zeichenkettenvergleich sind Vergleiche mit einem konstanten Wert (also entweder einer Zahl oder einer Zeichenkette). Der Selektionsoperator erhalt bei der Instanziierung den Namen des Attributs, auf dem der Vergleich ausgefuhrt werden soll. Die Modi Zahlenvergleich und Zeichenkettenvergleich werden beim Setzen der Vergleichskonstante mit der Methode setComparisonvalue(Object object, int comparisontype) festgelegt. Bei der Auswertung des Vergleichs ruft der Selektionsoperator fur jede Zeile der Kindrelation die Methode check(Object value1) des Vergleichsoperators auf, der er den Wert des Attributs in der aktuellen Zeile ubergibt. Die Methode vergleicht den eingegebenen Wert mit der Konstante und gibt als boolschen Wert zuruck, ob der Vergleich erfolgreich war oder nicht. Beispiel fur eine Selektion mit einem Zahlenvergleich ist: "select distinct * from COFFEES tv1 where tv1.PRICE!=7.99;" oder als algebraische Formel: PRICE6=7:99 (COFFEES). Die in diesem und den folgenden Beispielen verwendeten Tabellen sind in Anhang F aus Seite 120 zu nden. Diese Anfrage soll alle Kaees in der Relation COFFEES zuruckliefern, die nicht 7,99 kosten. Hierfur wird ein Objekt der Klasse NotEqualComparator erstellt und die Vergleichskonstante "7.99\ und der Modus Zahlenvergleich gesetzt. Ein Vergleichsoperator im Modus Attributvergleich vergleicht zwei variable Werte miteinander. Dem Selektionsoperator werden bei der Instanziierung die Namen der beiden Attribute ubergeben, deren Werte fur jede Zeile der Relation verglichen werden sollen. Der Selektionsoperator wertet das Selektionspradikat dann mit der Methode check(Object value1, Object value2) aus. Die beiden Eingabewerte sind die Werte der Vergleichsattribute in der aktuellen Zeile. Diese Methode gibt ebenfalls einen boolschen Wert zuruck, der angibt, ob die beiden Eingabewerte das Pradikat erfullen oder nicht. Zum Beispiel wird fur die Selektion "select distinct * from COFFEES tv1 where tv1.SUPPLIER_ID = tv1.VENDOR_ID;" beziehungsweise SUPPLIER ID=VENDOR ID (COFFEES), die alle Kaees der Relation COFFEES ausgibt, die von Direkthandlern vertrieben werden, ein Objekt der Klasse EqualComparator erstellt, dem bei der Instanziierung gleich die Namen der Vergleichsattribute "SUPPLIER_ID\ und "VENDOR_ID\ ubergeben werden. In der Anfrageubersetzung mit der SQL2Algebra-Bibliothek kamen zunachst nur die Operatoren Select, Project, Union, Join beziehungweise Join gefolgt von einem Complement vor. Um eine Ebene im Baum zu sparen, habe ich zusatzlich zu den anfangs genannten die Operatorklasse ArrayResultJoin implementiert, anstatt den naturlichen Verbund aus den Basisoperatoren Kreuzprodukt, Selektion und Projektion zusammenzusetzen. Bei einer Erweiterung der SQL2Algebra-Bibliothek um weitere Operatoren konnen auch meine zusatzlichen Operatoren zum Einsatz kommen. Fur den Komplementoperator ergab sich das Problem, dass auf einer realen Tabelle, die Attribute mit einem unendlichen oder sehr groen Wertebereich hat (wie zum Beispiel Daten oder Zahlen), ein Komplement nicht umsetzbar ist. Es wurde sich eine unendliche oder sehr groe Tabelle ergeben. Ein Komplement muss daher immer in Zusammenhang mit dem ubergeordneten Operator betrachtet und der Operator und das Komplement zusammen ausgefuhrt werden. 76 8 Umsetzung des Multimediamediators mit mobilem Code Fur den Fall des Join gefolgt von einem Complement wurden diese beiden Operatoren in der SQL2Algebra-Bibliothek zu einem neuen binaren Operator JoinComplement verschmolzen. Dieser Operator negiert die zweite Kindrelation bei der Auswertung des naturlichen Verbunds mit der ersten Kindrelation. Der neue Operator JoinComplement kommt in Anfragen vor, in denen eine "NOT-EXISTS\-Klausel auftritt, also beispielsweise "select distinct tv1.COF_NAME, tv1.PRICE from COFFEES tv1 where not exists(select distinct * from COFFEESTASTE tv2 where TASTE= 'sweet' and tv1.COF_NAME = tv2.COF_NAME);". In dieser Anfrage werden Name und Preis aller Kaees herausgesucht, deren Geschmack nicht su ist. Der Geschmack ist in einer zweiten Relation namens COFFEESTASTE deniert. Fur JoinComplement wurde kein neues Operator-Objekt im Paket org.mmm.arrayoperators angelegt. Stattdessen wurde der bestehenden Klasse ArrayResultJoin ein Konstruktor hinzugefugt, dem mit einem boolschen Wert ubergeben werden kann, ob auf der zweiten Relation ein Komplement ausgefuhrt werden soll. In spateren Versionen der SQL2Algebra-Bibliothek sollte die U bersetzung von Anfragen, in denen "NOT-EXISTS\-Klauseln oder "EXISTS\-Klauseln auftreten, nochmal uberarbeitet werden, da ihre Auswertung zur Zeit nicht der SQL-Semantik entspricht, wenn mehrere gemeinsame Attribute in den Tabellen vorhanden sind oder in der Anfrage keine Vergleichsattribute angegeben werden (wie etwa tv1.COF_NAME = tv2.COF_NAME). Derzeit wird auch noch ein Komma zwischen zwei Relationennamen in einen Verbund und nicht { wie es der SQL-Semantik entspricht { in ein Kreuzprodukt umgewandelt. Die Laufzeiten der Operatoren im ungunstigsten Fall sind in Tabelle 7 aufgelistet. Die Laufzeiten sind bezuglich der Zeilenanzahl (durch jj jj gekennzeichnet) der bearbeiteten Tabellen angegeben. Die Operatoren lieen sich eventuell noch optimieren; insbesondere konnten andere Datenformate implementiert werden, deren Operatoren kurzere Laufzeiten haben. Der Projektions-Operator ArrayResultProjection hat die Laufzeit O(jjrjj logjjrjj). Der Faktor logjjrjj tritt durch die Beseitigung von mehrfach vorhandenen Tupeln auf. Eine Laufzeit von logjjrjj fur das Entdecken der Duplikate ist sichergestellt durch die Verwendung der Klasse java.util.TreeSet. Wahrend die Ergebnisrelation der Projektion aufgebaut wird, werden die Tupel der Ergebnisrelation in einem Objekt dieser Mengen-Klasse zwischengespeichert; Duplikate werden dabei nicht aufgenommen. Die Klasse TreeSet hat eine garantierte logarithmische Laufzeit fur alle Operationen auf der Menge. Klasse ArrayResultSelection ArrayResultProjection ArrayResultUnion ArrayResultDifference ArrayResultCrossproduct ArrayResultRenaming ArrayResultJoin Operator Laufzeit (R ) O(jjRjj) (R ) O(jjRjj logjjRjj) R[S O(jjRjj + jjS jj) R S O(jjRjj jjS jj) RS O(jjRjj jjS jj) (R) O(1) Ro nS O(jjRjj jjS jj) Tabelle 7: Laufzeiten der Operatoren 8.2.4 Signierung und Verschlusselung des mobilen Codes Der Multimediamediator muss die Integritat und Geheimhaltung des mobilen Codes auf dem U bertragungsweg zum Kunden gewahrleisten. Um das sicherzustellen, verschlusselt das Mediatormodul mit dem oentlichen Schlussel des Kunden den fertigen mobilen Code zu einem org.mmm.core.SealedResultExtractor. Er verwendet dazu das hybride Verfahren wie schon 8.2 Mediatormodul 77 die Datenquellen bei den Teilantworten. Im SealedResultExtractor sind der verschlusselte Sitzungsschlussel als byte[] und eine Menge verschlusselter Binarcodes sowie der verschlusselte Antwortbaum (der ResultExtractor) innerhalb eines SealedObject enthalten. Der Mediator signiert schlielich dieses Objekt mit einem seiner privaten Signierschlussel und erhalt ein java.security.SignedObject. Abbildung 19: Benutzungsschnittstelle des Mediatormoduls (Algorithmenauswahl) U ber die Benutzungsschnittstelle lassen sich der Signierschlussel des Mediators, der Signieralgorithmus und der symmetrische Verschlusselungsalgorithmus einstellen. Wie in Abbildung 19 zu sehen ist, wahlt der oder die Administrator(in) des Mediators aus einem Schlusselspeicher einen privaten Signierschlussel aus. Die Eingabe des Passworts zum Signierschlussel ist notwendig, da er sonst nicht geladen werden kann. Es wird auerdem der Signieralgorithmus angegeben; der Signieralgorithmus muss zum Schlussel passen { ein RSA-Schlussel sollte etwa zusammen mit einem RSA-Signieralgorithmus verwendet werden. Freie Wahl hat man nur beim Prufsummenalgorithmus, der bei der Signierung verwendet werden soll { beispielsweise MD5 oder SHA1. Der Schlusseltyp und der Prufsummenalgorithmus ergeben zusammen den Signieralgorithmus; beispielsweise MD5/RSA, wie es in Abbildung 19 angegeben ist. Die Signierung selbst wird mit der Klasse java.security.Signature (siehe Abschnitt 7.7 auf Seite 63) durchgefuhrt. Eine Instanz dieser Klasse wird mit dem gewahlten Algorithmus initalisiert und an den Konstruktor des SignedObjects ubergeben. Der symmetrische Verschlusselungsalgorithums und die Schlussellange fur den neu zu erzeugenden Sitzungsschlussel konnen unter der Voraussetzung frei gewahlt werden, dass der Sitzungsschlussel kurz genug ist, um mit dem asymmetrischen Schlussel verschlusselt zu werden. Die Algorithmen fur Signierung und Verschlusselung mussen fur das Mediatormodul uber einen Kryptographie-Anbieter verfugbar sein. Das SignedObject und die SealedObjects im verschlusselten mobilen Code enthalten Informationen uber die verwendeten Algorithmen. Deshalb kann auf Kundenseite der entsprechende Verizierungsalgorithmus fur die Signatur und der Entschlusselungsalgoritmus fur den mobilen Code aufgerufen werden. Voraussetzung ist dabei, dass das Kundenmodul Zugri einen entsprechenden Kryptographie-Anbieter hat. Die RMI-Methode, die der Kunde beim Mediator aufruft, um eine verschlusselte und signierte Antwort zu erhalten, ist requestSealedAndSigned(). Der Kunde muss den oentlichen Schlussel der Mediators bereits auf sicherem Weg erhalten haben, damit er die Signatur prufen kann. Er kann sich beispielsweise von der Webseite des Mediators ein Zertikat herunterladen, das diesen Schlussel enthalt. Das Zertikat kann er 78 8 Umsetzung des Multimediamediators mit mobilem Code dann in einen seiner Schlusselspeicher importieren. Die Erklarung, wie er dazu vorgehen muss, folgt im Abschnitt 8.3.2 (Seite 82). 8.3 Kundenmodul Das Kundemodul sendet RMI-Anfragen an einen Multimediamediator. Es stellt aber selbst keine RMI-Methoden zu Verfugung. Daher muss auf dem Kundenrechner keine RMI-Registratur laufen. Wenn das Kundenmodul gestartet wird, erscheint ein Eingabefenster wie es in Abbildung 20 dargestellt ist. Der oder die Benutzer(in) wahlt zuerst im Eingabefenster eine Datei aus, die einen Schlusselspeicher enthalt; dazu gibt er oder sie auch das Passwort an. Da- Abbildung 20: Benutzungsschnittstelle des Kundenmoduls vor der Anfrage Abbildung 21: Benutzungsschnittstelle des Kundenmoduls nach Ausfuhrung des mobilen Codes 8.3 Kundenmodul 79 nach werden in einer Ausklappliste die Aliasse aller Schlussel aufgelistet, die in dem gewahlten Schlusselspeicher enthalten sind. Wenn der/die Benutzer(in) einen Alias ausgewahlt hat, gibt er/sie auch dazu das Passwort ein. Ich verlange fur den Schlusselspeicher auf jeden Fall die Eingabe des Passworts, um dessen Integritat zu uberprufen. Fur den Alias (also im Grunde den dahinterliegenden privaten Schlussel) verlange ich ebenfalls das Passwort; hier fallt es also schon vor dem Start der Anfrage auf, wenn das Kundenmodul die Antwort uberhaupt nicht entschlusseln kann, da der oder die Benutzer(in) keinen Zugri auf den privaten Schlussel hat. Der Mediator, an den eine Anfrage gestellt werden soll, wird ausgewahlt, indem man seinen Rechnernamen oder seine IP-Adresse eingibt. Zu dem Mediator kann der oder die Benutzer(in) aus einem Schlusselspeicher ein Zertikat auswahlen, das den oentlichen Schlussel des Mediators enthalt. Diese Schlussel wird zur Signaturprufung verwendet. Bleibt das Auswahlfeld leer, wird keine Signaturprufung durchgefuhrt, aber es wird eine Warnung angezeigt, die darauf hinweist, dass die Authentizitat und Integritat der Antwort nicht uberpruft werden kann. Die Anfrage selbst wird in das Suchfeld eingetragen und mit einem Klick auf den Suchknopf wird die Suche gestartet. Wenn die Antwort des Mediators angekommen ist, wird dem/der Benutzer(in) ein Abfragefenster angezeigt, in dem ausgewahlt werden kann, ob der Code sofort ausgefuhrt und danach geloscht, ausgefuhrt und gespeichert, nur gespeichert oder verworfen werden soll. Entscheidet er/sie sich fur das Ausfuhren des Codes, berechnet das Kundemodul die Gesamtantwort, die anschlieend in der Ergebnistabelle der Benutzungschnittstelle angezeigt wird, wie in Abbildung 21 zu sehen ist. Fur jede Anfrage wird ein org.mmm.client.SQLRequestor erzeugt. Der SQLRequestor ist die Anwendungsklasse auf Kundenseite, die die notigen Einstellungen vornimmt, um den mobilen Code entschlusseln und ausfuhren zu konnen. Zu den Aufgaben des SQLRequestor gehoren: das Erstellen des Arbeitsverzeichnisses des mobilen Codes: Er erstellt fur jede Anfrage ein Verzeichnis (ein Unterverzeichnis des Verzeichnisses repository im Startverzeichnis des Kundenmoduls), das dem mobilen Code als Arbeitsverzeichnis dient. Dabei wird mit der Methode java.io.File.createTempFile() ein eindeutiger Verzeichnisname generiert. das Laden der Schlussel in die Ausklappliste: Er ladt zunachst den ausgewahlten Schlusselspeicher und erhalt mit der Methode KeyStore.aliases() die Aliasse aller Eintrage. In die Ausklappliste werden nur die Aliasse eingefugt, die zu einem Schlusseleintrag gehoren. das Erstellen der Anfrage: Da bisher noch keine Eigenschaftsnachweise bestehen, benutze ich in meinem Programm Zertikate, die keine weiteren Angaben uber Eigenschaften enthalten. Der Java-Schlusselspeicher erstellt bei der Generierung eines RSASchlusselpaars ein X.509-Zertikat fur den oentlichen Schlussel. Der SQLRequestor ladt zu dem ausgewahlten Alias das Zertikat des oentlichen Schlussels aus dem Schlusselspeicher. Handelt es sich dabei nicht um einen RSA-Schlussel, wird eine Fehlermeldung geworfen. Aus dem Zertikat und dem eingegebenen Anfragetext erzeugt er ein org.mmm.core.QueryWithCertificate. das Erstellen des Entschlusselungsobjekts: Er erstellt einen org.mmm.client.Unsealer, der die Entschlusselungsinformationen zwischenspeichert; das sind der Dateiname des Schlusselspeichers, das Passwort des Schlusselspeichers, der Alias und das zugehorige Passwort. das Senden der Anfrage: Mit dem zuvor erstellten QueryWithCertificate als Parameter wird die oentliche RMI-Methode requestSealedAndSigned() des Mediators aufgerufen. Als Ruckgabewert erhalt der SQLRequestor den mobilen Code als SignedObject, das mit dem privaten Schlussel des Mediators signiert wurde. das Prufen der Signatur (wenn ein Prufschlussel ausgewahlt wurde): Er pruft die Signatur mit dem ausgewahlten Schlussel des Mediators. Aus dem SignedObject wird der mobile 80 8 Umsetzung des Multimediamediators mit mobilem Code Code in Form eines SealedResultExtractors extrahiert, der mit dem in der Anfrage angegebenen oentlichen Schlussel des Kunden verschlusselt wurden. Wenn die Signatur als nicht korrekt erkannt wurde, wird eine Warnmeldung angezeigt und der Benutzer kann entscheiden, ob er den Code trotzdem entschlusseln und ausfuhren mochte. je nach Auswahl das Entschlusseln des mobilen Codes und das Speichern des Binarcodes: Wenn der Code ausgefuhrt werden soll, wird die Ausfuhrung des mobilen Codes damit vorbereitet, dass der SQLRequestor das Entschlusselungsobjekt beauftragt, den mobilen Code zu entschlusseln. Dabei erhalt es den Antwortbaum als ResultExtractor und den Binarcode als eine Menge von Byte-Feldern (byte[]). Die Byte-Felder werden als JavaArchive in das Arbeitsverzeichnis des mobilen Codes gespeichert. Dann holt sich der SQLRequestor vom ResultExtractor eine Referenz auf die Teilantwortentabelle, die die verschlusselten Teilantworten des mobilen Codes verwaltet. Mit dem Entschlusselungsobjekt entschlusselt der SQLRequestor alle Teilantworten. Im Abschnitt 8.3.3 gehe ich auf weitere Einzelheiten des Entschlusselungsverfahrens ein. je nach Auswahl das Hinzufugen der Binardateien in den Suchpfad: Vor der eigentlichen Ausfuhrung fugt das Kundenmodul des Codes die Namen der zum Code gehorende JARDateien zum Klassenlader-Suchpfad hinzu, damit der Binarcode der im Baum enthaltenen Operatoren gefunden und geladen werden kann. Details zum Laden des mobilen Codes nden sich im Abschnitt 8.3.1. je nach Auswahl das Berechnen des Antwortbaumes: Der SQLRequestor stot den mobilen Code an, die Gesamtantwort zu berechnen. Dazu ruft beginnend bei der Wurzel jeder innere Knoten im Baum rekursiv die Berechnungsmethode calculateResult() seiner Kinder auf und fuhrt, wenn er deren Ergebnisse erhalten hat, den algebraischen Operator, den er reprasentiert, auf diesen Ergebnissen aus. Wenn ein Blatt im Baum erreicht wird, sucht der dort bendliche ResultProxy aus der Teilantwortentabelle die zu ihm gehorende entschlusselte Teilantwort heraus und gibt sie zuruck. je nach Auswahl das Loschen des Binarcodes aus dem Suchpfad: Nachdem die Gesamtantwort berechnet wurde, werden die Klassendateien des mobilen Codes nicht mehr benotigt. Damit spater ausgefuhrte mobile Codes nicht auf die falschen Klassendateien zugreifen und auch damit der Suchpfad nicht zu lang wird, entfernt der SQLRequestor die Namen der JAR-Dateien wieder aus dem Klassenlader-Suchpfad. Da die Klassendateien eines mobilen Codes potenziell gefahrlich fur den Kundenrechner sind, ist es zudem sinnvoll, den Zugri auf diese Dateien zeitlich nur auf die Ausfuhrung des Codes zu beschranken. Auf das genaue Vorgehen gehe ich im folgenden Abschnitt 8.3.1 noch ein. je nach Auswahl das Speichern des Antwortbaumes im Arbeitsverzeichnis: Wenn der mobile Code gespeichert werden soll, wird der verschlusselte und signierte mobile Code (das SignedObject, das den SealedResultExtractor enthalt) serialisiert und in das Arbeitsverzeichnis gespeichert. Damit spater auch eine Entschlusselung moglich ist, wird zusatzlich das Entschlusselungsobjekt serialisiert und ebenfalls dort gespeichert; allerdings werden vorher die Passworter aus dem Objekt geloscht, damit der Benutzer sie beim erneuten Ausfuhren wieder eingeben muss. je nach Auswahl das Loschen des Arbeitsverzeichnisses: Wenn der mobile Code nicht gespeichert werden soll, wird das gesamte Arbeitsverzeichnis des mobilen Codes nach seiner Ausfuhrung geloscht. Damit wird auch der potenziell gefahrliche Binarcode des mobilen Codes wieder vom Kundenrechner entfernt. In Anhang B auf Seite 116 bendet sich ein Sequenzdiagramm, das die Ablaufe im Kundenmodul darstellt. Michael Englbrecht (vgl. [Eng03], Seite 313-314) beschreibt, dass eine schmale Schnittstelle 8.3 Kundenmodul 81 zwischen Kundenrechner und mobilem Code { idealerweise also mobiler Code mit nur einem Einstiegspunkt { unkontrollierten Informationsuss vermeiden hilft, da der Zugri auf den Code und dessen Ausfuhrung dadurch besser kontrollierbar ist. Im Gegensatz dazu gibt es in meinen mobilen Code drei Einstiegspunkte: die Methoden getJarFiles(), getResultHash() und calculateResult(). Dies liegt daran, dass das Kundenmodul so die sicherheitsrelevanten Operationen "Speichern des Binarcodes\, "Entschlusseln der Teilantworten\ und "Starten der Ausfuhrung\ ubernimmt und sie nicht dem mobilen Code uberlasst. Das bedeutet insbesondere, dass der mobile Code auf dem Kundenrechner keine Berechtigungen benotigt; darauf gehe ich in den Abschnitten 8.3.3 und 9.1 noch naher ein. In den folgenden Abschnitte mochte ich einige Implementierungsdetails des Kundenmoduls herausheben. Im folgenden Abschnitt 9 werden ich dann mogliche Angrie auf das Multimediamediatorsystem diskutieren. 8.3.1 Ersetzen des Systemklassenladers Der Mediator schickt mit einer Antwort dem Kunden auch den Binarcode der Operatoren und Datenformate innerhalb des Antwortbaums zu. Dieser Code muss dem laufenden Kundenmodul zur Verfugung gestellt werden. Wie in Abschnitt 7.3 beschrieben, konnen den bereits gestarteten Standard-Klassenladern keine Binarcodes hinzugefugt werden. Daher musste ich einen eigenen Klassenlader { den org.mmm.start.MMMClientLoader { implementieren, der das dynamische Hinzufugen von Binarcodes ermoglicht. Wie im selben Abschnitt erwahnt, muss ein selbstdenierter Klassenlader von Code, der ihn benutzen will, explizit angesprochen werden. Fur den mobilen Code bedeutet das, dass er anstelle eines Konstruktors (new klassenname ()), der immer den Systemklassenlader benutzt, entweder die Methode MMMCLientLoader.loadClass(klassenname ) oder die Methode Class.forName(klassenname , resolve, mmmClientLoader) aufrufen m usste, um Instanzen von selbstdenierten Klassen zu erzeugen. Programmiererinnen oder Programmierer von mobilem Code durften also nur fur die Java-Standardklassen den new-Operator benutzen und mussten fur Klassen, die allein zum Binarcode des mobilen Codes gehoren, eine der Methoden wahlen. Abgesehen davon, dass dieses Vorgehen die Implementierung des mobilen Codes verkompliziert, will man dem mobilen Code auch keinen direkten Zugri auf den Klassenlader erlauben, da er mit dieser Referenz auch andere Methoden auf diesem Objekt aufrufen konnte. Da die Zugrissteuerung in Java immer paketweise geschieht, wurde die Berechtigung fur den Zugri auf den Klassenlader sogar den Zugri auf andere Klassen im selben Paket beinhalten. Ein zweiter Punkt ist, dass das Kundenmodul beim Entschlusseln und Wiederherstellen des Algebrabaum-Objektes (des ResultExtractors) die Moglichkeit haben muss, auf die innerhalb des Codes benutzten Klassen zuzugreifen, da sie auf dem Kundenrechner dabei neu instanziiert werden. Diese Instanziierung wird aber implizit von den Java-Bibliotheksklassen durchgefuhrt, so dass ich als Programmiererin den dafur benutzten Klassenlader gar nicht bestimmen kann. Es gibt eine einzige Moglichkeit, die Benutzung von Konstruktoren im mobilen Code zuzulassen, den Zugri auf den Klassenlader innerhalb des mobilen Codes zu verhindern und das automatische Instanziieren des Antwortbaums im Kundenmodul zu ermoglichen: mein Klassenlader MMMClientLoader muss Systemklassenlader werden. Dies geschieht, indem man der Java-Systemvariable java.system.class.loader als Wert den Klassennamen des Klassenladers zuweist. Ich tue das beim Starten der virtuellen Maschine in der Kommandozeile: java -cp ./start.jar -Djava.system.class.loader=org.mmm.start.MMMClientLoader org.mmm.start.Starter Der MMMClientLoader ist dann, wie in Abbildung 22 dargestellt, direktes Kind des Erweiterungsklassenladers. Der MMMClientLoader besitzt zwei neue Methoden: eine zum Hinzufugen Dateistandorten zu seinem Suchpfad und eine zum Loschen von Dateistandorten aus seinem Suchpfad. Die 82 8 Umsetzung des Multimediamediators mit mobilem Code Urklassenlader loadClass() Erweiterungsklassenlader loadClass(){ parent.loadClass(); ... } MMMClientLoader loadClass(){ parent.loadClass(); ... } addURLLocation() removeURLLocation() Abbildung 22: MMMClientLoader als Systemklassenlader Klasse, die den mobilen Code auf dem Kundenrechner verwaltet, namlich der SQLRequestor, bekommt mit der Methode ClassLoader.getSystemClassLoader() eine Referenz auf den MMMClientLoader. Auf diesem Objekt ruft der SQLRequestor vor dem Starten des mobilen Codes die Methode zum Hinzufugen von Dateinstandorten auf (addURLLocations(URL[] urls)). Der Eingabeparameter ist ein Feld mit den Dateinamen, unter denen der Binarcode (als Java-Archive) im Arbeitsverzeichnis des mobilen Codes gespeichert wurden. Damit kann der MMMClientLoader zur Laufzeit die im mobilen Code verwendeten Klassen nden und laden. Bei gleichlautenden Klassennamen wird der Klassenlader den Dateistandort zum Laden der Klasse wahlen, der sich zuerst in seinem Suchpfad bendet. Wenn die hinzugefugten Dateinamen der Java-Archive nie aus dem Suchpfad geloscht wurden, wurde eine Klasse eines spateren Codes, die denselben Namen hat wie eine Klasse eines fruheren Codes, nie geladen; der Klassenlader wurde vielmehr immer die zuerst hinzugefugte Klasse laden. Damit ist der spatere mobile Code aber wahrscheinlich nicht mehr ausfuhrbar. Wenn der fruhere mobile Code Angrie auf den Kundenrechner durchfuhren will, die aber beim ersten Ausfuhren des Codes verhindert wurden, kann es damit sogar sein, dass die Angrie beim Ausfuhren eines ganz anderen mobilen Codes Erfolg haben. Ein fruherer und ein spaterer Code konnten sogar ein Komplott bilden: Der erste Code hat in seinem Binarcode eine bosartige Klasse aber greift gar nicht auf sie zu; der zweite Code hat die Klasse nicht in seinem Binarcode, wird aber auf sie zugreifen und den Angri ausfuhren. Auerdem verlangert ein langer Suchpfad die Suche nach einer Klasse, da viel mehr Dateinstandorte gepruft werden mussen, bevor der richtige gefunden wird. Auf jeden Fall ist es also sinnvoll, dass der SQLRequestor mit der Methode removeURLLocations() die Dateinamen des Binarcodes wieder aus dem Suchpfad entfernt, sobald die Gesamtantwort berechnet wurde. 8.3.2 Signaturprufung und Entschlusselung des mobilen Codes Der Benutzer oder die Benutzerin muss wissen, welchen Schlussel der Mediator zu Signierung seiner Antwort verwendet. Sie wollen mit dem oentlichen Gegenstuck prufen, ob der mobile Code wirklich vom ausgewahlten Mediator kommt und bei der U bertragung nicht verandert 8.3 Kundenmodul 83 wurde. Sie mussen ein entsprechendes Zertikat, dass den oentlichen Schlussel fur die Prufung der Signatur enthalt, bereits vor dem Start der Anfrage erhalten haben. Dieses Zertikat muss dann in einen Schlusselspeicher importiert werden. Dazu benutzt man das KommandozeilenProgramm keytool. Der Import des Zertikats "mediatorrsa.cer\ in den Schlusselspeicher "clientstore\ geschieht beispielsweise mit diesem Aufruf: keytool -keystore clientstore -import -alias mediatorrsa -file mediatorrsa.cer fragt noch einmal nach, ob dem Zertikat vertraut werden soll, bevor der Eintrag erstellt wird. Fur die U berprufung der Signatur in meinem Programm benutze ich wiederum ein SignatureObjekt (siehe Abschnitt 7.7 auf Seite 63). Das Kundenmodul ladt aus dem ausgewahlten Zertikat des Mediators dessen oentlichen Schlussel und ruft dann mit diesem Schlussel und dem Signature-Objekt die verify-Methode des zu pr ufenden SignedObject auf. Der Benutzer muss den Signaturprufungsalgorithmus nicht selbst angeben, da das SignedObject diese Information bereithalt. Wenn die Signatur als nicht gultig erkannt wurde, wird der Benutzer darauf hingewiesen. Es liegt dann in seiner Entscheidung, ob er den Code trotzdem ausfuhren mochte. Da die Signatur hier nur als Mittel zur Integritatssicherung aber nicht als Grundlage fur Sicherheitsuberprufungen eingesetzt wird, ist die grote Gefahr bei einer falschen Signatur darin zu sehen, dass die Daten verfalscht wurden und damit die Antwort nicht glaubwurdig ist. Der SQLRequestor ruft zur Entschlusselung des mobilen Codes eine Methode des Entschlusselungsobjekts Unsealer auf: unsealResultExtractor(). Die Methode benutzt zunachst einen Cipher, der mit dem asymmetrischen Algorithmus "RSA/ECB/OAEPPadding" den Sitzungsschlussel entschlusselt. Danach verwendet sie einen symmetrischen Cipher, der mit dem Algorithmus initialisiert wird, mit dem die Verschlusselung auf Mediatorseite durchgefuhrt wurde. Die Information uber den verwendeten Algorithmus ist, wie bereits erwahnt, im verschlusselten Objekt enthalten. Mit dem Cipher wird dann der Binarcode des mobilen Codes entschlusselt und als eine oder mehrere JAR-Dateien in das Arbeitsverzeichnis des Codes gespeichert. Schlielich wird der Algebrabaum zu einem ResultExtractor entschlusselt und zur weiteren Bearbeitung an den SQLRequestor zuruckgegeben. keytool 8.3.3 Entschlusselung der Teilantworten Mein erster Ansatz zur Entschlusselung der Teilantworten innerhalb des mobilen Codes auf dem Kundenrechner war es, dem mobilen Code eine Referenz auf das Entschlusselungsobjekt Unsealer zu geben. In diesem Fall muss die Verschlusselung nicht vom Kundenmodul in einem extra Methodenaufruf angestoen werden, sondern wird aus dem mobilen Code selbst aufgerufen. Der Unsealer benotigt zum Entschlusseln den privaten Schlussel des Kunden aus dem entsprechenden Schlusselspeicher. Um den Schlussel auszulesen, braucht der Unsealer eine Leseberechtigung auf der Schl usselspeicher-Datei. Wegen der Referenz des mobilen Codes auf den Unsealer musste auch der mobile Code die Leseberechtigung auf der Schlusselspeicher-Datei haben (so wie es das Berechtigungskonzept vorsieht; siehe Abschnitt 7.4 auf Seite 60). Diese sollte er aber nicht bekommen, da er damit potenziell Zugri auf vertrauliche Daten hat; und das selbst wenn der Unsealer keine Passworter oder Aliasnamen an den mobilen Code "verrat\. Wie oben erwahnt, kann ein Angreifer ohne ein Passwort anzugeben Kenntnis von allen Aliassen erlangen, indem er einfach KeyStore.aliases() aufruft. Er kann damit zumindest das Erstellungsdatum eines Schlusseleintrages mit der Methode java.security.KeyStore.getCreationDate(String alias) erfragen; einen Schlussel, der nicht durch ein Passwort geschutzt wurde, kann er sogar komplett auslesen. Dieser Ansatz ist daher nicht praktikabel. Als zweiten Ansatz habe ich uberlegt, die Entschlusselungsoperation des Entschlusselungsobjekts als privilegierten Code zu implementieren. Der mobile Code kann mit einer Referenz 84 8 Umsetzung des Multimediamediators mit mobilem Code auf den Unsealer selbst die Entschlusselung durchfuhren ohne eine Leseberechtigung fur den Schlusselspeicher zu haben, wenn der Unsealer die sicherheitsrelevanten Teile der Entschlusselung in einem doPrivileged-Block ausfuhrt. Der mobile Code erhalt dann weiterhin eine Referenz auf das kundenseitige Entschlusselungsobjekt, aber er braucht keine Leseberechtigung fur den Schlusselspeicher. Wie in Abschnitt 7.6 beschrieben ist der Aufruf der Entschlusselungsmethode vom Kundenmodul nicht mehr zu kontrollieren. Der mobile Code konnte die Methode beliebig oft aufrufen. Das entscheidende Argument gegen die beiden oben vorgestellten Ansatze ist meiner Meinung nach jedoch, dass der mobile Code in beiden Fallen eine Referenz auf ein Kundenmodul-Objekt erhalt. Das fuhrt dazu, dass das Kundenmodul fur den mobilen Code sichtbar und zugreifbar gemacht wird, so dass er dort Methoden aufrufen kann. Es muss dann sichergestellt werden, dass nicht ungewollt Informationen aus Kundenmodul-Objekten zu Objekten des mobilen Codes ieen. Ich habe mich gegen die Ansatze mit Referenzen auf Kundenmodul-Objekte entschieden, so dass der mobile Code keine unsichtbaren und unkontrollierbaren Methodenaufrufe auf Kundenmodul-Objekten ausfuhren kann. Ich habe deswegen zwar mehrere Einstiegspunkte in den mobilen Code, aber sie stellen eine klare oentliche Schnittstelle dar, die vom Kundenmodul kontrolliert aufgerufen wird. 85 9 Mogliche Angrie auf das Mediatorsystem Das von mir entwickelte System muss mit den in Abschnitt 6 (ab Seite 34) diskutierten Sicherheitsrisiken, die die Verwendung von mobilem Code mit sich bringt, umgehen konnen. Da nicht alle geschilderten Sicherheitsrisiken durch mobilen Code entstehen, will ich hier nur auf die relevanten Punkte eingehen. Fur die Angrie des Mediators auf den Kunden (siehe Abschnitt 6.4 auf Seite 45) gilt beispielsweise, dass das Senden einer langen Antwort und das Veruntreuen von Eigenschaftsnachweisen auch in Systemen ohne mobilen Code moglich ist. Da auerdem bei der Implementierung kein beweismitfuhrender Code eingesetzt wurde, kann die Korrektheit der Antwort des Mediators nicht mit der Methode, die in Abschnitt 6.4.2 beschrieben wurde, sichergestellt werden. Im nachsten Abschnitt beschreibe ich, welche Angrie auf das Kundenmodul durchgefuhrt werden konnen. Danach gehe ich auf Angrie auf den Code wahrend der U bertragung und auf dem Kundenrechner ein. 9.1 Angrie des mobilen Codes auf den Kunden In der Implementierung des Kundenmoduls, wie sie Abschnitt 8.3 vorgestellt wurde, benotigt der mobile Code keine Berechtigungen { insbesondere keine, die sich dynamisch andern. Daher eignet sich das Sandkasten-Konzept (siehe Abschnitt 6.2.4, Seite 43) zum Schutz des Kunden vor Angrien des mobilen Codes. Den Sandkasten habe ich mit Java-Berechtigungen (beziehungsweise der Nicht-Vergabe von Berechtigungen an den mobilen Code) umgesetzt. Das mochte ich im Folgenden noch naher erlautern. Beim Starten des Kundenmoduls wird eine Berechtigungsdatei eingelesen, die die zu vergebenden Berechtigungen fur die einzelnen Java-Archive auistet. Da der mobile Code keine Berechtigungen (auch nicht indirekt uber doPrivileged-Aufrufe) bekommt, enthalt die Berechtigungsdatei nur Eintrage fur die Java-Archive start.jar (in dem das Paket org.mmm.start enthalten ist) und bin/client.jar (das die Pakete org.mmm.client, org.mmm.client.view und org.mmm.core bundelt). Diese Pakete bilden das Kundenmodul und sind standig auf dem Kundenrechner vorhanden. Von ihnen wird kein Angri auf den Kundenrechner erwartet. Sie erhalten mittels des in Abbildung 23 abgebildeten Auszugs aus der Berechtigungsdatei allerdings auch nur das Minimum an Berechtigungen, das sie fur die Ausfuhrung des Kundenmoduls benotigen. Das Paket org.mmm.start enthalt zum Einen die Klasse Starter, die grundlegende, sicherheitsrelevante Einstellungen vornimmt: Sie legt die Paketzugrisuberprufung fest und dazu bekommt das Java-Archiv start.jar die Berechtigungen zum Lesen und Setzen der Systemvariablen package.access. Auerdem fugt sie den BouncyCastleProvider (siehe [BCP]) als Kryptographie-Anbieter hinzu und deswegen bekommt das Java-Archiv start.jar die Berechtigungen zum Lesen und Setzen der Systemvariablen security.provider. Das Paket enthalt zum Anderen den Klassenlader MMMClientLoader. Da der MMMClientLoader Systemklassenlader ist und beim Start der virtuellen Maschine geladen wird, benotigt das Java-Archiv start.jar die Berechtigung zum Erstellen eines Klassenladers. Der Suchpfad des Klassenladers wird mit dem Dateistandort bin/client.jar initialisiert. Um Klassen aus diesem JavaArchiv laden zu konnen, bekommt das Java-Archiv start.jar die Berechtigung zum Lesen dieses Dateistandorts. Zur Laufzeit ladt der MMMClientLoader Klassen aus den Binarcodes der mobilen Codes und muss daher lesend auf die Arbeitsverzeichnisse der mobilen Codes (als Unterverzeichnisse des Verzeichnisses repository) zugreifen konnen. Andere Berechtigungen zum Lesen von Dateien sieht dieser Eintrag fur das Java-Archiv start.jar aber nicht vor. Der zweite Eintrag der Berechtigungsdatei ist fur das Archiv client.jar zustandig. Die Klassen innerhalb diese Archivs durfen auf alle Dateien innerhalb des Verzeichnisses keystores 86 9 Mogliche Angrie auf das Mediatorsystem grant codeBase "file:start.jar" { ... permission java.io.FilePermission "bin/client.jar","read"; permission java.io.FilePermission "repository/-","read"; permission java.lang.RuntimePermission "createClassLoader"; permission java.security.SecurityPermission "getProperty.security.provider.*"; permission java.security.SecurityPermission "setProperty.security.provider.*"; permission java.security.SecurityPermission "getProperty.package.access"; permission java.security.SecurityPermission "setProperty.package.access"; ... }; grant codeBase "file:bin/client.jar" { ... permission java.io.FilePermission "keystores/-","read"; permission java.io.FilePermission "repository/-","read, write, delete"; permission java.lang.RuntimePermission "exitVM"; permission java.lang.RuntimePermission "getClassLoader"; permission java.net.SocketPermission "*","connect,resolve"; ... }; Abbildung 23: Auszug aus der Berechtigungsdatei des Kundenmoduls lesend zugreifen. Hier sollen sich alle Schlusselspeicher des Kunden benden und das Paket org.mmm.client braucht diese Leseberechtigung, um einen Schl usselspeicher laden und Schlussel und Zertikate auslesen zu konnen. Eine Klasse des Pakets org.mmm.client speichert die Binarcodes der mobilen Codes in das Arbeitsverzeichnis und loscht sie von dort auch wieder. Daher wird dem Archiv client.jar die Schreib- und Loschberechtigung fur Unterverzeichnisse des Verzeichnisses repository zugewiesen. Das Archiv bekommt auch Lesezugri auf diese Arbeitsverzeichnisse der mobilen Codes. Daran sieht man, dass in einer Aufrufkette die aufrufenden Klassen ebenfalls die Berechtigungen benotigen, die die aufgerufenen Klassen brauchen. Denn das Archiv client.jar ruft die die Methode des Klassenladers (der sich in start.jar bendet) zum Hinzufugen von Dateistandorten in den Suchpfad auf. Bei der Ausfuhrung diese Methode wird schon Leseberechtigung auf diesen Dateistandorten uberpruft. Da diese Anweisung sich in einer Aufrufkette bendet, die von einer Klasse aus client.jar angestoen wurde, muss auch client.jar die Leseberechtigung zugewiesen werden. Das Paket org.mmm.client benotigt auch eine Berechtigung fur den Zugri auf den Klassenlader, um eine Referenz auf den Klassenlader zu erhalten und die Hinzufuge- und Loschmethoden von Dateistandorten uberhaupt aufrufen zu konnen. Fur den Aufbau einer Verbindung zu einem Mediatorrechner bekommt das Archiv client.jar auch die entsprechende Berechtigung java.net.SocketPermission. Und da beim Schlieen des Eingabefenster auch der Java-Prozess beendet werden soll, weist der Eintrag dem Paket schlielich noch die Berechtigung zum Beenden der virtuellen Maschine zu. Die Pakete org.mmm.core und org.mmm.client habe ich deswegen im Archiv client.jar zusammengefasst, da Klassen aus core nur von Klassen aus client aufgerufen werden und sich damit immer innerhalb einer Aufrufkette benden, die von einer Klasse aus client initiiert wurde. Die Berechtigungen, die dem Paket core zugewiesen werden, sind daher in jedem Fall eine Teilmenge der Berechtigungen, die dem Paket client zugewiesen werden, und ich habe die Zuweisungen zu einem Eintrag in der Sicherheitsregel zusammengefasst. Das Paket org.mmm.start hingegen hat viele Berechtigungen, die nur beim Starten des Programms eine Rolle spielen und die die anderen Pakete nicht benotigen. Daher ist es in einem eigenen Java- 87 9.1 Angrie des mobilen Codes auf den Kunden Archiv enthalten. Leider lassen sich durch die Nichtvergabe von Privilegien an Code nicht alle Angrie verhindern. Im Paket org.mmm.attacks sind Klassen enthalten, die versuchen, Angrie auf den Kundenrechner durchzufuhren. Ob die in Abschnitt 6.2 aufgefuhrten Schutzziele mit JavaMechanismen einzuhalten sind, oder ob die Angrie der Angrisklassen Erfolg haben, mochte ich in den folgenden Abschnitten untersuchen. Die Aufteilung auf die einzelnen Schutzziele sieht wie folgt aus: Die Integritat von Daten und Programmen wird in den Abschnitten 9.1.4 und 9.1.5 und die Vertraulichkeit von Daten in den Abschnitten 9.1.7 und 9.1.3 behandelt. Die Abschnitte 9.1.1 und 9.1.7 betrachten Angrie auf die Verfugbarkeit des Kundenrechners. Mit dem Komplott zweier mobiler Codes befasst sich Abschnitt 9.1.8 und die Abschnitte 9.1.2 und 9.1.6 gehen auf das Auftreten des mobilen Codes unter falscher Identitat ein. Abschnitt 9.1.3 beschaftigt sich mit dem moglichen Nachladen von Code. Tabelle 8 gibt noch einmal eine U bersicht uber die moglichen Angrie. Angri auf Integritat in Form von Programm- und Datenkorruption Vertraulichkeit Spionage Verfugbarkeit Ressourcendiebstahl alle obigen alle obigen alle obigen Beispiel Zugri auf den Klassenlader und Kundenmodulklassen; Zugri auf das Dateisystem Zugri auf das Dateisystem und andere Ressourcen Zugri auf Java-Standardklassen; Zugri auf den Prozessor und den Arbeitsspeicher Komplott mehrerer Kommunikation zweier mobiler Codes uber das Codes Einzelganger-Muster Auftreten unter Benutzung von nativen Bibliotheken; O nen eines falscher Identitat Eingabefensters Nachladen von Code darf auf die Netzwerkschnittstelle zugreifen schadlichem Code und Daten empfangen Tabelle 8: Javatypische Angrie des mobilen Codes 9.1.1 Angri: Zugri auf Java-Standardklassen Der mobile Code benotigt fur seinen Berechnungen zumindest die Klasse java.lang.Object und einfache Datentypen beziehungweise ihre Hullklassen (engl. wrapper classes), die sich ebenfalls im Paket java.lang benden. Auerdem sollte er Zugri auf grundlegende Datenstrukturen haben, wie sie im Paket java.util vorhanden sind. Allerdings gibt es einige Klassen in der Java-Standardumgebung, auf die der mobile Code keinen Zugri haben sollte. Das Kundenmodul hangt direkt nach dem Start an die Systemvariable package.access die Namen der Pakete, fur die ein Zugri kontrolliert werden soll. Das sind die Pakete java.io, java.security, java.util.logging und java.lang.reflect. Damit werden der Zugri auf das Dateisystem und die Sicherheitsklassen sowie die Benutzung von Kontrollausgaben und Java-Reektion { die den Zugri auf Klassen erlaubt, ohne die Bereichsmodikatoren zu beachten { unterbunden. Eine feinere Zugriskontrolle fur einzelne Klassen ist nicht moglich. Zum Beispiel lasst sich mit diesem Mechanismus nicht der Zugri auf java.lang.Thread verhindern, da das Paket java.lang die grundlegende Java-Klasse Object und weitere Klassen enthalt, die der mobile Code in jedem Fall benotigt. Der mobile Code kann also unkontrolliert viele neue Threads starten. Diese Threads sind vom Kundenmodul nicht mehr zugreifbar, da kein KundenmodulObjekt Referenzen auf diese Threads hat. Daher hat der Angri Erfolg, den meine Angrisklasse org.mmm.attacks.ThreadProducer durchfuhrt: Sie startet in einer Endlosschleife neue Threads, die nur durch das Schlieen des Kundenmodulfensters und damit das Beenden der virtuellen Maschine gestoppt werden konnen. Abgesehen davon, dass die neu erstellten Threads 88 9 Mogliche Angrie auf das Mediatorsystem unerreichbar sind, ist zudem das Stoppen von Threads in einer laufenden virtuellen Maschine ein bisher ungelostes Problem in Java. Der Aufruf der Methode stop() fur einen Thread kann zu einer Blockierung (einem deadlock) der ganzen virtuellen Maschine fuhren. Ein weiteres Beispiel fur die zu grobe Zugriskontrolle von Java sind die Eingabe- und Ausgabestrome (standardmaig Tastatureingaben und Bildschirmausgaben). Die Strome werden von der Klasse System verwaltet, die sich ebenfalls im Standardpaket java.lang bendet. Der mobile Code kann mit dem Aufruf System.in.read() seine Ausfuhrung unterbrechen und auf eine Eingabe des Standardeingabestroms warten. Dadurch wird auch die Benutzungsschnittstelle unbedienbar. Selbst ein Schlieen des Fensters ist nicht mehr moglich und der Benutzer muss den Java-Prozess auf eine andere Weise beenden. Auch beliebige (sogar endlose) Bildschirmausgaben sind dem mobilen Code mit dem Aufruf System.out.println() moglich. Meine Klasse uhrt diese beiden Angrie durch. Verhindert werden konnen diese org.mmm.attacks.InOut f Angrie nur durch eine Erweiterung der Java-Standardklassen. So konnte zum Erstellen von Threads eine neue Berechtigung eingefuhrt werden. Fur einige spezielle Methodenaufrufe auf Java-Standardklassen gibt es besondere Berechtigungen. Beispielsweise kann man die Eingabe-/Ausgabestrome mit den Methoden System.setIn() und System.setOut() umlenken. Dafur benotigen die aufrufenden Klassen jedoch die Berechtigung java.lang.RuntimePermission mit der Aktion setIO. Ebenso braucht man fur die Aufrufe von System.exit oder Runtime.exit zum Beenden der virtuellen Maschine eine RuntimePermission mit der Aktion exitVM. Es sind aber nicht alle Methodenaufrufe so geschutzt. So kann der mobile Code uber die Klasse java.lang.Runtime mit den Aufrufen von totalMemory() und freeMemory() die Groe des gesamten Arbeitsspeicher, der der virtuellen Maschine zugewiesen wurde, sowie des davon noch unbenutzten Speichers abfragen. Die Klasse, die einen solchen Angri durchfuhrt, ist org.mmm.attacks.SystemAccessor. An diesen Beispielen wird deutlich, dass die Java-Zugriskontrolle noch durch eine Vielzahl von Berechtigungen erganzt werden konnte. Da Berechtigungsuberprufungen aber auch immer Einbuen in der Laufzeit nach sich ziehen, sollten aber auch nicht ubermaig viele neue Berechtigungen hinzukommen. Eine Kontrolle uber den Zugri auf Threads und die Eingabe- und Ausgabestrome halte ich aber fur sehr sinnvoll. 9.1.2 Angri: Onen eines Eingabefensters Eine besonders kritische Form des Zugris auf Standardklassen ist die Benutzung von Elementen graphischer Benutzungsschnittstellen. U ber Benutzungsschnittstellen kann der mobilde Code eine Kommunikation mit dem Benutzer herstellen. Beispiels weise kann der mobile Code mit einem Dialogfenster den Benutzer zur erneuten Eingabe seines Schlusselpasswortes auordern. Abgesehen von dem oben erwahnten Warnhinweis (Abschnitt 7.5, Seite 61), kann der Benutzer nicht zwischen den vom Kundenmodul und den vom mobilen Code erzeugten Fenstern unterscheiden. Einen Beispielangri fuhrt die Klasse org.mmm.attacks.GUIOpener durch; sie erzeugt eine javax.swing.JOptionPane. Alle Elemente graphischer Benutzungsschnittstellen benden sind in den Paketen java.awt und javax.swing. Wenn diese Namen der Systemvariable package.access hinzugefugt werden, darf Code nur Klassen aus den Paketen laden, wenn er die Berechtigung dazu hat. Beim einem erneuten Angrisversuch nach dem Setzen der Variablen fuhrt das O nen der JOptionPane zu einer AccessControlException. Wird anstelle der JOptionPane ein org.mmm.attacks.AttackWindow geonet, das von javax.swing.JFrame erbt, fuhrt das zu der gleichen Ausnahme. Daran sieht man, dass auch der Zugri auf Oberklassen uberpruft wird. Durch Beerbung von Standardklassen wird der Kontrollmechanismus also nicht ausgeschaltet. 9.1 Angrie des mobilen Codes auf den Kunden 89 9.1.3 Angri: Onen einer Netzverbindung U ber eine Netzverbindung kann mobiler Code sowohl Daten zu einem anderen Rechner senden, als auch selbst Daten von einem anderen Rechner empfangen. In Abschnitt 7.5, Seite 61 wurde bereits erlautert, dass Code immer eine spezielle Berechtigung braucht, um eine Netzverbindung aufbauen zu konnen. Eine solche Berechtigung erhalt nur das Kundenmodul zum Laden des mobilen Codes aber nicht der mobile Code selbst. 9.1.4 Angri: Zugri auf den Klassenlader Der von mir geschriebene Klassenlader org.mmm.start.MMMClientLoader muss oentlich sein und auch oentliche Konstruktoren besitzen, da er andernfalls von der virtuellen Maschine nicht als Systemklassenlader gestartet werden kann. Er bendet sich im Paket org.mmm.start, da er gleich nach dem Start der virtuellen Maschine zugreifbar sein muss. Auch die Bereichsmodikatoren der beiden Methoden zum Einfugen und Loschen innerhalb des Suchpfades des Klassenladers sind public; die Methoden sind damit oentlich zugreifbar. Das ist notwendig, da die Klasse SQLRequestor, die diese Methoden aufruft, selbst im Paket org.mmm.client ist. Durch diese Konstellation ware ein Zugri auf den Klassenlader von anderen Paketen { also auch vom mobilen Code { aus moglich. Eine Referenz auf den Systemklassenlader kann eine Klasse jederzeit mit Aufruf java.lang.ClassLoader.getSystemClassLoader() bekommen. Ein bosartiger mobiler Code konnte daruber versuchen, Dateistandorte mit schadlichem Code in den Suchpfad einzufugen oder die Dateistandorte anderer Codes daraus zu loschen. Die Java-Standardumgebung sieht den Systemklassenlader jedoch bereits als besonders schutzenswerte Klasse an und lasst nur Objekte mit der entsprechenden Berechtigung darauf zugreifen. Ein Angri der Klasse org.mmm.attacks.ClassLoaderAccessor wird schon beim Versuch, eine Referenz auf den Systemklassenlader zu bekommen, mit einer AccessControlException abgebrochen. 9.1.5 Angri: Zugri auf Kundenmodulklassen Der mobile Code braucht fur seine Berechnungen keine Referenzen auf Klassen, die zum Kundenmodul gehoren. Er kann auch keine Referenzen auf laufende Klassen des Kundenmoduls bekommen, da keine Klasse des Kundenmoduls statische Methoden oder Attribute anbietet. Da das Kundenmodul der Teil des Programms ist, der die Schnittstelle zum Benutzer darstellt und sicherheitsrelevante Operationen ausfuhrt, sollte dem mobilen Code aber schon der Versuch, eine Klasse des Kundenmoduls zu instanziieren, untersagt werden. Wie auch schon bei der Vermeidung des Zugris auf Java-Standardklassen werden der Systemvariablen package.access die beiden Paketnamen org.mmm.client und org.mmm.start hinzugef ugt. Wenn der mobile Code jetzt versucht, eine Klasse aus diesen Paketen zu instanziieren, wird die Ausfuhrung mit einer Ausnahme abgebrochen. Der mobile Code kann in seinem Binarcode Klassen innerhalb der Kundmodulpakete denieren. Damit bendet sich die Angrisklasse im entsprechenden Paket und kann auf nur paketinterne Klassen zugreifen. Um das zu verhindern, versiegele ich die Kundenmodulpakete beim Erstellen der Java-Archive. Der Versuch, eine Klasse, die in einem Kundenmodulpaket deniert ist aber sich nicht innerhalb des Originalarchivs bendet, zu laden, fuhrt zu einer Ausnahme wie in Abschnitt 7.8 (Seite 64) dargestellt. Klassen und Methoden wurden mit dem kleinstmoglichen Bereichsmodikator deniert, damit sie auch innerhalb des Kundenmoduls nicht von allen Klassen zugreifbar sind. Die Entschlusselungsklasse org.mmm.client.Unsealer ist beispielsweise nur paketintern sichtbar. 9.1.6 Angri: Native Methoden Der mobile Code kann bosartigen Programme in Form von Bibliotheken mitfuhren, die in einer anderen Programmiersprache als Java geschrieben wurden; diese Bibliotheken kann er dann 90 9 Mogliche Angrie auf das Mediatorsystem uber das Java Native Interface (siehe Abschnitt 7.9 auf Seite 65) einbinden. Meine Angrisklasse org.mmm.attacks.NativeLoader versucht dies. Eine native Bibliothek durchlauft nicht die Java-Sicherheitsprufungen. Einer nativen Bibliothek kann man nicht einzelne Berechtigungen zuweisen, sondern sie nur vollstandig verbieten oder erlauben. Dem einbindenden Java-Code muss zum Laden von Bibliotheken die java.lang.RuntimePermission(loadLibrary.libname ) zugewiesen werden. Da der mobile Code aber keine Berechtigungen bekommt und damit insbesondere auch keine Laufzeitberechtigung zum Laden von Bibliotheken, wird die Ausfuhrung des mobilen Codes schon bei dem Versuch abgebrochen, die Methode zum Laden nativer Bibliotheken (das ist loadLibrary() in java.lang.System) auszufuhren. 9.1.7 Angri: Zugri auf das Dateisystem und andere Ressourcen Fur jeden Dateizugri benotigt der Javacode eine java.io.FilePermission mit dem Dateistandort als Ziel und eine oder mehrere der Aktionen Lesen, Schreiben, Ausfuhren und Loschen. Der mobile Code hat keine solche Berechtigung und kann daher keine Dateien erstellen, verandern oder loschen. Ein Angri der Klasse org.mmm.attacks.FileReader, die versucht, Dateien einzulesen, hat deswegen keinen Erfolg. Das bedeutet insbesondere, dass mobiler Code die Kongurationsdateien des Kundenmoduls und der Java-Umgebung und die Bibliotheken anderer mobiler Codes nicht verandern kann. Auerdem kann er nicht auf die Schlusselspeicher des Kunden zugreifen. Anders sieht es aus bei den Ressourcen Arbeitsspeicher (der virtuellen Maschine) und Prozessor. Fur sie gibt es keine Einschrankungen. Wie schon bei den Angrien durch endlose Ausgaben auf dem Ausgabestrom beziehungsweise endlose Threaderzeugung geschildert (siehe Abschnitt 9.1.1), gibt es fur das Kundenmodul oder den Kunden in Java keine Moglichkeit, den mobilen Code anzuhalten ohne den Java-Prozess zu beenden. Ein weiteres Beispiel fur Ressourcenbesetzung ist der Angri der Klasse org.mmm.attacks.InfiniteLoop, der in einer Endlosschleife Ausgaben auf die Standardausgabe macht. Deswegen ist es nicht nur zur Verhinderung von Komplotts (siehe Abschnitt 9.1.8) sinnvoll, fur jeden Anfrage einen eigenen Java-Prozess zu starten. Durch diese Abtrennung kann ein endlos rechnender mobiler Code beendet werden, ohne andere mobile Codes in Mitleidenschaft zu ziehen. Eine elegantere Moglichkeit, die Ressourcennutzung einzelner Codes einzuschranken, ware es, nicht nur rein qualitative Berechtigungen zu verwenden, sondern das Java-Berechtigungskonzept um quantitative Berechtigungen zu erweitern und diese auch fur die Arbeitsspeicher- und den Prozessornutzung einzufuhren. 9.1.8 Angri: Komplott mehrerer mobiler Codes Eine Kommunikation von mobilen Codes uber das Dateisystem, wie in Abschnitt 6.1.4 (Seite 37) beschrieben, ermoglicht einen Austausch von Daten zwischen Codes, ohne dass sie zur gleichen Zeit ausgefuhrt werden mussen. Eine solche Kommunikation wird durch die im vorigen Abschnitt 9.1.7 angesprochenen Mittel verhindert. Wenn mobile Codes zur selben Zeit ausgefuhrt werden, mussen andere Mittel ergrien werden, um die Kommunikation zweier Codes zu verhindern. Java bietet zur Zeit keine Moglichkeit, Schutzbereiche, die sich in derselben virtuellen Maschine benden, voneinander zu isolieren und so vor Zugrien abzuschotten. Zwei Java-Objekte innerhalb derselben virtuellen Maschine konnen uber statische Methoden eine Referenz aufeinander erhalten und daruber kommunizieren, wenn beide das Einzelganger-Muster (vgl. Singleton pattern aus [GHJV95], Seite 127) implementieren. Eine einseitige Kommunikation ist schon moglich, wenn nur ein mobiler Code ein Einzelganger ist und dann von dem anderen aufgerufen wird; wenn die beiden Codes nur Werte austauschen wollen, reicht es sogar schon, wenn sie Klassen enthalten, die statische Variablen anbieten. Wenn also zwei Multimediamediator-Anfragen in derselbem virtuellen Maschine gestartet werden und die dazugehorigen mobilen Codes Einzelganger sind, gehoren sie zwar zu 9.2 Angrie Dritter wahrend der Ubertragung 91 unterschiedlichen Schutzbereichen, da sie in unterschiedlichen Verzeichnissen abgelegt werden und somit ihr Herkunftsort nicht identisch ist, aber sie konnen trotzdem Methoden aufeinander aufrufen. Als Angrisbeispiel stelle ich die beiden Klassen org.mmm.attacks.BadExtractor und org.mmm.attacks.BadExtractor2 bereit, in denen der BadExtractor eine Methode vom BadExtractor2 aufruft, die ihm einen int-Wert zur uckgibt; die Klasse BadExtractor2 implementiert das Einzelganger-Muster. Auch wenn der Kunde vor dem Start aller mobiler Codes den Quellcode uberpruft und sich uberzeugt, dass die Klassen fur sich genommen ungefahrlich sind, konnen durch die Kooperation mehrerer Codes unerwunschte Operationen durchgefuhrt werden. Die technisch einfachste Moglichkeit, eine Kooperation mobiler Codes zu verhindern, ist es, nur eine Anfrage pro Java-Prozess zu starten. Fur eine weitere Anfrage muss auch eine weitere virtuelle Maschine gestartet werden. Die Grenzen virtueller Maschinen konnen Objekte mit einfachen Methodenaufrufe nicht uberqueren. Jeder neue Java-Prozess bedeutet fur den Kundenrechner zwar eine zusatzliche Belastung seiner Ressourcen; diese ist aber akzeptabel um das Ziel der Abschottung von mobilen Codes zu erreichen. Als Softwarelosung zur Trennung von zwei mobilen Codes aus verschienden Paketen innerhalb derselben virtuellen Maschine lasst sich die Java-Systemvariable package.access erweitern. Diese Systemvariable enthalt die Paketnamen, fur die eine Zugrisuberprufung durchgefuhrt werden soll. An sie konnen zur Laufzeit die Paketnamen der mobilen Codes angehangt werden. Beispielsweise: Security.setProperty("package.access", "org.mmm.attacks."); Klassen auerhalb des Paketes mmm.org.attacks { also insbesondere mobile Codes aus anderen Paketen { konnen dann nicht auf Klassen innerhalb dieses Paketes zugreifen, solange ihnen in der aktuellen Sicherheitsregel nicht explizit die notige Berechtigung zugewiesen wird { das ware in diesem Fall RuntimePermission("accessClassInPackage.org.mmm.attacks."). Der Nachteil dieses Verfahrens ist, dass der Wert der Systemvariable sehr lang werden kann, weil zur Laufzeit viele neue Paketnamen angehangt werden. Der Vergleich der Paketnamen dauert dann langer. Auerdem kann eine Klasse innerhalb des Paketes immer auf alle anderen Klassen dieses Paketes zugreifen. Der Beispielangri, in dem sich die beiden Klassen BadExtractor und BadExtractor2 innerhalb des Paketes org.mmm.attacks benden, w urde weiterhin funktionieren. Technisch wesentlich aufwandiger ware es, die Schutzbereichsisolierung zu implementieren. Das konnte etwa durch eine Erweiterung des Berechtigungsmechanismus' geschehen. Zunachst musste man eine neue Berechtigung einfuhren { etwa AccessProtectionDomainPermission { oder aber fur die bestehende Berechtigungsklasse java.security.RuntimePermission einen neuen Zielnamen accessProtectionDomain denieren. Bei jeden Zugri auf eine Klasse in einem anderen Schutzbereich musste dann uberpruft werden, ob der Aufrufer dazu berechtigt ist, die Schutzbereichsgrenze zu uberqueren. Da Schutzbereichsgrenzen in Aufrufketten aber haug uberschritten werden, wurde diese U berprufung ebenso haug stattnden und die Ausfuhrung des Java-Programms dadurch langsamer. 9.2 Angrie Dritter wahrend der Ubertragung Um einem Angri durch Wiedereinspielen einer Antwort durch Dritte (wie in Abschnitt 6.6 auf Seite 47 dargestellt) zu entgehen, erstellt der SQLRequestor eine Seriennummer fur jede Anfrage. Er benutzt dazu ein Objekt der Klasse java.util.Date, dass die aktuelle Ortszeit angibt, und hangt dieser Zeitangabe zusatzlich noch eine Zufallszahl an, die mit der Klasse java.util.Random erzeugt wurde. Der Mediator liest die Seriennummer aus der Anfrage aus und fugt sie in den mobilen Code ein, bevor er ihn verschlusselt. Nach der Entschlusselung des mobilen Codes auf dem Kundenrechner vergleicht der SQLRequestor die gespeicherte Seriennummer mit der Seriennummer des mobilen Codes. Falls sie nicht ubereinstimmen, wird er eine org.mmm.client.WrongTimestampException geworfen. In der Benutzungsschnittstelle 92 9 Mogliche Angrie auf das Mediatorsystem wird daraufhin ein Warnhinweis angezeigt und der/die Benutzer(in) kann entscheiden, wie mit dem Code weiter verfahren werden soll. 9.3 Angrie auf mobilen Code wahrend des Aufenthalts beim Kunden Sichere Koprozessoren kann man derzeit fur die Kundenrechner nicht voraussetzen. Es mussten daher Softwarelosungen fur den Schutz des mobilen Codes eingesetzt werden. Java-Binarcode kann einfach dekompiliert werden (siehe dazu [Rou03]). Die entschlusselten Objekte, die den Algebrabaum darstellen, kann der Kunde mit einem veranderten Kundenmodul einsehen. Er kann die entschlusselten Objekte auch ohne Probleme serialisieren und speichern. Er hat neben dem Zugri auf das Gesamtantwort auch Zugri auf die Teilantworten. Mobile Codes konnen keinen Einuss auf andere mobile Codes nehmen, wenn sie in verschiedenen virtuellen Maschinen ausgefuhrt werden. Dieses Verfahren wurde in 9.1.8 dargestellt, um Komplotte von mobilen Codes zu vermeiden. Die Daten eines mobilen Codes konnen auerdem nicht von anderen Codes angegrien werden, da jeder Code ein eigenes Arbeitsverzeichnis und keine Schreibrechte hat. Ich betrachte im Folgenden nur zwei Angrie eines mobilen Codes auf die Integritat seiner eigenen Daten. 9.3.1 Angri: Schadliche Operatoren Der Mediator erstellt die Operatorenklassen und muss dazu das Datenformat seiner Datenquellen kennen. Daher wird ihm kein Geheimnis preisgegeben, wenn er dem mobilen Code sowohl den Binarcode fur die Operatoren als auch fur das Datenformat hinzufugt. Solange sich die Teilantworten auf dem Mediator benden, kann er sie nicht verandern, da sie mit dem Kundenschlussel verschlusselt sind. Allerdings werden die Operatoren auf dem Kundenrechner auf den unverschlusselten Teilantworten ausgefuhrt. Ein bosartiger Mediator kann Operatoren schreiben, die die Teilantworten bei der Ausfuhrung verandern. Insbesondere kann die Auswertung eines Operators von Daten in der Teilantwort abhangig gemacht werden. Um bei dem Beispiel der Kaeetabelle zu bleiben, kann etwa ein bosartiger Selektionsoperator grundsatzlich alle Zeilen eines bestimmten Anbieters herausnehmen. Die U berprufung der semantischen Korrektheit des Operators kann nicht durch die Java-Sicherheitsmechanismen geleistet werden. Der Kunde muss auf andere Methoden zuruckgreifen, wie sie in Abschnitt 6.7.1 (Seite 49) vorgeschlagen wurden. 9.3.2 Angri: Uberschreiben von Binarcodes Durch das Klassenladerprizip der Programmiersprache Java ergibt sich ein weiteres Problem. Der Mediator kann neben dem Schreiben von bosartigen Operatoren auch die Klasse fur das Datenformat neu schreiben und dort schadlichen Code einfugen, der die jeweilige Teilantwort verandert. Selbst wenn unter der Annahme, dass die Datenquelle vertrauenswurdig ist, der Binarcode fur das Datenformat von den Datenquellen verschlusselt und signiert an ihre Teilantworten gehangt wird und das Kundenmodul ihn von dort auf die Festplatte speichert, der Kunde also sicher sein kann, dass der Binarcode wirklich von der Datenquelle stammt, ist das Problem nicht gelost. Die Klassenlader in Java durchlaufen beim Laden einer Klasse ihren Suchpfad, bis sie den ersten passenden Binarcode gefunden haben. Ein Mediator konnte also zusatzlich zu den Operatoren in seinem Java-Archiv das Datenformat neu denieren. Wenn der Dateistandort dieses Java-Archivs vor dem Dateistandort des Archivs mit dem Originalformat der Datenquelle im Suchpfad liegt, wird dennoch die gefalschte Klasse geladen. Die Namenskonventionen fur Java-Pakete sehen vor, dass der Firmenname des Herstellers (oder etwas ahnlich Bezeichnendes) in den Pakete vorkommen. Damit kann die Gefahr des unabsichtlichen U berschreibens zumindest eingeschrankt werden. 9.3 Angrie auf mobilen Code wahrend des Aufenthalts beim Kunden 93 Das Kundenmodul kann mit einigem Aufwand einen absichtlichen Angri entdecken und verhindern. Es durchlauft vor der Ausfuhrung des mobilen Codes den gesamten Algebrabaum und vergleicht die dort gefundenen Klassen mit den Eintragen im Java-Archiv des Mediators. Alle Binarcodes von Klassen, die nicht als Operatoren im Algebrabaum vorkommen, werden aus dem Archiv entfernt, so dass am Ende nur noch Binarcodes ubrigbleiben, die wirklich benotigt werden. Da der Baum dazu aber einmal vollstandig durchlaufen werden muss, verdoppelt sich mit diesem Verfahren die Berechnungszeit des mobilen Codes. Eine zweite Moglichkeit ware es, fur jedes Archiv, das dem mobilen Code beigefugt ist, einen eigenen Klassenlader zu instanziieren. Das Kundenmodul muss dann aber auch den Aufbau des Algebrabaums kennen, denn zum Laden eines Operators oder des Datenformats einer Teilantwort muss dann der richtige Klassenlader angesprochen werden. Fur jeden Operator und jedes Datenformat musste anhand des Algebrabaums erkenntlich sein, aus welchem Java-Archiv ihr Klassencode geladen werden soll. Dieses Verfahren wurde viel zusatzliche Rechenzeit fur das Kundenmodul bedeuten. Mit den derzeit in Java vorhandenen Mitteln lasst es sich auch nicht umsetzen, da die Teilantworten beim Entschlusseln sofort instanziiert werden { und zwar mit dem Systemklassenlader und daher mit dem Binarcode der im Suchpfad des Systemklassenladers an erster Stelle steht. Es musste also in der Klasse javax.crypto.SealedObject eine Moglichkeit geschaen werden, bei der Entschlusselung den Klassenlader anzugeben, der die Klassen instanziieren soll. Im U brigen ware das U berschreiben von Klassen auch eine Angrismoglichkeit fur eine Datenquelle: Wenn ihr Java-Archiv zuerst im Suchpfad liegt, kann sie darin die Operatoren des Mediators und die Datenformate von anderen Teilantworten uberschreiben. Da der Mediator das Java-Archiv der Datenquelle aber einsehen kann, bevor er es an den mobilen Code hangt (er kennt die Datenformate der Datenquelle, da er die Operatoren dafur schreibt), kann er diesem Angri vorbeugen; das wird er tun, wenn er Interesse daran hat, dass sei Code lauahig ist. Ich habe ein vereinfachtes Verfahren gewahlt, um uberschriebene Codes zu entdecken: Das Kundenmodul durchlauft zwar nicht den Algebrabaum und pruft, ob sich Klassen in einem Java-Archiv benden, die dort nicht benotigt werden, aber die neu eingefuhrte Archivprufmethode SQLRequestor.checkAllJars() sieht sich die Eintrage aller Java-Archive an, die in das Arbeitsverzeichnis gespeichert wurden. Wenn sie Eintrage in einem Archiv ndet, die Eintrage anderer Archive uberschreiben, wird die Ausnahme org.mmm.client.DuplicateJarEntry geworfen. U ber eine neues Auswahlfeld in der Benutzungsschnittstelle kann diese Funktionalitat ein- oder ausgeschaltet werden. Falls die Ausnahme auftritt, wird ein Warnhinweis angezeigt. Im Terminalfenster wird auerdem ausgegeben, welche Eintrage uberschrieben werden. Dem oder der Benutzer(in) bleibt es dann uberlassen, von Hand die angegebenen Java-Archive zu prufen und gegebenenfalls zu andern oder zu entfernen. 94 9 Mogliche Angrie auf das Mediatorsystem 95 IV. Erweiterungen Inhalt 10 Auswirkungen einer Mediatorhierarchie . . . . . . . . . . . . . . . . . . . . 10.1 Technische Anforderungen . . . . . . . . . 10.2 Nachteile fur den Kunden . . . . . . . . . 10.3 Angrie der Teilcodes untereinander . . . 11 Umsetzung der Mediatorhierarchie . . . 11.1 Angrie der Teilcodes untereinander . . . . . . . . . . . . . 12 Auswahl mehrerer Eigenschaftsnachweise . . . . . . . . . . . . . . . . . . . 13 Umsetzung der Auswahl mehrerer Zertikate . 13.1 Verschlusselung mit mehreren Schlusseln . . . . . . 13.2 Entschlusselung mit mehreren Schlusseln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 97 97 98 100 102 104 105 105 107 La vulneracion de la conanza tambien es eso: no solo ser indiscreto y "ocasionar da~no o perdicion con ello, no solo recurrir a esa arma ilcita cuando los vientos cambian y se le pone la proa al que conto y dejo ver { ese que se arrepiente ahora y niega y confunde y enturbia ahora, y quisiera borrar y calla {, sino sacar ventaja del conocimiento obtenido por debilidad o descuido o generosidad del otro [...].\ Javier Maras 96 10 Auswirkungen einer Mediatorhierarchie 10 Auswirkungen einer Mediatorhierarchie Als erste Erweiterung dieser Diplomarbeit ist die Weiterleitung von Teilanfragen an andere Mediatoren vorgesehen. Dabei schickt der Kunde wie bisher seine Anfrage an einen Mediator. Dieser primare Mediator kann die Anfrage wie gewohnt aufspalten und Teilanfragen an Datenquellen schicken. Er kann aber auch die Anfrage als Ganzes zu einem anderen, sekundaren Mediator weiterleiten oder aber die Anfrage aufspalten und einige Teilanfragen an Datenquellen und die restlichen Teilanfragen an andere, sekundare Mediatoren schicken. Die sekundaren Mediatoren konnen wiederum Teilanfragen (oder ihre Gesamtanfrage) an andere Mediatoren delegieren. Abbildung 24 stellt beispielhaft eine Hierarchie dar. Mediator 1 Quelle Hauptcode Mediator 2b Mediator 2a Obercode von 3a Teilcode von 1 Mediator 3a Quelle Quelle Mediator 3b Mediator 3c Teilcode von 2a und 1 Quelle Quelle Quelle Quelle Quelle Abbildung 24: Hierarchie von Mediatoren Ein Mediator bekommt von den Mediatoren, an die er Teilanfragen delegiert hat, Teilantworten in Form von mobilen Codes { den sogenannten "Teilcodes\. Der mobile Code des primaren Mediators ist der "Hauptcode\, der die Teilcodes aller anderen Mediatoren umfasst. In einer Hierarchie mit mindestens zwei Stufen hat ein Teilcode auch immer noch einen oder mehrere Obercodes\; das sind die Codes der Mediatoren, die in der Hierarchie uber ihm liegen. "Durch die Hierarchisierung ist eine Strukturierung des Systems moglich: es kann Mediatoren geben, die fur einen bestimmten Themenbereich zustandig sind (vgl. dazu auch [WG97], Seite 45: domain partitioning). Mehrere Mediatoren zusammen konnen dem Kunden auch eine groere Menge an Informationen liefern und die Mediatoren konnen variabel entscheiden, ob sie Teilanfragen noch weitersenden oder mit ihren eigenen Datenquellen beantworten. Datenquellen werden nicht nur von den Kunden, sondern auch von den Mediatoren, die sich hoher in der Hierarchie benden, abgekapselt; sie bleiben auch den meisten Mediatoren gegenuber anonym (auer gegenuber dem, der sie direkt anspricht). Die Kunden wiederum sind nur dem primaren Mediator bekannt, bleiben aber Mediatoren tiefer in der Hierarchie gegenuber anonym. In den folgenden Abschnitten diskutiere ich, welche Auswirkungen die Mediatorhierarchie auf das Multimediamediator-System hat und welche neuen Sicherheitsrisiken dadurch auftreten. Eine U bersicht ist in Tabelle 9 zu nden. 10.1 Technische Anforderungen 97 10.1 Technische Anforderungen Ich halte es fur wichtig, dass der Mediator einen Teilcode moglichst wenig bearbeiten muss und genauso wie eine Teilantwort von einer Datenquelle als Blatt in seinen Algebrabaum einhangen kann, ohne den Teilbaum innerhalb des Teilcodes durchlaufen zu mussen. Das spart Zeit bei der Erstellung der Gesamtantwort und fuhrt bei einem guten Entwurf auch nicht zu einer langeren Berechnungszeit beim Kunden. Durch die Weiterleitung dauert die Beantwortung einer Anfrage aber wahrscheinlich langer als im einfachen Fall. Im Abschnitt 11 (Seite 100) stelle ich dar, welche Veranderungen durch den Einbau von Teilcodes in den Antwortbaum an meinem bisherigen Entwurf notwendig waren. Technisch sehe ich bei der Hierarchisierung der Mediatoren zudem die Schwierigkeit, dass Kreise in der Anfrageabfolge auftreten konnen, die im schlechtesten Fall endlos durchlaufen werden; dann namlich, wenn die beteiligten Mediatoren die Anfrage in jedem Durchlauf des Kreises vollstandig an denselben Mediator weiterleiten. Dieses musste durch geeignete Verfahren verhindert werden. Sollte der Fall eintreten, dass eine Datenquelle einen Eigenschaftsnachweis ablehnt, muss dies dem Kunden mitgeteilt werden. Die Mitteilung muss von der Datenquelle aus uber alle Mediatoren auf dem Weg, den die Teilanfrage genommen hat, zuruckgeleitet werden. Dies kann eine Anfrage in einer fur den Kunden unakzeptable Weise verlangern. Bei einer Hierarchisierung ist es daher noch wichtiger als bei der einstugen Mediation, dass der primaren Mediator Informationen uber Zugrisbeschrankungen bereithalt (und diese Informationen auch aktuell halt) und dem Kunden mitteilen kann, welche Eigenschaftsnachweise benotigt werden. Generell lasst sich sagen, dass sich das Multimediamediator-System durch die Hierarchisierung vor dem Hintergrund der in Abschnitt 5 auf Seite 28 vorgestellten Bewertungskriterien verschlechtert. Vor allem in den Punkten "Vermeidung eines verteilten Berechnungszustands\ und Unabhangigkeit von der Netzverbindung\ gibt es Nachteile, da fur die Kommunikation mit "den anderen Mediatoren eine zuverlassige Netzverbindung notwendig ist und mit der Hierarchisierung die Erstellung des Antwortbaums auf mehr Teilnehmer verteilt wird. Wenn auerdem jeder Mediator seinen eigenen Binarcode in seinen Teilcode einfugt, erhoht sich auch die Datenmenge, die ubertragen wird. Damit erkauft man sich jedoch eine hohere Flexibilitat des Systems und einen moglichen groeren Informationsgewinn fur den Kunden. 10.2 Nachteile fur den Kunden Durch die Hierarchisierung der Mediatoren wird das Multimediamediator-System komplexer und der Weg, den eine Anfrage nimmt, schlechter nachzuvollziehen. Mit mehreren Mediatoren wird es fur den Kunden schlechter uberprufbar, welche Qualitat die Antwort hat; das heit, wenn er in einem System mit nur einem Mediator schon kaum feststellen kann, ob die Datenquellen korrekte und aktuelle Daten zuruckgeliefert haben, wird dies mit mehreren Mediatoren nun noch schwieriger. Nicht einmal die Mediatoren wissen, welche Datenquellen andere Mediatoren in der Hierarchie benutzen. Der Kunde kann nur die Reputation seines primaren Mediators uberprufen. Der primare Mediator muss dann treuhanderisch fur den Kunden nicht nur die Qualitatsprufung der direkt von ihm benutzten Datenquellen sondern auch der von ihm benutzten sekundaren Mediatoren durchfuhren; diese wiederum tragen die Verantwortung fur die von ihnen benutzten Mediatoren und Datenquellen und so weiter. Die Gesamtantwort setzt sich aus mehreren mobilen Codes zusammen, die von Mediatoren stammen, die der Kunde nicht kennt. Da der Kunde seinem primaren Mediator auch nur eingeschranktes Vertrauen entgegenbringt, ist der mobile Code der anderen Mediatoren aber nicht als potenziell gefahrlicher einzustufen als der des primaren Mediators. Die Mechanismen zum Schutz des Kundenrechner sind dieselben wie beim Multimediamediator ohne Hierarchie. Signaturen unter den mobilen Codes sind fur den Multimediamediator daher vorwiegend zur U berprufung der Integritat bei der U bertragung der Teilcodes notwendig. Jedoch kann der 98 10 Auswirkungen einer Mediatorhierarchie Kunde die Signaturen der mobilen Teilcodes eventuell nicht uberprufen (und damit die einzelnen Codehersteller weder authentizieren noch die Integritat des Teilcodes feststellen), weil der Kunde nicht die oentlichen Schlussel von allen beteiligten Mediatoren hat. Jeder Mediator kann aber die Integritatsprufung in seiner Stufe der Hierarchie ubernehmen. Zunachst pruft er die Signaturen der mobilen Codes, die er von den Mediatoren erhalt, an die er direkt Teilanfragen deligiert hat. Wenn er erfolgreich war, signiert er sie mit seinem privaten Schlussel. Er burgt damit fur die Richtigkeit der vorherigen Signatur und damit der korrekten U bertragung des Code. Unter der Annahme, dass das Signaturverfahren sicher und Signaturen nicht falschbar sind, konnen Mediatoren mit diesem Verfahren eine Integritatskette uber die ganze Hierarchie aufbauen. Jeder Mediator benotigt nur die oentlichen Schlussel der Mediatoren, die er direkt anspricht. Voraussetzung ist, dass die oentlichen Schlussel auf sicherem Weg ausgetauscht werden und ihre Authentizitat sichergestellt ist. Im letzten Schritt pruft der Kunde, ob die Signatur unter dem Hauptcode, den er vom primaren Mediator erhalt, korrekt ist. Dafur benotigt der Kunde dann den Schlussel dieses einen Mediators aber keine weiteren. Beweismitfuhrender Code, der in Abschnitt 6.2.3 auf Seite 41 vorgestellt wurde, eignet sich auch fur den Schutz des Kundenrechners vor einem hierarchisierten mobilen Code. Allerdings muss die Beweiserstellung zum gleichen Zeitpunkt wie die Konstruktion des jeweiligen Teilcodes geschehen und sehr schnell moglich sein, damit keine groen Zeiteinbuen durch die Beweise auftreten. Wenn der Kunde den Teilbeweis fur jeden Teilcode erhalt, kann er sicher sein, dass er nicht durch Obercodes verandert wurde und auch nicht bei der Ausfuhrung verandert wird, wenn der Kunde eine entsprechende Sicherheitsregel deniert hat. Allerdings mussen die Teilbeweise der Teilcodes zusammengesetzt werden konnen, wie es auch schon fur Teilbeweise von Operatoren moglich sein musste (siehe dazu Abschnitt 6.2.3 auf Seite 41); die Mediatoren in der Hierarchie mussen deswegen fur ihre Beweise kompatible Beweissprachen verwenden, die ein Zusammensetzten zulassen. 10.3 Angrie der Teilcodes untereinander Wenn alle Mediatoren in der Hierarchie ehrlich und nur neugierig sind (vgl. die Angrismodelle in Abschnitt 3.1 auf Seite 8), konnen sie bei der Erstellung ihres Teilcodes aus den anderen Teilcodes im Vergleich zum einfachen Modell keine weiteren Informationen ableiten, wenn die anderen Teilcodes verschlusselt sind. Ein bosartiger Mediator kann, wie er es auch mit Teilantworten von Datenquellen tun kann, die Teilcodes durch willkurliche A nderungen von einzelnen Teilen des verschlusselten Codes angreifen oder die Teilcodes an der falschen Stelle in seinen Algebrabaum einhangen. Ein bosartiger Mediator kann auch Teilanfragen an qualitativ schlechte oder parteiische Mediatoren weiterleiten und eventuell andere Mediatoren durch eine Unmenge von Anfragen blockieren. Ein groes Risiko ergibt sich nach der Entschlusselung auf dem Kundenrechner. Wenn jeder Teilcode seinen Binarcode mit sich fuhrt und alle Binarcodes von ein und demselben Klassenlader geladen werden, kann es passieren, dass sich Denitionen von verschiedenen Codes uberlagern und bei der Ausfuhrung beispielsweise falsche Operatoren benutzt werden. Das kann zum Einen unbeabsichtigt sein, zum Anderen kann ein bosartiger Mediator auch absichtlich Operatoren mitsenden, die andere Teilcodes verandern. Diese Operatoren werden auf den entschlusselten Teilcodes und Teilantworten ausgefuhrt und konnen daher Abfragen von Werten enthalten und die Auswertung in Abhangigkeit von diesen Klartextwerten durchfuhren. Das war auch schon im einfachen Fall mit den Teilantworten der Datenquellen moglich (siehe Abschnitt 9.3.2 auf Seite 92); nur waren dort solche Angrie einfacher nachzuvollziehen, da die Datenquellen nur ihr jeweiliges Datenformat liefern sollten und der Mediator die Operatoren. In einer Hierarchie von Mediatoren liefern aber mehrere Mediatoren Binarcode fur Operatoren und die Wahrscheinlichkeit des U berschreibens steigt damit. Im einfachen Fall war also "nur\ die Integritat der Daten gefahrdet (vgl. Abschnitt 6.7.1, Seite 48), wahrend im hierarchisierten Fall auch die Integritat der Codeausfuhrung gefahrdet ist (vgl. Abschnitt 6.7.4, Seite 52). 99 10.3 Angrie der Teilcodes untereinander Vorteile Spezialisierung der Mediatoren auf Themenbereiche Skalierbarkeit des Informationsgehalts Anonymitat zwischen Teilnehmern ohne direkten Kontakt Nachteile Langere Beantwortungsdauer Hohere Anfalligkeit gegenuber Verbindungsabbruchen Mogliche Kreise in der Anfragekette Schwierigere Qualitatskontrolle Angrie der Teilcodes untereinander Tabelle 9: Vor- und Nachteile der Hierarchisierung Auerdem stehen die Mediatoren in der Hierarchie in einer Art Konkurrenzverhaltnis und haben damit eventuell ein Interesse daran, die anderen Teilcodes zu kontrollieren. Wenn ein Teilcode die Namensgebung der Operatoren eines anderen Teilcodes kennt, kann er bosartige Operatoren mit den gleichen Namen in seinem Binarcode denieren und hoen, dass dieser Binarcode anstelle des richtigen benutzt wird. Wenn das Kundenmodul solche Angrie unterbinden will, muss es den Aufbau des Antwortbaumes einsehen und die Teilcodes unterscheiden konnen. Die Losungsmoglichkeiten, die in Abschnitt 9.3.2 dargelegt wurden, konnen auch in einer Mediatorhierarchie eingesetzt werden. Das Kundenmodul kann den ganzen Algebrabaum (und damit alle Teilcodes) durchlaufen, feststellen, ob ein U berschreiben stattndet, und gegebenenfalls die uberschreibenden Klassen aus dem Binarcode loschen. Alternativ kann fur jeden Binarcode (das heit fur jeden Teilcode und eventuell fur jede Teilantwort in jedem Teilcode) ein eigener Klassenlader erstellt werden, der die Klassen fur den jeweiligen Teilcode ladt. Die Probleme mit diesen Verfahren sind in der Hierarchie dieselben wie im einfachen Fall; wegen der groeren Komplexitat des Antwortbaums ist die Ausfuhrung aber noch zeitraubender. 100 11 Umsetzung der Mediatorhierarchie 11 Umsetzung der Mediatorhierarchie Um mein Mediatorsystem so zu erweiteren, dass ein primarer Mediator Teilanfragen an sekundare Mediatoren weiterleiten kann, musste ich zunachst uberlegen, ob A nderungen am Anfrageformat, den RMI-Schnittstellen des Mediators, dem Antwortformat oder dem Kundenmodul notig waren. Im unsignierten und unverschlusselten Fall musste das Anfrageformat nicht geandert werden. Ein Mediator schickt an einen anderen Mediator die Teilanfrage { genauso wie an Datenquellen { in Form eines QueryWithCertificate. Er benutzt dafur dieselbe RMI-Schnittstelle des Mediatormoduls, die auch der Kunde bei direkten Anfragen verwendet: in beiden Fallen wird die Methode request() aufgerufen. Das heit auch, dass ein delegierender Mediator die Antwort als ResultExtractor bekommt. Die Klasse ResultExtractor selbst muss dann nur das Interface AlgebraTreeComponent implementieren, um wie die Klassen ResultOperator und Result als Knoten in den Antwortbaum eingesetzt werden zu konnen. Das bedeutet, dass im unverschlusselten Fall auch das Anfrageformat nicht geandert werden musste. Bei der Ausfuhrung des mobilen Codes wird innerhalb des Antwortbaums die calculateResult-Methode des Teilantwortbaumes aufgerufen. Daher waren auch keine A nderungen am Kundenmodul notig. Wenn jedoch ein delegierender Mediator die Antworten signiert und verschlusselt von den anderen Mediatoren bekommen will, muss eine Bedingung erfullt sein: Der delegierende Mediator muss Zugri auf die Signaturprufschlussel der anderen Mediatoren haben. Dieser Austausch zwischen den Mediatoren muss bereits im Vorhinein auf sicherem Weg stattgefunden haben. Im mobilen Code, den ein Mediator erstellt, sind Teilantworten und die direkten Teilcodes (die Teilcodes der Mediatoren, die sich eine Stufe tiefer in der Hierarchie benden) in verschlusselter Form enthalten. In den direkten Teilcodes sind eventuell weitere verschlusselte Teilantworten und Teilcodes enthalten. Mediatoren nehmen fur die Verschlusselung ihres eigenen Codes das Zertikat des Kunden aus der Teilanfrage, die sie erhalten haben, und erstellen damit aus ihrem Code einen SealedResultExtractor. Es ergibt sich also ein verschlusselter mobiler Code, wie er in Abbildung 25 zu sehen ist. Jeder verschlusselte Teilcode wird schlielich vom erstellenden Mediator signiert. Prog1 Daten1 Prog2a Daten2a Prog3a Daten3a Daten3a Daten2b Prog2b Daten2b Prog3b Daten3b Prog3c Daten3c Abbildung 25: Verschlusselung eines hierarchisierten Codes Da ein delegierender Mediator seine Teilcodes nicht entschlusseln kann, wird statt eines Teilcodes ein ResultProxy in den Antwortbaum eingesetzt und der verschlusselte Teilcode (als ein Objekt vom Typ SealedResultExtractor) der Teilantwortentabelle mit den verschlusselten Teilantworten hinzugefugt. Das Anfrageformat musste dazu nicht verandert werden und die RMI-Schnittstelle requestSealedAndSigned() wird weiterhin verwendet. Allerdings hat 101 Abbildung 26: Benutzungsschnittstelle des Mediatormoduls mit Hierarchisierung sich das Antwortformat geandert. Bei der Entschlusselung der Teilantwortentabelle sind nicht mehr nur Teilantworten (in Form von SealedResults) sondern auch Teilcodes (in Form von SealedResultExtractors) zu verarbeiten. Die Teilcodes bringen ihren eigenen Binarcode mit; da die Teilcodes aber nicht nicht die Berechtigung haben, ihre Binarcodes selbst in das Arbeitsverzeichnis des mobilen Codes zu speichern, musste das Kundenmodul an diese Veranderung angepasst werden. Das Kundenmodul speichert alle Binarcodes, hat aber jetzt nicht nur eine Stelle im Hauptcode sondern auch mehrere Stellen in den Teilcodes, von denen es Binarcodes herauslesen und speichern muss. Die Entschlusselungsmethode fur Teilantwortentabellen pruft also, ob es sich bei einem Eintrag in der Teilantwortentabelle um einen Teilcode handelt. Wenn das der Fall ist, ruft sie die Entschlusselungsmethode fur mobile Codes auf dem Teilcode auf. Nachdem sie den Teilcode zu einem Teilantwortbaum und dem dazu gehorigen Binarcode entschlusselt hat, speichert sie den Binarcode als ein oder mehrere Java-Archive in das Arbeitsverzeichnis und ruft anschlieend die Entschlusselungsmethode fur Teilantwortentabellen auf der Teilantwortentabelle des Teilcodes auf. Am Ende ist der Gesamtantwortbaum inklusive aller Teilantwortbaume und Teilantworten entschlusselt und alle Binarcodes im Arbeitsverzeichnis gespeichert. Weitere A nderungen waren nicht notwendig, da uber den ResultProxyMechanismus bei der Ausfuhrung des mobilen Codes automatisch die Berechnungsmethode der Teilantwortbaume aufgerufen wird. Schlielich musste das Mediatormodul angepasst werden. Bei der Tiefensuche im Stringbaum muss die Teilanfrage in einem Blatt entweder an eine Datenquelle oder an einen Mediator weitergeleitet werden. Die Schnittstellen fur Mediatoren und Datenquellen sind nicht gleich, da an einen Mediator nur eine Teilanfrage aber an eine Datenquelle zusatzlich der Datenbankname sowie Benutzerkennung und Passwort gesendet wird. In der Benutzungsschnittstelle des Mediatormoduls habe ich ein Eingabefeld fur den Namen oder die IP-Adresse des Mediators eingefugt, an den die Teilanfragen weitergeleitet werden sollen. Der/die Administrator(in) des Mediatormoduls kann also entscheiden, ob eine Datenquelle oder ein Mediator gefragt wird. Abbildung 26 zeigt die veranderte Schnittstelle. Weiterhin wird aber allein ein Mediator oder eine Datenquelle fur die Weiterleitung benutzt, weil der Mediator keinen Algorithmus fur die Zuweisung von Teilanfragen an unterschiedliche Rechner hat. 102 11 Umsetzung der Mediatorhierarchie 11.1 Angrie der Teilcodes untereinander In den folgenden beiden Abschnitten mochte ich darauf eingehen, inwieweit einzelne Teilcodes die Moglichkeit haben, andere Teilcodes anzugreifen. Dazu betrachte ich zum Einen die in Abschnitt 10.3 bereits theoretisch behandelte Gefahr des U berschreibens von Binarcode. Zum Anderen betrachte ich noch das Java-typische Problem der Referenzen zwischen Teilcodes. 11.1.1 Angri: Uberschreiben von Binarcodes Jeder Teilcode enthalt seinen eigenen Binarcode. Er ist in verschlusselter Form neben dem verschlusselten Teilantwortbaum im SealedResultExtractor enthalten. Ein Mediator, der versucht, Binarcodes seiner Teilcodes zu uberschreiben, kann aus den verschlusselten Teilcodes daher die verwendeten Klassennamen nicht auslesen. Allerdings kann der Mediator an den unverschlusselten Binarcode eines anderen Mediators gelangen, indem er einfach eine Anfrage an ihn stellt, zu der er die Berechtigung hat. Die Klassen innerhalb dieses Binarcodes kann ein angreifender Mediator dann neu denieren und in seinen eigenen Binarcode einfugen. Das Kundenmodul fangt bei der Entschlusselung mit dem Hauptcode an und fugt auch dessen Binarcode als erstes in den Suchpfad des Multimediamediator-Klassenladers ein. Dann wird der Teilcode, der als erstes im Hauptcode enthalten ist, entschlusselt und sein Binarcode in den Suchpfad eingefugt; danach wird dessen erster Teilcode betrachtet und so weiter. Das Entschlusseln und Hinzufugen ndet, wie der Aufbau des Antwortbaums, in einer Tiefensuche (genauer: pre-order-Reihenfolge) statt. Fur das Beispiel aus Abbildung 25 gilt also, dass die Binarcodes in der Reihenfolge 1, 2a, 3a, 2b, 3b und 3c in das Arbeitsverzeichnis gespeichert und auch in dieser Reihenfolge in den Suchpfad des Klassenladers eingefugt. Damit konnte der Binarcode eines Teilcodes durch Binarcode von Teilcodes auf gleicher Ebene oder sogar von Teilcodes aus einer tieferen Ebene uberschrieben werden. 2a konnte 2b, 3a, 3b und 3c uberschreiben, aber auch 3a konnte 2b, 3b und 3c uberschreiben. Jeder Mediator kann sein Java-Archiv versiegeln (vgl. dazu Abschnitt 7.8 auf Seite 64). Damit waren die Binarcodes zumindest paketweise geschutzt. Ein Angreifer musste dann auf jeden Fall alle Klassen, die ein anderer Teilcode verwendet, in seinem Binarcode uberschreiben. Auf dem Kundenrechner fallt das U berschreiben der Binarcodes auf, wenn der Kunde die Option zur U berprufung der Java-Archive aktiviert hat. Die in Abschnitt 9.3.2 (Seite 93) erklarte checkAllJars-Methode ndet die Duplikate in den Archiven und weist den/die Benutzer(in) darauf hin. 11.1.2 Angri: Referenzen auf Obercodes Meine erste Idee zur Entschlusselung von hierarchisiertem mobilen Code war es, dass jeder Teilcode seine verschlusselten Teilantworten an seinen Obercode weitergibt, so dass am Ende alle verschlusselten Teilantworten im Hauptcode enthalten sind. Der Vorteil dieses Verfahrens ist, dass die Entschlusselung aller Teilantworten einfach und schnell geht, da Teilantworten in einem Schritt entschlusselt werden konnen. Allerdings hat dieser Ansatz gravierende Nachteile: der Hauptcode hat direkten Zugri auf alle entschlusselten Teilantworten wahrend der Ausfuhrung alle Teilcodes benotigen eine Referenz auf den Hauptcode, um uber ihn auf ihre Teilantworten zugreifen zu konnen; mit einer solchen Referenz konnten sie versuchen, oentliche Methoden auf dem Hauptcode aufzurufen. In dem Hierarchisierungsverfahren, das ich schlielich implementiert habe, sind alle Teilcodes fur ihre Teilantworten und Teilcodes selbst zustandig. Teilcodes haben keine Referenzen auf den Hauptcode (oder einen Obercode, in dem sie enthalten sind). Auch Teilcodes in derselben Ebene der Hierarchie haben keine Referenzen aufeinander. Andersherum hat ein Obercode Referenzen 11.1 Angrie der Teilcodes untereinander 103 auf die direkten Teilcodes, die ihn ihm enthalten sind, damit die Berechnungsmethode auf den Teilcodes aufgerufen werden kann. Dass der Obercode den Teilcode bei der Ausfuhrung verandert oder falsche Ergebnisse berechnet, kann nur mit einer semantischen Prufung der Operatoren festgestellt werden. 104 12 Auswahl mehrerer Eigenschaftsnachweise 12 Auswahl mehrerer Eigenschaftsnachweise Eine Anfrage mit mehreren Eigenschaftsnachweisen bundelt die darin nachgewiesenen Eigenschaften. Wenn eine Datenquelle fur einen Datensatz A einen Eigenschaftsnachweis eigA verlangt und fur einen Datensatz B einen Eigenschaftsnachweis eigB , dann muss sie A mit dem Schlussel aus eigA (das sei keyeigA ) verschlusseln und B mit dem Schlussel aus eigB (also keyeigB ). Der anfragende Kunde muss im Besitz beider privater Schlussel sein, wenn er beide Datensatze entschlusseln will. Schwieriger wird es, wenn die Datenquelle fur einen Datensatz zwei oder mehrere Eigenschaftsnachweise verlangt: die Datenquelle will Eigenschaften UND-verknupfen, die sich uber mehrere Eigenschaftsnachweise verteilen. Wenn die Datenquelle nachprufen will, ob alle Eigenschaften zu einer Person gehoren, ist das (unter der Annahme, dass ein Schlussel nur zu genau einer Person gehort) im einfachsten Fall dadurch moglich, dass die Nachweise denselben oentlichen Schlussel enthalten. Dann muss die Teilantwort der Datenquelle auch nur einmal mit diesem Schlussel verschlusselt werden. Die Datenquelle sollte also neben der Prufung der Authentizitat der Zertikate auch die Gleichheit der Schlussel prufen. Der Kunde kann aber auch im Besitz mehrerer oentlicher Schlussel sein und in einer Anfrage Eigenschaftsnachweise mit unterschiedlichen Schlusseln verwenden. Dabei konnen hinter dem Begri "Kunde\ durchaus mehrere menschliche Benutzer stehen, die eine Anfrage zusammen stellen. Aus den Eigenschaftsnachweisen kann eine Datenquelle nicht ersehen, ob nur eine Person oder mehrere Personen die Anfrage stellen. Wenn die Datenquelle den Datenzugri von der Anzahl der anfragenden Personen abhangig macht, braucht sie zusatzlich noch Informationen daruber, wieviele Personen die Anfrage stellen (vgl. [ABFK03], Seite 377). Diesen Fall mochte ich hier nicht weiter betrachten. Um sicherzustellen, dass der Kunde berechtigt ist, die Daten zu sehen, verschlusselt die Datenquelle die Teilantwort mit den Schlusseln aus allen Zertikaten, die die geforderten Eigenschaften nachweisen: Verlangt die Datenquelle fur einen Datensatz C die Eigenschaftsnachweise eigA und eigB , verschlusselt sie ihn nacheinander mit den Schlusseln keyeigA und keyeigB . Entschlusseln kann den Datensatz nur jemand, der Zugri auf alle Entschlusselungsschlussel hat. Wenn mehrere Zertikate denselben Schlussel enthalten, reicht es, mit diesem Schlussel nur einmal zu verschlusseln. Eine Menge von Eigenschaften kann zusammen auszeichnend genug sein, um einen Ruckschluss auf die Identitat der Person zuzulassen, die diese Eigenschaften innehat (es gibt also nur eine Person, die diese Eigenschaften gleichzeitig hat); die Menge ist dann "identizierend\. Seien beispielsweise fA; B; C g eine identizierende Menge und eigA , eigB und eigC die drei zugehorigen Eigenschaftsnachweise, in denen derselbe Schlussel benutzt wird (also gilt: keyeigA = keyeigB = keyeigC ). Wenn der Kunde eine Anfrage mit diesen Eigenschaftsnachweisen stellt und man davon ausgeht, dass ein Schlussel nur zu genau einer Person gehort, wei zumindest der Mediator, welche Person die Anfrage gestellt hat. Um eine Identizierung durch den Mediator zu erschweren, ist es daher angebracht, fur Eigenschaften aus einer identizierenden Menge niemals dieselben Schlussel in einer Anfrage zu verwenden. Ein Konikt tritt dann auf, wenn eine Datenquelle alle Eigenschaftsnachweise eigA , eigB und eigC verlangt und zusatzlich fordert, dass sie von derselben Person stammen (also alle denselben Schlussel enthalten oder durch ein weiteres Zertikat die Zusammengehorigkeit bestatigt wird). In diesem Fall muss der Kunde entscheiden, ob er seine Identitat preisgeben will. Eine Auswahl von mehreren Eigenschaftsnachweisen mit unterschiedlichen Schlusseln ist also wunschenswert, um Gruppen von Personen Anfragen stellen zu lassen und die Identizierung von einzelnen Anfragestellern zu verhindern. Man benotigt ein Verfahren, mit dem eine Teilantwort mehrfach mit verschiedenen Schlusseln verschlusselt werden kann. 105 13 Umsetzung der Auswahl mehrerer Zertikate Die Moglichkeit, mehrere Zertikate auszuwahlen, hat auf der Kundenseite hauptsachlich Auswirkungen auf den Entschlusselungsvorgang. Es ist nicht mehr eindeutig, mit welchen der Schlussel eine Teilantwort verschlusselt wurde; daher muss die Teilantwort eine Angabe uber die verwendeten Schlussel enthalten. Aber auch das Anfrageformat musste geandert werden, da es nun mehrere Zertikate enthalten muss. Daher musste zunachst eine neue Anfrageklasse erstellt werden: org.mmm.core.QueryWithMultCertificates ermoglicht das. Dem/der Benutzer(in) muss in der Benutzungsschnittstelle die Moglichkeit gegeben werden, mehrere Zertikate auszuwahlen. Dazu habe ich einen dritten Reiter im Kundemodulfenster erstellt, der in Abbildung 27 zu sehen ist. Abbildung 27: Auswahl mehrerer Zertikate in der Benutzungsschnittstelle des Kunden Fur den vollstandigen Multimediamediator mit mehrfacher Verschlusselung fehlen noch zwei entscheidende Funktionen. Zum Einen muss der Mediator eine auf die jeweilige Datenquelle zugeschnittene Teilmenge der Zertikate bilden. In meinem System sendet das Mediatormodul alle Zertikate, die es mit der Anfrage bekommen hat, an die Datenquellen und trit keine Auswahl. Zum Anderen muss die Datenquelle die Authentizitat der Eigenschaftsnachweise uberprufen und dann diejenigen auswahlen, die sie fur die Verschlusselung benutzen will. Das sollten die Nachweise sein, die Eigenschaften nachweisen, die fur den Zugri auf die angeforderten Informationen notwendig sind. Mein Datenquellenmodul benutzt alle Zertikate zur Verschlusselung, die in der Teilanfrage als Feld (Certificate[]) vorhanden sind. Es verschlusselt nacheinander die Teilantwort mit allen Zertikaten in der Reihenfolge, in der sie im Feld vorliegen. Die Verschlusselung mit mehreren Schlusseln betrit nur die Datenquellen. Mediatoren mussen ihre mobilen Codes nicht mit mehreren Schlusseln verschlusseln, da eine Berechtigungsprufung nur auf den Teilantworten durchgefuhrt wird. In den folgenden Abschnitten stelle ich die Verfahren zur Ver- und Entschlusselung mit mehreren Schlusseln vor. Sequenzdiagramme, die das veranderte Verfahren darstellen, benden sich in den Anhangen D und E auf den Seiten 118 und 119. 13.1 Verschlusselung mit mehreren Schlusseln Um die Zertikate (und damit die oentlichen asymmetrischen Schlussel) eindeutig auszuzeichnen, erstellte ich die neue Klasse org.mmm.core.CertificateWithSerialNumber. Bei einer An- 106 13 Umsetzung der Auswahl mehrerer Zertikate frage wird fur jedes ausgewahlte Zertikat ein solches Objekt instanziiert. Es weist dem Zertikat eine Seriennummer zu. Die Anfrage und die Zertikate werden in einem Objekt der neu erstellten Anfrageklasse QueryWithMultCertificates zusammengefasst. Das Kundenmodul sendet dieses Anfrageobjekt uber die neue RMI-Methode request(QueryWithMultCertificates qwc) an den Mediator (requestSealedAndSigned(QueryWithMultCertificates qwc) im verschlusselten und signierten Fall). Der Mediator spaltet die Anfrage wie bisher auf. Aus einer Teilanfrage und den Zertikaten aus der Gesamtanfrage erstellt er ein neues QueryWithMultCertificates, das er als Anfrage an die ausgewahlte Datenquelle (oder den Mediator) sendet. Die Datenquelle fuhrt die Datenbankanfrage aus und erstellt einen symmetrischen Sitzungsschlussel, mit dem sie das Ergebnis der Datenbankanfrage verschlusselt. Der Sitzungschlussel wird dann mit den oentlichen asymmetrischen Schlusseln aus allen Zertikaten verschlusselt. Die Klasse org.mmm.core.SealedResult fasst wie bisher die verschlusselten Daten und den verschlusselten Sitzungsschlussel zusammen. Sie bekam aber als zusatzliches Attribut ein Feld (das "Seriennummernfeld\), in dem die Seriennummern der verwendeten Zertikate gespeichert werden. Die Datenquelle fugt bei der Verschlusselung einer Teilantwort nacheinander die Seriennummern der Zertikate in das Seriennummernfeld des neu erstellten SealedResult-Objekts ein. Die Reihenfolge innerhalb des Feldes gibt die Reihenfolge der verwendeten Zertikate an. Die oentlichen asymmetrischen Schlussel in den Zertikaten sind RSA-Schlussel und es wird weiterhin der Bouncy Castle Provider (siehe [BCP]) benutzt. Bei der Programmierung ergab jedoch sich das Problem, dass der BouncyCastle-RSA-Algorithmus nur Klartexte verschlusselt, deren Eingabelange kleiner ist als die Lange des Modulus des RSA-Schlussels. Eine Anwendung des RSA-Algorithmus' produziert aber ein Ergebnis, das die gleiche Lange wie der Modulus des RSA-Schlussels hat. Wenn man beispielsweise einen TripleDES-Sitzungschlussel der Lange 168 Bit und einen RSA-Schlussel mit einem Modulus der Lange 1024 Bit benutzt, kommt bei der ersten Verschlusselung ein Schlusseltext der Lange 1024 Bit heraus. Eine weitere Anwendung des RSA-Algorithmus' auf diesen Schlusseltext ist dann nicht mehr moglich, sondern fuhrt zu der Fehlermeldung: java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block. Ich habe daher einen anderen Weg genommen, um zu uberprufen, ob der Kunde im Besitz aller Entschlusselungsschlussel ist. Da dabei jedoch mehrere symmetrische Schlussel erstellt werden, benotigte die Klasse SealedResult als weiteres Attribut ein Feld (das Schlusselfeld\), in dem die verschlusselten Binarreprasentationen der symmetrischen Schlussel" abgespeichert werden. Die Verschlusselung des Sitzungsschlussels mit mehreren RSA-Schlusseln habe ich mit folgendem Algorithmus implementiert: 1. Wenn es nur einen RSA-Schlussel public1 gibt, wird nur der Sitzungschlussel secret1 erzeugt (als ein Objekt vom Typ javax.crypto.SecretKey) (a) Die Binardarstellung von secret1 (das ist bin secret1 ) wird mit public1 verschlusselt und das Ergebnis als einziger Eintrag in das Schlusselfeld eingefugt (b) Die Seriennummer serialpublic1 des Zertikats, in dem sich public1 befand, wird als einziger Eintrag in das Seriennummernfeld eingefugt 2. Wenn es n verschiedene RSA-Schlussel public1 : : : publicn gibt, werden neben dem Sitzungschlussel secret1 noch n 1 weitere symmetrische Schlussel secret2 : : : secretn der gleichen Lange erzeugt (a) bin secret1 : : : bin secretn werden bitweise mit exklusivem ODER verknupft: antival = bin secret1 : : : bin secretn Das Ergebnis antival wird mit public1 verschlusselt; das Verschlusselungsergebnis wird als erster Eintrag in das Schlusselfeld eingefugt (b) serialpublic1 wird als erster Eintrag in das Seriennummernfeld eingefugt 107 13.2 Entschlusselung mit mehreren Schlusseln (c) fur k = 2 : : : n: i. bin secretk wird mit publick verschlusselt und das Ergebnis an das Ende des Schlusselfelds angefugt ii. serialpublick wird an das Ende des Seriennummernfelds angefugt U ber die Benutzungsschnittstelle wird die Schlussellange fur die neu zu erzeugenden symmetrischen Schlussel ausgewahlt. Die RSA-Verschlusselungen konnen durchgefuhrt werden, wenn die ausgewahlte Schlussellange kompatibel mit den oentlichen RSA-Schlusseln aus dem Zertikat des Kunden ist; das heit, dass die symmetrischen Schlussel kurz genug sein mussen, um mit den RSA-Schlusseln verschlusselt zu werden. Wenn nur ein RSA-Schlussel zur Verschlusselung vorhanden ist, kann der Sitzungsschlussel ohne Probleme mit diesem RSA-Schlussel verschlusselt werden. Wenn mehrere RSA-Schlussel vorhanden sind, muss das Problem bei der mehrfachen RSA-Verschlusselung umgangen werden. Die n 1 symmetrischen Zusatzschlussel werden mit jeweils einem RSA-Schlussel verschlusselt. Das Ergebnis einer solchen Verschlusselung hat, wie oben beschrieben, die Lange des Modulus des RSA-Schlussels. Diese Ergebnisse werden aber nicht erneut verschlusselt, sondern es wird das bitweise exklusive ODER aller Zusatzschlussel und des Sitzungsschlussels berechnet. Die bitweise Kontravalenz der Zusatzschlussel und des Sitzungsschlussels hat dieselbe Lange wie die einzelnen Schlussel; auch sie kann daher mit einem der RSA-Schlussel verschlusselt werden. Die verschlusselte Teilantwort wird wie bisher an den Mediator geschickt. Er erzeugt fur die Teilantwort einen ResultProxy und fugt ihn in den Antwortbaum ein. Der Mediator verschlusselt seinen Antwortbaum mit dem oentlichen Schlussel aus dem ersten Zertikat des Kunden in der Anfrage. 13.2 Entschlusselung mit mehreren Schlusseln Die entscheidende A nderung am Kundenmodul war die Umwandlung des Entschlusselungsobjektes org.mmm.client.Unsealer. Die ursprungliche Klasse konnte nur Entschlusselungen mit einen Schlussel durchfuhren. Ich habe sie zunachst in org.mmm.client.UnsealerOneKey umbenannt, um das deutlich zu machen. Danach erstellte ich eine neue Klasse zur Entschlusselung mit mehreren Schlusseln mit dem Namen org.mmm.client.UnsealerMultKeys. Beim Erstellen einer Anfrage instanziiert das Kundenmodul einen UnsealerMultKeys. Dieser erzeugt fur jedes ausgewahlte Zertikat einen UnsealerOneKey und speichert ihn unter der Seriennummer des Zertikats in einer java.util.Hashtable (der "Entschlusslertabelle\) ab. Die Antwort des Multimediamediators erfolgt weiterhin in Form eines SealedResultExtractors. Er wird mit der Entschlusselungsmethode fur mobile Codes (unsealResultExtractor() des UnsealerMultKeys) zu einem ResultExtractor entschl usselt, der die Teilantwortentabelle mit allen verschlusselten direkten Teilantworten in Form von SealedResults und allen verschlusselten direkten Teilcodes in Form von SealedResultExtractors enthalt. Zum Entschlusseln der Teilantworten und Teilcodes ruft der SQLRequestor die Entschlusselungsmethode fur Teilantworttabellen unsealResults() auf und ubergibt ihr die Teilantwortentabelle. Diese Methode entschlusselt jede Teilantwort und geht dabei wie folgt vor: 1. Wenn das Seriennummernfeld des SealedResult nur einen Eintrag serial hat: (a) mit serial wird der passende UnsealerOneKey aus der Entschlusslertabelle geholt (b) der erste Eintrag aus dem Schlusselfeld wird vom UnsealerOneKey zur Binardarstellung bin secret des Sitzungsschlussels entschlusselt 2. Wenn es n Eintrage serial : : : serialn im Seriennummernfeld gibt: (a) fur k = 2 : : : n: 1 1 1 1 108 13 Umsetzung der Auswahl mehrerer Zertikate i. der zu serialk gehorende UnsealerOneKey wird aus der Entschlusslertabelle geholt. ii. der k-te Eintrag aus dem Schlusselfeld wird vom UnsealerOneKey zu bin secretk entschlusselt (b) bin secret2 ; : : : ; bin secretn werden zusammen mit dem ersten Eintrag aus dem Schlusselfeld bitweise mit exklusivem ODER verknupft; das Ergebnis ist die Binardarstellung des Sitzungsschlussels bin secret1 : bin secret1 = antival bin secret2 : : : bin secretn 3. bin secret1 wird mittels einer javax.crypto.spec.SecretKeySpec in secret1 (ein Objekt der Klasse javax.crypto.SecretKey) umgewandelt Der Kunde kann die n 1 Zusatzschlussel nur mit dem jeweils passenden privaten RSA-Schlussel entschlusseln. Auch die bitweise Kontravalenz der Zusatzschlussel und des Sitzungsschlussels erhalt er nur mit dem passenden RSA-Schlussel. Den Sitzungsschlussel kann der Kunde nur ausrechnen, wenn wirklich alle Schlussel und die Kontravalenz entschlusseln konnte. Mit diesem Verfahren muss der Kunde also im Besitz aller privaten RSA-Schlussel sein, um den Sitzungsschlussel zu erhalten und damit auf die geschutzten Daten zugreifen zu konnen. Mit dem Sitzungschlussel entschlusselt der UnsealerMultKeys die aktuelle Teilantwort und fugt sie statt der verschlusselten Teilantwort in die Teilantwortentabelle ein. Ist ein Eintrag in der Teilantwortentabelle keine Teilantwort sondern ein Teilcode, wird die Entschlusselungsmethode fur mobile Codes (unsealResultExtractor()) aufgerufen. Fur die Teilantwortentabelle des entschlusselten Teilcodes wird die oben dargestellte Entschlusselungsmethode erneut durchgefuhrt. 109 V. Resu age fu mee und Vorschl r die Zukunft Inhalt 14 Resumee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 15 Vorschlage fur die Zukunft . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 In our country, there are many races living together, but we have not been "able to live together in peace because the situation does not exist where we can trust each other. So trust is a basic element for peace. Unless we can trust each other, unless we can be sure that we will receive justice, and that we also have to give justice, we can not achieve peace.\ Daw Aung San Suu Kyi 110 14 Resumee 14 Resumee Das Konzept der Mediation wurde eingefuhrt, um die Informationssuche in einer Unmenge von Daten zu erleichtern. Das Multimediamediator-Konzept sieht die drei Teilnehmerrollen Kunde, Mediator und Datenquelle vor. Vorteilhaft fur alle Teilnehmer ware es, wenn der Mediator auf die Anfrage eines Kunden eine verschlusselte Gesamtantwort mit relationalen Operatoren auf verschlusselten Teilantworten der Datenquellen berechnen konnte. In dieser Arbeit wurden daher zunachst aktuelle Forschungergebnisse aus dem Bereich der Berechnungen auf verschlusselten Daten vorgestellt. Eine Umsetzung auf den Multimediamediator ist jedoch derzeit (oder vielleicht sogar generell) nicht moglich, selbst dann nicht, wenn die Teilantworten mit nur einem Schlussel verschlusselt wurden. Das Multimediamediator-System braucht daher eine andere Moglichkeit, dem Kunden die Gesamtantwort zukommen zu lassen, ohne dem Mediator Informationen uber die Teilantworten und die Gesamtantwort zu enthullen. Das fuhrt dazu, dass der Kunde im Vergleich zum unverschlusselten Verfahren zusatzliche Aufgaben ubernehmen muss. Nur er kann und darf die Teilantworten entschlusseln und muss danach aus den Teilantworten die Gesamtantwort berechnen. Als Berechnungsverfahren wurden die beiden Paradigmen "mobiler Code\ und "mobile Daten\ verglichen. Dabei ergab sich, dass mobiler Code seine Vorteile gegenuber mobilen Daten im Multimediamediator-Konzept nicht voll ausspielen kann; der Mediator nimmt ihm mogliche Rationalisierungen durch die Bundelung der Teilantworten schon ab. Mobiler Code ist jedoch insgesamt exibler als mobile Daten. Die Ausfuhrungsumgebung des mobilen Codes ist klein und arbeitet mit den allgemeinen Schnittstellen des mobilen Codes, die sich selten andern. Aktualisierungen der Ausfuhrungumgebung sind daher genauso selten notig. Es werden weniger Daten stationar auf dem Kundenrechner benotigt, denn jeder Code bringt seine aktuellen Bibliotheken mit. Das vermeidet Inkompatibilitaten, wie sie zwischen Bearbeitungsprogramm und Datenformat mobiler Daten auftreten konnen. Mobiler Code bringt vielseitige Moglichkeiten zur Erweiterung, da neue Formate und Operatoren zur Laufzeit eingefugt werden konnen. Diese Punkte wurden als die charakteristischen Vorteile fur ein dynamisches System wie das des Multimediamediators herausgestellt. Es wird nicht vorausgesetzt, dass der Kunde dem Mediator als Codehersteller vertraut; der mobile Code konnte den Kunden wahrend der Ausfuhrung auf vielfaltige Weise angreifen. Mogliche Angrie des Codes wurden umfassend erortert. Als Abwehrmanahmen wurden statische und dynamische U berprufungen vorgestellt. Andersherum wurden Angrie des Kunden auf den mobilen Code betrachtet. Wenn der Kunde Daten oder Programmcode des mobilen Codes verandert, schadet er nur sich selbst. Als besonderes Problem wurde jedoch identiziert, dass Programmcode und Daten des mobilen Codes von unterschiedlichen Stellen kommen. Aus diesem Grunde konnte der Programmcode innerhalb des mobilen Codes die unverschlusselten Daten auf dem Kundenrechner mit schadlichen Operatoren angreifen. Dies entspricht jedoch der generellen Frage nach der semantischen Korrektheit des Programmcodes. Der Kunde kann nur mit einer U berprufung des Programmcodes feststellen, ob der Code falsche Berechnungen auf den Daten ausfuhrt. Bei einer Hierarchisierung der Mediatoren sind verschiedene Mediatoren Hersteller von Teilcodes. Diese Teilcodes konnen sich wahrend der Ausfuhrung auf dem Kundenrechner sogar gegenseitig angreifen. Bei der praktischen Umsetzung wurde fur jede Teilnehmerrolle des Mediatorsystems ein Modul implementiert: ein Kundenmodul, ein Mediatormodul und ein Datenquellenmodul. Die Kommunikation zwischen den Modulen ndet uber RMI statt. Es wurden als Erweiterungen ein Verfahren zur mehrfachen Verschlusselung von Teilantworten mit unterschiedlichen oentlichen Schlusseln umgesetzt und die Grundlage fur eine Hierarchisierung von Mediatoren geschaen. 111 Das Kundenmodul bietet folgende Funktionen: beliebig viele X.509-Zertikate, die oentliche RSA-Schlussel des Kunden enthalten, konnen aus mehreren Schlusselspeichern ausgewahlt werden der Signaturprufschlussel des gewunschten Mediators kann aus einem beliebigen Schlusselspeicher ausgewahlt werden mit einem entsprechenden Kryptographie-Anbieter konnen mobiler Code und Teilantworten, die mit beliebigen Verfahren verschlusselt wurden, wieder entschlusselt werden der Binarcode eines mobilen Codes wird zur Laufzeit durch einen anwendungsspezischen Klassenlader geladen; neue Datenformate und Operatoren werden so eingebunden das Kundenmodul warnt den/die Benutzer(in) bei einer falschen Signatur, einem falschen Zeitstempel und bei mehrfachen Klassendenitionen im Binarcode des mobilen Codes Das Mediatormodul bietet folgende Funktionen: es konnen eine Datenquelle oder ein Mediator gewahlt werden, an die Teilfragen delegiert werden; zu der Datenquelle kann eine beliebige Datenbank angegeben werden der Signierschlussel des gewunschten Mediators kann aus einem beliebigen Schlusselspeicher ausgewahlt werden der symmetrische Verschlusselungsalgorithmus ist mit entsprechendem KryptographieAnbieter frei einstellbar Das Datenquellenmodul bietet folgende Funktionen: es konnen ein beliebiger Datenbankserver und ein entsprechender Datenbanktreiber gewahlt werden Der symmetrische Verschlusselungsalgorithmus ist mit entsprechendem KryptographieAnbieter frei einstellbar In allen Modulen lassen sich die Einstellungen zur Laufzeit andern. Die Verschlusselungs- und Signieralgorithmen konnen in jeder Instanz eines Moduls frei gewahlt werden und neue Algorithmen konnen mit einem aktuellen Kryptographie-Anbieter zusatzlich eingefugt werden. Alle Module enthalten zahlreiche graphische Fehlermeldungen. Es wurden insgesamt 68 Klassendateien mit 9315 Zeilen Code produziert. Wahrend der Programmierung wurde deutlich, dass der mobile Code vor einem Zugri des Kunden nicht geschutzt ist. Andersherum kann der Kunde lange und rechenintensive Berechnungen des mobilen Codes mit der Programmiersprache Java nicht einschranken. Es wurde durch einen entsprechenden Entwurf jedoch erreicht, dass andere Angrie des mobilen Codes abgewehrt werden konnen: Berechtigungen auf dem Kundenrechner werden nur dem Kundenmodul zugewiesen; der mobile Code braucht keine Berechtigungen. Der Zugri auf Java-Standardklassen wird fur den mobilen Code eingeschrankt. Um Komplotte von zwei Codes zu auszuschlieen, mussen mobilen Codes jeweils in einem eigenen Java-Prozess gestartet werden. Das Gleiche gilt, um zu verhindern, dass Ressourcendiebstahl eines Codes andere Codes in Mitleidenschaft zieht. 112 15 Vorschlage fur die Zukunft 15 Vorschlage fur die Zukunft In dieser Diplomarbeit ging es vorrangig um die technische Umsetzung und Sicherung auf Kundenseite. Um den Multimediamediator wirklich einsatzfahig zu machen, muss vor allem die Zugriskontrolle auf Datenbankseite umgesetzt werden. Die von mir verwendeten X.509Zertikate, in denen der Name des Kunden steht, sollten durch Eigenschaftsnachweise ersetzt werden, die unabhangig von der Identitat des Kunden nur seine Eigenschaften mit seinem offentlichen Schlussel verbinden. Ein zweites wichtiges Modul ist ein Algorithmus, der dem Mediator die Zuweisung von Teilanfragen an einzelne Datenbanken und Mediatoren ermoglicht. Fur eine Weiterleitung an Mediatoren muss es moglich sein, komplexere Teilanfragen zu identizieren, die der beauftragte Mediator zu einem eigenen Algebrabaum weiter aufspalten kann. Zu einer Weiterleitung gehort es auerdem, eine adaquate Teilmenge der Eigenschaftsnachweise aus der Anfrage zu bilden. Fur den Mediator gibt es eine Vielzahl von zusatzlichen Diensten, die er ubernehmen kann. Er konnte etwa Informationen uber die Qualitat der erstellten Antwort mit in die Antwort einfugen. Falls Datenquellen kurzfristig ausfallen, muss er zur Bearbeitungszeit darauf reagieren und Ersatz-Datenquellen ansprechen. Auerdem konnen die Teilanfragen asynchron und damit parallel gestellt werden, so dass der Antwortbaum auf dem Mediator schneller erstellt werden kann. Das von mir entwickelte System konnte noch um die Signierung der Teilantworten erweitert werden. Wenn Zertikate mit den entsprechenden Signaturprufschlusseln mit dem mobilen Code an den Kunden geschickt wurden, konnte der Kunde die Integritat der Teilantworten prufen. Es konnten auerdem Verfahren, die die Korrektheit des Algebrabaums oder die Unschadlichkeit der Operatoren nachweisen, eingehender untersucht werden. In der nachsten Java-Version 1.5 werden voraussichtlich Klassen (im Paket java.lang.management) enthalten sein, die ein U berwachen eines Programmes wahrend der Ausfuhrung ermoglichen. Es konnten daher auch Funktionen in das Kundenmodul integriert werden, die die Ausfuhrung des mobilen Codes uberwachen. Ein anderer Ansatzpunkt fur weitere Arbeiten ist die Anfrage des Kunden. Es ware zu untersuchen, ob Teile der Anfrage vor dem Mediator verheimlicht werden konnen. Wenn beispielsweise Datenquellen ausschlielich Teilanfragen der Form "select * from tablename\ erhalten, muss Vergleichskonstanten enthalten. Spaltendie Anfrage keine Angaben uber Spaltennamen oder namen und Vergleichskonstanten konnten daher durch Platzhalter ersetzt und erst auf dem Kundenrechner wieder eingesetzt werden. Zur Zeit stellt der Kunde eine vollstandige SQLAnfrage, in der Attribute und die Namen der Relationen der Datenquellen enthalten sind. Der Kunde soll jedoch gar nicht so viel uber den Aufbau der Datenbanken der Datenquellen wissen. Hier muss der Mediator seiner Aufgabe gerecht werden und mit seinem Anwendungsschema und einem Sichtenmechanismus als Zwischenschicht fungieren. Eine groe Erleichterung fur den Kunden ware es, wenn er naturlichsprachliche Anfragen losgelost von der Syntax einer Anfragesprache stellen konnte. Der Mediator kann die Anfrage dann mit Hilfe eines Semantik-Modul interpretieren, das geeignete Ontologien bereitstellt. Ideal ist und bleibt fur das Multimediamediator-System eine Berechnung des Mediators auf den verschlusselten Teilantworten. Falls das uberhaupt moglich ist, mussen hierzu jedoch Berechnungsverfahren entwickelt werden, die es ermoglichen, auf Daten zu rechnen, die mit verschiedenen Schlusseln oder sogar mehrfach verschlusselt wurden. 113 VI. Anhang Inhalt A B C D E F G Ubersicht der Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sequenzdiagramm einfach (Kunde) . . . . . . . . . . . . . . . . . . . . . Sequenzdiagramm einfach (Mediator und Datenquelle) . . . . . . . . . Sequenzdiagramm erweitert (Kunde) . . . . . . . . . . . . . . . . . . . . Sequenzdiagramm erweitert (Mediator und Datenquelle) . . . . . . . Verwendete Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Datentrager mit Bedienungsanleitung, Programmen und Quellcode . . . . . . . . . . . . . . . 115 116 117 118 119 120 121 114 115 A Ubersicht der Pakete Abbildung 28: Alle Unterpakete von org.mmm 116 B Sequenzdiagramm einfach (Kunde) B Sequenzdiagramm einfach (Kunde) Abbildung 29: Sequenzdiagramm des Kundenmoduls ohne Mehrfachverschlusselung 117 C Sequenzdiagramm einfach (Mediator und Datenquelle) Abbildung 30: Sequenzdiagramm des Mediatormoduls ohne Mehrfachverschlusselung 118 D Sequenzdiagramm erweitert (Kunde) D Sequenzdiagramm erweitert (Kunde) Abbildung 31: Sequenzdiagramm des Kundenmoduls mit Mehrfachverschlusselung 119 E Sequenzdiagramm erweitert (Mediator und Datenquelle) Abbildung 32: Sequenzdiagramm des Mediatormoduls mit Mehrfachverschlusselung 120 F Verwendete Tabellen F Verwendete Tabellen mysql> select distinct * from COFFEES; +--------------------+-------------+-----------+-------+-------+-------+ | COF_NAME | SUPPLIER_ID | VENDOR_ID | PRICE | SALES | TOTAL | +--------------------+-------------+-----------+-------+-------+-------+ | Colombian | 101 | 101 | 7.99 | 0 | 0 | | French_Roast | 49 | 101 | 8.99 | 0 | 0 | | Espresso | 150 | 150 | 9.99 | 0 | 0 | | Colombian_Decaf | 101 | 101 | 8.99 | 0 | 0 | | French_Roast_Decaf | 49 | 101 | 9.99 | 0 | 0 | +--------------------+-------------+-----------+-------+-------+-------+ 5 rows in set (0.00 sec) mysql> select distinct * from COFFEESTASTE; +--------------------+--------+ | COF_NAME | TASTE | +--------------------+--------+ | Colombian | mild | | French_Roast | mild | | Espresso | sweet | | Colombian_Decaf | strong | | French_Roast_Decaf | strong | +--------------------+--------+ 5 rows in set (0.00 sec) mysql> select distinct * from SUPPLIERS; +-------------+----------+ | SUPPLIER_ID | COUNTRY | +-------------+----------+ | 150 | Colombia | | 49 | Kenia | +-------------+----------+ 2 rows in set (0.00 sec) 121 G Datentrager mit Bedienungsanleitung, Programmen und Quellcode 122 Abbildungsverzeichnis Abbildungsverzeichnis 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Schema eines Mediatorsystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . Identitats- und Eigenschaftsnachweise . . . . . . . . . . . . . . . . . . . . . . . . Rechenanbieter fur Datenbanksysteme . . . . . . . . . . . . . . . . . . . . . . . . Angrie des Codes auf den Kunden . . . . . . . . . . . . . . . . . . . . . . . . . . Beweismitfuhrender Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zentrale Position des Mediators . . . . . . . . . . . . . . . . . . . . . . . . . . . . Drei mogliche Angreifer auf die Datenintegritat . . . . . . . . . . . . . . . . . . . Berechnungen mit verschlusselten Funktionen . . . . . . . . . . . . . . . . . . . . Standardklassenlader-Hierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aufrufkette zwischen verschiedenen Schutzbereichen . . . . . . . . . . . . . . . . Benutzungsschnittstelle des Datenquellenmoduls . . . . . . . . . . . . . . . . . . Ablaufschema fur das Datenquellenmodul . . . . . . . . . . . . . . . . . . . . . . Benutzungsschnittstelle des Mediatormoduls (Datenquellenauswahl) . . . . . . . U bersetzung einer SQL-Anfrage in einen Stringbaum . . . . . . . . . . . . . . . . Ablaufschema fur das Mediatormodul . . . . . . . . . . . . . . . . . . . . . . . . Rekursive Komposition fur den Algebrabaum . . . . . . . . . . . . . . . . . . . . Relationale Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vergleichsoperatoren fur die Selektion . . . . . . . . . . . . . . . . . . . . . . . . Benutzungsschnittstelle des Mediatormoduls (Algorithmenauswahl) . . . . . . . . Benutzungsschnittstelle des Kundenmoduls vor der Anfrage . . . . . . . . . . . . Benutzungsschnittstelle des Kundenmoduls nach Ausfuhrung des mobilen Codes MMMClientLoader als Systemklassenlader . . . . . . . . . . . . . . . . . . . . . . Auszug aus der Berechtigungsdatei des Kundenmoduls . . . . . . . . . . . . . . . Hierarchie von Mediatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verschlusselung eines hierarchisierten Codes . . . . . . . . . . . . . . . . . . . . . Benutzungsschnittstelle des Mediatormoduls mit Hierarchisierung . . . . . . . . . Auswahl mehrerer Zertikate in der Benutzungsschnittstelle des Kunden . . . . . Alle Unterpakete von org.mmm . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sequenzdiagramm des Kundenmoduls ohne Mehrfachverschlusselung . . . . . . . Sequenzdiagramm des Mediatormoduls ohne Mehrfachverschlusselung . . . . . . Sequenzdiagramm des Kundenmoduls mit Mehrfachverschlusselung . . . . . . . . Sequenzdiagramm des Mediatormoduls mit Mehrfachverschlusselung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4 11 35 42 43 49 52 59 61 67 67 69 70 71 72 73 74 77 78 78 82 86 96 100 101 105 115 116 117 118 119 123 Tabellenverzeichnis Tabellenverzeichnis 1 2 3 4 5 6 7 8 9 Aufteilung von Entschlusselung und Berechnung zwischen Kunde und Mediator Schemata der Kommunikation des Mediators mit dem Kunden . . . . . . . . . Vergleich des mobilen Codes mit mobilen Daten. . . . . . . . . . . . . . . . . . Angrie des mobilen Codes auf den Kundenrechner . . . . . . . . . . . . . . . . Angrie des Mediators auf den Kunden . . . . . . . . . . . . . . . . . . . . . . Verhinderbarkeit von Angrien mit Java . . . . . . . . . . . . . . . . . . . . . . Laufzeiten der Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Javatypische Angrie des mobilen Codes . . . . . . . . . . . . . . . . . . . . . . Vor- und Nachteile der Hierarchisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 26 32 37 44 54 76 87 99 124 Glossar Glossar Antwortbaum Der Antwortbaum ist ein Teil eines mobilen Codes. Er wird von einem Mediator auf der Basis eines Stringbaums erzeugt. Der Antwortbaum hat denselben Aufbau wie der Stringbaum, aus dem er aufgebaut wird. Der Antwortbaum enthalt jedoch Instanzen von Operatoren (das sind Objekte vom Typ org.mmm.core.ResultOperator) in den inneren Knoten und vor der Entschlusselung Instanzen von verschlusselten Teilantworten (das sind Objekte vom Typ org.mmm.core.SealedResult) in den Blattern. Nach der Entschlusselung des Antwortbaumes benden sich die Teilantworten unverschlusselt in den Blattern (sie sind dann Objekte vom Typ org.mmm.core.Result). Im Falle einer Hierarchisierung von Mediatoren konnen im verschlusselten Algebrabaum in den Blattern auch Instanzen von verschlusselten Teilcodes (das sind Objekte vom Typ org.mmm.core.SealedResultExtractor) vorhanden sein. Nach der Entschlusselung sind es Objekte vom Typ org.mmm.core.ResultExtractor. Binarcode Der Binarcode ist der zweite Teil eines mobilen Codes. Er enthalt Java-Archive in Form von Byte-Feldern (byte[]). In diesen Archiven sind die Klassendenitionen fur die Operatoren und Teilantworten enthalten, die im Antwortbaum dieses mobilen Codes benotigt werden. Gesamtanfrage Die Gesamtanfrage ist die SQL-Anfrage, die der Kunde an seinen primaren Mediator stellt. Gesamtantwort Die Gesamtantwort auf eine Gesamtanfrage ist die Relation, die der Kunde nach der Ausfuhrung des mobilen Codes erhalt, den er auf seine Gesamtanfrage von seinem primaren Mediator bekommen hat. Hauptcode Der Hauptcode eines mobilen Codes wird vom primaren Mediator erstellt. Er enthalt alle Teilcodes des mobilen Codes und ist der Obercode fur alle diese Teilcodes. mobiler Code Ein mobiler Code ist die Antwort eines Mediators auf die Gesamtanfrage eines Kunden. Er enthalt einen Antwortbaum und den dazugehorigen Binarcode. Der Kunde fuhrt den mobilen Code aus, um die Gesamtantwort auf seine Anfrage zu erhalten. Auch jeder Teilcode ist ein mobiler Code. Obercode Ein Teilcode, der noch weitere Teilcodes enthalt, ist ein Obercode fur alle diese Teilcodes. Der Hauptcode ist Obercode fur alle Teilcodes innerhalb eines mobilen Codes. primarer Mediator Der primare Mediator ist der Mediator, an den der Kunde direkt seine Anfrage stellt. Er liefert den Hauptcode an den Kunden zuruck. Glossar 125 sekundarer Mediator Ein sekundarer Mediator ist ein Mediator, an den der primare Mediator Teilanfragen weiterleitet. Stringbaum Dieser Baum wird von der SQL2Algebra-Bibliothek aus einer SQL-Anfrage erstellt. In jedem inneren Knoten des Baumes steht der Name eines relationalen Operators. In jedem Blatt steht der Name einer Relation; dieser Name wird in einer Teilanfrage an eine Datenquelle oder einen weiteren Mediator verwendet. Teilanfrage Eine Teilanfrage ist eine SQL-Anfrage, die ein Mediator an eine Datenquelle oder einen anderen Mediator weiterleitet. Da noch kein Algorithmus fur die Aufspaltung einer Gesamtanfrage in komplexe Teilanfragen besteht, kann nur eine vollstandig aufgespaltene Anfrage an eine Datenquelle oder an einen Mediator weitergeleitet werden. Teilanfragen an Datenquellen ergeben sich aus einem Blatt des Stringbaums, den der Mediator erstellt hat. Mit dem Namen der Relation, der in diesem Blatt des Stringbaums steht, wird die Anfrage select distinct * from relationenname\ erzeugt und an die Datenquelle "gestellt. Teilantwort Eine Teilantwort ist die Antwort einer Datenquelle auf eine Teilanfrage, die ihr von einem Mediator gesendet wurde. Die Datenquelle verschlusselt eine Teilantwort mit einem oder mehreren oentlichen Schlusseln des Kunden, bevor sie sie an den anfragenden Mediator zurucksendet. Der Mediator setzt die Teilantwort als Blatt in seinen Antwortbaum ein. Nur der Kunde kann die Teilantwort mit seinen privaten Schlusseln entschlusseln. Teilantwortentabelle Ein Antwortbaum enthalt eine Tabelle, in der alle verschlusselten Teilantworten und Teilcodes gespeichert sind. Bei der Entschlusselung auf den Kundenrechner werden die verschlusselten durch die unverschlusselten Teilcodes und Teilantworten ausgetauscht; der Antwortbaum muss nicht durchlaufen werden, um Teilantworten oder Teilcodes zu entschlusseln. Teilcode Ein Teilcode ist die Antwort eines Mediators auf eine Teilanfrage eines anderen Mediators. Der Teilcode enthalt einen eigenen Antwortbaum und eigenen Binarcode. Er wird vom Mediator mit einem oentlichen Schlussel des Kunden verschlusselt, bevor er an den anfragenden Mediator zuruckgesendet wird. Dieser Mediator setzt den Teilcode als Blatt in seinen Antwortbaum ein. Nur der Kunde kann den Teilcode mit einem seiner privaten Schlusseln entschlusseln. Ein Teilcode kann andere Teilcodes enthalten. Er ist dann der Obercode fur diese Teilcodes. Direkte Teilcodes sind fur einen Mediator die Teilcodes, die er von Mediatoren bekommt, die eine Stufe unter ihm in der Hierarchie liegen. 126 Literatur Literatur [ABFK03] Altenschmidt, Christian, Joachim Biskup, Ulrich Flegel und Y ucel Karabulut: Se- cure mediation: requirements, design and architecture. 398, Juni 2003. [ABK01] [ACCK01] [AMP04] [Auc98] [Bau00] [BCP] [BGI+ 01] [BGS98] [Bla03] [BMW98] [Bre95] [BY98] Journal of Computer Security, 11(3):365{ Altenschmidt, Christian, Joachim Biskup und Y ucel Karabulut: Security Architechture of the Multimedia Mediator. In: Data and Application Security: Developments and Directions, Proceedings of the 14th Annual IFIP WG 11.3 Working Conference on Database Security. Kluwer Academic Press, 2001. Algesheimer, Joy, Christian Cachin, Jan Camenisch und G unther Karjoth: Cryptographic Security for Mobile Code. In: IEEE Symposium on Security and Privacy, Seiten 2{11, 2001. Neuere Version unter: http://www.zurich.ibm.com/~jca/papers/secmob.pdf, Stand: 22. Juni 2009. Aggarwal, Gagan, Nina Mishra und Benny Pinkas: Secure Computation of the k th-Ranked Element, Seiten 40{55. Band 3027 der Reihe Cachin, Christian [Cac04], 2004. ISBN-3-54021935-8, Signatur BI-UNIDO: LNCS/3027. Aucsmith, David (Herausgeber): Second workshop on information hiding, Band 1525 der Reihe Lecture Notes in Computer Science. Portland, Oregon, USA, 1998. ISBN-3-540-65386-4 , Signatur BI-UNIDO: 3378/1998. Baumann, Joachim: Mobile agents: control algorithms, Band 1658 der Reihe Lecture notes in computer science. Springer, Berlin [u.a.], 2000. ISBN-3-540-41192-5, Signatur BI-UNIDO: LNCS/1658. The Legion of the Bouncy Castle. http://www.bouncycastle.org/, Stand: 22. Juni 2009. Barak, Boaz, Oded Goldreich, Rusell Impagliazzo, Steven Rudich, Amit Sahai, Salil Vadhan und Ke Yang: On the (Im)possibility of Obfuscating Programs, Seiten 1{19. Band 2139 der Reihe Kilian, Joe [Kil01], 2001. ISBN-3-540-42456-3, Signatur BI-UNIDO: LNCS/2139. Berkovits, Shimshon, Joshua D. Guttman und Vipin Swarup: Authentication for Mobile Agents, Seiten 115{136. Band 1419 der Reihe Vigna, Giovanni [Vig98], 1998. ISBN-3-54064792-9, Signatur BI-UNIDO: 3378/MOBI. Blaze, Matt (Herausgeber): Financial Cryptography, Band 2357 der Reihe Lecture notes in computer science. Springer, Berlin [u.a.], 2003. ISBN-3-540-00646-X, Signatur BI-UNIDO: LNCS/2357. Biehl, Ingrid, Bernd Meyer und Susanne Wetzel: Ensuring the Integrity of Agent-Based Computations by Short Proofs, Seiten 183{194. Band 1477 der Reihe Rothermel, Kurt [Rot98], 1998. ISBN-3-540-64959-X, Signatur BI-UNIDO: 3360/1998. Breidenbach, Stephan: Mediation { Struktur, Chancen und Risiken von Vermittlung im Konikt. Schmidt, Koln, 1995. ISBN-3-504-06110-3, Signatur ZB-UNIDO: Bg 16501. Belmon, Stephane G. und Bennet S. Yee: Mobile Agents and Intellectual Property Protection, Seiten 172{182. Band 1477 der Reihe Rothermel, Kurt [Rot98], 1998. ISBN-3-54064959-X, Signatur BI-UNIDO: 3360/1998. 127 Literatur [Cac04] [Cas01] [CCKM00] Cachin, Christian (Herausgeber): Advances in cryptology, Band 3027 der Reihe Lecture notes in computer science. LNCS/3027. Casati, Fabio Springer, Berlin [u.a.], 2004. ISBN-3-540-21935-8, Signatur BI-UNIDO: (Herausgeber): Technologies for E-services, Band 2193 der Reihe Lecture notes Springer, Berlin [u.a.], 2001. ISBN-3-540-64959-X, Signatur BI-UNIDO: in computer science. LNCS/2193. und Joy Muller: One-Round Secure Seiten 512{523. Band 1853 der Reihe Montanari, Ugo [Mon00], 2000. ISBN-3-540-67715-1, Signatur BI-UNIDO: LNCS/1853. [Che98] Chess, David M.: Security Issues in Mobile Code Systems, Seiten 1{14. Band 1419 der Reihe Vigna, Giovanni [Vig98], 1998. ISBN-3-540-64792-9, Signatur BI-UNIDO: 3378/MOBI. [Con96] Connolly, Dan: Mobile Code. http://www.w3.org/MobileCode/, 1996. Stand: 22. Juni 2009. [Dag95] Dageforde, Mary: The Java Tutorial, Trail: Security in Java 2 SDK 1.2. http://java.sun.com/docs/books/tutorial/security1.2/, 1995. c Sun Microsystems, Inc. 1995-2003, Stand: 22. Juni 2009. [Den82] Denning, Dorothy Elizabeth Robling: Cryptography and data security. AddisonWesley Publishing Company, Reading, Mass., 1982. ISBN-0-201-10150-5, Signatur BI-UNIDO: 3560/Denn. [Dit00] Dittmann, Jana: Digitale Wasserzeichen. Springer, Berlin, 2000. ISBN-3-540-66661-3, Signatur ZB-UNIDO: Sn 21444. [DWK81] Davida, George I., David L. Wells und John B. Kam: A Database Encryption System with Subkeys. ACM Transactions on Database Systems, 6(2):312{322, Juni 1981. [ECL] Eclipse Foundation. http://www.eclipse.org/, Stand: 22. Juni 2009. [Eng03] Englbrecht, Michael: Entwicklung sicherer Software. Spektrum { akademischer Verlag, Heidelberg, 2003. ISBN-3-8274-1432-6, Signatur ZB-UNIDO: Sn 22453. [FDS] Formatted Data Set Java API. http://www.fdsapi.com/. Sourceforge-Projekt, Stand: 22. Juni 2009. [FNP04] Freedman, Michael J., Kobbi Nissim und Benny Pinkas: Ecient Private Matching and Set Intersection, Seiten 1{19. Band 3027 der Reihe Cachin, Christian [Cac04], 2004. ISBN3-540-21935-8, Signatur BI-UNIDO: LNCS/3027. [Fon98] Fong, Philip W.L.: Viewer's Discretion: Host Security in Mobile Code Systems. [FSW03] Cachin, Christian, Jan Camenisch, Joe Kilian Computation and Secure Autonomous Mobile Agents, http://www.cs.sfu.ca/people/GradStudents/pwfong/personal/Pub/SFU-CMPT-TR-1998-19 .pdf, 1998. Stand: 22. Juni 2009. Fouque, Pierre-Alain, Jacques Stern und Geert-Jan Wackers: CryptoComputing with rationals, Seiten 136{146. Band 2357 der Reihe Blaze, Matt [Bla03], 2003. ISBN-3-540-00646- X, Signatur BI-UNIDO: LNCS/2357. [GHJV95] Gamma, Erich, Richard Helm, Ralph und John Vlissides: Design Patterns: Addison-Wesley Publishing Company, New York, 1995. ISBN-0-201-63361-2, Signatur ZB-UNIDO: L Sr 441. c 2001-2004 The GIMP Team, Stand: 22. Juni 2009. [GIM] The Gimp. http://www.gimp.org/, [GKCR98] Gray, Robert S., David Kotz, George Cybenko und Daniela Rus: D'Agents: Security in a Multiple-Language Mobile-Agent System, Seiten 154{187. Band 1419 der Reihe Vigna, Giovanni [Vig98], 1998. ISBN-3-540-64792-9, Signatur BI-UNIDO: 3378/MOBI. Johnson Elements of Reusable Object-Oriented Software. 128 [GMPS97] [Gol04] [Gon02] [HCK95] [HILM02] [Hoh98] [JAA04] [JAS] [JAV] [JCE04] [KAG98] [Kar02] [KE96] [Kil01] [KLO98] [LBR02] Literatur Gong, Li, Marianne Mueller, Hemma Prafullchandra und Roland Schemers: Going Beyond the Sandbox: An Overview of the New Security Architecture in the Java Development Kit 1.2. In: USENIX Symposium on Internet Technologies and Systems, Seiten 103{112, Monterey, CA, 1997. Goldreich, Oded: Foundations of Cryptography {Volume II Basic Applications. Cambridge University Press, 2004. ISBN-0-521-83084-2. Gong, Li: JavaTM 2 Platform Security Architecture. http://java.sun.com/j2se/1.4.2/docs/guide/security/spec/security-spec.doc.html, 2002. c Sun Microsystems, Inc. 1997-2002, Stand: 22. Juni 2009. Harrison, Colin G., David M. Chess und Aaron Kershenbaum: Mobile Agents: Are they a good idea? http://www.research.ibm.com/massive/mobag.ps, 1995. Stand: 22. Juni 2009. Hacig um us, Hakan, Balakrishna R. Iyer, Chen Li und Sharad Mehrotra: Executing SQL over Encrypted Data in the Database Service Provider Model. In: SIGMOD Conference, 2002. Hohl, Fritz: Limited Time Blackbox Security: Protecting Mobile Agents from Malicous Hosts, Seiten 1{14. Band 1419 der Reihe Vigna, Giovanni [Vig98], 1998. ISBN-3-540-64792-9, Signatur BI-UNIDO: 3378/MOBI. Java Authentication and Authorization Service (JAAS). c Sun Microsystems, Inc. 1994-2004, Stand: http://java.sun.com/products/jaas/, 2004. 22. Juni 2009. Secure Computing with Java: Now and the Future. c Sun Microsystems, Inc. http://java.sun.com/security/javaone97-whitepaper.html. 1994-2004, Stand: 22. Juni 2009. c Sun Microsystems, Inc. 1994-2004, Stand: 22. Juni Java Technology. http://java.sun.com/. 2009. c Sun MiJava Cryptography Extension (JCE). http://java.sun.com/products/jce/, 2004. crosystems, Inc. 1994-2004, Stand: 22. Juni 2009. Karjoth, G unther, Nadarajah Asokan und Ceki G ulc u: Protecting the Computation Results of Free-Roaming Agents, Seiten 195{207. Band 1477 der Reihe Rothermel, Kurt [Rot98], 1998. ISBN-3-540-64959-X, Signatur BI-UNIDO: 3360/1998. Karabulut, Y ucel: Secure mediation between strangers in cyberspace. Dissertation, Universitat Dortmund, Fachbereich Informatik, Oktober 2002. Signatur ZB-UNIDO: DissDo 2002/118. Eickler: Datenbanksysteme { Eine Einfuhrung. Oldenbourg, Kemper, Alfons und Andre Munchen, 1996. ISBN-3-486-23008-5, Handapparat des Lehrstuhls 6. Kilian, Joe (Herausgeber): Advances in cryptology, Band 2139 der Reihe Lecture notes in computer science. Springer, Berlin [u.a.], 2001. ISBN-3-540-42456-3, Signatur BI-UNIDO: LNCS/2139. Karjoth, G unther, Danny B. Lange und Mitsuru Oshima: A Security Model for Aglets, Seiten 188{205. Band 1419 der Reihe Vigna, Giovanni [Vig98], 1998. ISBN-3-540-64792-9, Signatur BI-UNIDO: 3378/MOBI. Loureiro, Sergio, Laurent Bussard und Yves Roudier: Extending Tamper-Proof Hardware Security to Untrusted Execution Environments. In: Proceedings of the Fifth Smart Card Research and Advanced Application Conference, CARDIS 2002, Seiten 111{124, 2002. Auch online Literatur 129 unter: http://www.usenix.org/events/cardis02/full_papers/loureiro/loureiro_html/, Stand: 22. Juni 2009. [Lee97] Lee, Peter: Proof-Carrying Code. http://www-2.cs.cmu.edu/~petel/papers/pcc/pcc.html, 1997. Stand: 22. Juni 2009. [LM99] Loureiro, Sergio und Refik Molva: Privacy for Mobile Code. In: Proceedings of the workshop on Distributed Object Security, OOPSLA, Seiten 37{42, 1999. [LPS04] Lynn, Benjamin, Manoj Prabkaharan und Amit Sahai: Positive Results and Techniques for Obfuscation, Seiten 20{39. Band 3027 der Reihe Cachin, Christian [Cac04], 2004. ISBN3-540-21935-8, Signatur BI-UNIDO: LNCS/3027. [Mag98] MageLang Institute: Fundamentals of Java Security. c Sun http://java.sun.com/developer/onlineTraining/Security/Fundamentals/, 1998. Microsystems, Inc. 1994-2004, Stand: 22. Juni 2009. [MF99] McGraw, Gary und Edward Felten: Securing Java. John Wiley and Sons, New York, 1999. ISBN-0-471-31952-x, Signatur ZB-UNIDO: Sn 20731. [MIC] Microsoft Corporation. c Microsoft Coporation 2004, Stand: 22. Juni 2009. http://www.microsoft.com/. [MNPS04] Malkhi, Dahlia, Noam Nisan, Benny Pinkas und Yaron Sella: Fairplay { A Secure TwoParty Computation System. In: Proceedings of the 13th USENIX Security Symposium, Seiten 287{302, 2004. Auch online unter: http://www.pinkas.net/, Stand: 22. Juni 2009. [Mon00] Montanari, Ugo (Herausgeber): Automata, languages and programming, Band 1853 der Reihe Lecture notes in computer science. Springer, Berlin [u.a.], 2000. ISBN-3-540-67715-1, Signatur BI-UNIDO: LNCS/1853. [Nec02] Necula, George C.: Proof-Carrying Code. http://raw.cs.berkeley.edu/pcc.html, 2002. Stand: 22. Juni 2009. [NL98] Necula, George C. und Peter Lee: Safe, Untrusted Agents Using Proof-Carrying Code, Seiten 61{91. Band 1419 der Reihe Vigna, Giovanni [Vig98], 1998. ISBN-3-540-64792-9, Signatur BI-UNIDO: 3378/MOBI. [OLW98] Ousterhout, John K., Jacob Y. Levy und Brent B. Welch: The Safe-Tcl Security Model, Seiten 217{234. Band 1419 der Reihe Vigna, Giovanni [Vig98], 1998. ISBN-3-540-64792-9, Signatur BI-UNIDO: 3378/MOBI. [OPE] OpenOce.org. http://www.openoffice.org/, Stand: 22. Juni 2009. [Pai99] Paillier, Pascal: Public-Key Cryptosystems Based on Composite Degree Residuosity Classes, Seiten 223{238. Band 1592 der Reihe Stern, Jacques [Ste99], 1999. ISBN-3-540-65889-0, Signatur BI-UNIDO: 3560/1999. [PAK98] Petitcolas, Fabien A.P., Ross J. Anderson und Markus G. Kuhn: Attacks on Copyright Marking Systems, Seiten 218{238. Band 1525 der Reihe Aucsmith, David [Auc98], 1998. ISBN3-540-65386-4 , Signatur BI-UNIDO: 3378/1998. [Pei02] Peine, Holger: Run-Time Support for Mobile Code. Dissertation, Universitat Kaiserslautern, Fachbereich Informatik, Oktober 2002. ISBN-3-925178-93-7, ISSN-1610-2673, Signatur ZB-UNIDO: Diss 2002/629. [Per97] Permissions in the JavaTM 2 SDK. c Sun http://java.sun.com/j2se/1.4.2/docs/guide/security/permissions.html, 1997. Microsystems, Inc. 1997-2000, Stand: 22. Juni 2009. 130 [Pri01] [Rec03] [Rot98] [Rou03] [RR83] [RS98] [RSA] [SBK01] [Sch02] [ST98] [Ste99] [SUN] [SYY99] [TCG] [Vck99] [Vig98] [VJ99] Literatur API for Privileged Blocks. c Sun http://java.sun.com/j2se/1.4.2/docs/guide/security/doprivileged.html, 2001. Microsystems, Inc. 1997-2000, Stand: 22. Juni 2009. Rechenberg, Peter: Technisches Schreiben { (nicht nur) fur Informatiker. Hanser, Munchen, 2003. ISBN-3-446-22472-6, Signatur BI-UNIDO: 3150/Rech. Rothermel, Kurt (Herausgeber): Mobile agents, Band 1477 der Reihe Lecture notes in computer science. Springer, Berlin [u.a.], 1998. ISBN-3-540-64959-X, Signatur BI-UNIDO: 3360/1998. Roubtsov, Vladimir: Cracking Java byte-code encryption. http://www.javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html, 2003. c JavaWorld.com 2004, Stand: 22. Juni 2009. Rushby, John und Brian Randell: A Distributed Secure System. IEEE Computer, 16(7):55{ 67, Juli 1983. Riordan, James und Bruce Schneier: Environmental Key Generation Towards Clueless Agents, Seiten 15{24. Band 1419 der Reihe Vigna, Giovanni [Vig98], 1998. ISBN-3-54064792-9, Signatur BI-UNIDO: 3378/MOBI. RSA Security Inc. c RSA Security Copyright 2004, Stand: 22. Juni 2009. Seltzsam, Stefan, Stephan B orzs onyi und Alfons Kemper: Security for Distributed EService Composition, Seiten 147{162. Band 2193 der Reihe Casati, Fabio [Cas01], 2001. ISBN3-540-64959-X, Signatur BI-UNIDO: LNCS/2193. Schneier, Bruce: Angewandte Kryptographie. Addison Wesley, Munchen, 2002. ISBN-3-89319854-7, Signatur ZB-UNIDO: Sn 20503. Sander, Tomas und Christian F. Tschudin: Protecting Mobile Agents Against Malicious Hosts, Seiten 44{60. Band 1419 der Reihe Vigna, Giovanni [Vig98], 1998. ISBN-3-540-647929, Signatur BI-UNIDO: 3378/MOBI. Stern, Jacques (Herausgeber): Advances in cryptology, Band 1592 der Reihe Lecture notes in computer science. Springer, Berlin [u.a.], 1999. ISBN-3-540-65889-0, Signatur BI-UNIDO: 3560/1999. Sun Microsystems, Inc. c Sun Microsystems, Inc 2004, Stand: 22. Juni 2009. http://www.sun.com/. Sander, Tomas, Adam Young und Moti Yung: Non-Interactive CryptoComputing For NC 1. In: IEEE Symposium on Foundations of Computer Science, Seiten 554{567, 1999. Trusted Computing Group. c TCG 2004, Stand: 22. Juni 2009. https://www.trustedcomputinggroup.org/. Vckovski, Andrej (Herausgeber): Interoperating geographic information systems, Band 1580 der Reihe Lecture notes in computer science. Springer, Berlin [u.a.], 1999. ISBN-3-540-65725-8, Signatur BI-UNIDO: 3379/1999. Vigna, Giovanni (Herausgeber): Mobile agents and security, Band 1419 der Reihe Lecture notes in computer science. Springer, Berlin [u.a.], 1998. ISBN-3-540-64792-9, Signatur BI-UNIDO: 3378/MOBI. Vitek, Jan und Christian Jensen (Herausgeber): Secure Internet Programming: Security Issues for Mobile and Distributed Objects, Band 1603 der Reihe Lecture Notes in Computer Science. Springer, Berlin, 1999. ISBN-3-540-66130-1, Signatur BI-UNIDO: LNCS/1603. http://www.rsasecurity.com/. Literatur [VS98] [Weg96] [WG97] [Wie99] [Yee99] [Yel96] [YT95] [YY04] 131 Volpano, Dennis und Geoffrey Smith: Language Issues in Mobile Program Security, Seiten 25{43. Band 1419 der Reihe Vigna, Giovanni [Vig98], 1998. ISBN-3-540-64792-9, Signatur BI-UNIDO: 3378/MOBI. Wegener, Ingo: Eziente Algorithmen fur grundlegende Funktionen. Teubner, Stuttgart, 1996. ISBN-3-519-12276-6, Signatur ZB-UNIDO: L Sr 193. Wiederhold, Gio und Michael Genesereth: The Conceptual Basis for Mediation Services. IEEE Expert Intelligent Systems and their Applications, 12(5):38{47, 1997. Wiederhold, Gio: Mediation to Deal with Heterogeneous Data Sources, Seiten 1{16. Band 1580 der Reihe Vckovski, Andrej [Vck99], 1999. ISBN-3-540-65725-8, Signatur BI-UNIDO: 3379/1999. Yee, Bennet S.: A Sanctuary for Mobile Agents. In: Vitek, Jan und Christian Jensen [VJ99], Seiten 261{274. ISBN-3-540-66130-1, Signatur BI-UNIDO: LNCS/1603. Yellin, Frank: Low Level Security in Java. http://java.sun.com/sfaq/verifier.html, 1996. c Sun Microsystems, Inc. 1996, Stand: 22. Juni 2009. Yee, Bennet und J. D. Tygar: Secure Coprocessors in Electronic Commerce Applications. In: Proceedings of the First USENIX Workshop of Electronic Commerce., Seiten 155{170, Berkeley, CA, USA, 1995. USENIX Assoc. Young, Adam und Moti Yung: Malicious Cryptography { Exposing Cryptovirology. Wiley, Indianapolis, Ind., 2004. ISBN-0-7645-4975-8, Signatur BI-UNIDO: 3378/Youn. 132 Inhaltsverzeichnis Inhaltsverzeichnis Vorwort und Danksagung Zusammenfassung . . . . Abstract . . . . . . . . . Inhaltsubersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I Einleitung 1 Das Konzept der Mediation . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Der Multimediamediator . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Berechnungen des Mediators auf den Teilantworten . . . . . . . . . . . . 3.1 Berechnungen auf verschlusselten Daten . . . . . . . . . . . . . . . . . . 3.2 Auswertung von SQL-Ausdrucken auf verschlusselten Tabellen . . . . . 3.3 Eingeschranktes Verfahren fur Berechnungen des Multimediamediators 3.4 Datensatzverschlusselung mit Teilschlusseln . . . . . . . . . . . . . . . . 3.4.1 Umsetzung auf den Multimediamediator . . . . . . . . . . . . . . 3.4.2 Umsetzung der algebraischen Operatoren . . . . . . . . . . . . . II Diskussion 4 Kommunikationsschemata fur den Multimediamediator 4.1 Anforderungen und Nachteile . . . . . . . . . . . . . . 4.2 Aufteilung von Entschlusselung und Berechnung . . . 4.3 Kommunikation zwischen Mediator und Kunde . . . . 5 Vor- und Nachteile von mobilem Code . . . . . . . . . . 5.1 Verringerung der ubertragenen Datenmenge . . . . . 5.1.1 Optimierungen der Teilanfragen . . . . . . . . 5.2 Unabhangigkeit von der Netzverbindung . . . . . . . 5.3 Vermeidung eines verteilten Berechnungszustands . . 5.4 Lokalitat von Ressourcen . . . . . . . . . . . . . . . . 5.5 Einfachheit des Empfangersystems . . . . . . . . . . . 5.6 Erweiterbarkeit des Empfangersystems . . . . . . . . 6 Sicherheitsrisiken durch mobilen Code . . . . . . . . . . 6.1 Angrie des mobilen Codes gegen den Kunden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i . iii . iii . v . . . . . . . . . . . . . . . . . . . . 1 2 3 7 8 8 11 12 14 15 15 . . . . . . . . . . . . . . 19 20 20 21 23 28 28 29 29 30 30 31 31 34 35 . . . . . . . . . . . . . . 133 Inhaltsverzeichnis 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.1.1 Spionage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.2 Daten- und Programmkorruption . . . . . . . . . . . . . . . . . . . 6.1.3 Ressourcendiebstahl . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.4 Komplott mehrerer Codes . . . . . . . . . . . . . . . . . . . . . . . 6.1.5 Auftreten unter falscher Identitat . . . . . . . . . . . . . . . . . . . 6.1.6 Nachladen von schadlichem Code . . . . . . . . . . . . . . . . . . . Schutz des Kunden vor Angrien des mobilen Codes . . . . . . . . . . . . 6.2.1 Dynamische Zugriskontrolle . . . . . . . . . . . . . . . . . . . . . 6.2.2 Authentizierung des Codeherstellers . . . . . . . . . . . . . . . . 6.2.3 Programmuberprufung . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.4 Sandkasten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Angrie des Mediators gegen den Kunden . . . . . . . . . . . . . . . . . 6.3.1 Korrektheit der Antwort . . . . . . . . . . . . . . . . . . . . . . . . 6.3.2 Informationelle Selbstbestimmung . . . . . . . . . . . . . . . . . . 6.3.3 Verfugbarkeit des Kundenrechners . . . . . . . . . . . . . . . . . . Schutz des Kunden vor Angrien des Mediators . . . . . . . . . . . . . . 6.4.1 Informationelle Selbstbestimmung des Kunden . . . . . . . . . . . 6.4.2 Korrektheit der Antwort . . . . . . . . . . . . . . . . . . . . . . . . Schutz der Teilantworten auf dem Mediator . . . . . . . . . . . . . . . . . 6.5.1 Klartextangri auf den privaten Schlussel . . . . . . . . . . . . . . 6.5.2 Verandern der Teilantwort . . . . . . . . . . . . . . . . . . . . . . . 6.5.3 Informationen aus der verschlusselten Antwort . . . . . . . . . . . Schutz des mobilen Codes bei der U bertragung . . . . . . . . . . . . . . . Schutz des mobilen Codes auf dem Kundenrechner . . . . . . . . . . . . . 6.7.1 Datenintegritat wahrend des Aufenthalts auf dem Kundenrechner 6.7.2 Geheimhaltung der Daten nach Auslieferung an den Kunden . . . 6.7.3 Geheimhaltung des Programmcodes auf dem Kundenrechner . . . 6.7.4 Integritat der Codeausfuhrung . . . . . . . . . . . . . . . . . . . . 6.7.5 Sichere Koprozessoren . . . . . . . . . . . . . . . . . . . . . . . . . Verhinderbarkeit von Angrien mit Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 36 36 37 38 38 38 39 40 41 43 43 44 44 44 45 45 45 46 46 46 46 47 48 48 50 51 52 52 53 134 III Implementierung 7 Eingesetzte Java-Mechanismen . . . . . . . . . . . . . . . . . . . . . 7.1 Sicherheit auf Binarcode-Ebene . . . . . . . . . . . . . . . . . . . 7.2 Entstehung des Java-Sicherheitskonzepts . . . . . . . . . . . . . . 7.3 Klassenlader-Hierarchie . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Das Java-Berechtigungskonzept . . . . . . . . . . . . . . . . . . . 7.5 Beispielhafte Berechtigungen . . . . . . . . . . . . . . . . . . . . . 7.6 Privilegierter Code . . . . . . . . . . . . . . . . . . . . . . . . . . 7.7 Kryptographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8 Schutz von Java-Archiven . . . . . . . . . . . . . . . . . . . . . . . 7.9 JDBC, RMI und JNI . . . . . . . . . . . . . . . . . . . . . . . . . 8 Umsetzung des Multimediamediators mit mobilem Code . . . . . . 8.1 Datenquellenmodul . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.1 Verschlusselung einer Teilantwort . . . . . . . . . . . . . . . 8.1.2 Datenformate . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Mediatormodul . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.1 Aufbau des Algebrabaums . . . . . . . . . . . . . . . . . . . 8.2.2 Teilanfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.3 Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.4 Signierung und Verschlusselung des mobilen Codes . . . . . 8.3 Kundenmodul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3.1 Ersetzen des Systemklassenladers . . . . . . . . . . . . . . . 8.3.2 Signaturprufung und Entschlusselung des mobilen Codes . . 8.3.3 Entschlusselung der Teilantworten . . . . . . . . . . . . . . 9 Mogliche Angrie auf das Mediatorsystem . . . . . . . . . . . . . . 9.1 Angrie des mobilen Codes auf den Kunden . . . . . . . . . . . . 9.1.1 Angri: Zugri auf Java-Standardklassen . . . . . . . . . . 9.1.2 Angri: O nen eines Eingabefensters . . . . . . . . . . . . . 9.1.3 Angri: O nen einer Netzverbindung . . . . . . . . . . . . . 9.1.4 Angri: Zugri auf den Klassenlader . . . . . . . . . . . . . 9.1.5 Angri: Zugri auf Kundenmodulklassen . . . . . . . . . . 9.1.6 Angri: Native Methoden . . . . . . . . . . . . . . . . . . . 9.1.7 Angri: Zugri auf das Dateisystem und andere Ressourcen 9.1.8 Angri: Komplott mehrerer mobiler Codes . . . . . . . . . 9.2 Angrie Dritter wahrend der U bertragung . . . . . . . . . . . . . Inhaltsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 56 56 57 58 58 61 62 62 64 65 66 66 68 68 69 71 72 73 76 78 81 82 83 85 85 87 88 89 89 89 89 90 90 91 135 Inhaltsverzeichnis 9.3 Angrie auf mobilen Code wahrend des Aufenthalts beim Kunden . . . . . . . . . . . . . . . 92 9.3.1 Angri: Schadliche Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 9.3.2 Angri: U berschreiben von Binarcodes . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 IV Erweiterungen 10 Auswirkungen einer Mediatorhierarchie . . . . . 10.1 Technische Anforderungen . . . . . . . . . . . 10.2 Nachteile fur den Kunden . . . . . . . . . . . . 10.3 Angrie der Teilcodes untereinander . . . . . . 11 Umsetzung der Mediatorhierarchie . . . . . . . . 11.1 Angrie der Teilcodes untereinander . . . . . . 11.1.1 Angri: U berschreiben von Binarcodes . 11.1.2 Angri: Referenzen auf Obercodes . . . 12 Auswahl mehrerer Eigenschaftsnachweise . . . . 13 Umsetzung der Auswahl mehrerer Zertikate . . 13.1 Verschlusselung mit mehreren Schlusseln . . . 13.2 Entschlusselung mit mehreren Schlusseln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 96 97 97 98 100 102 102 102 104 105 105 107 V Resumee und Vorschlage fur die Zukunft 109 14 Resumee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 15 Vorschlage fur die Zukunft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 VI A B C D E F G Anhang U bersicht der Pakete . . . . . . . . . . . . . . . . . . . . . . . . . . Sequenzdiagramm einfach (Kunde) . . . . . . . . . . . . . . . . . . . Sequenzdiagramm einfach (Mediator und Datenquelle) . . . . . . . . Sequenzdiagramm erweitert (Kunde) . . . . . . . . . . . . . . . . . . Sequenzdiagramm erweitert (Mediator und Datenquelle) . . . . . . Verwendete Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . Datentrager mit Bedienungsanleitung, Programmen und Quellcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 . 115 . 116 . 117 . 118 . 119 . 120 . 121 Abbildungsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Tabellenverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Glossar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 136 Inhaltsverzeichnis Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Inhaltsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132