- Suche

- Kontakt

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
Termine:
  • 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.

Dokumentation

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.

  • 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