Programmieren von Java Smartcards SS 2005
| Dozent(in): | Prof. W. Reif, Kurt Stenzel, Holger Grandy |
| Termin: | Vorlesung: Do, 12:30-14:00, Übung: Di, 14:15-17:30 u. Mi, 14:15-17:30 |
| Gebäude/Raum: | Vorlesung: 1005 NWI, Übung: 1006 NWI |
| Ansprechpartner: | Kurt Stenzel, Holger Grandy |
Downloads:
Der Lehrstuhl Softwaretechnik und Programmiersprachen bietet im SS 2005 die Veranstaltung "Programmieren von Java Smartcards" (integrierte V + Ü) an.
Inhalt:
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 Gemplus eingesetzt, die 64 K EEPROM, 3DES und 1024 Bit RSA bieten. Es wird voraussichtlich drei Aufgaben geben: Programmieren eines einfachen Spiels (Mastermind), einer aufladbaren Kopierkarte und einer elektronischen Bahnfahrkarte.
Wert: 8 Leistungspunkte, Scheinerwerb: Erfolgreiche Teilnahme an den Übungen, Abschlußprüfung
Hinweis zur Abgabe und Aufgabe4:
- Bitte beachten Sie, dass die Aufgabe 4 gekürzt wurde: Die Abgabe von Testfällen (als Testscripte mit dem Prototester) ist nicht mehr notwendig.
- Aufgrund einiger Nachfragen nochwals hier der Hinweis: Der Abgabetermin für alle Aufgaben ist der 15.7.2005, 23:59 Uhr, sh. auch die jeweiligen Abschitte "Abgabe" in den Aufgabenbeschreibungen. Dieser Termin ist fix. Abgaben zu einem späteren Zeitpunkt werden nicht mehr akzeptiert.
- Bitte kommt in den kommenden Tagen auf uns zu, um einen Termin für die Abnahme zu vereinbaren. (Wenn möglich, bitte einen Termin in der Woche vom 25.7. bis 29.7. wählen)
- Noch ein Hinweis: Es kommt jedes Jahr wieder vor, dass manche EMail-Provider größere Mails nicht akzeptieren und deswegen Abgaben nicht ankommen. Bitte achtet darauf, mehrere kleinere Zip-Files zu erstellen und diese dann in mehreren EMails zu schicken, wenn Euer Provider solche Probleme hat.
- Und last but not least: Die Abnahme findet auf der echten Karte statt, nicht im Simulator. Bitte testet Eure Applets nochmals vorher mit der echten Karte. Falls Ihr für Aufgabe 4 zum Test für "Ticket übertragen" temporär noch eine zweite Karte haben möchtet, dann meldet Euch einfach bei uns.
Vorkenntnisse:
- Unbedingt erforderlich: Programmierkenntnisse in Java (Info II und Sopra)
- Nicht erforderlich: Kenntnis kryptographischer Protokolle
- Vorlesung Donnerstags, 12:30 - 14:00 Uhr 1005 (NW1)
- Übungen (1): Dienstags 14:15 - 15:45 Uhr und 16:00 - 17:30 Uhr, Raum 1006 (NW1)
- Übungen (2): Mittwoch 14:15 - 15:45 Uhr und 16:00 - 17:30 Uhr, Raum 1006 (NW1)
-
Übungen Donnerstags:
- 09.6.: Gruppe 1
- 16.6.: Gruppe 1
- 23.6.: Gruppe 2
- 30.6.: Gruppe 1
- 07.7.: Gruppe 2
- 14.7.: Gruppe 1
Ansprechpartner:Kurt Stenzel und Holger Grandy, Tel.: 0821/598-2178, Zimmer 2032, NW 1
Aufgaben
Bitte beachten Sie ab Aufgabe 3 den Leitfaden zur Erstellung von Dokumentation und Programmen!
Falls Sie Ihre Protokollspezifikationen mit LaTex erstellen wollen, können Sie hier ein Template herunterladen.
Vorlesungsfolien
Tipps und FAQ
Hier finden Sie Tipps und Anleitungen zum Javacard Praktikum.Das Testprogramm TestDESede.java aus der Vorlesung.
Gruppeneinteilung
| Dienstag | Mittwoch | |
| 1. | Anja Wojciechowski, Fredrik Larsen | Zlatina Georgieva, Antonia Immerz |
| 2. | Rolf Kiefhaber, Markus Helbig | Markus Bauer, Qirong Wu |
| 3. | Andreas Hahn, Michael Stengel | Sebastian Kern, Miriam Burger |
| 4. | Stefan Patsch, Julia Peterwitz | Martin Roser, Marco Jilg |
| 5. | Stefan Schnitzler, Florian Müller | Carde-Michaela Hackbarth, Stefan Romberg |
| 6. | Markus Sinsel, Jonas Gronde | Markus Bischof, Richard Kircheis |
| 7. | Ralf Jahr, Peter Sommer | Daniel Lercher, Martin Straub |
| 8. | Yanan Zhong, Baocheng Wang | Florian Mücke, Adalbert Ochotta |
| 9. | Aboua Sodonougbo,Roland Glück | Nicolas Gümbel, Ferry Hielscher |
| 10. | Susanne Tober, Matthias Kus | Alexander Holzmann, Stefan Brenner |
| 11. | Stefan Wastl, Christian Holder | Florian Ott, Michael Graf |
| 12. | Andreas Tremmel, Carsten Angeli | Georg Berky, Martin Dobmeier |
| 13. | Irakli Guliashvili, Natalia Kourova | Martin Groth, Markus Henze |
| 14. | Shi Min, Peng Xiaohai | Stephan Schaller, Thomas Weber |
| 15. | Hu Jianyong, Pham Trung Thanh |
Unterlagen
Die folgende Doku wird hier zur Verfügung gestellt, damit der Zugriff während des Semesters immer gewährleistet ist. Es gelten die entsprechenden Copyrights der Autoren/Firmen.
- GettingStarted - GemXpresso Tutorial (pdf).
- UserGuide für das GemXpresso RAD III toolkit (pdf).
- 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.1.1 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 (PS) 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 (PS) 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' Für alle, die genau wissen wollen, wie das Laden von Applets funktioniert.
- JavaCard 2.1.1 Runtime Environment Specification (PDF) mit weiteren Details zu Applets
- JavaCard 2.1.1 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 |
weitere Informationen zu der Lehrveranstaltung:
| empfohlenes Studiensemester der Lehrveranstaltung: | Hauptstudium |
| Fachrichtung Lehrveranstaltung: | Informatik |
| Nummer der Lehrveranstaltung: | 07040 |
| Dauer der Lehrveranstaltung: | 2 SWS |
| Typ der Lehrveranstaltung: | V - Vorlesung |
| Leistungspunkte: | 8 LP für WV + Ü |
| Prüfung: | Sonstige |
| Semester: | WS 2006/07 |
