Praktische Anwendung des Sun Java Card Development Kit Vortrag Oberseminar Java-Smartcards Michael Weiser 6.12.2002
. Einführung
Gliederung Java Card Development Kit [JCDK] Komponenten Verwendung Beispiel: G&D Sm@rtCafé 1.1 [SC] Wiederholung Besonderheiten der Ansteuerung Praxis: Java Card Development Kit und G&D Sm@rtCafé 1.1 unter Linux und Windows
mit CTAPI und OCF
. JCDK
Einführung Java Card Development Kit = Sammlung von Werkzeugen zum Entwickeln von Java Card applets Komponenten: Konvertieren von class- in converted applet (CAP) und Java Card assembly (JCA)-Dateien (converter) Vorbereiten von applets zur Installation (scriptgen) Senden und Empfangen von APDUs (apdutool) Überprüfen von package-konsistenz und Binärkompatibilität (verify{cap,exp,rev}) Kartenemulation (jcwde, cref) Erzeugen von ASCII-Repräsentationen von CAP-Dateien (capdump)
Pro/Kontra Vor-/Nachteile je nach Betrachtungsweise: kommandozeilenbasiert kein Zuschnitt auf spezielle Hardware - immer gleiche Verwendung / Features evtl. nicht nutzbar Vorteile: Erweiter- und Automatisierbarkeit (Test, Serien) wird stetig weiterentwickelt weitestgehend plattformunabhängig, da Java Nachteile:
teilweise kryptische Bedienung nur für Windows und Solaris unterstützt
Installation betrachtet: Version 2.2 Voraussetzungen: J2SDK >= 1.3 OCF >= 1.2 (für RMI-Beispiel) Umgebungsvariablen: JC_HOME=<Installationspfad> PATH=$JC_HOME/bin:$PATH JAVA_HOME=<J2SDK-Installationspfad> CLASS_PATH=$JC_HOME/lib/api.jar
Workflow javac compiliert in normale class-dateien converter erzeugt JCA- oder CAP- aus class-dateien JCA mittels capgen in CAP konvertierbar EXP zur Abhängigkeitsprüfung CAP werden von scriptgen in APDU script konvertiert apdutool sendet diese an Java Card Runtime Environment (JCRE)
Beispiel package hw; import javacard.framework.*; public class hw extends Applet { protected hw() { register(); } public static void install(byte[] barray, short boffset, byte blength) { new hw(); } public void process(apdu apdu) { byte[] hw = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!'}; apdu.setoutgoing(); apdu.setoutgoinglength((short)hw.length); } } apdu.sendbyteslong(hw, (short)0, (short)hw.length);
javac Aufruf: javac <java source> Beispiel: # javac hw/hw.java api.jar muß in CLASSPATH sein
converter: CAP Aufruf: converter [-out [CAP] [JCA] [EXP]] -applet <applet AID> \ -exportpath <API export path> <class> <AID> <version> Beispiel: # converter -applet 0xF0:0x0:0x0:0x0:0x0:0x0:0x1 hw.hw \ \ -exportpath $JC_HOME/api_export_files \ \ hw 0xF0:0x0:0x0:0x0:0x0:0x00 1.0 Java Card 2.2 Class File Converter (version 1.3) Copyright 2002 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.
conversion completed with 0 errors and 0 warnings.
converter: AIDs AID = Application ID eindeutige Identifikation der Anwendung auf der Karte Vergabe durch registration authority 5-16 Bytes 5 Byte RID (Registered application provider IDentifier) 4 Bit Kategorie, 12 Bit Land, 24 Bit Organisation Kategorie: 0-9 = ISO/IEC 7812, A = international, D = national, F = unregistriert Beispiel: 0xD276xxxxxx = national registriert, Deutschland 11 Byte PIX (Proprietary Identifier extension)
converter: JCA Beispiel: # converter -out JCA \ \ -applet 0xF0:0x0:0x0:0x0:0x0:0x0:0x1 hw.hw \ \ -exportpath $JC_HOME/api_export_files \ \ hw 0xF0:0x0:0x0:0x0:0x0:0x00 1.0 Ausgabe:....method public process(ljavacard/framework/apdu;)v 7 {.stack 4;.locals 1;.descriptor Ljavacard/framework/APDU; 0.10; L0: bspush 12; newarray 11; dup; sconst_0; bspush 72; bastore; dup;
...
capgen Aufruf: capgen [-o <output file>] <jca> Beispiel: # capgen -o hw/javacard/hw.cap hw/javacard/hw.jca Java Card 2.2 CAP File Builder (version 0.55) Copyright 2002 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. default output ist a.jar
capdump Aufruf: capdump <cap> Beispiel: # capdump hw/javacard/hw.cap Copyright 2002 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. hw/javacard/header.cap : 01 00 10 de ca ff ed 01 02 04 00 01 06 f0 00 00 00 00 00 hw/javacard/directory.cap : 02 00 1f 00 10 00 1f 00 0b 00 0b 00 1e 00 0c 00 74 00 0a 00 0b 00 00 00 4e 00 00 00 00 00 00 01 01 00 hw/javacard/applet.cap : 03 00 0b 01 07 f0 00 00 00 00 00 01 00 0c
...
verifycap Aufruf: verifycap <package export files> <cap> Beispiel: # verifycap hw/javacard/hw.exp \ \ $JC_HOME/api_export_files/javacard/framework/javacard/framework.exp \ hw/javacard/hw.cap Java Card 2.2 Off-Card CAP File Verifier (version 2.21) Copyright 2002 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Verifying CAP file hw/javacard/hw.cap Error: No export file provided for package java/lang
Verification completed with 0 warnings and 1 error.
verifyexp Aufruf: verifycap <package export files> <cap> Beispiel: # verifyexp hw/javacard/hw.exp Java Card 2.2 Off-Card Export File Verifier (version 2.21) Copyright 2002 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Verifying export file hw/javacard/hw.exp Verification completed with 0 warnings and 0 errors.
scriptgen Aufruf: scriptgen [-o <output file>] <cap> Beispiel: # scriptgen -o hw/javacard/hw.scr hw/javacard/hw.cap Java Card 2.2 APDU Script File Builder (version 0.11) Copyright 2002 Sun Microsystems, Inc. All rights reserved. APDU script file for CAP file download generated. default output ist stdout: 0x80 0xB0 0x00 0x00 0x00 0x7F; // hw/javacard/header.cap 0x80 0xB2 0x01 0x00 0x00 0x7F;
0x80 0xB4 0x01 0x00 0x13 0x01 0x00 0x10 0xDE 0xCA \ 0xFF 0xED 0x01 0x02 0x04 0x00 0x01 0x06 0xF0 0x00 \ 0x00 0x00 0x00 0x00 0x7F;...
jcwde, cref
apdutool
. SmartC@fe
Wiederholung
. Praxis
Patch Linux! Einführung
. Zusammenfassung
Überblick
Fragen?
Referenzen Resourcen zu Java Card Development Kit, Sm@rtCafé und OCF Java Card Development Kit, G&D Sm@rtCafé und OCF [JCDK] Sun Microsystems, Inc.. Java Card(TM) Technology. Spezifikationen und Java Card Development Kit-Download. 30. Oktober 2002. http://java.sun.com/products/javacard/ (besucht 3.12.2002). [SC] Giesecke & Devrient. Sm@rtCafé - The Java Card. 2002. http://www.gdm.de/ger/products/03/index.php4?product_id=168 (besucht 4.12.2002). [OCF] OpenCard. Welcome to OpenCard. http://www.opencard.org/ (besucht 3.12.2002). [AID] Technical Specification Group Terminals (3G TS). Meeting #6: Numbering system for telecommunication IC card applications. 13.-15. Dezember 1999. http://www.3gpp.org/ftp/tsg_t/tsg_t/tsgt_06/docs/pdfs/tp-99230.pdf (besucht 4.12.2002).
JavaCards unter Linux Juha Yrjölä, Timo Teräs, Antti Tapaninen, and Olaf Kirch. OpenSC. Smart- Card library and Applications. http://www.opensc.org/ (besucht 3.12.2002). Matthias Brüstle. SCEZ - Smart Card Library. 15. September 2001. http://www.franken.de/crypt/scez.html (besucht 3.12.2002). Movement for the Use of SmartCards in a Linux Environment (M.U.S.C.L.E). LinuxNet.com - MUSCLE - Linux SmartCard Development. http://www.linuxnet.com/ (besucht 3.12.2002).