Herzlich willkommen zur integrierten Vorlesung und Übung Programmieren von Java-Smartcards im Wintersemester 2007/2008 Kurt Stenzel Matthias Güdemann Jonathan Schmitt
Kapitel 1: Einführung Worum geht es in der Vorlesung? Organisatorisches Java SmartCards, Kap. 1 (1/29)
Heute: Worum geht es in der Vorlesung? 1. Was sind Smartcards? 2. Beispiel: Kopierkarte (a) Aufgabe (b) Design (c) Programmierung 3. Kryptographische Protokolle 4. Sicherheitseigenschaften 5. Mit der Smartcard reden 6. Organisatorisches Java SmartCards, Kap. 1 (2/29)
Was ist eine Smartcard? ein kleiner Computer ein sicherer Datenspeicher ein ICC: integrated circuit card ein tamper-proof device eine black box/ein Ärgernis/ein Zwangsmittel Java SmartCards, Kap. 1 (3/29)
Wo kommen Smartcards vor? in einer Geldkarte in Handys in Zugangskontrollsystemen im PC (trusted computing platform) in Premiere-Decodern (digitales TV) im Autoschlüssel im Reisepass Java SmartCards, Kap. 1 (4/29)
Wo kommen Smartcards (noch) nicht vor? in einer Kreditkarte (meistens) in einer (Festnetz-)Telefonkarte im PDA: personal digital assistent in der Waschmaschine im Festnetztelefon Playstation, DVD-Player in der Krankenkassenkarte (aber demnächst) im Personalausweis (aber demnächst) Java SmartCards, Kap. 1 (5/29)
SmartCards 8/16 Bit CPU 32K ROM 16 64K EEPROM 0,5 4K RAM 5 Mhz clock 1024 Bit RSA/3-DES 9600 55800 Bit/sec C 1 C 2 C 3 C 5 C 6 C 7 1,25 1, 1 C 1 : Vcc = 5V C 2 : Reset C 3 : Clock C 5 : Ground C 6 : Vpp C 7 : I/O Java SmartCards, Kap. 1 (6/29)
Auftrag: Realisieren Sie eine Universitätskopierkarte Laden von Wertmarken an einem Automaten Abbuchen von Marken an den Kopierern Realisierung mit Java-Smartcards Vorteile: Kostenersparnis, Integration mit anderen Anwendungen möglich Java SmartCards, Kap. 1 (7/29)
Beispiel: Kopierkarte = 1 2 = 3 My SmartCard + copy cardlet Java SmartCards, Kap. 1 (8/29)
Lösung Nr. 1 Laden T C load + n C T ok Abbuchen T C pay + n C T ok T: Terminal, C: Card, n: Anzahl Punkte, +: Konkatenation Jetzt programmieren??? Java SmartCards, Kap. 1 (9/29)
Lösung Nr. 2 AID: 3D 5F 61 60 00 00 00 20 FF AC 00 00 00 01 01 value: der auf der Karte gespeicherte Wert als int Load 00 04 00 00 02 data data: Anzahl zu ladender Punkte als short Antwort: ISO7816.SW WRONG LENGTH (0x6700) falls # data 2 ISO7816.SW DATA INVALID (0x6984) falls data 0 ISO7816.SW DATA INVALID (0x6984) falls data + value > 50000 ISO7816.SW OK (0x9000) sonst, value += data Java SmartCards, Kap. 1 (10/29)
JavaCard Programmierung Im Prinzip wie Java, aber: Keine Strings, keine Integers Keine garbage collection komplett andere API total anderer Programmierstil Java SmartCards, Kap. 1 (11/29)
import javacard.framework.*; public class copycard extends Applet { final static byte IDENT = 0x02 ; final static byte LOAD = 0x04; final static byte PAY = 0x06; final static byte BALANCE = 0x08; short value = 0; Java SmartCards, Kap. 1 (12/29)
public boolean select() { return true; } public void process(apdu apdu) throws ISOException { } switch (apdu.getbuffer()[iso7816.offset_ins]) { case IDENT: returnident(apdu) ; return; case LOAD: load(apdu) ; return; case PAY: pay(apdu) ; return; case BALANCE: balance(apdu) ; return; case ISO7816.INS_SELECT: return; default: ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED); } Java SmartCards, Kap. 1 (13/29)
private void load(apdu apdu) throws ISOException { short len = apdu.setincomingandreceive(); if (len!= 2) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH); byte[] buffer = apdu.getbuffer(); short val = Util.getShort(buffer, ISO7816.OFFSET_CDATA); if (val <= 0 (short)(val + value) > (short)50000 ) ISOException.throwIt(ISO7816.SW_DATA_INVALID); value += val; } Java SmartCards, Kap. 1 (14/29)
Problem? Problem: Man kann selbst Punkte laden. Man kann ein gefälschtes Applet verwenden. Ziel: Sichere Anwendung Lösung: Kryptographische Protokolle Java SmartCards, Kap. 1 (15/29)
Needham-Schroeder Protokoll (1978) Message 1 A B: A, B, {N a, A} PK(B) Message 2 B A: B, A, {N a, N b } PK(A) Message 3 A B: A, B, {N b } PK(B) PK(A) Public Key von A; N a, N b Nonces; {.} K verschlüsseln mit K Denning 1981: Fehler, Burrows+ 1989: korrekt, Lowe 1995: Fehler Message 2 B A: B, A, {N a, N b, B} PK(A) Java SmartCards, Kap. 1 (16/29)
Man-in-the-Middle Angriff Message 1 A B: A, B, {N a, A} Pu(B) Message 2 B A: B, A, {N a, N b } Pu(A) Message 3 A B: A, B, {N b } Pu(B) A I B Message α.1 A I: A, I, {N a, A} Pu(I) Message β.1 I(A) B: A, B, {N a, A} Pu(B) Message β.2 B I(A): B, A, {N a, N b } Pu(A) Message α.2 I A: I, A, {N a, N b } Pu(A) Message α.3 A I: A, I, {N b } Pu(I) Message β.3 I(A) B: A, B, {N b } Pu(B) Java SmartCards, Kap. 1 (17/29)
Kopierkarte: Interessen Universität: 1. Wert der Kopien eingeworfenes Geld 2. Wertmarken nicht fälsch-, kopier- oder mehrfach ausgebbar 3. Infrastruktur möglichst billig Kunde: 1. Wert der Kopien eingeworfenes Geld 2. Bei Kartenverlust kein Punkteverlust 3. Karte unbenutzbar für Dieb 4. Anonymität Java SmartCards, Kap. 1 (18/29)
Risikoanalyse Angreifer (Motivation): Kostenlos kopieren (hoch) Billiger kopieren (hoch) Auf Kosten anderer kopieren (hoch) Anwendung unbrauchbar machen (mittel) Andere Benutzer schädigen (gering) Was, wenn doch...? (Schaden) Eine Karte gehackt (gering) Alle Karten gehackt (hoch) Andere geschädigt (mittel) Java SmartCards, Kap. 1 (19/29)
Kryptographie in JavaCard Wenige vordefinierte Operationen auf ByteArrays, z. B. Interface javacard.security.rsaprivatekey setexponent(byte[], short, short) Sets the private exponent value of the key. The data format is big endian and right aligned (the least significant bit is the least significant bit of last byte). setmodulus(byte[], short, short) Sets the modulus value of the key. Java SmartCards, Kap. 1 (20/29)
Kommunikation mit der Karte Anwendung OCF PC/SC Treiber Reader Karte Laden von Applets Hochsicherheitskritisch (geheime Schlüssel im Code) Global Platform Spezifikation sehr schwierig zu implementieren Erledigt durch Toolkit Sm@rtCafé Professional Toolkit 2.0 Java SmartCards, Kap. 1 (21/29)
Terminal-Programmierung Java 5 Graphische Oberfläche Fehlertolerant (gegen): Falsche Karte Kommunikationsfehler Herausziehen der Karte Benutzerfreundlich: Keine blockierte GUI Backend: Server mit Datenbank Java SmartCards, Kap. 1 (22/29)
Standards ISO 7816-4: Inter-industry commands for interchange Command APDU: CLA INS P1 P2 Lc 90 02 00 00 02 Daten 01 2C Le 8 Response APDU: Daten 01 2C SW1 90 00 SW2 Java SmartCards, Kap. 1 (23/29)
90 00 No Error SW NO ERROR, SW OK 67 00 Wrong length SW WRONG LENGTH 69 82 Security condition not satisfied SW PIN REQUIRED 69 84 Data invalid SW DATA INVALID 69 85 Conditions not satisfied SW CONDITIONS NOT... 6A 82 File not found SW FILE NOT FOUND 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 Java SmartCards, Kap. 1 (24/29)
Java Cryptographic Architecture packages java.security.*, javax.crypto.* implementierungs- und algorithmenunabhängig Generisches Framework für Provider Provider implementieren engines Standardisierte Kodierungen für Schlüssel Cipher cip = Cipher.getInstance("DESede/CBC/NoPadding",cryptProvider); SecretKeyFactory sessionkf = SecretKeyFactory.getInstance("DESede", cryptprovider); SecretKey the_key = sessionkf.generatesecret(new DESedeKeySpec(enc_key)); cip.init(cipher.encrypt_mode, the_key); byte[] res = cip.dofinal(to_encrypt); Java SmartCards, Kap. 1 (25/29)
Entwicklung von Java SmartCard Anwendungen JavaCard Programmierung Sicherheitseigenschaften Kryptographische Protokolle (und Verfahren) Umgang mit Java Cryptographic Architecture Standards und Spezifikationen: ISO, Global Platform, EMV,... Java SmartCards, Kap. 1 (26/29)
Vorlesung 1. Einführung 2. Chipkarten 3. Kommunikation mit der Karte 4. JavaCard, JavaCard API, Arithmetik in JavaCard 5. Kryptographie: Grundlagen, DES, Nonces, Hashes 6. Authentisierungsprotokolle 7. Kryptographie: RSA, Verfahren, Protokolle 8. Angriffe auf SmartCards 9. (Formale Modellierung) Java SmartCards, Kap. 1 (27/29)
Ablauf Betreutes Arbeiten am Rechner in 1006 (L1) Zusätzlich selbstständiges Arbeiten Software: Sm@rtCafé Toolkit, Eclipse, Windows XP Arbeiten in Zweiergruppen Vier Aufgaben: MasterMind, Unsigned, Loyalty, E-Ticket Jeweils Design/Spezifikation und Programmierung Meilensteine + Abnahme am Semesterende 8 Leistungspunkte (Bereich Softwaretechnik) Java SmartCards, Kap. 1 (28/29)
Anforderungen Gute Programmierkenntnisse in Java So viel Arbeit für so wenig LPs... Termine Vorlesung: Freitags 12:15 13:45 Uhr im HS I Übungen Mittwochs: 8:15 9:45, 10:00-11:30, (= 4 Termine, 2 pro Gruppe) 14:00 15:30, 15:45 17:15 Erste Übungen: nächsten Mittwoch (24.10.) Anmeldung Jetzt... Java SmartCards, Kap. 1 (29/29)