Chipdrive - Chipkarten auslesen
(aktueller Source Code zum Auslesen der Krankenversicherungskarte)
Themen
- Einleitung
- Chipkarten-Laufwerke
- Chipkarten-Typen
- Chipdrive 120 - Das Linux Pack
- Installation des Treibers
- Die CTAPI
- Source Code zum Auslesen der Krankenversicherungskarte
- Programmaufbau
- Weitere Anwendungsmöglichkeiten für Chipkarten
- Links
Einleitung
Wollten Sie schon immer mal wissen, was wirklich auf Ihrer Krankenversicherungskarte steht ? Oder interessieren Sie sich einfach nur für Chipkarten-Technik unter Linux ? Dann ist dieser Artikel genau der richtige Einstieg für Sie !
Chipkarten-Laufwerke
Es gibt mittlerweile eine ganze Reihe von Chipkarten-Laufwerken, die
von Linux unterstützt werden. Unter anderem werden alle Laufwerke von
Towitoko (http://www.towitoko.de), die
die Bezeichnung CHIPDRIVE in ihrem
Namen führen und an der seriellen Schnittstelle angeschlossen werden
können, unterstützt. Weitere Hersteller kostengünstiger
Chipkarten-Terminals sind:
- Towitoko http://www.towitoko.de/
- Kobil http://www.kobil.de/
- Schlumberger http://www.cardstore.slb.com/
Chipkarten-Typen
Es gibt drei grundlegende Kartentypen:
- Magnetkarten
- Prozessorkarten
- Speicherchipkarten
Da die oben angeführten Laufwerke nur die beiden letzten Typen unterstützen, gehe ich nicht weiter auf Magnetkarten (z.B. EC-Karten, Kreditkarten) ein.
Prozessorkarten
Prozessorkarten sind Chipkarten, die einen eigenen Microprozessor, RAM, ROM und EEPROM (Electronically Erasable Read Only Memory) besitzen, um damit anspruchsvolle Anwendungen zu realisieren. Programmiert werden diese Karten in der Regel mit JAVA oder Basic-Dialekten programmiert, und die Programme werden im EEPROM abgelegt.
Speicherkarten
Speicherkarten besitzen kaum eigene Intelligenz und wenn, dann beschränkt sich diese auf eine Sicherung der gespeicherten Daten vor unbefugtem Zugriff. Anwendungsfelder dieser Karten sind z.B. Krankenversicherungskarten oder Telefonkarten.
Es gibt aber auch kontaktlose Chipkarten, wie sie z.B. von Legic (http://www.legic.de) angeboten werden. Diese eignen sich besonders für sicherheitskritische Bereiche wie Authentisierung oder bargeldlosen Zahlungsverkehr. Diese Karten sind deutlich komplexer, und auch die notwendige Hardware ist deutlich teurer. Der Vollständigkeit halber seien sie aber hier erwähnt.
Weitere Informationen zu Chipkartentypen sind unter http://www.heise.de/ix/artikel/2000/12/152/04.shtml zu finden.
Chipdrive mirco 120 - Das Linux Pack
Da ich zwei Towitoko Chipdrives mirco 120 besitze (das Linux-Pack aus
dem Online-Store von Towitoko), beziehen sich die weiteren Ausführungen
auf diese Modelle. Bei dem Linux Pack sind zwei Chipkarten enthalten:
eine Speicherkarte mit 256 Bytes Kapazität und eine Prozessorkarte mit
2048 Bytes Kapazität. Damit kann man wunderbar experimentieren.
Wer Kunde der Dresdner Bank war oder ist, kann sich dort für das Online-Banking registrieren und bekommt exakt das von mir hier verwendete Chipdrive micro 120 - kostenlos. Und benutzen muß man es ja nicht für das Online-Banking (wenn man etwas paranoid ist oder dem Online-Banking nicht vertraut ,-).
Um das Chipdrive unter Linux zu verwenden, benötigt man einen Treiber für das Laufwerk. Dieser übernimmt die Ansteuerung der seriellen Schnittstelle und stellt eine komfortable API (Application Programming Interface) zur Verfügung - die CTAPI (Card Terminal Application Programming Interface). Der Treiber ist hier erhältlich (oder lokal bei uns).
Installation des Treibers
Der Treiber wird mit
>> tar -zxvf towitoko.tar.gzentpackt und danach im Towitoko-Verzeichnis mit
>> ./configure && makekonfiguriert und kompiliert.
Als root führt man nun
make install
aus, um die Treiber an die richtige Stelle zu kopieren. Sollte der Medical Card Reader sich bei der Ausführung über eine fehlende Library beschweren, so sind die Libraries unter /usr/local/towitoko/lib/ nach /usr/lib zu kopieren bzw. der Pfad /usr/local/towitoko/lib/ in den LD_LIBRARY_PATH aufzunehmen.
Danach sollte man ein
ldconfig
ausführen um sicherzustellen, dass die neue Bibliothek auch gefunden
wird.
Die CTAPI
Jetzt kann man mit der Entwicklung eigener Programme beginnen. Es empfiehlt sich das Test-Programm, das den Towitoko-Treibern beiliegt, zu begutachten. Es sind da viele Zugriffe auf Chipkarten bereits implementiert - aber nur spärlich dokumentiert. Hier empfiehlt es sich, die Dokumentation zur CTAPI zu lesen. In dieser Dokumentation sind alle verfügbaren Befehle ausführlichst dokumentiert. Die Programmierung gestaltet sich insbesondere deshalb einfach, da nur drei Befehle zur Verfügung stehen:
- CT_init - Initialisierung des Kartenterminals und Beginn der Kommunikation mit dem Chipkartenterminal
- CT_data - Zugriff auf die Chipkarte; Senden von Kommandos an die Chipkarte
- CD_close - Beendigung der Kommunikation; äquivalent zu CT_init
Der prinzipielle Aufbau eines CT_data-Befehls ist wie folgt:
CT_data(ctn,dad,sad,commands,command,response)wobei die Parameter wie folgt definiert sind:
- ctn: Logische Card Terminal Nummer
- dad: Destination Address
- sad: Source Address
- commands: Number of commands
- command: commands to the chipdrive
- response: Response to command from the chipdrive
Nach dem ich auf freshmeat.net (http://www.freshmeat.net) kein (funktionierendes) Programm gefunden habe, mit dem man schnell und einfach seine Krankenversicherungskarte auslesen kann, habe ich dies als Beispiel implementiert.
Source Code zum Auslesen der Krankenversicherungskarte
medical-card-reader.c und die zugehörige Makefile
Die Dokumentation dazu findet sich im Source Code. Die Abhängigkeiten sind:
- Notwendige Bibliotheken:
libtowitoko (towitoko.tar.gz) - Notwendige Header:
/usr/local/towitoko/include/ctacs.h (download)
/usr/local/towitoko/include/ctapi-add.h (download)
Programmaufbau
Der prinzipielle Aufbau des Programms ist wie folgt:
- REQUEST ICC
Es wird eine Chipkarte angefordert - Reset des Terminals
- READ BINARY
Auslesen der relevanten Daten-Bereich der Karte - EJECT ICC
Die Chipkarte wird ausgeworfen.
Da die Krankenversicherungskarten keinen Schreibschutz haben, habe ich keine Funktion zum Schreiben auf die Chipkarte implementiert. Wenn beabsichtigt ist, die Daten auf der Karte zu manipulieren, ist darauf zu achten, die Prüfsumme korrekt zu schreiben. Wie sich diese Prüfsumme errechnet, ist unter http://themen02.mytoday.de/user/member/chipcard/ (Download ganz unten) nachzulesen.
Der dort zum Download angebotene Source Code kompiliert allerdings (bei mir) nicht, aber die Funktion zur Berechnung der Prüfsumme ist enthalten. Achso, es dauert ungefähr zwei Wochen bis man von seiner Krankenkasse eine neue Karte zugestellt bekommt....*seufz*
Weitere Anwendungsmöglichkeiten für Chipkarten
Als weitere Anwendungen für Chipkarten sind denkbar:
- Benutzer-Authentifizierung
- Speicherung von Krypto-Keys (z.B. für PGP, RSA, etc.)
- Abrechnungs- und Bezahlverfahren
Viel Spaß beim Spielen und Programmieren wünscht Euch Matthias Kranz
Links
Treiber:
- Towitoko-Treiber: Hompage unter http://www.geocities.com/cprados/ und der Treiber unter http://www.geocities.com/cprados/files/towitoko-2.0.5.tar.gz
- http://www.linuxnet.com/software.html
Dokumentation:
- Vollständige Dokumentation: http://www.panstruga.de/ct-api/spec/spec_v09.html
- CT-API Spezifikationen: https://www.secure.trusted-[...]API/CTAPI11.pdf
Informationen zu Kartenlesern:
- Viele gute Links - auch zu c't Artikeln: http://www.cgan.de/projects/kartenleser.html
Informationen zur Krankenversicherungskarten und Telefonkarten:
Software:
- Anwendungssoftware und weitere Treiber: http://www.linuxnet.com/software.html
- Anwendungssoftware und Bibliotheken: http://freshmeat.net/[...]ard§ion=projects
- Meine eigene Smartcard-Seite: http://smartcards.price-of-freedom.de/
- Source Code zum Auslesen der Krankenversicherungskarte: http://smartcards.price-of-freedom.de/[...]-card-reader.tar.gz
Newsgroups:
Anmerkungen zu diesem Artikel
| [3] | legic karten auslesen und kopieren? | DarthMob | 28-10-2003 |
| [6] | towitoko und moneyplex auf SuSE 8.2 wollen nicht zusammen.... | masa | 22-5-2003 |
Eigene Anmerkung eintragen