Starke Authentifizierung durch Smartcards

Jede verwertbare Information ist wertvoll - das versteht sich von selbst. Alles, was wertvoll ist, ist auch schützenswert. Und jede (ungeschützte) elektronische Information ist verwertbar. Daraus folgt: Jede elektronische Information sollte geschützt werden. Wird sie aber nicht.

c't Artikel "Werttransporte" von 1996

In diesem Artikel möchte ich beschreiben was Smartcards sind und zeigen dass die Verwendung einer Open PGP SmartCard gar nicht so kompliziert sein brauch.

Das Ziel ist die Verwendung eines USB-Dongles um SSH-Verbindungen herzustellen sowie Dateien und E-Mails zu verschlüsseln und signieren.


Die Werkzeugkiste

  • Open PGP Smartcard im ID-000 Format:

Der private Schlüssel wird auf der Smartcard gespeichert und befindet sich somit nicht auf der Festplatte.

Die Smartcard erlaubt bis zu 3 Schlüssel zu verwalten.

Smartcard im ID-1 Format

Bild: Axel Reinhardt, Lizenz: Creative Commons Namensnennung, Weitergabe unter gleichen Bedingungen 3.0

Smartcards bzw. Chipkarten begegnen uns heutzutage in vielen Situationen. Eine Smartcard befinden sich im Telefon als SIM-Karte. Die Bankkarte ist eine Smartcard. Die Krankenkassenkarte ist eine Smartcard. Und wahrscheinlich auch dein Führerschein. In einigen Fällen authentifizierst du dich mit einer PIN.

Auf der Open PGP Smartcard werden die Schlüssel ebenfalls mit einer PIN gesichert. Nach 3 falsch Eingegebenen PINs ist die Karte gesperrt und kann mit der PUK wieder entsperrt werden.

  • Der Smartcard Reader: Identive SCT 3511

Der Smartcard Reader ist die Schnittstelle zwischen Computer und Smartcard. Praktischerweise kann der Reader vom Rechner entfernt werden.

Identive SCT 3511

Ich hab mein Geld in eine OPEN PGP SMARTCARD V2 im ID-000-Format gesteckt, mit dem dazugehörigen USB-Dongle.

Durch den Einsatz eines Dongles habe ich folgende Vorteile:

  • mein private Schlüssel wird nicht auf der Festplatte gespeichert
  • mein privater Schlüssel ist durch eine PIN geschützt
  • ich kann meinen privaten Schlüssel überall mitnehmen

Gleichzeitig brauche ich auf die Vorteile nicht zu verzichten:

  • Dateien mit PGP/GPG ver- und entschlüsseln
  • SSH-Keys verwalten

Ich habe beide Artikel auf www.cryptoshop.com bestellt und habe mit diesen E-Shop sehr gute Erfahrungen gemacht.


Die Vorbereitung

Es sollte immer gpg2 statt dem älteren gpg verwendet werden. Sonst kann es Probleme geben wenn sich mehrere Programme gleichzeitig authorisieren wollen (eine geöffnete SSH-Session und gleichzeitig eine E-Mail verschicken).

Installation von gpg2, den Smartcard-Daemon und Tools:

sudo apt-get install gnupg2 pcscd pcsc-tools opensc gpgsm  

Der pcscd Service kann anschließen mit folgenden Befehl gestartet werden:

sudo service pcscd restart  

Nun sollte der Reader gefunden werden:

$ opensc-tool --list-readers
# Detected readers (pcsc)
Nr.  Card  Features  Name  
0    Yes             SCM Microsystems Inc. SCR 3310 [CCID Interface] 00 00  

Ebenso kann mit pcsc_scan Informationen über die eingelegte Karte angezeigt werden.

Auch sollte es jetzt möglich sein den Kartenstatus mit gpg2 anzuzeigen:

gpg2 --card-status  

Damit wären alle Vorbereitungen für das Verschlüsseln von E-Mails und Dateien getan.

Um allerdings SSH mit den GPG-Schlüssel zu verwenden, muss der folgende Eintrag der Datei ~/.gnupg/gpg-agent.conf hinzugefügt werden:

enable-ssh-support  
default-cache-ttl 18000  
max-cache-ttl 86400  
ignore-cache-for-signing  

Der folgende Eintrag in der Datei ~/.profile sorgt dann dafür, dass der gpg-agent immer läuft und dieser auch den ssh-agent bereit stellt:

gpg-agent --daemon --enable-ssh-support \  
      --write-env-file "${HOME}/.gpg-agent-info"
if [ -f "${HOME}/.gpg-agent-info" ]; then  
   . "${HOME}/.gpg-agent-info"
  export GPG_AGENT_INFO
  export SSH_AUTH_SOCK
  export SSH_AGENT_PID
fi  

Damit ist das Setup fast abgeschlossen.

Jetzt kann auf der Smartcard der Schlüssel abgelegt werden. Wie das geht wird im in dem Howto der FSF besser erklärt als ich das könnte.


Die Verwendung

Mit folgenden Befehl lässt sich jetzt der SSH public-key anzeigen:

$ ssh-add -L

Diesen key kann man jetzt wie gewohnt in die .ssh/authorized_keys des Ziel-Host eintragen.

Dann kann sich per ssh zum Zielrechner verbunden werden. Bei der ersten Verwendung gibt man seine PIN ein und man ist verbunden. Es befindet sich kein private key auf der Festplatte.

Smartcard und Dongle