GnuPG Anleitung - Seite 10

OpenPGP Smartcard und Crypto Stick

Einleitung

Der Crypto Stick, der im Auftrag des (aufgelösten) German Privacy Foundation Vereins entwickelt wurde, ist eine Kombination aus einer USB-Schnittstelle und einer OpenPGP Smartcard, die auf der Platine im Gehäuse des Sticks verbaut ist. Der Vorteil des Crypto Sticks gegenüber einer reinen OpenPGP Smartcard liegt darin, dass man kein zur OpenPGP Smartcard kompatibles Smartcard Lesegerät benötigt, sondern den Crypto Stick an jedem Computer mit kompatiblen USB-Ports einstecken und nutzen kann. Hinzu kommt die gute Transportierbarkeit und das gewohnte Handling aufgrund des USB-Stick Formats.

Hinten normaler USB-Stick, vorne Crypto Stick der GPF

Auf der integrierten OpenPGP Smartcard werden mit GnuPG 2 OpenPGP Schlüsselpaare erzeugt, verschlüsselt gespeichert und verwaltet. Im Gegensatz zur herkömmlichen Anwendung von GnuPG auf einem Computer also nicht auf dem Rechner, sondern extern und direkt auf der Smartcard. Zusätzlich können bei bereits existierenden Schlüsselpaaren auf dem Computer private Schlüssel auf die Smartcard transferiert und dort sicher gespeichert werden, wobei für die privaten Schlüssel in der Schlüsselringdatei auf dem Computer nur noch ein Verweis ("stub") auf die Smartcard verbleibt.

Ist der Crypto Stick in einen USB-Port des Computers oder eines USB-Hubs eingesteckt, kann man mit GnuPG wie gewohnt Daten signieren, ver- und entschlüsseln oder andere Schlüssel zertifizieren. Das trifft auch auf Internet-Anwendungen mit Unterstützung von OpenPGP Smartcards und GnuPG 2 zu. Ein Beispiel ist die Thunderbird E-Mail Anwendung mit der Enigmail Erweiterung, mit denen man per GnuPG 2 und dem Crypto Stick E-Mails signieren, ver- und entschlüsseln kann. Darüber hinaus sind Anwendungen zur Benutzer-Authentifizierung und "Pre-Boot" Authentifizierung bzw. Entschlüsselung verschlüsselter Festplatten angedacht und z. T. bereits möglich.

Der zukünftige Crypto Stick 2.0 wird zusätzlich Daten-Speicher bereitstellen, um Daten direkt im Crypto Stick verschlüsselt speichern zu können.

Bisherige Unterschiede zu OpenPGP Schlüsseln auf dem Computer:

  • beschränkt auf RSA Schlüssel mit max. Schlüssellänge von 3072-bit, keine Unterstützung für DSA und Elgamal Schlüsel.

System-Einrichtung

GnuPG 2 und GPG-Agent

Die Verwendung des Crypto Sticks setzt den Einsatz von GnuPG 2, GPG-Agent und GnuPG Smartcard-Daemon voraus. Falls bereits GnuPG 1 installiert bzw. GnuPG 1 nicht deinstalliert werden soll, muss man das System auf GnuPG 2 umstellen und den GPG-Agent einrichten.

Ubuntu Linux

Pakete installieren

Benötigte Pakete:

  • PC/SC-Daemon (pcscd)
  • PC/SC-Bibliothek (libpcsclite)
  • PC/SC IFD/CCID-Treiber (libccid)
  • GnuPG 2 (gnupg2)
  • GPG-Agent (gnupg-agent)
  • GnuPG Smartcard-Daemon (scdaemon in gpgsm)
  • GnuPG-PIN-Eingabe (pinentry-* *möglich: -qt4/-gtk2/-curses)
sudo aptitude install pcscd libpcsclite1 libccid gnupg2 gnupg-agent gpgsm pinentry-curses pinentry-qt4
Pakete ggf. deinstallieren

Pakete:

  • OpenCT IFD-Treiber (openct)
  • OpenSC Smartcard Bibliotheken und Tools (opensc)
sudo aptitude purge openct opensc

Windows 7

