Java Card 2.1.2 Programmierung von Smart Cards mit Hilfe von Java Übersicht 1. 2. 3. 4. Einführung Smart Cards Java Card Spezifikationen Java Card Development Kit Java Card in der Praxis und Fazit 1. Einführung Smart Cards • • • • Smart Cards Mikroprozessorkarten Vorteile gegenüber Magnetstreifenkarten Verbreitung der Smart Cards Smart Cards Enthält Chip zur Speicherung, Verarbeitung und Übertragung von Daten Abmessungen der Karte nach ISO 7810 festgelegt Chiparchitektur nach ISO 7816,2 definiert Eight Contact Points Power Reset Check Ground Optional Contact Input/ Output Optional Contacts Mikroprozessorkarten RAM 256- 512 bytes CPU 5 MHz ROM 12 - 30 K EEPROM 12 - 32 K Mikroprozessorkarten sind „richtige“ Computer Vorteile gegenüber Magnetstreifenkarten Weniger anfällig Viel mehr Speicherplatz Mehrere Applikationen auf einer Karte Nachträgliches Löschen und Installieren von Applikationen Kommunikation mit Kartenlesegerät Kryptographie Verbreitung der Smart Cards Weltweit 1.5 Milliarden Smart Cards verkauft (Stand 99) Unter anderem von Visa, American Express, Florida State University etc. 2. Java Card Spezifikationen • • • • • Herkömmliche Smart Cards vs. Java Smart Cards (2) Java Card API (2) Java Card Runtime Environment JCRE (2) APDU: das Verbindungsprotokoll zwischen Smart Card und Kartenlesegerät (3) Ein Beispielprogramm Smart Cards vs. Java Smart Cards(1/2) Architektur einer konventionellen Smart Card: Applikation Betriebssystem Prozessor Keine klare Trennung zwischen OS und Applikationen Viele proprietäre, untereinander nicht kompatible Betriebssysteme Applikation läuft nur auf einem Betriebssystem und gewissen Karten Entwicklung zeitaufwendig und teuer Smart Cards vs. Java Smart Cards(2/2) Applet Applet Applet Applet Applet Architektur einer Java Smart Card: Java Card API Java Card Virtual Machine Betriebssystem Prozessor Klare Trennung von Betriebssystem und Applikationen Applikationen sind kartenunabhängig Java Card API (1/2) Nur Teilmenge von Java unterstützt In Java Card nicht implementiert Dynamisches Laden von Klassen Security Manager Garbage Collection Threads Cloning char, double, float, long Mehrdimensionale Arrays ... Java Card API (2/2) API besteht aus Teilen von java.lang javacard.framework javacard.security, javacardx.crypto Java Card Runtime Environment JCRE (1/2) Lebensdauer der Java Card VM = Lebensdauer der Smart Card jedes Applet ist von javacard.framework.Applet abgeleitet JCRE interagiert mit dem Applet über folgende Methoden: install() select() process() deselect() Java Card Runtime Environment JCRE (2/2) Bei Änderung an Speicherresistenten Daten: atomares Prinzip Applet Isolation Das APDU Protokoll (1/3) Application Protocol Data Units Halbduplex Kommunikationsprotokoll zwischen Smart Card und CAD (Card Acceptance Device) nach ISO 7816,4 spezifiziert Smart Card ist passiver Kommunikationspartner Command APDU, Response APDU Das APDU Protokoll (2/3) Command APDU Command APDU Mandatory Header CLA INS P1 P2 Conditional Body Lc Datafield Le CLA: Identifikation einer Applikation INS: Auszuführende Instruktion P1,P2: Parameter Lc: Anzahl der Bytes im Datafield Datafield: kann Daten enthalten Le: Max. Anzahl Bytes im Datafield der Antwort Das APDU Protokoll (3/3) Response APDU Response APDU Conditional Body Datafield Mandatory Trailer SW1 SW2 Datafield: kann Daten enthalten SW1, SW2: Statusworte Bsp: Status 90 00 heisst: alles in Ordnung Beispielprogramm (1/2) import javacard.framework.*; public class Wallet extends Applet { .... private void getBalance(APDU apdu) { byte[] buffer = apdu.getBuffer(); short le = apdu.setOutgoing(); if ( le < 2 ) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH); apdu.setOutgoingLength((byte)2); buffer[0] = (byte)(balance >> 8); buffer[1] = (byte)(balance & 0xFF); apdu.sendBytes((short)0, (short)2); } Beispielprogramm (2/2) Wallet_CLA =0xB0, VERIFY = 0x20; CREDIT = 0x30; GET_BALANCE = 0x50; Applet sei mit PIN 12345 und Kontostand 0 initialisiert Typische Kommunikation: 0xB0 0x20 0x00 0x00 0x05 0x01 0x02 0x03 0x04 0x05 0x7F; 0x90 0x00; 0xB0 0x30 0x00 0x00 0x01 0x64 0x7F; 0x90 0x00; 0xB0 0x50 0x00 0x00 0x00 0x02; 0x00 0x64 0x90 0x00; 3. Java Card Development Kit Java Card API Klassen Converter: Testet ob Code von Java Card unterstützt wird Capgen: erzeugt .cap Dateien JCWDE (Java Card Workstation Development Environment): simuliert Java Card Umgebung APDU Tool: damit können dem JCWDE APDU‘s gesendet werden. Ein Applet schreiben myApplet.java javac capgen myApplet.cap myApplet.class converter myApplet.jca JCWDE>.... 4.Java Card in der Praxis und Fazit Verbreitung 100 Mio. Java Cards in Umlauf (2000) Visa, American Express,... Hauptvorteile von Java Card Kartenunabhängigkeit Einfachheit Fazit:Java auf dem Weg zum Standart in Sachen Smart Card Programmierung Quellen Java Card Hauptseite: www.java.sun.com/products/javacard How to write a Java Card Applet: www.javaworld.com/javaworld/jw-07-1999/jw-07-javacard_p.html www.javaworld.com/javaworld/jw-12-1997/jw-12-javadev_p.html Smart Card Hersteller: www.slb.com www.gemplus.com Exkurs: Open Card