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 (verify{cap,exp,rev}) • Kartenemulation (jcwde, cref) • Erzeugen von ASCII-Repräsentationen von CAP-Dateien (capdump) und Binärkompatibilität 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 L0: Ljavacard/framework/APDU; bspush 12; newarray 11; dup; sconst_0; bspush 72; bastore; dup; 0.10; ... 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 Einführung • Patch Linux! . 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. http://www.gdm.de/ger/products/03/index.php4?product_id=168 (besucht 4.12.2002) . [OCF] OpenCard. Welcome (besucht 3.12.2002) . to OpenCard. 2002. http://www.opencard.org/ [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. SmartCard 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) .