JavaCard (erste Schritte)
Erste Schritte: Installation einer Beispielanwendung
Hier erfolgt zunächst der erste Test der Funktionalität der SmartCard durch Installation eines Applets, das eine einfache Guthabenkarte implementiert, hier Simple Wallet[1].
Installiert und angesprochen kann die JavaCard mittels GlobalPlatformPro[2].
Installiert wird die Applikation durch:
java -jar gp.jar -install simplewallet.cap -default
Angesprochen wird die Karte durch APDU Kommandos. Vor jeder Operation wird das Simple Wallet Applet mit ihrer AID F000A0000E00
ausgewählt.
Das Guthaben kann beispielsweise mit dem Code B040000001[AMOUNT, 1 Bytes]
erhöht werden:
java -jar gp.jar -a "00A4040006F000A0000E0000" -a "B04000000105" -debug -verbose
GlobalPlatformPro v20.01.23-0-g5ad373b
Running on Linux 5.15.0-48-generic amd64, Java 17.0.4 by Private Build
- Detected readers from JNA2PCSC
[*] REINER SCT cyberJack RFID basis 00 00
SCardConnect("REINER SCT cyberJack RFID basis 00 00", T=*) -> T=1, 3B80800101
SCardBeginTransaction("REINER SCT cyberJack RFID basis 00 00")
Reader: REINER SCT cyberJack RFID basis 00 00
ATR: 3B80800101
More information about your card:
http://smartcard-atr.appspot.com/parse?ATR=3B80800101
A>> T=1 (4+0006) 00A40400 06 F000A0000E00 00
A<< (0000+2) (33ms) 9000
A>> T=1 (4+0001) B0400000 01 05
A<< (0000+2) (25ms) 9000
A>> T=1 (4+0000) 00A40400 00
A<< (0018+2) (19ms) 6F108408A000000151000000A5049F6501FF 9000
[TRACE] GPSession - [6F]
[TRACE] GPSession - [84] A000000151000000
[TRACE] GPSession - [A5]
[TRACE] GPSession - [9F65] FF
[DEBUG] GPSession - Auto-detected ISD: A000000151000000
SCardEndTransaction("REINER SCT cyberJack RFID basis 00 00")
SCardDisconnect("REINER SCT cyberJack RFID basis 00 00", true) tx:23/rx:24
Und dann mit dem Code B050000002
ausgelesen werden:
java -jar gp.jar -a "00A4040006F000A0000E0000" -a "B050000002" -debug -verbose
GlobalPlatformPro v20.01.23-0-g5ad373b
Running on Linux 5.15.0-48-generic amd64, Java 17.0.4 by Private Build
- Detected readers from JNA2PCSC
[*] REINER SCT cyberJack RFID basis 00 00
SCardConnect("REINER SCT cyberJack RFID basis 00 00", T=*) -> T=1, 3B80800101
SCardBeginTransaction("REINER SCT cyberJack RFID basis 00 00")
Reader: REINER SCT cyberJack RFID basis 00 00
ATR: 3B80800101
More information about your card:
http://smartcard-atr.appspot.com/parse?ATR=3B80800101
A>> T=1 (4+0006) 00A40400 06 F000A0000E00 00
A<< (0000+2) (28ms) 9000
A>> T=1 (4+0000) B0500000 02
A<< (0002+2) (15ms) 0005 9000
A>> T=1 (4+0000) 00A40400 00
A<< (0018+2) (23ms) 6F108408A000000151000000A5049F6501FF 9000
[TRACE] GPSession - [6F]
[TRACE] GPSession - [84] A000000151000000
[TRACE] GPSession - [A5]
[TRACE] GPSession - [9F65] FF
[DEBUG] GPSession - Auto-detected ISD: A000000151000000
SCardEndTransaction("REINER SCT cyberJack RFID basis 00 00")
SCardDisconnect("REINER SCT cyberJack RFID basis 00 00", true) tx:22/rx:26
Alternativ kann das Guthaben auch mit B030000001[AMOUNT, 1 Bytes]
reduziert werden. Die Antwort 0x9000
steht hier für "Erfolgreich".