Lösung zu Praktikum 1 -Programmierung eines Java Card Applets-



Ähnliche Dokumente
Programmierung von Smart Cards mit Hilfe von Java

Applet Firewall und Freigabe der Objekte

Praktische Anwendung des Sun Java Card Development Kit

Kapitel 3: Kommunikation mit der Karte

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Einführung in die Programmierung

Programmierkurs Java

Objektorientierte Programmierung

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Herzlich willkommen. Programmieren von Java-Smartcards

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Dokumentation des Projektes Tic Tac Toe

Tagesprogramm

RID = Registered application provider id. PIX = Proprietary application identifier extension

Objektorientierte Programmierung. Kapitel 12: Interfaces

public class SternchenRechteckGefuellt {

Programmieren in Java

JDBC. Allgemeines ODBC. java.sql. Beispiele

Computeranwendung und Programmierung (CuP)

Java Projekt: Tic Tac Toe + GUI

Modellierung und Programmierung 1

Java: Vererbung. Teil 3: super()

Einführung in die Programmierung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Studentische Lösung zum Übungsblatt Nr. 7

Übung Programmierung WS 2007/08 - Blatt 5

Programmieren in Java

Einführung in Javadoc

Klassendefinitionen verstehen

Übungen zu Softwaretechnik

Java Kurs für Anfänger Einheit 5 Methoden

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Musterlösungen zur Klausur Informatik 3

Java Einführung Abstrakte Klassen und Interfaces

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Propädeutikum zur Programmierung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

VS Praktikum 03 Konzept

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Arrays Fortgeschrittene Verwendung

5. Tutorium zu Programmieren

Softwaretechnologie - Wintersemester 2012/ Dr. Günter Kniesel

Bedienungsanleitung Elektronischer Zertifikatsaustausch

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

ITG RKSVNet - Webservice Signierung von Belegen via Internet

Client-Server-Beziehungen

Typumwandlungen bei Referenztypen

1 Polymorphie (Vielgestaltigkeit)

Graphic Coding. Klausur. 9. Februar Kurs A

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

3 Objektorientierte Konzepte in Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Selbststudium OOP4 Auftrag

Einführung in die Programmierung für Wirtschaftsinformatik

Integrierte und automatisierte GUI-Tests in Java

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Laborübung - Task Manager (Verwalten von Prozessen) in Windows XP

5.5.8 Öffentliche und private Eigenschaften

Laborübung - Task-Manager (Verwalten von Prozessen) in Windows 7

Objektorientierte Programmierung

Anleitung Grundsetup C3 Mail & SMS Gateway V

Java Einführung Operatoren Kapitel 2 und 3

Benutzeroberflächen. Java Teil 4

Grundkonstrukte der Objektorientierung in Java, C# und C++

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Java Einführung Collections

Themen. Web Service - Clients. Kommunikation zw. Web Services

17 Ein Beispiel aus der realen Welt: Google Wallet

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Kryptographische Anonymisierung bei Verkehrsflussanalysen

WPF Steuerelemente Listbox, ComboBox, ListView,

Delegatesund Ereignisse

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

GEOPROCESSING UND MODELBUILDER

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Laborübung - Task Manager (Verwalten von Prozessen) in Windows Vista

DataTables LDAP Service usage Guide

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

Programmers Manual Geodaten Ver. 2.0

Java-Schulung Grundlagen

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

S.W.I.F.T. Befüllungsregeln für MT 103 und MT 202

Einführung in die Programmierung Blockkurs Java

Java Einführung Packages

5.4 Klassen und Objekte

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Transkript:

Lösung zu Praktikum 1 -Programmierung eines Java Card Applets- Björn Wontora, Holger Plett, Christian Linke, Karsten Reineck, Sven Siek, Andreas Kupfer

Phasen beim Cardlet Entwurf 1. Funktionen des Applets definieren 2. Applet IDs (AID) an Cardlet und Package zuweisen 3. Klassenstruktur des Cardlet Programms entwerfen 4. Interface zwischen Cardlet und Terminal Programm entwerfen

Funktionen des Cardlets Speicherung von elektronischem Geld Aufladen und Abbuchen von Beträgen Max. Betrag: 30000 Abfragen des Kontostandes Sicherheitsmechanismus zur Authentifizierung PIN Abfrage Begrenzung der Logon-Versuche

Zuweisen der AIDs AID identifiziert ein Cardlet eindeutig Standardisiert nach ISO 7816 Application identifier (AID) National registered application provider (RID) 5 bytes Proprietary application identifier extension (PIX) 0 to 11 bytes RID wird von ISO vergeben PIX wird vom Hersteller vergeben Quelle: How to write a Java Card Applet

Select APDU SELECT APDU command Command APDU CLA INS P1 P2 Lc Data field Le 0x0 0xA4 0x04 0x0 0x08 0xF2, 0x34, 0x12, 0x34, 0x56, 0x10, 0x0, 0x1 N/A Command-Header Select APDU Data Field enthält AID des Cardlets Response APDU Optional data No data Status word 0x9000 0x6999 Meaning of status word Successful processing Applet selection failed: the applet could not be found or selected

Verify APDU VERIFY APDU command Command APDU CLA INS P1 P2 Lc Data field Le 0xB0 0x20 0x0 0x0 Length of the PIN data PIN data N/A Header Verify APDU Data Field enthält die PIN Response APDU Optional data N/A Status word 0x9000 0x6300 Meaning of status word Successful processing Verification failed

Aufbuchen APDU (Credit APDU) CREDIT APDU command Command APDU CLA INS P1 P2 Lc Data field Le 0xB0 0x30 0x0 0x0 1 Credit amount N/A Header Credit APDU Data Field Einzuzahlender Betrag Response APDU Optional data N/A Status word 0x9000 0x6301 0x6A83 Meaning of status word Successful processing PIN verification required Invalid credit amount 0x6A84 Exceed the maximum amount

Kontostand APDU GET BALANCE APDU command Command APDU CLA INS P1 P2 Lc Data field Le 0xB0 0x50 0x0 0x0 N/A N/A 2 Response APDU Optional data Status word Meaning of status word Balance value 0x9000 Successful processing

Quellcode schreiben Beginn der Class Importieren des Frameworks Jedes Applet ist abgeleitet von der Superklasse javacard.framework.applet import javacard.framework.*; import javacardx.framework.*; public class Wallet extends Applet {

Anpassung an APDU-Format Festlegen der Command-Struktur (Code fuer das CLA Byte im APDU Header) final static byte Wallet_CLA =(byte)0xb0; Deklarieren der Instructions (Codes fuer INS Byte im APDU Header) final static byte VERIFY = (byte) 0x20; final static byte CREDIT = (byte) 0x30; final static byte DEBIT = (byte) 0x40; final static byte GET_BALANCE = (byte) 0x50;

Instanzieren des Applets im JCRE Constructor für das Applet private Wallet (byte[] barray, short boffset, byte blength) { pin = new OwnerPIN(0x03, 0x08); value pin.update(barray, boffset, blength); register(); } Install Methode wird von JCRE aufgerufen, um eine Instanz eines Applets zu erzeugen public static void install(byte[] barray, short boffset, byte blength) { new Wallet(bArray, boffset, blength); }

Select Methode Select Methode wird von JCRE aufgerufen, um anzuzeigen, dass das Applet selektiert wurde public boolean select() { if ( pin.gettriesremaining() == 0 ) return false; return true; } Liefert TRUE, wenn das Applet erfolgreich ausgewählt wurde

Behandlung einer APDU APDU Select? Ja Wählt Applet JCRE Nein Process CLA Select? Ja Ende Applet Nein Switch Case (INS) Ende

Process Methode Eingehende APDUs werden von JCRE an die Process Methode übergeben Aufgabe von Switch Statement: Ausführen der Funktion, die durch die APDU aufgerufen wird public void process(apdu apdu) { if ((buffer[iso7816.offset_cla] == 0) && (buffer[iso7816.offset_ins] == (byte)(0xa4))) return; switch (buffer[iso7816.offset_ins]) { case GET_BALANCE: getbalance(apdu); return; case DEBIT: debit(apdu); return; case CREDIT: credit(apdu); return; case VERIFY: verify(apdu); return; } }

Bsp. Get_Balance Methode private void getbalance(apdu apdu) { byte[] buffer = apdu.getbuffer(); Teilt mit, dass Response APDU Daten Feld beinhaltet. short le = apdu.setoutgoing(); Setzt die Größe des Daten Feldes für die Response APDU apdu.setoutgoinglength((byte)2); Schreibt den Aktuellen Kontostand in den APDU Buffer buffer[0] = (byte)(balance >> 8); buffer[1] = (byte)(balance & 0xFF); Sendet den Kontostand an den Kartenleser apdu.sendbytes((short)0, (short)2); }

Fragen 1. Geben sie die 4 Phasen beim Cardlet Entwurf an! 2. Wofür wird die Select-Methode verwendet? 3. Geben sie die Bedeutung der Process Methode?

Literatur Chen, Z.: How to write a Java Card Applet: A developer s guide http://www.javaworld.com/javaworld/jw-07-1999/jw-07-javacard.html