Rechnerstrukturen Ausarbeitung zum Thema: Sicherheitsfeatures von Chipkarten am Beispiel der JavaCard Dozent: Prof. Dr. Risse Verfasser: Markus Müller Semester: I8ES Datum: 12.01.2000 Markus Müller Semester: I8ES RST-Projekt: Java Card Datum:14.02.2000 Inhaltsverzeichnis: Thema Seite 1. Typen von Karten 3 2. Aufbau der SmartCard 4 2.1. Kontakte 4/5 2.2. Technische Daten 5 3. Entstehung der Java Card 6 3.1. Eigenschaften von Java 6 3.2. Aufbau der Java Card 7 3.3. Programmierung einer Java Card 8 3.4. Ist Java für Chipkarten sinnvoll 3.5. Java und Sicherheit 9 4. Von Chipkarten eingesetzte kryptografische Techniken 10 4.1. Sicherheit bei Chipkarten durch Identifizierung 4.2. 9 und Authentisierung 11 Symmetrische Authentisierung am Beispiel des 13 DES-Algorithmus: 4.3. (dynamische einseitige) Symmetrische Authentisierung 4.4. Die Gegenseitige symmetrische Authentisierung (mutual authentication) 15 16 4.5. Asymmetrische Authentisierung 17 5. Sicherung der Datenübertragung (Secure Messaging) 19 6. Literatur 20 2 Markus Müller Semester: I8ES 1. RST-Projekt: Java Card Datum:14.02.2000 Typen von Karten • Prägekarten: Informationen hochgeprägt Auslesen optisch (ohne Hilfmittel) Sicherheit: Unterschrift auf der Karte, Hologramm Anwendung: Kreditkarte, Kundenkarte. Magnetstreifenkarten: Informationen auf Magnetstreifen Auslesen mittels Kartenleser (je nach Kartenleser ist Ändern der Informationen möglich). Sicherheit: PIN (Personal Identification Number), Fehlbedienungszähler (zählt Anzahl der fehlerhaften PIN-Eingaben, nach gewisser Anzahl wird die Karte gesperrt oder einbehalten) Unterschrift, Hologramm. Anwendung: EC-Karte, Kreditkarte, Ausweis • Chipkarten: Informationen in Halbleiterchip gespeichert Auslesen mittels Chipkartenterminal Sicherheit: PIN und Challenge-Response-Protokolle in Verbindung mit Kryptoverfahren. Anwendung: Telefonkarte, Ausweiskarte, Geldkarte. KV-Karte Speicherchipkarten: (einfacher Datenspeicher) Bestehend aus EEPROM oder ROM auf den direkt zugegriffen werden kann. Anwendung: Telefonkarten ,Krankenversicherungskarten (KV-Karte). Intelligente Speicherchipkarten: Datenspeicher mit Sicherheitslogik (z.B. PIN) EEPROM nur über festverdrahtete Sicherheitslogik zugänglich. Anwendung: Telefonkarte. Kontaktbehaftete Chipkarten: Verbindung zum Terminal durch vergoldete Kontaktflächen. Kontaktlose Chipkarten: Verbindung zum Terminal über Koppelelemente (kapazitiv, induktiv). für stark verschmutzte Umgebungen; größere Entfernungen zwischen Karte und Chipkartenterminal sind möglich. (Mit gößer ist gemeint, das eine am Körper befestigte Karte auch beim Durchlaufe einer Sicherheitsschleuse gelesen werden kann). Microprozessorkarten: Smart Cards Bestehend aus Prozessor, ROM, EPROM und RAM. Sicherungsfunktionen: Challenge-Response-Protokoll und Kryptoverfahren auf der Karte implementiert. Anwendungen: Multifunktionskarte z.B. JavaCard, Ausweiskarten, GSM-Karten (Mobilfunk). Superchipkarten: Prozessorchipkarten mit eingebautem Display, Folientastatur und Folienbatterie. Funktionen auch ohne Terminal möglich. Preis + Robustheit problematisch. Vielfältige Anwendungen. • Hybridkarten: Kombination aus Chip- und Magnetstreifenkarten. 3 Markus Müller Semester: I8ES RST-Projekt: Java Card Datum:14.02.2000 Chipkarten sind nach der ISO 7816 Teil 1 bis 6 genormt. 2. Aufbau der Smart Card NPU RAM CPU EEPROM I/O ROM Bild 1: Architektur einer Microprozessorkarte Aus Gründen der Sicherheit und Stabilität setzen sich Mikroprozessor und Speichermodule aus einem einzigen Chip zusammen. Dieser Chip besteht aus: RAM = ROM = EEPROM = I/O = CPU = NPU = 2.1. Arbeitsspeicher beinhaltet Basisbefehle des Betriebssystems, Transportprotokoll, Sicherheitsalgorithmen, Speicherort für Sicherheitsrelevante Daten wie PIN, Sicherheitsschlüssel Anwendungsprogramme. Schnittstelle für Datenübertragung; Eine von der CPU ansprechbare Adresse, die als I/O-Leitung auf das Kontaktfeld herausgeführt wird. (Datenübertragung mittels T = 0 / T=1 Protokoll (JavaCard)) alt :8 bit CISC Prozessoren (6805 Motorola oder 8051 Philips/Siemens) neu: 32 bit RISC Prozessoren (G&D) Numeric Processing Unit (Coprocessor) Erweiterung zur Abarbeitung von asymmetrischen Krypthoalgorithmen. Funktionalität: Exponential-/ und Modulo-Operationen mit Ganzzahlen. Kontakte: Bild 2 Kontaktbelegung Die Kontakte C4 und C8 sind zukünftige Anwendungen reserviert (zweite I/O à vollduplexe Datenübertragung). 4 Markus Müller Semester: I8ES RST-Projekt: Java Card Datum:14.02.2000 Der Kontakt C6 wird nicht mehr verwendet (ursprünglich Programmier-/Löschspannung für EEPROM; heute mittels Ladungspumpe) Der Datentransfer findet über den Kontakt C7 statt. 2.2. Technische Daten: (Siemens SLE 66CY160S) Allgemeine Versorgungsspannung (Vcc): Class A 5 Volt ± 10% Class B 3 Volt ± 10% Externer Takt: 3,5 oder 5 MHz; um den internen Takt zu erhöhen, werden Taktvervielfacher verwendet. Internet Takt: 1- 7,5 MHz Prozessor: Speicher: alt: 8 bit CISC Prozessor (8051 Derivat) neu : 32bit RISC Prozessor z.B. ARM 7M: (bis 20 MHz, 3 Volt) [32 Bit-Prozessoren ermöglichen eine schnelle Ausführungsgeschwindigkeit bei Java-Implemetationen.] ROM: EEPROM: RAM: 32 Kbyte 16 KByte 1980 Byte. 5 Markus Müller Semester: I8ES 3. RST-Projekt: Java Card Datum:14.02.2000 Entstehung der Java Card: 1997 traf sich das JCF (Java Card Forum) ,bestehend aus allen großen Chipkartenhersteller und der Firma SUN, zum ersten mal. Dieses JCF ist ein Standardisierungsgremium für Java auf Chipkarten. Aufgabe dieser Gruppe ist es, eine Untermenge von Java für Chipkarten festzulegen, den Rahmen für den Java Interpreter (JVM, Java Virtual Machine) zu spezifizieren und eine Schnittstelle (API) zwischen Chipkarten-Betriebssystem und Java festzulegen. 3.1. Eigenschaften von Java Java wurde mit dem Ziel entwickelt, eine hardwareunabhängige, sichere und moderne Sprache für den Einsatz im Mikrocontrollerbereich bereitzustellen. Java ist eine vollständig objektorientiert, stark typisierte Sprache, leicht zu erlernen (viele Gemeinsamkeiten mit C , C++) und robust. Im Gegensatz zu C++ verwendet Java keine Zeiger, die Grenzen von Feldern werden zur Laufzeit überwacht und es findet eine strikte Typprüfung statt. Weiterhin verwendet Java eine dynamische Speicherverwaltung mittels Garbage Collector zur Vermeidung von Speicherlecks. Auf diese Option wurde jedoch für die Java Version für Chipkarten aus Platzmangel verzichtet. Java ist eine sichere Sprache, was sich dadurch ausdrückt, daß bei Programmen während der Ausführung geprüft wird, welche Funktion sie ausüben wollen und von der Laufzeitumgebung dabei nach Bedarf gestoppt werden können. Diese Prüfung lässt sich durch die Java Virtual Machine (JVM) realisieren, die neben der Codeinterpretation auch Typprüfung und Objektzugriffe überwacht. Der Hauptgrund für den Einsatz von Java bei Chipkarten liegt eindeutig in der Portierbarkeit (hardwareunabhängig) der einmal erstellten Anwendungen und der damit einhergehenden Beseitigung der Probleme mit Kompatibilität und Testing. Der Nachteil von Java besteht in dem hohen Speicherbedarf >1MB. Aus diesem Grund scheint Java nicht für Chipkarten geeignet zu sein. Um Java dennoch zu verwenden, wurde eine Java Untermenge (Language subset) in der JavaCard Spezifikation (aktuell: JavaCard 2.1 API ) definiert. Programme geschrieben in Java werden von einem Compiler in den sogenannten Java Bytecode übersetzt. Dieser Bytecode ist sozusagen ein Programm, bestehend aus Maschinenbefehlen für einen virtuellen Java-Processor, der in der JVM (Java Virtual Machine) simuliert wird. Wird nun die JVM auf den Zielprozessor portiert, ist ab sofort der 6 Markus Müller Semester: I8ES RST-Projekt: Java Card Datum:14.02.2000 Java-Bytecode auf diesem Prozessor lauffähig. Kompilierte Java Programme werden in einer class-Datei abgespeichert. Ein oder mehrere class-Dateien ergeben ein Applet, das nach dem Laden von der VM ausgeführt wird. 3.2. Aufbau der JavaCard: Bild 3: Vergleich des Aufbaus von SmartCards mit JavaCards. Wie in Bild 4 verdeutlicht, baut sich die JavaCard wie folgt auf: - Hardware (Mikroprozessor) - Betriebssystem mit zeitkritischen Routinen wie Übertragungsprotokollen, Kryptoalgorithmen und hardwarenahen Funktionen (Speicherbedarf 6-8 kByte) - Java Interpreter oder Java Virtual Machine. (Speicherbedarf 6-8 kByte) Eingeschränkte VM: keine Garbage Collection, geringere class-Dateien Unterstützung, weniger Bytecode-Befehle. - Java API (Application Programming Interface). Schnittstelle, die nützliche Funktionen zur Verfügung stellt [z.B. Klassen zur Appletverwaltung, Datenaustausch mit dem Terminal, etc.].(Speicherbedarf 3-4 Kbyte) Neben der Standard API gibt es noch 3 weitere, so z.B. die javacardx.crypto mit kryptografischen Funktionen. - Java Applets 7 Markus Müller Semester: I8ES 3.3. RST-Projekt: Java Card Datum:14.02.2000 Programmierung einer Java Card: Entwicklungs System Class files Terminal Converter CAP file Export files Installation Tool JavaCard Virtual Machine Program Memory Installer Bild 4: Prozess der Entwicklung einer Java Card Software: Entwickeln eines Java Applets für Smart Cards: 1. Schreiben des Java Source Codes (Standard Software Entwicklungs-Tool) 2. Kompilieren des Source Codes zu class-Dateien – Erstellen eines Applets. 3. Testen des Applets (auf Workstation) mittels Emulations-Tools 4. Konvertieren des Applets der class-Dateien nach CAP (converted applet) mit JavaCard Konverter. CAP = Standard Dateityp für JavaCard Plattform. Der Konverter benutzt als Input class files und export files (beinhaltet Names- und Linkinformationen). Weiterhin wird vom Konverter (auch Offcard-VM genannt) die CAP-Datei digital signiert. Dies verhindert, daß durch ein manipuliertes Applet die Sicherheit der Oncard-VM umgangen wird. 5. Kopieren der CAP-Datei mittels Karten Terminal auf die JavaCard. Hier findet eine Überprüfung der digitalen Signatur statt. 6. Mittels Installationsprogramm (kann ein Java Programm sein und wird auf der VM der Karte ausgeführt) wird aus dem Inhalt der CAP-Datei ein Applet vorbereitet. 7. Virtual Machine führt das Applet aus. 8 Markus Müller Semester: I8ES 3.4. RST-Projekt: Java Card Datum:14.02.2000 Ist Java für Chipkarten sinnvoll ? Der Nachteil von Java ist die langsame Ausführungsgeschwindigkeit. Im Vergleich zur Programmiersprache C/C++ ist Java mit Programmausführung durch Interpreter (VM) bei einem 32-Bit Prozessor um 10-20 mal langsamer (Rankl/Effinger). Mittels geeigneten APIs oder auch Einsatz von Java-Prozesssoren, die den Java Bytecode direkt ausführen können, würden erhebliche Geschwindigkeitsvorteile erreicht. Dennoch spricht auch jetzt schon vieles für Java bei Chipkarten: - Java Bytecode ist sehr platzsparend und in etwa so kompakt wie Maschinencode. - Verlängerung der Lebensdauer einer Karte durch dynamisches Hinzufügen, Entfernen und Aktualisieren von Karten auch nach der Auslieferung - Einfacheres und schnelleres Programmieren mittels Java. Standardisierte API zur Entwicklung für JavaCards - Portierbarkeit von Programmen auf Java kompatible Karten. - Java ist objektorientiert è Code-Wiederverwendung. - Große Auswahl an Entwicklungswerkzeugen (Borland, IBM, Microsoft, Sun, Symantec) - Java ist plattformunabhängig: Java Anwendungen, die für eine Karte geschrieben wurden, können auf jeder anderen laufen, die den JavaCard API Standard verwendet. - Java bietet die sichere Koexistenz von mehreren Anwendungen auf einer Karte: bietet daher wahre Mehrzweckkarte. 3.5. Java und Sicherheit: - Java verwendet keine Pointer und benutzt eine strikte Zugriffskontrolle zu allen Methoden, kein Herumschnuppern innerhalb des Speichers möglich. - Sichere Koexistenz verschiedener Anwendungen auf derselben Karte durch Zugriffssteuerung (applet firewall). Eine gegenseitige Beeinflussung von Applets wird durch den Security Manager der Java VM und das Chipkarten Betriebssystem verhindert. Ausnahme: Objektfreigabe eines Applets zur Benutzung durch ein anderes Applet (z.B. PIN, welche einheitlich für alle Anwendungen einer Karte gilt.) 9 Markus Müller Semester: I8ES 4. RST-Projekt: Java Card Datum:14.02.2000 Von Chipkarten eingesetzte kryptografische Techniken: - - - Kryptoalgorithmen: Symmetrisch: DES (Data Encryption Standard), IDEA (International Data Encryption Algorithm) Asymmetrisch: RSA (Algortimus nach Rivest, Shamir und Adlemann), DSA (Digital Signatur Algorithm) Protokolle und Verfahren: Challenge-Response Diffie-Hellman (asymmetrisches Verfahren (RSA)) Fiat-Shamir Zero-Knowledge Blind-Signatures Verschiedenes: Zufallszahlen Blockverschlüsselungsmodi: ECB CBC Hashfunktionen MD5 RIPE-MD SHA-1 DES-basierend Schlüsselgenerierung Die hier aufgelisteten Techniken sollen einen Überblick verschaffen. Im folgenden werde ich lediglich auf einzelne eingehen. Im Zusammenhang mit Kryptoalgoritmen werde ich verschiedene Termini verwenden: - Klartext = unverschlüsselte Daten - Schlüsseltext = verschlüsselte Daten - Schlüssel = zur Verschlüsselung eines Klartextes bzw. Entschlüsselung eines Schlüsseltextes. 10 Markus Müller Semester: I8ES 4.1. RST-Projekt: Java Card Datum:14.02.2000 Sicherheit bei Chipkarten durch Identifizierung und Authentisierung Benutzeridentifizierung bei Smart Cards: Identifizierung ist der Vorgang des Nachweises der Echtheit eines Gerätes oder einer Person durch Vergleich eines übergebenen Passwortes mit einem gespeicherten Referenzwert. Im Falle der Chipkarte ist es z.B. die Überprüfung der Identität des Kartenbesitzers mittels Eingabe einer PIN (Personal Identification Number) gegenüber der Karte. Nach ISO 9564-1 sollte die PIN aus 4-12 alphanumerischen Zeichen bestehen. In der Regel werden jedoch 4-5 Zahlen verwendet. Die PIN wird mittels Tastatur des Terminals eingegeben und zur Chipkarte gesendet. Diese vergleicht den übergebenen Wert mit einem Referenzwert innerhalb der Karte und teilt das Ergebnis dem Terminal mit. Probleme mit der PIN: Die Echtheit des Terminals muss gewährleistet sein. Der Nachteil eines reinen Identifizierungsverfahrens ist, dass die Daten (PIN) in Klartext übermittelt werden, d.h. ein Angreifer kann das Geheimnis abhören (z.B. durch sog. DummyGeldausgabeautomaten). Um nun eine sichere PIN-Eingabe zu gewährleisten, muß vor der Benutzeridentifikation eine Authentisierung zwischen Karte und Terminal stattfinden. Authentisierung von Karten und Terminals Eine Authentisierung ist der Vorgang des Nachweises der Echtheit einer Instanz (Chipkarte/Terminal) durch kryptografische Verfahren. Bei der Chipkarte findet eine Authentisierung gegenüber dem Terminal bzw. umgekehrt statt: Karte oder Terminal stellt fest, ob der Kommunikationspartner ein echtes Terminal bzw. Karte ist. Hierfür haben beide Kommunikationsteilnehmer ein gemeinsames Geheimnis, das mit Hilfe eines Authentisierungsverfahrens überprüft wird. Beim Authentisierungsverfahren ist es nicht möglich, durch Abhören der Leitung das Geheimnis herauszufinden, da die Datenübertragung auf dem Challenge-Response-Verfahren basiert. 11 Markus Müller Semester: I8ES RST-Projekt: Java Card Datum:14.02.2000 Challenge-Response-Verfahren: Ein Kommunikationspartner stellt dem anderen eine zufällig erzeugte Frage (Challange), dieser berechnet mit einem Algorithmus eine Antwort und sendet sie an den Fragesteller zurück (Response). Der Algorithmus ist eine Verschlüsselung mit einem geheimen Schlüssel, der das gemeinsame Geheimnis der beiden Kommunikationspartner darstellt. Man unterscheidet folgende Authentisierungsverfahren: - einseitige Authentisierung: Nach dem Authentisieren ist die Authentizität eines der beiden Partner sichergestellt. - gegenseitige Authentisierung: Nach Authentisierung sind beide Partner authentisch. - statische Authentisierung: - dynamische Authentisierung: für jede Authentisierung wird eine unterschiedliche Datengrundlagen verwendet. Dies schützt vor Angriffen durch Wiedereinspielen von Daten einer früheren Sitzung. (Session key) die Authentisierung erfolgt mit immer den selben statischen Daten. Authentisierungsverfahren basierend auf kryptografischen Algorithmen werden unterteilt in: - symmetrische Verfahren: verwenden gleichen Schlüssel für Ver- und Entschlüsselung, z.B. DES oder Tripple-DES - asymmetrische Verfahren: verwendet unterschiedliche Schlüssel für Ver- und Entschlüsselung. z.B. RSA-Verfahren. ein Schlüssel ist hierbei öffentlich, der andere geheim. 12 Markus Müller Semester: I8ES 4.2. RST-Projekt: Java Card Datum:14.02.2000 Symmetrische Authentisierung am Beispiel des DES-Algorithmus: Der DEA (Data Encryption Algorithm) ist ein symmetrischer Blockverschlüsselungsalgortihmus ohne Expansion des Schlüsseltextes, d.h. der Klartextblock ist genauso lang wie der Schlüsseltextblock. Die Blocklänge beträgt 64 bit und enthält 8 Paritätsbit. Daraus ergibt sich ein Schlüsselraum von 2 64-8 = 2 56 = 7,2 * 10 16 Schlüssel. Der DEA ist nach US-Norm FIPS Pub46 genormt, auch als DES (Data Encryption Standard) bezeichnet. Für genauere Informationen zum DES verweise ich auf das Buch Safer Net. Spezielle Betriebsarten für Blockverschlüsselungsalgorithmen Insgesamt gibt es vier Betriebsarten, es werden im Chipkartenbereich jedoch vor allem die zwei unten beschriebenen Modi verwendet: - ECB = Electronic Code Book 64bit Klartextblöcke werden unabhängig voneinander mit gleichen Schlüsseln verschlüsselt. Nachteil: Das Vertauschen, Löschen oder Einfügen von verschlüsselten Blöcken ist möglich. Klartextblock 1 Block 2 Verschlüsselung Schlüsseltextblock 2 - Block2 CBC = Cipher Block Chaining Ein aus mehreren Blöcken bestehender Datenstring wird mit einer XOR-Operation bei der Verschlüsselung so verkettet, dass die nachfolgenden Blöcke von den vorhergehenden abhängig werden. Vorteil: Vertauschen, Einfügen oder Löschen von verschlüsselten Blöcken kann zuverlässig erkannt werden. Klartextblock 1 Klartextblock 2 Initialisierungsvektor (Zufallszahl) XOR Schlüsseltextblock 1 XOR Schlüsseltextblock 2 13 Markus Müller Semester: I8ES RST-Projekt: Java Card Größerer Schlüsselbereich: Datum:14.02.2000 Triple-DES oder DES3: Hierbei werden drei DES Operationen mit abwechselnder Ver- und Entschlüsselung hintereinandergeschaltet. Statt eines 64 Bit Schlüssels werden zwei benötigt. Hieraus ergibt sich ein 128 bit Schlüssel. Verschlüsseln: Schlüssel 1 Klartext → → verschlüsseln 2 1 → entschl. → Schlüsseltext verschlüsseln Entschlüsseln Schlüssel 1 Schlüsseltext → → 2 → 1 entschlüsseln verschlüsseln entschlüsseln 14 → Klartext Markus Müller Semester: I8ES 4.3. RST-Projekt: Java Card Datum:14.02.2000 (Dynamische einseitige) Symmetrische Authentisierung: Zweck dieses Verfahrens ist das Vergewissern der Vertrauenswürdigkeit eines Kommunikationspartners ! Beide Kommunikationspartner besitzen ein gemeinsames Geheimnis, dessen Kenntnis durch die Authentisierung überprüft wird. Das Geheimnis ist der Schlüssel für einen Verschlüsselalgorithmus, der nur dem Terminal und der Chipkarte bekannt ist. Ist der Schlüssel bekannt, kann sich auch ein Angreifer hiermit identifizieren. Prinzip der Authentisierung: (Terminal identifiziert eine Chipkarte) - Terminal generiert eine Zufallszahl und sendet diese an die Chipkarte (Challenge) - Chipkarte verschlüsselt diese Zufallszahl und sendet diese zurück. - Terminal entschlüsselt erhaltene Zahl und vergleicht das Ergebnis mit der erzeugten Zufallszahl. Übereinstimmung è Chipkarte ist authentisch. Vorteil: Nachteil: Angriff durch Wiedereinspielen einer vorher abgehörten Challenge oder Response ist nicht möglich, da jedes Mal eine neue Zufallszahl erzeugt wird. Ein möglicher Angriff wäre jedoch die systematische Suche nach geheimen Schlüssel, da Challenge-Response nichts anderes als Klartext-SchlüsseltextPaare sind, könnte man mittels brute-force-attack (auf Grundlage eines bekannten Klartext-Schlüsseltext-Paares wird versucht, den Schlüssel mittels großer Rechenleistung herauszufinden) den geheimen Schlüssel bestimmen. Sollte der Schlüssel bekannt werden, ist das gesamte System diskreditiert. Verbesserung: Kartenindividueller Schlüssel Dabei wird der kartenindividuelle Schlüssel durch eine Funktion aus nichtgeheimen Kartenmerkmal (z.B. Kartennummer) und des Hauptschlüssels (nur dem Terminal bekannt) nach dem DES oder Tripple-DES Verfahren berechnet. Kartennummer = nichtgeheimen Kartenmerkmal, z.B. Seriennummer Hauptschlüssel = geheimer Schlüssel, nur dem Terminal bekannt Wichtig: Der Hauptschlüssel muss im Terminal sicher abgelegt sein. An ihm hängt die gesamte Sicherheit des Systems 15 Markus Müller Semester: I8ES 4.4. RST-Projekt: Java Card Datum:14.02.2000 Die Gegenseitige symmetrische Authentisierung (mutual authentication) [auch bezeichnet als zweifache einseitige Authentisierung.] Zur Minimierung des Zeitaufwands der Kommunikation werden zwei einseitige Authentisierungen miteinander verflochten. Hierdurch wird gleichzeitig eine höhere Sicherheit erreicht, da es dem Angreifer erschwert wird, in den Kommunikationsablauf einzugreifen. Die gegenseitige symmetrische Authentisierung wird z.B. bei der Sm@rtCafe JavaCard der Firma GDM (Giesecke & Devrient GmbH (www.gdm.de) ) verwendet. Im folgenden werde ich das Prinzip dieser Authentisierung in Form eines Schaubildes verdeutlichen. Gegenseitige Authentisierung mit kartenindividuellem Schlüssel und symmetrischen Kryptoalgorithmus: Chipkarte Terminal [hat individuellen Authentisierungsschlüssel] sendet [hat Hauptschlüssel] Kartennummer berechnet individuellen Authentisierungsschlüssel fordert Zufallszahl generiert Zufallszahl generiert Zufallszahl sendet Zufallszahl setzt beide Zahlen vertauscht hintereinander und verschlüsselt. sendet Schlüsseltext entschlüsselt, prüft gesendete Zufallszahl OK ⇒ Terminal authentisiert vertauscht beide Zufallszahlen, verschlüsselt und verschickt sendet Schlüsseltext 16 entschlüsselt, vergleicht mit gesendeter Zahl. O.K. ⇒ Chipkarte authentisiert Markus Müller Semester: I8ES 4.5. RST-Projekt: Java Card Datum:14.02.2000 Asymmetrische Authentisierung Prinzip eines asymmetrischen Kryptoalgorithmus: Bei diesem Algorithmus werden zwei verschieden Schlüssel verwendet: ein öffentlicher zum Verschlüsseln einer Nachricht ein geheimer zum Entschlüsseln einer Nachricht. Vorteil: Hierdurch wird das Problem des Austausches und Verteilens von geheimen symmetrischen Schlüsseln beseitigt und ermöglicht die digitale Signatur. Bei der digitalen Signatur einer Nachricht identifiziert sich der Besitzer des geheimen Schlüssels als Ersteller bzw. Versender der Nachricht. Der RSA basiert auf der Arithmetik großer Ganzzahlen, wobei der Schlüssel auf Grundlage von zwei großen Primzahlen erzeugt wird. Vor der Verschlüsselung wird der Klartextblock auf entsprechende Blocklänge aufgefüllt (Padding). Die Blocklänge beträgt zwischen 512 und 1024 Bit. Die Sicherheit des Algorithmus basiert auf dem Faktorierungsproblem großer Zahlen. Der Vorteil des RSA-Algorithmus ist, daß er nicht auf eine feste Schlüssellänge begrenzt ist. Je nach Sicherheitsbedarf kann ein längerer oder kürzerer Schlüssel verwendet werden. Die Vorgehensweise bei diesem Verfahren sei kurz am Beispiel des RSA-Algorithmus verdeutlicht. Der RSA-Algorithmus ist nach seinen Erfindern Rivest, Shamir und Adlemann benannt. Zur Zeit werden RSA-Algorithmen mit Schlüssel von 512 bit bis 1024 Bit Länge verwendet. Für ausführliche Informationen verweise ich auf das Handbuch der Chipkarten.: RSA-Algorithmus: öffentlicher Schlüssel Klartext geheimer Schlüssel Schlüsseltext verschlüsseln Klartext entschlüsseln Verschlüsseln: Schlüsseltext = Klartext öffentlichen Schlüssel mod öffentl. Modulus Entschlüsseln: Klartext = Schlüsseltext geheimer Schlüssel mod öffentl.Modulus Öffentlicher Modulus = Produkt zweier geheimer Prinzahlen p und q. Berechnung des öffentl. Schlüssel e: e < z und (ggt(z,e) = 1) mit z = (p –1) * (q- 1) Berechnung des geheimen Schlüssels d: (d * e) mod z = 1 17 Markus Müller Semester: I8ES RST-Projekt: Java Card Datum:14.02.2000 Die asymmetrischen Authentisierung benötigt eine Recheneinheit auf der Chipkarte. Da aber nicht jede Chipkarte mit diesem Coprozessor ausgestattet ist, gibt es zwei Versionen dieser Authentisierung: - statische Authentisierung der Chipkarte durch das Terminal bei Chipkarten ohne Coprozessor. Nacheil: Kein Schutz gegen Wiedereinspielung. Wird nur als zusätzliche Überprüfung zum vorhergehenden dynamisch symmetrischen Verfahren verwendet. - dynamische Authentisierung bei Chipkarten mit Coprozessor. Dynamische (einseitige) asymmetrische Authentisierung: Bei diesem Verfahren wird wie bei der symmetrischen Authentisierung vom Terminal eine Zufallszahl generiert und zur Chipkarte gesendet. Diese entschlüsselt die Zufallszahl mit dem geheimen Schlüssel und sendet das Ergebnis anschließend zum Terminal. Das Terminal verwendet nun zum Verschlüsseln der empfangenen Zufallszahl den globalen öffentlichen Schlüssel. Ist das Ergebnis dieser Rechenoperation identisch mit der vorher zur Chipkarte gesendeten Zufallszahl, so ist die Chipkarte durch das Terminal authentisiert. geheimer Schlüssel Zufallszahl öffentlicher Schlüssel Signatur der Zufallszahl entschlüsseln Zufallszahl verschlüsseln Aufgrund der Konvention wird immer mit einem öffentlichen Schlüssel verschlüsselt und einem geheimen Schlüssel entschlüsselt. Daraus ergibt sich die merkwürdige Bezeichnung bei der Erstellung der Zufallszahlensignatur. 18 Markus Müller Semester: I8ES 5. RST-Projekt: Java Card Datum:14.02.2000 Sicherung der Datenübertragung (Secure Messaging) Sinn und Zweck der gesicherten Datenübertragung ist es, die Authentizität und Vertraulichkeit der übertragenen Daten sicherzustellen. Ein Verfahren des Secure Messaging (SM) ist das Authentic Verfahren. Neben diesen gibt es noch andere Verfahren, auf die ich in diesem Bericht jedoch nicht eingehen werde. Das Authentic Verfahren gewährleistet eine authentische Übertragung von Dateneinheiten (APDUs = Application Protocol Data Units). Diese APDUs teilen sich in Kommando-APDUs (Kommandos an die Chipkarte) und Antwort-APDUs (Antwort der Chipkarte auf das entsprechende Kommando). Struktur der Kommando APDU: CLA CLA INS P1/P2 Lc INS P1 P2 Lc-Feld Daten-Feld = Class Byte (Kennzeichnung ob z.B. SM verwendet wird) = Instruction (Codierung des Kommandos) = Parameter (nähere Beschreibung des durch INS beschriebenen Kommandos) = Länge des Datenteils zur Chipkarte Um sicherzustellen, dass keine falschen Dateneinheiten eingespielt wurden, wird über die APDU eine Prüfsumme (CCS = Crypthografic Checksum, wird auch als MAC= Massage Authentication Code bezeichnet) mittels DES berechnet. Da der DES eine feste Blocklänge von 8Byte besitzt, müssen vorher die einzelnen Datenobjekte auf ein Vielfaches der Länge von 8Byte aufgefüllt werden (wird als Padding bezeichnet (PB=Padding byte)). Nach dem Padding wird der Datenteil der APDU mittels TLV codiert. Bei einer TLV-Codierung wird das Datenfeld (V=Value) mit 1-2Byte gekennzeichnet (T=Tag [um was für einen Typ von Datenfeld handelt es sich]) und 1-3Byte (L=Length) geben die Länge des Objekts an. Nach dem Auffüllen und Codieren wird mittels des DES-Algorithmus in CBC-Mode die CCS über die gesamte APDU errechnet. Der letzte Block (oder ein Teil davon) der CBC-Verschlüsselung ist die CCS einer Nachricht. D.h. die CCS bildet sich aus den vier höherwertigen Bytes des letzten Blocks und den 4 Byte der TLV-Codierung. CLA INS CCS P1 P2 Lc PB DES-Verschlüsselung 19 T L Daten-Feld PB Markus Müller Semester: I8ES RST-Projekt: Java Card Datum:14.02.2000 Nach der Berechnung der CCS werden alle Paddingbytes (PB) entfernt und die umgestaltete APDU gesendet. CLA INS P1 P2 Lc T L Daten-Feld CCS Beim Empfänger angekommen, wird die APDU wieder auf ein Vielfaches von 8Byte verlängert und ebenfalls eine CCS berechnet. Die Errechnete wird dann mit der Empfangenen verglichen. Durch den geheimen DES-Schlüssel, über den beide Kommunikationspartner verfügen, wird das unberechtigte Einspielen einer Datei sofort erkannt. 6. Literatur: • W.Rankl/W.Effing ; Handbuch der Chipkarten - Aufbau-Funktionsweise, Einsatz von SmartCards ; 3.Auflage 1999 ; Hansen Verlag (Sehr gutes Buch über grundlegendes und vertiefendes rund ums Thema Chipkarten) • K.Schmeh ; Safer Net - Kryptografie im Internet und Intranet ; 1998 ; dpunkt Verlag • F.P.Volpe/S.Volpe ; Chipkarten -Grundlagen,Technik, Anwendung ; 1996 ; Heise Verlag (lediglich für den Einstieg ins Thema Chipkarten geeignet [veraltet]) • Dr.K.Vedder/Dr.F.Weikmann ; Smart Cards - Requirements, Properties and Applications ; http://www.gdm.de/products/card/pay+mm/vortrag/vortrag.htm (Grundlegendes über Smart Cards; guter Einstieg ! ) • Homepage der Firma Sun ; Java Card technologie grows up smart ; 26.07.1999 ; http://java.sun.com/features/1999/01/javacard.html • Hompage der Firma Sun ; Java Card Technologie ; 19.11.1999 ; http://java.sun.com/products/javacard/ (JavaCard Specification 2.1; neueste Informationen.) • Bo Lavare ; Smartcard security information page ; 15.April 1999 ; http://www.geocilies.com/researchviangle/lab/1578/smart.htm (Links zu weiteren Seiten über Sicherheit, z.B. verübte Angriffe, ...) • Chan, Siu-cheung Charles ; An overview of smart card security ; August.1997 ; http://home.hkstar.com/~alanchan/papers/smartCardSecurity/ (Einführung zum Thema Smart Card Sicherheit: leicht verständlich ) 20