Für den Crypto Stick wird von Windows 7 automatisch der "Microsoft Usbccid-Smartcard-Leser" installiert, sobald der Crypto Stick erstmalig eingesteckt wird. Daneben benötigt Windows 7 einen Treiber für die OpenPGP Smartcard im Crypto Stick selbst. Dafür wird der Treiber des OpenPGP Smartcard mini driver Projekts heruntergeladen.

Nach Auswahl von Installieren im Kontextmenü der OpenPGPmdrv-version-plattform.msi Datei wird der Treiber installiert. Dabei müssen etwaigige Warnmeldungen ignoriert bzw. bestätigt werden, weil der Treiber u. a. nicht signiert ist. Nach Installation des Treibers und mit eingestecktem Crypto Stick erscheinen die Treiber für "Smartcard-Leser" und OpenPGP Smartcard im Geräte-Manager:

Mit der folgenden gpg-agent.conf im GnuPG Heimatverzeichnis wird der GPG-Agent gestartet:

gpg-agent.conf

pinentry-program C:\Programme\GNU\GnuPG\pinentry-gtk-2.exe
scdaemon-program C:\Programme\GNU\GnuPG\scdaemon.exe
default-cache-ttl 1800
use-standard-socket
verbose

In der Eingabeaufforderung ist auch zu sehen, dass der GPG-Agent den GnuPG Smartcard-Daemon ("SCdaemon") startet, als auf die Smartcard zugegriffen wird.

Im GPA mit gestartetem Kartenmanager sieht man, dass die OpenPGP Smartcard ausgelesen wird und der Crypto Stick ansprechbar ist bzw. die gleichen Ausgaben wie unter Linux:

Smartcard-Management

Kommandos

Informationen über Ansprechbarkeit, Inhalt, Einstellungen:

gpg --card-status

Application ID ...: D2760001240102000005000002E40000
Version ..........: 2.0
Manufacturer .....: ZeitControl
Serial number ....: 000002E4
Name of cardholder: Test Test
Language prefs ...: de
Sex ..............: männlich
URL of public key : [nicht gesetzt]
Login data .......: [nicht gesetzt]
Signature PIN ....: zwingend
Key attributes ...: 3072R 3072R 3072R
Max. PIN lengths .: 32 32 32
PIN retry counter : 3 3 3
Signature counter : 5
Signature key ....: 8266 1067 1E33 87C4 5A0D  72D5 A0AC 386C 2DAC E827
      created ....: 2012-03-31 05:53:32
Encryption key....: FEF9 C9ED CAC7 2D3A 0268  C73B D7AE 6113 0B94 712C
      created ....: 2012-03-31 05:53:32
Authentication key: C612 2C09 8781 4B6E 1DEF  319E EE71 7A0D EB0F 3D2F
      created ....: 2012-03-31 05:53:32
General key info..: pub  3072R/0xA0AC386C2DACE827 2012-03-31 Test3 Test3 <test3@test.de>
sec>  3072R/0xA0AC386C2DACE827  erzeugt: 2012-03-31  verfällt: niemals
                      Kartennummer: 0005 000002E4
ssb>  3072R/0xEE717A0DEB0F3D2F  erzeugt: 2012-03-31  verfällt: niemals
                      Kartennummer: 0005 000002E4
ssb>  3072R/0xD7AE61130B94712C  erzeugt: 2012-03-31  verfällt: niemals
                      Kartennummer: 0005 000002E4

Schlüssel erzeugen, löschen, editieren und Einstellungen ändern:

gpg --card-edit

Mit help werden zunächst die Kommandos im Benutzer-Modus angezeigt:

gpg/card> help
quit       Menü verlassen
admin      Zeige Admin-Befehle
list       Alle vorhandenen Daten auflisten
fetch      Holen des Schlüssels mittels der URL auf der Karte
passwd     Menü für Ändern oder Entsperren der PIN
verify     überprüfe die PIN und liste alle Daten auf
unblock    die PIN mit dem Rückstellcode wieder freigeben

Die erweiterten Kommandos im Admin-Modus werden mit admin freigeschaltet:

gpg/card> admin
Admin-Befehle sind erlaubt

