Linux NetMag
Titel: Chipdrive - Chipkarten auslesen
URL: http://www.linuxnetmag.com/de/issue7/m7chipdrive1.html
Artikel vom: 6.1.2002
Autor: Matthias Kranz


(aktueller Source Code zum Auslesen der Krankenversicherungskarte)

Themen

Towitoko chipdrive

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:

Chipkarten-Typen

Es gibt drei grundlegende Kartentypen:

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 ,-).

Serieller Stecker

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.gz 
  
entpackt und danach im Towitoko-Verzeichnis mit
  >> ./configure && make 
  
konfiguriert 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:

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: Eine genaue Spezifikation findet sich in der API.

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:

Programmaufbau

Der prinzipielle Aufbau des Programms ist wie folgt:

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:

Viel Spaß beim Spielen und Programmieren wünscht Euch Matthias Kranz


Links

Treiber:

Dokumentation:

Informationen zu Kartenlesern:

Informationen zur Krankenversicherungskarten und Telefonkarten:

Software:

Newsgroups: