Programmieren von Java Smartcards WS 2005/06
| Dozent(in): | Prof. W. Reif, Holger Grandy, Matthias Güdemann |
| Termin: | Vorlesung: Fr, 12:30-14:00 |
| Gebäude/Raum: | Vorlesung: 1005 NWI, Übung: 1006 NWI |
| Ansprechpartner: | Matthias Güdemann, Holger Grandy |
Downloads:
Der Lehrstuhl Softwaretechnik und Programmiersprachen bietet im WS 2005/06 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.
Aktuell: Die Noten der Teilnehmer vom Wintersemester 2005/2006 sind im STUDIS System eingetragen.
Wichtig: Bis zum 11.02. muß jedes Team einen Termin für die Abnahme in der Woche vom 13.02. - 17.02. persönlich ausmachen.
Wert: 8 Leistungspunkte, Scheinerwerb: Erfolgreiche Teilnahme an den Übungen, Hausarbeit, Abschlußprüfung
Vorkenntnisse:
- Unbedingt erforderlich: Programmierkenntnisse in Java, Software-Engineering (Info II, Sopra, Softwaretechnik)
- Nicht erforderlich: Kenntnis kryptographischer Protokolle
- Vorlesung Freitags, 12:30 - 14:00 Uhr 1005 (NW1)
- Übungen: Montags, 8:30 - 10:00, 10:15 - 11:45, 14:15 - 15:45, 16:00 - 17:30 Uhr
- Jeder Teilnehmer muss an zwei von diesen Terminen Zeit haben.
Anmeldung STUDIS: Wie angekündigt, muss sich jeder im STUDIS anmelden. Der Zeitraum dafür ist vom 05.01. (00.01 Uhr) - 12.01. (23.59 Uhr). Spätere Anmeldungen werden nicht mehr berücksichtigt!
Anmeldung: Wie und ab wann die Anmeldung stattfindet, wird in der ersten Vorlesung bekanntgeben werden, die Anmeldung muß aber immer in Zweiergruppen erfolgen (update 17.10.).
Ansprechpartner: Matthias Güdemann Tel.: 0821/598-2176, Zimmer 2031, NW 1
Unterlagen
Die FAQ enthält einige Fragen und Antworten, die während des Praktikums öfter aufgetreten sind und wird ständig erweitert.
DokumentationDie 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.
- Leitfaden zur Programmierung und Spezifikation (latex-template)
- 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 (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.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
Wichtig:Die Projekte müssen jedes Mal ins CVS repository eingecheckt werden. Die Rechner werden anderweitig benutzt und die lokalen Projekte werden gelöscht! Dazu gehoeren insbesondere auch die Bibliotheken (applet-libs / gemplus-libs / swt-terminalinterface). Diese muessen in das Projektverzeichnis kopiert und im CVS abgelegt werden.
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 + Ü |
| Bereich: | Softwaretechnik und Programmiersprachen |
| Prüfung: | Mündliche Prüfung |
| Begleitende Lehrveranstaltung(en): | 07041 |
| Semester: | WS 2005/06 |
