Gruppe „Fahrtenbuch“ Applet
Projekt-Abschlußbericht
Datum: 04.Juli 2002
Fachhochschule München, Projektstudium Chipkarten SS 2002
Organisation: Teilnehmer
•
•
•
•
Andrea Herold (Gruppenleitung)
Beatrice Krell
Annette Holzer
Jeannette Schulz
Fachhochschule München, Projektstudium Chipkarten SS 2002
Organisation: Zeitlicher Ablauf
16.05.2002
- Einteilung der Gruppen
- Besprechung zu den Inhalten des Applets
23.05.2002
- Erstellung der APDU-Spezifikation sowie des Zustanddiagramms
30.05.2002
- Entwicklung Fahrtenbuch
10.06.2002
- Testen des Applets im Giessecke & Derivient [email protected]é
- Ergänzung der Methode „select()“ nach Absprache mit Frau Sandow
13.06.2002
- Testen des Applets im Giessecke & Derivient [email protected]é
- Veränderung der Spezifikation und des Sourcecodes nach Absprache
mit den anderen Gruppen (z. B.: Änderung der zugriffsberechtigten User)
20.06.2002
Zeit
- Minimierung des Codes zur Reduzierung der Speicherplatzbelegung
- Dokumentation des Sourcecodes
- Ausarbeitung der Präsentation
Fachhochschule München, Projektstudium Chipkarten SS 2002
UML-Klassendiagramm
Package: org.fhm.javacard.car
Shareable Interface
JavaCardApplet
DrivingBookApplet
LoginStatusInterface
+sendLoginStatus() : byte
JavaCardAppletDeclarations
• actElement : byte = 0;
• readElement : byte = 0;
• loginStatus : byte = -1;
• carStatus : byte = NOT_INIT;
• driverID : byte[] = new byte [DRIVER_ID_ LENGTH * AMOUNT_RECORDS];
• startTime : byte[] = new byte [START_TIME_LENGTH * AMOUNT_RECORDS];
• endTime : byte[] = new byte [END_TIME_LENGTH * AMOUNT_RECORDS];
• initKM : byte[] = new byte [INIT_KM_LENGTH * AMOUNT_RECORDS];
• initPLZ : byte[] = new byte [INIT_PLZ_LENGTH * AMOUNT_RECORDS];
• kmStand : byte[] = new byte [KM_STAND_LENGTH * AMOUNT_RECORDS];
• plz : byte[] = new byte [PLZ_LENGTH * AMOUNT_RECORDS];
• shareable_AID_bytes : byte[] = { (byte) ‘P‘, (byte) ‘i‘, ... , (byte) ‘t‘ }
DrivingBookDeclarations
1) Instruktionen u. Klassenvariable
2) Längen der Variablen
3) Status des Applets
4) StatusWords
+DrivingBookApplet ()
+deselect ()
+install (buffer : byte[], offset : short, length : byte)
+process (apdu : APDU)
-receive (apdu : APDU)
+select ()
Fachhochschule München, Projektstudium Chipkarten SS 2002
Beschreibung des DrivingBookApplet
• Methode install
Aufruf des Konstruktors
• Methode select
Mit dieser Methode wird das Applet selektiert und Variablen des Applets vorinitalisiert.
Das DrivingBookApplet übernimmt die Rolle des Clients in Zusammenarbeit mit
dem PinApplet (Server). Über das ShareableInterface holt sich das DrivingBookApplet
den Loginstatus des Benutzers, der sich sich über das PinApplet authentifiziert hat.
Erst jetzt ist die Funktionalität des DrivingBookApplets nutzbar (der Aufruf der process
wird erfolgreich sein).
• Methode receive
Einlesen der Daten, die an die Karte gesendet werden und Überprüfung der Datenlänge.
Fachhochschule München, Projektstudium Chipkarten SS 2002
Beschreibung des DrivingBookApplet
• Methode process
INIT_CAR:
Der aktuelle Kilometerstand sowie die PLZ des Abfahrtortes
werden auf die Karte geschrieben (Admin.).
WRITE_START:
Die Abfahrtszeit und die FahrerID wird auf die Karte gespeichert.
WRITE_END:
Die PLZ des Ankunftortes, der aktuelle Kilometerstand und die
Ankunftszeit werden auf die Karte geschrieben.
GET_KM:
Auslesen des zuletzt gespeicherten Kilometerstandes.
READ_INIT_DATA: Auslesen der Initialisierungsdaten (Admin.).
READ_DATA:
Auslesen der gespeicherten Fahrten (Admin.).
DELETE_DATA:
Löschen der gesamten auf der Karte gespeicherten Datensätze
Admin.).
• Methode deselect
Der LoginStatus wird wieder auf –1 gesetzt, d.h. das Applet muß erst wieder neu
selektiert werden, um seine Funktionalität nutzen zu können.
Fachhochschule München, Projektstudium Chipkarten SS 2002
UML-Zustandsdiagramm
Startzustand
NOT_INIT
INITIALIZED
WRITE_START_STATUS
READ_INIT
WRITE_END_STATUS
READ_STATUS
DELETE_STATUS
Fachhochschule München, Projektstudium Chipkarten SS 2002
Externe Kommunikation: APDU
Command APDU
CLA
INS
0xCA
0x20
0xCA
Response APDU
P1
P2
Lc
Datafield
Le
InitCar
0
0
8
Car_init
(ohne Anzahl_Trips)
0
0x21
ReadData
0
0
0
19
0xCA
0x22
DeleteData
0
0
0
0
0xCA
0x23
ReadInitData
0
0
0
9
Car_init
0xCA
0x24
GetKM
0
0
0
4
KM
0xCA
0x25
WriteStart
0
0
5
Trip_start
0
0xCA
0x26
WriteEnd
0
0
13
Trip_end
0
Fachhochschule München, Projektstudium Chipkarten SS 2002
Datafield
Trip
SW1 + SW2
Response
Datensatzstrukturen
Trip
Car_init
KMStand
4
AbfahrtPLZ
4
AnzahlTrips
FahrerID
1
Abfahrtszeitstempel
5
AnkunftsPLZ
4
KMStand
4
KM
Ankunftszeitstempel 5
1
KMStand
19
9
4
Trip_End
AnkunftsPLZ
4
KMStand
4
Ankunftszeitstempel 5
13
Fachhochschule München, Projektstudium Chipkarten SS 2002
Trip_Start
Abfahrtszeitstempel
4
5
5
Anhang: StatusWords
StatusWords, die die Response APDU zurückschickt:
SW_CAR_ALREADY_INITIALIZED: STS = (short) 0x6400;
SW_EOF:
STS = (short) 0x6401;
SW_FEW_TRIPS_LEFT:
STS = (short) 0x6402;
SW_FILE_EMPTY:
STS = (short) 0x6403;
SW_PIN_APPLET_NOT_EXITS:
STS = (short) 0x6404;
SW_FAILED_TO_OBTAIN_SIO:
STS = (short) 0x6405;
SW_ACCESS_DENIED:
STS = (short) 0x6406;
SW_COMMAND_NOT_ALLOWED: STS = (short) 0x6986;
SW_FILE_FULL :
STS = (short) 0x6A84;
SW_INS_NOT_SUPPORTED :
STS = (short) 0x6D00;
SW_CLA_NOT_SUPPORTED :
STS = (short) 0x6E00;
SW_NO_ERROR :
STS = (short) 0x9000;
Fachhochschule München, Projektstudium Chipkarten SS 2002
Anhang: Commands
APDU
APDU Befehle (command):
INIT_CAR:
INS = (byte) 0x20;
READ_DATA:
INS = (byte) 0x21;
DELETE_DATA:
INS = (byte) 0x22;
READ_INIT_DATA: INS = (byte) 0x23;
GET_KM:
INS = (byte) 0x24;
WRITE_START:
INS = (byte) 0x25;
WRITE_END:
INS = (byte) 0x26;
Class byte:
BOOK_CLA
CLA = (byte) 0xCA;
Fachhochschule München, Projektstudium Chipkarten SS 2002
Anhang: Variablen
Längen der verschiedenen Daten
Status des Applets:
• AMOUNT_RECORDS : short = (short) 20;
• NOT_INIT : byte = (byte) 0;
• INIT_KM_LENGTH : short = (short) 4;
• INITIALIZED : byte = (byte) 1;
• INIT_PLZ_LENGTH : short = (short) 4;
• WRITE_START_STATUS : byte = (byte) 2;
• KM_STAND_LENGTH : short = (short) 4;
• WRITE_END_STATUS : byte = (byte) 3;
• DRIVER_ID_LENGTH : short = (short) 1;
• READ_INIT_STATUS : byte = (byte) 4;
• END_TIME_LENGTH : short = (short) 5;
• READ_STATUS : byte = (byte) 5;
• PLZ_LENGTH : short = (short) 4;
• DELETE_STATUS : byte = (byte) 6;
• START_TIME_LENGTH : short = (short) 5;
• TOTAL_LENGTH_DATA : short = (short) 20;
Status des Users:
• TOTAL_LENGTH_INIT : short = (short) 9;
• AMINISTRATOR : byte = (byte) 0;
Fachhochschule München, Projektstudium Chipkarten SS 2002
Vielen Dank für Eure Aufmerksamkeit!!!
Fachhochschule München, Projektstudium Chipkarten SS 2002

document