Technische Universität Darmstadt Fachbereich Informatik Fachgebiet Theoretische Informatik - Kryptographie und Computeralgebra Prof. Dr. Johannes Buchmann Implementierung eines Selbstbedienungsclients für eine dezentral administrierbare Trustcenter-Lösung Diplomarbeit von Iskra Tomova Studiengang: Informatik (Diplom) Betreuer: Marcus Lippert (FlexSecure GmbH) Dezember 2007 Hiermit versichere ich, die vorliegende Diplomarbeit selbstständig und nur mit den angegebenen Quellen und Hilfsmitteln angefertigt zu haben. Alle Stellen, die aus den Quellen entnommen wurden, sind als solche kenntlich gemacht worden. Diese Arbeit hat in gleicher oder ähnlicher Form noch keiner Prüfungsbehörde vorgelegen. Darmstadt, den 21. Dezember 2007 Iskra Tomova ii Inhaltsverzeichnis 1 Einleitung 1.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Gliederung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Grundlagen 2.1 ActiveX . . . . . . . . . . . . . . . . 2.1.1 Einbindung in Webseiten . . . 2.1.2 Zugriff auf ActiveX-Objekte . 2.1.3 Sicherheit . . . . . . . . . . . 2.1.4 Unterstützte Plattformen . . . 2.2 Applet . . . . . . . . . . . . . . . . . 2.2.1 Einbindung in Webseiten . . . 2.2.2 Kommunikation zwischen dem 2.2.3 Sicherheit . . . . . . . . . . . 2.2.4 Unterstützte Plattformen . . . 2.3 ActiveX versus Applets . . . . . . . . 2.4 Standardisierte Kartenschnittstellen . 2.4.1 PKCS#11 . . . . . . . . . . . 2.4.2 PC/SC . . . . . . . . . . . . . 2.4.3 OCF . . . . . . . . . . . . . . 3 Ist- und Soll-Analyse 3.1 FlexiTrust Identity Management . . 3.1.1 Komponentenüberblick . . . 3.1.2 Smartcardoperationen . . . 3.1.3 Die OCX-Komponente . . . 3.2 FlexCardAdmin . . . . . . . . . . . 3.2.1 Funktionale Anforderungen 3.2.2 Qualitätsanforderungen . . . 3.2.3 Sicherheitsanforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Applet und der . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Webseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 2 . . . . . . . . . . . . . . . 4 4 5 6 6 7 7 9 9 11 13 13 14 15 16 16 . . . . . . . . 18 18 20 22 24 25 26 29 29 4 Designentstehung 31 4.1 Analyse des Frameworks SmartcardServices . . . . . . . . . . . . . . . . . 31 4.1.1 Implementierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.1.2 Kartenoperationen . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 iii Inhaltsverzeichnis 4.2 4.3 4.1.3 Referenzieren von Objekten auf der Karte . . . . . . . Analyse der Kartenschnittstellen . . . . . . . . . . . . . . . . . 4.2.1 Anforderungen an die Umgebung . . . . . . . . . . . . 4.2.2 Auswahl der Kartenschnittstelle . . . . . . . . . . . . . 4.2.3 Auswahl des Kartenlesers . . . . . . . . . . . . . . . . 4.2.4 Auswahl der Chipkarte . . . . . . . . . . . . . . . . . . 4.2.5 Die Verknüpfung Kartenschnittstelle - Kartenoperation Kommunikation mit dem Enrollment-Server . . . . . . . . . . 5 Technisches Konzept und Implementierung 5.1 Aufbau der Software . . . . . . . . . . . . . . . . . . . . . 5.2 Die Benutzeroberfläche . . . . . . . . . . . . . . . . . . . . 5.2.1 Wizard . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.2 WizardPanel . . . . . . . . . . . . . . . . . . . . . 5.2.3 WizardPanelDescriptor . . . . . . . . . . . . . . . . 5.3 Das Model . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 Verwaltung der Kartenschnittstellendaten . . . . . 5.3.2 Verwaltung der Kartenleserdaten . . . . . . . . . . 5.3.3 Verwaltung der Smartcard-Daten . . . . . . . . . . 5.4 Der Controller . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 Personalisieren einer Smartcard . . . . . . . . . . . 5.4.2 Entsperren der Smartcard . . . . . . . . . . . . . . 5.4.3 Löschen der Karteninhalte . . . . . . . . . . . . . . 5.4.4 PIN ändern . . . . . . . . . . . . . . . . . . . . . . 5.5 Schnittstelle zum Enrollment-Server . . . . . . . . . . . . . 5.5.1 Allgemeine Applet-Parameter . . . . . . . . . . . . 5.5.2 Datenaustausch bei der Smartcard-Personalisierung 5.5.3 Zertifikat auslesen . . . . . . . . . . . . . . . . . . . 5.6 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.1 Allgemeine Parameter . . . . . . . . . . . . . . . . 5.6.2 Kartenlesertreiber . . . . . . . . . . . . . . . . . . . 5.6.3 Referenzen auf Kartenobjekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 34 35 37 38 39 40 40 . . . . . . . . . . . . . . . . . . . . . . 43 43 44 44 45 47 49 49 53 53 54 54 58 58 58 58 59 59 62 62 62 68 69 6 Zusammenfassung 72 7 Ausblick 7.1 Weiterentwicklung der Software . . . . . . . . . . . . 7.1.1 Hinzufügen neuer Karten . . . . . . . . . . . . 7.1.2 Hinzufügen neuer Kartenschnittstellen . . . . 7.1.3 Hinzufügen neuer Kartenleser . . . . . . . . . 7.1.4 Hinzufügen neuer Sprachen . . . . . . . . . . 7.1.5 Hinzufügen neuer Betriebssysteme . . . . . . . 7.1.6 Das Applet als eigenständige Webanwendung 74 74 74 75 76 76 77 78 iv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inhaltsverzeichnis 7.2 Verbesserungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 A Benutzeroberfläche 79 Literaturverzeichnis 85 v Abbildungsverzeichnis 2.1 2.2 2.3 2.4 Einbinden von ActiveX-Controls in Webseiten . . . . . . . Appletlebenszyklus (entnommen aus [Lud07]) . . . . . . . Der HTML-Tag <APPLET> zum Einbinden von Applets Zugriffsrechte von Applets auf Systemeigenschaften . . . . 3.1 Komponenten von FlexiTrust und FlexiTrust Identity Management . . . . 21 4.1 Smartcardoperationen und die Kartenschnittstellenunterstützung . . . . . . 34 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.16 Model-View-Controller-Pattern . . . . . . . . . . . . . . . . . . . . . . . Der Aufbau des Wizards . . . . . . . . . . . . . . . . . . . . . . . . . . . Übersicht der WizardPanels . . . . . . . . . . . . . . . . . . . . . . . . . Übersicht der WizardPanelDescriptors . . . . . . . . . . . . . . . . . . Die Klasse WizardPanelDescriptor mit ihren Methoden . . . . . . . . . Die Klasse Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Klasse Loader mit den wichtigsten Methoden . . . . . . . . . . . . . Die Klasse ObjectIdentifier mit den wichtigsten Methoden . . . . . . Die Klassen von Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Action-Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Datenaustausch zwischen dem Enrollment-Server, FlexCardAdmin und der Smartcard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das HTML-Formular CertRequestForm und die JavaScript-Funktion submitForm() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Integration von FlexCardAdmin in der ES-Seite im Fall einer Kartenpersonalisierung (Teil 1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Integration von FlexCardAdmin in der ES-Seite im Fall einer Kartenpersonalisierung (Teil 2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Integration von FlexCardAdmin in der ES-Seite beim Löschen oder Entsperren einer Smartcard . . . . . . . . . . . . . . . . . . . . . . . . . . . Konfigurationsparameter zum Referenzieren der Objekte auf der Karte . A.1 A.2 A.3 A.4 A.5 Zwei der möglichen Varianten des ConfigurationPanels(1) Zwei der möglichen Varianten des ConfigurationPanels(2) Die zwei Varianten des PersonaliseCardPanels . . . . . . . Die zwei Varianten vom DeleteCardPanel . . . . . . . . . . Die zwei Varianten vom ResetPINPanel . . . . . . . . . . . 5.12 5.13 5.14 5.15 vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 . 8 . 9 . 13 . . . . . . . . . . 44 45 46 47 48 50 51 53 55 56 . 63 . 64 . 65 . 66 . 67 . 71 . . . . . 79 80 81 82 83 Abbildungsverzeichnis A.6 Die zwei Varianten vom ChangePINPanel . . . . . . . . . . . . . . . . . . . 84 vii Kapitel 1 Einleitung Heutzutage leben wir in einer Welt der Digitalisierung. Die Digitalisierung hat den Alltag erfasst. In allen Bereichen wird die Datenverwaltung in Papierform durch die elektronische Datenverarbeitung ersetzt. Die Verfahren der Personenidentifizierung und der Willenserklärung haben sich auch dementsprechend geändert. Normalerweise gilt der Personalausweis als Mittel der Identifizierung und die Unterschrift ist ein anerkannter Vorgang zur Willensbekundung. Wenn aber eine Person über ein elektronisches Kommunikationsnetz wie das Internet identifiziert werden soll oder eine unverwechselbare Willenserklärung abgeben möchte, sind diese Mittel nicht anwendbar. Heute werden andere Lösungen nötig, die auch von Maschinen interpretiert werden können. Man spricht von der digitalen Identität. Drei Technologien haben bei der Entstehung der digitalen Identität eine entscheidende Rolle gespielt: die Kryptographie, die Chipkartentechnologie und die Public-Key-Infrastrukturen (PKI). Die digitale Identität besteht aus Daten, welche die Nutzung von verschiedenen PKIDiensten wie Authentifikation, vertrauliche Kommunikation oder die digitale Unterzeichnung elektronischer Dokumente ermöglichen. Diese Daten können Zertifikate oder Schlüssel sein, die zur Authentifikation, zur Erstellung und Verifikation digitaler Signaturen oder zur Ver- und Entschlüsselung von Daten dienen. Da es sich um sensible Daten handelt, die nicht jedem zugänglich sein dürfen, müssen diese in einer sicheren Umgebung aufbewahrt werden. Chipkarten bieten das benötigte Sicherheitsniveau und werden deswegen als Träger geheimer Informationen benutzt. Die Chipkartentechnologie hat sich parallel zur Ausweitung der elektronischen Datenverarbeitung entwickelt und verspricht hohe Manipulationssicherheit und Zuverlässigkeit sowie große Flexibilität. Mit dem eingebauten Speicher ermöglicht die Chipkarte die Aufbewahrung von Informationen, die maschinenlesbar sind. Sie bietet eine sichere Umgebung für Geheimnisse, da diese physikalisch von der Außenwelt abgeschottet sind und nie die Karte verlassen. Außerdem sind Chipkarten klein und einfach zu benutzen, so dass sie von jedem im täglichen Leben eingesetzt werden können. Immer mehr Unternehmen setzen Chipkarten im Rahmen der Unternehmens-PKI ein. Die Einführung und die Administration der Chipkarten in einem relativ großen Unternehmen bringt viel Aufwand mit sich, wenn die Chipkartenverwaltung ausschließlich zentral erfolgt. Bei einer großen Anzahl von Mitarbeitern nimmt dies viel Zeit in Anspruch, weil jede Chipkarte einzeln personalisiert werden muss. Wenn ein Mitarbeiter seine 1 KAPITEL 1. EINLEITUNG Karte vergisst oder verliert oder diese nicht mehr funktioniert, wäre es nicht akzeptabel, dass er deswegen nicht weiter arbeiten kann. Es soll möglich sein, eine Ersatzkarte einfach und schnell auszustellen. Ansonsten werden die Geschäftsprozesse verlangsamt. All dies spricht dafür, dass nicht nur die Nutzung der Chipkarten und der durch ihnen ermöglichten PKI-Dienste dezentral und selbstbedient erfolgen soll, sondern auch ihre Administration. Dies umfasst: • • • • • • den Roll-out (Personalisierung und Verteilung) der Chipkarten die Verlängerung der Schlüssel- und somit der Kartengültigkeit das Handling von Notfall- und Ersatzkarten die Verwendung von Vertreterkarten das Löschen der Karteninhalte das Key-Backup von Verschlüsselungsschlüsseln Um diese Anforderungen zu erfüllen werden Anwendungen benötigt, die die Administration der Chipkarten ermöglichen und von den PKI-Teilnehmern bedient werden können. 1.1 Aufgabenstellung Im Rahmen dieser Diplomarbeit soll eine Client-Anwendung implementiert werden, im folgenden FlexCardAdmin genannt, die die oben beschriebenen Anforderungen erfüllt. Diese soll in der Lage sein, die Administrationsdienste unter Einbeziehung der Chipkarten der Teilnehmer bereitzustellen. Ein solches System namens FlexiTrust Identity Management wurde schon von FlexSecure [fle] zusammen mit der Firma Kobil [kob] entworfen. Dieses ist derzeit auf TCOS-2.0-Karten [PTT01] und CardOS-4.1-Karten [Sie] eingeschränkt und verwendet eine OCX-Komponente, die in den Internet-Explorer installiert wird. Die Lösung ist also an Windows gebunden. Das Ziel ist, die bestehende OCX-Lösung durch eine neue zu ersetzen, die viel mehr Flexibilität bietet. Diese Arbeit soll alle Phasen der Entstehung der Software wiedergeben, angefangen von der Analyse der Anforderungen und dem Konzeptaufbau bis zur Implementierung. Es soll klar dargestellt werden welche Entscheidungen getroffen wurden und warum. 1.2 Gliederung Der Inhalt dieser Arbeit ist in folgenden Kapiteln aufgeteilt: Im Kapitel 2, Grundlagen, werden die Technologien vorgestellt, auf die die bestehende und die neue Lösung basieren. Durch den direkten Vergleich können die Nachteile der bestehenden Lösung besser hervorgehoben werden und die Notwendigkeit für eine neue Anwendung begründet werden. Im Kapitel 3, Ist- und Sollanalyse, wird die Funktionalität von FlexiTrust Identity Mana- 2 KAPITEL 1. EINLEITUNG gement beschrieben. Diese dient als Basis zur Spezifikation der Funktionalität von FlexCardAdmin, die als Nächstes in diesem Kapitel beschrieben wird. Das Kapitel 4, Designentstehung, beschreibt wie das Konzept der Anwendung entstanden ist, welche Entscheidungen im Laufe der Zeit getroffen wurden und welche die Gründe dafür gewesen sind. Im Kapitel 5, Technisches Konzept und Implementierung, wird auf die technische Umsetzung der Anforderungen eingegangen. Das Kapitel 6, Zusammenfassung, beschreibt abschließend was durch diese Arbeit erreicht wurde und gibt einen Überblick über das Endergebnis. Im Kapitel 7, Ausblick, wird ein Blick in die Zukunft geworfen und erklärt, wie die Software weiterentwickelt werden kann und worauf man dabei achten soll. 3 Kapitel 2 Grundlagen In diesem Kapitel werden die Technologien vorgestellt, die bei der Erstellung von FlexCardAdmin verwendet werden und auch diejenigen, auf die die bestehende Lösung FlexiTrust Idenitity Management basiert. Diese Grundlagen sollen zum besseren Verständnis der Arbeit dienen. Zuerst wird eine kurze Einführung in der ActiveX-Technologie dargeboten, die in FlexiTrust Identity Management eingesetzt wurde. Es werden die Nachteile vorgestellt und die Gründe erläutert, warum die Notwendigkeit besteht, diese Lösung durch eine neue zu ersetzen. Anschließend werden Applets eingeführt. Am Ende des Kapitels wird noch auf die standardisierten Kartenschnittstellen eingegangen, da die Implementierung von FlexCardAdmin auf diesen basiert. 2.1 ActiveX ActiveX [acta] [actb] ist ein Technologiestandard, der von Microsoft erstmals Anfang 1996 vorgestellt wurde und ein allgemeines Standardverfahren zur Integration von ausführbarem Programmcode in Internet-Anwendungen, Webseiten oder generell in Microsoftorientierten Anwendungen beschreibt. Mit Hilfe von ActiveX werden die Anwendungen in aktive Anwendugen verwandelt. ActiveX ist ein Überbegriff für verschiedene SoftwareKomponenten. Alle diese Komponenten basieren auf dem sogenannten Component Object Model (COM). Die ActiveX-Steuerelemente (oder ActiveX-Controls) sind vorkompilierte wiederverwendbare Komponenten, die ähnlich wie Java-Applets, in Webseiten integriert werden können. Somit werden die Webseiten dynamisch, was bei den statischen HTMLSeiten nicht der Fall ist. Wenn die Webseite mit dem ActiveX-Control aufgerufen wird, wird der ActiveX-Control aus dem Internet geladen (nachdem der Anwender bestätigt hat, dass er das möchte) und auf dem Clientrechner installiert. Der Programmcode wird clientseitig ausgeführt. Da ActiveX-Controls nicht eigenständig lauffähig sind, benötigen sie einen so genannten ActiveX-Container, in den sie geladen und wo ihre Funktionen ausgeführt werden können. Ein ActiveX-Container nimmt ActiveX-Objekte, wie beispielsweise ActiveX-Controls, auf und kann ihre öffentliche Eigenschaften (Objektvariablen) und Methoden (Objektfunktionen) ansprechen. Wenn das Control in einer Webseite integriert wird, ist der Webbrowser der Container. 4 KAPITEL 2. GRUNDLAGEN ActiveX-Controls sind die Nachfolger der VBX- und OCX-Steuerelemente. Was heute als ActiveX-Control bezeichnet wird, hieß früher OLE-Control (OLE steht für Object Linking and Embedding). OLE-Controls wurden umstrukturiert und umbenannt und in ActiveXControls umgewandelt. Die OLE-Controls mußten eine Vielzahl von Methoden implementieren. Dadurch wurden sie in der Regel sehr groß. Solange sie nur von Containern wie Visual Basic geladen wurden, war dies nicht wichtig. Seitdem die Möglichkeit besteht, sie über das Internet in einen Browser zu laden, hat ihre Größe enorm an Bedeutung gewonnen. Deswegen hat Microsoft den Namen geändert und ActiveX-Controls so konzipiert, daß diese nur die Methoden zu implementieren brauchen, die sie auch tatsächlich benötigen. Somit sind ActiveX-Controls auf das Wesentliche reduziert und verglichen mit ihren Vorgängern bedeutend kleiner, sparsamer konzipiert und auf Geschwindigkeit und Größe optimiert. 2.1.1 Einbindung in Webseiten ActiveX-Controls lassen sich mit dem <OBJECT>-HTML-Tag in Webseiten einbinden (siehe Abbildung 2.1) und werden mit Microsofts Skriptsprachen (VB-Skript oder JavaScript) mit Bedienungslogik versorgt. Der Anwender benotigt allerdings einen ActiveXfahigen Web-Browser. <OBJECT id="cenroll1" codebase="xenroll.dll" classid="clsid:127698E4-E730-4E5C-A2b1-21490A70C8A1"> <PARAM name="[Bezeichner]" value="[Wert]"> <PARAM name="[Bezeichner]" value="[Wert]"> ... </OBJECT> Abbildung 2.1: Einbinden von ActiveX-Controls in Webseiten Das classid-Attribut ist die weltweit eindeutige ActiveX-ID für das ActiveX-Control: ein eindeutiger 128-Bit-Wert, der dem Ersteller eines Controls bei der Registrierung seines Controls von einer Lizensierungsorganisation zugeteilt wird. Jedes Control muss normalerweise die Klassen-ID spezifizieren, denn beim Laden des Controls vom Server wird die Klassen-ID verwendet, um das Control zu authentifizieren. Es wird überprüft, ob das Control zertifiziert wurde und ob das Zertifikat noch gültig ist. Wenn dies nicht der Fall ist, zeigt der Browser bei entsprechender Sicherheitseinstellung eine Warnung. Dann kann der Benutzer entscheiden, ob die Installation fortgesetzt werden soll oder nicht. Die Klassen-ID kann auch als Identifikation dienen, über die von einer Skriptsprache aus auf das Objekt zugegriffen werden kann. Üblicher ist jedoch der Zugriff über die NamensID. Das codebase-Attribut wird dafur verwendet, das Control aus dem Netz zu laden, wenn es auf dem lokalen System fehlt. 5 KAPITEL 2. GRUNDLAGEN Für jedes ActiveX-Control können beliebige zusätzliche Attribute mittels <PARAM>Tags definiert werden. Jedes Attribut besitzt einen Namen und einen Wert. 2.1.2 Zugriff auf ActiveX-Objekte Grundsätzlich hat man aus einer Webseite heraus zwei Möglichkeiten für den Zugriff auf ein ActiveX-Control: • mittels der Objektattribute definiert innerhalb der <PARAM>-Tags, deren genaue Ausprägung der Dokumentation jedes einzelnen ActiveX-Controls zu entnehmen ist. • mittels Skript-Routinen, welche über die übliche Punktnotation ([Objekt ].[Eigenschaft/Methode]) auf die vom Control nach aussen dokumentierten Schnittstellenelemente zugreifen. Der einfachste Zugriff auf ein Objekt funktioniert über eine VBScript-Procedure mit dem Namen <Objekt-ID> Click. Diese wird automatisch bei jedem Mausklick auf das Control aufgerufen. Die flexiblere Zugriffsmöglichkeit verwendet Ereignisse und Eventhandler, die eine VBScript-Routine aufrufen. Bei beiden Varianten kann innerhalb des VBScriptcodes via des Namens vom Objekt und des jeweiligen Namens der Eigenschaft, jede Eigenschaft des Objektes angesprochen werden. Dabei ist zu beachten, dass die Namen der Eigenschaften identisch zu den Angaben im <PARAM>-Bereich des <OBJECT>-Containers sind. 2.1.3 Sicherheit Wenn man ein ActiveX-Control auf seinem Rechner erlauben möchte, sollte man sicher stellen, dass das Control signiert ist. Signierte ActiveX-Controls sollten immer bevorzugt werden. Mit der Signatur kann der Anwender des Controls sicher stellen, dass das Control tatsächlich von dem angegebenen Entwickler stammt und daß es nachträglich nicht verändert wurde. Es gibt keine Garantie, dass die Ausführung des Controls trotz Signatur nicht schädlich für den Client ist. Die Signatur zeigt nur, dass das ActiveX-Control bei einer von Microsoft lizensierten Organisation registriert wurde (z.B. die Firma VeriSign). Falls aber die Software Schaden auf dem Rechner einrichtet, haftet der Entwickler des Controls. Ausserdem führen die Lizensierungsorganisationen mit hoher Wahrscheinlichkeit verschiedene Überprüfungen durch, bevor eine Signatur ausgestellt wird. Somit wird die signierte Software viel vertrauenswürdiger als diejenige, die nicht signiert ist. Die tiefgreifenden Manipulationsmöglichkeiten auf fremden Rechnern über ActiveXControls aus einer Webseite heraus sind insbesondere aus Gründen der Sicherheit sehr bedenklich. Viele Anwender lassen deswegen überhaupt keine ActiveX-Steuerelemente bei ihren Browsereinstellungen zu. Falls jedoch ein ActiveX-Control in einer Webseite erlaubt ist und noch nicht auf dem Clientrechner installiert ist, wird es automatisch, nach Anfrage oder überhaupt nicht (je nach Sicherheitseinstellungen im Browser) auf dem Rechner aus der angegebenen Quelle installiert. Somit bekommt das ActiveX-Control Zugriff auf den Clientrechner und kann verschiedene Operationen ausführen, die auch schädlich 6 KAPITEL 2. GRUNDLAGEN sein könnten. Die Rechte des Controls auf dem Clientrechner sind uneingeschränkt. Es besteht keine Möglichkeit festzulegen, dass das Control nur bestimmte Operationen ausführen darf und andere nicht. Das Control bekommt entweder alle Rechte oder keine. Läuft das ActiveX-Programm erst einmal, dann ist sein Funktionsumfang in keiner Weise eingeschränkt oder kontrollierbar. Es läuft mit allen Rechten des angemeldeten Benutzers - ohne jede Einschränkung. Es ist demnach leicht, private oder sicherheitsrelevante Daten auszulesen, zu löschen, zu manipulieren, den Rechner umzukonfigurieren, einen Virus oder ein Trojanisches Pferd zu installieren. 2.1.4 Unterstützte Plattformen ActiveX-Controls wurden für die Windows-Welt konzipiert. Im Laufe der Zeit wurden einige Versuche gemacht, ActiveX-Controls auch in anderen Betriebssystemen ausführbar zu machen. • ActiveX unter Macintosh: Ende 1996 veröffentlichte Microsoft ein Software Development Kit (SDK) für die Erstellung von ActiveX-Controls auf Apple MacintoshPlattformen. Diese ActiveX-Controls liefen im Internet Explorer für MacintoshPlattformen ab Version 2. Die Macintosh ActiveX-Implementierung beruht auf einer vereinfachten COM-Bibliothek. ActiveX-Controls werden hier nicht als eigenständiger Prozess außerhalb des Web-Browsers ausgeführt, sondern verbleiben in der WebBrowser-Umgebung. Der Einsatz von ActiveX-Controls ist hier demnach nicht so gefährlich wie unter Windows. Jedoch wird von Microsoft nur noch die Version 5 des Internet Explorers für den Macintosh unterstützt, eine Weiterentwicklung des Web-Browsers für Macintosh-Umgebungen ist nicht geplant. • ActiveX unter Linux: Auch für UNIX-Plattformen arbeitet Microsoft zusammen mit mehreren anderen Herstellern an einer ActiveX-Unterstützung. Unabhängig hiervon bestehen auch Implementierungen unter dem UNIX-Derivat Linux, um ActiveXControls ausführen zu können. Für den unter Linux lauffähigen Web-Browser Konqueror gibt es Bibliotheken, mit denen ActiveX-Controls ausgeführt werden können. Da durch diese der Zugriff auf die lokalen Daten möglich ist, ist auch hier ein großes Gefahrenpotential zu sehen. Derzeit ist der Internet Explorer von Microsoft ab Version 3.0 der einzige Browser, der ohne Zusatz als ActiveX-Container eingesetzt werden kann. Der Netscape Navigator, Mozilla und der Konqueror können durch ein entsprechendes ActiveX-Plug-In erweitert werden, damit auch hier ActiveX-Controls genutzt werden können. 2.2 Applet Die folgende Beschreibung von Applets wurde aus [app] und [Lud07] entnommen und hier zusammengefasst. Applets sind ausführbare Java-Programme, die in eine Webseite 7 KAPITEL 2. GRUNDLAGEN Abbildung 2.2: Appletlebenszyklus (entnommen aus [Lud07]) eingebettet werden. Wenn die Webseite aufgerufen wird, wird das dort enthaltene Applet automatisch gestartet. Der Programmcode des Applets wird dabei aus dem Internet geladen und auf dem lokalen Rechner ausgeführt. Jedes Applet muss von der Klasse java.applet.Applet erben, die die Schnittstelle zwischen dem Applet und dem Browser bereitstellt. Die meisten Applets haben eine graphische Oberfläche, die die Interaktion mit dem Benutzer ermöglicht. Für die Applets, die diese GUI mit Swing-Komponenten aufbauen, bietet das Swing-Framework eine spezielle Unterklasse von java.applet.Applet, nämlich javax.swing.JApplet, die als Oberklasse solcher Applets benutzt werden soll. Da Applets im Browser laufen, wird das Appletverhalten vom Browser gesteuert. Der Browser ruft zu bestimmten Zeitpunkten der Appletausführung verschiedene Methoden der Klasse Applet auf und bestimmt somit dessen Lebenszyklus. Diese Methoden sind (siehe auch Abbildung 2.2): • init(): wird beim Laden des Applets aufgerufen, um das Applet zu initialisieren. • start(): wird automatisch nach jedem Aufruf von init() sowie bei jedem erneuten Besuch der Webseite mit dem Applet aufgerufen. • stop(): wird automatisch aufgerufen, wenn der Benutzer die Webseite mit dem Applet verlässt, um eine andere Webseite aufzumachen, oder wenn der Browser geschlossen wird. stop() hält die Appletausführung an, so dass keine Systemresourcen verbraucht werden, wenn das Applet gerade nicht verwendet wird. • destroy(): wird aufgerufen, wenn der Browser geschlossen wird (nach jedem Aufruf von stop()). Die Methoden init() und destroy() werden ein einziges Mal während des Lebenszyklus des Applets aufgerufen; die anderen zwei Methoden können mehrfach aufgerufen werden. Alle vier Methoden können von den Unterklassen von Applet überschrieben werden, um das Appletverhalten zu spezifizieren. 8 KAPITEL 2. GRUNDLAGEN 2.2.1 Einbindung in Webseiten Applets lassen sich mit dem <APPLET>-HTML-Tag in Webseiten einbinden (siehe Abbildung 2.3). Dieser Tag hat folgende Attribute, die spezifiziert werden müssen: • code: hier muss der Name der Applet-Klasse (inklusiv Paketbezeichnung) angegeben werden, z.B. de.mypackage.MyApplet.class. • codebase: hier wird die URL angegeben, von der das Applet heruntergeladen werden kann, wenn noch nicht auf dem Clientrechner vorhanden. • archive: hier müssen alle jar-Bibliotheken aufgelistet werden, die das Applet braucht. • name: hier wird der Name des Applets spezifiziert, mit dem das Applet innerhalb der HTML-Seite angesprochen werden kann. • width: hier wird die Breite der Applet-GUI in der Webseite festgelegt. • height: hier wird die Höhe der Applet-GUI in der Webseite festgelegt. Für jedes Applet können zusätzliche Attribute mittels des <PARAM>-Tag definiert werden. Jedes Attribut besitzt einen Namen und einen Wert. <APPLET code="’MyApplet.class"’ codebase="’http://www.tu-darmstadt.de/applets"’ archive="myapplet1.jar,myapplet2.jar" name="’MyApplet"’ width="400" height="400"> <PARAM name="color" value="0xFF0000"> ... </APPLET> Abbildung 2.3: Der HTML-Tag <APPLET> zum Einbinden von Applets 2.2.2 Kommunikation zwischen dem Applet und der Webseite Oft ist es notwendig, dass das Applet Daten mit der HTML-Seite austauscht. Java ist in der Hinsicht nicht flexibel genug und bietet nicht viele Möglichkeiten an. Skriptsprachen wie JavaScript dagegen wurden dafür entwickelt, auf die einzelnen HTML-Elemente einer Webseite zuzugreifen und verschiedene Operationen darauf auszuführen. Wenn man Java und JavaScript kombiniert wird die Interaktion zwischen dem Applet und der Webseite möglich und die Appletfähigkeiten werden erweitert [Mor97]. Um die Kommunikation zwischen Java und JavaScript zu ermöglichen, hat Netscape die LiveConnect-Technologie [liv] entwickelt. Mit LiveConnect wird es möglich, über JavaScript auf Java-Objekte, Methoden und -Variablen zuzugreifen und umgekehrt können JavaScript-Funktionen von einer Java-Anwendung aufgerufen werden. Mit JavaScript kann das Appletverhalten beeinflusst werden. Das Applet kann dazu gebracht werden, auf verschiedene Ereignisse in der HTML-Seite zu reagieren, indem die 9 KAPITEL 2. GRUNDLAGEN Appletmethoden aufgerufen werden. JavaScript kann auf alle öffentlichen Methoden oder Attribute des Applets zugreifen. Dafür müssen diese öffentlichen Methoden und Attribute des Applets dem Entwickler bekannt sein. Im <APPLET>-Tag muss außerdem der Appletname spezifiziert werden, weil das Applet über seinen Namen angesprochen wird. Die Funktionen oder Attribute des Applets können ebenso über den Appletnamen aufgerufen bzw. abgefragt werden. Um eine Applet-Methode aufzurufen wird folgende Syntax verwendet: document.appletName.methodName(arg1,..., argx). Im Folgenden wird gezeigt wie ein Applet durch das Anklicken von Buttons auf der Webseite gestartet und angehalten werden kann. <APPLET code="de.flexsecure.flexiTrust.flexcardadmin.FlexCardApplet.class" name="FlexCardApplet" width=60 height=60> </APPLET> <FORM> <INPUT type="button" value="Start" onClick="document.FlexCardApplet.start()"> <INPUT type="button" value="Stop" onClick="document.FlexCardApplet.stop()"> </FORM> Für die Kommunikation von Java zu JavaScript stellt Netscape drei Java-Klassen zur Verfügung: • netscape.javascript.JSObject • netscape.javascript.JSException • netscape.plugin.Plugin Will man von Java aus auf ein Objekt einer JavaScript-Anwendung zugreifen, so verhüllt JavaScript dieses Objekt in einer Instanz der Klasse netscape.javascript.JSObject. Jede Instanz von JSObject repräsentiert eine DOM-Entität in der JavaScript-Welt. Als Erstes braucht man eine Referenz auf das JavaScript-Window-Objekt, welches das Applet beinhaltet. Die statische JSObject-Methode getWindow(Applet applet) liefert diese Referenz, verhüllt in einer JSObject-Instanz. Nachdem man diese Referenz bekommen hat, kann das Applet in die Webseite navigieren und mit der Methode getMember() auf einzelne Elemente zugreifen. getMember() liefert das nächste Element in der Hierarchie der HTML-Elemente. Das oberste Element in dieser Hierarchie ist das windowObjekt. Seine Kinder sind document, location und history. Die Kinder von document sind Formulare, Links und Applets. Mit der Methode getMember() wird diese Hierarchie gelesen. Im Folgenden wird gezeigt wie die vorgestellten Methoden verwendet werden, um bestimmte HTML-Elemente auszulesen. import netscape.javascript.*; import java.applet.*; class MyApplet extends Applet { public void init() { JSObject win = JSObject.getWindow(this); JSObject doc = (JSObject) win.getMember("document"); 10 KAPITEL 2. GRUNDLAGEN JSObject requestForm = (JSObject) doc.getMember("request"); JSObject nameField = (JSObject) requestForm.getMember("name"); JSOBject numberField = (JSObject) requestForm.getMember("number"); String nameValue = (String) nameField.getMember("value"); Float numberValue = (Float) numberField.getMember("value"); } } In dem Beispiel wird der Inhalt der zwei Eingabefelder name und number im Formular request ausgelesen. Um JavaScript-Werte zu ändern, gibt es die Methode setMember(String elementName, String value). Die Methode bekommt den Namen des Elements, dessen Wert geändert werden soll, und den neuen Wert übergeben. import netscape.javascript.*; import java.applet.*; class MyApplet extends Applet { public void init() { JSObject win = JSObject.getWindow(this); JSObject doc = (JSObject) win.getMember("document"); JSObject requestForm = (JSObject) doc.getMember("request"); JSObject nameField = (JSObject) requestForm.getMember("name"); nameField.setMember("value","MyName"); } } JSObject bietet die zwei Methoden call(String methodName, Object[] params) und eval(String expression) an, mit denen JavaScript-Methoden vom Applet heraus aufgerufen werden können. Bei der ersten Methode werden der JavaScript-Methodenname und ihre Argumente separat übergeben. Die zweite Methode bekommt den Methodenaufruf als String übergeben. Dies kann z.B. so aussehen: eval("document.writeln(\"Hier wird ein Text angezeigt.\");") Aus Sicherheitsgründen ist die Benutzung von JSObject standardmäßig nicht zugelassen. Um JSObject verwenden zu können, muss das Applet mit dem zusätzlichen Attribut MAYSCRIPT versehen werden. Wenn dieses Attribut im Applet fehlt, ist die Benutzung von JSObject nicht möglich. <APPLET code="MyApplet.class" width=50 height=50 NAME="Preview" MAYSCRIPT> 2.2.3 Sicherheit Ähnlich wie die ActiveX-Controls, könnten Applets auf dem Clientrechner Schaden anrichten. Sie werden über das Internet geladen und gestartet und könnten verwendet werden, um Daten auf dem lokalen Rechner zu verändern, löschen oder zu lesen, ohne dass 11 KAPITEL 2. GRUNDLAGEN der Betrachter der Webseite, die das Applet enthält, dies merkt. Um das zu verhindern und die sichere Ausführung von Applets zu ermöglichen, werden die Rechte des Applets beschränkt. Dazu wird das Applet in einem speziellen Bereich ausgeführt, in dem nur bestimmte Operationen zugelassen sind. Dieser Bereich wird als Sandkasten oder Sandbox bezeichnet. Versucht das Applet Operationen außerhalb der Sandbox auszuführen, wird dies erkannt und unterbunden. Normalerweise gelten folgende Einschränkungen für Applets: • Es dürfen keine Operationen auf Dateien wie Lesen, Schreiben oder Umbenennen durchgeführt werden. Außerdem dürfen keine neuen Dateien angelegt werden und auch nicht geprüft werden, ob eine bestimmte Datei existiert. • Es dürfen keine externen Programme auf dem Clientrechner gestartet werden. Daher ist der Aufruf der Methoden System.exec() und Runtime.exec() verboten. • Ein Applet darf nicht auf alle Systemeigenschaften oder Umgebungsvariablen zugreifen. Abbildung 2.4 gibt eine Übersicht. • Netzwerkverbindungen werden nur zu dem Rechner erlaubt, von dem das Applet stammt. Der Kontakt zu anderen Rechnern oder zu Applets, die von einem anderen Rechner stammen, ist verboten. • Systemthreads können von Applets weder gestartet, gestoppt, unterbrochen, noch kann ihre Priorität geändert werden. Manipulationen an den Threads in der eigenen virtuellen Maschine, in der das Applet läuft, sind jedoch möglich. • Der Aufruf nativer Methoden ist verboten. Eine Ausnahme stellen einige Methoden des JDK dar. • Applets dürfen keine Bibliotheken, beispielsweise mittels System.loadLibrary(), laden. Durch diese restriktive Politik wird auch gutartigen Applets die Möglichkeit genommen, ausgeführt zu werden. Deswegen wurden die Sicherheitsmaßnahmen bei Applets so angepasst, dass bestimmte Applets mehr Rechte bekommen, wenn sie entweder digital signiert sind und vom Benutzer als vertrauenswürdig eingestuft wurden, oder lokal auf dem Rechner in einem CLASSPATH-Verzeichnis installiert sind. Für solche Applets sind die Einschränkungen aufgehoben. Damit ein Java-Applet digital signiert werden kann, benötigt der Entwickler ein Zertifikat. Das Zertifikat kann bei einem Zertifikatsaussteller erworben werden. Es enthält Signaturprüfdaten, die Aufschluss über den Inhaber des Zertifikats (hier: den Entwickler) geben, sowie eine digitale Signatur der Zertifizierungsstelle. Letztere ist die Unterschrift der Zertifizierungsstelle und stellt sicher, dass das Zertifikat echt ist. Mit diesem Zertifikat werden die entwickelten Java-Applets vom Entwickler signiert und in ein Archiv abgelegt. Das Archiv wird auf dem Webserver des Anbieters abgelegt und in einer HTML-Seite referenziert. Fordert der Web-Browser des Anwenders eine solche HTML-Seite an, so wird zunächst die digitale Signatur des Archivs geprüft. Anschließend erscheint eine Meldung im Web-Browser, die die Signaturprüfdaten des Zertifikats anzeigt und erfragt, ob der Anwender dem Applet mehr Rechte erteilen will. Bestätigt der Anwender diese Meldung 12 KAPITEL 2. GRUNDLAGEN Systemeigenschaft Beschreibung file.separator java.class.version java.vendor java.vendor.url java.version line.separator os.arch os.name path.separator java.class.path java.home Dateienseparator (z.B. /“) ” Version der Java-Klasse Java-Vendor-spezifischer String URL des Java-Vendors Java-Version Zeilenseparator Architektur des Betriebssystems Name des Betriebssystems Pfadseparator (z.B. :“) ” Java-Classpath Verzeichnis mit der JavaInstallation Arbeitsverzeichnis des Benutzers Home-Verzeichnis des Benutzers Loginname das Benutzers user.dir user.home user.name Kann von Applets ausgelesen werden? ja ja ja ja ja ja ja ja ja nein nein nein nein nein Abbildung 2.4: Zugriffsrechte von Applets auf Systemeigenschaften positiv, wird das digital signierte Java-Applet mit den entsprechend eingeforderten Rechten im Web-Browser ausgeführt. 2.2.4 Unterstützte Plattformen Webseiten mit Applets können mit einem Java-fähigen Browser betrachtet werden. Alle aktuellen Browser verfügen über eine Java-Virtual-Machine, sind Java-fähig und somit in der Lage, Java-Applets auszuführen. 2.3 ActiveX versus Applets Wenn man sich zwischen ActiveX und Applets entscheiden soll, spricht einiges für die Applets. Ihre Hauptvorteile sind: • Applets sind plattformunabhängig. Da sie in Java geschrieben werden, sind sie in jedem Betriebssystem ausführbar. ActiveX-Controls dagegen laufen nur unter Windows. • Applets werden von mehreren Browsern unterstützt. Der einzige Browser dagegen, der ohne Zusatz als ActiveX-Container eingesetzt werden kann, ist Internet Explorer. Die restlichen Browser müssen zuerst durch einen ActiveX-Plugin erweitert werden. 13 KAPITEL 2. GRUNDLAGEN • Die Sicherheitsmaßnahmen bei Applets sind viel besser. Applets werden in einer Sandbox ausgeführt, in der nur bestimmte Operationen zugelassen sind. Möchte man einem Applet mehr Rechte vergeben, kann man das tun, indem dieses signiert oder lokal auf dem Rechner in einem CLASSPATH-Verzeichnis installiert wird. Bei ActiveX-Controls dagegen hat man diese Kontrolle über die zulässigen Operationen nicht. Das Control bekommt entweder alle Rechte oder keine, unabhängig davon ob es signiert ist oder nicht. Damit erweist sich die Systemsicherheit als großes ActiveXProblem. ActiveX-Komponenten haben vollen Zugriff auf das System und empfindliche Speicherbereiche. So bietet sich eine Angriffsfläche für Viren und Online-Spione. Der einzige Schutzmechanismus ist eine Herkunftskennung. Anhand eines Zertifikats sollen sich Programmierer von ActiveX-Controls ausweisen und erklären, dass ihr Code bedenkenlos laufen kann. Sicherlich hat auch ActiveX gewisse Vorteile: • In Sachen Geschwindigkeit haben ActiveX-Controls ihren Java-Konkurrenten einiges voraus. Die Unabhängigkeit vom Betriebssystem und Prozessor erkauft sich Java mit Geschwindigkeitsverlusten. Die Übersetzung des Java-Zwischencodes in der Virtual Machine kostet Zeit. Zudem kann Java wegen der Sicherheitsbeschränkungen nicht alle Raffinessen eines Betriebssystems oder Prozessors ausnutzen. Bei ActiveX verzichtete man auf den Zwischencode, da es ActiveX nur für Windows gibt. Die Controls sind bereits in Maschinensprache für Intel und Windows übersetzt und somit auf Geschwindigkeit und Größe optimiert. Alles in allem haben beide Technologien Vor- und Nachteile. Bevor man die Entscheidung trifft, welche von beiden Technologien einzusetzen, muss man auch den konkreten Anwendungsfall analysieren. In bestimmten Fällen wird es besser sein, ActiveX zu verwenden, in anderen werden Applets die geeignetere Wahl sein. Wenn man aber auf die Sicherheit und die Plattformunabhängigkeit Wert legt, sind Applets zu bevorzugen. 2.4 Standardisierte Kartenschnittstellen Wenn Smartcards als Träger der digitalen Identität im Rahmen von Public-KeyInfrastrukturen eingesetzt werden, werden sie im Normalfall über einen Kartenleser mit einem Rechner verbunden und mithilfe von Software, die auf diesem Rechner installiert ist, verwaltet. Im Laufe der Zeit sind viele Anwendungen entstanden, die diese Interaktion ermöglichen und man hat gemerkt, dass eine einheitliche Basis definiert werden muss. In Folge dessen wurden Standards entwickelt, die die Schnittstelle zwischen Smartcards und PCs spezifizieren. Drei davon werden hier vorgestellt, da diese der Implementierung von FlexCardAdmin zu Grunde liegen. 14 KAPITEL 2. GRUNDLAGEN 2.4.1 PKCS#11 Der Public Key Cryptography Standard 11 (PKCS#11) [RSA04] ist eine der Spezifikationen von der Familie von Spezifikationen Public Key Cryptography Standards (PKCS), die von RSA Laboratories spezifiziert wurde, um die Kompatibilität und Interoperabilität zwischen verschiedenen kryptographischen Anwendungen zu erreichen. PKCS#11, auch Cryptoki“ (Abkürzung für cryptographic token interface) genannt, stellt eine ” C-Schnittstelle zu Geräten zur Verfügung, die kryptographische Daten aufbewahren oder kryptographische Funktionen ausführen. Diese können zum Beispiel Smartcards, USB-Tokens oder Handheld-PCs sein. Alle solche kryptographische Geräte werden als ein sogenanntes kryptographisches Token betrachtet. Kartenleser dagegen werden als sogenannte Slots aufgefasst. Das Ziel von PKCS#11 ist, die Unabhängigkeit der Anwendungen von der verwendeten Hardware zu erreichen. Durch das Token-Konzept werden alle Geräte als logisch gleich gesehen. PKCS#11 ist also eine High-Level-Schnittstelle, die vom Smartcardbetriebssystem und Smartcardkommandos abstrahiert (im Fall, dass das verwendete Token eine Smartcard ist). Dieses hohe Abstraktionsniveau ist ein wesentlicher Vorteil von PKCS#11, da man lediglich zu den verwendeten Kartenlesern und Kartentypen passende PKCS#11-Treiber braucht, die Schnittstelle aber immer gleich bleibt. Auf der anderen Seite kann die hohe Unabhängigkeit auch als Nachteil interpetiert werden, weil für den Benutzer viele Aspekte transparent und unbeeinflussbar bleiben. Man wird mit den Einschränkungen von PKCS#11 konfrontiert. In der PKCS#11-Spezifikation ist keine PIN und keine PUK vorgesehen. Stattdessen unterscheidet man zwischen den zwei Benutzerrollen Security Officer (SO) und User, die jeweils ein Passwort zum Einloggen auf die Karte haben. Die Rolle vom Security Officer ist, das Token zu initialisieren und das Userpasswort (PIN) zu setzen. Nur wenn der Security Officer eingeloggt ist, kann das Passwort vom User gesetzt werden. Der User darf sich erst dann auf die Karte einloggen, nachdem sein Passwort vom Security Officer gesetzt wurde. Das Passwort des Security Officers kann man also als die PUK der Karte betrachten und das Userpasswort - als die PIN. Nur beim Kenntnis der PUK kann die PIN gesetzt werden. Das fehlende PIN / PUK-Konzept bereitet einige Schwierigkeiten, weil nicht alle benötigten PIN-/PUK-Operationen in den bekannten PKCS#11-Implementierungen verfügbar sind. Es ist zum Beispiel nicht möglich, die PIN und die PUK der Karte zu löschen. Dadurch kann eine Smartcard nicht vollständig gelöscht und nicht erneut personalisiert werden. Um die C-Funktionen der PKCS#11-Schnittstelle aus einer Java-Umgebung aufrufen zu können, wurden verschiedene Java-Wrapper entwickelt. In dieser Arbeit wird der Java-PKCS#11-Provider [Cor00] verwendet, der als Ergebnis der Diplomarbeit von Vlad Koroama an der TU Darmstadt entstanden ist. Java-PKCS#11-Provider stellt eine objektorientierte Schnittstelle zu Funktionen einer nativen PKCS#11-Bibliothek zur Verfügung. 15 KAPITEL 2. GRUNDLAGEN 2.4.2 PC/SC Der Personal Computer/Smartcard (PC/SC) Standard wurde von PC/SC Workgroup entwickelt und spezifiziert eine C-Schnittstelle zur Interaktion zwischen Computersystemen und Chipkarten. Bei PC/SC handelt es sich um eine Low-Level-Schnittstelle, welche die Übermittlung von APDUs zur Smartcard übernimmt. Einerseits bedeutet dies, dass man jeweils eine Implementierung pro Kartentyp benötigt; der Entwickler muss also alle Details des Kartenbetriebssystems verstehen und die Entwicklungszeiten sind im Vergleich zu PKCS#11 wesentlich länger. Außerdem besteht die Gefahr, dass mit jedem Kartenbetriebssystemupdate die Applikation angepasst werden muss, weil benutzte Funktionen nicht mehr verfügbar sind. Andererseits eröffnet die APDU-Welt die Möglichkeit, die Smartcard-Funktionalität in vollem Umfang auszunutzen und Funktionen zu implementieren, die der eigenen Bedürfnissen und Anforderungen genau entsprechen. Um die PC/SC-Schnittstelle zu benutzen, muss ein PC/SC-Treiber für den Kartenleser installiert werden. Da der Standard weltweit hohe Verbreitung kennt, sind PC/SC-Treiber für die meisten Lesegeräte verfügbar. Um die PC/SC-Bibliothek aus einer Java-Umgebung anzusprechen, kann ein JavaWrapper für PC/SC von IBM (JPC/SC) [jpc] verwendet werden. PC/SC wurde ursprünglich für Windows konzipiert, kann aber auf verschiedenen Plattformen eingesetzt werden. Von JPC/SC werden Windows- und Linux-Umgebungen unterstützt. Das Projekt MUSCLE [mus] bietet PC/SC-Kartenlesertreiber für Linux, Solaris und MacOS. 2.4.3 OCF Die folgende Beschreibung wurde aus [Dra06] entnommen: OpenCard Framework (OCF) wurde von OpenCard Consortium ins Leben gerufen und ist ein Java-basiertes Framework zur Entwicklung von SmartcardAnwendungen. Das Framework ist auf jeder Java-fähigen Plattform einsetzbar und ist damit als solches unabhängig vom Betriebssystem des PC. Das ist ein großer Vorteil von OCF. Wie PC/SC, braucht OCF jeweils eine Bibliothek vom Smartcard-Hersteller und vom Hersteller des Kartenlesers (als CardServices und CardTerminals bezeichnet). Die Installation ist aber im Gegensatz zu PC/SC nicht trivial, weil zusätzlich zu den Bibliotheken noch das Framework selbst installiert werden muss. OCF bietet eine objekt-orientierte Smartcard-Schnittstelle, die Veränderungen in Hardware oder im Smartcard-Betriebssystem vor der Anwendung verbirgt. Das Framework definiert die Schnittstelle für die Anwendung als sogenannte CardServices. Die Implementierung eines CardService ist für die Anwendung transparent und kann jeder Zeit ausgetauscht werden. OCF hat sich zum Standard im Java-Umfeld etabliert, es ist gut dokumentiert und von umfangreichen Tutorials begleitet. OCF-Treiber existieren al- 16 KAPITEL 2. GRUNDLAGEN lerdings nur für wenige Kartenleser. Aus diesem Grund wurde ein OCFWrapper für PC/SC (ein PC/SC-CardTerminal [ocf]) entwickelt, so dass das OCF-Framework im sogenannten PassThruModus“ mit jedem PC/SC” Kartenlesertreiber benutzt werden kann. In diesem Fall agiert das OCFFramework als Java-Wrapper für die PC/SC-Schnittstelle, d.h. man kann aus einer Java-Umgebung APDUs an die Smartcard senden. Durch die zusätzlichen Komponenten wird die Installation noch aufwändiger und benutzerunfreundlicher, unter anderem weil der Wrapper sich auf die Java Comm API stützt. 17 Kapitel 3 Ist- und Soll-Analyse In diesem Kapitel wird die bestehende Lösung FlexiTrust Identity Management vorgestellt. Ihre Struktur und Funktionen werden beschrieben. Da das Ziel dieser Arbeit ist, eine der bestehenden Komponenten von FlexiTrust Identity Management durch eine neue zu ersetzen, wird auf diese Komponente und ihre Nachteile detaillierter eingegangen. Anschließend werden die Anforderungen an die neue Komponente FlexCardAdmin spezifiziert. 3.1 FlexiTrust Identity Management FlexiTrust Identity Management [Gmb06a] ist eine Webapplikation, welche die Trustcenter-Software FlexiTrust [Gmb] erweitert und im Rahmen einer PKI sämtliche Aufgaben übernimmt, die mit der dezentralen Personalisierung und Verwaltung von Smartcards verbunden sind. Das System ermöglicht die selbstbediente Administration der Smartcards. In jedem Unternehmen, das Chipkarten im Rahmen der Unternehmens-PKI einsetzt, sind diese notwendige Operationen. Mit FlexiTrust Identity Management lässt sich eine dezentrale und flexible Smartcard-Rollout-Infrastruktur aufbauen, die selbstbediente Verfahren unterstützt und den eigenen Bedürfnissen und Anforderungen genau entspricht. Folgende Operationen lassen sich mit FlexiTrust Identity Management ausführen: • Selbstbediente Personalisierung von Smartcards: Nachdem ein neuer Mitarbeiter in einem Unternehmen eingestellt wird, wird ein neues Benutzerkonto für ihn angelegt und er muss seine Mitarbeiterkarte personalisieren. Er erhält eine leere, unpersonalisierte Smartcard und seine Authentifizierungsdaten. Nach einer erfolgreichen Authentifikation dem System gegenüber kann er seine Karte personalisieren. • Selbstbedientes Erneuern von Smartcards: Falls eine Karte nicht mehr benutzbar ist (zum Beispiel wenn die Karte defekt ist), kann der Mitarbeiter eine Ersatzkarte für sich ausstellen. Dafür erhält er eine leere Smartcard oder löscht vollständig seine Vorgängerkarte. Nach einer erfolgreichen Benutzerauthentifikation wird die Karte neu personalisiert, wobei ein Key-Recovery für gesicherte Schlüsselpaare und entsprechende Zertifikate stattfindet. Alle anderen Daten (Schlüsselpaare, Zertifikate, Geheimnisse und Applikationsdaten) werden neu generiert und auf die Smartcard 18 KAPITEL 3. IST- UND SOLL-ANALYSE geschrieben. • Erstellung einer Notfallkarte: Falls ein Mitarbeiter seine Karte vergisst oder verlegt, kann vom PKI-Administrator eine Notfallkarte mit einer kurzen Gültigkeitsdauer erstellt werden. Gesicherte Schlüsselpaare und entsprechende Zertifikate werden übernommen, alle anderen Daten werden neu generiert. Nach dem Ablauf der Gültigkeit müssen Notfallkarten zurückgegeben werden. Sie werden dann vom PKIAdministrator vollständig gelöscht. • Selbstbedientes Entsperren der Karte und Neusetzen der Geheimzahl (PIN): Eine Karte wird gesperrt, wenn die PIN mehrmals falsch eingegeben wird. Die Anzahl der möglichen Fehlversuche bei der PIN-Eingabe ist konfigurierbar und wird beim Personalisieren der Smartcard gesetzt. Nach einer erfolgreichen Authentifikation dem System gegenüber kann der Kartenbesitzer die Karte entsperren und seine PIN neu setzen. • Selbstbedientes Löschen der Karteninhalte: Wenn ein Mitarbeiter das Unternehmen verlässt, gibt er seine Smartcard zurück und diese wird vollständig gelöscht. Nach dem Löschen ist die Karte leer und kann neu personalisiert werden. Für alle oben beschriebenen selbstbedienten Smartcard-Operationen ist eine Benutzerauthentifikation mit Benutzernamen, Passwort und Einmalpasswort (TAN) erforderlich. Diese findet über ein Webinterface statt. Die Benutzer bekommen Zugriff auf das System über eine Webseite (die Enrollment-Seite), auf der sie sich mit ihrem Benutzernamen, Passwort und der TAN authentifizieren müssen. Von dort aus können die Smartcardoperationen ausgeführt werden. Das TAN-Konzept trägt dafür Sorge, dass die ausgeführten Smartcardoperationen kontrolliert und verwaltet werden können. Mit der TAN kann eine Operation nur einmal und nur von dem TAN-Besitzer ausgeführt werden. Das Einmalpasswort wird automatisch generiert, nachdem der Benutzer einen Request für eine bestimmte Smartcardoperation gestellt hat. Die TAN kann nur für diese spezifische Operation verwendet werden. Diese wird dem Benutzer zum Beispiel in einem TAN-Brief zugeschickt oder auf einer sicheren Webseite, auf die nur per Smartcard zugegriffen werden kann, angezeigt. Nachdem der Benutzer die TAN bekommen hat, darf er die gewünschte Operation ausführen. Um die Sicherheit zu erhöhen, ist die TAN zusätzlich an die Smartcard-Seriennummer gebunden und hat eine begrenzte Gültigkeitsdauer. Für einen Benutzer darf immer höchstens eine TAN freigeschaltet sein. Jede Smartcard besitzt eine PIN und eine PUK. Die Smartcard-Administration ist bei FlexiTrust Identity Management so konzipiert, dass die PUK dem Benutzer unbekannt bleibt. Dies macht vor allem im Firmenumfeld besonders viel Sinn. Dadurch, dass die PUK zentral gespeichert ist, wird vermieden, dass viele Smartcards durch Fehlbenutzung unbrauchbar werden. Somit werden Kosten gespart. Ausserdem ermöglicht die Kenntnis der PUK die zentrale Ausführung wichtiger Administrationsaufgaben. Jede zurückgegene Karte (z.B. die Karte eines Mitarbeiters, der das Unternehmen verlässt, oder eine Notfallkarte) kann vom PKI-Administrator problemlos mit Hilfe der PUK vollständig gelöscht werden. 19 KAPITEL 3. IST- UND SOLL-ANALYSE 3.1.1 Komponentenüberblick Abbildung 3.1 gibt eine Übersicht der Komponenten der Trustcenter-Software FlexiTrust. Die Komponenten, die zu FlexiTrust Identity Management gehören, sind rot markiert. Diese sind: • Anmeldeserver mit Benutzerschnittstelle (im Folgenden Enrollment-Server oder ES genannt): Das Eingangsportal für die PKI-Teilnehmer. Es bietet eine HTML-Seite an, auf der sich die PKI-Teilnehmer mit Benutzernamen, Passwort und TAN anmelden und selbstbediente Smartcardoperationen ausführen können. • Datentransport (im Folgenden Enrollment Server Importer oder ESI genannt): zuständig für den Datentransport zwischen dem Enrollment-Server und der FlexiTrust-Zertifizierungsstelle, wie man in der Abbildung 3.1 sehen kann. Da die Funktionen dieser Komponente für diese Arbeit nicht relevant sind, werden sie nicht näher beschrieben. • OCX-Komponente: zuständig für die Realisierung der Smartcardoperationen. Dies ist eine ActiveX-Control-Komponente, die in der Enrollment-Seite eingebettet ist und beim ersten Aufruf der Webseite auf dem Clientrechner installiert wird. OCX übernimmt folgende Aufgaben: – Personalisierung der Karte ∗ PIN/PUK mit Fehlbedienungszähler (FBZ) auf die Karte schreiben ∗ Verschlüsselungszertifikat bzw. Schlüsselbackup einspielen – PIN der Chipkarte unter Benutzung der PUK zurücksetzen. Der FBZ der PIN wird dabei zurückgesetzt. – Komplette Karte mit Hilfe der PUK löschen. Dabei werden PIN, PUK und alle Zertifikate gelöscht. Die Karte kann dann wieder neu personalisiert werden, wie im Urzustand. – Sonstige Hilfsoperationen ∗ PIN verifizieren ∗ Kartenseriennummer auslesen ∗ Personalisierungsstatus der eingelegten Chipkarte feststellen (leer oder initialisiert) • Verwaltungskonsole (auch Management Console oder MC genannt): ermöglicht die Verwaltung der: – Benutzerkonten – Administratorenkonten – Chipkarten – Zertifikaten – Sperrlisten Die Verwaltungskonsole wird hier nicht näher beschrieben, weil sie für diese Arbeit irrelevant ist. 20 KAPITEL 3. IST- UND SOLL-ANALYSE Abbildung 3.1: Komponenten von FlexiTrust und FlexiTrust Identity Management 21 KAPITEL 3. IST- UND SOLL-ANALYSE 3.1.2 Smartcardoperationen Wie schon am Anfang dieses Kapitels erwähnt, sind folgende Operationen mit FlexiTrust Identity Management möglich: • selbstbediente Personalisierung von Smartcards (Prozess Neue Karte“) ” • selbstbedientes Erneuern von Smartcards (Prozess Ersatzkarte“) ” • Erstellung einer Notfallkarte (Prozess Notfallkarte“) ” • selbstbedientes Entsperren der Karte und Neusetzen der Geheimzahl (PIN) (Prozess PIN Reset“) ” • selbstbedientes Löschen der Karteninhalte (Prozess Karte löschen“) ” Im Folgenden werden sie detaillierter beschrieben. Personalisierung einer Smartcard Eine Karte muss in folgenden Fällen personalisiert werden: • Ein neues Benutzerkonto wurde angelegt (z.B. nachdem ein neuer Mitarbeiter eingestellt wurde) • Das Verschlüsselungszertifikat/Signaturzertifikat ist abgelaufen • Alle Inhalte der alten Karte wurden gesperrt • Der Benutzername des Karteninhabers hat sich geändert (z.B. durch Namensänderung) Aus den oberen Anwendungsfällen wird klar, dass die Notwendigkeit besteht, eine Karte mehrmals personalisieren zu können. Dies wird von FlexiTrust Identity Management sichergestellt. Nachdem der Benutzer eine leere Smartcard und seine Authentifikationsdaten (Benutzername, Passwort und eine TAN für den Prozess Neue Karte“) erhalten hat, kann die ” Karte personalisiert werden. Dazu sind folgende Arbeitsschritte notwendig: 1. Login: Der Benutzer meldet sich mit seinen Benutzerdaten auf der Enrollment-Seite an. Der Enrollment-Server leitet die Daten weiter an das ESI. 2. Datenprüfung: ESI überprüft die Benutzerdaten mittels Datenbankabfragen sowie Abfragen am LDAP-Server; ESI generiert zufällige PIN und PUK und schickt diese zurück an den Enrollment-Server. 3. Kartenpersonalisierung Teil 1: Nach einer erfolgreichen Benutzeranmeldung erscheint eine Seite mit dem integrierten ActiveX-Control. Diese Seite zeigt die automatisch generierte PIN der Karte. Die PUK wird wie schon am Anfang des Kapitels erwähnt, nicht angezeigt. Auf der Seite kann der Benutzer außerdem seine Antworten auf verschiedene vordefinierte Sicherheitsfragen eingeben. Durch das Betätigen einer Taste auf der Seite wird die Smartcard über dem ActiveX-Control in einem Schritt personalisiert. Folgende Schritte werden durchlaufen: a) Ist die Seriennummer der Karte dem System bekannt, wird die Karte zuerst 22 KAPITEL 3. IST- UND SOLL-ANALYSE vollständig gelöscht. b) PIN und PUK werden zusammen mit dem Fehlbedienungszähler (FBZ) auf die Karte geschrieben. c) Die Schlüsselpaare für die elektronische Signatur und Windows-SmartcardLogon werden in der Karte erzeugt und damit PKCS#10-Zertifikatsanträge [RSA00] erstellt. d) Die Zertifikatsanträge werden an ESI geschickt. e) Weitere Geheimnisse und Daten, die für verschiedene Anwendungen erforderlich sind (z.B. Kobil SecOVID OTP Generator), werden auf die Karte geschrieben. 4. Zertifikatserstellung: ESI leitet die Zertifikatanträge an die FlexiTrust-CA weiter. Da für das Verschlüsselungsschlüsselpaar ein Key-Recovery erwünscht ist, wird es in der FlexiTrust-CA und nicht in der Karte erzeugt. FlexiTrust-CA erstellt das zugehörige Verschlüsselungszertifikat, sowie die zwei beantragten Zertifikate (für Signatur und Windows-Smartcard-Logon). Das Verschlüsselungsszertifikat und das zugehörige Schlüsselpaar werden als PKCS#12-Datei [RSA99] gesichert hinterlegt (Key Backup). Außerdem löscht ESI die TAN und wartet anschließend bis die beantragten Zertifikate in die Datenbank geschrieben wurden, um diese zurück an den Enrollment-Server zu schicken. 5. Kartenpersonalisierung Teil 2: Die drei Zertifikate werden bereitgestellt und auf einer Import-Webseite ausgeliefert, die dem Benutzer angezeigt wird. Das ActiveXControl schreibt die Zertifikate und das Verschlüsselungsschlüsselpaar auf die Karte. Erneuern einer Smartcard Eine Karte muss in folgenden Fällen erneuert werden: • Das Signatur- oder Windows-Logon-Zertifikat läuft ab. • Die Karte ist defekt oder verloren gegangen. • Die Position des Benutzers im Unternehmen hat sich geändert. Der Benutzer kann seine Karte erneuern, wenn er seine alte oder eine leere Smartcard und eine TAN für den Prozess Ersatzkarte“ erhalten hat. Der Prozess, der bei der ” Kartenpersonalisierung beschrieben wurde, wird hier wiederholt. Der Unterschied besteht darin, dass das Verschlüsselungsschlüsselpaar und das Verschlüsselungszertifikat nicht neu erzeugt werden. Für den Verschlüsselungsschlüssel findet ein Key-Recovery statt und das zugehörige Zertifikat wird aus dem Archiv ausgelesen. Dadurch ist sichergestellt, dass der Benutzer weiterhin auf seine verschlüsselten Daten zugreifen kann. Erstellung einer Notfallkarte Eine Notfallkarte wird dann erstellt, wenn der Benutzer seine Karte verlegt oder vergessen hat. Diese Karten werden vom Administrator erstellt und haben eine kurze Gültig- 23 KAPITEL 3. IST- UND SOLL-ANALYSE keitsdauer (z.B. einen Tag). Die Karte wird personalisiert wie eine Ersatzkarte, d.h. das Verschlüsselungsschlüsselpaar und das zugehörige Zertifikat werden nicht neu erzeugt. Entsperren der Smartcard Die Karteninhalte sind durch die PIN geschützt. Nach mehreren Falscheingaben der PIN, wird die Karte gesperrt und kann nur mit Hilfe der PUK entsperrt werden. Der Benutzer kennt die PUK nicht, ist aber trotzdem in der Lage, die Karte zu entsperren und die PIN neu zu setzen. Nachdem der Benutzer die TAN für den Prozess PIN Reset“ erhalten hat, kann er ” seine Karte entsperren. Dazu muss er folgende Arbeitsschritte durchlaufen: 1. Login: Der Benutzer meldet sich auf dem Enrollment-Server (über das bereitgestellte Webinterface) mit seinem Benutzernamen, Passwort und der TAN an. 2. Datenprüfung: ESI überprüft die Benutzerdaten. Es wird außerdem überprüft, ob die an die TAN gebundene Smartcard-Seriennummer mit der Seriennummer der Chipkarte übereinstimmt. 3. Karte entsperren: Durch das Betätigen einer Taste auf der angezeigten Webseite wird die Karte über die OCX-Komponente mit Hilfe der PUK entsperrt. Eine neue PIN wird generiert und im Browser angezeigt. Der Fehlbedienungszähler der PIN wird dabei zurückgesetzt. Die neue PIN wird auf die Karte geschrieben. Löschen der Karteninhalte Karten müssen in folgenden Fällen gelöscht werden: • Eine zurückgegeben Notfallkarte, um sie wieder zu verwenden • Die zurückgegebene Karte eines Mitarbeiters, der das Unternehmen verlassen hat Nachdem der Benutzer die TAN für den Prozess Karte löschen“ erhalten hat, kann er ” die Karte löschen. Dazu sind folgende Schritte notwendig: 1. Login: Der Benutzer meldet sich auf dem Enrollment-Server (über das bereitgestellte Webinterface) mit seinem Benutzernamen, Passwort und der TAN an. 2. Datenprüfung: ESI überprüft die Benutzerdaten. Es wird außerdem überprüft, ob die an die TAN gebundene Smartcard-Seriennummer mit der Seriennummer der Chipkarte übereinstimmt. 3. Karte löschen: Durch das Betätigen einer Taste auf der angezeigten Webseite wird die Karte über die OCX-Komponente mit Hilfe der PUK komplett gelöscht. 3.1.3 Die OCX-Komponente Die OCX-Komponente ist zuständig für die Realisierung der oben beschriebenen Smartcardoperationen. Sie wird auf dem Clientrechner installiert und übernimmt alle Aufgaben, 24 KAPITEL 3. IST- UND SOLL-ANALYSE die mit der Kommunikation und Datenübertragung zur Smartcard verbunden sind. Leider weist diese Komponente gewisse Nachteile auf: • Sie wurde speziell für nur zwei Kartentypen (TCOS2.0 und CardOS) entwickelt. Alle anderen Kartentypen werden nicht unterstützt. Diese fehlende Flexibilität schränkt automatisch die Anzahl der potenziellen Anwender und Kunden ein. Die Hinzunahme neuer Kartentypen ist nicht trivial und nur mit hohem Aufwand realisierbar. • Dadurch, dass die ActiveX-Technologie zu Grunde dieser Komponente liegt, ist die Plattformunabhängigkeit nicht gewährleistet (siehe auch Kapitel 2). ActiveXControls sind nur unter Windows ausführbar und ihr Einsatz auf verschiedenen Plattformen ist somit beschränkt. Die Hinzunahme neuer Betriebssysteme ist also auch nicht möglich. • ActiveX wird nicht von vielen Browsern unterstützt. Der einzige Browser, der ohne Zusatz als ActiveX-Container eingesetzt werden kann, ist Internet Explorer. Die restlichen Browser müssen zuerst durch einen ActiveX-Plugin erweitert werden. Die OCX-Komponente ist also nicht flexibel genug und nicht erweiterbar. Es ist nicht möglich, neue Komponenten in die Software hinzuzufügen. Es stellt sich die Frage welche Technologie als Ersatz genommen werden kann, so dass alle diese Nachteile eliminiert werden können. Im nächsten Kapitel wird diese Frage beantwortet. 3.2 FlexCardAdmin Die neue Lösung, die die bestehende OCX-Komponente ersetzen soll und die im Folgenden FlexCardAdmin genannt wird, soll alle vorhandene Probleme eliminieren und folgende Bedingungen erfüllen: • Die Plattormunabhängigkeit ist gewährleistet • Die Software ist im Browser ausführbar und kann über das Internet geladen werden. • Alle gängige Browser werden unterstützt. • Das Sicherheitsniveau ist hoch genug. • Die Software ist flexibel und um neue Komponenten erweiterbar. Es gibt einige Java-Technologien zur Erstellung von Web-Anwendungen: • Java WebStart-Anwendungen: Suns Java WebStart basiert auf dem Java Network Loading Protocol (JNLP). Um eine Anwendung mit WebStart zu installieren, müssen zwei Voraussetzungen gegeben sein. Erstens muss auf den zu installierenden Rechner Java und WebStart installiert sein und zweitens muss im Browser als Hilfsanwendung für Dateien mit der Endung .jnlp das auführbare Programm javaws eingetragen sein. Wenn nun der Benutzer im Browser auf einen Link klickt, hinter dem sich eine JNLP-Datei verbirgt, so wird die Datei heruntergeladen und dann automatisch WebStart aktiviert. WebStart lädt nun anhand der Einträge in der JNLP-Datei die zur Anwendung gehörenden JAR-Archive herunter, erzeugt, wenn gewünscht einen Desktopshortcut und startet dann die Anwendung. Für weitere 25 KAPITEL 3. IST- UND SOLL-ANALYSE Starts der heruntergeladenen Anwendung ist dann meist keine Netzwerkverbindung mehr nötig. WebStart-Anwendungen werden nicht im Browser ausgeführt. Da eine der Anforderungen an FlexCardAdmin ist, dass dieser im Browser läuft, ist die WebStart-Technologie zur Realisierung der neuen Lösung nicht geeignet. • Java Servlets: Servlets sind serverseitige Anwendungen, die nach einem vom Client ausgelösten HTTP-Request dynamisch HTML-Seiten erzeugen und im Browser des Clients anzeigen. Servlets bestehen aus Java-Klassen, die über einen Webserver mittels einer URL angesprochen werden. Servlets werden auf dem Server ausgeführt. FlexCardAdmin soll aber eine clientseitige Anwendung sein, die auf dem Clientrechner installiert und dort ausgeführt wird. Somit können auch Servlets für die Realisierung von FlexCardAdmin nicht verwendet werden. • Java Server Pages (JSP): Eine Java Server Page is eine um Java-Code angereicherte HTML-Seite. Java Server Pages erlauben die Vermischung von regulärem, statischem HTML mit dynamisch generierten Inhalten durch Java-Code. Anders als bei Servlets, bei denen HTML in Java-Code eingebettet wird, ist bei JSP der Java-Code in das HTML-Dokument eingefügt. Jede JSP wird automatisch zu einem Servlet kompiliert und ausgeführt. • Java Applets: ein Applet ist ein Java-Programm, das in einer HTML-Seite eingebettet ist und in einem Browser ausgeführt wird. Applets wurden schon ausführlich im Kapitel 2 eingeführt. Nach Berücksichtigung der gestellten Anforderungen und dem Vergleich mit den anderen Webtechnologien, haben sich Applets als die geeignete Technologie zur Erstellung von FlexCardAdmin erwiesen. Wie im Abschnitt 2.2 dargestellt, erfüllt die Java-Applet-Technologie die ersten drei der oben genannten Bedingungen. Darüber hinaus unterstützen die im Abschnitt 2.2.3 diskutierten Merkmale dieser Technologie das Sicherheitsniveau der gesamten Anwendung in hohem Maße, insbesondere bezogen auf die Sicherheit der eingebundenen Clients. Das nachfolgend vorgestellte Design des Moduls FlexCardAdmin vervollständigt die benötigten Sicherheitsmerkmale und garantiert darüber hinaus die Flexibilität und Erweiterbarkeit. 3.2.1 Funktionale Anforderungen FlexCardAdmin soll alle Smartcardoperationen, die FlexiTrust Identity Management ermöglicht und die im Abschnitt 3.1.2 vorgestellt wurden, unterstützen. Die Smartcardfunktionen der OCX-Komponente werden durch das Betätigen einer Taste auf der Enrollment-Webseite aufgerufen und anschließend ausgeführt. In der neuen Lösung wird diese Taste entfernt und stattdessen das Applet in der Webseite eingebettet. Beim Öffnen der Webseite wird das Applet automatisch geladen und ist einsatzbereit. FlexCardAdmin soll eine passende Benutzeroberfläche anbieten, um z.B. die Smartcard-PIN eingeben zu können. Durch die Interaktion mit der Benutzeroberfläche der Applets, kann ein Benutzer eine bestimmte Smartcardoperation starten. Da Daten mit dem Enrollment-Server ausgetauscht werden müssen, soll außerdem eine Schnittstelle zur Kommunikation mit dem 26 KAPITEL 3. IST- UND SOLL-ANALYSE Enrollment-Server vorhanden sein. Im Folgenden wird jede Smartcardoperation genauer analysiert und die Funktionalität vom FlexCard-Admin spezifiziert. Personalisieren einer Smartcard Im Abschnitt 3.1.2 wurde der bestehende Kartenpersonalisierungsprozess mit dem Einsatz der OCX-Komponente beschrieben. Hier wird der Ablauf der Kartenpersonalisierung mit dem Einsatz vom FlexCardAdmin geschildert. Die einzelnen Schritte bleiben größtenteils unverändert. Trotzdem werden sie hier der Vollständigkeit halber nochmal aufgelistet: 1. Login: Der Benutzer meldet sich mit seinen Benutzerdaten auf der Enrollment-Seite an. Der Enrollment-Server leitet die Daten weiter an das ESI. 2. Datenprüfung: ESI überprüft die Benutzerdaten mittels Datenbankabfragen sowie Abfragen am LDAP-Server; ESI generiert zufällige PIN und PUK und schickt diese zurück an den Enrollment-Server. 3. Kartenpersonalisierung Teil 1: Nach einer erfolgreichen Benutzeranmeldung erscheint eine Seite mit dem eingebetteten Applet. Diese Seite zeigt die automatisch generierte PIN der Karte. Um die Karte zu personalisieren, gibt der Benutzer die generierte PIN in den Applet-Eingabefeldern ein und startet den Personalisierungsprozess. Folgende Schritte werden durchlaufen: a) Zuerst werden die PUK und die PIN zusammen mit Fehlbedienungszähler auf die Karte geschrieben. Der Startwert des Fehlbedienungszählers soll konfigurierbar sein. b) Die Schlüsselpaare für die elektronische Signatur und Windows-SmartcardLogon werden in der Karte erzeugt. c) Mit den neuen Schlüsseln werden PKCS#10-Zertifikatsanträge erstellt und an das ESI geschickt. 4. Zertifikatserstellung: Die beantragten Zertifikate, sowie ein Verschlüsselungszertifikat, werden von der FlexiTrust-CA, wie schon im Abschnitt 3.1.2 beschrieben, erstellt. 5. Kartenpersonalisierung Teil 2: Eine neue Webseite wird geladen, in der das Applet integriert ist. Der Enrollment-Server leiter die zwei erstellten Zertifikate, sowie die PKCS#12-Datei, die das Verschlüsselungszertifikat und das zugehörige Schlüsselpaar enthält, an FlexCardAdmin weiter. Das Applet schreibt diese auf die Karte. Bei der Erstellung einer Ersatz- oder Notfallkarte handelt es sich um einen speziellen Fall der Kartenpersonalisierung. Die Operationen, die dort ausgeführt werden, sind identisch zu den oben aufgelisteten. 27 KAPITEL 3. IST- UND SOLL-ANALYSE Entsperren der Smartcard Genauso wie in Abschnit 3.1.2 beschrieben, soll FlexCardAdmin in der Lage sein, eine Karte zu entsperren. Diese sind die Schritte, die ein Benutzer durchlaufen muss, um seine Karte mit FlexCardAdmin zu entsperren: 1. Login: Der Benutzer meldet sich auf dem Enrollment-Server (über das bereitgestellte Webinterface) mit seinem Benutzernamen, Passwort und der TAN an. 2. Datenprüfung: ESI überprüft die Benutzerdaten. Es wird außerdem überprüft, ob die an die TAN gebundene Smartcard-Seriennummer mit der Seriennummer der Chipkarte übereinstimmt. 3. Karte entsperren: Nach einer erfolgreichen Benutzeranmeldung erscheint eine Seite mit dem eingebetteten Applet. Eine neue PIN wird generiert und im Browser angezeigt. Der Benutzer gibt die neue PIN in den Eingabefeldern des Applets ein und startet das Entsperren. Der Fehlbedienungszähler der PIN wird zurückgesetzt und die neue PIN wird auf die Karte geschrieben. Löschen der Karteninhalte Mit FlexCardAdmin soll durch die Ausführung folgender Schritte möglich sein, eine Karte zu löschen: 1. Login: Der Benutzer meldet sich auf dem Enrollment-Server (über das bereitgestellte Webinterface) mit seinem Benutzernamen, Passwort und der TAN an. 2. Datenprüfung: ESI überprüft die Benutzerdaten. Es wird außerdem überprüft, ob die an die TAN gebundene Smartcard-Seriennummer mit der Seriennummer der Chipkarte übereinstimmt. 3. Karte löschen: Nach einer erfolgreichen Benutzeranmeldung erscheint eine Seite mit dem eingebetteten Applet. Der Benutzer gibt die PIN in dem Eingabefeld des Applets ein und die Karte wird mit Hilfe der PUK komplett gelöscht. PIN ändern Eine neue Funktion, die zur Zeit nicht von der OCX-Komponente angeboten wird, soll mit FlexCardAdmin möglich sein, nämlich das Ändern der PIN. Ein neuer TANVerwendungszweck PIN ändern“ soll eingeführt werden. Nachdem der Benutzer die TAN ” für den Prozess PIN ändern“ erhalten hat, kann er die PIN seiner Smartcard ändern. ” Dazu sind folgende Arbeitsschritte notwendig: 1. Login: Der Benutzer meldet sich auf dem Enrollment-Server mit seinem Benutzernamen, Passwort und der TAN an. 2. Datenprüfung: ESI überprüft die Benutzerdaten. Es wird außerdem überprüft, ob die an die TAN gebundene Smartcard-Seriennummer mit der Seriennummer der Chipkarte übereinstimmt. 3. PIN ändern: Nach erfolgreicher Anmeldung wird eine Seite mit dem integrierten 28 KAPITEL 3. IST- UND SOLL-ANALYSE Applet angezeigt. Mit dem Applet kann der Benutzer die PIN ändern, indem er die bisherige und die neue PIN eingibt. 3.2.2 Qualitätsanforderungen Die Software soll folgende Eigenschaften haben: • Flexibilität – möglichst viele verschiedene Kartentypen sollen unterstützt werden – möglichst viele verschiedene Kartenleser sollen unterstützt werden; die Anwendung soll mit gängigen Kartenlesern funktionieren, im Idealfall unabhängig davon sein – die Anwendung soll auf verschiedenen Plattformen laufen (mindestens Linux, Windows 2000 und Windows XP) • leichtes Deployment – die Anwendung soll mit möglichst wenig Installationsaufwand (am besten mit keinem) zur Verfügung stehen – die Anwendung auf der Clientseite soll immer up-to-date sein • Modularität – die Benutzeroberfläche soll leicht austauschbar und anpassbar sein • Benutzerfreundlichkeit • Erweiterbarkeit: es soll möglichst einfach sein neue Komponenten in die Software hinzuzufügen, wie zum Beispiel: – Hinzunahme neuer Kartentypen – Hinzunahme neuer Kartenschnittstellen – Hinzunahme neuer Kartenleser – Hinzunahme neuer Betriebssystemen – Hinzunahme neuer Sprachen 3.2.3 Sicherheitsanforderungen Da es sich bei der digitalen Identität um sensible Daten handelt, muss sichergestellt werden, dass diese Daten geschützt vor unauthorisiertem Zugriff bleiben. Sichere PIN-Eingabe Die Daten auf der Karte werden durch die PIN vor unberechtigtem Zugriff geschützt. Es gibt Kartenleser mit integrierter Tastatur, die eine sichere PIN-Eingabe (Secure PIN Entry - SPE) ermöglichen, d.h. die PIN wird über die Kartenlesertastatur eingegeben. Diese Art der PIN-Eingabe ist sicherer als die Eingabe über eine graphische Benutzeroberfläche, da die sensiblen Daten weder auf dem PC gespeichert, noch über die unsichere PC/Kartenleser-Verbindung übertragen werden. Sie befinden sich ausschließlich innerhalb 29 KAPITEL 3. IST- UND SOLL-ANALYSE der Karten/Leser-Umgebung. Die PIN wird direkt zu der Karte geschickt und somit ist diese von Viren und Trojanern geschützt. Wenn ein Kartenleser, der eine Tastatur besitzt, mit der Anwendung benutzt wird, sollte es möglich sein, die PIN-Eingaben über die Kartenlesertastatur zu machen, um somit höchste Sicherheit zu bieten. Für die sonstigen Kartenleser erfolgt die Eingabe über die graphische Benutzeroberfläche. 30 Kapitel 4 Designentstehung In diesem Kapitel wird beschrieben, wie das Design der Applikation entstanden ist. Das Kapitel soll dazu dienen nachzuvollziehen, welche Entscheidungen im Rahmen der Erstellung der Arbeit getroffen wurden und warum. 4.1 Analyse des Frameworks SmartcardServices Für die flexible Anbindung zu Smartcards wird das Framework SmartcardServices [Dra06] verwendet. Da die FlexCardAdmin-Implementierung auf diesem Framework basiert, ist es notwendig dieses zu analysieren, um zu wissen welche Funktionalität angeboten wird und ob es irgendwelche Besonderheiten gibt, die berücksichtigt werden sollen. 4.1.1 Implementierungen Das Framework SmartcardServices ist so konzipiert, dass es Interfaces zu den einzelnen Kartenoperationen definiert und für jede Kartenschnittstelle oder Kartentyp, die unterstützt werden sollen, Implementierungen geliefert werden müssen. Einige Implementierungen existieren schon in der vorhandenen Frameworkversion. Unterstützte Kartenschnittstellen Das Framework unterstützt in seiner jetzigen Version folgende Kartenschnittstellen: • PC/SC • OCF • PKCS#11 Unterstützte Chipkarten Da die PKCS#11-Schnittstelle unabhängig von der verwendeten Chipkarte ist, können im Prinzip beliebige Kartentypen über diese Kartenschnittstelle angesprochen werden. Die anderen zwei Schnittstellen sind wiederum abhängig vom Betriebssystem der Chipkarte und können nur dann benutzt werden, wenn eine ApduChannelCard-Implementierung für diesen Kartentyp bereitgestellt wird. Die jetzige Version des Frameworks bietet eine solche Implementierung für TCOS-2.0-Chipkarten. 31 KAPITEL 4. DESIGNENTSTEHUNG 4.1.2 Kartenoperationen Es ist wichtig, dass das Framework alle Kartenoperationen unterstützt, die benötigt werden, um die gestellten Anforderungen zu erfüllen. Deswegen ist eine der Aufgaben dieser Arbeit gewesen, eine Analyse durchzuführen und festzustellen, ob alle notwendigen Kartenoperationen vom Framework angeboten werden. Kartenpersonalisierung Chipkarten können personalisiert werden, indem persönliche Daten auf der Karte gespeichert werden. Voraussetzung für die Personalisierung ist, dass die Karte leer ist. Prinzipiell ist es möglich und sinnvoll eine Karte mehrmals zu personalisieren. Das wäre notwendig, wenn z.B. ein Mitarbeiter das Unternehmen verlässt. Seine Karte kann von einem anderen Mitarbeiter benutzt werden, nachdem sie erneut personalisiert wurde. Die PKCS#11-Implementierung, auf der das Framework SmartcardServices aufbaut, unterstützt die mehrfache Kartenpersonalisierung nicht. Sobald eine Karte zum ersten Mal personalisiert wurde, kann diese nicht ein zweites Mal personalisiert werden. Auch wenn man die Karteninhalte vollständig löscht, wird die Karte als personalisiert erkannt. Da die mehrfache Personalisierung eine Anforderung an den FlexCardAdmin ist, bedeutet das, dass die Kartenpersonalisierung entweder über PC/SC oder über OCF durchgeführt werden muss. Die Kartenpersonalisierung umfasst mehrere Schritte: • PIN und PUK der Karte setzen • Schlüsselpaare auf der Karte generieren • Zertifikatsanträge erstellen • Schlüsselpaare und die zugehörigen Zertifikate auf die Karte schreiben Das Setzen der PIN und PUK wird von allen Kartenschnittstellen unterstützt. Die Generierung von Schlüsselpaaren auf der Karte wird von TCOS-2.0-Karten nicht unterstützt. Das Framework bietet aber trotzdem die Möglichkeit, Schlüsselpaare für TCOS-2.0Karten zu generieren, indem diese in einer sicheren Umgebung erzeugt und anschließend auf die Karte geschrieben werden. Bei der Schlüsselgenerierung ist es außerdem wichtig, anzugeben, wo genau auf der Karte die neuen Schlüssel geschrieben werden sollen. Wenn mehrere Schlüsselpaare auf der Karte erzeugt werden sollen, müssen sie referenziert werden können. Diese Funktionalität fehlt in der PKCS#11-Schnittstelle. Man kann zwar Schlüsselpaare erzeugen, aber man kann nicht angeben, wo die Schlüssel auf der Karte zu speichern sind. Demzufolge werden generierte Schlüssel auf der Karte überschrieben, wenn die Schlüsselgenerierung mehrmals durchgeführt wird, da die Schlüssel immer an derselben Stelle auf der Karte gespeichert werden. Das ist noch ein Grund (genauso wie die verhinderte mehrfache Kartenpersonalisierung), die PKCS#11-Implementierung bei der Kartenpersonalisierung nicht zu verwenden. Das Erstellen von Zertifikatsanträgen sowie das Schreiben von Schlüsselpaaren und Zertifikaten auf der Karte ist mit allen Kartenschnittstellen möglich. Um ein Zertifikat auf die Karte zu schreiben, muss das zugehörige Schlüsselpaar auf der Karte vorhanden sein. 32 KAPITEL 4. DESIGNENTSTEHUNG Löschen der Karteninhalte Bevor eine Karte erneut personalisiert werden kann, müssen die vorhandenen Karteninhalte zuerst gelöscht werden. Die PKCS#11-Implementierung unterstützt nicht das vollständige Löschen der Karte, weil die PIN und PUK nicht gelöscht werden können. Die Konsequenz ist, dass man Karten über die PC/SC oder OCF-Schnittstelle löschen muss. Ändern und Entsperren der PIN Beide Operationen werden vom Framework unterstützt und können mit jeder Kartenschnittstellenimplementierung durchgeführt werden. Abbildung 4.1 zeigt alle Kartenoperationen im Überblick und die Schnittstellen, die diese Operationen unterstützen. 4.1.3 Referenzieren von Objekten auf der Karte Die Daten auf der Karte müssen referenziert werden können. Wenn sich z.B. mehrere Schlüssel auf der Karte befinden, muss es möglich sein, zu erkennen, welcher Schlüssel zur Verschlüsselung und welcher zum Signieren benutzt wird, damit der richtige Schlüssel für die entsprechende Operation verwendet werden kann. Das Framework bietet Methoden an, um alle Zertifikate, alle Schlüssel (privat oder öffentlich) und alle sonstigen Datenobjekte, die sich auf der Karte befinden, auszulesen. Wie erkennt man in dieser Liste das Objekt, das man sucht? Jedes Kartenobjekt ist mit einer ID versehen und diese ID ist auch sichtbar für den Anwender. Die ID ist aber mit keiner semantischen Bedeutung verknüpft; sie gibt keine Information über das Anwendungsgebiet des Objekts. Es besteht keine Möglichkeit zu erfahren, welches Objekt in einem bestimmten Anwendungsfall benutzt werden soll. Wenn sich z.B. auf der Karte zwei Signaturschlüssel befinden, ist es unmöglich den richtigen Schlüssel zu erkennen. Man braucht also eine zusätzliche Abstraktionsebene, die vom FlexCardAdmin angeboten werden soll und die das Referenzieren von Objekten auf der Karte ermöglicht. Es muss eine Zuordnung zwischen jedem Objekt auf der Karte und der Applikation, die dieses Objekt benutzt, hergestellt werden. Wird ein Objekt für eine bestimmte Applikation auf der Karte gesucht, muss klar sein, wo dieses zu finden ist, so dass es ausgelesen werden kann. Wenn sich z.B. mehrere Zertifikate auf der Karte befinden und man das Windows-Logonzertifikat sucht, muss es möglich sein, dieses bestimmte Zertifikat eindeutig zu identifizieren. Es ist offensichtlich, dass wenn man eine Verknüpfung zwischen der Objekt-ID und der Applikation herstellt, immer bekannt sein wird, welches Objekt für diese Applikation benutzt werden soll. Die Objekt-ID wird von den verschiedenen Kartenschnittstellen unterschiedlich dargestellt. Bei PKCS#11 wird die Benennung durch den Treiber festgelegt. Objekte werden mit symbolischen Namen referenziert. So bedeutet zum Beispiel die Kennung TCOS1-00“ ” Objekt 00 auf der TCOS-Smartcard im Slot 1. Mehrere zusammengehörige Objekte, wie ein Schlüsselpaar und das zugehörige Zertifikat, haben identische Kennung, können aber 33 KAPITEL 4. DESIGNENTSTEHUNG Smartcardoperation Smartcard personalisieren - Mehfache Personalisierung - PIN initialisieren - PUK initialisieren - Schlüsselpaar schreiben - Zertifikat schreiben - Zertifikatsantrag erstellen - Schlüsselpaar generieren Smartcard löschen - PIN löschen - PUK löschen - Schlüsselpaare löschen - Zertifikate löschen - Sonstige Daten löschen PIN ändern PIN entsperren Kartenschnittstelle PC/SC, OCF PC/SC, OCF PC/SC, OCF, PKCS#11 PC/SC, OCF, PKCS#11 PC/SC, OCF, PKCS#11 PC/SC, OCF, PKCS#11 PC/SC, OCF, PKCS#11 PC/SC, OCF, PKCS#11 PC/SC, OCF PC/SC, OCF PC/SC, OCF PC/SC, OCF, PKCS#11 PC/SC, OCF, PKCS#11 PC/SC, OCF, PKCS#11 PC/SC, OCF, PKCS#11 PC/SC, OCF, PKCS#11 Abbildung 4.1: Smartcardoperationen und die Kartenschnittstellenunterstützung anhand des Objekttyps (privater Schlüssel, öffentlicher Schlüssel, Zertifikat etc.) eindeutig identifiziert werden. Wenn es sich um keine TCOS-Karten handelt, sieht die Kennung entsprechend anders aus. Bei PC/SC und OCF wird das Referenzieren auf der Kartenbetriebssystemebene gemacht. Objekte werden mit einem eindeutigen Pfad im Dateisystem identifiziert, der gemäß dem Standard ISO 7816 gebildet wird und für TCOS-2.0-Karten beispielsweise wie folgt aussieht: :3f00:4101:4e03. Da sich die Objekt-IDs in Abhängigkeit von der Kartenschnittstelle und dem Kartentyp unterscheiden, muss FlexCardAdmin die Möglichkeit bieten, jeder Kombination aus Applikation, Kartenschnittstelle, Kartentyp und Objekttyp eine spezifische Objekt-ID zuzuordnen, die in dieser Konstellation“ benutzt werden soll, um das Objekt auszulesen ” oder auf der Karte zu schreiben. 4.2 Analyse der Kartenschnittstellen Die Kommunikation mit der Chipkarte kann über verschiedene standardisierte SmartcardSchnittstellen realisiert werden. Damit die Flexibilität vom FlexCardAdmin gewährleistet wird, sollte dieser in der Lage sein alle Kartenschnittstellen zu unterstützen. Das Framework SmartcardServices, das als Basis der Implementierung benutzt wird, hilft diese Aufgabe zu erfüllen, da sie eine Abstraktionsebene darstellt und die Chipkartenfunktionen unabhänging von der verwendeten Kartenschnittstelle zur Verfügung stellt. Die eigentliche Implementierung, die benutzt wird, bleibt für die Anwender transparent. 34 KAPITEL 4. DESIGNENTSTEHUNG 4.2.1 Anforderungen an die Umgebung Obwohl das Framework eine gewisse Flexibilität mit sich bringt, bietet es keine Funktionalität zur Vorbereitung der Umgebung (in diesem Fall der Clientrechner) an, damit die Kartenschnittstellen benutzbar sind. Die Kartenschnittstellen müssen nämlich zuerst installiert und initialisiert werden, bevor sie einsatzbereit sind; sie stellen gewisse Anforderungen an die Umgebung. D.h. jede Anwendung, die das Framework SmartcardServices benutzt, muss selbst sicherstellen, dass alle Vorbereitungen zur Kartenschnittstelleninitialisierung getroffen wurden. Um das zu vermeiden, muss ein übergreifendes Konzept zur Kartenschnittstelleninitialisierung entwickelt und vom FlexCardAdmin realisiert werden, so dass kein zusätzlicher Aufwand von Benutzerseite verursacht wird. Dafür muss analysiert werden, wie jede Kartenschnittstelle initialisiert wird, um Gemeinsamkeiten zu finden, die für die Spezifizerung des Konzeptes wichtig sind. Initialisierung der Framework-Schnittstelle zu PC/SC Um die FrameworkSchnittstelle zu PC/SC zu benutzen, ist folgendes notwendig: • Java-Wrapper JPC/SC jpcsc.jar [7] im Java-Classpath und die dazugehörige native Bibliothek für das verwendete Betriebssystem (jpcsc.dll, jpcsc.so) in java.library.path. • FlexiCoreProvider-1-1-5p3.signed.jar (oder eine andere Version des FlexiProviders) und codec.jar im Java-Classpath, um PKCS#10-Zertifikatsanträge zu erstellen • eine native PC/SC-Bibliothek (Treiber) in java.library.path in Abhängigkeit vom Betriebssystem für jeden Kartenleser, der unterstützt werden soll. Die meisten Kartenleser unterstützen PC/SC und keine zusätzliche Treiber müssen geladen werden. • Konfigurationsdateien und sonstige Daten, die vom Kartenleser benötigt werden, z.B. smartkey.inf und ct32br.dll beim Kobil Kaan Advanced Kartenleser. • die ApduChannelCard-Implementierung, die verwendet werden soll, muss angegeben werden, z.B. de.tud.cdc.cardservices.tcos20.TCOS20Card • Chipkartenspezifische Properties müssen geladen werden, z.B. tcos20.properties für TCOS-2.0-Chipkarten. Initialisierung der Framework-Schnittstelle zu PKCS#11 Um die FrameworkSchnittstelle zu PKCS#11 zu benutzen ist folgendes notwendig: • der Java-PKCS#11-Provider p11.jar [1] im Java-Classpath und die zugehörige native Bibliothek für das verwendete Betriebssystem (nativepkcs11.dll, libnativepkcs11.so) in java.library.path • FlexiCoreProvider-1-1-5p3.signed.jar (oder eine andere Version des FlexiProviders) und codec.jar im Java-Classpath, um PKCS#10-Zertifikatsanträge zu erstellen 35 KAPITEL 4. DESIGNENTSTEHUNG • eine native PKCS#11-Bibliothek (Treiber) in java.library.path in Abhängigkeit vom Betriebssystem für jeden Kartenleser, der unterstützt werden soll. (z.B. die Bibliothek für Kobil-Kartenleser kpkcs11hash.dll oder libkpkcs11hash.so) • Konfigurationsdateien und sonstige Daten, die vom Kartenleser benötigt werden, z.B. smartkey.inf und ct32br.dll beim Kobil Kaan Advanced Kartenleser. • Die Chipkarte muss nicht spezifiziert werden, da PKCS#11 eine High-LevelKartenschnittstelle ist, die vom Betriebssystem der Smartcard abstrahiert. Dies bedeutet, dass die PKCS#11-Implementierung prinzipiell mit allen Smartcards funktionsfähig ist. • Chipkartenspezifische Properties müssen geladen werden, z.B. tcos20.properties für TCOS-2.0-Chipkarten. Initialisierung der Framework-Schnittstelle zu OCF Um die Frameworkschnittstelle zu OCF (über einen PC/SC-Treiber) zu benutzen, ist folgendes notwendig: • OCF-Wrapper fur PC/SC pcsc-wrapper-2.0.jar [2] im Java-Classpath und die zugehörige native Bibliothek für das verwendete Betriebssystem (ocfpcsc1.dll) in java.library.path • FlexiCoreProvider-1-1-5p3.signed.jar (oder eine andere Version des FlexiProviders) und codec.jar im Java-Classpath, um PKCS#10-Zertifikatsanträge zu erstellen • eine native PC/SC-Bibliothek (Treiber) in java.library.path in Abhängigkheit vom Betriebssystem für jeden Kartenleser, der unterstützt werden soll. Wie schon erwähnt, unterstützen die meisten Kartenleser PC/SC und keine zusätzliche Treiber müssen geladen werden. • Konfigurationsdateien und sonstige Daten, die vom Kartenleser benötigt werden, z.B. smartkey.inf und ct32br.dll beim Kobil Kaan Advanced Kartenleser • Die ApduChannelCard-Implementierung, die verwendet werden soll, muss angegeben werden, z.B. de.tud.cdc.cardservices.tcos20.TCOS20Card für TCOS-2.0Chipkarten. • Chipkartenspezifische Properties müssen geladen werden, z.B. tcos20.properties für TCOS-2.0-Chipkarten. • Die Konfigurationsdatei opencard.properties [3] muss sich in einem der folgenden Verzeichnisse befinden: – [java.home]/lib/opencard.properties – [user.home]/.opencard.properties – [user.dir]/opencard.properties – [user.dir]/.opencard.properties Basierend auf den obigen Informationen können die Daten, die benötigt werden, um die Schnittstellen zu initialisieren, in folgende Kategorien aufgeteilt werden: 36 KAPITEL 4. DESIGNENTSTEHUNG • Externe Bibliotheken • Kartenschnittstellenspezifische Daten – native Bibliotheken – Konfigurationsdateien – Kartenlesertreiber für die konkrete Kartenschnittstelle • Kartenleserspezifische Daten – native Bibliotheken (Kartenlesertreiber) – Konfigurationsdateien • Chipkartenspezifische Daten – Konfigurationsdateien (Java-Property-Format) Die externen Bibliotheken werden als zusätzliche Archive in der Applikation eingebunden, d.h. ihr Deployment verursacht keinen zusätzlichen Implementierungsaufwand. Beim Starten des Applets werden sie vom Server auf den Clientrechner heruntergeladen und stehen dem Applet zur Verfügung. Die nativen Bibliotheken und die Konfigurationsdateien der Kartenschnittstellen müssen wiederum zur Laufzeit geladen werden. Voraussetzung ist, dass die zu verwendende Kartenschnittstelle bekannt ist, damit die entsprechenden Bibliotheken geladen werden. Die Kartenlesertreiber und die Konfigurationsdateien der Chipkarten können auch nur zur Laufzeit geladen werden, nachdem die Applikation ermittelt hat, welche Kartenleser und Chipkarte gerade verwendet werden. Wie erkennt die Applikation die gerade verwendeten Kartenschnittstelle, Kartenleser und Karte? Die folgenden Abschnitten befassen sich mit der Beantwortung dieser Frage. 4.2.2 Auswahl der Kartenschnittstelle Beim Starten des Applets muss festgelegt werden welche Kartenschnittstelle benutzt werden soll. Dies ist notwendig, damit die Applikation weiß, welche SmartcardServiceImplementierung zu verwenden ist. Zwei Möglichkeiten sind hier vorgesehen: der Benutzer kann die Kartenschnittstelle auf der Benutzeroberfläche auswählen oder die Kartenschnittstelle wird vom Administrator als Konfigurationsparameter in der Konfigurationsdatei des Applets angegeben. Die zweite Lösung ist besser aus der Sicht der Benutzer, weil die Benutzer die verschiedenen Kartenschnittstellen nicht kennen müssen und die Auswahl der richtigen Kartenschnittstelle ist schwierig oder unmöglich. Diese Lösung hat aber auch einen Nachteil. Wenn die Kartenschnittstelle einmal konfiguriert ist, wird diese für jede Operation verwendet, die die Benutzer ausführen möchten. Es gibt allerdings Kartenschnittstellen, die nicht alle Operationen unterstützen, die mit dem Applet ausgeführt werden sollen; z.B. eine Chipkarte kann über die PKCS#11-Schnittstelle nicht gelöscht werden. Wenn ein Benutzer versucht, seine Karte zu löschen und die Applikation für die PKCS#11-Kartenschnittstelle konfiguriert ist, würde die Operation fehlschlagen. Das bedeutet, dass die angegebene Kartenschnittstelle nur als Defaultschnittstelle betrachtet werden muss. Sobald eine Operation ausgeführt werden soll, die von dieser Kartenschnittstelle nicht unterstützt wird, muss das Applet im Hintergrund die Kartenschnittstelle mit 37 KAPITEL 4. DESIGNENTSTEHUNG einer anderen austauschen, mit der die Operation ausführbar ist. Sowohl die Angabe der Kartenschnittstelle als Konfigurationsparameter, als auch die Angabe über die Benutzeroberfläche, soll mit dem Applet möglich sein, damit die Flexibilität erhalten bleibt. Die Angabe über die Benutzeroberfläche kann außerdem zu Testzwecken sehr praktisch sein. Wenn keine Kartenschnittstelle in der Konfigurationsdatei des Applets angegeben wurde, soll auf der ersten Seite des Applets eine Liste mit den unterstützten Kartenschnittstellen erscheinen. Der Benutzer kann die gewünschte Kartenschnittstelle auswählen. Falls die Kartenschnittstelle vorkonfiguriert wurde, wird die Auswahlmöglichkeit auf der Benutzeroberfläche entfernt. 4.2.3 Auswahl des Kartenlesers Die meisten Kartenschnittstellen können ohne Kenntnis des Kartenlesers, der verwendet wird, initialisiert werden. Dies ist nur bei der PKCS#11-Kartenschnittstelle nicht der Fall. Für die Kartenschnittstelleninitialisierung verlangt der Java-PKCS#11-Provider die Angabe des PKCS#11-Kartenlesertreibers. Treiber sind kartenleserspezifisch, d.h es gibt keinen Default-Treiber, der für alle Kartenleser benutzt werden kann. Man muss genau den Treiber des Kartenlesers angeben, der gerade verwendet wird. Der verwendete Kartenleser muss also bekannt sein, bevor die Kartenschnittstelle initialisiert ist. Die automatische Erkennung des Kartenlesers ist aber zu diesem Zeitpunkt nicht möglich, weil ohne initialisierte Kartenschnittstelle keine Vebindung zum Kartenleser aufgebaut werden kann und somit keine Information über den Kartenleser verfügbar ist. Die einzige Möglichkeit, die übrig bleibt, ist die Angabe des verwendeten Kartenlesers über die Benutzeroberfläche oder als Parameter in der Konfigurationsdatei vom FlexCardAdmin, wenn man davon ausgehen kann, dass immer derselbe Kartenlesertyp mit dem Applet verwendet wird. Je nachdem welcher Kartenleser gewählt wurde, muss das Applet den entsprechenden Treiber finden und diesen dem Java-PKCS#11-Provider übergeben. Das bedeutet auch, dass die (betriebssystemspezifischen) Treiber aller Kartenleser, die unterstützt werden sollen, der Applikation bekannt und in dem Lieferpaket enthalten sein müssen. Auf den ersten Blick könnte man sagen, dass die Kartenleserangabe für die anderen Kartenschnittstellen nicht notwendig ist und die Auswahl des Kartenlesers (über die Benutzeroberfläche oder in der Konfigurationsdatei) nur für die PKCS#11-Schnittstelle implementiert werden muss. Die restlichen Schnittstellen können ohne die Kartenleserangabe bzw. ohne die Angabe eines konkreten Kartenlesertreibers initialisiert werden. Es kann aber passieren, dass für den Kartenleser, der gerade verwendet wird, doch ein Treiber für die Schnittstelle geladen werden muss, damit die Kommunikation mit dem Kartenleser über diese Schnittstelle möglich ist.Dieses Problem kann folgendermaßen gelöst werden: alle der Applikation bekannten Kartenlesertreiber werden bei der Initialisierung der Kartenschnittstelle geladen, ohne den konkreten Treiber zu kennen, der tatsächlich benötigt wird. Der Kartenleser erkennt später den richtigen Treiber und verwendet ihn. Bis jetzt spricht also alles dafür, die Kartenleserangabe nur für die PKCS#11-Schnittstelle 38 KAPITEL 4. DESIGNENTSTEHUNG zu ermöglichen. Allerdings gibt es Fälle, in denen die Kartenschnittstelle mitten in der Ausführung des Applets ausgetauscht werden muss. Dies ist notwendig, wenn die gewählte Kartenschnittstelle die auszuführende Smartcardoperation nicht unterstützt. In diesem Fall wird die Kartenschnittstelle im Hintergrund gegen die Defaultschnittstelle ausgetauscht. Wenn die Default-Kartenschnittstelle beispielsweise PKCS#11 ist und die Angabe des verwendeten Kartenlesers verlangt, stößt man auf das Problem, dass das Applet den richtigen Kartenlesertreiber nicht kennt, weil die urspünglich gewählte Kartenschnittstelle diesen nicht kennt. Somit kann die Default-Kartenschnittstelle nicht initialisiert werden. Um dieses Problem zu umgehen ist die Entscheidung gefallen, die Möglichkeit zur Auswahl des Kartenlesers (auf der Benutzeroberfläche oder in der Konfigurationsdatei) für jede Kartenschnittstelle anzubieten und nicht nur speziell für die PKCS#11-Schnittstelle. Es bleibt nur noch zu klären, wie der richtige Treiber erkannt wird, nachdem ein Kartenleser ausgewählt wurde. Es muss eine Zuordnung zwischen dem Kartenleser und seinem Treiber geben. Diese kann in der Konfigurationsdatei des Applets abgebildet werden. Für jede Kombination aus Kartenleser, Kartenschnittstelle und Betriebssystem muss ein Konfigurationsparameter angelegt werden, dessen Wert der Name der entsprechenden Treiberdatei ist. 4.2.4 Auswahl der Chipkarte Alle Kartenschnittstellen bis auf PKCS#11 verlangen bei ihrer Initialisierung die Angabe der verwendeten Chipkarte. Die ApduChannelCard-Implementierung, die verwendet werden soll, muss als Property der Kartenschnittstelle angegeben werden (z.B. de.tud.cdc.cardservices.tcos20.TCOS20Card im Fall von TCOS-2.0-Chipkarten). Die PKCS#11-Schnittstelle verlangt nicht die Kartenangabe, da sie eine High-LevelKartenschnittstelle ist, die vom Betriebssystem der Smartcard abstrahiert und prinzipiell mit allen Smartcards funktionsfähig ist. Trotzdem muss die verwendete Chipkarte bekannt sein, damit die kartenspezifischen Properties geladen werden können. Genauso wie bei den Kartenlesern ist die automatische Erkennung der Karte nicht möglich, weil keine Verbindung zu der Karte aufgebaut werden kann bevor die Kartenschnittstelle initialisiert ist. D.h. der Typ der verwendeten Chipkarte muss angegeben werden. Hier gibt es, wie bei der Auswahl der Kartenschnittstelle und des Kartenlesers, folgende zwei Möglichkeiten: Die Chipkarte wird entweder auf der Benutzeroberfläche ausgewählt oder als Konfigurationsparameter in der Konfigurationsdatei angegeben. Falls kein Konfigurationsparameter angegeben wurde, erscheint auf der ersten Seite des Applets eine Liste der unterstützten Smartcards und der Benutzer muss diejenige auswählen, die zu seiner Karte passt. Falls eine Smartcard in der Konfigurationsdatei angegeben wird, verschwindet die Auswahlmöglichkeit aus der Benutzerobrfläche. 39 KAPITEL 4. DESIGNENTSTEHUNG 4.2.5 Die Verknüpfung Kartenschnittstelle - Kartenoperation Es gibt Operationen, die nicht über jede beliebige Kartenschnittstelle realisierbar sind. Das Applet muss flexibel genug sein, um zu erkennen, ob eine Operation mit der gewählten Kartenschnittstelle ausführbar ist und entsprechend reagieren. Die Operation muss über die Kartenschnittstelle realisiert werden, über die dies möglich ist. D.h es muss eine Default-Kartenschnittstelle für jede Operation definiert werden. Abbildung 4.1 zeigt welche Operation von welcher Kartenschnittstelle unterstützt wird. 4.3 Kommunikation mit dem Enrollment-Server FlexCardAdmin soll mit der vorhandenen Lösung von FlexSecure interagieren, insbesondere mit dem Enrollment-Server. Um dies zu realisieren, müssen die möglichen Formen der Appletintegration analysiert werden und die Schnittstellen, über die die Interaktion stattfinden soll, definiert werden. Das erste Szenario wäre, dass das Grundgerüst der bestehenden FlexSecure-Lösung unverändert bleibt und lediglich der Teil, der die Kommunikation mit der Chipkarte übernimmt, durch das neue Applet ersetzt wird. D.h. Benutzer loggen sich weiterhin über die Enrollment-Seite ein und anschließend wird das Applet gestartet, das die Verbindung zu der Karte aufbaut. Im Detail bedeutet dies, dass folgende Schritte durchlaufen werden: • Schritt 1: Login über die Enrollment-Seite Der Benutzer möchte eine bestimmte Operation mit seiner Chipkarte ausführen. Er hat die notwendige TAN beantragt und bekommen. Er meldet sich mit seinem Benutzernamen, Passwort und TAN auf der Login-Seite des Enrollment-Servers an, um die Operation auszuführen. Der Enrollment-Server leitet die Daten weiter an ESI. • Schritt 2: Datenprüfung (ESI) ESI überprüft die Benutzerdaten mittels Datenbankabfragen sowie Abfragen am LDAP-Server. • Schritt 3: Kommunikation mit der Chipkarte mittels FlexCardAdmin An dieser Stelle wird das Applet aufgerufen. Je nachdem welche Operation ausgeführt wird, werden Daten auf die Karte geschrieben, aktualisiert oder gelöscht. Daten, die das Applet eventuell benötigt, werden von der Enrollment-Webseite übergeben. Und umgekehrt alle Daten, die sich aus der Appletausführung ergeben, werden an die Enrollment-Seite weitergeleitet. • Schritt 4: Datenübertragung (ESI) Die Enrollment-Seite kümmert sich darum, dass die richtigen Empfänger (z.B. die CA) diese Daten bekommen. 40 KAPITEL 4. DESIGNENTSTEHUNG Die Schnittstelle zwischen dem Applet und der Enrollment-Seite muss spezifiziert werden. Es muss festgelegt werden, wie das Applet Daten von der Seite übergeben bekommt und umgekehrt wie das Applet Daten an die Seite schickt. Jedes Mal, wenn eine Chipkartenoperation ausgeführt werden soll, muss sich der Benutzer neu auf der Enrollment-Seite anmelden und das Applet wird neu gestartet. Beim Initialisieren des Applets werden alle benötigten Bibliotheken neu geladen. Dies kann einige Sekunden dauern. Nachdem das Applet gestartet ist und auf der Benutzeroberfläche des Applets die gewünschte Kombination aus Karte, Kartenleser und Kartenschnittstelle gewählt wurde (falls dies nicht schon vorkonfiguriert war), werden zusätzlich die Kartenlesertreiber sowie alle Bibliotheken, die die Kartenschnittstellen benötigen, geladen. D.h., die Wartezeiten zum Starten des Applets könnten steigen, wenn man mehrere Operationen nacheinander ausführen möchte und das Applet mehrfach gestartet wird. Um dieses Problem zu umgehen, könnte man das Einloggen am Enrollment-Server in das Applet integrieren. Im Prinzip heisst das, dass die Enrollment-Seite in ein Applet konvertiert wird. In diesem Fall würden folgende Schritte durchlaufen werden: • Schritt 1: FlexCardAdmin starten Wenn die Login-Seite des Enrollment-Servers aufgerufen wurde, wird das Applet gestartet. • Schritt 2: Login zum Enrollment-Server über das Applet Der Benutzer meldet sich über die Benutzeroberfläche des Applets am EnrollmentServer mit seinem Benutzernamen, Passwort und TAN an. Hier muss die Logik zum Aufbau der Verbindung zum Enrollment-Server aus der Login-Seite im Applet übernommen werden. • Schritt 3: Datenprüfung (ESI) ESI überprüft die Benutzerdaten mittels Datenbankabfragen sowie Abfragen am LDAP-Server. • Schritt 4: Kommunikation mit der Chipkarte mittels FlexCardAdmin Das Applet baut die Verbindung zu der Chipkarte auf und führt die gewünschte Operation aus. • Schritt 5: Datenübertragung (ESI) Das Applet wird nur einmal gestartet, auch wenn man mehrere Operationen nacheinander ausführen möchte. Nach dem Initialisieren des Applets, während dessen alle benötigten Bibliotheken geladen werden, erscheint eine Benutzeroberfläche zum Einloggen, über den der Benutzer sich am Enrollment-Server anmelden kann, bevor er eine Operation ausführt. Um eine neue Operation auszuführen, muss man nur zu diese Login-Seite des Applets zurückspringen und sich mit einer anderen TAN einloggen. Das Laden der Bibliotheken muss aber nicht wiederholt werden (solange man mit derselben Karte und demselben Kartenleser arbeitet), somit werden die Wartezeiten verringert. Das erste Szenario ist mit geringem Aufwand verbunden. Neben der Implementierung des 41 KAPITEL 4. DESIGNENTSTEHUNG Applets selbst, muss die Schnittstelle zwischen dem Applet und der Enrollment-Seite definiert werden. Das Applet muss zusätzlich in der Seite integriert werden. Um das zweite Szenario zu realisieren ist der Aufwand größer, weil man zusätzlich den kompletten Inhalt der Enrollment-Seite in das Applet übertragen muss. Wenn es oft vorkommt, dass mehrere Chipkartenoperationen direkt nacheinander ausgeführt werden und wenn es vorgesehen ist, dass ein Benutzer mehr als eine TAN gleichzeitig besitzen darf, wäre die zweite Lösung die bessere, ansonsten ist die erste Lösung akzeptabel. In dieser Arbeit wird das erste Szenario umgesetzt. 42 Kapitel 5 Technisches Konzept und Implementierung Der Fokus dieses Kapitels ist auf die technische Umsetzung der Anforderungen gerichtet. Die Software-Komponenten und deren Zusammenspiel werden dargestellt. Der Leser soll somit befähigt werden, das verwendete Designprinzip zu verstehen und einen leichten Einstieg zu finden, wenn Änderungen am System vorgenommen werden sollen. 5.1 Aufbau der Software FlexCardAdmin ist ein Java-Applet, das in den HTML-Seiten des Enrollment-Servers integriert wird. Jedes Mal wenn die Webseite aufgerufen wird, wird der Appletcode auf dem Clientrechner heruntergeladen und von der Java-Virtual-Machine des Browsers ausgeführt. Der Browser muss dafür Java-fähig sein. Neben der Anwendungslogik stellt das Applet eine Benutzeroberfläche zur Verfügung. Der Aufbau und das Zusammenspiel dieser Komponenten ist an das Model-View-Controller“-Pattern (MVC) angelehnt. Das MVC” Pattern ist das Standardpattern für Anwendungen, die Benutzerinteraktion voraussetzen und eine Schnittstelle zum Benutzer anbieten. MVC ermöglicht die klare Trennung der Benutzeroberfläche von der Programmlogik. Durch diese Modularisierung lassen sich die einzelnen Komponenten leicht austauschen, die Anwendung gewinnt an Flexibilität und Wiederverwendbarkeit und kann leichter gewartet werden. MVC besteht aus den drei Komponenten Model, View und Controller. Das Model enthält die Anwendungslogik, die View repräsentiert die Benutzeroberfläche und der Controller definiert wie die Anwendung auf Benutzereingaben reagieren soll (siehe Abbildung 5.1). In FlexCardAdmin übernehmen diese Komponenten folgende Aufgaben: • Die View repräsentiert die Benutzeroberfläche des Applets, die in Form eines Wizards aufgebaut ist. Die wichtigsten Klassen der View sind Wizard, WizardPanel und WizardPanelDescriptor. • Das Model ist für die Initialisierung der Kartenschnittstellen zuständig und baut die Verbindung zum Kartenleser und Smartcard über die gewählte Kartenschnittstelle auf. Es ermöglicht das Laden verschiedener Bibliotheken und Properties, die von den Kartenschnittstellen, Kartenlesern und Smartcards benötigt werden. Außerdem 43 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG lassen sich durch das Model die IDs der Kartenobjekte konstruieren, damit sie referenziert werden können. Die wichtigsten Klassen des Models sind Model, Loader, CardPropLoader, CardReaderPropLoader und ObjectIdentifier. • Die Hauptaufgabe des Controllers ist die Verarbeitung der Benutzereingaben auf der Benutzeroberfläche und die Ausführung der Smartcardoperationen. Die WizardPanelDescriptor-Klassen agieren als Vermittler zwischen der View und dem Controller und leiten die Benutzereingaben an den Controller weiter. Der Controller stellt für jede primitive Smartcardoperation eine Action-Klasse zur Verfügung. In Abhängigkeit davon, welche Smartcardoperation ausgeführt werden muss, instanziiert der Controller eine der Action-Klassen, die für die Ausführung der Smartcardoperation zuständig ist. In den folgenden Abschnitten werden diese drei Komponenten näher beschrieben. Abbildung 5.1: Model-View-Controller-Pattern 5.2 Die Benutzeroberfläche Die Klassen der Benutzeroberfläche befinden sich im Paket de.flexsecure.flexiTrust.flexcardadmin.view und seinen Unterpakete. Die Benutzeroberfäche basiert auf dem Java-Swing-Framework und ist in Form eines Wizard [wiz] aufgebaut. 5.2.1 Wizard Die Klasse Wizard definiert den Rahmen des Wizards und ist der Container für verschiedene JPanels, die eingebunden werden können und die den Wizard mit Inhalt füllen. Die zwei Tasten Weiter“ und Zurück“ dienen zur Navigation und zum Blättern durch die ” ” Panels. Jedes Panel soll seinen Vorgänger und seinen Nachfolger spezifizieren. Unter bestimmten Bedingungen können sich der Nachfolger und der Vorgänger eines bestimmten Panels ändern. Wenn das aktuelle Panel keinen Vorgänger hat, wird die Taste Zurück“ ” deaktiviert, und wenn kein Nachfolger vorhanden ist, ist die Weiter“-Taste inaktiv. Der ” 44 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG Wizard enthält zusätzlich eine Dropdown-Liste zur Auswahl der gewünschten Sprache. Der Wizard besitzt ein Model und einen Controller. WizardModel hält die Wizarddaten und den Wizardzustand, z.B. kennt WizardModel das aktuell im Wizard angezeigte Panel. WizardController bearbeitet die Events, die vom Wizard kommen, wenn die Tasten gedrückt werden. 5.2.2 WizardPanel Die Panels, die in den Wizard hinzugefügt werden können, sind Unterklassen von WizardPanel. WizardPanel definiert die einheitliche Struktur seiner Unterklassen. Jedes Panel besitzt einen Titel, der im oberen Teil angezeigt wird. Im unteren Teil ist Platz für Fehlermeldungen vorgesehen. Am linken Rand befindet sich eine Leiste, die die gerade ausgeführte Operation anzeigt. In der Mitte kann jede Unterklasse von WizardPanel ihren spezifischen Inhalt anzeigen. Abbildung 5.2 zeigt den Aufbau des Wizards. Das Template Method-Design-Pattern [GHJV95] findet hier Verwendung. Die Methode initComponents() der Klasse WizardPanel ist die Template-Methode, die die Komponenten jedes Panels erzeugt. Sie ruft zusätzlich die Methode getMainPanel() auf, die von jeder Unterklasse implementiert werden muss und den panelspezifischen Inhalt definiert. Abbildung 5.2: Der Aufbau des Wizards Abbildung 5.3 zeigt alle WizardPanel-Klassen im Überblick. Wenn das Applet gestartet wird, wird zuerst das ConfigurationPanel im Wizard angezeigt. Dieses bietet die Möglichkeit, die verwendete Kartenschnittstelle, den Kartenleser und die Smartcard auszuwählen. Da diese Angaben auch vom Administrator vorkonfiguriert werden können, müssen sie nicht immer über die Benutzeroberfläche gemacht werden. Deshalb hat das ConfigurationPanel unterschiedliche Versionen, je nachdem was konfiguriert wurde und 45 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG was über die Benutzeroberfläche angegeben werden muss. Einige dieser Versionen sieht man in Abbildungen A.1 und A.2 im Anhang A. Abbildung 5.3: Übersicht der WizardPanels Je nachdem welche Smartcardoperation ausgeführt werden soll, wird als nächstes das Panel für diese Operation angezeigt. Für jede Smartcardoperation ist ein WizardPanel vorgesehen: • PersonaliseCardPanel: wird angezeigt, wenn eine Karte personalisiert werden soll (auch wenn eine Notfall- oder Ersatzkarte erstellt wird). Der Benutzer muss die Smartcard-PIN eingeben, bevor die Karte personalisiert werden kann. Der Inhalt des Panels hängt davon ab, ob die PIN-Eingabe über den Kartenleser oder über die Benutzeroberfläche gemacht wird. Im ersten Fall wird im Panel einen Text angezeigt, der beschreibt, wieviel mal die PIN am Kartenleser angegeben werden muss. Im zweiten Fall werden zwei Eingabefelder angezeigt, in denen der Benutzer die PIN eingeben muss. Abbildung A.3 im Anhang A zeigt das PersonaliseCardPanel. • DeleteCardPanel: wird angezeigt, wenn eine Karte gelöscht werden soll. Das Löschen der Karte erfolgt nach einer PIN-Eingabe. Genauso wie beim PersonaliseCardPanel variiert der Panelinhalt in Abhängigkeit von der Art der PIN-Eingabe. Wenn die PIN-Eingabe über den Kartenleser gemacht wird, erscheint im Panel einen Text, der den Benutzer darauf hinweist, die PIN am Kartenleser einzugeben. Wenn die PIN-Eingabe über die Benutzeroberfläche realisiert werden soll, erscheint ein Eingabefeld, in dem die PIN eingegeben werden muss. Abbildung A.4 im Anhang A zeigt das DeleteCardPanel. • ChangePINPanel: wird angezeigt, wenn der Benutzer die PIN seiner Smartcard ändern möchte. Das Panel enthält Felder zur Eingabe der bisherigen und der neuen PIN oder Text mit Instruktionen, wenn die PIN-Eingabe über den Kartenleser erfolgt. Abbildung A.6 im Anhang A zeigt das ChangePINPanel. 46 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG • ResetPINPanel: wird angezeigt, wenn die PIN der Karte entsperrt werden soll. Der Benutzer wird aufgefordert die neue PIN der Karte anzugeben (entweder am Kartenleser oder auf der Benutzeroberfläche). Abbildung A.5 im Anhang A zeigt das ResetPINPanel. 5.2.3 WizardPanelDescriptor Jedes WizardPanel besitzt einen Identifikator, der eine Unterklasse von WizardPanelDescriptor ist und dazu dient, das Panel identifizieren und referenzieren zu können. Wenn man durch die Panels im Wizard blättert und die Weiter“” oder Zurück“-Taste drückt, kann das aktuelle Panel seinen Nachfolger oder Vorgänger ” anhand des Identifikators referenzieren und im Wizard anzeigen lassen. Jedes konkrete WizardPanelDescriptor spezifiziert außerdem das Verhalten kurz bevor, während und nachdem ein Panel im Wizard angezeigt wird. Somit können die Benutzereingaben von der Benutzeroberfläche an den Controller geschickt und dort im Hintergrund die gewünschte Operation ausgeführt werden. Ein WizardPanelDescripor hat die Aufgabe, die Benutzereingaben an den Controller weiterzuleiten. Abbildung 5.4 gibt eine Übersicht der vorhandenen Identifikatoren. Wie man sieht, ist die Hierarchie der WizardPanelDescriptors parallel zur Hierarchie der WizardPanels. Abbildung 5.4: Übersicht der WizardPanelDescriptors Die wichtigsten Methoden von WizardPanelDescriptor sind (siehe auch Abbildung 5.5): • getPanelDescriptorIdentifier(): liefert die Kennung des Panels, das mit diesem WizardPanelDescriptor identifiziert wird, in Form von einem String. 47 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG • setPanelDescriptorIdentifier(Object id): setzt die Kennung des Panels. • getPanelComponent(): liefert das Panel, das mit diesem WizardPanelDescriptor identifiziert wird. • setPanelComponent(WizardPanel panel): setzt das Panel, das mit diesem WizardPanelDescriptor identifiziert werden soll. • getNextPanelDescriptor(): liefert die Kennung des nächsten Panels, das beim Klicken auf Weiter“ angezeigt werden soll. Diese Methode wird jedes Mal beim ” Drücken des Weiter“-Buttons aufgerufen. Sie muss von jeder Unterklasse über” schrieben werden. • getBackPanelDescriptor(): liefert die Kennung des vorherigen Panels, das beim Klicken auf Zurück“ angezeigt werden soll. Diese Methode wird jedes Mal beim ” Drücken der Zurück“-Taste aufgerufen. Sie muss von jeder Unterklasse überschrie” ben werden. • aboutToHidePanel(): hier soll jede Unterklasse definieren, welche Aktionen ausgeführt werden sollen, bevor das Panel aus dem Wizard entfernt wird. • displayingPanel(): hier soll jede Unterklasse definieren, welche Aktionen ausgeführt werden sollen, während das Panel angezeigt wird. • aboutToDisplayPanel(): hier soll jede Unterklasse definieren, welche Aktionen ausgeführt werden sollen, bevor das Panel angezeigt wird. Abbildung 5.5: Die Klasse WizardPanelDescriptor mit ihren Methoden 48 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG 5.3 Das Model Die Model-Klassen befinden sich im Paket de.flexsecure.flexiTrust.flexcardadmin. model und seine Unterpakete. Diese halten alle Informationen bezüglich der verwendeten Kartenschnittstelle, Kartenleser und Smartcard und haben die Aufgabe, die Verbindung zum Kartenleser und Smartcard über die gewählte Kartenschnittstelle aufzubauen. Das Model kann erst dann initialisiert werden, wenn es klar ist, welche Kartenschnittstelle, Kartenleser und Smartcard verwendet werden. Da dies im ersten Panel des Applets (ConfigurationPanel) vom Benutzer festgelegt wird, wird das Model erst dann initialisiert, wenn der Benutzer seine Angaben gemacht hat und auf Weiter“ klickt. Im Fall, ” dass die Angaben vom Administrator in der Konfigurationsdatei gemacht werden, wird beim Klicken auf Weiter“ die Konfigurationsdatei ausgelesen. Die Benutzer- bzw. Admi” nistratoreingaben werden an den Controller weitergeleitet, der diese verwendet, um das Model zu instanziieren. Abbildung 5.6 zeigt die Klasse Model und ihre Methoden. Wie im Abschnitt 4.2.1 schon angesprochen, werden drei Arten von Daten benötigt, um die verwendete Kartenschnittstelle zu initialisieren und die Verbindung zur Smartcard aufzubauen: • kartenschnittstellenspezifische Daten • kartenleserspezifische Daten • smartcardspezifische Daten Dementsprechend sind die Model-Klassen in drei Gruppen aufgeteilt: • Die Klassen, die die kartenleserspezifischen Daten verwalten, werden im Paket de.flexsecure.flexiTrust.flexcardadmin.model.reader gekapselt. • Die Klassen, die die kartenspezifischen Daten verwalten, werden im Paket de.flexsecure.flexiTrust.flexcardadmin.model.card gruppiert. • Die Klassen, die eine bestimmte Kartenschnittstelle verwalten, werden in einem Unterpaket vom de.flexsecure.flexiTrust.flexcardadmin.model untergebracht. Zum Beispiel befinden sich im Paket de.flexsecure.flexiTrust. flexcardadmin.model.pcsc die Klassen, die die Schnittstelle PC/SC verwalten. Abbildung 5.9 gibt eine Übersicht aller Model-Klassen, die in den nächsten Abschnitten beschrieben werden. 5.3.1 Verwaltung der Kartenschnittstellendaten Für jede Kartenschnittstelle, die unterstützt werden soll, muss eine Klasse erzeugt werden, die von Model erbt. Der Name jeder Unterklasse ist eine Konkatenation des Kartenschnittstellennamens, geschrieben in Großbuchstaben und ohne Sonderzeichen, und des Strings Model“. Z.B. heißt die Klasse zur Verwaltung der PKCS#11-Schnittstelle PKCS11Model. ” Bei der Instanziierung eines Models, werden die verwendeten Smartcard und Kartenleser dem Model-Konstruktor übergeben. Anhand dieser Information wird die Verbindung zur Smartcard aufgebaut. 49 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG Abbildung 5.6: Die Klasse Model Jedes Model besitzt drei Hilfsobjekte: • Loader • ReaderDriver • ObjectIdentifier Loader Um die Daten zu laden, die von einer bestimmten Kartenschnittstelle benötigt werden, besitzt jedes Model einen Loader und delegiert alle Ladeaufgaben an ihn. Dieser Loader wird mit der Methode createLoader() erzeugt, die von jeder Unterklasse vom Model implementiert werden muss und einen Loader vom gewünschten Typ erzeugt. Pro Kartenschnittstelle existiert eine Unterklasse von Loader. Der Name jeder Unterklasse ist, ähnlich wie bei den Model-Unterklassen, eine Konkatenation des Kartenschnittstellennamens, geschrieben in Großbuchstaben und ohne Sonderzeichen, und des Strings Loader“. Die Methode createLoader() sowie die Beziehung zwischen den Model- und ” Loader-Klassen ist nach dem Design-Pattern Factory Method [GHJV95] aufgebaut. Mit Hilfe dieses Design-Patterns werden die zwei parallele Klassenhierarchien aller Models und Loaders miteinander verbunden. Ein PCSCModel besitzt einen PCSCLoader, ein PKCS11Model besitzt einen PKCS11Loader und so weiter. Die wichtigsten Methoden eines Loaders, die von den konkreten Unterklassen implementiert werden und die in den gleichnamigen Model-Methoden aufgerufen werden, sind (siehe auch Abbildung 5.7): 50 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG • loadLibraries(): lädt die von der konkreten Kartenschnittstelle benötigten nativen Bibliotheken, in Abhängigkeit des verwendeten Betriebssystems. • loadReaderDrivers(): lädt alle Kartenlesertreiber, die in der Konfigurationsdatei für die konkrete Kartenschnittstelle und für das verwendete Betriebssystem aufgelistet sind. • loadProperties(): lädt smartcard-, kartenleser- sowie schnittstellenspezifische Properties. Um die kartenleser- bzw. smartcardspezifische Properties zu laden, benutzt der Loader zwei Hilfsklassen CardPropLoader und CardReaderPropLoader, auf die weiter unten näher eingegangen wird. Abbildung 5.7: Die Klasse Loader mit den wichtigsten Methoden ReaderDriver Diese Klasse wird vom Framework SmartcardServices zur Verfügung gestellt und dient dazu, die Verbindung zum Kartenleser aufzubauen. Bei der Instanziierung eines ReaderDrivers müssen die Properties der verwendeten Smartcard, Kartenleser und Kartenschnittstelle dem Konstruktor übergeben werden. Hier wird die Methode loadProperties() vom Loader benutzt, die diese Properties zurückgibt. Nachdem ein ReaderDriver instanziiert wurde, wird dieser mit der Methode loadReaderDriver(ReaderDriver driver) der Klasse CardManager, die auch vom Framework SmartcardServices zur Verfügung gestellt wird, geladen. Nach dem Laden ist die Verbindung zum Kartenleser aufgebaut und dieser kann angesrpochen werden. Pro Kartenschnittstelle existiert eine Unterklasse von ReaderDriver. Der Name jeder Unterklasse ist eine Konkatenation des Kartenschnittstellennamens, geschrieben in Großbuchstaben ohne Sonderzeichen, und des Strings ReaderDriver“. Ein ReaderDriver wird ” mit der Methode createReaderDriver() der Klasse Model erzeugt, die von jeder Unter- 51 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG klasse von Model implementiert werden muss und einen ReaderDriver vom gewünschten Typ zurückgibt. Die Methode createReaderDriver() sowie die Beziehung zwischen den Model- und ReaderDriver-Klassen ist nach dem Design-Pattern Factory Method aufgebaut. Mit Hilfe dieses Design-Patterns werden die zwei parallelen Klassenhierarchien aller Models und ReaderDrivers miteinander verbunden. Ein PCSCModel besitzt einen PCSCReaderDriver, ein PKCS11Model besitzt einen PKCS11ReaderDriver und so weiter. ObjectIdentifier Wie im Abschnitt 4.1.3 schon angesprochen, besitzen Objekte auf der Karte IDs (CardObjectID), damit sie referenziert werden können. Diese IDs unterscheiden sich in Abhängigkeit von der verwendeten Kartenschnittstelle und Smartcard. Mit dem ObjectIdentifier lassen sich diese IDs konstruieren. Dieser verwendet dabei die Angaben in der Konfigurationsdatei vom FlexCardAdmin. Dort werden die IDs pro Applikation, Kartenschnittstelle und Kartentyp für die drei Arten von Objekten definiert: öffentliche Schlüssel, private Schlüssel und Zertifikate. Die IDs werden in der Konfigurationsdatei als Strings angegeben. ObjectIdentifier wandelt diese in Objekte vom Typ CardObjectID um. Außerdem liefert ObjectIdentifier Referenzen auf die einzelnen Objekte auf der Karte (CardObjectRef). Pro Kartenschnittstelle muss eine Unterklasse von ObjectIdentifier definiert werden. Der Name jeder Unterklasse ist eine Konkatenation des Kartenschnittstellennamens, geschrieben in Großbuchstaben ohne jegliche Sonderzeichen, und des Strings ObjectIden” tifier“. Bei der Instanziierung eines ObjectIdentifiers wird der Typ der verwendeten Smartcard dem Konstruktor übergeben. Somit ist klar für welche Smartcard die IDs konstruiert werden müssen. Ein ObjectIdentifier wird mit der Methode createObjectIdentifier() der Klasse Model erzeugt, die von jeder Unterklasse von Model implementiert werden muss und einen ObjectIdentifier vom gewünschten Typ zurückgibt. Die Methode createObjectIdentifier() sowie die Beziehung zwischen den Model- und ObjectIdentifier-Klassen ist nach dem Design-Pattern Factory Method aufgebaut. Mit Hilfe dieses Design-Patterns werden die zwei parallelen Klassenhierarchien aller Models und ObjectIdentifiers miteinander verbunden. Ein PCSCModel besitzt einen PCSCObjectIdentifier, ein PKCS11Model besitzt einen PKCS11ObjectIdentifier und so weiter. Jeder ObjectIdentifier besitzt einen CardObjectIdentifier, der die Konstruktion der kartenspezifischen IDs übernimmt. Für jeden Kartentyp muss eine Unterklasse von CardObjectIdentifier definiert werden. ObjectIdentifier bestimmt zur Laufzeit den konkreten Typ des CardObjectIdentifiers, der instanziiert werden muss, in Abhängigkeit vom Kartentyp, der dem ObjectIdentifier-Konstruktor übergeben wird. Abblidung 5.8 zeigt die wichtigsten Methoden von ObjectIdentifier. 52 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG Abbildung 5.8: Die Klasse ObjectIdentifier mit den wichtigsten Methoden 5.3.2 Verwaltung der Kartenleserdaten Um kartenleserspezifische Properties sowie andere Daten zu laden, gibt es die Klasse CardReaderPropLoader. Für jeden Kartenleser muss eine Unterklasse von CardReaderPropLoader definiert werden. Der Name jeder Unterklasse ist eine Konkatenation des Kartenlesernamens, geschrieben in Großbuchstaben ohne Sonderzeichen, und des Strings CardReaderPropLoader“. Für die KOBIL-Kartenleser heißt die Klasse ” KOBILCardReaderPropLoader. Diese stellt sicher, dass alle Voraussetzungen zur Einsatzbereitschaft der KOBIL-Kartenleser erfüllt sind: • Die Konfigurationsdatei smartkey.inf muss sich im Homeverzeichnis des Benutzers befinden. • Die Bibliothek ct32br.dll bzw. libct.so muss sich im Homeverzeichnis des Benutzers befinden. • In der Datei smartkey.inf soll das Attribut CT-Api mit dem Pfad zur Bibliothek ct32br.dll bzw. libct.so initialisiert werden. CardReaderPropLoaders werden vom Loader instanziiert. Der Loader bestimmt zur Laufzeit den konkreten Typ des CardReaderPropLoaders, in Abhängigkeit vom Kartenlesertyp, der dem Loader-Konstruktor übergeben wird. Die Instanz wird mit der LoaderMethode createCardReaderPropLoader() erzeugt. 5.3.3 Verwaltung der Smartcard-Daten Um smartcardspezifische Properties sowie andere Daten zu laden, gibt es die Klasse CardPropLoader. Für jeden Kartentyp muss eine Unterklasse von CardPropLoader definiert werden. Der Name jeder Unterklasse ist eine Konkatenation des Kartentyps, geschrieben in Großbuchstaben ohne Sonderzeichen, und des Strings CardPropLoader“. ” Für die TCOS-2.0-Smartcards heißt die Klasse TCOS20CardPropLoader. 53 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG CardPropLoaders werden vom Loader instanziiert. Der Loader bestimmt zur Laufzeit den konkreten Typ des CardPropLoaders, in Abhängigkeit vom Kartentyp, der dem Loader-Konstruktor übergeben wird. Die Instanz wird mit der Loader-Methode createCardPropLoader() erzeugt. 5.4 Der Controller Der Controller wird von der Controller-Klasse sowie eine Gruppe von Action-Klassen repräsentiert. Die Controller-Klasse befindet sich im Paket de.flexsecure.flexiTrust.flexcardadmin. Zu ihren wichtigsten Aufgaben gehören: • das Erzeugen der View und des Models • das Auslesen der Konfigurationsdatei • das Setzen des Arbeitsverzeichnisses vom FlexCardAdmin • die Spezifikation der vom FlexCardAdmin unterstützten Kartenleser, Smartcards, Kartenschnittstellen und Sprachen Die Hauptaufgabe des Controllers bleibt allerdings die Verarbeitung der Benutzereingaben auf der Benutzeroberfläche und die Ausführung der Smartcardoperationen. Die WizardPanelDescriptor-Klassen dienen als Vermittler, die die Benutzereingaben dem Controller zur Verfügung stellen. Nachdem der Benutzer seine Eingaben auf der graphischen Oberfläche gemacht hat, leitet der konkrete WizardPanelDescriptor die Benutzereingaben an den Controller weiter, der in Abhängigkeit davon, welche Operation ausgeführt werden soll, die entsprechende Action-Unterklasse instanziiert, die sich um die Ausführung der Smartcardoperation kümmert. Die Realisierung jeder primitiven Smartcardoperation ist in einer Action-Unterklasse ausgelagert. Alle Actions befinden sich im Paket de.flexsecure.flexiTrust.flexcardadmin.action. Jede Action muss die Methode perform() implementieren und dort die Schritte zur Ausführung der Operation spezifizieren. Abbildung 5.10 gibt eine Übersicht der vorhandenen Action-Unterklassen. In den folgenden Abschnitten wird beschrieben wie die einzelnen Action-Klassen eingesetzt werden, um die Smartcardoperationen auszuführen. 5.4.1 Personalisieren einer Smartcard Die Kartenpersonalisierung besteht aus folgenden Schritten, die nacheinander durchgeführt werden: 1. PIN und PUK zusammen mit Fehlbedienungszähler auf die Karte schreiben 2. zwei Schlüsselpaare auf der Karte erzeugen (für Signatur und Windows-Logon) 3. zwei PKCS#10-Zertifikatsanträge erstellen 4. die zwei fertigen Zertifikate (für Signatur und Windows-Logon) auf die Karte schreiben 5. den Inhalt einer PKCS#12-Datei (Verschlüsselungszertifikat und das zugehörige Schlüsselpaar) auf die Karte schreiben 54 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG Abbildung 5.9: Die Klassen von Model 55 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG Abbildung 5.10: Die Action-Klassen 56 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG CreatePasswordsAction übernimmt die Aufgabe, die PIN und PUK auf die Karte zu schreiben. Die PIN und PUK werden von der FlexiTrust-CA generiert und als Appletparameter dem Applet übergeben. Beide sind 3DES-verschlüsselt. Der Verschlüsselungsschlüssel ist im Applet einkompiliert und wird von FlexCardAdmin benutzt, um beide Passwörter zu entschlüsseln. Die PIN wird dem Benutzer auf der Webseite mit dem Applet angezeigt. Anschließend kann der Benutzer die PIN selbst eingeben. Die eingegebene PIN wird mit der automatisch generierten PIN verglichen und es wird überprüft, ob beide übereinstimmen. Wenn dies der Fall ist, werden die PIN und die PUK zuerst entschlüsselt und danach auf die Karte geschrieben. GenerateKeyPairAction ist für das Erzeugen von Schlüsselpaaren auf der Karte zuständig. Jedes Schlüsselpaar wird für eine konkrete Applikation generiert und muss an der Stelle auf der Karte geschrieben werden, die für diese Applikation vorgesehen ist. Die Applikation, für die das neue Schlüsselpaar generiert wird, wird als Appletparameter übergeben. Dieser Parameter wird bei der Instanziierung von GenerateKeyPairAction benutzt. Mit der angegebenen Applikation wird vor der Schlüsselgenerierung die Konfigurationsdatei ausgelesen, in der spezifiziert ist, an welcher Stelle auf der Karte das Schlüsselpaar für diese Applikation (und die verwendete Kartenschnittstelle) zu speichern ist, sowie die Schlüssellänge. Anschließend wird das Schlüsselpaar erzeugt und nach eine PIN-Eingabe auf die Karte geschrieben. CreateCertRequestAction erstellt einen PKCS#10-Zertifikatsantrag. Bei dieser Operation ist die Angabe der Applikation, für die das Zertifikat erstellt werden soll, erforderlich. Die Applikation wird als Appletparameter übergeben. Mit ihrer Hilfe wird die Konfigurationsdatei ausgelesen, um die Stelle auf der Karte zu finden, an der das Schlüsselpaar für diese Applikation gespeichert ist. Mit der Kenntnis der Schlüssel kann der Zertifikatsantrag erstellt werden. Der fertige Antrag wird an den Browser geschickt, indem der Wert eines HTML-Formularfeldes in der aktuellen HTML-Seite mit dem Base64-kodierten Zertifikatsantrag gesetzt wird. Hier kommt die Technologie LiveConnect zum Einsatz, die im Abschnitt 2.2.2 beschrieben wurde. Der Name des HTML-Feldes, das der fertige Zertifikatsantrag hält und das HTML-Formular, in dem sich das Feld befindet, werden als Appletparameter spezifiziert und vor der Ausführung der Operation ausgelesen. Die Zertifikatsanträge werden vom Browser an die FlexiTrust-CA geschickt, die die Zertifikate erstellt. Die fertigen Zertifikate werden in Base64-kodierter Form an das Applet als Parameter zurückgegeben. WriteCertificateAction liest diese Parameter aus und schreibt die Zertifikate auf die Karte. FlexiTrust-CA erzeugt zusätzlich das Verschlüsselungsschlüsselpaar sowie das zugehörige Zertifikat. Diese werden im PKCS#12-Format Base64-kodiert an das Applet als Parameter übergeben. Das PKCS#12-Passwort wird auch als Appletparameter 3DESverschlüsselt übergeben. WriteP12Action liest diese Parameter aus und schreibt die Schlüssel und das Zertifikat auf die Karte. Die Aufteilung der Kartenpersonalisierung in mehreren Actions bietet mehr Flexibilität. Auf diese Weise können die einzelnen Operationen beliebig kombiniert und in beliebiger Reihenfolge ausgeführt werden. Die Anzahl der Schlüsselpaare, Zertifikatsanträge oder 57 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG Zertifikate, die erzeugt werden, ist nicht festgelegt und kann je nach Anwendungsfall über die Appletparameter spezifiziert werden. 5.4.2 Entsperren der Smartcard Das Entperren der Smartcard wird von ResetPINAction realisiert. Diese Action benötigt die PUK der Karte und die neue PIN. Da der Benutzer die PUK nicht kennt, wird diese als Appletparameter in 3DES-verschlüsselter Form übergeben. Eine neue PIN wird von der FlexiTrust-CA generiert, dem Benutzer auf der Seite mit dem Applet angezeigt und auch als Appletparameter übergeben. Es wird zuerst überprüft, ob die Karte tatsächlich gesperrt ist. Danach wird die vom Benutzer eingegebenen PIN mit der automatisch generierten verglichen. Wenn beide übereinstimmen, wird die PUK entschlüsselt, die Karte entsperrt und die neue PIN auf die Karte geschrieben. 5.4.3 Löschen der Karteninhalte Die Karteninhalte werden mittels DeleteCardAction gelöscht. Diese Action benötigt die PIN der Karte, damit sie sich auf der Karte einloggen kann, und die PUK, um die Karte zu löschen. Die zwei Passwörter werden hier genauso wie beim Entsperren der Smartcard als Appletparameter übergeben. Nachdem die PIN-Eingabe vom Benutzer überprüft wurde, wird die PUK entschlüsselt und die Karte gelöscht. 5.4.4 PIN ändern Die PIN wird mittels ChangePINAction geändert. Die neue PIN wird von der FlexiTrustCA generiert, dem Benutzer auf der Seite mit dem Applet angezeigt und als Appletparameter übergeben. Der Benutzer gibt die bisherige und die neue PIN ein. Die zwei PIN-Eingaben werden überprüft. Wenn die bisherige PIN korrekt ist und die neue PIN mit der automatisch generierten übereinstimmt, wird die PIN der Karte geändert. 5.5 Schnittstelle zum Enrollment-Server FlexCardAdmin wird in den HTML-Seiten des Enrollment-Servers integriert. Beide befinden sich in ständiger Kommunikation: bei der Ausführung jeder Smartcardoperation werden bestimmte Daten vom Enrollment-Server an das Applet übergeben und umgekehrt. Das Applet bekommt Daten vom Enrollment-Server über seine Parameter und schickt Daten nach außen mithilfe der LiveConnect-Technologie (siehe Abschnitt 2.2.2). Bestimmte Daten werden bei jeder Smartcardoperation zwischen FlexCardAdmin und dem Enrollment-Server ausgetauscht. Deswegen werden für diese Daten, unabhängig von der Smartcardoperation, dieselben Appletparameter verwendet. Nur bei der Kartenpersonalisierung werden zusätzliche Parameter benötigt, die für diese konkrete Operation spezifisch sind. 58 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG 5.5.1 Allgemeine Applet-Parameter Folgende Parameter werden bei jeder Smartcardoperation vom Enrollment-Server an das Applet übergeben: • TANFOR: dieser Parameter besagt, welche Smartcardoperation von FlexCardAdmin ausgeführt werden soll. Der Parameter wird in Abhängigkeit davon gesetzt, welche TAN der Benutzer auf der Enrollment-Seite eingegeben hat und für welche Operation diese generiert wurde. Die erlaubten Parameterwerte sind: – NEWCARD: das Applet soll in diesem Fall eine Kartenpersonalisierung durchführen – DELETE: bezeichnet, dass das Applet die Smartcard löschen soll – PINRESET: gibt an, dass die Smartcard entsperrt werden soll – PINCHANGE: bezeichnet, dass die PIN geändert werden soll – REPLACEMENT: eine Ersatzkarte soll vom Applet erstellt werden – EMERGENCY: eine Notfallkarte soll erstellt werden • TANFORCARDID: dieser Parameter hält die Nummer der Karte, für die die TAN generiert wurde und für die die Smartcardoperation erlaubt ist. • ENCCARDPIN: hält die automatisch generierte 3DES-verschlüsselte SmartcardPIN. Der Verschlüsselungschlüssel ist im Applet einkompiliert und wird von FlexCardAdmin benutzt, um die PIN zu entschlüsseln. • ENCCARDPUK: hält die automatisch generierte 3DES-verschlüsselte SmartcardPUK. Die PUK wird mit demselben Schlüssel wie die PIN entschlüsselt. • ENCCARDPUKOLD: hält die PUK, die schon auf der Karte gespeichert ist, verschlüsselt mit 3DES. Wenn eine Karte zum ersten Mal personalisiert wird, wird dieser Parameter nicht benutzt. Im Folgenden sieht man ein Beispiel davon, wie die Parameterwerte aussehen können. Der Wert von ENCARDPIN repräsentiert die 3DES-verschlüsselte Base64-kodierte PIN 123456, ENCARDPUK enthält die 3DES-verschlüsselte Base64-kodierte PUK 123456 und ENCARDPUKOLD ist die 3DES-verschlüsselte Base64-kodierte PUK 654321. <APPLET ...> <PARAM <PARAM <PARAM <PARAM <PARAM </APPLET> name=TANFOR value="’NEWCARD"> name=TANFORCARDID value="8949017200001762803"> name=ENCCARDPIN value="cPnR/ibd7yZHWsY5jmiGSg=="> name=ENCCARDPUK value="cPnR/ibd7yZHWsY5jmiGSg=="> name=ENCCARDPUKOLD value="cPnR/ibd7yZC3Q6yErPS7g=="> 5.5.2 Datenaustausch bei der Smartcard-Personalisierung Die Kartenpersonalisierung ist die komplizierteste Smartcardoperation von allen. Diese ist eine Aneinanderreihung verschiedener einfachen Operationen. Um ihre Ausführung 59 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG möglichst flexibel zu halten, wurden einzelne Kommandos für jede einzelne Operation definiert, so dass diese in beliebiger Reihenfolge und auch mehrfach nacheinander ausgeführt werden können. Diese Kommandos werden dem Applet als Parameter mit dem Namen CMDX übergeben (wobei X die Kommandonummer ist, beginnend mit 0) und nacheinander abgearbeitet. Bei jedem Kommando werden Daten auf der Karte entweder gelesen oder aktualisiert. Jede Operation bearbeitet die Daten einer konkreten Applikation. D.h., es werden immer die Daten gelesen oder aktualisiert, die für eine spezifische Applikation verwendet werden. Damit das Applet weiß, an welcher Stelle auf der Karte die benötigten Daten zu finden sind oder geschrieben werden sollen, muss es die Applikation kennen. Deswegen gibt es neben jedem Kommando einen zusätzlichen Applet-Patameter APPLX (X steht für die Nummer des Kommandos, bei dessen Ausführung diese Applikationsangabe benutzt wird), der die Applikation angibt. Folgende Kommandos werden unterstützt, die man als Wert des Parameters CMDX übergeben kann: • CREATE PWD: dieses Kommando bedeutet, dass die PIN und die PUK auf der Karte geschrieben werden sollen. Die PIN und PUK, die mit den Parametern ENCARDPIN und ENCARDPUK dem Applet übergeben werden, werden auf der Karte geschrieben. • GENKEY: mit diesem Kommando wird ein Schlüsselpaar auf der Karte generiert. Der APPLX-Parameter muss immer mitgegeben werden, damit es klar ist, für welche Applikation das neue Schlüsselpaar angelegt wird. Die Schlüssel werden an der Stelle auf der Karte geschrieben, die für diese Applikation vordefiniert wurde. Dieses Kommando kann mehrfach an das Applet übergeben werden, wenn mehrere Schlüsselpaare auf der Karte erzeugt werden sollen. • PKCS10: mit diesem Kommando kann ein PKCS#10-Zertifikatsantrag erstellt und an den Enrollment-Server geschickt werden. Der Antrag wird für das Schlüsselpaar einer bestimmten Applikation erstellt. Damit das richtige Schlüsselpaar aus der Karte ausgelesen wird, wird die Applikation in dem Parameter APPLX spezifiziert. Nachdem der PKCS#10-Antrag von FlexCardAdmin erstellt wurde, wird dieser in Base64-kodierter Form an die HTML-Seite übergeben, indem er als Wert eines Input-Feldes in einem HTML-Formular gesetzt wird. Der Name des HTMLFormulars und des Input-Feldes werden dem Applet in den Parametern FORMX und ELEMENTX mitgeteilt. X steht hier wieder für die Kommandonummer. Der PKCS#10-Antrag wird an den Server geschickt, indem das Applet eine JavaScript-Funktion aufruft, die die Formulareingaben losschickt. Der Name dieser JavaScript-Funktion wird in dem Appletparameter SUBMIT METHOD angegeben. Das HTML-Formular sowie die JavaScript-Funktion sieht man in der Abbildung 5.12. • WRITE P12: dieses Kommando schreibt den Inhalt einer PKCS#12-Datei (ein Schlüsselpaar und das zugehörige Zertifikat) auf die Karte. Der Base64-kodierte Inhalt der PKCS#12-Datei wird über den Parameter P12 dem Applet übergeben. Das Passwort, mit dem die PKCS#12-Datei geschützt ist, ist mit dem 3DESAlgorithmus verschlüsselt und wird im Parameter ENCP12PW gehalten. Für dieses 60 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG Kommando wird auch zusätzlich der Parameter APPLX benötigt, der die Applikation angibt, für die die Schlüssel und das Zertifikat verwendet werden. Somit kann das Applet die richtige Stelle auf der Karte ermitteln, auf der die Daten gespeichert werden sollen. • WRITE CERT: mit diesem Kommando wird ein Zertifikat auf der Karte geschrieben. Das Zertifikat wird in Base64-kodierter Form im Parameter DATAX gehalten, wobei X die Nummer des WRITE CERT-Kommandos ist. Der Parameter APPLX gibt die Applikation an, für die das Zertifikat erstellt wurde und hilft die Position des Zertifikats auf der Karte zu lokalisieren. Abbildung 5.11 zeigt eine schematische Darstellung des Datenaustausches zwischen dem Enrollment-Server, FlexCardAdmin und der Smartcard während der Kartenpersonalisierung. Dort sieht man auch die einzelnen Applet-Kommandos und die Reihenfolge, in der diese ausgeführt werden. Nachdem die PKCS#10-Anträge vom Applet erzeugt werden und an den EnrollmentServer geschickt werden, wird eine neue HTML-Seite geladen, in der die fertigen Zertifikate dem Applet übergeben werden. FlexCardAdmin wird beim Laden dieser Seite neu gestartet. Normalerweise wird nach dem Start des Applets zuerst das Panel gezeigt, auf dem man festlegen kann, welche Kartenschnittstelle, Smartcard und Kartenleser während der Ausführung der Smartcardoperationen benutzt werden soll. Dieses Panel ist hier nicht nötig, da diese Angaben schon beim ersten Start des Applets gemacht wurden. Damit das erste Panel des Applets übersprungen werden kann, das Applet aber trotzdem die Information hat, welche Kartenschnittstelle, Smartcard und Kartenleser benutzt werden soll, werden diese drei Angaben vom ersten“ Applet an den Enrollment-Server und von dort an ” das zweite“ Applet weitergereicht. Das erste Applet setzt drei Input-Felder eines HTML” Formulars mit diesen Daten, bevor das Formular an den Server geschickt wird. Beim zweiten Start des Applets werden diese drei Angaben als Parameter dem Applet übergeben. Diese sind die Parameter CARD OS, CARD INTERFACE und CARD READER. Die Namen des HTML-Formulars und der drei Input-Felder, in denen das erste“ Applet die ” verwendete Kartenschnittstelle, Smartcard und Kartenleser angeben muss, werden ihm mithilfe folgender Parameter mitgeteilt: • FORM CARD OS: der Name des HTML-Formulars, in dem das Applet der Typ der verwendeten Smartcard festlegt • ELEMENT CARD OS: das Input-Feld im obigen HTML-Formular, das der Smartcardtyp hält • FORM CARD INTERFACE: der Name des HTML-Formulars, in dem das Applet die verwendete Kartenschnittstelle festlegt • ELEMENT CARD INTERFACE: das Input-Feld im obigen HTML-Formular, das die Kartenschnittstelle hält • FORM CARD READER: der Name des HTML-Formulars, in dem das Applet der Typ des verwendeten Kartenlesers festlegt • ELEMENT CARD READER: das Input-Feld in dem obigen HTML-Formular, dass 61 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG den Kartenlesernamen hält Abbildungen 5.13 und 5.14 zeigen wie FlexCardAdmin in den HTML-Seiten des Enrollment-Servers eingebunden wird. Die erste Abbildung zeigt das Applet, das den ersten Teil der Kartenpersonalisierung durchführt, und die zweite Abbildung - das Applet, das die Kartenpersonalisierung zu Ende bringt. 5.5.3 Zertifikat auslesen FlexCardAdmin unterstützt ein zusätzliches Kommando READ CERT, mit dem ein Zertifikat, das sich auf der Karte befindet, ausgelesen werden kann. Mit dem Patameter APPLx sollte die Applikation spezifiziert werden, für die das Zertifikat verwendet wird, damit das Applet das Zertifikat auf der Karte erkennen kann. Das ausgelesene Zertifikat wird einem HTML-Formular übergeben. Mit den Parametern FORMx und ELEMENTx kann der Formularname und der Input-Feldname spezifiziert werden: <PARAM <PARAM <PARAM <PARAM name=CMD0 value="READ_CERT"> name=APPL0 value="APPL1"> name=FORM0 value="ReadCertForm"> name=ELEMENT0 value="CERT-PEM0"> 5.6 Konfiguration Das Verhalten von FlexCardAdmin kann über seine XML-Konfigurationsdatei flexCardAdmin.xml gesteuert werden. Dort sind verschiedene Parameter enthalten, die in den folgenden Abschnitten beschrieben werden. Das Wurzelelement in der Datei ist <flexcardadmin>. Dieses hat Kinder-Elemente, in denen die Parameter gruppiert sind. Jeder Parameter ist mittels des <param>-Tag definiert und besitzt zwei Attribute: key und value. Key ist der Name des Parameters und value - sein Wert. Das value-Attribut ist anpassbar, das key-Attribut darf nicht verändert werden. 5.6.1 Allgemeine Parameter Folgende allgemeine Parameter sind vorhanden: • choose operation: Im Normalfall wird die Smartcardoperation, die vom Applet ausgeführt werden soll, via einem Appletparameter festgelegt, der vom EnrollmentServer gesetzt wird, in Abhängigkeit davon für welche Operation die Benutzer-TAN generiert wurde. Das Applet sieht zusätzlich eine zweite Möglichkeit vor, die Operation auszuwählen, indem der Benutzer selbst die Operation auf der Benutzeroberfläche angibt. Dies erfordert allerdings einige Änderungen in der Benutzeroberfläche und der Logik des Applets, sowie in dem Ablauf der ausgeführten Operationen. In 62 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG Abbildung 5.11: Datenaustausch zwischen dem Enrollment-Server, FlexCardAdmin und der Smartcard 63 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG <script language=JavaScript type="text/javascript"> function submitForm() { document.CertRequestForm.submit(); } </script> <form name="CertRequestForm" action="${SUBMIT-URL}" method="POST"> <table> <tr> <td align="right"> <input type="hidden" name="GenRequest0"> <input type="hidden" name="GenRequest1"> <input type="hidden" name="GenRequest2"> <input type="hidden" name="CardOS" value="${CARD_OS}"/> <input type="hidden" name="CardInterface" value="${CARD_INTERFACE}"/> <input type="hidden" name="CardReader" value="${CARD_READER}"/> .... </td> </tr> </table> </form> Abbildung 5.12: Das HTML-Formular CertRequestForm und die JavaScript-Funktion submitForm() 64 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG <APPLET codebase="${SERVERNAME}/xenroll" code="de.flexsecure.flexiTrust.flexcardadmin.FlexCardApplet.class" name="FlexCardApplet" WIDTH="640" HEIGHT="370" align="BOTTOM" archive="flexCardAdmin_signed.jar,cardservices.jar,fs_util.jar, nativelibs_signed.jar,p11.jar,jpcsc.jar,base-opt.jar, base-core.jar,pcsc-wrapper-2.0.jar,codec.jar, FlexiCoreProvider-1.1.5p7.signed.jar" MAYSCRIPT> <PARAM <PARAM <PARAM <PARAM <PARAM name=TANFOR value="${TANFOR}"> name=TANFORCARDID value="${CARDID}"> name=ENCCARDPIN value="${ENCCARDPIN}"> name=ENCCARDPUK value="${ENCCARDPUK}"> name=ENCCARDPUKOLD value="${ENCCARDPUKOLD}"> <PARAM name=CMD0 value="CREATE_PWD"> <PARAM name=CMD1 value="GENKEY"> <PARAM name=APPL1 value="APPL1"> <PARAM name=CMD2 value="GENKEY"> <PARAM name=APPL2 value="APPL2"> <PARAM <PARAM <PARAM <PARAM name=CMD3 value="PKCS10"> name=APPL3 value="APPL1"> name=FORM3 value="CertRequestForm"> name=ELEMENT3 value="GenRequest0"> <PARAM <PARAM <PARAM <PARAM name=CMD4 value="PKCS10"> name=APPL4 value="APPL2"> name=FORM4 value="CertRequestForm"> name=ELEMENT4 value="GenRequest1"> <PARAM name=FORM_CARD_OS value="CertRequestForm"> <PARAM name=ELEMENT_CARD_OS value="CardOS"> <PARAM name=FORM_CARD_INTERFACE value="CertRequestForm"> <PARAM name=ELEMENT_CARD_INTERFACE value="CardInterface"> <PARAM name=FORM_CARD_READER value="CertRequestForm"> <PARAM name=ELEMENT_CARD_READER value="CardReader"> <PARAM name=SUBMIT_METHOD value="submitForm"> </APPLET> Abbildung 5.13: Integration von FlexCardAdmin in der ES-Seite im Fall einer Kartenpersonalisierung (Teil 1) 65 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG <APPLET codebase="${SERVERNAME}/xenroll" code="de.flexsecure.flexiTrust.flexcardadmin.FlexCardApplet.class" name="FlexCardApplet" WIDTH="640" HEIGHT="370" align="BOTTOM" archive="flexCardAdmin_signed.jar,cardservices.jar,fs_util.jar, nativelibs_signed.jar,p11.jar,jpcsc.jar,base-opt.jar, base-core.jar,pcsc-wrapper-2.0.jar,codec.jar, FlexiCoreProvider-1.1.5p7.signed.jar" MAYSCRIPT> <PARAM <PARAM <PARAM <PARAM <PARAM name=TANFOR value="${TANFOR}"> name=TANFORCARDID value="${CARDID}"> name=ENCCARDPIN value="${ENCCARDPIN}"> name=ENCCARDPUK value="${ENCCARDPUK}"> name=ENCCARDPUKOLD value="${ENCCARDPUKOLD}"> <PARAM <PARAM <PARAM <PARAM name=CMD0 value="WRITE_P12"> name=APPL0 value="APPL0"> name=P12 value="${P12}"> name=ENCP12PW value="${P12PW}"> <PARAM name=CMD1 value="WRITE_CERT"> <PARAM name=APPL1 value="APPL1"> <PARAM name=DATA1 value="${CERT-PEM0}"> <PARAM name=CMD2 value="WRITE_CERT"> <PARAM name=APPL2 value="APPL2"> <PARAM name=DATA2 value="${CERT-PEM1}"> <PARAM name=CARD_OS value="${CARD_OS}"> <PARAM name=CARD_INTERFACE value="${CARD_INTERFACE}"> <PARAM name=CARD_READER value="${CARD_READER}"> </APPLET> Abbildung 5.14: Integration von FlexCardAdmin in der ES-Seite im Fall einer Kartenpersonalisierung (Teil 2) 66 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG <APPLET codebase="${SERVERNAME}/xenroll" code="de.flexsecure.flexiTrust.flexcardadmin.FlexCardApplet.class" name="FlexCardApplet" WIDTH="640" HEIGHT="370" align="BOTTOM" archive="flexCardAdmin_signed.jar,cardservices.jar,fs_util.jar, nativelibs_signed.jar,p11.jar,jpcsc.jar,base-opt.jar, base-core.jar,pcsc-wrapper-2.0.jar,codec.jar, FlexiCoreProvider-1.1.5p7.signed.jar" MAYSCRIPT> <PARAM <PARAM <PARAM <PARAM <PARAM </APPLET> name=TANFOR value="${TANFOR}"> name=TANFORCARDID value="${TANFORCARDID}"> name=ENCCARDPIN value="${ENCCARDPIN}"> name=ENCCARDPUK value="${ENCCARDPUK}"> name=ENCCARDPUKOLD value="${ENCCARDPUKOLD}"> Abbildung 5.15: Integration von FlexCardAdmin in der ES-Seite beim Löschen oder Entsperren einer Smartcard dieser Version des Applets wird nur ein Prototyp dieser Lösung vorgestellt, der weiteretwickelt werden muss, um einsatzbereit zu sein. Der Parameter choose operation wurde definiert, um zwischen den zwei Möglichkeiten umzuschalten. Wenn der Parameter auf no gesetzt ist, wird die Smartcardoperation via einem Appletparameter festgelegt, wenn der Parameterwert yes ist, wird die Operation vom Benutzer gesetzt. • use default interface: mit diesem Parameter wird festgelegt, ob eine Defaultkartenschnittstelle benutzt werden soll in den Fällen, in welchen eine Smartcardoperation nicht über die aktuelle Katenschnittstelle ausführbar ist. Wenn der Wert des Parameters true ist, wird die aktuell verwendete Kartenschnittstelle mit der Defaultkartenschnittstelle, die in der Controller-Klasse definiert ist, ausgetauscht, so dass die Smartcardoperation ausgeführt werden kann. Wenn der Parameter auf false gesetzt ist, wird die verwendete Kartenschnittstelle nie ausgetauscht und die Ausführung der Operation, die von dieser Kartenschnittstelle nicht unterstützt ist, wird mit einer Fehlermeldung abgebrochen. • card os: hier kann die Smartcard definiert werden, die mit FlexCardAdmin verwendet werden soll. Mögliche Werte in dieser Version von FlexCardAdmin sind TCSO20 für TCOS-2.0-Smartcards oder der leere String. Die erlaubten Werte dieses Parameters (bis auf dem leeren String) sollen als Konstanten in der Controller-Klasse definiert werden. Der leere String bedeutet, dass der Benutzer selbst den Typ seiner Smartcard auf der Benutzeroberfläche spezifizieren muss. Er bekommt eine Liste von Smartcards zur Auswahl angezeigt. • card interface: hier kann die Kartenschnittstelle angegeben werden, die verwen- 67 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG det werden soll. Mögliche Werte in dieser Version von FlexCardAdmin sind PKCS11, PCSC, OCF oder der leere String. Diese sind die Namen der einzelnen Kartenschnittstellen ohne jegliche Sonderzeichen. Dies ist wichtig, weil die angegebenen Strings zum Erzeugen von Klassennamen zur Laufzeit benutzt werden und Klassennamen dürfen keine Sonderzeichen wie # enthalten. Die erlaubten Werte dieses Parameters (bis auf dem leeren String) sollen als Konstanten in der Controller-Klasse definiert werden. Der leere String bedeutet, dass der Benutzer selbst die zu verwendende Kartenschnittstelle auf der Benutzeroberfläche spezifizieren muss. Er bekommt eine Liste von Kartenschnittstellen zur Auswahl angezeigt. • card reader: hier kann der Kartenleser angegeben werden, der mit FlexCardAdmin verwendet wird. Mögliche Werte in dieser Version von FlexCardAdmin sind KOBIL oder der leere String. Die erlaubten Werte dieses Parameters (bis auf dem leeren String) sollen als Konstanten in der Controller-Klasse definiert werden. Der leere String bedeutet, dass der Benutzer selbst den zu verwendenden Kartenleser auf der Benutzeroberfläche spezifizieren muss. Er bekommt eine Liste von Kartenlesern zur Auswahl angezeigt. 5.6.2 Kartenlesertreiber In der Konfigurationsdatei werden die Treiber der Kartenleser aufgelistet, die FlexCardAdmin unterstützen soll und die beim Aufbau der Verbindung zum Kartenleser geladen werden müssen. Pro Kartenschnittstelle und Betriebssystem wird jeweils ein Parameter definiert, dessen Wert den Namen der Kartenlesertreiberdatei für diese Kombination spezifiziert. Der Parametername ist eine Konkatenation des Kartenschnittstellennamen, des Betriebssystems und der Nummer des Treibers. Bei jedem neuen Treiber, der in der Konfigurationsdatei hinzugefügt wird, wird die Treibernummer um eins inkrementiert. Die Treiber sind zwecks besserer Übersicht folgendermaßen gruppiert: • <pkcs11 driver>: hier werden die Kartenlesertreiber für die PKCS#11Schnittstelle spezifiziert. Folgende Parameter sind vorhanden: – pkcs11 driver win 0: der Treiber mit der Nummer 0 für die PKCS#11Schnittstelle unter Windows – pkcs11 driver linux 0: der Treiber mit der Nummer 0 für die PKCS#11Schnittstelle unter Linux • <pcsc driver>: hier werden die Kartenlesertreiber für die PC/SC-Schnittstelle spezifiziert. Folgende Parameter sind vorhanden: – pcsc driver win 0: der Treiber mit der Nummer 0 für die PC/SC-Schnittstelle unter Windows – pcsc driver linux 0: der Treiber mit der Nummer 0 für die PC/SCSchnittstelle unter Linux • <ocf driver>: hier werden die Kartenlesertreiber für die OCF-Schnittstelle spezifiziert. Folgende Parameter sind vorhanden: 68 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG – ocf driver win 0: der Treiber mit der Nummer 0 für die OCF-Schnittstelle unter Windows – ocf driver linux 0: der Treiber mit der Nummer 0 für die OCF-Schnittstelle unter Linux • <manufacturer specific pkcs11 driver>: hier werden die PKCS#11-Treiber pro Hersteller spezifiziert. Der Name jedes Parameters ist eine Konkatenation des Kartenschnittstellennamen, des Betriebssystems und des Namen des Kartenleserherstellers. Folgende Parameter sind vorhanden: – pkcs11 driver win kobil: der PKCS#11-Treiber für KOBIL-Kartenleser unter Windows – pkcs11 driver linux kobil: der PKCS#11-Treiber für KOBIL-Kartenleser unter Linux 5.6.3 Referenzen auf Kartenobjekten Für jedes Objekt, das von einer bestimmten Applikation genutzt wird, ist eine bestimmte Stelle auf der Karte vorgesehen. In Abhängigkeit von der verwendeten Kartenschnittstelle und des Smartcardtyps sieht die Kennzeichnung dieser Stelle unterschiedlich aus. In der Konfigurationsdatei wird die Position jedes Objekts auf der Karte für jede Kombination aus Kartenschnittstelle und Smartcardtyp vorgegeben. Die Parameter zum Referenzieren der Kartenobjekte sind in Gruppen aufgeteilt. Jede Gruppe definiert die Objektreferenzen für eine bestimmte Applikation: • <card object ids appl0>: hier werden die Referenzen auf Objekte, die von Applikation 0 benutzt werden, spezifiziert. • <card object ids appl1>: hier werden die Referenzen auf Objekte, die von Applikation 1 benutzt werden, spezifiziert. • <card object ids appl2>: hier werden die Referenzen auf Objekte, die von Applikation 2 benutzt werden, spezifiziert. Folgende Parameter sind für Applikation 0 vorhanden (die Parameter für die restlichen Applikationen sind diesen analog): • Objektreferenzen für den Fall, dass die PKCS#11-Schnittstelle und TCOS-2.0Smartcards verwendet werden: – appl0 pkcs11 tcos20 pubkey: die Referenz auf dem öffentlichen Schlüssel – appl0 pkcs11 tcos20 privkey: die Referenz auf dem privaten Schlüssel – appl0 pkcs11 tcos20 cert: die Referenz auf dem Zertifikat • Objektreferenzen für den Fall, dass die PC/SC-Schnittstelle und TCOS-2.0Smartcards verwendet werden: – appl0 pcsc tcos20 pubkey: die Referenz auf dem öffentlichen Schlüssel – appl0 pcsc tcos20 privkey: die Referenz auf dem privaten Schlüssel – appl0 pcsc tcos20 cert: die Referenz auf dem Zertifikat 69 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG • Objektreferenzen für den Fall, dass die OCF-Schnittstelle und TCOS-2.0Smartcards verwendet werden: – appl0 ocf tcos20 pubkey: die Referenz auf dem öffentlichen Schlüssel – appl0 ocf tcos20 privkey: die Referenz auf dem privaten Schlüssel – appl0 ocf tcos20 cert: die Referenz auf dem Zertifikat Speziell für die Referenzierung von Objekten auf TCOS-2.0-Karten sind zusätzliche Informationen nötig, um die CardObjectIDs erzeugen zu können. Diese Informationen werden mit folgenden Parametern spezifiziert (hier wieder am Beispiel der Applikation 0 vorgestellt): • appl0 pcsc tcos20 keynr: die Nummer des Schlüssels auf der Karte (wenn PC/SC die verwendete Kartenschnittstelle ist) • appl0 ocf tcos20 keynr: die Nummer des Schlüssels auf der Karte (wenn OCF die verwendete Kartenschnittstelle ist) • appl0 keyusage enc: spezifiziert, ob der Schlüssel ein Verschlüsselungsschlüssel ist; mögliche Werte sind true und false; • appl0 keyusage sign: spezifiziert, ob der Schlüssel ein Signaturschlüssel ist; mögliche Werte sind true und false; • appl0 keyusage auth: spezifiziert, ob der Schlüssel ein Schlüssel zur Authentifikation ist; mögliche Werte sind true und false; • appl0 keylength: die Schlüssellänge in Bit, z.B. 1024 Abbildung 5.16 zeigt ein Beispiel, wie die Parameter zur Objektreferenzierung gesetzt werden können. 70 KAPITEL 5. TECHNISCHES KONZEPT UND IMPLEMENTIERUNG <card_object_ids_appl0> <param key="appl0_pkcs11_tcos20_pubkey" value="TCOS1-00"/> <param key="appl0_pkcs11_tcos20_privkey" value="TCOS1-00"/> <param key="appl0_pkcs11_tcos20_cert" value="TCOS1-00"/> <param <param <param <param key="appl0_pcsc_tcos20_pubkey" value=":3f00:4101:4e03"/> key="appl0_pcsc_tcos20_privkey" value=":3f00:4101:5103"/> key="appl0_pcsc_tcos20_cert" value=":3f00:4101:4352"/> key="appl0_pcsc_tcos20_keynr" value="3"/> <param <param <param <param key="appl0_ocf_tcos20_pubkey" value=":3f00:4101:4e03"/> key="appl0_ocf_tcos20_privkey" value=":3f00:4101:5103"/> key="appl0_ocf_tcos20_cert" value=":3f00:4101:4352"/> key="appl0_ocf_tcos20_keynr" value="3"/> <param key="appl0_keyusage_enc" value="true"/> <param key="appl0_keyusage_sign" value="false"/> <param key="appl0_keyusage_auth" value="false"/> <param key="appl0_keylength" value="1024"/> </card_object_ids_appl0> <card_object_ids_appl1> <param key="appl1_pkcs11_tcos20_pubkey" value="TCOS1-01"/> <param key="appl1_pkcs11_tcos20_privkey" value="TCOS1-01"/> <param key="appl1_pkcs11_tcos20_cert" value="TCOS1-01"/> <param <param <param <param key="appl1_pcsc_tcos20_pubkey" value=":3f00:4101:4e04"/> key="appl1_pcsc_tcos20_privkey" value=":3f00:4101:5104"/> key="appl1_pcsc_tcos20_cert" value=":3f00:4101:4353"/> key="appl1_pcsc_tcos20_keynr" value="4"/> <param <param <param <param key="appl1_ocf_tcos20_pubkey" value=":3f00:4101:4e04"/> key="appl1_ocf_tcos20_privkey" value=":3f00:4101:5104"/> key="appl1_ocf_tcos20_cert" value=":3f00:4101:4353"/> key="appl1_ocf_tcos20_keynr" value="4"/> <param key="appl1_keyusage_enc" value="true"/> <param key="appl1_keyusage_sign" value="true"/> <param key="appl1_keyusage_auth" value="false"/> <param key="appl1_keylength" value="1024"/> </card_object_ids_appl1> Abbildung 5.16: Konfigurationsparameter zum Referenzieren der Objekte auf der Karte 71 Kapitel 6 Zusammenfassung Die Firma FlexSecure bietet die Softwarelösung FlexiTrust zur Verwaltung der PKI innerhalb eines Unternehmens. Als Erweiterung wurde FlexiTrust Identity Management entwickelt, das sämtliche Aufgaben, die mit der Personalisierung und Verwaltung von Smartcards verbunden sind, übernimmt. Eine der Komponenten von FlexiTrust Identity Management, die für die Realisierung der Smartcardoperationen zuständig ist, weist gewisse Nachteile auf. Sie ist nicht plattformunabhängig, nicht flexibel genug und nicht erweiterbar. Dies hat dazu geführt, dass Verbesserungen notwendig waren. Die vorliegende Arbeit ist in Folge dessen entstanden mit dem Ziel, eine neue Lösung (FlexCardAdmin) zu entwickeln, die die Probleme und Einschränkungen der bestehenden Applikation auflöst. Am Anfang dieser Arbeit wurde zuerst die Funktionalität der bestehenden Lösung und die Technologien, auf die sie basiert, vorgestellt. Auf die Nachteile wurde auch eingegangen, damit nachvollziehbar wird, warum die Notwendigkeit besteht, nach eine neue Lösung zu suchen. Die meisten Nachteile kamen von der verwendeten Technologie, die ausgetauscht werden musste. Ein Teil der Arbeit bestand also darin, eine neue passende Technologie auszusuchen und diese zu analysieren. Eine der wichtigsten Anforderungen an FlexCardAdmin war, möglichst hohe Flexibilität zu bieten. Demzufolge musste ein Konzept entwickelt werden, wie man am besten die Software gestaltet, so dass die Anwendung in beliebigen Umgebungen lauffähig ist: unabhängig vom verwendeten Kartenlesertyp, Smartcard oder Kartenschnittstelle. Als Grundlage bei der Implementierung wurde das Framework SmartcardServices benutzt, das vor dem Einsatz analysiert werden musste, um sicherzustellen, dass dieses die notwendige Funktionalität bietet. Als Ergebnis dieser Arbeit ist ein Applet entstanden, das im Gegensatz zu seinem Vorgänger viele Vorteile bietet: • FlexCardAdmin ist plattformunabhängig. Sein Vorgänger dagegen konnte nur unter Windows ausgeführt werden. • Es bietet hohe Flexibilität. Die OCX-Komponente von FlexiTrust Identity Management unterstützt nur zwei Kartentypen. FlexCardAdmin dagegen kann mit beliebigen Smartcards eingesetzt werden. Außerdem funktioniert das Applet unabhängig vom Kartenleser. • Dadurch dass das Design der Software an das Model-View-Controller-Pattern angelehnt ist, ist das Applet modular und einzelne Elemente sind leicht austauschbar 72 KAPITEL 6. ZUSAMMENFASSUNG oder anpassbar. • Das Applet ist leicht erweiterbar. Es ist einfach neue Komponenten, wie Kartentypen, Kartenschnittstellen, Kartenleser oder Sprachen in die Software hinzuzufügen. • Einzelne primitive Smartcardoperationen sind beliebig kombinierbar und können in beliebiger Reihenfolge ausgeführt werden. Die Anzahl der Schlüsselpaare, Zertifikatsanträge oder Zertifikate, die erzeugt werden, ist nicht festgelegt und kann je nach Anwendungsfall spezifiziert werden. Wie jede andere Software ist auch FlexCardAdmin verbesserungsfähig und gibt Raum zur Weiterentwicklung. Im nächsten Kapitel wird ein Blick in die Zukunft geworfen und angesprochen, was im Applet noch verbessert werden kann. 73 Kapitel 7 Ausblick In diesem Kapitel wird beschrieben, wie FlexCardAdmin weiterentwickelt werden kann und an welchen Stellen die Software noch verbesserungsfähig ist. 7.1 Weiterentwicklung der Software FlexCardAdmin ist in seiner jetzigen Version in einer beschränkten Umgebung lauffähig, aber wurde so kozipiert, dass diese Umgebung leicht erweitert werden kann und neue Komponenten leicht in die Software hinzugefügt werden können. Somit erfüllt FlexCardAdmin die Anforderungen an Flexibilität und Erweiterbarkeit. Folgende Elemente können nachträglich in die Software aufgenommen werden: • neue Kartentypen • neue Kartenleser • neue Kartenschnittstellen • neue Sprachen • neue Betriebssysteme Um solche zusätzliche Elemente in die Software einzubauen, müssen einige Stellen in der Software erweitert werden. Die einzelnen Schritte der Integration neuer Komponenten werden in den nächsten Abschnitten beschrieben. 7.1.1 Hinzufügen neuer Karten Damit FlexCardAdmin mit neuen Kartentypen verwendet werden kann, muss die Software folgendermaßen erweitert werden: • Das Framework SmartcardServices soll wie in [Dra06] beschrieben, erweitert werden. • Der neue Kartentyp muss der Applikation bekannt gemacht werden. Dazu muss der Controller folgendermaßen erweitert werden: – Eine neue Konstante für die neue Smartcard muss definiert werden. – Die Methode initializeSupportedEnvironment() muss erweitert werden. – Der neue Kartentyp muss in der Liste der unterstützten Smartcards (HashMap supportedSmartcards) hinzugefügt werden. 74 KAPITEL 7. AUSBLICK – Die Methode checkCombination(String card os, String card interface) muss erweitert werden. Dort wird spezifiziert mit welchen Kartenschnittstellen der neue Kartentyp kompatibel ist. Dies hängt von den angebotenen Implementierungen im Framework SmartcardServices ab. • Eine neue Unterklasse von CardPropLoader muss im Paket de.flexsecure.flexiTrust.flexcardadmin.model.card angelegt werden, die die Properties des neuen Kartentyps verwaltet. Der Klassenname muss eine Konkatenation des Namen der Controller-Konstante für den Kartentyp und des Strings CardPropLoader“ sein. ” • Eine neue Unterklasse von CardObjectIdentifier muss im Paket de.flexsecure.flexiTrust.flexcardadmin.model.card angelegt werden. Dort soll die kartenspezifische Referenzierung von Objekten auf der Karte spezifiziert werden. Der Klassenname muss eine Konkatenation des Namen der Controller-Konstante für den Kartentyp und des Strings CardObjectIdentifier“ ” sein. • Falls irgendwelche Properties des Kartentyps in einer Konfigurationsdatei angegeben werden müssen, muss diese Datei im Verzeichnis conf abgelegt werden. 7.1.2 Hinzufügen neuer Kartenschnittstellen Um neue Kartenschnittstellen mit FlexCardAdmin verwenden zu können, muss die Software folgendermaßen erweitert werden: • Das Framework SmartcardServices soll wie in [Dra06] beschrieben, erweitert werden. • Die neue Kartenschnittstelle muss der Applikation bekannt gemacht werden. Dazu muss der Controller folgendermaßen erweitert werden: – Eine neue Konstante für die neue Kartenschnittstelle muss definiert werden. – Die Methode initializeSupportedEnvironment() muss erweitert werden. – Die neue Kartenschnittstelle muss in der Liste der unterstützten Kartenschnittstellen (HashMap supportedCardInterfaces) hinzugefügt werden. – Die Methode checkCombination(String card os, String card interface) muss erweitert werden. Dort wird spezifiziert mit welchen Smartcards die neue Kartenschnittstelle verwendet werden kann. Dies hängt von den angebotenen Implementierungen im Framework SmartcardServices ab. • Das Model muss um die neue Kartenschnittstelle erweitert werden. Ein neues Unterpaket von de.flexsecure.flexiTrust.flexcardadmin.model mit dem Namen der Kartenschnittstelle muss angelegt werden. Dort werden die schnittstellenspezifischen Model-Klassen erzeugt: – Eine Unterklasse von Model muss angelegt werden. Der Klassenname ist eine Konkatenation des Schnittstellennamen und des String Model“. ” 75 KAPITEL 7. AUSBLICK – Eine Unterklasse von Loader muss angelegt werden. Der Klassenname ist eine Konkatenation des Schnittstellennamen und des Strings Loader“. ” – Eine Unterklasse von ObjectIdentifier muss angelegt werden. Der Klassenname ist eine Konkatenation des Schnittstellennamen und des Strings Objec” tIdentifier“. • Externe und native Bibliotheken, die zur Initialisierung der Kartenschnittstelle benötigt werden, müssen ins Verzeichnis lib kopiert werden. Die nativen Bibliotheken müssen zusätzlich im Verzeichnis nativelib abgelegt werden. • Falls irgendwelche Properties der Kartenschnittstelle in einer Konfigurationsdatei angegeben werden müssen, muss diese Datei im Verzeichnis conf abgelegt werden. 7.1.3 Hinzufügen neuer Kartenleser Um FlexCardAdmin mit neuen Kartenlesern verwenden zu können, müssen folgende Änderungen vorgenommen werden: • Der neue Kartenleser muss der Applikation bekannt gemacht werden. Dazu muss der Controller folgendermaßen erweitert werden: – Eine neue Konstante für den neuen Kartenleser muss definiert werden. – Die Methode initializeSupportedEnvironment() muss erweitert werden. – Der neue Kartenleser muss in der Liste der unterstützten Kartenleser (HashMap supportedCardReaders) hinzugefügt werden. • Die Treiberdateien (pro Kartenschnittstelle und Betriebssystem) müssen in den Verzeichnissen lib und nativelib kopiert werden • Die Konfigurationsdatei flexCardAdmin.xml muss um die Kartenlesertreiber (pro Betriebssystem und pro Kartenschnittstelle) erweitert werden • Eine neue Unterklasse von CardReaderPropLoader muss im Paket de.flexsecure.flexiTrust.flexcardadmin.model.reader angelegt werden. Der Klassenname muss eine Konkatenation des Namen der Controller-Konstante für den Kartenleser und des Strings CardReaderPropLoader“ sein. ” 7.1.4 Hinzufügen neuer Sprachen FlexCardAdmin wird in seiner jetzigen Version in zwei Sprachen ausgeliefert: Deutsch und Englisch. Beliebige Sprachen können zum Sprachpaket der Software hinzugefügt werden. Folgende Änderungen sind notwendig, um dies zu realisieren: • Die neue Sprache muss der Applikation bekannt gemacht werden. Dazu muss der Controller folgendermaßen erweitert werden: – Eine neue Konstante für die neue Sprache muss definiert werden. – Die Methode initializeSupportedEnvironment() muss erweitert werden. 76 KAPITEL 7. AUSBLICK – Die neue Sprache muss in der Liste der unterstützten Sprachen (HashMap supportedLanguages) hinzugefügt werden. • Die Methode setLanguage(String language) der Klasse Lang muss erweitert werden. • Die Übersetzung der GUI-Texte in der neuen Sprache müssen in einer Properties-Datei zusammengefasst werden (analog der schon vorhandenen Properties-Dateien für die anderen Sprachen) und im Paket de.flexsecure.flexiTrust.flexcardadmin.util.language abgelegt werden. 7.1.5 Hinzufügen neuer Betriebssysteme Das verwendete Betriebssystem beeinflüßt das Laden von nativen Bibliotheken. In Abhängigkeit des Betriebssystems werden unterschiedliche Bibliotheken geladen. Man kann diese leicht an der Dateiendung unterscheiden. Windows-Bibliotheken haben die Endung .dll und Linux-Bibliotheken - die Endung .so. Wenn ein neues Betriebssystem unterstützt werden muss, müssen die benötigten nativen Bibliotheken zur Verfügung gestellt werden und der Teil der Software, der das Laden der nativen Bibliotheken realisiert, entsprechend erweitert werden: • In der Klasse Loader muss eine neue Methode definiert werden, die analog zu loadWinLibrary(String libName) und loadLinuxLibrary(String libName) das Laden von Bibliotheken des neuen Betriebssystems ermöglicht. • Die nativen Bibliotheken für das neue Betriebssystem (pro Kartenschnittstelle) müssen bereitgestellt werden und in den Verzeichnissen lib und nativelib kopiert werden. • Die Kartenlesertreiber für das neue Betriebssystem (pro Kartenschnittstelle) müssen ebenso bereitgestellt werden und in den Verzeichnissen lib und nativelib kopiert werden. • Die Kartenlesertreiber für das neue Betriebssystem müssen in der Konfigurationsdatei aufgelistet werden. • Die Unterklassen von Loader (OCFLoader, PCSCLoader und PKCS11Loader) müssen folgendermaßen erweitert werden: – eine neue Konstante für die native Bibliothek des neuen Betriebssystems muss in jeder der Unterklassen definiert werden. – die Methoden loadLibraries() und loadReaderDrivers() müssen angepasst werden. • Die Methode loadData() der Klasse KOBILCardReaderPropLoader muss angepasst werden. 77 KAPITEL 7. AUSBLICK 7.1.6 Das Applet als eigenständige Webanwendung Das Applet ist in seiner jetzigen Version ein Teil der Enrollment-Seite und bekommt alle benötigten Daten wie Zertifikate, Schlüssel, PUK der Karte als Appletparameter übegeben. Für die Zukunft könnte man sich überlegen, das Applet auch als eigenständige Webanwendung bereitzustellen. Das würde bedeuten, dass die Kommunikation mit dem Enrollment-Server, die momentan über die Enrollment-Seite abgewickelt wird, von dieser Seite entkoppelt und im Applet realisiert werden soll. Das Applet wird direkt eine Verbindung mit dem Enrollment-Server aufbauen müssen, um relevante Daten auszutauschen. Um diese Änderung zu realisieren, müsste man nicht nur das Applet entsprechend anpassen, sondern auch die Logik im FlexiTrust Identity Management. Dies erfordert einen höheren Aufwand, den sich FlexSecure zu diesem Zeitpunkt nicht leisten konnte. Deswegen bleibt diese Änderung eine Aufgabe für die Zukunft. Dessen ungeachtet wurden schon einige Klassen erzeugt, die in der jetzigen Version des Applets nicht verwendet werden und für den späteren Einsatz im eigenständigen Applet gedacht sind. Die ersten zwei repräsentieren einen Teil der Benutzeroberfläche und die letzten zwei enthalten die Logik: • ChooseOperationPanel: dient zur Auswahl der gewünschten Smartcardoperation • LoginPanel: dient zum Einloggen auf dem Enrollment-Server • LoginAction: hier soll der Aufbau der Verbindung zum Enrollment-Server implementiert werden • SetOperationAction: hier wird dem Applet mitgeteilt, welche Operation vom Benutzer ausgewählt wurde 7.2 Verbesserungen Mit dieser Version von FlexCardAdmin ist es, wie schon in den Abschnitten 4.2.3 und 4.2.4 beschrieben, nicht möglich die Smartcard oder den Kartenleser des Benutzers automatisch zu erkennen. Diese müssen entweder vom Administrator oder vom Benutzer angegeben werden. Der Grund liegt im Konzept der Frameworks, auf die FlexCardAdmin aufbaut: der PKCS#11-Provider und SmartcardServices. Um die automatische Erkennung der Karte / des Kartenlesers zu ermöglichen, muss erforscht werden, ob die Konzepte so angepasst werden können, dass die Initialisierung der Kartenschnittstellen ohne Kenntniss der Karte oder des Kartenlesers möglich ist. Die Smartcard-Administration ist bei FlexiTrust Identity Management so konzipiert, dass die PUK der Smartcard dem Benutzer unbekannt bleibt. Aus diesem Grund wurde im FlexCardAdmin die Eingabe der PUK (über die Benutzeroberfläche oder am Kartenleser) nicht vorgesehen. Das Applet könnte so erweitert werden, dass das Vorhandensein der Funktionalität zur PUK-Eingabe konfigurierbar ist. Der Benutzer könnte über einen Konfigurationsparameter steuern, ob die PUK eingegeben werden muss oder nicht. Dementsprechend müsste die Benutzeroberfläche aufgebaut werden und in Abhängigkeit des Parameterwertes, Eingabefelder für die PUK ein- oder ausblenden. 78 Anhang A Benutzeroberfläche Abbildung A.1: Zwei der möglichen Varianten des ConfigurationPanels(1) 79 ANHANG A. BENUTZEROBERFLÄCHE Abbildung A.2: Zwei der möglichen Varianten des ConfigurationPanels(2) 80 ANHANG A. BENUTZEROBERFLÄCHE Abbildung A.3: Die zwei Varianten des PersonaliseCardPanels 81 ANHANG A. BENUTZEROBERFLÄCHE Abbildung A.4: Die zwei Varianten vom DeleteCardPanel 82 ANHANG A. BENUTZEROBERFLÄCHE Abbildung A.5: Die zwei Varianten vom ResetPINPanel 83 ANHANG A. BENUTZEROBERFLÄCHE Abbildung A.6: Die zwei Varianten vom ChangePINPanel 84 Literaturverzeichnis [acta] ActiveX. http://www.bsi.de/fachthem/sinet/gefahr/aktiveinhalte/ definitionen/activexcontrols.htm [actb] ActiveX. http://www.softwareacademy.de/webscripting/referenz/ Default.aspx?opera=073.html [actc] Aktive Inhalte. http://www.bsi.de/fachthem/sinet/gefahr/ aktiveinhalte/index.htm [app] Applet. http://java.sun.com/docs/books/tutorial/deployment/applet/ index.html [Buc03] Buchmann, Johannes: Einführung in die Kryptographie. Springer, Berlin, 2003 [Cor00] Coroama, Vlad: Flexible Anbindung von SmartCards an eine JavaSicherheitsinfrastruktur. Entwurf und Implementierung eines HardwareProviders für die Java Cryptography Architecture, TU Darmstadt, Diplomarbeit, März 2000 [Dra06] Drahavets, Maryia: Flexible Anbindung von Smartcards an eine Sicherheitsinfrastruktur, TU Darmstadt, Diplomarbeit, August 2006. http://www.cdc.informatik.tu-darmstadt.de/reports/reports/Maryia_ Drahavets.diplom.pdf [fle] FlexSecure GmbH. http://www.flexsecure.de/ [GHJV95] Gamma, Erich ; Helm, Richard ; Johnson, Ralph E. ; Vlissides, John: Design Patterns. Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995. – ISBN-10: 0201633612 ISBN-13: 978-0201633610 [Gmb] GmbH, FlexSecure: Trustcenter Software FlexiTrust. http://www.flexsecure. de/ojava/flexitrust.html [Gmb05] GmbH, KOBIL S.: Lösungskonzept ZDF Smartcard Enrollment. Juni 2005 [Gmb06a] GmbH, FlexSecure: FlexiTrust Identity Management: Produktbeschreibung. Juni 2006 [Gmb06b] GmbH, KOBIL S.: mIDentity Manager Professional Manual. Oktober 2006 [JP] Java-Wrapper für PC/SC: JPC/SC. http://www.musclecard.com/middle. html [jpc] JPC/SC Java API. http://www.musclecard.com/middle.html/ [kob] KOBIL Systems GmbH. http://www.kobil.de/ [liv] LiveConnect. http://java.sun.com/products/plugin/1.3/docs/jsobject. html 85 Literaturverzeichnis [Lud07] Ludwig-Maximilians-Universität München: Web-Programmierung mit Java. www.medien.ifi.lmu.de/fileadmin/mimuc/mt_ss05/mtB7a.pdf. Version: 2007 [Mor97] Morrison, Michael: Java 1.1 Unleashed. Sams.Net Publishing, 1997. – ISBN 1575212986 [mus] MUSCLE - Movement for the Use of Smart Cards in a Linux Environment. http://www.linuxtnet.com [OC] Open Card Framework. http://www.opencard.org [ocf] PC/SC CardTerminal für OCF. http://www.gemplus.com/techno/opencard/ cardterminals/pcsc/download.html [OP] Open Card Properties. http://www.opencard.org/docs/pguide/PGuide. html#HDROCPROPERTYFILELOADER [PTT01] Produktbereich T-TeleSec, Deutschen Telekom A.: Telesec Chipcard Operating System: Betriebssystem für Chipkarten TCOS V2.0 Release 3. Januar 2001 [RSA99] RSA Laboratories: PKCS#12 v1.0: Personal Information Exchange Syntax. ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12v1.pdf. Version: Juni 1999 [RSA00] RSA Laboratories: PKCS#10 v1.7: Certification Request Syntax Standard. ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-10/pkcs-10v1_7.pdf. Version: Mai 2000 [RSA04] RSA Laboratories: PKCS#11 v2.20: Cryptographic Token Interface Standard. ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20/ pkcs-11v2-20.pdf. Version: Juni 2004 [Sie] Siemens: CardOS: Betriebssystem für Chipkarten. http://www. medical.siemens.com/webapp/wcs/stores/servlet/ProductDisplay~q_ catalogId~e_-11~a_catTree~e_100010,1008631,1009807,1009806, 1009810~a_langId~e_-11~a_productId~e_173293~a_storeId~e_10001.htm [wiz] Swing-Wizard. http://java.sun.com/developer/technicalArticles/GUI/ swing/wizard/ 86