GPF CryptoStick in der Praxis

In diesem Kapitel befassen wir uns mit dem CryptoStick des German Privacy Foundation e. V. unter CentOS 6.x. Auf diesem Crypto-USB-Stick können bis zu drei Anwender ihre GPG-Schlüssel und/oder ihr PKC#11-Zertifikat von CAcert ablegen. Plattformunabhängig lassen sich dann mit Hilfe dieses Sticks eMails signieren und entschlüsseln oder man kann sich im Browser an einer Webseite oder via SSH authentifizieren. Hierzu muss lediglich der Cryptostick an einen freien USB-Port unseres CentOS Clients gesteckt werden.

Der Cryptostick vereint in einem kleinen Plastikgehäuse einen Kartenleser mit zugehöriger OpenPGP Chipkarte. Technische Details zum CryptoStick findet man im Wiki der GPF; zu den Details der OpenPGP Card wird man hier fündig. Eine Übersicht und viele hilfreiche Anleitungen zur Verwendung des GPF CryptoStick mit zahlreicher OpenSource Software findet man hier.

Photo des Cryptosticks

Im Gegensatz zu klassischen Variante bei der Speicherung der Schlüsseldaten auf einem Computer, werden beim CryptoStick die Schlüsseldaten direkt auf der OpenPGP Chipkarte verwaltet, gespeichert und bei Bedarf auch erzeugt. Dies erfolgt mit Hilfe der Software GnuPG V2, die kompatibel zum OpenPGP Standard ist. Entscheidet man sich für das Verschieben des Schlüsselringes von unserem CentOS6.x Client auf den CryptoStick, so wird in der Schlüsselringdatei im Verzeichn is ~/.gnupg nur noch ein Verweis auf die OpenPGP Chipkarte im CryptoStick gemacht.


Einsatz- und Konfigurationsbeispiele zur Kryptographie-Hardware der neueren Generation finden sich hier:


Informationen über den Cryptostick können wir mit Hilfe des Befehls usb-devices dem System abverlangen.

 $ usb-devices
T:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=20a0 ProdID=4107 Rev=01.00
S:  Manufacturer=German Privacy Foundation
S:  Product=Crypto Stick v1.2
C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=0b(scard) Sub=00 Prot=00 Driver=usbfs

Im Syslog wird uns beim Anstecken des Sticks dies entsprechend protokolliert:

Jul 13 13:44:28 proton kernel: usb 2-1: new full speed USB device using uhci_hcd and address 2
Jul 13 13:44:28 proton kernel: usb 2-1: New USB device found, idVendor=20a0, idProduct=4107
Jul 13 13:44:28 proton kernel: usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Jul 13 13:44:28 proton kernel: usb 2-1: Product: Crypto Stick v1.2
Jul 13 13:44:28 proton kernel: usb 2-1: Manufacturer: German Privacy Foundation
Jul 13 13:44:28 proton kernel: usb 2-1: configuration #1 chosen from 1 choice

Wer es lieber graphisch dargestellt haben will, nutzt einfach den Befehl hardinfo aus dem gleichnamigen RPM-Paket.

Bild zu denSysteminformationen mit Hilfe von hardinfo

Rufen wir nun mit Hilfe von gpg –card-status den Kartenstatus ab, wird uns mit unter folgende Fehlermeldung präsentiert:

