5.1 Die Chipkarte

Eine Chipkarte, ähnlich der Telefonkarte der Telekom, soll hier eingesetzt werden, um den geheimen Schlüssel zu speichern. In der ISO 7816 sind sämtliche Normen zum Thema Chipkarte enthalten [4]. Aber jeder Hersteller weicht für seine Anwendung von diesen Vorgaben ab.

Abbildung 12: Kontaktbelegung einer üblichen Chipkarte

Die Belegung der Kontakte auf Chipkarten (Abbildung 12) ist fast immer gleich, sogar die von Speicher und Prozessorkarten. Die Kontakte für die Stromversorgung (VCC und GND) befinden sich immer an derselben Stelle. Sämtliche Karten arbeiten mit +5V, die hier über den Schutzwiderstand R60 (siehe Stromlaufplan ab Seite 63) geführt werden. Ein in der Entwicklungsphase vorgesehener Kontakt für die EEPROM Programmierspannung kommt nicht zum Einsatz, da alle Chipkarten mit einer eigenen Ladungspumpe ausgestattet sind. Der bedeutendste Unterschied in der Beschaltung einer Speicher oder Prozessorkarte betrifft den Takteingang (CLK). Bezüglich der Speicherkarte ist er der Schiebetakt für den seriellen Bitstrom am Datenkontakt (DAT). Mit jeder fallenden Flanke am Takteingang wird das nächste Bit am Datenausgang ausgegeben. Für die Prozessorkarte ist der CLK Kontakt der Eingang für den Prozessortakt, der meist 3,57MHz beträgt. Er wird benötigt, weil eine Prozessorkarte über keine eigene Takterzeugung verfügt; denn eine Chipkarte ist zu dünn für einen Quarz. Also muß die Hardware des Chipkartenschachts so ausgelegt sein, daß sie eine Frequenz von 3,57MHz am CLK Kontakt zur Verfügung stellt oder den Pegel des CLK Kontaktes direkt festlegen kann. Dafür ist IC10a/b/c zuständig; es erzeugt die Frequenz mit Hilfe eines Quarzes, und der Prozessor kann über zwei Portleitung den CLK Pin high, low oder mit dieser Frequenz beschalten.

Abbildung 13: Clk Pin der Chipkarte

Mittels des Reset-Kontaktes (RES) auf der Prozessorkarte wird er ein low aktiver Hardwarereset ausgelöst. Auf der Speicherkarte hat dieser Eingang noch zusätzliche Aufgaben, die in Verbindung mit dem CLK Eingang bestimmt werden. Aber für die Hardware des Chipkartenschachts, der an die Steckleiste X3 angeschlossen ist, reicht es, ihn mit einer Portleitung des Prozessors zu verbinden. Der gesamte bidirektionale Datenaustauch findet über den Open-Collector DAT Kontakt statt, ähnlich dem RS232 Protokoll, jedoch mit 5Volt Pegel und nur einer Leitung für beide Richtungen. Es existieren keine zusätzlichen Steuerleitungen; die Übertragung enthält ein Startbit(0), 8 Datenbits, ggf. ein Paritätsbit und 2 Stopbits(1). Die Baudrate ergibt sich durch eine Teilung des Prozessortaktes am CLK Eingang, die meist 372 beträgt. Damit ergeben sich bei 3,57MHz 9600 Baud. Deswegen wird ein serieller Port des Prozessors für die Kommunikation mit der Chipkarte verwendet. Da der Prozessor jeweils eine extra Leitung für beide Richtungen hat, werden sie einfach verbunden. Es existiert eine Unmenge genormter und ungenormter Protokolle für Prozessorchipkarten, so daß sie nicht weiter erwähnt werden, sondern nur das hier eingesetzte Protokoll, welches eine reduzierte Variante des ISO7816 T=1 ist (Abbildung 14).
Nach dem Reset sendet die Karte einen ATR String, der Inhalt dieser Bytefolge gibt Auskunft über das verwendete Protokoll und ist in der ISO7816 Norm definiert. Für die Chipkarte handelt es sich nur um einen konstanten String, der gesendet wird.

Abbildung 14: Protokoll der Prozessorchipkarte

Danach wartet die Karte auf Daten vom Terminal. Ein Paket vom Terminal beginnt immer mit einem 6 Byte langen Header, der ausschließlich mit $01 beginnt. Dieses Byte war vorgesehen, um mehrere Karten am Bus zu adressieren, aber hier gibt es nur eine einzige. Das zweite Byte ist das Class Byte und wählt die Anwendung innerhalb der Karte aus. Da hier nur eine Anwendung existiert, nämlich die Bereitstellung des Schlüssels, gibt es auch nur ein Classbyte, welches willkürlich den Wert $02 erhält. Dann folgt das Instruction Byte mit dem Kommando an die Karte. Die Commandbytes sind ebenfalls in der ISO7816-4/-5 genormt, aber kaum jemand hält sich an die Regelung. P1 und P2 sind zusätzliche Parameter für das Kommando. Als letztes Byte im Header erscheint die Länge der Daten, die das Terminal mit diesem Kommando an die Karte schicken will. Mit dem Inhalt $00 werden keine Daten zur Karte geschickt, und das Datenfeld ist leer. Zum Abschluß des Packets kommt ein Prüfbyte, das als Checksumme alle Bytes des Pakets verexclusivodert enthält. Hat die Karte nun ein solches Packet als gültig erkannt, so schickt es ein Antwortpaket, welches gleichfalls aus einem Header, ggf. Daten und einem Prüfbyte besteht. Das Class Byte, Instruction Byte und die beiden Parameterbytes sind identisch mit denen des Headers vom Terminal. Zusätzlich enthält aber dieser Header noch zwei Statuswortbytes, die Fehlercodes oder ähnliches enthalten, vergleichbar dem Return Wert bei C Funktionen. Jetzt macht das Len Byte eine Aussage über die Anzahl der Datenbytes, die die Karte ans Terminal zu schicken beabsichtigt. Abgeschlossen wird das Paket wieder mit dem Prüfbyte.
Die einfache Version der hier verwendeten Karte wird nur drei Kommandos kennen: Status anzeigen ($F2), PIN vergleichen ($20) und Schlüssel ausgeben ($C0). Da es schwer ist, als Privatkunde auf dem freien Markt Prozessorchipkarten zu kaufen, fertigt man sich einfach eine 0,7mm dünne Leiterplatte in Form einer Chipkarte (85 x 54mm) und lötet einen SMD Einchip Mircocontroller auf. Hier wird ein PIC16C84 von der Firma Microchip verwendet, da er über EEPROM Speicher verfügt. Möglicherweise wird jedoch die Verfügbarkeit von Prozessorchipkarten in Zukunft etwas einfacher. Es folgt nun ein Beispiel für einen Protokollablauf (Abbildung 15).

Abbildung 15: Kartenprotokoll Beispiel

Im Rahmen der vorliegenden Diplomarbeit, hinsichtlich der zur Verfügung stehenden Zeit, ist die Anzahl der Funktionen begrenzt. Ein erweiterter Funktionsumfang würde zudem folgende Optionen ermöglichen: PIN ändern, mehrere Schlüssel verwalten, RSA-Algorithmen.


zurück