Willkommen bei Christophs Weblog
05.02.2012, 15:27 Uhr

Smartcards unter Linux

Ich habe mir vor einigen Tagen einen Smartcard Reader mit Pinpad[1] (Modell SPR 532 / CHIPDRIVE pinpad 532) für ca. 50 EUR gekauft, um endlich mal meine fsfe.org Mitglieds-Smartcard in Betrieb zu nehmen. Mein Fazit nach zwei Tagen ist, dass einige Dinge wirklich problemlos funktionieren, andere hingegen - wie unter Linux leider so oft üblich - an manchen Stellen viel Handarbeit erfordern ... Der Reader läßt sich als USB-Gerät an den Computer anschließen und wird sofort korrekt als

Bus 003 Device 005: ID 04e6:e003 SCM Microsystems, Inc. SPR532 PinPad SmartCard Reader

erkannt.


Die erste Anwendung die ich ausprobiert habe war GnuPG. Dieser fehlte bei mir noch der smartcard Support, den ich unter Gentoo Linux mit den Useflags smartcard und usb hineinkompiliert habe. Ohne weiteres wurde nun mein Reader mit

$ gpg --card-status


gefunden und alle Details/Daten meiner FSFE smardcard angezeigt. Auch die Optionen --card-edit und das Ändern der PIN via GnuPG waren überhaupt kein Problem. Allerdings wird das Pinpad nicht unterstützt. Laut Werner Koch gibt es bereits seit Anfang 2005 entsprechenden Code im gpg, aber der sei noch nicht ausreichend getestet. Allerdings wird es wohl nicht mehr lange dauern, bis man seine PIN auch über die Ziffern-Tasten des Readers eingeben kann. Momentan ruft gpg bei mir den gpg-agent auf und dieser läßt mich die PIN via pinentry-qt eingeben.

Das Generieren von Keys auf der Karte war auch kein Problem, allerdings wird anscheinend von der Karte nur RSA und kein DSA oder Elgamal unterstützt. Empfohlen wird, sich für bestehende Keys einen Subkey anzulegen und diesen auf die Karte zu transferieren (hier muss ich aber selbst noch etwas rumspielen und testen :-).


Als nächstes habe ich mir verschiedene Smartcard-Reader Middleware angeschaut. Momentan sind mir drei verschiedene bekannt: OpenSC (dev-libs/opensc), PCSC (sys-apps/pcsc-lite) und libchipcard2 (sys-libs/libchipcard). Letztere ist die erste Wahl, wenn man HBCI mit z. B. GnuCash machen möchte.

Zunächst brauchte ich allerdings einen Treiber für meinen Reader. Dazu stehen zwei zur Auswahl: Einmal der proprietäre Treiber vom Hersteller SCM und der GPL Treiber CCID (app-crypt/ccid). Bei letzterm ist zu beachten, dass er zwar Teile sys-apps/pcsc-lite benötigt, aber man es beim configure manuell deaktivieren muss. Ansonsten funktioniert der Treiber nicht mit libchipcard2 (siehe [2]). Einen entsprechenden Featurerequest gibt es bei Gentoo bereits[3].

CCID jammert ein wenig über die alte Firmware meines Readers und wollte zunächst nicht laufen ("Firmware (4.15) is bogus!"). Allerdings läßt sich der Treiber recht leicht dazu überreden doch zu funktionieren, indem man in der Datei /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist (ggf. liegt sie auch unter /usr/lib/chipcard2-server/lowlevel/ifd/ifd-ccid.bundle/Contents/Info.plist) die "ifdDriverOptions" auf 0x0004 (jede Firmware benutzen) setzt.

An ein Firmwareupdate selbst habe ich mich noch nicht gewagt, obwohl selbige inzwischen bei Version 5.09 Beta ist. Laut [4] ist/war die neue Firmware für bestimmte Dinge nicht zertifiziert und kann daher je nach Anwendung zu Problemen führen (z. B. Bürgerkarte in Österreich). Ein weiterer Punkt ist, dass - soweit ich es sehe - das Firmwareupdate nur unter Windows zu machen ist.

Mit alter Firmware und aktuellem Treiber konnte ich den chipcard2-Server dann starten und dessen Client-Anwendungen ausprobieren. Ohne Probleme funktionierte "geldkarte2 loaded", welches mir den aktuellen Betrag auf meiner Geldkarte angezeigt hat:

$ geldkarte2 loaded
Card is loaded with 25.00 EUR