gpg/card> help
quit       Menü verlassen
admin      Zeige Admin-Befehle
help       Diese Hilfe zeigen
list       Alle vorhandenen Daten auflisten
name       Kartenbesitzernamen ändern
url        Schlüssel-holen-URL ändern
fetch      Holen des Schlüssels mittels der URL auf der Karte
login      Ändern der Logindaten
lang       Ändern der Spracheinstellungen
sex        Ändern des Geschlechts des Kartenbesitzers
cafpr      Ändern des CA-Fingerabdrucks
forcesig   Umschalten des "Signature-force-PIN"-Schalters
generate   neue Schlüssel erzeugen
passwd     Menü für Ändern oder Entsperren der PIN
verify     überprüfe die PIN und liste alle Daten auf
unblock    die PIN mit dem Rückstellcode wieder freigeben

Vor Operationen mit der Smartcard empfiehlt es sich, den GPG-Agent Zwischenspeicher zu leeren oder bei regelmäßiger Verwendung des Crypto Stick mit der default-cache-ttl 0 Option überhaupt keinen Zwischenspeicher zu nutzen.

Alternativ und grafisch können die Daten und Schlüssel auf dem Crypto Stick mit der Enigmail Erweiterung in Thunderbird bearbeitet werden. Dazu ruft man bei eingestecktem Crypto Stick Smartcard verwalten im OpenPGP Menü auf.

Enigmail Smartcard Manager

Mit dem Kartenmanager des GPA können ebenfalls Informationen grafisch eingeholt und Daten bearbeitet werden:

GPA Kartenmanager

PINs

Wurde der Crypto Stick erkannt, wird zuerst die 6-stellige Standard-PIN für die normale Benutzung (123456) und die 8-stellige Standard-PIN für den Admin-Modus (12345678), die bereits auf der Karte gespeichert sind, auf persönliche PINs bzw. Passphrases mit bis zu 32 Zeichen geändert, denn als neue "PINs" sind nicht nur Zahlenreihen wie im Auslieferungszustand möglich.

gpg --card-edit
gpg/card> admin
gpg/card> passwd

oder

gpg --change-pin

Danach wird bei beiden Methoden ein Menü angezeigt:

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Nach Eingabe von 1 und danach 3 wird zuerst die Standard-PIN eingegeben und danach zweimalig die neue PIN. Mit laufendem GPG-Agent und entsprechender pinentry Anwendung werden für PIN Eingaben wie die Passphrase Eingaben bei GnuPG über grafische Eingabe-Fenster vorgenommen.

Mit 2 und Eingabe der Admin-PIN kann eine Benutzer-PIN wieder freigeschaltet werden, die blockiert wurde, weil die Benutzer-PIN dreimal falsch eingeben wurde. Wird die Admin-PIN dreimal falsch eingeben, ist der Crypto Stick unbrauchbar.

Mit 4 kann eine Rücksetzungs-PIN vergeben werden, mit dem der Benutzer bei Kenntnis der Rücksetzungs-PIN später seine eigene Benutzer-PIN wieder freischalten kann, ohne die Admin-PIN kennen zu müssen.

Soll für jede Signierung die PIN/Passphrase erneut abgefragt werden, belässt man es bei der zwingend Einstellung für Signature PIN. Soll stattdessen eine bereits eingegebene PIN/Passphrase zwischengespeichert und für Signierungen aus dem Zwischenspeicher verwendet werden, stellt man die Signature PIN Einstellung um:

gpg --card-edit
gpg/card> admin
gpg/card> forcesig

Personalisierung

Man kann den Crypto Stick personalisieren. Neben dem Vor- und Nachnamen (nur Zeichen des ASCII-Zeichensatzes) kann zusätzlich die bevorzugte Sprache und das Geschlecht angegeben werden, wobei die Daten von GnuPG nicht "veröffentlicht" bzw. bei kryptografischen Anwendungen verwendet werden.

gpg --card-edit
gpg/card> admin

gpg/card> name
Familienname des Kartenbesitzers: Test
Vorname des Kartenbesitzers: Test

gpg/card> lang
Spracheinstellungen de

gpg/card> sex
Geschlecht: (Männlich (M), Weiblich (F) oder Leerzeichen): m

Schlüssel

Mit dem Crypto Stick kann man

  • einen Hauptschlüssel zur Signierung/Zertifizierung (SC) mit einem Unterschlüssel zur Verschlüsselung (E) und einem Unterschlüssel zur Authentifizierung (A) direkt auf der Smartcard erstellen
  • einen privaten Hauptschlüssel oder die privaten Unterschlüssel eines Schlüssels im GnuPG Schlüsselring mit keytocard auf die Smartcard transferieren
  • die (E) und (A) Unterschlüssel auf der Smartcard erstellen und sie mit addcardkey einem Hauptschlüssel im GnuPG Schlüsselring zuordnen

