Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
public:gnupg:gnupg-card-howto [2015/01/06 14:31] – ungewitter | public:gnupg:gnupg-card-howto [2024/07/29 11:40] (aktuell) – [Hauptkey mit Subkeys] jankow@datenkollektiv.net | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
<WRAP center round box> | <WRAP center round box> | ||
+ | |||
===== Andere Anleitungen ===== | ===== Andere Anleitungen ===== | ||
Zeile 8: | Zeile 9: | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
- | * | + | * |
==== Best Practice (Nutzung von Haupt- und Subkeys) für gnupg ==== | ==== Best Practice (Nutzung von Haupt- und Subkeys) für gnupg ==== | ||
- | * http:// | + | * [[http:// |
- | * http:// | + | * [[http:// |
- | * http:// | + | * [[http:// |
- | * https:// | + | * [[http:// |
- | * http:// | + | * [[https:// |
+ | * [[http:// | ||
</ | </ | ||
- | ====== Grundsätzliche Infos über Smart Cards ====== | + | ===== Nutzung der Gnupg Card ===== |
+ | |||
+ | * Die verschiedenen [[: | ||
+ | |||
+ | ===== Grundsätzliche Infos über Smart Cards ===== | ||
Sogenannte Smart Cards können zur Authentifizierung, | Sogenannte Smart Cards können zur Authentifizierung, | ||
Zeile 24: | Zeile 32: | ||
Es gibt zwei unterschiedliche Konzepte: | Es gibt zwei unterschiedliche Konzepte: | ||
- | * Die "pki cards" (PKCS#11), siehe hier: [[https:// | + | * Die "pki cards" (PKCS#11), siehe hier: [[https:// |
- | * und die vor allem unter Linux sehr gut nutzbaren Gnupg-Cards [[https:// | + | * und die vor allem unter Linux sehr gut nutzbaren Gnupg-Cards [[https:// |
Während erstere den Quasi-Standard für x509 Zertfikate und eine [[http:// | Während erstere den Quasi-Standard für x509 Zertfikate und eine [[http:// | ||
Zeile 31: | Zeile 39: | ||
Ähnliche Konzpete verfolgen auch | Ähnliche Konzpete verfolgen auch | ||
- | * der [[http:// | + | * der [[http:// |
+ | - eine Mischung aus USB-smartcard und One-Time-Password Generator | ||
* und der [[https:// | * und der [[https:// | ||
Zeile 40: | Zeile 49: | ||
Unterschiede der verschiedenen Systeme: | Unterschiede der verschiedenen Systeme: | ||
- | | **System** | **Vorteile** | **Nachteile**| | + | |**System** |**Vorteile** |**Nachteile** | |
- | | Gnupg Card | Karten leicher erhältlich und preiswerter. Unterstützung unter Linux einfacher | Authentifizierung mit Clients wie Thunderbird etc. nicht so einfach | + | |Gnupg Card|Karten leicher erhältlich und preiswerter. Unterstützung unter Linux einfacher|Authentifizierung mit Clients wie Thunderbird etc. nicht so einfach| |
- | | PKCS#11 | De Facto Standard | komplizierter in der Einrichtung, | + | |PKCS#11|De Facto Standard|komplizierter in der Einrichtung, |
- | Vor- und Nachteile sind z.B. hier diskutiert worden: http:// | + | Vor- und Nachteile sind z.B. hier diskutiert worden: |
</ | </ | ||
Zeile 57: | Zeile 66: | ||
* einen kompatiblen [[https:// | * einen kompatiblen [[https:// | ||
- | Beides ist am einfachsten | + | Beides ist am einfachsten |
===== Software installieren ===== | ===== Software installieren ===== | ||
Zeile 64: | Zeile 72: | ||
Als erstes installieren wir die Software. Wichtig: die gnupg-card funktioniert nur mit gnupg Version 2. | Als erstes installieren wir die Software. Wichtig: die gnupg-card funktioniert nur mit gnupg Version 2. | ||
- | | + | < |
+ | apt-get install gnupg2 scdaemon gpgsm pcscd | ||
+ | </ | ||
<WRAP center round box> | <WRAP center round box> | ||
Wenn der [[http:// | Wenn der [[http:// | ||
- | | + | < |
+ | apt-get install gnupg-pkcs11-scd | ||
+ | </ | ||
</ | </ | ||
===== Card-Reader einrichten ===== | ===== Card-Reader einrichten ===== | ||
- | |||
In der [[https:// | In der [[https:// | ||
- | <WRAP center round info> | + | <WRAP center round info> Unter Debian Wheezy war das für den Gemalteo Shell Token nicht nötig. Der Card-Reader funktionierte nach der Installation der Software "Out of the Box" |
- | Unter Debian Wheezy war das nicht nötig. Der Card-Reader funktionierte nach der Installation der Software "Out of the Box". | + | |
- | </ | + | |
Das Device des Card-Readers muss die richtigen Dateirechte erhalten, damit die User darauf zugreifen können. Das erfolgt mittels udev und wird [[http:// | Das Device des Card-Readers muss die richtigen Dateirechte erhalten, damit die User darauf zugreifen können. Das erfolgt mittels udev und wird [[http:// | ||
Zeile 85: | Zeile 96: | ||
Als schneller Workaroundzum Testen oder zur Nutzung innerhalb von Live-Systemen (zur sicheren Generierung der Schlüssel) kann das folgendermaßen getan werden | Als schneller Workaroundzum Testen oder zur Nutzung innerhalb von Live-Systemen (zur sicheren Generierung der Schlüssel) kann das folgendermaßen getan werden | ||
- | | + | < |
- | Bus 001 Device 008: ID ... Card-Reader .... | + | lsusb |
- | + | Bus 001 Device 008: ID ... Card-Reader .... | |
+ | </ | ||
damit wissen wir die Bus und Device ID: | damit wissen wir die Bus und Device ID: | ||
- | | + | < |
- | + | ls -l / | |
- | als temporärer Workaround: | + | </ |
- | | + | als temporärer Workaround: |
+ | |||
+ | < | ||
+ | chmod 666 / | ||
+ | </ | ||
===== Schlüssel erzeugen und auf Karte transferrieren ===== | ===== Schlüssel erzeugen und auf Karte transferrieren ===== | ||
Zeile 105: | Zeile 122: | ||
==== Hauptkey mit Subkeys ==== | ==== Hauptkey mit Subkeys ==== | ||
- | * Eine ausführlichere Anleitung (incl. Backup der keys findet sich hier: http:// | + | * Eine ausführlichere Anleitung (incl. Backup der keys findet sich hier: [[http:// |
- | Das Generieren der Schlüsselpaare findet vorzugsweise auf einem [[http:// | + | Das Generieren der Schlüsselpaare findet vorzugsweise auf einem [[http:// |
* vertrauensvolle Hardware | * vertrauensvolle Hardware | ||
- | * Live-System möglichst ohne Netzwerkverbindungen | + | * Live-System möglichst ohne Netzwerkverbindungen |
- | + | ||
- | Ein angepasstes Live-System mit aller nötigen Software sowohl zum Erzeugen der Keys als auch für die Verwendung der Gnupg-Karte kann beim Datenkollektiv bestellt werden. | + | |
- | + | ||
- | Ihr erhaltet einen USB-Stick mit | + | |
- | + | ||
- | * angepasstem xfce4 Desktop und allen nötigen Crypto-Tools | + | |
- | * einer zusätzlichen LUKS-verschlüsselten Partition, die z.B. für die Backups der privaten Schlüssel dienen kann. | + | |
=== Hauptschlüssel-Paar generieren: === | === Hauptschlüssel-Paar generieren: === | ||
Zeile 125: | Zeile 135: | ||
Als erstes wird der Hauptschlüssel erstellt, der nur zum Signieren der Unterschlüssel dient: | Als erstes wird der Hauptschlüssel erstellt, der nur zum Signieren der Unterschlüssel dient: | ||
- | gpg2 --gen-key | + | < |
- | + | gpg --full-generate-key | |
+ | </ | ||
Bei der Auswahl: | Bei der Auswahl: | ||
- | | + | |
+ | < | ||
+ | RSA (sign only) | ||
+ | </ | ||
* ggf. unbegrenzte Haltbarkeit | * ggf. unbegrenzte Haltbarkeit | ||
Zeile 136: | Zeile 151: | ||
Mit | Mit | ||
- | | + | < |
+ | gpg --list-keys | ||
+ | </ | ||
finden wir unsere neue Key-ID heraus. Diese nutzen wir nun zum Editieren des Schlüssels: | finden wir unsere neue Key-ID heraus. Diese nutzen wir nun zum Editieren des Schlüssels: | ||
- | | + | < |
+ | gpg --expert --edit-key KEYIDXYZ | ||
+ | </ | ||
Im Anschluss generieren wir drei Subkeys für folgende Zwecke: | Im Anschluss generieren wir drei Subkeys für folgende Zwecke: | ||
Zeile 148: | Zeile 167: | ||
- Authentifizieren | - Authentifizieren | ||
- | | + | < |
+ | gpg> | ||
+ | </ | ||
- | legt einen neuen Subschlüssel an. Wir müssen jetzt je einen zum Signieren, Verschlüsseln und Authentifizieren anlegen, d.h. die folgende Prozedur wird **dreimal** wiederholt. | + | legt einen neuen Subschlüssel an. Wir müssen jetzt je einen zum Signieren, Verschlüsseln und Authentifizieren anlegen, d.h. die folgende Prozedur wird **dreimal** |
Bei der folgenden Auswahl: | Bei der folgenden Auswahl: | ||
Zeile 169: | Zeile 190: | ||
Jetzt kann mit den angegebenen Buchstaben jeweils eine Fähigkeit zu- oder abgeschaltet werden. | Jetzt kann mit den angegebenen Buchstaben jeweils eine Fähigkeit zu- oder abgeschaltet werden. | ||
- | Zuletzt sichert ein | + | Zuletzt sichert ein |
- | | + | < |
+ | gpg> save | ||
+ | </ | ||
unsere Änderungen. | unsere Änderungen. | ||
+ | |||
+ | ==== Backup ==== | ||
+ | |||
+ | Dieser Schritt muss unbedingt vorgenommen werden, **bevor** | ||
+ | |||
+ | * Der gesamte Keyring (Unterverzeichnis .gnupg) sollte nach der Prozedur auf ein verschlüsseltes Medium bzw. in einem Container gesichert werden. | ||
+ | |||
+ | * eine weitere Variante zum Backup von Keys ist [[http:// | ||
+ | - ein Programm um ausdruckbare Daten zu erhalten und den key auf Papier auszudrucken. | ||
==== Schlüssel auf die Gnupg-Karte kopieren ==== | ==== Schlüssel auf die Gnupg-Karte kopieren ==== | ||
+ | |||
+ | <WRAP center round important> | ||
Im nächsten Schritt kopieren wir unsere Subkeys auf die gnupg-Karte. Hierfür benötigen wir das Passwort für den geheimen Hauptschlüssel und die Admin-Pin für die Karte. | Im nächsten Schritt kopieren wir unsere Subkeys auf die gnupg-Karte. Hierfür benötigen wir das Passwort für den geheimen Hauptschlüssel und die Admin-Pin für die Karte. | ||
- | | + | < |
+ | gpg --expert --edit-key KEYIDXYZ | ||
+ | </ | ||
Ein | Ein | ||
- | | + | < |
+ | gpg> toggle | ||
+ | </ | ||
schaltet in die Ansicht der privaten Schlüssel um. | schaltet in die Ansicht der privaten Schlüssel um. | ||
Zeile 189: | Zeile 227: | ||
Jetzt markieren wir der Reihe nach unsere Subkeys: | Jetzt markieren wir der Reihe nach unsere Subkeys: | ||
- | | + | < |
+ | gpg> key 1 | ||
+ | </ | ||
und kopieren sie auf die Karte: | und kopieren sie auf die Karte: | ||
- | | + | < |
+ | gpg> keytocard | ||
+ | </ | ||
Das wiederholen wir jetzt mit Schlüssel 2 u. 3. (Die Schlüssel müssen jeweils wieder entsperrt werden.) | Das wiederholen wir jetzt mit Schlüssel 2 u. 3. (Die Schlüssel müssen jeweils wieder entsperrt werden.) | ||
- | ===== Backup ===== | + | ==== öffentlichen Schlüssel exportieren |
- | * Der gesamte Keyring | + | Den öffentlichen Schlüssel |
- | * eine weitere Variante zum Backup von Keys ist [[http:// | + | < |
+ | gpg --export | ||
+ | </code> | ||
- | ===== Nutzung zum Signieren / Verschlüsseln ===== | + | ==== Geheimen Schlüsselbund auf den Nutzer_innen Rechnern erstellen |
- | ===== Nutzung für ssh ===== | + | Auch wenn die geheimen Schlüssel nun auf der Karte sind - und nicht auf den jeweiligen Computern: dennoch muss ein Schlüsselbund mit den Verweisen auf die geheimen Schlüsseln auf die Karte erstellt werden. |
- | * http:// | + | Während bei Smartcards, die von '' |
- | * http:// | + | |
- | * https:// | + | |
+ | < | ||
+ | gpg --card-status | ||
+ | </ | ||
- | Wir müssen ssh-Support im gpg-agent konfigurieren: | + | reicht, um Verweise auf die Karte zu generieren, muss bei '' |
- | echo " | + | < |
+ | gpg2 --secret-keyring | ||
+ | </ | ||
+ | in manchen Fällen funktioniert dies jedoch nur über den internen Befehl '' | ||
- | ==== ssh über mehrere Server | + | < |
+ | $ gpg2 --card-edit | ||
+ | ... | ||
+ | gpg/ | ||
+ | ... | ||
+ | gpg: Total number processed: 1 | ||
+ | gpg: | ||
+ | $ gpg2 --card-status | ||
+ | ... | ||
+ | </ | ||
- | * http:// | + | <WRAP center round tip 60%> Übrigens bei einer Erweiterung des öffentlichen Schlüssels mit neuen Schlüsseln, |
- | Damit das funktioniert, | + | ==== Karte wechseln ==== |
+ | Beim Ersetzen einer Karte muss folgendes beachtet werden: | ||
- | * /etc/ssh/ssh_config (sytemweit) | + | |
- | | + | < |
+ | - seit [[https://www.gnupg.org/ | ||
+ | | ||
+ | - Danach müssen die Verweise auf die neue Karte wieder erstellt werden: '' | ||
- | Host * | + | **Anzeigen der zur gnupg-Karte passenden Dateien unter '' |
- | ForwardAgent yes | + | |
- | Eine ausführliche Beschreibung findet sich hier: | + | Das ist hier von Werner beschrieben: https:// |
- | | + | |
- | === Innerhalb von screen-sessions === | + | Die ausgegebenen Keygrips beziehen sich auf die Dateien unter: '' |
- | Hier steht was dazu: | + | rm '' |
- | | + | **Achtung: immer Backup des .gnupg-Verzeichnisses machen, damit nicht aus Versehen andere secret Keys gelöscht werden.** |
+ | ===== Stolperstellen ===== | ||
- | Aber mit debian-wheezy | + | gnupg sollte |
- | ===== Nutzung für X2Go ===== | + | |
- | * http://wiki.x2go.org/doku.php/wiki: | + | < |
+ | mv /etc/xdg/autostart/gnome-keyring-gpg.desktop / | ||
+ | </ | ||
- | Auch der x2goclient kann auf die ssh-Authentifizierung über gpg-agent mittels gpg-card zurück greifen. x2goclient muss dazu mit der Option: | + | beim Aufruf von |
- | x2goclient | + | < |
+ | gpg2 --card-status | ||
+ | </ | ||
- | gestartet werden. | + | gibts ggf. Beschwerden: |
- | Allerdings beherrscht der x2goclient kein ssh-agent Forwarding. D.h. innerhalb der x2go-Sitzung kann der lokale | + | < |
+ | gpg: selecting openpgp failed: Nicht unterstütztes Zertifikat | ||
+ | gpg: OpenPGP Karte ist nicht vorhanden: Nicht unterstütztes Zertifikat | ||
+ | </ | ||
- | Eleganter | + | Grund: Die Umgebungsvariable GPG_AGENT_INFO |
- | apt-get install pyhoca-gui python-cups | + | < |
+ | unset GPG_AGENT_INFO | ||
+ | </ | ||
- | Dieser beherrscht nicht nur die Authentifizierung via smart-card out of the box - sondern auch ssh-forward-agent. | + | verschafft Linderung und sollte ggf in den Startscripten untergebracht werden. |
- | ===== Nutzung für Pam ===== | + | |
- | * http:// | + | <WRAP center round tip 60%> Update für Debian Stretch: |
- | Die dort verwendeten Optionen für poldi-ctrl scheinen | + | Seit Debian Stretch wird der gpg-agent vom systemd |
- | * http:// | + | ===== Erfahrungen mit Kartenlesegeräten |
- | ===== Nutzung für Luks ===== | + | |
- | * http:// | + | Übersicht über unterstützte Kartenlesegeräte: |
- | * http:// | + | |
- | * Hier eine komplette Anleitung für Ubuntu Luks mit 2-Faktor Authentifizierung: | + | [[http://pcsclite.alioth.debian.org/ccid/supported.html|http://pcsclite.alioth.debian.org/ccid/supported.html]] |
- | ===== Nutzung mit Passwortmanagern ===== | + | |
- | ==== keepassX ==== | + | |
- | * https://www.keepassx.org/forum/viewtopic.php? | + | |
- | Die dort beschriebene Lösung funktioniert offensichtlich nicht mehr. Schuld daran scheint zu sein, dass der über socat gebildete Socket keine Informationen über die Kodierung des zur Verfügung gestellten Files ausgibt, keepassx darauf aber zurück greifen will. | + | Bei der Wahl eines Kartenlesegerätes [[http:// |
- | ==== pass ==== | + | Ohne " |
- | Ein Kommandozeilen Passwort-Manager, | + | ==== Vollständig unterstützte Kartenleser ==== |
- | apt-get install -t wheezy-backports pass | + | **[[http:// |
- | Dieses legt für jeden Passwort-Eintrag eine Datei unterhalb von '' | + | Ein USB-Kartenleser in USB-Stick Format ohne Keypad |
- | Features (Auswahl): | + | * funktioniert out of the box mit dem pcscd |
- | | + | **[[http:// |
- | * Mulitline-Passwörter (mit Kommentaren etc.) | + | |
- | * Baum-Struktur | + | Ein USB-Kartenleser mit Pinpad |
- | | + | |
- | * Verschlüsselung | + | * funktioniert out of the bos mit dem pcscd |
+ | |||
+ | ==== Nicht oder nicht vollständig unterstützte Kartenleser ==== | ||
+ | |||
+ | **[[https:// | ||
+ | |||
+ | Für diesen Kartenleser sind zusätzliche Treiber nötig, die sich in den folgenden Debian-Paketen finden: | ||
+ | |||
+ | < | ||
+ | apt-get install fxcyberjack libifd-cyberjack6 | ||
+ | </ | ||
+ | |||
+ | bzw. für Stretch: | ||
+ | |||
+ | < | ||
+ | apt-get install libifd-cyberjack6 | ||
+ | </ | ||
+ | |||
+ | Allerdings scheint trotzdem das Pinpad nicht unterstützt zu werden: [[https:// | ||
+ | |||
+ | **[[http:// | ||
+ | |||
+ | Ein USB-Kartenleser in USB-Stick Format ohne Keypad | ||
+ | |||
+ | Lt. [[https:// | ||
+ | |||
+ | < | ||
+ | gpg: ccid_transceive failed: (0x10002) | ||
+ | gpg: apdu_send_simple(0) failed: invalid value | ||
+ | </ | ||
+ | |||
+ | Laut [[http:// | ||
+ | |||
+ | **[[http:// | ||
+ | |||
+ | Dieser Kartenleser mit Pinpad funktioniert nur mit dem gnupg internen ccid Treiber. Um diesen zu nutzen, muss der pcscd gestoppt werden. Beim Schreiben auf die Karte kommt es bei Schlüsseln ab 2048 Bit zu folgender Fehlermeldung: | ||
+ | |||
+ | < | ||
+ | scdaemon[29150]: | ||
+ | scdaemon[29150]: | ||
+ | gpg: Fehler beim Schreiben des Schlüssels auf die Karte: Kartenfehler | ||
+ | </ | ||
- | Mittels git und der gpg-Encryption für mehrere User-Ids ist der Passwort-Manager Multi-User fähig. Für einzelne Unterordner können | + | Gleiche Ursache: Extended APDU sind nicht unterstützt. Das Pinpad wird wohl auch nicht unterstützt. |
- | Eine Konvertierung aus einer keepassx xml-Export-Datei gelingt mit folgendem Python-Script: | + | \\ |
- | * http:// | ||
- | -> howto zu [[intern: |