Sicherheitsfeatures von Chipkarten am Beispiel der JavaCard

Werbung
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
Herunterladen