Laden eines ausführbaren Programms in einen tragbaren Datenträger
Die Erfindung betrifft allgemein das technische Gebiet des Ladens eines aus- führbaren Programms in ein Dateisystem eines tragbaren Datenträgers, wobei das Dateisystem eine Mehrzahl unterschiedlicher Zugriffsrechtseinstellungen unterstützt. Ein tragbarer Datenträger im Sinne des vorliegenden Dokuments kann insbesondere eine Chipkarte (Smart Card) in unterschiedlichen Bauformen oder ein Chipmodul sein.
Tragbare Datenträger werden mit immer mehr Speicherplatz und immer größerer Rechenleistung hergestellt. In einem internen Forschungsprojekt der Giesecke & Devrient GmbH wird gegenwärtig untersucht, inwieweit ein UNIX®-artiges Betriebssystem in einem modernen tragbaren Datenträger implementiert werden kann. In diesem Zusammenhang ist insbesondere eine Implementierung des unter der Marke Linux® bekannten Betriebssystems vorgesehen. Das Buch "Understanding the Linux Kernel" von D. P. Bovet und M. Cesati, O'Reilly Verlag, 2. Auflage, Dezember 2002, enthält eine detaillierte technische Beschreibung dieses Betriebssystems.
Allgemein sind bereits tragbare Datenträger mit einer Funktionalität zum Laden von ausführbarem Programmcode während des Einsatzes des Datenträgers bekannt. Solche Datenträger sind beispielsweise in Kapitel 5.10 des Buches "Handbuch der Chipkarten" von W. Rankl und W. Effing, Carl Hanser Verlag, 3. Auflage, 1999, Seiten 252 - 281, beschrieben.
Das Laden von Programmcode in einen Datenträger, der ein UNIX-artiges Betriebssystem aufweist, erscheint auf den ersten Blick wenig problematisch, weil das Betriebssystem die benötigten Funktionen grundsätzlich bereitstellt. Schwierigkeiten ergeben sich jedoch insbesondere durch die Tatsache, daß die Stromversorgung des tragbaren Datenträgers und die Kommunikations-
Verbindung mit einem externen Terminal jederzeit unterbrochen oder gestört werden können. Findet zum Zeitpunkt der Unterbrechung oder Störung gerade ein Ladevorgang statt, dann wird das geladene Programm möglicherweise unvollständig oder fehlerhaft im Datenträger gespeichert. Wenn ein solches Programm ausgeführt werden würde, könnte dies zumindest ein Undefiniertes und gegebenenfalls sogar ein die Sicherheit des Datenträgers kompromittierendes Verhalten zur Folge haben.
Es ist daher Aufgabe der Erfindung, einen Mechanismus bereitzustellen, durch den die Ausführung unvollständig oder fehlerhaft in den Datenträger geladener Programme zuverlässig verhindert werden kann. Vorzugsweise soll dieser Mechanismus nur geringen zusätzlichen Verwaltungsaufwand benötigen. In bevorzugten Ausgestaltungen soll die Erfindung ferner eine Möglichkeit bereitstellen, durch die unvollständig oder fehlerhaft geladene Programme leicht erkannt und gelöscht werden können.
Erfindungsgemäß wird diese Aufgabe ganz oder zum Teil gelöst durch ein Verfahren gemäß Anspruch 1, einen. tragbaren Datenträger gemäß Anspruch 8 und ein Computerprogrammprodukt gemäß Anspruch 9. Die abhängigen Ansprüche betreffen bevorzugte Ausgestaltungen der Erfindung.
Die Erfindung geht von der Grundüberlegung aus, eine im Dateisystem des Datenträgers bereits vorhandene Funktionalität, mit der unterschiedliche Zugriffsrechte auf die im Dateisystem enthaltenen Dateien eingestellt werden können, auch zur Lösung der erfindungsgemäßen Aufgabe zu nutzen. Es ergibt sich somit eine vorteilhafte Synergie, weil der Ladezustand des Programms mit äußerst geringem Verwaltungsaufwand im Dateisystem abgebildet werden kann.
Erf indungsgemäß ist vorgesehen, daß das ausführbare Programm während des Ladevorgangs als Datei mit einer ersten Zugriffsrechtseinstellung im Dateisystem gespeichert wird, und daß die Zugriffsrechtseinstellung dieser Datei nach einem erfolgreichen Abschluß des Ladevorgangs auf eine zweite Zugriffsrechtseinstellung geändert wird. Grundsätzlich ist in diesem Zusammenhang nur erforderlich, daß sich die erste und die zweite Zugriffsrechtseinstellung voneinander unterscheiden. In bevorzugten Ausgestaltungen werden jedoch die Zugriffsrechtseinstellungen "passend" gewählt, nämlich derart, daß die erste Zugriffsrechtseinstellung das Schreiben in die Datei, nicht aber deren Ausführung gestattet, und daß die zweite Zugriffsrechtseinstellung die Ausführung der Datei gestattet.
Ein unvollständiger Ladevorgang wird vorzugsweise daran erkannt, daß die während des Ladevorgangs beschriebene Datei noch die erste Zugriff srechts- einstellung aufweist, obwohl der Ladevorgang bereits - offensichtlich erfolglos - beendet worden ist. Eine derartige Überprüfung kann beispielsweise bei jedem Hochfahren des Datenträgers nach einem Spannungsausfall und/ oder bei jedem Versuch der Ausführung eines Programms erfolgen. Als unvollständig erkannte Dateien werden dann vorzugsweise aus dem Datei- system gelöscht.
Wie eingangs bereits erwähnt, weist der Datenträger vorzugsweise ein UNIX-artiges Betriebssystem auf. Die dort üblicherweise verwendeten Dateisysteme umfassen für jede Datei ein einstellbares Lesezugriffsrecht, ein einstellbares Schreibzugriffsrecht und ein einstellbares Ausführungsrecht. Diese Rechte sind üblicherweise für den Eigentümer der Datei, eine mit dem Dateieigentümer assoziierte Benutzergruppe und alle anderen Benutzer getrennt einstellbar. Die Erfindung ist jedoch nicht auf Betriebs- und Dateisysteme beschränkt, die genau diese Zugriffsrechtsstruktur vorsehen. Viel-
mehr kann die Erfindung bei jedem Betriebs- und Dateisystem eingesetzt werden, das unterschiedliche erste und zweite Zugriffsrechtseinstellungen für zumindest einige Dateien zuläßt.
Grundsätzlich kann die Erfindung in allen Phasen des Lebenszyklus des Datenträgers eingesetzt werden. Besonders bevorzugt dient die Erfindung jedoch zum Laden von Programmcode in einen Datenträger, dessen Initialisierung und Personalisierung bereits abgeschlossen sind und der sich bei einem Benutzer im Einsatz befindet. In diesem Fall wird das Laden von Programmcode in den Datenträger oft auch als "Nachladen" bezeichnet.
Das erfindungsgemäße Computerprogrammprodukt kann ein körperliches Medium mit gespeicherten Programmbefehlen sein, beispielsweise ein Halbleiterspeicher oder eine Diskette oder eine CD-ROM. Das Computerpro- grammprodukt kann jedoch auch ein nicht-körperliches Medium sein, beispielsweise ein über ein Computernetzwerk übermitteltes Signal. Insbesondere kann das Computerprogrammprodukt ein Ladeprogramm enthalten, das im Zuge der Herstellung oder der Initialisierung oder der Personalisierung oder der Anwendung eines tragbaren Datenträgers in diesen einge- bracht wird.
In bevorzugten Ausgestaltungen weisen der Datenträger und/ oder das Computerprogrammprodukt Merkmale auf, die den oben beschriebenen und/ oder den in den abhängigen Verfahrensansprüchen genannten Merk- malen entsprechen.
Weitere Merkmale, Vorteile und Aufgaben der Erfindung gehen aus der folgenden genauen Beschreibung eines Ausführungsbeispiels und mehrerer
Ausführungsalternativen hervor. Es wird auf die schematischen Zeichnungen verwiesen, in denen zeigen:
Fig. 1 ein Blockdiagramm mit Funktionseinheiten eines Datenträgers nach einem Ausführungsbeispiel der Erfindung, der an ein externes Terminal angeschlossen ist, und
Fig. 2 eine schematische Darstellung eines erfolgreich abgeschlossenen Ladevorgangs eines Programms in den Datenträger von Fig. 1.
Der in Fig. 1 dargestellte Datenträger 10 weist auf einem einzigen Halbleiterchip einen Prozessor 12, einen Speicher 14 und eine Schnittstellenschaltung 16 zur kontaktlosen oder kontaktgebundenen Kommunikation mit einem externen Terminal 18 auf. Der Speicher 14 ist in mehrere Speicherfelder unterteilt. Im vorliegenden Ausführungsbeispiel sind als Speicherfelder ein als RAM ausgestalteter Arbeitsspeicher 20, ein als ROM ausgestalteter Festwertspeicher 22 und ein als EEPROM ausgestalteter, nicht-flüchtiger Speicher 24 vorgesehen.
Im Speicher 14 - und zwar teils im Festwertspeicher 22 und teils im nichtflüchtigen Speicher 24 - befindet sich Programmcode, der ein Betriebssystem 26 implementiert. Das Betriebssystem 26 ist im vorliegenden Ausführungsbeispiel eine auf den Einsatz im Datenträger 10 zugeschnittene Variante des unter der Marke Linux bekannten Betriebssystems. Insbesondere ist das Be- triebssystem 26 an die erhebliche Ressourcenbeschränkung des Datenträgers 10 im Hinblick auf Rechenleistung, Speicherplatz und Peripheriegeräte angepaßt. Das Betriebssystem 26 ist ferner dazu eingerichtet, bei einer plötzlichen Unterbrechung der Stromversorgung des Datenträgers 10 und/ oder der
Kommunikationsverbindung zum externen Terminal 18 sicherheitskritische Betriebszustände des Datenträgers 10 auszuschließen.
Im nicht-flüchtigen Speicher 24 ist ein Dateisystem 28 mit einer baumartigen Verzeichnis- und Dateistruktur angelegt. Eine Datei des Dateisystems 28 ist in Fig. 1 beispielhaft mit dem Bezugszeichen 30 dargestellt. In der für Unix- Dateisysteme üblichen Weise sind jeder Datei des Dateisystems 28 - z.B. der Datei 30 - Zugriffsrechte zugeordnet, die angeben, ob die Datei gelesen und/ oder beschrieben und/oder ausgeführt werden darf. Diese Zugriffsrechte sind für einen Eigentümer der Datei, eine dem Eigentümer zugeordnete Benutzergruppe sowie für alle anderen Benutzer getrennt angegeben. Eine genauere Darstellung der genannten Zugriffsrechte und weiterer Dateiattribute findet sich auf den Seiten 15 und 16 des eingangs bereits zitierten Buches "Under Standing the Linux Kernel".
Das Betriebssystem 26 weist ein internes Ladeprogramm 32 auf, das mit einem externen Ladeprogramm 34 des Terminals 18 zusammenwirkt, um ein ausführbares Programm 36 in den Datenträger 10 zu laden. Statt der hier beispielhaft gezeigten Ausgestaltung, bei der das interne Ladeprogramm 32 ein Modul des Betriebssystems 26 ist, kann das interne Ladeprogramm 32 in Ausführungsalternativen auch ganz oder zum Teil als Anwendungsprogramm im Dateisystem 28 vorliegen.
Das in den Datenträger 10 zu ladende Programm 36 kann entweder lokal im Terminal 18 gespeichert sein oder von einem Hintergrundsystem (in Fig. 1 nicht gezeigt), an das das Terminal 18 angeschlossen ist, an das Terminal 18 übertragen werden. Im hier beschriebenen Beispiel liegt das ausführbare Programm 36 in dem unter dem Namen ELF (Executable and Linking Format) bekannten Format vor, während in Ausführungsvarianten andere oder
zusätzliche Dateiformate für das ausführbare Programm 36 vorgesehen sein können.
Der Ablauf eines fehlerfreien Ladevorgangs ist in Fig. 2 beispielhaft gezeigt, wobei die Zeitachse in der Darstellung von Fig. 2 von oben nach unten verläuft. Der Ladevorgang wird entweder von dem externen Ladeprogramm 34 oder von dem internen Ladeprogramm 32 angestoßen. In einer anfänglichen Initialisierungsphase 40 bzw. 42 tauschen das externe Ladeprogramm 34 und das interne Ladeprogramm 32 eine Anforderung und eine entsprechende Be- stätigung sowie gegebenenfalls weitere Verwaltungsdaten aus.
Das interne Ladeprogramm 32 legt im Zuge der Initialisierungsphase 42 die anfangs noch leere Datei 30 im Dateisystem 28 an. Die Datei 30 wird hierbei mit einer ersten Zugriffsrechtseinstellung 44 angelegt, in der nur ein Schreib- zugriffsrecht 46 ("W"-Flag) gesetzt ist. Ein Lesezugriffsrecht 48 und ein Ausführungsrecht 50 ("R"-Flag und "X"-Flag) sind für die Datei 30 nicht gesetzt. In unterschiedlichen Ausführungsformen können die drei Zugriffsrechte 46, 48, 50 dem Eigentümer der Datei 30 und/ oder einer übergeordneten Benutzergruppe und/ oder allen Benutzern zugeordnet sein.
Im Anschluß an die Initialisierungsphase 40 bzw.42 beginnt eine Übertragungsphase 52 bzw. 54, in der das externe Ladeprogramm 34 das zu ladende Programm 36 an das interne Ladeprogramm 32 übermittelt. In manchen Ausgestaltungen kann diese Übertragung in einem stetigen Datenstrom erfolgen. In der beispielhaften Darstellung von Fig. 2 ist dagegen vorgesehen, das ausführbare Programm 36 in mehrere Fragmente einer vorgegebenen Größe zu unterteilen. Diese Fragmente werden in jeweils einem Teilschritt der Übertragungsphase 52 bzw. 54 an das interne Ladeprogramm 32 gesendet und dort sogleich in die Datei 30 eingeschrieben. Geeignete Übertra-
gungsprotokolle, die gegebenenfalls auch Authentisierungs-, Sicherungs-, Fehlererkennungs- und/ oder Fehlerkorrekturfunktionen aufweisen können, sind als solche gut bekannt.
Bei einem fehlerfreien Ladevorgang ist das ausführbare Programm 36 am Ende der Übertragungsphase 52, 54 vollständig in den Datenträger 10 geladen und in die Datei 30 eingeschrieben worden. Die erste Zugriffsrechtseinstellung 44 wurde bislang nicht verändert.
In einer Abschlußphase 56 überprüft das interne Ladeprogramm 32 nun, ob das ausführbare Programm 36 tatsächlich vollständig und fehlerfrei geladen wurde. Im einfachsten Fall wird dies immer dann angenommen, wenn während der Übertragungsphase 52, 54 gemäß dem verwendeten Übertragungsprotokoll kein Fehler festgestellt wurde. Bevorzugt findet aber in der Ab- Schlußphase 56 eine weitere Überprüfung statt. Hierbei kann z.B. die Länge der gespeicherten Datei 30 mit einer vom externen Ladeprogramm 34 übermittelten Längenangabe verglichen werden, oder es wird eine Prüf summe der im Dateisystem 28 gespeicherten Datei 30 berechnet und mit einer vom externen Ladeprogramm 34 übermittelten Prüf summe verglichen. Geeignete Algorithmen zur Prüfsummeήberechnung sind als solche z.B. unter den Bezeichnungen CRC (Cyclic Redundancy Check) oder MD5 (Message Digest 5) oder SHA-1 (Secure Hash Algorithm 1) gut bekannt.
Wenn in der Abschlußphase 56 kein Ladefehler detektiert wurde, wird die Datei 30 auf eine zweite Zugriffsrechtseinstellung 58 gesetzt. Im vorliegenden Ausführungsbeispiel sind in der zweiten Zugriffsrechtseinstellung 58 das Schreibzugriffsrecht 46 ("W"-Flag) gelöscht und das Lesezugriffsrecht 48 ("R"-Flag) sowie das Ausführungsrecht 50 ("X"-Flag) gesetzt. Die Datei 30 kann nun unter Steuerung des Betriebssystems 26 als ausführbares Pro-
gramm 36 ausgeführt werden. Der Ladevorgang ist damit erfolgreich abgeschlossen; in manchen Ausgestaltungen kann eine entsprechende Rückmeldung vom internen Ladeprogramm 32 an das externe Ladeprogramm 34 erfolgen.
Falls das interne Ladeprogramm 32 während der Übertragungsphase 54 oder der Abschlußphase 56 einen Ladefehler meldet, kann der Ladevorgang entweder neu gestartet oder abgebrochen werden. Der bereits geschriebene Teil der Datei 30 wird dann vorzugsweise sogleich aus dem Dateisystem 28 gelöscht.
Eine derartige sofortige Säuberung des Dateisystems 28 durch das interne Ladeprogramm 32 ist jedoch nicht möglich, wenn der Datenträger 10 während des Ladevorgangs plötzlich vom Terminal 18 getrennt wird. Dies kann entweder wegen einer Betriebsstörung oder aufgrund eines gezielten Angriffsversuchs geschehen.
Wenn der Datenträger 10 nach einer solchen Trennung vom Terminal 18 - und dem damit verbundenen Ausfall der Versorgungsspannung - wieder hochfährt, führt er eine Kontrolle des Dateisystems 28 aus. Wird dabei eine durch einen Ladevorgang angelegte Datei - hier z.B. die Datei 30 - gefunden, die noch die erste Zugriffsrechtseinstellung 44 aufweist, so ist dies ein Zeichen dafür, daß ein laufender Ladevorgang unterbrochen wurde und daher die Datei unvollständig oder fehlerhaft ist. Die betroffene Datei wird dann aus dem Dateisystem 28 gelöscht. Ob eine im Dateisystem 28 enthaltene Datei prinzipiell ein ausführbares Programm darstellt, kann in der Regel durch eine Überprüfung der ersten Bytes der Datei ermittelt werden. So weisen z.B. die ersten sechzehn Bytes eines ausführbaren Programms im
ELF-Format stets vorgegebene Werte auf, die auch als "magische Werte" bezeichnet werden.
Alternativ oder zusätzlich zu der gerade beschriebenen Überprüfung des Dateisystems 28 bei jedem Hochfahren des Datenträgers 10 kann auch vorgesehen sein, daß das Betriebssystem 26 bei jedem Versuch der Ausführung einer Datei - z.B. der Datei 30 -, die nicht durch ein gesetztes "X"-Flag als ausführbar gekennzeichnet ist, diese Datei löscht. Im Vergleich zu der an sich bekannten Vorgehensweise, bei der das Betriebssystem 26 lediglich die Ausführung einer nicht mit einem Ausführungsrecht gekennzeichneten Datei verweigert, wird durch die zusätzliche Löschung derartiger Dateien bei einem Ausführungsversuch eine laufende Bereinigung des Dateisvstems 28 bewirkt.