Auch "cardcommander2" funktioniert problemlos und zeigt ein paar Informationen über die eingelegte Karte (allerdings erstmal keine auf der Karte gespeicherte Daten) an. Dies funktionierte problemlos bei meiner FSFE Smartcard, meinen Geldkarten, den alten Studentenausweisen und meinen Mobilfunk SIM-Karten (ein Adapterrahmen für die kleinen Karten liegt dem Gerät bei). Meine Krankenkassenkarte meldet allerdings beharrlich ("PowerUp failed") und läßt sich folglich auch nicht auslesen. Gleiches gilt für normale Telefonkarten. Krankenversicherungskarten sollten allerdings irgendwie funktionieren, denn libchipcard2 hat extra ein eigenes Tool namens kvkcard2 ("kvkcard2 read") - vielleicht benötigt man dazu aber erst das das vom Treiber geforderte Firmwareupdate.
Die Investition in den Cardreader hat sich übrigens schon fast wieder gelohnt: Auf zwei meiner inzwischen seit 6 Jahren abgelaufenen EC-Karten habe ich noch ein Geldkarten-Guthaben von knapp 25 EUR gefunden ... :-)

Da ich alte Chip-Karten eigentlich nie weggeschmissen habe, habe ich nun eine schöne große Auswahl an Memory- und Prozessor-Karten zur Verfügung, um damit herumzuspielen.

GnuCash und dessen HBCI-Interface aqHBCI habe ich bisher noch nicht wirklich ausprobiert. Die Chipkarten-Funktionalität ist teilweise noch nicht fertiggestellt und bei ersten Tests ist die Software fast immer irgendwo abgestürzt. Soweit ich weiß, sollte das ganze aber wengistens rudimentär bereits funktionieren. Es ist allerdings erfreulich, dass momentan aktiv daran entwickelt wird und die Programmierer einen super Support leisten. Ich bin mir also sicher, dass sich sämtliche Probleme in absehbarer Zeit in Luft auflösen ...


Die zweite von mir getestete Middleware war PCSC. Auch diese läßt sich problemlos starten und benutzt ebenfalls den CCID-Treiber. Viel machen kann man mit dieser Software erstmal nicht: Sie meldet lediglich, wenn eine Karte in den Reader gesteckt oder aus ihm entfernt wird. Auf [5] gibt es dazu die pcsc-tools, mit denen man die ATR einer Karte auslesen und analysieren kann. Ausserdem bieten die Tools ein Interface, um Befehle an die Karte zu senden. Bevor ich allerdings verstehe was ein Befehl wie z. B. "00 C0 00 00 12" genau macht, muss ich mich noch etwas schlaulesen ...


Vorläufiges Fazit: Es bleibt noch viel zu tun und auszuprobieren. Insbesondere möchte ich mich auf Dauer per Smartcard an meinem System authentifizieren und möglichst viele meiner zu schützenden Keys (ssh, PGP, HBCI, etc.) auf die Chip-Karte auslagern. Die Grundlagen dafür gibt es bereits und man muss die Puzzleteile momentan nur manuell zusammenbauen ...




[1] http://www.scmmicro.com/security/pcs_product_drivers.html
[2] http://www.libchipcard.de/readers/ccid.html
[3] http://bugs.gentoo.org/show_bug.cgi?id=131421
[4] http://www.mayrhofer.eu.org/Default.aspx?pageindex=7&pageid=30
[5] http://ludovic.rousseau.free.fr/softwares/pcsc-tools/
Smartcards unter Linux | 1 Kommentar(e) | Neuen Account anlegen
Die folgenden Kommentare geben Meinungen von Lesern wieder und entsprechen nicht notwendigerweise der Meinung der Betreiber dieser Site. Die Betreiber behalten sich die Löschung von Kommentaren vor.
RE: Smartcards unter Linux
Autor: Anonymous am 16.06.2006, 13:42 Uhr

Danke, Herr Probst, ein wirklich sehr interssanter Artikel. Ich würde die Sache gerne weiter verfolgen - evtl. schreiben Sie ja noch daran weiter, oder wir könnten über einen Instant-Messenger Ihrer Wahl (Jabber + OTR zumindest bevorzugt) oder IRC (Freenode?) in Kontakt treten. Habe das selbe Produkt.
Weiterhin überlege ich, wie ich eine PAM-Implementierung darüber hinbekomme. Bei einem Notebook erscheint das durchaus nützlich. Das Eingabefeld muss auch irgendwie zum Funktionieren bewegt werden. ;)

Kontakt: ionic at root24 Pünktchen de

[ # ]