DE102004005676A1 - Datenträger mit plattformunabhängigem Anwendungs-Programmcode - Google Patents

Datenträger mit plattformunabhängigem Anwendungs-Programmcode Download PDF

Info

Publication number
DE102004005676A1
DE102004005676A1 DE200410005676 DE102004005676A DE102004005676A1 DE 102004005676 A1 DE102004005676 A1 DE 102004005676A1 DE 200410005676 DE200410005676 DE 200410005676 DE 102004005676 A DE102004005676 A DE 102004005676A DE 102004005676 A1 DE102004005676 A1 DE 102004005676A1
Authority
DE
Germany
Prior art keywords
program code
application
code
interpreter
java
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE200410005676
Other languages
English (en)
Inventor
Andreas RÖCK
Pablo Puente
Boris Birman
John O'connor
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Giesecke and Devrient GmbH
Original Assignee
Giesecke and Devrient GmbH
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Giesecke and Devrient GmbH filed Critical Giesecke and Devrient GmbH
Priority to DE200410005676 priority Critical patent/DE102004005676A1/de
Publication of DE102004005676A1 publication Critical patent/DE102004005676A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

Die Erfindung schafft einen Datenträger, insbesondere eine Chipkarte, mit einem Mikroprozessor, in dem plattformunabhängiger Programmcode für mindestens eine Anwendung und zumindest ein Teil eines Interpreters zum Interpretieren von plattformunabhängigem Programmcode implementiert sind, wobei der Programmcode zumindest teilweise komprimiert implementiert ist. Hierdurch lässt sich in einem System mit begrenzten Systemressourcen, z. B. einer Chipkarte, Anwendungs-Programmcode ressourcensparend unterbringen, wobei zugleich die Plattformunabhängigkeit gewahrt bleibt. Vorzugsweise hat der Programmcode in seiner komprimierten Form ein durch den Interpreter interpretierbares Datenformat und braucht vor dem Interpretieren nicht dekomprimiert zu werden. Alternativ wird der benötigte Programmcode vor dem Interpretieren dekompriemiert.