Es bietet sich an, direkt nach der Schlüsselerstellung auch für Schlüssel auf der Smartcard Widerrufszertifikate auszustellen.

Gesamtschlüssel auf Smartcard

Vor der Erstellung der Schlüssel muss die Admin-PIN und die Benutzer-PIN eingegeben werden. Nach der Erstellung werden die öffentlichen Schlüssel in der öffentlichen Schlüsselringdatei gespeichert und in der privaten Schlüsselringdatei die Verweise ("stubs") zu den privaten Schlüsseln auf der Smartcard angelegt.

Während der Erstellung kann ein symmetrisch verschlüsseltes Backup des privaten Verschlüsselungsschlüssel in die sk_Schlüssel-ID.gpg Datei im GnuPG Heimatverzeichnis angelegt werden, für das eine Passphrase vergeben wird. Falls der private Verschlüsselungsschlüssel auf der Smartcard nicht mehr zugänglich ist, weil z. B. der Crypto Stick beschädigt oder gestohlen wurde, kann man über die Backup-Datei den privaten Verschlüsselungsschlüssel wieder auf die Smartcard zurückspielen, um zumindest nachträglich mit dem Schlüssel verschlüsselte Daten wieder entschlüsseln zu können.

gpg --card-edit
gpg/card> admin
gpg/card> generate
Sicherung des Verschlüsselungsschlüssel außerhalb der Karte erstellen? (J/n) j

Welche Schlüssellänge wünschen Sie für den Signatur-Schlüssel? (3072) 3072
Welche Schlüssellänge wünschen Sie für den Verschlüsselungs-Schlüssel? (3072) 3072
Welche Schlüssellänge wünschen Sie für den Authentisierungs-Schlüssel? (3072) 3072

Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.
         0 = Schlüssel verfällt nie
      <n>  = Schlüssel verfällt nach n Tagen
      <n>w = Schlüssel verfällt nach n Wochen
      <n>m = Schlüssel verfällt nach n Monaten
      <n>y = Schlüssel verfällt nach n Jahren
Wie lange bleibt der Schlüssel gültig? (0) 0
Schlüssel verfällt nie
Ist dies richtig? (j/N) j

GnuPG erstellt eine User-ID um Ihren Schlüssel identifizierbar zu machen.

Ihr Name ("Vorname Nachname"): Test3 Test3
Email-Adresse: test3@test.de
Kommentar:
Sie haben diese User-ID gewählt:
    "Test3 Test3 <test3@test.de>"

Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(A)bbrechen? f

Sie benötigen eine Passphrase, um den geheimen Schlüssel zu schützen.

gpg: Hinweis: Sicherung des Kartenschlüssels wurde auf
`/home/benutzer/.gnupg/sk_D7AE61130B94712C.gpg' gespeichert

gpg: schreiben des öffentlichen Schlüssels nach '/home/benutzere/.gnupg/pubring.gpg'
gpg: schreiben des geheimen Schlüssel-"stub"s nach `/home/benutzer/.gnupg/secring.gpg'

pub   3072R/0xA0AC386C2DACE827 2012-03-31
      Schl.-Fingerabdruck = 8266 1067 1E33 87C4 5A0D  72D5 A0AC 386C 2DAC E827
uid                 [ uneing.] Test3 Test3 <test3@test.de>
sub   3072R/0xEE717A0DEB0F3D2F 2012-03-31
sub   3072R/0xD7AE61130B94712C 2012-03-31

Schlüssel auf Smartcard transferieren

Befinden sich bereits Schlüssel auf der Smartcard, werden sie durch die transferierten Schlüssel ersetzt, denn auf der Smartcard gibt es ja nur drei Speicherräume bzw. Schlüsselplätze (Signature, Encryption und Authentication Key). Vor der Transferierung fragt GnuPG, welcher Speicherraum für den zu transferierenden Schlüssel als Schlüsselplatz auf der Smartcard genutzt werden soll.

Es bietet sich an, vor der Transferierung ein Backup der Schlüssel anzulegen, indem man die privaten Schlüssel exportiert bzw. mit dem GPA eine Sicherheitskopie anlegt.