gpg-agent[2846]: can't connect server: `ERR 67109133 can't exec `/usr/bin/scdaemon': Datei oder Verzeichnis nicht gefunden'
gpg-agent[2846]: can't connect to the SCdaemon: IPC "connect" Aufruf fehlgeschlagen

Das fehlende Programm /usr/bin/scdaemon ist im Paket gnupg2-smime enthalten. Ist dies noch nicht installiert, wird uns obige Fehlermeldung präsentiert. Wir installieren also das fehlende RPM-Paket.

 # yum install gnupg2-smime -y

Möchten wir nun auf unseren Stick als normaler User Zugreifen, werden wir im ersten Schritt erst einmal nicht viel Erfolg haben.

[django@proton ~]$ gpg --card-status 
gpg: selecting openpgp failed: Kein passendes Gerät gefunden
gpg: OpenPGP Karte ist nicht vorhanden: Kein passendes Gerät gefunden

Als root hingegen klappt dies erst einmal ohne größere Probleme.

 # gpg --card-status

Variante 1

In der ersten Variante beschreiten wir den Weg über eine entsprechende udev-Regel und dem Aufruf des pgp-agent als Autostarter.

udev-Regel

Damit nun unser User django auch auf den Stick zugreifen kann, legen wir uns eine passende udev-regel an.

 # vim /etc/udev/rules.d/40-cryptostick.rules
/etc/udev/rules.d/40-cryptostick.rules
# django: 2011-07-13
# udev-Regel für CryptoStick der GPF
ATTR{idVendor}=="20a0", ATTR{idProduct}=="4107", ENV{ID_SMARTCARD_READER}="1", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg"

Anschließend können wir auch als normaler User auf den CryptoStick zugreifen.

 $ gpg --card-status
Application ID ...: D2760001240102000005000008D10000
Version ..........: 2.0
Manufacturer .....: ZeitControl
Serial number ....: 000008D1
Name of cardholder: [nicht gesetzt]
Language prefs ...: de
Sex ..............: unbestimmt
URL of public key : [nicht gesetzt]
Login data .......: [nicht gesetzt]
Signature PIN ....: zwingend
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 32 32 32
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

pgp-agent

socket-Zugriff

Beim Abfragen des Kartenstatus mittels gpg –card-status, wird unter CentOS 6.x ein Fehlermeldung ausgegeben, dass die Datei für den Unix-Socket S.gpg-agent nicht gefunden wird.

 $ gpg --card-status
 can't connect to `/home/django/.gnupg/S.gpg-agent': Datei oder Verzeichnis nicht gefunden

Dies liegt zum einen daran, dass der pgp-agent nicht läuft. Startet man diesen mit:

 $ gpg-agent --daemon
 GPG_AGENT_INFO=/tmp/gpg-J5EWOb/S.gpg-agent:2792:1; export GPG_AGENT_INFO;

Sieht man aber, dass der Socket im Verzeichnis /tmp/gpg.. angelegt wird. Mit der Option –use-standard-socket können wir jedoch festlegen, dass der Socket im Verzecihnis ~/.gnupg/ angelegt wird und wir dann dort auf eben diesen Socket zugreifen können

 $ gpg-agent --daemon --use-standard-socket
 GPG_AGENT_INFO=/home/django/.gnupg/S.gpg-agent:2804:1; export GPG_AGENT_INFO;

Beim anschließenden Versuch, auf den Stick zuzugreifen, bekommen wir kein Fehlermeldung mehr.

automatischer Start

Damit nun der pgp-agent bei unserer Anmeldung am System automatisch mit der richtigen Option gestartet wird legen wir uns einen Autostarter an.

$ mkdir ~/.config/autostart/
$ vim ~/.config/autostart/gpg-agent-start.desktop
~/.config/autostart/gpg-agent-start.desktop
[Desktop Entry]
Type=Application
Exec=gpg-agent --daemon --use-standard-socket
Hidden=false
X-GNOME-Autostart-enabled=true
Name[de_DE]=GPG-Daemon
Name=GPG-Daemon
Comment[de_DE]=Starten des GPG-Daemon beim Systemstart
Comment=Starten des GPG-Daemon beim Systemstart

Alternativ können wir auch unter dem Menüpunkt [System][Einstellungen][Startprogramme] uns die vorgenannte Konfigurationsdatei erstellen (lassen).

Bildschirmhardcopy des Startprogramme Agenten

Einschränkung(en)

In dem vorgenannten Beispiel gibt es leider eine kleine Einschränkung, auf die nun noch hingewiesen wird. Hier wird davon ausgegangen, dass der CryptoStick sich während der kompletten Sitzung am System angesteckt bleibt. Zieht man den Stick ab und steckt diesen wieder an, so bekommt man wieder den bekannten Fehler präsentiert:

