Aufgrund der strikten Hardwarebeschränkungen kann Java Card nur ein limitiertes Subset der Programmiersprache Java unterstützen. Alle Sprachkonstrukte von Java Card gibt es aber umgekehrt auch in Java. Sie verhalten sich identisch. Im Zuge des üblichen Build-Zyklus wird ein Java-Card-Programm von einem Java-Compiler ohne spezielle Optionen in eine Java-Klassendatei kompiliert. Diese Klassendatei wird dann mit speziellen Tools der Java-Card-Plattform nachbearbeitet.
Viele Funktionen von Java werden von Java Card nicht unterstützt. Dazu zählen etwa Typen wie char, double, float und long, der transient-Qualifier, enums, mehrdimensionale Arrays, Finalisierung, Objektklone oder Threads. Einige Funktionen sind außerdem Laufzeitoptionen, die in vielen aktuellen Smartcards fehlen. Das trifft besonders auf den Typ int zu, der der standardmäßige Typ von Java-Ausdrücken ist, sowie auf die Speicherbereinigung von Objekten.
Java-Card-Bytecode, der von der Java-Card-Virtual-Machine ausgeführt wird, ist eine funktionale Untermenge des J2SE-Bytecodes einer JVM. Er verwendet jedoch eine andere Codierung, die für möglichst geringen Speicherplatz optimiert ist. Ein Java-Card-Applet braucht normalerweise weniger Bytecode als ein hypothetisches Java-Applet, das durch Kompilieren desselben Java-Quellcodes erzeugt würde. Das spart Speicher, ein absolutes Muss bei Komponenten wie Smartcards, die nur über beschränkte Ressourcen verfügen. Der Nachteil dieses Konzepts ist, dass wie erwähnt einige Funktionen von Java nicht unterstützt werden und es Speicherplatzbeschränkungen gibt. Mithilfe einiger Verfahren lassen sich diese Speicherplatzbeschränkungen aber überwinden. Beispielsweise kann man den Anwendungscode in kleine Pakete aufteilen, die unter dem Limit von 64 KByte bleiben.
Die Standardklassenbibliothek von Java Card und die Laufzeitunterstützung unterscheiden sich stark von denen in Java. Der gemeinsame Subset ist minimal. So wird zum Beispiel die Klasse Java-Security-Manager in Java Card nicht unterstützt, sondern die Java-Card-Virtual-Machine implementiert Sicherheitsrichtlinien. Transienten, also nicht persistente, schnelle RAM-Variablen, die auch Klassenmitglieder sein können, werden durch eine Java-Card-Klassenbibliothek verarbeitet. In Java gibt es dafür direkte Codierungsunterstützung.
Auch die Programmiertechniken für eine Java-Card-Anwendung unterscheiden sich deutlich von denjenigen eines Java-Programms. Java Card verwendet ein genau definiertes Subset von Java. Das beschleunigt die Einarbeitung und ermöglicht die Verwendung einer Java-Umgebung für die Entwicklung von Java-Card-Programmen sowie die Fehlersuche. Wird die Fehlerbeseitigung mit Java-Bytecode durchgeführt, sollte allerdings sichergestellt sein, dass die Klassendatei den Beschränkungen von Java Card entspricht. Dazu konvertiert man sie einfach in Java-Card-Bytecode. Außerdem sollten möglichst früh Tests mit einer echten Java-Card-Smartcard durchgeführt werden, um ein Gespür für die Performance zu bekommen.
Weitere Informationen zu Java-Card:
Neueste Kommentare
Noch keine Kommentare zu Einfach und sicher: So lassen sich Smartcards programmieren
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.