Hauptschlüssel
gpg --edit-key Schlüssel-ID
gpg> toggle

sec 1024R/0xACD839B5AE7815B4 erzeugt: 2012-03-31 verfällt: niemals
ssb 1024R/0x01189C6ABA5CA8DF erzeugt: 2012-03-31 verfällt: niemals
ssb 1024R/0xA587CD1D29E8DAC3 erzeugt: 2012-03-31 verfällt: niemals

gpg> keytocard
Unterschlüssel
gpg --edit-key Schlüssel-ID
gpg> toggle

sec 1024R/0xACD839B5AE7815B4 erzeugt: 2012-03-31 verfällt: niemals
ssb 1024R/0x01189C6ABA5CA8DF erzeugt: 2012-03-31 verfällt: niemals
ssb 1024R/0xA587CD1D29E8DAC3 erzeugt: 2012-03-31 verfällt: niemals

gpg> key 1

sec 1024R/0xACD839B5AE7815B4 erzeugt: 2012-03-31 verfällt: niemals
*ssb 1024R/0x01189C6ABA5CA8DF erzeugt: 2012-03-31 verfällt: niemals
ssb 1024R/0xA587CD1D29E8DAC3 erzeugt: 2012-03-31 verfällt: niemals

gpg> keytocard

Mit der Anzeige der privaten Schlüssel wird auch die Seriennummer der Smartcard unter dem Schlüssel ausgegeben, dessen privater Schlüssel auf die Smartcard transferiert wurde:

gpg --list-secret-keys 0xACD839B5AE7815B4

sec>  1024R/0xACD839B5AE7815B4 2012-03-31
      Kartenseriennr. = 0005 000002E4
ssb   1024R/0x01189C6ABA5CA8DF 2012-03-31
ssb   1024R/0xA587CD1D29E8DAC3 2012-03-31

In der GPA Schlüsselverwaltung sind Schlüssel, deren private Haupt- oder Unterschlüssel auf die Smartcard transferiert wurden, sofort erkennbar:

Unterschlüssel auf Smartcard

Hier wird als Beispiel für einen (SC) Hauptschlüssel ein Unterschlüssel zum Verschlüsseln (E) auf der Smartcard erstellt und dem Hauptschlüssel zugeordnet.

gpg --edit-key Schlüssel-ID

pub 2048R/0x235FB4F427A3E7F4 erzeugt: 2012-03-31 verfällt: niemals Aufruf: SC
[ uneing.] (1). Test5 Test5 <test5@test.de>

gpg> addcardkey

Bitte wählen Sie die Art des Schlüssel, der erzeugt werden soll:
   (1) Signatur-Schlüssel
   (2) Verschlüsselungs-Schlüssel
   (3) Authentisierungs-Schlüssel
Ihre Auswahl? 2
gpg --edit-key 0x235FB4F427A3E7F4

pub 2048R/0x235FB4F427A3E7F4 erzeugt: 2012-03-31 verfällt: niemals Aufruf: SC
sub 2048R/0xEDBA7F476A23945C erzeugt: 2012-03-31 verfällt: niemals Aufruf: E
[ uneing.] (1). Test5 Test5 <test5@test.de>

gpg> toggle

sec 2048R/0x235FB4F427A3E7F4 erzeugt: 2012-03-31 verfällt: niemals
ssb 2048R/0xEDBA7F476A23945C erzeugt: 2012-03-31 verfällt: niemals
                     Kartennummer: 0005 000002E4
(1)  Test5 Test5 <test5@test.de>

Backup zurückspielen

Um einen privaten Verschlüsselungsschlüssel wieder auf die Smartcard zurückzuspielen, muss als Voraussetzung die Backup-Datei während der Schlüsselerstellung angelegt worden sein und sich der entsprechende öffentliche Schlüssel im öffentlichen Schlüsselring befinden.

gpg --edit-key Schlüssel-ID
gpg> toggle
gpg> bkuptocard /pfad/sk_Schlüssel-ID.gpg

Wählen Sie den Speicherort für den Schlüssel:
   (1) Signatur-Schlüssel
   (2) Verschlüsselungs-Schlüssel
   (3) Authentisierungs-Schlüssel
Ihre Auswahl? 2

Verweise auf aktuelle Seite