GnuPG Anleitung - Seite 10

OpenPGP Smartcard / USB-Stick

Einleitung

Der Crypto Stick, der im Auftrag des (aufgelösten) German Privacy Foundation Vereins entwickelt wurde, war die 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. 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 Nachfolger des Crypto Sticks ist seit 2015 der Nitrokey, den es in verschiedenen Varianten gibt, u. a. mit zusätzlichen Daten-Speicher, OTP oder FIDO U2F. Die untenstehenden Vorgehensweisen für das Smartcard-Management gelten auch für YubiKey.

System-Einrichtung

GnuPG 2 und GPG-Agent

Die Verwendung von OpenPGP Smartcards bzw. USB-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.

Pakete installieren

Benötigte Pakete:

  • PC/SC-Daemon (pcscd)
  • PC/SC-Bibliothek (libpcsclite)
  • PC/SC IFD/CCID-Treiber (libccid)
sudo aptitude install pcscd libpcsclite1 libccid
Pakete ggf. deinstallieren

Pakete:

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

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

Falls die Karte nicht erkannt wird, mit folgender Konfiguration für den GnuPG Smartcard-Daemon probieren:

~/.gnupg/scdaemon.conf
debug-level expert
debug-ccid-driver
disable-ccid oder pcsc-shared
log-file /pfad/scdaemon.log                                    

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 mit der default-cache-ttl 0 Option überhaupt keinen Zwischenspeicher zu nutzen.

Alternativ und grafisch können die Daten und Schlüssel auf der OpenPGP Smartcard mit dem GPA Kartenmanager eingesehen und bearbeitet werden:

GPA Kartenmanager

PINs

Wurde die OpenPGP Smartcard 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, wird die OpenPGP-Funktion der USB-Sticks 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 OpenPGP Smartcards 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

Man kann

  • 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 die Smartcard z. B. beschädigt oder der USB-Stick 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 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