gpg: selecting openpgp failed: Kein passendes Gerät gefunden
gpg: OpenPGP Karte ist nicht vorhanden: Kein passendes Gerät gefunden

Wie dieser Makel umgangen werden kann, ist im folgenden Artikel beschrieben.

Variante 2

Da es mit unter sehr lästig werden kann, wenn der Stick des öfteren an- und wieder abgesteckt wird, ist im nachfolgenden Kapitel beschrieben in einem Beispiel beschrieben, wie wir das elegant umschiffen können. Um es gleich vorweg zu nehmen, wir unterstellen mal, dass an dem Rechner sich nur ein User aufhält und eben nur dieser auch einen CryptoStick verwendet.

Im Gegensatz zur zuvor beschriebenen Variante 1 verlagern wir hier das Starten des gpg-agent in Richtung udev-Regel.

gpg-agent recycle-script

Wir legen uns als erstes mal ein bin-Verzeichnis im Home-Verzeichnis unseres Users an.

 $ mdir ~/bin

Dort legen wir uns ein kleines Bash-Script an

$ vim ~/bin/gpg-agent-recycle
~/bin/gpg-agent-recycle
#!/bin/bash
# Variablen definieren

PID=$(/sbin/pidof -s /usr/bin/gpg-agent)

echo "Die PID des gpg-agenten lautet: "$PID

echo "Daemon stoppen: "
/bin/kill $PID

echo "Daemon neu starten: "
/usr/bin/gpg-agent --daemon --use-standard-socket

Im Anschluss statten wir nun noch das Script(chen) mit x-Rechten aus.

 $ chmod +x ~/bin/gpg-agent-recycle

Damit nun neben dem richtigen Treiber/Programm auch noch gleich passend unser gpg-agent gestartet werden kann oder eben dieser neu gestartet werden kann, legen wir uns noch eine geeignete udev-Regel an.

 $ vim /etc/udev/rules.d/40-cryptostick.rules
/etc/udev/rules.d/40-cryptostick.rules
# django: 2011-07-20
# udev-Regel für CryptoStick der GPF
ATTR{idVendor}=="20a0", ATTR{idProduct}=="4107", ENV{ID_SMARTCARD_READER}="1", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg", RUN+="/bin/su -c /home/django/bin/gpg-agent-recycle django"

Darin passen wir natürlich den Usernamen, in dem hier gezeigten Beispiel django unseren Bedürfnissen nach an.

Nun können wir unseren Cryptostick an- und abstecken, der Stick kann mit Hilfe des gpg-agenten immer angesprochen werden. So brauchen wir den Stick z.B. nur anstecken, wenn wir in Thunderbird eine Nachricht signieren oder entschlüsseln wollen.

Den Umgang mit dem CryptoStick im Windowsumfeld, im speziellen unter XP, widmet sich ein separates Kapitel.

Für die einzelnen Anwendungsfälle, gibt es auf den nachfolgenden Seiten ausführliche Beispiele:

  • Kartenverwaltung
    An Hand eines Beispieles wird erklärt, wie die User- und Admin-PIN verändert werden kann. Weiter wird beschrieben, wie die Schlüsselgenerierung erfolgen kann. Alternativ dazu wird auch auf eine GUI zur Kartenverwaltung eingegangen.
  • PGP in der Praxis
    Im Detail wird der Umgang beim Signieren, Verschlüsseln und Entschlüssen von Daten mit Hilfe des Cryptosticks in einzelnen Beispielen beschrieben.
  • X.509 Zertifikat auf dem CryptoStick
    Wie man ein X.509 Zertifikat am Beispiel eines CAcert-Zertifikats auf den Cryptostick generiert und später auch verwendet ist in diesem Kapitel beschrieben.
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
  • centos/cryptos.txt
  • Zuletzt geändert: 24.11.2018 16:45.
  • von django