Programmieren von Java Smartcards WS 2007/08
| Dozent(in): | Dr. Kurt Stenzel, Matthias Güdemann, Jonathan Schmitt |
| Termin: | Vorlesung: Fr, 12:15-13:45 (erste Vorlesung am 19.10.) |
| Gebäude/Raum: | Vorlesung: HSI, Übung: 1006 L1 |
| Ansprechpartner: | Matthias Güdemann |
Wichtig:
-
Ameldung bei STUDIS: vom 3.01.2008 (00.01 Uhr) - 15.01.2008 (23.59 Uhr)
Ohne Anmeldung bei STUDIS können keine Leistungspunkte vergeben werden!
Der Lehrstuhl Softwaretechnik und Programmiersprachen bietet im WS 2007/08 die Veranstaltung "Programmieren von Java Smartcards" (integrierte V + Ü) an.
Smartcards (Chipkarten mit einem Prozessor) erhalten immer größere Verbreitung. Sie sind flexibler und sicherer als Karten mit Magnetstreifen und erobern sich einen riesigen Zukunftsmarkt von Anwendungen. Der neueste Trend geht in Richtung multi-applikativer Karten, die mehrere `Anwendungen' enthalten, und auf die dynamisch neue Anwendungen geladen werden können. Beispiele hierfür sind digitale Unterschrift, elektronische Geldbörse, intelligente Tickets, Loyalty Cards etc. Die Veranstaltung bietet einen Einstieg in die neueste Chipkartentechnologie. Für die Programmierung wird die Sprache JavaCard verwendet, die eine Teilmenge von Java ist. Da eine Chipkarte nur sehr beschränkte Ressourcen hat, ist das Einsparen von Speicherplatz oberstes Gebot. Neben der korrekten Programmierung ist das richtige Design der Kommunikationsprotokolle (zum Schutz vor Hackern, dem Verlust von Daten usw.) mindestens genauso wichtig.Die Veranstaltung ist eine integrierte Vorlesung und Übung. In dem Vorlesungsteil werden Kenntnisse in JavaCard, der Chipkartentechnologie, dem Design der Anwendungsprotokolle und in kryptographischen Methoden vermittelt. In dem praktischen Teil wird am Rechner (und Chipkartenleser) eine innovative Anwendung (elektronische Bahnfahrkarten, die es in dieser Form noch nicht gibt) erstellt. Dabei müssen die Protokolle spezifiziert und die Chipkarte sowie die Terminals mit GUI programmiert werden.Als Chipkarten werden Java SmartCards von Giesecke & Devrient eingesetzt, die 64 K EEPROM, 3DES und 1024 Bit RSA bieten.
Vorkenntnisse:
- Unbedingt erforderlich: Programmierkenntnisse in Java, Software-Engineering (Info II, Sopra, Softwaretechnik)
- Nicht erforderlich: Kenntnis kryptographischer Protokolle
Wert: 8 Leistungspunkte
Scheinerwerb: Erfolgreiche Teilnahme an den Übungen, Hausarbeit, Abschlußprüfung
Termine:- Vorlesung: Freitag, 12:15 - 13:45, HSI
- Übungen: 1006 MNF
Aufgaben:
Wichtig:
- Alle Teilnehmer müssen sich noch bis zum 26.10. im LectureReg für die Vorlesung anmelden
- Die Übungsstunden finden jeweils am Mittwoch statt (8.15 - 9.45 / 10.00 - 11.30 / 14.00 - 15.30 / 15.45 - 17.15)
- Bei der Anmeldung müssen pro Gruppe 2 der Übungsstunden ausgewählt werden. (11.10.2007)
Links:
- Oft auftretende Fragen und Fehler
- Leitfaden zur Programmierung und Spezifikation (latex-template)
- Java Card Applet Developer's Guide (pdf, 62 Seiten). Dieses Dokument sollte man unbedingt lesen. Es enthält in Kürze die Einschränkungen von JavaCard gegenüber Java. Ausserdem wird der Applet live cycle, der Umgang mit APDUs usw. beschrieben. Interessant sind die ersten drei Kapitel. (Das File system ist für uns uninteressant, die Kryptographie veraltet.)
- JavaCard 2.2 API (pdf). Die API für die Karte - leider nur als PDF.
- JavaCard 2.1 API (html). JavaCard 2.1 ist gegenüber 2.1.1 etwas veraltet, besonders bei der Kryptographie. Im Zweifelsfalle muss man also im PDF nachsehen.
- Programming Satan's Computer (pdf) von Ross Anderson und Roger Needham. Ein sehr hübscher einführender Artikel über die Fallstricke kryptographischer Protokolle. Sollte man unbedingt lesen.
- A Logic of Authentication (pdf) von Michael Burrows, Martin Abadi und Roger Needham. Analysiert diverse Authentisierungsprotokolle mit einer etwas gewöhnungsbedürftigen Logik.
- RSA Security - PKCS#1 (externer Link). Hier kann man Spezifikationen über RSA und anderes im Original nachlesen.
- Openplatform Card Specification 2.0.1 (pdf) Für alle, die genau wissen wollen, wie das Laden von Applets funktioniert.
- JavaCard 2.2 Runtime Environment Specification (pdf) mit weiteren Details zu Applets
- JavaCard 2.2 Virtual Machine Specification (pdf) - wer alles über Bytecode, CAP Dateien etc. wissen will
ISO Statusworte
Diese Liste enthält die JavaCard-Definitionen des ISO-Standard. Folgende Liste wird im javacard.framework.ISO7816 definiert:
| 90 00 | No Error | SW_NO_ERROR |
| 61 00 | Response bytes remaining | SW_BYTES_REMAINING_00 |
| 67 00 | Wrong length | SW_WRONG_LENGTH |
| 69 82 | Security condition not satisfied | SW_SECURITY_STATUS_NOT_SATISFIED |
| 69 83 | File invalid | SW_FILE_INVALID |
| 69 84 | Data invalid | SW_DATA_INVALID |
| 69 85 | Conditions of use not satisfied | SW_CONDITIONS_NOT_SATISFIED |
| 69 86 | Command not allowed | SW_COMMAND_NOT_ALLOWED |
| 69 99 | Applet selection failed | SW_APPLET_SELECT_FAILED |
| 6A 80 | Wrong data | SW_WRONG_DATA |
| 6A 81 | Function not supported | SW_FUNC_NOT_SUPPORTED |
| 6A 82 | File not found | SW_FILE_NOT_FOUND |
| 6A 83 | Record not found | SW_RECORD_NOT_FOUND |
| 6A 84 | Not enough memory space in the file | SW_FILE_FULL |
| 6A 86 | Incorrect parameters (P1,P2) | SW_INCORRECT_P1P2 |
| 6B 00 | Incorrect parameters (P1,P2) | SW_WRONG_P1P2 |
| 6C 00 | Correct Expected Length (Le) | SW_CORRECT_LENGTH_00 |
| 6D 00 | INS value not supported | SW_INS_NOT_SUPPORTED |
| 6E 00 | CLA value not supported | SW_CLA_NOT_SUPPORTED |
| 6F 00 | No precise diagnosis | SW_UNKNOWN |
Weitere Definitionen für APDUs in javacard.framework.ISO7816
| CLA_ISO7816 | 0 | Class-byte für ISO-konforme APDUs |
| INS_EXTERNAL_AUTHENTICATE | 0x82 | Instruction für das external_authenticate Kommando |
| INS_SELECT | 0xA4 | Instruction für das select Kommando |
| OFFSET_CLA | 0 | Index in den APDU-Buffer für das Class-Byte |
| OFFSET_INS | 1 | Index in den APDU-Buffer für das Instruction-Byte |
| OFFSET_P1 | 2 | Index in den APDU-Buffer für Parameter 1 |
| OFFSET_P2 | 3 | Index in den APDU-Buffer für Parameter 2 |
| OFFSET_LC | 4 | Index in den APDU-Buffer für Lc bzw. Le-Byte |
| OFFSET_CDATA | 5 | Index in den APDU-Buffer wo die eigentlichen Daten beginnen |
Spezielle Statusworte des GemXpresso Pro R3 Cardmanagers. Folgende (spezifische) Statusworte könnte der Cardmanager bzw. die Java virtuelle Maschine noch zurückliefern:
| 61 XX | Normal processing, XX number of bytes still available |
| 62 83 | Selected applet blocked |
| 63 00 | Cryptogram not verified |
| 63 10 | More data available |
| 65 81 | Memory failure |
| 67 00 | Incorrect length |
| 69 82 | Security status not satisfied |
| 69 85 | Command conditions not satified |
| 69 99 | Command failed and no more applets are selected |
| 6A 80 | Incorrect data: unknown criteria or incorrect AID length |
| 6A 81 | Function not supported |
| 6A 82 | Applet not found in the selected application |
| 6A 84 | Insufficient memory |
| 6A 86 | Incorrect P1, P2 |
| 6A 88 | No element matches the search criteria |
| 6B 00 | Incorrect P1 or P2 parameter |
| 6C XX | Only XX bytes of data are available |
| 6D 00 | Unknown instruction code |
| 6E 00 | Incorrect instruction class |
| 6F 00 | No specific diagnosis (Exception im Applet) |
| 6F 80 | Stack Overflow (?) |
| 90 00 | Command processed without error |
| 92 40 | Memory problem |
| 94 02 | Acess out of range |
| 94 84 | Algorithm not supported |
| 94 85 | Invalid key check value |
| 9F XX | XX bytes of data available |
Anmeldung: Aufgrund beschränkter Rechnerkapazitäten ist die Übung zulassungsbeschränkt. Die Bearbeitung der Aufgaben wird in Zweiergruppen stattfinden, daher muß die Anmeldung bereits in Zweiergruppen erfolgen. Die Studierenden sind für die Gruppenbildung selbst verantwortlich. Einzelanmeldungen bzw. Voranmeldungen werden nicht akzeptiert. Die Anmeldung findet schriftlich in der ersten Vorlesung am 19.10. statt.
Ansprechpartner: Matthias Güdemann, Tel.: 0821/598-2176, Zimmer 2031, L1
weitere Informationen zu der Lehrveranstaltung:
| empfohlenes Studiensemester der Lehrveranstaltung: | Hauptstudium |
| Fachrichtung Lehrveranstaltung: | Informatik |
| Nummer der Lehrveranstaltung: | 07051 |
| Dauer der Lehrveranstaltung: | 2 SWS |
| Typ der Lehrveranstaltung: | V - Vorlesung |
| Leistungspunkte: | 8 LP für WV + Ü |
| Bereich: | Softwaretechnik und Programmiersprachen |
| Prüfung: | Mündliche Prüfung |
| Begleitende Lehrveranstaltung(en): | 07052 |
| Semester: | WS 2007/08 |