Description

  • Die Erfindung betrifft einen mit einem Mikroprozessor ausgestatteten Datenträger, in dem plattformunabhängiger Programmcode für mindestens eine Anwendung und zumindest ein Teil eines Interpreters zum Interpretieren von plattformunabhängigem Programmcode implementiert sind. Insbesondere betrifft die Erfindung einen Multiapplikations-Datenträger, in dem Programmcodes von mehreren Anwendungen implementiert sind.
  • Ein Datenträger im Sinne der Erfindung ist ein Mikroprozessorsystem mit begrenzten Systemressourcen, wie z.B. eine Chipkarte bzw. Smart Card (Mikroprozessor-Chipkarten) oder ein Token, bei dem die Ressourcen, d.h. Speicherressourcen und/oder die Rechenkapazität (Rechenleistung) begrenzt sind. Der Datenträger hat einen Körper, in dem ein Mikroprozessor angeordnet ist, und der jede beliebige standardisierte oder nicht standardisierte Gestalt haben kann, beispielsweise die Gestalt einer Chipkarte nach einer Norm wie z.B. ISO 7810 (z.B. ID-1, ID-00, ID-000) oder die eines volumigen Tokens. Der Datenträger kann weiter eine oder mehrere beliebige Schnittstellen für kontaktlose und/oder kontaktbehaftete Kommunikation mit einem Lesegerät oder Datenverarbeitungssystem (z.B. Personal Computer, Workstation, Server) haben.
  • Der Mikroprozessor weist typischerweise eine CPU (central processing unit) und einen oder mehrere Speicher auf. Üblicherweise sind nichtflüchtige und flüchtige Speicher vorgesehen.
  • In funktioneller Hinsicht hat der Datenträger einen Systemspeicher, d.h. einen oder mehrere (i.d.R. nicht-flüchtige) Speicherbereiche, in denen das Be triebssystem des Datenträgers implementiert ist, einen Anwendungsspeicher, d.h. einen oder mehrere (i.d.R. nicht-flüchtige) Speicherbereiche, in denen Programmcodes von Anwendungen implementiert sind, die auf dem Datenträger unter Verwendung der CPU und des Betriebssystems oder auf einem externen System ausgeführt werden können, und einen Arbeitsspeicher, in dem z.B. die CPU arbeitet, um z.B. Anwendungen auszuführen. Der Arbeitsspeicher kann flüchtig oder nicht-flüchtig sein, kann z.B. als gesonderter Speicher, z.B. RAM-Speicher (vgl. weiter unten), vorgesehen sein oder in Form eines oder mehrerer spezifischer Register innerhalb der CPU vorgesehen sein.
  • Ein typischer herkömmlicher Mikroprozessor auf einem Datenträger hat als nicht-flüchtige Speicher einen ROM (ROM = Read Only Memory) und einen EEPROM (EEPROM = Electrically Erasable Programable Read Only Memory) und als flüchtigen Speicher einen RAM (Random Access Memory). Im ROM ist in der Regel zumindest der größte Teil des Betriebssystems abgespeichert. Im EEPROM sind hauptsächlich Programmcodes z.B. von Anwendungsprogrammen abgespeichert, sowie bei Bedarf Patches, mit denen Fehler im ROM korrigiert werden. Der RAM (und/oder ein oder mehrere Register der CPU) dient typischerweise als Arbeitsspeicher. Teile von ROM und EEPROM können wahlweise durch Flash-Speicher ersetzt sein. Insbesondere kann als Anwendungsspeicher ein Flash-Speicher vorgesehen sein.
  • Programmcodes, die von dem Mikroprozessor ausgeführt werden sollen, müssen dem Mikroprozessor in einem Datenformat bereit gestellt werden, das die CPU des Mikroprozessors ausführen kann. Das Datenformat ist dabei grundsätzlich für jeden unterschiedlichen Typ von CPU unterschiedlich.
  • Bei nativen Programmiersprachen wie z.B. C, Basic, Assembler etc. wird ein erstellter Programmcode durch Compilierung in maschinenlesbaren Nativcode übersetzt, der durch die jeweilige CPU ausführbar ist. Der Compiler ist dabei für die jeweilige CPU ausgelegt.
  • Beim Konzept der plattformunabhängigen Programmierung, wie es mit hohen Programmiersprachen wie zum Beispiel JavaTM von Sun Microsystems verfolgt wird, wird durch die Compilierung eines erstellten Programmcodes mit einem Compiler ein plattformunabhängiger Zwischencode erzeugt. Der Compiler und der von ihm erzeugte Zwischencode sind universell und unabhängig von der CPU (d.h. von der "Plattform"), auf der der Programmcode später ausgeführt werden soll. Der Zwischencode wird nachfolgend durch einen Interpreter interpretiert und in ausführbaren Code für die verwendete CPU umgesetzt. Der plattformunabhängige Zwischencode ist für jede CPU verwendbar, die durch den Interpreter unterstützt wird. Bei der Programmiersprache Java z.B. ist der Zwischencode der JavaTM Bytecode (*.class-Dateien) oder für Java CardsTM (Chipkarte) auch der Java CardTM Bytecode (*.cap-Dateien). Der Interpreter bei JavaTM ist für den JavaTM Bytecode (*.class) die JavaTM Virtual Machine und für den Java CardTM Bytecode (*.cap) die Java CardTM Virtual Machine.
  • Plattformunabhängige Programmcodes (Zwischencodes) haben den Vorteil, dass der Programmcode für jede Anwendung nur einmal, unabhängig von der später verwendeten CPU, erstellt werden muss, und nachfolgend auf jeder CPU lauffähig ist. Die Anpassung an die CPU braucht nur ein Mal, nämlich bei der Erstellung des Interpreters, zu erfolgen. Zudem bieten platt formunabhängige Programmierumgebungen wie z.B. JavaTM eine Vielzahl von Sicherheitssystemen wie z.B. Firewalls, mit denen sich unterschiedliche Anwendungen gegeneinander abgrenzen lassen, und die bei nativen Programmierumgebungen nicht vorgesehen sind.
  • Im Vergleich zu ausgedehnten Computersystemen haben Datenträger mit Mikroprozessoren zur Speicherung von Programmcodes nur begrenzten Speicherplatz zur Verfügung. Daher ist es wichtig, mit dem vorhandenen Speicherplatz sparsam umzugehen. Andererseits besteht, insbesondere bei Multiapplikations Smart Cards, zunehmend Bedarf, eine Mehrzahl von Anwendungen auf einem einzigen Datenträger unterzubringen. Beispiele für Multiapplikations Smart Cards sind (U)SIM-Karten für Mobiltelefone, Bürgerkarten für die Kommunikation zwischen Bürgern und Behörden, Gesundheitskarten für Krankenversicherungs- und Krankenbehandlungsdienste, elektronische Geldbörsen mit weiteren Funktionalitäten und Smart Cards mit Kombinationen der genannten und/oder weiterer Funktionalitäten.
  • Bei einem bekannten Mechanismus zum Ressourcen sparenden Implementieren von Programmcode werden solche Programmcodesequenzen, die im Programmablauf bereits verwendet worden sind, an einer späteren Stelle im Programmablauf durch eine Referenz auf die weiter vorne im Programmablauf verwendete identische Programmcodesequenz ersetzt. Hierdurch braucht die Programmcodesequenz nur ein einziges Mal vollständig vorgesehen zu werden. Jedes Mal, wenn die Programmcodesequenz nochmals in der gleichen Form benötigt wird, wird statt der vollständigen Programmcodesequenz eine Referenz auf die erste Programmcodesequenz im Programmablauf vorgesehen.
  • Aufgabe der Erfindung ist es, einen Datenträger zu schaffen, in dem plattformunabhängiger Programmcode für mindestens eine Anwendung und zumindest ein Teil eines Interpreters zum Interpretieren von plattformunabhängigem Programmcode implementiert sind, wobei der plattformunabhängige Programmcode für die mindestens eine Anwendung möglichst Ressourcen sparend in dem Datenträger implementiert ist, und wobei zugleich die Plattformunabhängigkeit des Programmcodes bei der Ausführung der Anwendung beibehalten ist. Zudem sollen Verfahren zum Betreiben eines solchen Datenträgers angegeben werden.
  • Die Aufgabe wird gelöst durch einen Datenträger nach dem unabhängigen Anspruch 1 und durch ein Verfahren nach einem der unabhängigen Verfahrensansprüche. Vorteilhafte Ausgestaltungen der Erfindung sind in den abhängigen Ansprüchen angeführt.
  • Bei dem erfindungsgemäßen Datenträger gemäß dem unabhängigen Anspruch 1 ist der plattformunabhängige Programmcode der Anwendung oder Anwendungen komprimiert in dem Datenträger implementiert (abgespeichert). Dadurch lassen sich in dem Datenträger größere Anwendungen oder eine größere Anzahl von Anwendungen unterbringen als bei einer unkomprimierten Speicherung des Programmcodes. Der Datenträger ist somit besonders Speicherressourcen sparend ausgebildet. Da andererseits der Programmcode plattformunabhängig ist, bleiben trotz der Komprimierung die Vorteile der plattformunabhängigen Programmierungsumgebung, beispielsweise Sicherheitssysteme, wie z.B. Firewalls, die die plattformunabhängige Programmierung bietet, nutzbar.
  • Daher ist gemäß Anspruch 1 ein Datenträger geschaffen, bei dem plattformunabhängiger Programmcode für mindestens eine Anwendung möglichst Ressourcen sparend implementiert ist, wobei zugleich die Plattformunabhängigkeit des Programmcodes bei der Ausführung der Anwendung beibehalten ist.
  • Der Programmcode hat vorzugsweise ein Datenformat, z.B. eines Zwischencodes, das durch den Interpreter, der ebenfalls zumindest teilweise in dem Datenträger implementiert ist, interpretierbar ist.
  • Gemäß einer bevorzugten Ausführungsform der Erfindung hat der Programmcode in seiner zumindest teilweise komprimierten Form ein durch den Interpreter interpretierbares Datenformat. Bei dieser Ausführungsform kann zur Ausführung der Anwendung oder zumindest eines Teils der Anwendung, der Programmcode der Anwendung bzw. des entsprechenden Teils der Anwendung ohne vorherige Dekomprimierung dem Interpreter zur Interpretation bereitgestellt wird. Der Interpreter kann den Programmcode, sobald er in den Arbeitsspeicher geladen ist, ohne vorherige Dekomprimierung interpretieren. Nachfolgend kann der interpretierte Code ausgeführt werden, so dass die Anwendung ausgeführt wird. Diese Ausführungsform hat den zusätzlichen Vorteil, dass Anwendungen sehr schnell ausgeführt werden können, obgleich der zugehörige Programmcode komprimiert und dadurch Speicher sparend abgespeichert ist.
  • Alternativ oder zusätzlich hat der Programmcode in seiner nicht komprimierten Form ein durch den Interpreter interpretierbares Datenformat.
  • Die Compilierung des Quelltextes, um den Programmcode zu erzeugen, kann beispielsweise bereits vorab auf einem leistungsfähigeren Datenverarbeitungssystem erfolgt sein, z.B. einem Personal Computer oder einer Workstation, bevor der Programmcode auf den Datenträger geladen wird. Alternativ ist auch ein Datenträger mit einem darin implementierten Compiler und eine Compilierung des Quelltextes auf dem Datenträger denkbar.
  • Der Interpreter kann (nur) teilweise in dem Datenträger implementiert sein, um Ressourcen des Datenträgers zu sparen, oder vollständig in dem Datenträger implementiert sein, damit der Datenträger möglichst autonom betreibbar ist.
  • Die komprimierte Speicherung des Programmcodes der Anwendung oder Anwendungen hat den weiteren Vorteil einer erhöhten Sicherheit, dadurch, dass der Klartext des Programmcodes durch die Komprimierung verfälscht ist. Daher lässt sich der Inhalt des komprimiert abgespeicherten Programmcodes durch einen unbefugten Nutzer nur mit großem Aufwand missbräuchlich ausspähen. Die komprimierte Implementierung des Programmcodes (Zwischencodes) der Anwendung erhöht somit zusätzlich die Sicherheit des Datenträgers.
  • Falls der komprimierte Programmcode nicht direkt, ohne vorherige Dekomprimierung interpretierbar ist, wird zur Ausführung der Anwendung oder zumindest eines Teils der Anwendung, der Programmcode zu zumindest dem entsprechenden Teil der Anwendung dekomprimiert und dem Interpreter zur Interpretation bereitgestellt. In diesem Fall wird der dekom primierte Programmcode interpretiert und schließlich ausgeführt. Weitere in dem Datenträger ggf. implementierte Programmcodes für Anwendungen oder Anwendungsteile, die gerade nicht benötigt werden, können komprimiert abgespeichert bleiben. Soll beispielsweise eine von mehreren Anwendungen zur Ausführung aufgerufen werden, wird nur der Programmcode der gewünschten Anwendung aus dem für Anwendungen reservierten Anwendungsspeicher, z.B. einem Teilbereich des EEPROM oder einem Flash-Speicher, in den Arbeitsspeicher geladen, dekomprimiert und dem Interpreter zugeführt. Die Programmcodes der übrigen Anwendungen verbleiben komprimiert im Anwendungsspeicher. Soll, als weiteres Beispiel, bei einer größeren Anwendung nur ein Teil der Anwendung ausgeführt werden, so wird auf ähnliche Weise nur der entsprechende Teil des zugehörigen Programmcodes in den Arbeitsspeicher geladen, dekomprimiert und dem Interpreter zugeführt. Nicht benötigte Programmcodeteile der übrigen Anwendungsteile verbleiben komprimiert im Anwendungsspeicher.
  • Gemäß bevorzugten Ausführungsformen der Erfindung ist das Datenformat des nicht durch den Interpreter interpretierbaren Programmcodes das Datenformat eines JavaTM Bytecode oder Java CardTM Bytecode, d.h. der interpretierbare Programmcode liegt als Klassendatei im class-Format (*.class) gemäß der JavaTM Spezifikation bzw. im cap-Format (*.cap) gemäß der Java CardTM Spezifikation vor (Spezifikationen derzeit einsehbar z.B. unter http://java.sun.com/products/javacard). Bei diesen Ausführungsformen ist durch den Interpreter zumindest ein Teil einer JavaTM Virtual Machine bzw. einer Java CardTM Virtual Machine gebildet.
  • Der Datenträger kann insbesondere eine Java CardTM sein. Die Anwendung oder Anwendungen können insbesondere JavaTM Applikationen oder JavaTM Applets sein.
  • Bei einer weiteren Ausführungsform der Erfindung enthält der Datenträger eine Komprimiereinrichtung zum Komprimieren von Programmcode. Bei dieser Ausführungsform kann plattformunabhängiger Programmcode (Zwischencode) ohne weitere Maßnahmen in den Datenträger geladen werden. Der Datenträger empfängt den plattformunabhängigen Programmcode (Zwischencode), komprimiert ihn und speichert ihn in seinem für Anwendungen vorgesehenen Anwendungsspeicher ab, z.B. im EEPROM oder Flash-Speicher. Der komprimiert abgespeicherte Programmcode kann später wie weiter oben beschrieben geladen und an den Interpreter bereitgestellt werden, um die zugehörige Anwendung auszuführen.
  • Bei einer alternativen Ausführungsform wird der Programmcode, der in dem Datenträger implementiert werden soll, außerhalb des Datenträgers komprimiert. Der komprimierte Programmcode wird in den Datenträger eingespeist und dort in einem Speicher implementiert, z.B. in einem ROM-Speicher oder in einem EEPROM oder Flash-Speicher. Diese Ausführungsform hat den zusätzlichen Vorteil, dass die begrenzte Rechenkapazität des Datenträgers geschont wird.
  • Gemäß einer weiteren Ausführungsform der Erfindung sind bei dem erfindungsgemäßen Datenträger nur solche Teilabschnitte des Programmcodes in komprimierter Form implementiert, die keinen Befehlscode für eine bedingte Verzweigung aufweisen. Diese Ausführungsform ist insbesondere im Zu sammenhang mit derjenigen Ausführungsform bevorzugt, bei der der komprimierte Programmcode erst dekomprimiert werden muss, bevor er durch den Interpreter interpretiert werden kann. Hierbei ist ein Befehlscode für eine bedingte Verzweigung dadurch ausgezeichnet, dass auf den Befehlscode der bedingten Verzweigung in Abhängigkeit von einer Bedingung mindestens zwei unterschiedliche nachfolgende Befehle folgen können. Mit anderen Worten hat die Anwendung zwei (oder mehr) Zweige, von denen in Abhängigkeit von der Bedingung alternativ nur ein Zweig der beiden (oder mehreren) Zweige ausgeführt wird. Anwendungs-Befehlscode, der eine oder mehrere Verzweigungen enthält, ist vorzugsweise in unkomprimierter Form in dem Datenspeicher implementiert (abgespeichert). Auf diese Weise kann an einer bedingten Verzweigung im Programmablauf, die in mehrere Zweige mündet, vorgesehen werden, dass, wenn gemäß der Bedingung ein vorbestimmter Zweig des Programmablaufs ausgeführt werden soll, nur der Programmcode zu diesem vorbestimmten Zweig geladen und dekomprimiert wird. Programmcodes, die den übrigen Zweigen entsprechen, die nicht ausgeführt werden und daher nicht benötigt werden, verbleiben komprimiert im Anwendungsspeicher.
  • Im Zusammenhang mit derjenigen Ausführungsform, bei der der komprimierte Programmcode erst dekomprimiert werden muss, bevor er durch den Interpreter interpretiert werden kann, ist es weiter bevorzugt, dass der Programmcode zu einer Anwendung bzw. einem Teil davon nur während der Ausführung der Anwendung bzw. des Teils der Anwendung in dekomprimierter Form bereitgehalten wird. Solange die Anwendung nicht aufgerufen wird, ruht der komprimierte Programmcode in komprimierter Form im Anwendungsspeicher. Wird andererseits eine aufgerufene, geladene, de komprimierte, interpretierte und schließlich zur Ausführung gelangte Anwendung (bzw. ein solcher Anwendungsteil) wieder beendet, so wird die dekomprimierte Form des zugehörigen Programmcodes vorzugsweise wieder gelöscht. Dies kann beispielsweise dadurch bewirkt werden, dass der Bereich im Arbeitsspeicher, der für die Anwendung bereitgestellt worden ist, wieder freigegeben wird.
  • Zusätzlich kann Speicherplatz gespart werden, indem eine vorbestimmte Codesequenz innerhalb des Programmcodes, die innerhalb des Programmcodes an einer ersten Stelle und an mindestens einer weiteren Stelle zur Ausführung vorgesehen ist, an der weiteren Stelle durch eine Referenz auf die Codesequenz an der ersten Stelle ersetzt wird. Die Referenz kann insbesondere in einem direkten Verlinken der identischen Codesequenzen auf ein und denselben Speicherabschnitt bestehen.
  • Im Folgenden werden bevorzugte Verfahren zum Komprimieren von Programmcode angegeben.
  • Gemäß einer besonders bevorzugten Ausführungsform der Erfindung ist die Komprimierung derart durchgeführt, dass solche Bestandteile des Programmcodes entfernt werden, die keine Information enthalten.
  • Beispielsweise werden bei JavaTM bzw. Java CardTM Bytecode gemäß der JavaTM Spezifikation Indizes in 2 Byte Werten abgespeichert, obwohl in den meisten Fällen der Index kleiner als 255 ist, wo dass also 1 Byte ausreichen würde, um den Index anzugeben. In diesem Fall wird beispielsweise bei der Komprimierung das überflüssige Byte des Index entfernt, so dass ein Index nur noch ein Byte lang ist.
  • Wahlweise ist bei Bedarf der Interpreter auf den komprimierten Programmcode angepasst, so dass er den komprimierten Bytecode interpretieren kann. Alternativ wird die Komprimierung derart durchgeführt, dass der Interpreter unverändert bleiben kann.
  • Gemäß einer weiteren Ausführungsform der Erfindung wird, wenn eine vorbestimmte Codesequenz, z.B. Bytefolge, innerhalb des Programmcodes an einer ersten Stelle und an mindestens einer weiteren Stelle zur Ausführung vorgesehen ist, die Codesequenz an der weiteren Stelle durch eine Referenz auf die Codesequenz an der ersten Stelle ersetzt. Vorzugsweise ist die Codesequenz ursprünglich an allen Stellen im Programmcode vollständig ausformuliert vorhanden und wird dann an allen Stellen bis auf die erste Stelle durch eine Referenz auf die Codesequenz an der ersten Stelle ersetzt. Insbesondere wird beispielsweise die Codesequenz beim Linken des Programmcodes durch die Referenz ersetzt. Genauer wird beim Linken des Programmcodes die an der ersten Stelle vorgesehene Codesequenz auf herkömmliche Weise in dem Datenträger implementiert, wobei die Codesequenz auf einen vorbestimmten Speicherabschnitt verlinkt wird. An der weiteren Stelle wird erkannt, dass die identische Codesequenz bereits an der ersten Stelle vorgesehen war und bereits auf den vorbestimmten Speicherabschnitt verlinkt worden ist. Folglich wird die Codesequenz nicht nochmals in dem Datenträger implementiert und dabei insbesondere nicht nochmals auf einen freien, weiteren Speicherabschnitt verlinkt. Statt dessen wird an der zweiten Stelle die Codesequenz auf ein und denselben vorbestimmten Spei cherbereich verlinkt, auf den die Codesequenz an der ersten Stelle verlinkt worden ist. So lässt sich weiterer Speicherplatz sparen.
  • Die zuletzt genannte Ausführungsform, bei der identische Codesequenzen auf denselben Speicherabschnitt verlinkt werden, ist insbesondere für Tabellen vorteilhaft. Ein vorbestimmter Eintrag in einer Tabelle wird beispielsweise von unterschiedlichen Stellen im Programmcode aus referenziert. Gemäß der Ausführungsform der Erfindung werden in diesem Fall alle diese unterschiedlichen Stellen auf ein und denselben Eintrag in einer oder mehreren zusammengehörenden Tabellen verlinkt. Bei einer Java Card ist beispielsweise der Konstantenpool als Tabelle vorgesehen. Der Konstantenpool wird von unterschiedlichen Stellen im Programmcode aus referenziert. Dennoch wird jeder Eintrag des Konstantenpools nur ein einziges Mal im Konstantenpool implementiert. Bei jeder weiteren Stelle, die eine Referenz auf einen Eintrag des Konstantenpools enthält, wird die weitere Stelle auf den bereits implementierten Eintrag Konstantenpools verlinkt.
  • Im folgenden wird die Erfindung anhand von Ausführungsbeispielen und unter Bezugnahme auf die Zeichnung näher erläutert, in der zeigen:
  • 1 ein Flussdiagramm zur Veranschaulichung des Implementierens von Programmcodes in einen Datenträger sowie des Extrahierens von Programmcodes zur Ausführung einer Anwendung, gemäß einer ersten Ausführungsform der Erfindung;
  • 2 ein analoges Flussdiagramm wie das in 1 gezeigte für eine zweite Ausführungsform der Erfindung, bei der zusätzlich in dem Datenträger eine Komprimiereinrichtung implementiert ist;
  • 3 ein analoges Flussdiagramm wie das in 1 gezeigte für eine dritte Ausführungsform der Erfindung, bei der zusätzlich in dem Datenträger eine Dekomprimiereinrichtung implementiert ist;
  • 4 ein analoges Flussdiagramm wie das in 1 gezeigte für eine vierte Ausführungsform der Erfindung, bei der der Datenträger zusätzlich eine Komprimiereinrichtung und eine Dekomprimiereinrichtung aufweist.
  • 1 bis 4 zeigen Flussdiagramme zur Veranschaulichung des Implementierens von Programmcodes in einen Datenträger sowie des Extrahierens von Programmcodes zur Ausführung einer Anwendung, gemäß Ausführungsformen der Erfindung. Der Datenträger ist eine Java CardTM Multiapplikationskarte (Smart Card, Chipkarte), in der eine Mehrzahl von Anwendungen in Form von Applets implementiert sind. Der Quelltext eines in den Datenträger zu ladenden Applets wird zunächst auf einem externen Computer, außerhalb der Multiapplikationskarte, zu einem JavaTM Bytecode compiliert und zusammen mit Export-Dateien zu einer cap-Datei konvertiert (nicht gezeigt), so dass ein Programmcode im Datenformat eines Java CardTM Bytecodes (Zwischencodes) erzeugt wird. Der als cap-Datei vorliegende Programmcode hat ein durch eine in der Multiapplikationskarte implementierte Java Card Virtual MachineTM interpretierbares Datenformat. Die Flussdiagramme sind analog anzuwenden auf Datenträger, in denen nur eine einzel ne Anwendung implementiert ist und/oder in denen andere Anwendungen als Applets implementiert sind und/oder bei denen eine andere plattformunabhängige Programmierumgebung als JavaTM verwendet ist.
  • Bei einer ersten Ausführungsform, die in 1 dargestellt ist, soll zuerst, wie in den Schritten 1 bis 3 dargestellt ist, eine Anwendung in Form eines JavaTM Applets in den Anwendungsspeicher einer Java CardTM Multiapplikationskarte (Datenträger, Smart Card, Chipkarte) geladen werden. Als Anwendungsspeicher wird bei dieser Ausführungsform der ROM verwendet. Alternativ kann das Applet auch im EEPROM oder in einem Flash-Speicher implementiert (abgespeichert) werden. Der Programmcode wird, vgl. Schritt 1, einer Komprimiereinrichtung bereitgestellt, die den Programmcode, vgl. Schritt 2, komprimiert. Die Komprimiereinrichtung komprimiert den Programmcode derart, dass der komprimierte Programmcode immer noch ein Datenformat hat, das durch die Java Card Virtual MachineTM der Multiapplikationskarte interpretierbar ist. Der komprimierte Programmcode des Applets wird über Kontakte (je nach Ausführungsform kontaktlos oder kontaktbehaftet) der Multiapplikationskarte in die Multiapplikationskarte eingegeben und nachfolgend, vgl. Schritt 3, in den Anwendungsspeicher (hier ROM; alternativ EEPRROM oder Flash) der Java CardTM Multiapplikationskarte geladen. In dem Anwendungsspeicher sind bereits mehrere weitere Anwendungen in Form von Applets abgespeichert. Mit Beendigung von Schritt 3 ist die Multiapplikationskarte fertig zum Gebrauch.
  • Nun soll, gemäß den Schritten 4 und 5 von 1, ein in der Multiapplikationskarte implementiertes Applet ausgeführt werden. Der zu dem gewünschten Applet gehörige komprimierte Programmcode, d.h. die komprimierte cap-Datei, wird, vgl. Schritt 4, aus dem Anwendungsspeicher (EEPROM) in den Arbeitsspeicher der Multiapplikationskarte geladen. Gemäß Schritt 5 wird der geladene Programmcode ohne vorherige Dekomprimierung an die Java Card Virtual MachineTM (Interpreter) bereitgestellt, die schließlich den Programmcode interpretiert und den interpretierten Code an die CPU der Multiapplikationskarte liefert, woraufhin das Applet ausgeführt wird.
  • 2 zeigt ein analoges Flussdiagramm wie das in 1 gezeigte für eine zweite Ausführungsform der Erfindung. Bei der zweiten Ausführungsform ist, anders als bei der ersten Ausführungsform aus 1, in der Java CardTM Multiapplikationskarte eine Komprimiereinrichtung implementiert. Bei der Ausführungsform aus 2 wird zunächst in Schritt 1 Programmcode, der als cap-Datei vorliegt, bereitgestellt und über Kontakte (je nach Ausführungsform kontaktlos oder kontaktbehaftet) der Multiapplikationskarte in die Multiapplikationskarte eingegeben. Von den Kontakten aus wird der Programmcode, vgl. Schritt 2, an eine in der Multiapplikationskarte implementierte Komprimiereinrichtung bereitgestellt, die den Programmcode innerhalb der Multiapplikationskarte komprimiert. Die Komprimiereinrichtung kann in die CPU der Multiapplikationskarte integriert sein. Alternativ kann zum Komprimieren von Programmcodes ein gesonderter Prozessor vorgesehen sein. Der komprimierte Programmcode wird wie bei der Ausführungsform aus 1 in dem Anwendungsspeicher der Multiapplikationskarte abgespeichert. Das Ausführen eines Applet erfolgt analog wie bei der Smart Card aus 1 (vgl. Schritte 4 und 5 in 2).
  • 3 zeigt ein analoges Flussdiagramm wie das in 1 gezeigte für eine dritte Ausführungsform der Erfindung, bei der zusätzlich in dem Datenträ ger eine Dekomprimiereinrichtung implementiert ist. Das Implementieren von Applets in den Datenträger (Java CardTM Multiapplikationskarte) erfolgt wie bei der Ausführungsform aus 1 (vgl. Schritte 1 bis 3 in 3). Beim Ausführen eines Applet wird, vgl. Schritt 4, zunächst der zugehörige Programmcode aus dem Anwendungsspeicher (hier ROM) in den Arbeitsspeicher geladen. Im nachfolgenden Schritt 5 wird der geladene Programmcode dekomprimiert und danach, Schritt 6, an die Java CardTM Virtual Machine bereitgestellt. Diese interpretiert den dekomprimierten Programmcode. Wie an Hand der 1 bis 3 beschrieben wird schließlich das Applet ausgeführt.
  • 4 zeigt ein analoges Flussdiagramm wie das in 1 gezeigte für eine vierte Ausführungsform der Erfindung, bei der der Datenträger zusätzlich eine Komprimiereinrichtung und eine Dekomprimiereinrichtung aufweist. Als Anwendungsspeicher wird bei der vierten Ausführungsform ein Flash-Speicher verwendet. Das Komprimieren und Laden von Applets in die Java CardTM (Datenträger) gemäß den Schritten 1 bis 3 erfolgt wie bei der zweiten Ausführungsform (2). Das Ausführen von Applets erfolgt wie bei der dritten Ausführungsform (3).

Claims (24)

  1. Datenträger, insbesondere Chipkarte, mit einem Mikroprozessor, in dem plattformunabhängiger Programmcode für mindestens eine Anwendung und zumindest ein Teil eines Interpreters zum Interpretieren von plattformunabhängigem Programmcode implementiert sind, wobei der Programmcode zumindest teilweise komprimiert implementiert ist.
  2. Datenträger nach Anspruch 1, wobei der Programmcode in seiner zumindest teilweise komprimierten Form ein durch den Interpreter interpretierbares Datenformat hat.
  3. Datenträger nach Anspruch 1 oder 2, wobei der Programmcode in seiner nicht komprimierten Form ein durch den Interpreter interpretierbares Datenformat hat.
  4. Datenträger nach Anspruch 2 oder 3, wobei das durch den Interpreter interpretierbare Datenformat das Datenformat eines Java Bytecode (*.class) oder Java Card Bytecode (*.cap) ist, und wobei durch den Interpreter zumindest ein Teil einer Java Virtual Machine oder einer Java Card Virtual Machine gebildet ist.
  5. Datenträger nach einem der Ansprüche 1 bis 4, wobei die Anwendung eine Java Applikation oder ein Java Applet ist.
  6. Datenträger nach einem der Ansprüche 1 bis 5, der weiter eine Ladeeinrichtung aufweist, mit der sich der implementierte Programmcode zu zu mindest einem Teil einer Anwendung in einen Arbeitsspeicher des Datenträgers laden lässt.
  7. Datenträger nach einem der Ansprüche 1 bis 6, der weiter eine Komprimiereinrichtung zum Komprimieren von Programmcode aufweist.
  8. Datenträger nach einem der Ansprüche 1 bis 7, der weiter eine Dekomprimiereinrichtung zum Dekomprimieren von Programmcode aufweist.
  9. Datenträger nach einem der Ansprüche 1 bis 8, in dem eine Mehrzahl von Programmcodes für eine Mehrzahl von Anwendungen gemäß einem der Ansprüche 1 bis 8 implementiert sind.
  10. Datenträger nach einem der Ansprüche 1 bis 9, wobei nur solche Teilabschnitte des Programmcodes komprimiert implementiert sind, die keinen Befehlscode für eine bedingte Verzweigung aufweisen, wobei ein Befehlscode für eine bedingte Verzweigung dadurch ausgezeichnet ist, dass auf den Befehlscode der bedingten Verzweigung in Abhängigkeit von einer Bedingung mindestens zwei unterschiedliche nachfolgende Befehle folgen können.
  11. Datenträger nach einem der Ansprüche 1 bis 10, wobei eine vorbestimmte Codesequenz innerhalb des Programmcodes, die innerhalb des Programmcodes an einer ersten Stelle und an mindestens einer weiteren Stelle zur Ausführung vorgesehen ist, an der weiteren Stelle durch eine Referenz, insbesondere Verlinkung, auf die Codesequenz an der ersten Stelle ersetzt ist.
  12. Verfahren zum Betreiben eine Datenträgers, umfassend Implementieren eines plattformunabhängigen Programmcodes für mindestens eine Anwendung in einen Mikroprozessor eines Datenträgers, wobei in dem Mikroprozessor zumindest ein Teil eines Interpreters zum Interpretieren von plattformunabhängigem Programmcode implementiert ist, wobei bei dem Verfahren der Programmcode – zumindest teilweise komprimiert wird und – in der zumindest teilweise komprimierten Form in dem Mikroprozessor, insbesondere in einem nichtflüchtigen Speicher des Mikroprozessors, implementiert wird und dadurch für eine spätere Ausführung der Anwendung bereitgestellt wird.
  13. Verfahren nach Anspruch 12, wobei eine vorbestimmte Codesequenz innerhalb des Programmcodes, die innerhalb des Programmcodes an einer ersten Stelle und an mindestens einer weiteren Stelle zur Ausführung vorgesehen ist, an der weiteren Stelle durch eine Referenz, insbesondere Verlinkung, auf die Codesequenz an der ersten Stelle ersetzt wird.
  14. Verfahren nach Anspruch 12 oder 13, bei dem weiter, zur Ausführung der Anwendung oder zumindest eines Teils der Anwendung, der Programmcode zu zumindest dem entsprechenden Teil der Anwendung in einen Arbeitsspeicher des Mikroprozessors geladen wird.
  15. Verfahren zum Betreiben eines Datenträges, umfassend Extrahieren von plattformunabhängigem Programmcode für mindestens eine Anwendung, um die Anwendung oder einen Teil davon auszuführen, wobei der Programmcode in einem Mikroprozessor eines Datenträgers komprimiert imp lementiert ist, wobei in dem Mikroprozessor weiter zumindest ein Teil eines Interpreters zum Interpretieren von plattformunabhängigem Programmcode implementiert ist, wobei bei dem Verfahren der Programmcode zu der Anwendung oder zumindest zu dem Teil der Anwendung in einen Arbeitsspeicher des Mikroprozessors geladen wird.
  16. Verfahren nach einem der Ansprüche 12 bis 15, wobei der Programmcode derart komprimiert wird bzw. ist, dass er in seiner zumindest teilweise komprimierten Form ein durch den Interpreter interpretierbares Datenformat hat.
  17. Verfahren nach einem der Ansprüche 12 bis 16 , wobei der Programmcode in seiner nicht komprimierten Form ein durch den Interpreter interpretierbares Datenformat hat.
  18. Verfahren nach Anspruch 16 oder 17, wobei das durch den Interpreter interpretierbare Datenformat des Programmcodes das Datenformat eines Java Bytecode (*.class) oder Java Card Bytecode (*.cap) ist, und wobei durch den Interpreter zumindest ein Teil einer Java Virtual Machine oder Java Card Virtual Machine gebildet ist.
  19. Verfahren nach einem der Ansprüche 12 bis 18, bei dem weiter, zur Ausführung der Anwendung oder zumindest eines Teils der Anwendung, der Programmcode zu zumindest dem entsprechenden Teil der Anwendung ohne vorherige Dekomprimierung dem Interpreter zur Interpretation bereitgestellt wird.
  20. Verfahren nach einem der Ansprüche 12 bis 19, bei dem weiter, zur Ausführung der Anwendung oder zumindest eines Teils der Anwendung, der Programmcode zu zumindest dem entsprechenden Teil der Anwendung dekomprimiert wird und dem Interpreter zur Interpretation bereitgestellt wird.
  21. Verfahren nach einem der Ansprüche 12 bis 20, wobei die Anwendung eine Java Applikation oder ein Java Applet ist.
  22. Verfahren nach einem der Ansprüche 12 bis 21, wobei weiter der, ggf. dekomprimierte, Programmcode von dem zumindest teilweise auf dem Datenträger implementierten Interpreter interpretiert wird.
  23. Verfahren nach Anspruch 22, wobei weiter der interpretierte Programmcode ausgeführt wird, so dass die Anwendung bzw. der Teil der Anwendung ausgeführt wird.
  24. Verfahren nach einem der Ansprüche 12 bis 23 in Verbindung mit Anspruch 20, wobei der Programmcode zu einer Anwendung bzw. einem Teil davon nur während der Ausführung der Anwendung bzw. des Teils davon in dekomprimierter Form bereitgehalten wird.
DE200410005676 2004-02-05 2004-02-05 Datenträger mit plattformunabhängigem Anwendungs-Programmcode Withdrawn DE102004005676A1 (de)

Priority Applications (1)

Application Number Priority Date Filing Date Title
DE200410005676 DE102004005676A1 (de) 2004-02-05 2004-02-05 Datenträger mit plattformunabhängigem Anwendungs-Programmcode

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE200410005676 DE102004005676A1 (de) 2004-02-05 2004-02-05 Datenträger mit plattformunabhängigem Anwendungs-Programmcode

Publications (1)

Publication Number Publication Date
DE102004005676A1 true DE102004005676A1 (de) 2005-08-25

Family

ID=34801613

Family Applications (1)

Application Number Title Priority Date Filing Date
DE200410005676 Withdrawn DE102004005676A1 (de) 2004-02-05 2004-02-05 Datenträger mit plattformunabhängigem Anwendungs-Programmcode

Country Status (1)

Country Link
DE (1) DE102004005676A1 (de)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007033792A2 (de) * 2005-09-22 2007-03-29 Giesecke & Devrient Gmbh Verfahren zur initialisierung und/oder personalisierung eines tragbaren datenträgers
DE102008052955A1 (de) * 2008-10-23 2010-05-06 Knorr-Bremse Systeme für Nutzfahrzeuge GmbH Verfahren zur Übertragung von Programmcodes an einen Speicher eines Steuergerätes, insbesondere für Kraftfahrzeuge
US8332184B2 (en) 2007-01-30 2012-12-11 Arkex Limited Gravity survey data processing

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
BIZZOTTO,G.,et.al.: Practiacal Java Card bytecode compression. In: Renpar'14/ASF/SYMPA,Hamamet,Tunisine,10-13 avril, 2002, S.1-6 *
BIZZOTTO,G.,et.al.: Practiacal Java Card bytecode compression. In: Renpar'14/ASF/SYMPA,Hamamet,Tunisine,10-13 avril, 2002, S.1-6;http://www.lifl.fr/RD2P/JITS/uploads/JITS/BI 2002.pdf
CLAUSEN,L.R.,et.al.: RR 3578 - Java Bytecode Compression for Embedded Systems. Rapport de recherche de I'INRIA- Rennes,Dec. 1998,S.1-22 *
ftp://ftp.inria.fr/INRIA/publication/ publi-pdf/RR/RR-3578.pdf) *
ftp://ftp.inria.fr/INRIA/publication/ publi-pdf/RR/RR-3578.pdf);
ttp://www.lifl.fr/RD2P/JITS/uploads/JITS/BI2002.pdf *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007033792A2 (de) * 2005-09-22 2007-03-29 Giesecke & Devrient Gmbh Verfahren zur initialisierung und/oder personalisierung eines tragbaren datenträgers
WO2007033792A3 (de) * 2005-09-22 2007-08-23 Giesecke & Devrient Gmbh Verfahren zur initialisierung und/oder personalisierung eines tragbaren datenträgers
CN101326552B (zh) * 2005-09-22 2012-02-15 德国捷德有限公司 初始化和/或个性化便携式数据载体的方法
US8332184B2 (en) 2007-01-30 2012-12-11 Arkex Limited Gravity survey data processing
DE102008052955A1 (de) * 2008-10-23 2010-05-06 Knorr-Bremse Systeme für Nutzfahrzeuge GmbH Verfahren zur Übertragung von Programmcodes an einen Speicher eines Steuergerätes, insbesondere für Kraftfahrzeuge
DE102008052955B4 (de) * 2008-10-23 2010-06-24 Knorr-Bremse Systeme für Nutzfahrzeuge GmbH Verfahren zur Übertragung von Programmcodes an einen Speicher eines Steuergerätes, insbesondere für Kraftfahrzeuge
US8782328B2 (en) 2008-10-23 2014-07-15 Knorr-Bremse Systeme Fuer Nutzfahrzeuge Gmbh Method for transmitting program codes to a memory of a control device, particularly for motor vehicles

Similar Documents

Publication Publication Date Title
WO2010009789A1 (de) Laden und aktualisieren einer personalisierungsbedürftigen applikation
DE102009059939A1 (de) Verfahren zum Komprimieren von Bezeichnern
DE69932412T2 (de) Chipkartenkonfiguration
DE60224937T2 (de) Verfahren und anordnung zum verknüpfen von verwandelten appletdateien
DE10234971B4 (de) Verfahren und Datenträger zum Erzeugen und Korrigieren von Programmcode
WO2005055052A2 (de) Java smart card chip mit für globale variablen reserviertem speicherbereich
DE102004005676A1 (de) Datenträger mit plattformunabhängigem Anwendungs-Programmcode
EP1709534B1 (de) Ausführung eines programms durch eine virtuelle maschine
WO2007033792A2 (de) Verfahren zur initialisierung und/oder personalisierung eines tragbaren datenträgers
DE102005007581A1 (de) Verfahren zur Personalisierung eines tragbaren Datenträgers
DE69807612T2 (de) Verfahren und Gerät zur Speicherung und Verwendung von ausführbaren Programmen
EP1634252B1 (de) Verfahren zum laden von tragbaren datenträgern mit daten
EP3159821A1 (de) Prozessor-system mit applet security settings
DE102007041873A1 (de) Installieren eines Patch in einem Smartcard-Modul
EP3132346B1 (de) Verfahren zum ausführen einer codefolge auf einem sicherheitsmodul
EP2012280A2 (de) Tragbarer Datenträger und Verfahren zur Personalisierung eines tragbaren Datenträgers
EP2172913B1 (de) Personalisieren von portable Datenträgern
DE10328238B4 (de) Verfahren zum Laden von Chipkarten mit Initialisierungs- und/oder Personalisierungsdaten
EP1920328B1 (de) Operationscode-umschaltung
DE102008044808B4 (de) Verfahren zur Generierung von Programmcode in einem Betriebssystemspeicher und einem Applikationsspeicher eines Datenträgers
WO2006037609A2 (de) Verfahren zum laden einer applikation in einen datenträger
DE69809198T2 (de) Verfahren zur integritätskontrolle von in einem mehranwendungsterminal gespeicherten anwendungsprogrammen und terminal zur durchführung dieses verfahrens
EP0794519A1 (de) Chipkarte
EP1600855B1 (de) Erzeugen und Verwenden von Speicherbelegungsinformationen bei einem tragbaren Datenträger
DE10045926A1 (de) Verfahren zum Auffinden einer in einem Speicher, insbesondere des Speichers eines tragbaren Datenträgers abgelegten Anwendungsdatei

Legal Events

Date Code Title Description
OM8 Search report available as to paragraph 43 lit. 1 sentence 1 patent law
8141 Disposal/no request for examination
R005 Application deemed withdrawn due to failure to request examination

Effective date: 20110208