Praktische Anwendung des Sun Java Card Development Kit

Werbung
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) .
Herunterladen