Dies ist eine alte Version des Dokuments!
Nitrokey Pro in der Praxis unter CentOS 7.x
In diesem Kapitel befassen wir uns eingehend mit dem Nitrokey Pro unter CentOS 7.x. Neben der verbesserten Absicherung von Login mit Einmalpasswörtern können eMails mit Hilfe von asymmetrischen Schlüsselmaterials (PGP und S/MIME) auch Dateien und ganze Festplatten verschlüsselt und natürlich auch wieder entschlüsselt werden.
Hierzu verwenden wir den Nitrokey Pro welcher hier für einen überschaubaren Betrag von nicht einmal 50€ erstanden werden kann. In dem folgenden Beitrag gehen wir auf die Besonderheiten bei der Verwendung unter CentOS 7.x ein.
Der Nitrokey Pro Cryptostick vereint in einem kleinen Plastikgehäuse einen Kartenleser mit zugehöriger manipulationssicheren OpenPGP Chipkarte, einem zu 100% Open Source und Open Hardware Device. Wie schon erwähnt wird das geheime Schlüsselmaterial (RSA 2048-4096 Bit, ECC 256-512 Bit) im manipulations- und PIN-geschützten integrierten Chipkarte gespeichert und somit bestens gegen Schadcode oder Verlust bzw. Diebstahl und gegen Hardware-Angriffe geschützt.
Anwendungsfälle und Einsatzszenarien:
- Sicheres Login
Einmalpassworte können zur Zweitauthentisierung bei vielen Webanwendungen oder Web-Diensten genutzt werden. Darüber hinaus ist auch eine Verwendung bei der Anmeldung an Rechnern oder z.B. bei der Anmeldung an entfernten Systemen mittels Zertifikaten und Schlüsseln bei SSH umsetzbar. - Verschlüsselung rund um eMails
Zur vertraulichen Kommunikation via eMail kann das benötigte Schlüsselmaterial auf dem Kryptostick Nitrokey Pro erzeugt und sicher verwahrt werden. Eine Verwendung unter GnuPG, OpenPGP oder S/MIME ist somit gegeben. - Verschlüsselung von Dateien und Massenspeichern(Festplatten)
Auch hier wird das geheime Schlüsselmaterial, wie auch schon beim Anwendungsfall eMail-Kommunikation, auf dem Kryptostick generiert und sicher vorgehalten. Eine Ver- und Entschlüsselung unserer Daten mit Hilfe von TrueCrypt, GnuPG Tools oder weiteren Anwendungen steht also nichts im Wege.
Weitere Informationen zum USB-Stick Nitrokey Pro findet findet man auch hier bzw. im Support Forum.
Darüber hinaus ist das 100%-Open PCB-Hardware-Design, sowie die Firmware und der Software SourceCode der Nitrokey-Familie in Github hinterlegt und einsehbar.
Hardwareinformationen
Informationen über den Stick können wir mit Hilfe des Befehls usb-devices
aus dem RPM-Paket usbutils dem System abverlangen.
# usb-devices
T: Bus=02 Lev=02 Prnt=02 Port=01 Cnt=02 Dev#= 26 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=20a0 ProdID=4108 Rev=01.00 S: Manufacturer=Nitrokey S: Product=Nitrokey Pro S: SerialNumber=000000000000000000006FDA C: #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbfs I: If#= 1 Alt= 0 #EPs= 3 Cls=0b(scard) Sub=00 Prot=00 Driver=(none)
Mit Hilfe des Befehls lsusb
aus dem RPM-Paket usbutils können wir auch die Produkt- und Hersteller-Identifikationsnummer des Nitrokey-Sticks ermitteln.
# lsusb Bus 002 Device 026: ID 20a0:4108 Clay Logic
Im Syslog wird uns beim Anstecken des Sticks dies entsprechend protokolliert:
Nov 16 17:49:39 T410 kernel: usb 2-1.2: new full-speed USB device number 27 using ehci-pci Nov 16 17:49:39 T410 kernel: usb 2-1.2: New USB device found, idVendor=20a0, idProduct=4108 Nov 16 17:49:39 T410 kernel: usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 Nov 16 17:49:39 T410 kernel: usb 2-1.2: Product: Nitrokey Pro Nov 16 17:49:39 T410 kernel: usb 2-1.2: Manufacturer: Nitrokey Nov 16 17:49:39 T410 kernel: usb 2-1.2: SerialNumber: 000000000000000000006FDA Nov 16 17:49:39 T410 kernel: input: Nitrokey Nitrokey Pro as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/input/input38 Nov 16 17:49:39 T410 kernel: hid-generic 0003:20A0:4108.001F: input,hidraw2: USB HID v1.10 Keyboard [Nitrokey Nitrokey Pro] on usb-0000:00:1d.0-1.2/input0 Nov 16 17:49:39 T410 mtp-probe: checking bus 2, device 27: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2" Nov 16 17:49:39 T410 mtp-probe: bus: 2, device: 27 was not an MTP device Nov 16 17:49:39 T410 systemd: Reached target Smart Card. Nov 16 17:49:39 T410 systemd: Starting Smart C
udev-Regeln
Für den Betrieb unter CentOS 7 müssen wir uns noch passende udev-Definitionen hier besorgen und unserer Umgebung anpassen. Dies ist notwendig, da sonst die Gerätedatei nicht mit den entsprechenden Benutzer-Rechten angelegt wird!
Wir wechseln also erst einmal in das entsprechende Konfigurationsverzeichnis /etc/udev/rules.d/
.
# cd /etc/udev/rules.d/
Dann holen wir uns die entsprechende Musterdatei auf unseren Rechner.
# wget https://www.nitrokey.com/sites/default/files/41-nitrokey.rules
Wie schon erwähnt ist es unter CentOS 7 notwendig für unseren Benutzer eine Änderung an der Berechtigung der Gerätedatei vorzunehmen. Grundsätzlich gibt es hierzu zwei Varianten:
- Dateirechte : Wir sorgen dafür dass auf die Gerätedatei
/dev/hidraw0
jeder lesend und schreibend zugreifen kann, in dem wir die Dateirechte auf 666 setzen, oder - Nutzerrechte : wir sorgen dafür dass die Gerätedatei
/dev/hidraw0
direkt unserem Benutzer, mit dem wir uns an unserem Rechner anmelden, gehört.
Wir entscheiden uns hier für die Option 2., wir sorgen also dafür dass die Gerätedatei unserem Nutzer - in diesem Konfigurationsbeispiel dem Benutzer django gehört, sobald dieser den Kryptostick in einen USB-Port steckt.
Zunächst legen wir als erstes mal die Gruppe plugdev an.
# groupadd plugdev
Dann setzen wir unseren Benutzer django in diese Gruppe plugdev.
# usermod -aG plugdev django
Nun passen wir noch die eingangs heruntergeladene udev-Regeldatei /etc/udev/rules.d/41-nitrokey.rules an. Der entscheidende Zusatz ist nun hier die Option OWNER=„django“
.
# vim /etc/udev/rules.d/41-nitrokey.rules
- /etc/udev/rules.d/41-nitrokey.rules
# Nitrokey U2F KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", OWNER="django", GROUP="plugdev", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="f1d0" # Nitrokey FIDO U2F KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", OWNER="django", GROUP="plugdev", ATTRS{idVendor}=="20a0", ATTRS{idProduct}=="4287" SUBSYSTEM!="usb", GOTO="gnupg_rules_end" ACTION!="add", GOTO="gnupg_rules_end" # USB SmartCard Readers ## Crypto Stick 1.2 ATTR{idVendor}=="20a0", ATTR{idProduct}=="4107", ENV{ID_SMARTCARD_READER}="1", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg", GROUP+="plugdev", TAG+="uaccess" ## Nitrokey Pro #ATTR{idVendor}=="20a0", ATTR{idProduct}=="4108", ENV{ID_SMARTCARD_READER}="1", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg", GROUP+="plugdev", TAG+="uaccess" ATTR{idVendor}=="20a0", ATTR{idProduct}=="4108", ENV{ID_SMARTCARD_READER}="1", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg", OWNER+="django", GROUP+="plugdev", TAG+="uaccess" ## Nitrokey Storage ATTR{idVendor}=="20a0", ATTR{idProduct}=="4109", ENV{ID_SMARTCARD_READER}="1", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg", GROUP+="plugdev", TAG+="uaccess" ## Nitrokey Start ATTR{idVendor}=="20a0", ATTR{idProduct}=="4211", ENV{ID_SMARTCARD_READER}="1", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg", GROUP+="plugdev", TAG+="uaccess" ## Nitrokey HSM ATTR{idVendor}=="20a0", ATTR{idProduct}=="4230", ENV{ID_SMARTCARD_READER}="1", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg", GROUP+="plugdev", TAG+="uaccess" LABEL="gnupg_rules_end"
Zum Aktivieren unserer geänderten udev-Regeldatei lassen wir diese nun erneut einlesen; hierzu verwenden wir folgenden Befehl:
# udevadm control --reload-rules
Sobald wir nun unseren Nitrokey Pro-Stick in einen USB-Port stecken wird die zugehörige Gerätedate mit den richtigen Berechtigungen angelegt. Hierzu verwenden wir die zum Stick passenden ANgaben, die wir mit lsusb
ermittelt haben.
# lsusb
Bus 002 Device 032: ID 20a0:4108 Clay Logic
# ll /dev/bus/usb/002/032
crw-rw-r--+ 1 django plugdev 189, 159 16. Nov 18:16 /dev/bus/usb/002/032
Anwendungsfälle - Software
Nitrokey-App
Für die Verwaltung des Sticks stellt uns Nitrokey eine entsprechende Anwendung bzw. App zur Verfügung. Die Softwarequellen finden wir im GitHub-Reposoitory. Auf der Downloadseite zu RedHat finden wir Angaben zum eigenen Repository, von dem wir ein passenden RPM-Paket installieen können.
Hierzu binden wir als erstes einmal das passende Repository auf unserem Rechner ein:
# yum-config-manager --add-repo \\ https://copr.fedorainfracloud.org/coprs/ignatenkobrain/Nitrokey-EL7/repo/epel-7/ignatenkobrain-Nitrokey-EL7-epel-7.repo
Das EPEL-Repository haben wir ja standardmäßig bereits eingebunden. Dieses wird für das Paket hidapi, eine Abhängigkeit des Paketes nitrokey-app, benötigt.
Nun installieren wir uns das Paket nitrokey-app mit Hilfe des Paketverwaltungswerkzeugs yum.
# yum install nitrokey-app
Was uns das Paket alles mitgebracht hat können wir mit Hilfe nachfolgenden Befehls erkunden.
# rpm -qil nitrokey-app
Name : nitrokey-app Version : 1.2 Release : 1.el7.centos Architecture: x86_64 Install Date: Do 15 Nov 2018 17:43:50 CET Group : Unspecified Size : 939794 License : GPLv3+ Signature : RSA/SHA1, So 24 Dez 2017 22:24:56 CET, Key ID 36b570df607d9567 Source RPM : nitrokey-app-1.2-1.el7.centos.src.rpm Build Date : So 24 Dez 2017 22:24:53 CET Build Host : copr-builder-238330759.novalocal Relocations : (not relocatable) URL : https://github.com/Nitrokey/nitrokey-app Summary : Nitrokey's Application Description : Nitrokey's Application. /usr/bin/nitrokey-app /usr/lib/udev/rules.d/41-nitrokey.rules /usr/share/applications/nitrokey-app.desktop /usr/share/bash-completion /usr/share/bash-completion/completions /usr/share/bash-completion/completions/nitrokey-app /usr/share/icons/hicolor/128x128/apps/nitrokey-app.png /usr/share/icons/hicolor/16x16/apps/nitrokey-app.png /usr/share/icons/hicolor/22x22/apps/nitrokey-app.png /usr/share/icons/hicolor/24x24/apps/nitrokey-app.png /usr/share/icons/hicolor/32x32/apps/nitrokey-app.png /usr/share/icons/hicolor/48x48/apps/nitrokey-app.png /usr/share/icons/hicolor/scalable/apps/nitrokey-app.svg /usr/share/licenses/nitrokey-app-1.2 /usr/share/licenses/nitrokey-app-1.2/LICENSE /usr/share/nitrokey /usr/share/nitrokey/info.png /usr/share/nitrokey/quit.png /usr/share/nitrokey/safe_zahlenkreis.png /usr/share/nitrokey/settings.png /usr/share/pixmaps/nitrokey-app.png
Nun können wir die Anwendung starten. Wir finden diese entweder unter dem Menü Zubehör/Utilities im Anwendungsmenü oder wird starten das Programm einfach auf der Konsole.
$ nextcloud-app
Der Start wird mit einem Eintrag in der oberen Statusleiste angezeigt.
Kurz nach dem Anstecken unseres Kryptosticks Nitrokey Pro wird uns in der Statusleiste am oberen Bildschirmrand ein Hinweis eingeblendet.
Die Smartcard, die im Nitrokey Pro bebaut wurde, ist mit zwei PINs geschützt, der Benutzer-PIN (Standard: 123456) und Admin-PIN (Standard: 12345678).
Wird die Benutzer-PIN mehr als 3x falsch eingeben, wird die Karte für den Benutzer gesperrt. Mit der Admin-PIN kann der Fehleingabezähler zurückgesetzt bzw. eine neue Benutzer-PIN vergeben werden.
Wird jedoch die Admin-PIN mehr als 3x falsch eingegeben, wird die Smart-Crad komsperrt und der Stick ist anschließend nur noch durch einen Master-Reset in den Auslieferungszustand zu versetzen.
Hierzu kopiert man sich folgende Datei auf den Rechner:
$ wget https://www.nitrokey.com/sites/default/files/nitrokey-reset.txt
Anschließend führt man einen Factory-Reset aus und benutzt folgenden Befehl:
$ gpg-connect-agent < nitrokey-reset.txt
Seien Sie also unbedingt vorsichtig beim Umgang mit diesen PINs! Ein so strenger PIN-basierter Hardware-Schutz ist unerlässlich, wenn die SmartCard vor dem Zugriff durch die falschen Hände geschützt werde soll.
Wir werden also zuerst einmal die beiden PINs abändern. Hierzu klicken wir mit der rechten Maustaste auf das Nitrokey-Symbol oben auf dem Desktop und wählen Sie das Menü „Konfigurieren“. Dort können wir nun sowohl die Benutzer- als auch Admin-PINs ändern.
Hier ändern wir nun die er Benutzer-PIN (Standard: 123456) sowie auch die Admin-PIN (Standard: 12345678) ab.
Nitrokey Pro und GnuPG
Da es sich bei der Chipkarte des Nitrokey Pro um eine standardkompatible OpenPGP-Karte handelt, kann der Kryptostick mit Hilfe von GnuPG verwaltet werden. Hierzu installieren wir uns das Paket gnupg2, sofern es nicht bereits bei der Erstkonfiguration unseres Rechner installiert wurde.
# yum install gnupg2
Alle Sicherheitsfunktionen wie z.B. das Erzeugen/Speichern von GPG-Schlüsseln, das Verschlüsseln/Entschlüsseln einer Datei, das Signieren einer Nachricht, die auf der Hardware ausgeführt werden, können mit Hilfe des Befehls gpg bzw. gpg2, welches identisch mit gpg ist (!) gesteuert werden.
Sollte beim Aufruf des Befehls gpg die Karte nicht sofort angesprochen werden können, einfach den Befehl nochmals ausführen:
$ gpg --card-status
gpg: selecting openpgp failed: Karte nicht vorhanden gpg: OpenPGP Karte ist nicht vorhanden: Karte nicht vorhanden
card-status
Mit der Option card-status können wir uns mit dem Befehl gpg –card-status
den Kartenstatus ausgeben lassen.
$ gpg --card-status
Application ID ...: D276000124010303000500006FDA0000 Version ..........: 3.3 Manufacturer .....: ZeitControl Serial number ....: 00006FDA Name of cardholder: [nicht gesetzt] Language prefs ...: de Sex ..............: unbestimmt URL of public key : [nicht gesetzt] Login data .......: [nicht gesetzt] Signature PIN ....: nicht zwingend Key attributes ...: 2048R 2048R 2048R Max. PIN lengths .: 64 64 64 PIN retry counter : 3 0 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none]
Die einzelnen Datenfelder haben hierbei folgende Bedeutung:
Datenfeld | Beschreibung |
---|---|
Application ID | Individuelle (unique) KartenID, diese beinhaltet: ° den Kartentyp ° die Version der Spezifikation ° den Hersteller und ° die Seriennummer des Cryptosticks Diese Application ID ist einmalig und bei jeder Karte anders. |
Version | verwendete OpenPGP Version |
Manufacturer | Hersteller der Karte |
Serial number | Seriennummer der Karte, die vom Hersteller vergeben wurde. |
Name of cardholder | Vorname und Nachname des Karteninhabers ( Es sind hier derzeit nur reines ASCII erlaubt, also keine deutschen Umlaute). Dieses Feld wird von GPG nicht verwendet. |
Language prefs | Gewählte/bevorzugte Sprache (Muttersprache) des Karteninhabers. Dieses Feld wird von GPG nicht verwendet. |
Sex | Geschlecht des Karteninhabers.: (Männlich (M), Weiblich (F) oder Leerzeichen) |
URL of public key | Angabe einer URL, mit der der public-key mit Hilfe des Befehls fetch unter gpg --edit-card auf die Karte geladen werden kann. |
Login data | Bei diesem Feld kann der Account-Name des Karteninhabers abgelegt werden, der bei Anmeldeversuchen genutzt werden kann. GPG führt hier keinerlei Abgleiche zwischen diesem Namen und dem Namen der in einem Schlüssel angegeben und verwendet wird durch! |
Signature PIN | Hier kann über die beiden Schalter zwingend und nicht zwingend eingestellt werden, ob bei jedem Signatur-Vorgang die PIN abgefragt werden soll, oder nicht. Bei der Option nicht zwingend kann GPG die PIN zwischenspeichern, solange der Nitrokey-Stick angesteckt bleibt. |
Key attributes | Angaben über Art und Umfang der hinterlegten Schlüssel |
Max. PIN lengths | Maximale Länge der einzelnen PINs, kann nicht verändert werden! |
PIN retry counter | Zähler für die verbleibenden Versuche zur Eingabe der richtigen PIN. Der max. Zählwert von 3 wird bei jeder Falscheingabe um eins heruntergesetzt. Sobald die richtige Admin-PIN eingegeben wurde, wir der max. Wert von 3 wieder zurück gesetzt. Die beiden ersten Werte (von links gesehen) werden für die User-PIN verwendet. GPG stellt hierbei sicher, dass beide werde synchronisiert werden. Der zweite (mittlere) Wert wird lediglich für Besonderheiten aus dem ISO-Standard 7816 (https://de.wikipedia.org/wiki/ISO_7816) verwendet. Der dritte (rechte) Wert wird als Fehlversuchszähler für die Admin_PIN verwendet. |
Signature counter | Zähler der generierten Signaturen bzw. Signaturvorgänge mit der KArte. Der Zähler kann nicht manipuliert werden und wird lediglich zurückgesetzt, sobald ein neuer Signature-Schlüssel erzeugt oder auf die Karte geladen wird. |
Signature key | Signatur-Schlüssel (primärer OpenPGP-Schlüssel) |
created | Datum und Uhrzeit an dem der Schlüssel erzeugt wurde |
Encryption key | Entschlüsselungs-Schlüssel (Unterschlüssel des primären (Signature-)Schlüssels. |
created | Datum und Uhrzeit an dem der Schlüssel erzeugt wurde |
Authentication key | Authentifizierung-Schlüssel (Unterschlüssel des primären (Signature-)Schlüssels. |
created | Datum und Uhrzeit an dem der Schlüssel erzeugt wurde |
General key info | Diese primäre USer ID wird angezeigt, sobald ein entsprechender öffentlicher Schlüssel (public-key) verfügbar ist. |
change-pin
Wie schon mit der Nitrokey App können wir auch mit Hilfe des Befehls gpg --change-pin
die Benutzer- und die Admin-PIN, wie auch die PIN zum Zurücksetzen der Benutzer-PIN, ändern.
Die Benutzer-PIN (Menüpunkt 1) wird benötigt für den täglichen Betrieb wie z.B. zum Entsperren des Token, oder zum Signieren und Verschlüsseln. Die Mindestlänge für den User-Pin beträgt 6 Zeichen.
Die Admin-PIN (Menüpunkt 3) wird für die Karten-/Token-Verwaltung verwendet, so z.B. für das Laden von Schlüsseln auf den Krypto-Stick, das Erzeugen von Schlüsseln oder das Ändern von Informationen wie die Inhaberdaten auf der Karte. Die Mindestlänge für die Admin-PIN beträgt 8 Zeichen.
Wird die Benutzer-PIN 3x falsch eingeben, wird die Karte gesperrt und kann dann nur mit der Admin-PIN oder dem Reset-Code zurückgesetzt werden. Wenn Sie den falschen Admin-Pin dreimal eingeben, wird die Karte unbrauchbar und kann dann lediglich mit einem Factory-Reset (Verlußt aller Kartendaten!) zurück gesetzt werden!
Die Reset-PIN (Menüpunkt 4) kann nur zum Zurücksetzen der Benutzer-PIN verwendet werden. Die Mindestlänge für den Reset-Code beträgt 8 Zeichen. Der Reset-Code Fehlerzähler kann wiederum mit der Admin-PIN zurückgesetzt werden. Wird nach zweimaliger Falscheingabe der Benutzer- wie auch der Admin-PIN und dann die richtige PIN eingeben, wird der Fehlerzähler zurückgesetzt.
Worin besteht nun aber der genaue Unterschied zwischen dem Reset-Code und der Admin-PIN? Möchte man in einer Organisation Nitrokey Pro an seine Mitarbeiter ausgeben, werden bestimmte Daten, wie z.B. Namen, die Public Key URL oder auch das erzeugte Schlüsselmaterial zentral vorgegeben. Da der Benutzer selbst diese Daten nicht verändern können soll, wird dieser auch nicht Kenntnis von der Admin-PIN haben. Sperrt sich nun der Mitarbeiter aus, weil er die Benutzer-PIN 3x falsch eingegeben hat, kann der Neutzer natürlich nicht die Admin-PIN eingeben, da er diese nicht kennt. Hier kommt nun der Reset-Code ins Spiel. Mit Hilfe dieses Codes kann der Benutzer nun die Benutzer-PIN zurücksetzen.
$ gpg --change-pin
gpg: OpenPGP Karte Nr. D276000124010303000500006FDA0000 erkannt 1 - change PIN 2 - unblock PIN 3 - change Admin PIN 4 - set the Reset Code Q - quit Ihre Auswahl?
Beim Menüpunkt 1 können wir z.B. die Benutzer-PIN abändern. Wir werden dann nach der aktuellen PIN gefragt und müssen die neue PIN 2x eingeben zum Abändern.
card-edit
Mit Hilfe des Befehls gpg --card-edit
haben wir entsprechend umfangreiche Zugriffs-, Erstellungs- und Änderungsoptionen auf die Daten und das Schlüsselmaterial, welches auf der Smartcard gespeichert wurden und werden. Viele hilfreiche Informationen zum Umgang mit den Befehlen die uns das Programm gpg bietet, findet man in der zugehörigen Dokumentation auf der Projektseite von https://www.gnupg.org/.
$ gpg --card-edit
Application ID ...: D276000124010303000500006FDA0000 Version ..........: 3.3 Manufacturer .....: ZeitControl Serial number ....: 00006FDA Name of cardholder: [nicht gesetzt] Language prefs ...: de Sex ..............: unbestimmt URL of public key : [nicht gesetzt] Login data .......: [nicht gesetzt] Signature PIN ....: nicht zwingend Key attributes ...: 2048R 2048R 2048R Max. PIN lengths .: 64 64 64 PIN retry counter : 3 0 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none] gpg/card>
User-Befehle
Mit Hilfe des Befehls help können wir uns anzeigen lassen, welche Optionen im jeweiligen Modus Benutzer oder Admin zur Verfügung stehen.
gpg/card> help
quit Menü verlassen admin Zeige Admin-Befehle help Diese Hilfe zeigen 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
Admin-Befehle
Mit dem Befehl admin können wir in den Admin-Modus/-Bereich wechseln und auch dort alle Befehle mit Hilfe von help anzeigen lassen.
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
Individuelle Konfiguration - Stick personalisieren
Zunächst wollen wir unseren Stick personalisieren, also mit den Benutzerspezifischen Daten versorgen:
Name of cardholder | Vorname und Nachname des Karteninhabers (Es sind hier derzeit nur reines ASCII erlaubt, also keine deutschen Umlaute). Dieses Feld wird von GPG nicht verwendet. |
Language prefs | Gewählte/bevorzugte Sprache (Muttersprache) des Karteninhabers. Dieses Feld wird von GPG nicht verwendet. |
Sex | Geschlecht des Karteninhabers.: (Männlich (M), Weiblich (F) oder Leerzeichen) |
URL of public key | Angabe einer URL, mit der der public-key mit Hilfe des Befehls fetch unter gpg --edit-card auf die Karte geladen werden kann. |
Login data | Bei diesem Feld kann der Account-Name des Karteninhabers abgelegt werden, der bei Anmeldeversuchen genutzt werden kann. GPG führt hier keinerlei Abgleiche zwischen diesem Namen und dem Namen der in einem Schlüssel angegeben und verwendet wird durch! |
Zum Ändern dieser Daten müssen wir nach der Anmeldung an der Karte mit dem Befehl adminin den Admin Bereich wechseln.
$ gpg --card-edit
<code>Application ID ...: D276000124010303000500006FDA0000 Version ..........: 3.3 Manufacturer .....: ZeitControl Serial number ....: 00006FDA Name of cardholder: [nicht gesetzt] Language prefs ...: de Sex ..............: unbestimmt URL of public key : [nicht gesetzt] Login data .......: [nicht gesetzt] Signature PIN ....: nicht zwingend Key attributes ...: 2048R 2048R 2048R Max. PIN lengths .: 64 64 64 PIN retry counter : 3 0 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none] gpg/card>
</code>
gpg/card> admin
Admin-Befehle sind erlaubt
Wir ändern zunächst den Namen des Karteninhabers Name of cardholder:
gpg/card> name
Familienname des Kartenbesitzers:aka BOfH Vorname des Kartenbesitzers:Django
Als nächstes definieren wir die Sprache des Kartenbenutzers:
gpg/card> lang
Spracheinstellungen de
Im nächsten Schritt setzen wir das Geschlecht des Karteninhabers:
gpg/card> sex
Geschlecht: (Männlich (M), Weiblich (F) oder Leerzeichen): m
Nun setzen wir noch den Anmelde-/Loginnamen entsprechend unserer Umgebung:
gpg/card> login
Logindaten (Kontenname): django
Zu guter Letzt setzen wir nun die URL, von der der public-key mit Hilfe des Befehls fetch unter gpg --edit-card
auf die Karte geladen werden kann.
gpg/card> url
URL um den öffentlichen Schlüssel zu holen: https://keyserver.nausch.org/pks/lookup?op=get&search=0x074ECF6150A6BFED
Somit ergeben sich folgende benutzerindividuellen Daten auf der Karte:
gpg/card> verify
Application ID ...: D276000124010303000500006FDA0000 Version ..........: 3.3 Manufacturer .....: ZeitControl Serial number ....: 00006FDA Name of cardholder: Django aka BOfH Language prefs ...: de Sex ..............: männlich URL of public key : https://keyserver.nausch.org/pks/lookup?op=get&search=0x074ECF6150A6BFED Login data .......: django Signature PIN ....: nicht zwingend Key attributes ...: 2048R 2048R 2048R Max. PIN lengths .: 64 64 64 PIN retry counter : 3 0 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none]
Nun können wir die Erstinitialisierung abschließen und den Einstellungsdialog mit dem Befehl quit verlassen.
gpg/card> quit
Schlüssel generieren
Wir wollen uns nun einen neuen GPG-Schlüssel in der SmartCard erzeugen und rufen hierzu den Befehl generate auf. Wir werden nun menügeführt durch eine Reihe von Standardfragen geführt, welche alle relevante Daten abfragen, die zur Generierung des Hauptschlüssels wie auch der Unterschlüssel die für die Aufgaben Signatur, Verschlüsselung und Authentifizierung benötigt werden.
$ gpg --card-edit
gpg/card> admin
Admin-Befehle sind erlaubt
gpg/card> generate
Sicherung des Verschlüsselungsschlüssel außerhalb der Karte erstellen? (J/n) n Welche Schlüssellänge wünschen Sie für den Signatur-Schlüssel? (2048) Welche Schlüssellänge wünschen Sie für den Verschlüsselungs-Schlüssel? (2048) Welche Schlüssellänge wünschen Sie für den Authentisierungs-Schlüssel? (2048) 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) 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"): Django aka BOfH Email-Adresse: secmail@mailserver.guru Kommentar: Bastard Operator from Hell Sie haben diese User-ID gewählt: "Django aka BOfH (Bastard Operator from Hell) <secmail@mailserver.guru>" Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(A)bbrechen? f
Leider bricht die Generierung des Schlüssels an dieser Stelle mit dem folgenden Fehler ab:
gpg: key generation failed: Kartenfehler Schlüsselerzeugung fehlgeschlagen: Kartenfehler
Stand: November 2018.
Dabei ist es unerheblich ob nun eine Schlüssellänge von 2048 oder 4096 ausgewählt wird. Auch auf einem aktuellen Fedora 29 System tritt der gleiche fatale Fehler auf!
Ähnlich wie schon beim Vorgängermodell GPF Cryptostick sollte eigentlich das Schlüsselmaterial auf dem Nitrokey Pro-Stick generiert worden sein.
vorhandenen Schlüssel importieren
Da aktuell1) die Generoierung der Schlüsseldaten direkt auf der SmartCard scheitert, werden wir zunächste den Schlüssel wie gewohnt generieren und anschließend in den Nitrokey Pro verschieben.
Zunächste erzeugen wir uns also einen PGP-Schlüssel, wie wir das sonst auch auf der Konsole machen würden.
$ gpg --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Bitte wählen Sie, welche Art von Schlüssel Sie möchten: (1) RSA und RSA (voreingestellt) (2) DSA und Elgamal (3) DSA (nur signieren/beglaubigen) (4) RSA (nur signieren/beglaubigen) Ihre Auswahl? 1 RSA-Schlüssel können zwischen 1024 und 4096 Bit lang sein. Welche Schlüssellänge wünschen Sie? (2048) 4096 Die verlangte Schlüssellänge beträgt 4096 Bit 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"): Django aka BOfH Email-Adresse: secmail@mailserver.guru Kommentar: Bastard Operator from Hell Sie haben diese User-ID gewählt: "Django aka BOfH (Bastard Operator from Hell) <secmail@mailserver.guru>" Ä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. Wir müssen eine ganze Menge Zufallswerte erzeugen. Sie können dies unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen. gpg: Schlüssel 1F8344FA ist als uneingeschränkt vertrauenswürdig gekennzeichnet Öffentlichen und geheimen Schlüssel erzeugt und signiert. gpg: "Trust-DB" wird überprüft gpg: 3 marginal-needed, 1 complete-needed, PGP Vertrauensmodell gpg: Tiefe: 0 gültig: 4 signiert: 0 Vertrauen: 0-, 0q, 0n, 0m, 0f, 4u gpg: nächste "Trust-DB"-Pflichtüberprüfung am 2020-03-19 pub 4096R/1F8344FA 2018-11-17 Schl.-Fingerabdruck = 3898 BF85 D795 AF2C 717A 8144 822A 44B1 1F83 44FA uid Django aka BOfH (Bastard Operator from Hell) <secmail@mailserver.guru> sub 4096R/C35C8E4D 2018-11-17
Nun verschieben wir den Schlüsel auf die SmartCard des Nitrokey Pro. Zunächst wählen wir unseren gerade eben erstellten Schlüssel aus.
$ gpg --edit-key 1F8344FA
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Geheimer Schlüssel ist vorhanden. pub 4096R/1F8344FA erzeugt: 2018-11-17 verfällt: niemals Aufruf: SC Vertrauen: uneingeschränkt Gültigkeit: uneingeschränkt sub 4096R/C35C8E4D erzeugt: 2018-11-17 verfällt: niemals Aufruf: E [ uneing.] (1). Django aka BOfH (Bastard Operator from Hell) <secmail@mailserver.guru> gpg>
Nun wechseln wir zwischen der Auflistung von öffentlichen und geheimen Schlüsseln und geben hierzu den Befehl toggle ein.
gpg> toggle
sec 4096R/1F8344FA erzeugt: 2018-11-17 verfällt: niemals ssb 4096R/C35C8E4D erzeugt: 2018-11-17 verfällt: niemals (1) Django aka BOfH (Bastard Operator from Hell) <secmail@mailserver.guru> gpg>
Nun verschieben wir den ausgewählten Schlüssel in unseren Kryptostick mit dem Befehl keytocard.
gpg> keytocard
Den Hauptschlüssel wirklich verschieben? (j/N) j
Signature key ....: [none] Encryption key....: [none] Authentication key: [none] Wählen Sie den Speicherort für den Schlüssel: (1) Signatur-Schlüssel (3) Authentisierungs-Schlüssel<code> Ihre Auswahl? 3 <code> Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: "Django aka BOfH (Bastard Operator from Hell) <secmail@mailserver.guru>" 4096-Bit RSA Schlüssel, ID 1F8344FA, erzeugt 2018-11-17 sec 4096R/1F8344FA erzeugt: 2018-11-17 verfällt: niemals Kartennummer:0005 00006FDA ssb 4096R/C35C8E4D erzeugt: 2018-11-17 verfällt: niemals (1) Django aka BOfH (Bastard Operator from Hell) <secmail@mailserver.guru> gpg>
Zu guter Letzt verlassen wir das Programm pgp und speichern due Änderungen am keystore.
pgp> quit
Änderungen speichern? (j/N) j