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.
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:
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