Nitrokey Start in der Praxis unter CentOS 7.x

Bild: Nitrokey Start USB-Stick In diesem Kapitel befassen wir uns eingehend mit dem Nitrokey Start (Daten-/Infoblatt) unter CentOS 7.x. Weitere Informationen zum Nitrokey-Stick findet findet man auch hier bzw. im Support Forum.

Mit Hilfe von asymmetrischen Schlüsselmaterials (PGP und S/MIME) können eMails sowie Dateien und ganze Festplatten verschlüsselt und natürlich auch wieder entschlüsselt werden. Hierzu verwenden wir den Nitrokey Start welcher hier für einen überschaubaren Betrag von ngerade mal 29€ erstanden werden kann. In dem folgenden Beitrag gehen wir auf die Besonderheiten bei der Verwendung unter CentOS 7.x ein.

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=01 Dev#=  3 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=20a0 ProdID=4211 Rev=02.00
S:  Manufacturer=Nitrokey
S:  Product=Nitrokey Start
S:  SerialNumber=FSIJ-1.2.10-43243711
C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#= 0 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 003: ID 20a0:4211 Clay Logic 

Im Syslog wird uns beim Anstecken des Sticks dies entsprechend protokolliert:

Nov 24 12:03:55 T410 kernel: usb 2-1.2: new full-speed USB device number 3 using ehci-pci
Nov 24 12:03:55 T410 kernel: usb 2-1.2: New USB device found, idVendor=20a0, idProduct=4211
Nov 24 12:03:55 T410 kernel: usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Nov 24 12:03:55 T410 kernel: usb 2-1.2: Product: Nitrokey Start
Nov 24 12:03:55 T410 kernel: usb 2-1.2: Manufacturer: Nitrokey
Nov 24 12:03:55 T410 kernel: usb 2-1.2: SerialNumber: FSIJ-1.2.10-43243711
Nov 24 12:03:55 T410 mtp-probe: checking bus 2, device 3: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2"
Nov 24 12:03:55 T410 mtp-probe: bus: 2, device: 3 was not an MTP device
Nov 24 12:03:55 T410 systemd: Reached target Smart Card.
Nov 24 12:03:55 T410 systemd: Starting Smart Card.

Für den Zugriff auf die SmartCard bzw. auf den Nitrokey Start benötigen wir z.B. für GPG den SmartCard-Daemon scdeamon welcher bei CentOS 7 mit Hilfe es Pakets gnupg2-smime bereitgestellt wird.

Dieses Paket installieren wir nun noch via yum.

 #  yum install gnupg2-smime -y

Leider ist das Paket an sich aus Sicht der Entwickler des Kryptostick in einer nicht aktuellen Version bei CentOS 7 verfügbar (CentOS 7: 2.0.22 - aktuelle Version: 2.2.11)1). Das hat leider zur Folge, dass wir die PGP-Schlüssel nicht direkt auf der SmartCard generieren können, sondern diesen wie gewohnt auf dem Rechner erzeugen und anschliessend auf den Nitrokey Start Stick verschoben werden muss.

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

Unter CentOS 7 gibt es eine keine standardmässig angelegte Gruppe plugdev, daher werden wir diese erst einmal anlgen.

 # 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"
## 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"
ATTR{idVendor}=="20a0", ATTR{idProduct}=="4211", ENV{ID_SMARTCARD_READER}="1", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg", OWNER+="django", 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 006: ID 20a0:4211 Clay Logic
 # ll /dev/bus/usb/002/032 
crw-rw-r--+ 1 django plugdev 189, 133 24. Nov 18:37 /dev/bus/usb/002/006

Nitrokey Start und GnuPG

Da es sich bei der Chipkarte des Nitrokey Start 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.

 $ gpg2 --card-status
Application ID ...: D276000124010200FFFE432437110000
Version ..........: 2.0
Manufacturer .....: unmanaged S/N range
Serial number ....: 43243711
Name of cardholder: [nicht gesetzt]
Language prefs ...: [nicht gesetzt]
Sex ..............: unbestimmt
URL of public key : [nicht gesetzt]
Login data .......: [nicht gesetzt]
Signature PIN ....: zwingend
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 3 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.

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 ...: D276000124010200FFFE432437110000
Version ..........: 2.0
Manufacturer .....: unmanaged S/N range
Serial number ....: 43243711
Name of cardholder: [nicht gesetzt]
Language prefs ...: [nicht gesetzt]
Sex ..............: unbestimmt
URL of public key : [nicht gesetzt]
Login data .......: [nicht gesetzt]
Signature PIN ....: zwingend
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 3 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
Application ID ...: D276000124010200FFFE432437110000
Version ..........: 2.0
Manufacturer .....: unmanaged S/N range
Serial number ....: 43243711
Name of cardholder: [nicht gesetzt]
Language prefs ...: [nicht gesetzt]
Sex ..............: unbestimmt
URL of public key : [nicht gesetzt]
Login data .......: [nicht gesetzt]
Signature PIN ....: zwingend
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 3 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

gpg/card> 
 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 ...: D276000124010200FFFE432437110000
Version ..........: 3.3
Manufacturer .....: unmanaged S/N range
Serial number ....: 43243711
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!

Ähnlich wie schon beim Vorgängermodell GPF Cryptostick sollte eigentlich das Schlüsselmaterial auf dem Nitrokey Start-Stick generiert worden sein.

vorhandenen Schlüssel importieren

Da aktuell2) die Generierung der Schlüsseldaten direkt auf der SmartCard scheitert, werden wir zunächst den Schlüssel wie gewohnt generieren und anschliessend in den Nitrokey Start verschieben.

PGP-Schlüssel generieren

Zunächst 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) 
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 Bastard Operator from Hell
Email-Adresse: django@mailserver.guru
Kommentar: 
Sie haben diese User-ID gewählt:
    "Django aka Bastard Operator from Hell <django@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 2ADD88EB 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/2ADD88EB 2018-11-24
  Schl.-Fingerabdruck = EBCE 68E4 42BD 55B6 03A4  8613 2D4D 70B0 2ADD 88EB
uid                  Django aka Bastard Operator from Hell <django@mailserver.guru>
sub   4096R/B815F8ED 2018-11-24
PGP-Unterschlüssel - subkeys

Bei der Public-Key-Verschlüsselungsverfahren denken wir in erster Linie an die beiden Schlüssel, den public-key, den wir z.B. zum Verschlüsseln von Informationen verwenden und dem secret-key, den wir zum Signieren und zum Entschlüsseln verwenden. Ganz so trivial ist das aber bei genauerer Betrachtung doch nicht und wir müssen uns, bevor wir mit dem Verschieben der Schlüssel aus dem Dateisystem in Richtung SmarctCard des Nitrokeys beschäftigen, mit dem Konzept der Unterschlüssel vertraut machen!

Werfen wir zur genaueren Betrachtung einfach einen Blick in unseren öffentlichen Schlüsselbund mit Hilfe des Programms gpg, etweder mit der Option --list-keys bzw. alternativ dazu mit der Option -k.

 $ gpg2 --list-keys
/home/django/.gnupg/pubring.gpg
------------------------------
pub   4096R/2ADD88EB 2018-11-24
uid                  Django aka Bastard Operator from Hell <django@mailserver.guru>
sub   4096R/B815F8ED 2018-11-24

Obwohl wir zuvor „nur einen“ PGP-Schlüssel generiert generiert hatten, sehen wir nun aber plötzlich zwei Schlüssel. Der eine ist mit dem Wert pub gekennzeichnet und hat die Schlüssel-ID 2ADD88EB und der zweite Schlüssel ist als sub gekennzeichnet und hat die Schlüssel-ID B815F8ED.

Beide Schlüssel sehen wir auch, wenn wir uns den Inhalt des secrings anzeigen lassen. Hierzu verwenden wir die Option –list-secret-keys bzw. alternative dazu die Kurzform -K:

 $ gpg2 --list-secret-keys
/home/django/.gnupg/secring.gpg
------------------------------
sec   4096R/2ADD88EB 2018-11-24
uid                  Django aka Bastard Operator from Hell <django@mailserver.guru>
ssb   4096R/B815F8ED 2018-11-24
  • Worin besteht nun der genaue Unterschied?
    Nun, der erste Schlüssel ist der primäre Signierungs-Schlüssel und der zweite Schlüssel ist ein Unterschlüssel für die Verschlüsselung, der Verschlüsselung-Schlüssel.

  • Warum nun der ganze Aufstand mit diesem Unterschlüssel?
    Stellen wir uns einmal folgendes Szenario vor: Eines Tagen wollen oder müssen wir den privaten Schlüssel wechseln, da dieser kompromittiert wurde, oder wir stellen fest, dass die ursprünglich gewählte Schlüssellänge nicht mehr unserem gesteigertem Sicherheitsbewusstsein entspricht. Wir können natürlich den alten Schlüssel verwerfen, zurückziehen und löschen, damit dieser unbrauchbar wird. Nur verlieren wir dadurch natürlich sämtliche beglaubigte Unterschriften unserer Kontaktpersonen und Freunde, die ja einen gewissen Vertrauensstatus bezeugen -der Hintergrund zum WoT-Gedanken3). Als Folge daraus müssten wir erneut den ganzen Aufwand mit dem Key-Signing betreiben, was mit unter sehr aufwändig werden könnte!
    Mit Unterschlüssel müssen wir nicht alles über Bord werden, sondern können z.B. weiterhin die beglaubigten Unterschriften unserer Freunde und Bekannten beibehalten und verwenden. Diese Signatur-Informationen sind, genau so wie die primäre User-ID, mit dem primären Signierungsschlüssel verknüpft! Subkeys selbst haben keine eigene Vertrauensstellung, sprich diese werden nicht selbst signiert. Der grosse Vorteil ist nun, dass wir diese Unterschlüssel für genau spezifizierte Einsatzzwecke definieren und nutzt können: Verschlüsselung, Signierung oder Authentifizierung. Diese Schlüssel können wir nun gezielt erneuern und dann an unsere Kontaktpersonen über den Master-Schlüssel verteilen können. Die Änderungen werden dann automatisch in deren Key-Rings als Aktualisierung des bestehenden Schlüssels übernommen, da die Unterschlüssel mit unserem Primary Signing Key signiert sind, dem unsere Kommunikationspartner ja schon bereits vertrauen.

Fragen wir den Status unseres Nitrokey Start ab, so sehen wir dort am Ende drei Speicherplätze für unterschiedliche Unterschlüssel, genauer gesagt der private Teil der Unterschlüssel, die auf dem Nitrokey Start gespeichert sind, nämlich den :

  • Signature key : Unterschlüssel zum Signieren
  • Encryption key : Unterschlüssel zum Verschlüsseln
  • Authentication key: Unterschlüssel zum Authentifizieren
 $ gpg2 --card-status
Application ID ...: D276000124010200FFFE432437110000
Version ..........: 2.0
Manufacturer .....: unmanaged S/N range
Serial number ....: 43243711
Name of cardholder: [not set]
Language prefs ...: de
Sex ..............: unspecified
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: forced
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]

Damit wir nun die drei benötigten Unterschlüssel an die richtige Stelle unseres Nitrokey Start verschieben können, müssen wir noch ein paar Vorbereitungen treffen:

  1. Erstellen weiterer Unterschlüssel für die Themen:
    1. Signierung
    2. Authentifizierung
  2. Verschieben der privaten Unterschlüssel aus dem Schlüsselbund, der auf der Festplatte gespeichert waren in die SmartCard des Nitrokey Start.
  3. Verschieben des primären Signierungs Schlüssel auf ein sicheres Sicherungsmedium.

Die öffentlichen Schlüssel bleiben nach wie vor im Schlüsselbund auf unserer Festplatte /home/~/.gnupg/pubring.gpg gespeichert, lediglich die privaten Unterschlüssel werden durch Proxy-Einträge im Schlüsselbund ersetzt!

Bevor wir nun zum Punkt 1. Erstellen weiterer Unterschlüssel widmen können rufen wir uns die ID des primären Signierungs-Schlüssel in Erinnerung.

 $ gpg2 --list-keys | grep pub
/home/django/.gnupg/pubring.gpg
pub   4096R/2ADD88EB 2018-11-24

In unserem Konfigurationsbeispiel hier ist dies die Key-ID: 2ADD88EB. Zunächst erstellen wir besagten Unterschlüssel zum Signieren:

$ gpg2 --expert --edit-key 2ADD88EB
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/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: SC  
                     Vertrauen: uneingeschränkt Gültigkeit: uneingeschränkt
sub  4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: E   
[ uneing.] (1). Django aka Bastard Operator from Hell <django@mailserver.guru>

gpg>

Das Erzeugen von Unterschlüssel erfolgt mit Hilfe des Befehls addkey.

gpg> addkey
Schlüssel ist geschützt.

Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren.
Benutzer: "Django aka Bastard Operator from Hell <django@mailserver.guru>"
4096-Bit RSA Schlüssel, ID 2ADD88EB, erzeugt 2018-11-24

Bitte wählen Sie, welche Art von Schlüssel Sie möchten:
   (3) DSA (nur signieren/beglaubigen)
   (4) RSA (nur signieren/beglaubigen)
   (5) Elgamal (nur verschlüsseln)
   (6) RSA (nur verschlüsseln)
   (7) DSA (Leistungsfähigkeit selber einstellbar)
   (8) RSA (Leistungsfähigkeit selber einstellbar)
Ihre Auswahl?

Da wir einen RSA-Unterschlüssel zum Signieren erzeugen möchten, wählen wir hier die Option 4. Bei der Schlüssellänge verwenden wir wie auch schon bei der Erstellung des initialen Schlüsselpaares 4096; die Laufzeit des Unterschlüssels wählen wir entsprechend gleich oder kürzer wie beim primären Signierungs-Schlüssel, in inserem Beispiel also unendlich.

Ihre Auswahl? 4
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) 
Schlüssel verfällt nie
Ist dies richtig? (j/N) j
Wirklich erzeugen? (j/N) j
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.

pub  4096R/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: SC  
                     Vertrauen: uneingeschränkt Gültigkeit: uneingeschränkt
sub  4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: E   
sub  4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: S   
[ uneing.] (1). Django aka Bastard Operator from Hell <django@mailserver.guru>

gpg>

Das Gleiche machen wir nun erneut für unseren Authentifizierungs-Unterschlüssel.

 gpg> addkey
Schlüssel ist geschützt.

Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren.
Benutzer: "Django aka Bastard Operator from Hell <django@mailserver.guru>"
4096-Bit RSA Schlüssel, ID 2ADD88EB, erzeugt 2018-11-24

Bitte wählen Sie, welche Art von Schlüssel Sie möchten:
   (3) DSA (nur signieren/beglaubigen)
   (4) RSA (nur signieren/beglaubigen)
   (5) Elgamal (nur verschlüsseln)
   (6) RSA (nur verschlüsseln)
   (7) DSA (Leistungsfähigkeit selber einstellbar)
   (8) RSA (Leistungsfähigkeit selber einstellbar)
Ihre Auswahl?

Für unseren Verschlüsselungs-Unterschlüssel wählen wir nun eben hier entsprechend die Option 8.

Ihre Auswahl? 8
Mögliche Vorgänge eines RSA-Schlüssels: Signieren Verschl. Authentisierung 
Derzeit erlaubte Vorgänge: Signieren Verschl. 

   (U) Umschalten der Signaturfähigkeit
   (V) Umschalten der Verschlüsselungsfähigkeit
   (A) Umschalten der Authentisierungsfähigkeit
   (Q) Beenden

Ihre Auswahl?

Uns wir nun angezeigt, dass aktuell Signierung und Verschlüsselung vorausgewählt wurde: Derzeit erlaubte Vorgänge: Signieren Verschl.. Wir wählen nun nacheinander die Optionen für Signierung mit „V“ und Verschlüsselung mit „U“ ab und Signierung mit „U“ an.

Ihre Auswahl? v

Mögliche Vorgänge eines RSA-Schlüssels: Signieren Verschl. Authentisierung 
Derzeit erlaubte Vorgänge: Signieren 

   (U) Umschalten der Signaturfähigkeit
   (V) Umschalten der Verschlüsselungsfähigkeit
   (A) Umschalten der Authentisierungsfähigkeit
   (Q) Beenden

Ihre Auswahl? u

Mögliche Vorgänge eines RSA-Schlüssels: Signieren Verschl. Authentisierung 
Derzeit erlaubte Vorgänge: 

   (U) Umschalten der Signaturfähigkeit
   (V) Umschalten der Verschlüsselungsfähigkeit
   (A) Umschalten der Authentisierungsfähigkeit
   (Q) Beenden

Ihre Auswahl? a

Mögliche Vorgänge eines RSA-Schlüssels: Signieren Verschl. Authentisierung 
Derzeit erlaubte Vorgänge: Authentisierung 

   (U) Umschalten der Signaturfähigkeit
   (V) Umschalten der Verschlüsselungsfähigkeit
   (A) Umschalten der Authentisierungsfähigkeit
   (Q) Beenden

Ihre Auswahl?

An der nun definierten Option Derzeit erlaubte Vorgänge: Authentisierung sehen wir, dass nun nachfolgend ein Authentifizierungs-Unterschlüssel generiert werden soll. Mit Q Verlassen wir diesen Dialog und generieren den besagten Authentifizierungs-Unterschlüssel.

Ihre Auswahl? q
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) 
Schlüssel verfällt nie
Ist dies richtig? (j/N) j
Wirklich erzeugen? (j/N) j
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.

pub  4096R/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: SC  
                     Vertrauen: uneingeschränkt Gültigkeit: uneingeschränkt
sub  4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: E   
sub  4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: S   
sub  4096R/E8B122B0  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: A   
[ uneing.] (1). Django aka Bastard Operator from Hell <django@mailserver.guru>

gpg>

GnuPG listet nun den Primary Schlüssel zum Signieren und alle Unterschlüssel auf mit dem jeweiligen Verwendungszweck usage auf. E steht für Verschlüsseln, S für Signieren und A für Athentifizierung.

Zu guter letzt speichern wir nun mit dem Befehl save unsere gerade erstellen Unterschlüssel im Schlüsselspeicher auf der Festplatte ab.

gpg> save

Fragen wir nun erneut den Schlüsselbund mit den secret-keys ab sehen wir nun unsere drei Unterschlüssel.

 $ gpg2 -K
/home/django/.gnupg/secring.gpg
------------------------------
sec   4096R/2ADD88EB 2018-11-24
uid                  Django aka Bastard Operator from Hell <django@mailserver.guru>
ssb   4096R/B815F8ED 2018-11-24
ssb   4096R/25704226 2018-11-24
ssb   4096R/E8B122B0 2018-11-24
backup des vorhandenen Keyrings aus dem Userverzeichnis

Bevor wir unseren Schlüsselspeicher im Userverzeichnis bei den späteren Verschiebeaktionen nicht versehentlich schrotten, kann für Restore-Zwecke ein Backup und ein sicheres Verwahren des Schlüsselspeichers angeraten sein.

 $ cp -a ~/.gnupg ~/.gnupg.$(date +%y%m%d)
Schlüssel in die ChipCard des Nitrokey Start verschieben

Nun werden wir die vorhin generierten Schlüssel an Ort und Stelle in die SmartCard des Nitrokey Start verschieben. Hierzu verwenden wir den Befehl keytocard des Programms gpg2. Wie schon beim Generieren der Unterschlüssel müssen wir angeben, welche primäre Schlüssel-ID bearbeitet oder genauer gesagt verschoben werden soll. In unserem Konfigurationsbeispiel ist das die ID 2ADD88EB.

 $ gpg2 --edit-key 2ADD88EB
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/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: SC  
                     Vertrauen: uneingeschränkt Gültigkeit: uneingeschränkt
sub  4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: E   
sub  4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: S   
sub  4096R/E8B122B0  erzeugt: 2018-11-24  verfällt: niemals     Aufruf: A   
[ uneing.] (1). Django aka Bastard Operator from Hell <django@mailserver.guru>

gpg> 

Für später merken wir uns nun in Welcher Reichenfolge die Unterschlüssel aufgelistet werden bzw. welche Key-ID zu welcher Aktion gehört. Die Key-ID 0 ist die des primären Signierungs-Schlüssel!

  • Sub-Key 1 - B815F8ED - E = encrypt = verschlüsseln
  • Sub-Key 2 - 25704226 - S = sign = signieren
  • Sub-Key 3 - E8B122B0 - A = authorize = authentifizieren

Da wir die privaten Schlüssel unserer drei Unterschlüssel verschieben wollen, wechseln wir von der Ansicht der öffentlichen in die Ansicht der privaten Schlüssel.

gpg> toggle
sec  4096R/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/E8B122B0  erzeugt: 2018-11-24  verfällt: niemals   
(1)  Django aka Bastard Operator from Hell <django@mailserver.guru>

gpg> 

Als erstes verschieben wir den privaten Verschlüsselungs-Unterschlüssel. Hierzu wählen wir diesen mit Eingabe von „1“ ein. Die Auswahl wird uns dann durch den * angezeigt.

gpg> key 1
sec  4096R/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals   
ssb* 4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/E8B122B0  erzeugt: 2018-11-24  verfällt: niemals   
(1)  Django aka Bastard Operator from Hell <django@mailserver.guru>

gpg>

Nun verschieben wir den ausgewählten Schlüssel in die SmartCard des Nitrokey. Als Ziel wählen wir dann richtiger Weise die Option 2 = Encryption key aus

gpg> keytocard
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]

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

Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren.
Benutzer: "Django aka Bastard Operator from Hell <django@mailserver.guru>"
4096-Bit RSA Schlüssel, ID B815F8ED, erzeugt 2018-11-24


sec  4096R/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals   
ssb* 4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals   
                     Kartennummer:FFFE 43243711
ssb  4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/E8B122B0  erzeugt: 2018-11-24  verfällt: niemals   
(1)  Django aka Bastard Operator from Hell <django@mailserver.guru>

gpg> 

Als nächstes verschieben wir den privaten Signierungs-Unterschlüssel aus, in dem wir erst den bereits ausgewählten Verschlüsselungs-Key abwählen und dann den Signierungs-Key anwählen.

gpg> key 1
sec  4096R/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals   
                     Kartennummer:FFFE 43243711
ssb  4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/E8B122B0  erzeugt: 2018-11-24  verfällt: niemals   
(1)  Django aka Bastard Operator from Hell <django@mailserver.guru>
gpg> key 2
sec  4096R/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals   
                     Kartennummer:FFFE 43243711
ssb* 4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/E8B122B0  erzeugt: 2018-11-24  verfällt: niemals   
(1)  Django aka Bastard Operator from Hell <django@mailserver.guru>

Nun verschieben wir den privaten Signierungs-Unterschlüssel in Richtung SmartCard des Nitrokey Start. Hier wählen wir nun die 1 für Signature key aus.

gpg> keytocard
Signature key ....: [none]
Encryption key....: 7EDD 7456 77A7 F355 C4A8  930E 29E1 FED4 B815 F8ED
Authentication key: [none]

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

Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren.
Benutzer: "Django aka Bastard Operator from Hell <django@mailserver.guru>"
4096-Bit RSA Schlüssel, ID 25704226, erzeugt 2018-11-24


sec  4096R/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals   
                     Kartennummer:FFFE 43243711
ssb* 4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals   
                     Kartennummer:FFFE 43243711
ssb  4096R/E8B122B0  erzeugt: 2018-11-24  verfällt: niemals   
(1)  Django aka Bastard Operator from Hell <django@mailserver.guru>

gpg>

Zu guter Letzt fehlt nun noch unser Authentifizierungs-Unterschlüssel. Wir wählen also wieder den Schlüssel 2 ab und den Schlüssel 3 aus.

gpg> key 2
sec  4096R/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals   
                     Kartennummer:FFFE 43243711
ssb  4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals   
                     Kartennummer:FFFE 43243711
ssb  4096R/E8B122B0  erzeugt: 2018-11-24  verfällt: niemals   
(1)  Django aka Bastard Operator from Hell <django@mailserver.guru>
gpg> key 3
sec  4096R/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals   
                     Kartennummer:FFFE 43243711
ssb  4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals   
                     Kartennummer:FFFE 43243711
ssb* 4096R/E8B122B0  erzeugt: 2018-11-24  verfällt: niemals   
(1)  Django aka Bastard Operator from Hell <django@mailserver.guru>

Nun verschieben wir den privaten Authentifizierungs-Unterschlüssel in Richtung SmartCard des Nitrokey Start. Hier wählen wir nun die 3 für Authentication key aus.

gpg> keytocard
Signature key ....: 9EF2 5BA7 4935 4D52 B2F7  0044 86AF 96F5 2570 4226
Encryption key....: 7EDD 7456 77A7 F355 C4A8  930E 29E1 FED4 B815 F8ED
Authentication key: [none]

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

Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren.
Benutzer: "Django aka Bastard Operator from Hell <django@mailserver.guru>"
4096-Bit RSA Schlüssel, ID E8B122B0, erzeugt 2018-11-24


sec  4096R/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals   
ssb  4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals   
                     Kartennummer:FFFE 43243711
ssb  4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals   
                     Kartennummer:FFFE 43243711
ssb* 4096R/E8B122B0  erzeugt: 2018-11-24  verfällt: niemals   
                     Kartennummer:FFFE 43243711
(1)  Django aka Bastard Operator from Hell <django@mailserver.guru>

gpg>

Zum Abschluss speichern wir nun unsere Änderungen im lokalen key-ring mit dem Befehl save.

gpg> save

Wenn wir jetzt den Kartenstatus abfragen, werden unsere drei Unterschlüssel entsprechend mit angezeigt.

 $ gpg2 --card-status
Application ID ...: D276000124010200FFFE432437110000
Version ..........: 2.0
Manufacturer .....: unmanaged S/N range
Serial number ....: 43243711
Name of cardholder: Michael Nausch
Language prefs ...: de
Sex ..............: männlich
URL of public key : [nicht gesetzt]
Login data .......: django
Signature PIN ....: zwingend
Key attributes ...: 4096R 4096R 4096R
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 3 3
Signature counter : 0
Signature key ....: 9EF2 5BA7 4935 4D52 B2F7  0044 86AF 96F5 2570 4226
      created ....: 2018-11-24 18:38:34
Encryption key....: 7EDD 7456 77A7 F355 C4A8  930E 29E1 FED4 B815 F8ED
      created ....: 2018-11-24 18:20:41
Authentication key: 5CE2 A469 770B F92A 7279  DB2E 494E 8C46 E8B1 22B0
      created ....: 2018-11-24 18:50:42
General key info..: pub  4096R/25704226 2018-11-24 Django aka Bastard Operator from Hell <django@mailserver.guru>
sec   4096R/2ADD88EB  erzeugt: 2018-11-24  verfällt: niemals   
ssb>  4096R/B815F8ED  erzeugt: 2018-11-24  verfällt: niemals   
                      Kartennummer:FFFE 43243711
ssb>  4096R/25704226  erzeugt: 2018-11-24  verfällt: niemals   
                      Kartennummer:FFFE 43243711
ssb>  4096R/E8B122B0  erzeugt: 2018-11-24  verfällt: niemals   
                      Kartennummer:FFFE 43243711

Öffentlichen Schlüssel ausgeben

Damit wir später unseren öffentlichen Schlüssel auch weitergeben oder zu einem Keyserver hochladen, exportieren wir diesen in eine Datei.

$ gpg --export --armor django@mailserver.guru > django@mailserver.guru.publickey

Diese Date enthält unseren Schlüssel in ASCCI-lesbarer Form.

$ cat django@mailserver.guru.publickey
django@mailserver.guru.publickey
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)
 
mQINBFqxBeoBEACb8vp3slLjFEokgbIJQ1JVlqlFtzcDxgtAZWe+hE0kz8Emw231
Ni0QZbjBOxDJPfuoIekeTCSAEFKZQUF/j7r07qhrHrWy42BQJSzSbzD05LvQpJyp
AS9cY4UqNN4IUTyGzZNZnhIWyVlwJ0CaiB1zpZZqUVYrbfRnhc8xiFPiDjiZVkXS
DjSNmJlloXKyX0tpmrZ6cB/96pf4CFqosiW3qgLLg00ewF7Ng5l9v4ui88Rg7pAa
8/uQlo0Sbk6QELnvKxMfDPG4zu3lns9ogYWdVKDCllsaCHa5emfOjuYDk7wkrXVz
X2Y2dMi5pcsiwNwJ0DUVVKz8udRfCFyFp3i+QiZ/BhlGUQNcPQGzDBAWA0uO4T6t
JkldAw2Mos8VqXbjd4wdNAipw4l8ySl+WWgqcST5YWNtQfcipy4Cz1aQNBjlwT2F
ko8RdOnwsSzqrtXFqBginAvg0kflK+i11X0/W4Hsc6r7WJFNM2rPrk06uK+DObhR
bJpSCdl5CozWRYbVWzkv2NiYaI7dWTxCHenWPmbP0Z9VDm6dNH15V1TXvvrRdUt8
h9DEXob+fPH9P5YCyD6+FlIjoTiKFB7pNtULRVfCG8kM0BwnvCM7/8T6/FSxvmgZ
0HTWhkFwFAQB6JUIPadVQHQJ/dnEhf4X4ezw5Iias0gyXDTDwr8OaxHy5wARAQAB
tCNNaWNoYWVsIE5hdXNjaCA8bWljaGFlbEBuYXVzY2gub3JnPokCPwQTAQIAKQUC
WrEF6gIbAwUJA8JnAAcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEASBlPdr
M+i8WUEP/0BULv3cPqpExrCtsGxNJlAuYRFRfQkRtrWom14YeuomBnAQ2XbHlc0x
pDNNT1C7OhjeTr49Em9BFli+kPbfSLl5bFnJSuxvlOPY1PH/IkWRDPnTsRTAnamD
ZabZgwy0T5kZvVOv6H4b5RiHgj/ChFVKLedm6dUE1bpK3c1mjQvnxUVRaEsNTBy8
cPKV+sXDqpN2GNeUvpBARDaU2vyYuY5XvhHj+xe0jodr7Snn/u69BsBotoaZHZ9i
r9bym7Iv/18PdZW0TiR6hOdTwVB0w+RzmxPtPPdva+CYtK5aU1w59zDhSCa3hJyy
WtMTSfSNry9wu6KtrYPcjK7K/JDgT5XRjgswZTKlQ4WAeWj+gVwuKKamh9BC83tM
KuzpG/o14Vorf5JSMeDonLFnaj14Zzgz15dTMeIQapyk+FrtrAbUbW/Op94g7RiE
xt3Q7EKc/E63ZuQwjE0LinTUPciesOwTAN5bSiL3usrlsm21g2uP6Vgn7AgTrhnM
RT4UX80XClE2YksNroMHlhfRMrdMIMxvKNps2iYqiCe6lRZItSCYMgrQK/8ONagZ
BxZO9sm8tA13sZuXLxJqXkLtKntKSgfQG3cg0Zr0QhwPTAIHTvJqg4nvpbYdOBmK
HVGumzQtc+8y1+E842OllkIYQwBSg5+/dqifLF5wwIWePVr0AvYytDtEamFuZ28g
KGFrYSBCYXN0YXJkIE9wZXJhdG9yIGZyb20gSGVsbCkgPGRqYW5nb0BuYXVzY2gu
b3JnPokCPwQTAQIAKQUCWrEG1QIbAwUJA8JnAAcLCQgHAwIBBhUIAgkKCwQWAgMB
Ah4BAheAAAoJEASBlPdrM+i8v6oP/iVH7pNYsgD3gfpm393EvIbs8EblPSGgEqWO
JlVZx3loLq/sJTGnknhtdKCzFNVr6aUlXqu4HwXG6xAl6ogVhmh4BJrR4uj8XHJz
XJWmw96sMXR5PaekwhYtB08SYDDj9TxQrTS8YSg00KGdrZyqGLMFU46xILaC3LLx
PFyyx8SX2Jiw8QSvtLxhDJBOyT6m+E4iIcYa6mJm1Sp9iz9kMgRzgPhsq2sRCZZh
Fgszhug7DTec6/0VuSc5U8ECPbJvq1sXO4p/QwajdDEvXf8Lx4VS5Ihumw2zXm+n
EMD8M7m08oc2ibCYqVwRrzd5o4lUZ59Wilx1COOxLzJpzpmO6v1x+HeiIRDALLSD
FsJKAHfyqFhBp9Lie2YlrZmVRR1rN9Odjqc6wnb10veYwvZ1vJGP7ybjoWvSnxV8
4abx8Q10NaLNlVUXN8m4hBZdnBsfpi75TftxiHzXO8I4meLkL/ddYGpJOk+UYDpB
tF66ZVd2IDEVzR6x1P8QlGCLXEa4XBc50oWgn0O1QUSlAD6HXBYFJCyhnPVcmbr2
25crUXV0llAWxETVtIj2/VQIUakJpIatihzRKc3pzVNKXv9PC0R4M/EA+dzeRYtq
vd7ebGgrjLzk2T5/y/WPzckv1Hf67sYQxJ9HY+HVp+FZ25pEgOefmlAQb247Jmvl
xT2cLwLItCZEamFuZ28gKEJPZkgpIDxkamFuZ29AbWFpbHNlcnZlci5ndXJ1PokC
PwQTAQIAKQUCWrEHFgIbAwUJA8JnAAcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheA
AAoJEASBlPdrM+i8SY0QAI8MQR8tEtMQ8IpIeRISBJfCgjwRVHKHySjMztorJYlv
42FBuI4jo6LgQ7xehzHdgW8fATMmEwRekm4OcwEpGtDYXj5z2gwHejB4JQ/Ub6Gf
TP2aLl+3wA3RoqEqKi5JYb23PRK31Yl7lRIoBrdq2ygfIwinLDz9HbPD1On32pBc
nZQXk+HOHy+bZ2bKNLNta4dcQW+oyH0ZD625kd82XKGKQdnaDo1hu5RT2PtQO9VX
p8gfarI+r33IpceZYP+Dufa/rcgHFv6bWN3GWb7bRQ+iP0Gc5UTuwquysb/Ak/br
yANBbXiuRXWseGcw0OuCr+4MS/yfWQrighPgEUQoIRkrLGBD657ljtpmJEUjHqtW
Bz5G17ThpIQFS/2VtBmVHKTD5b72ciZVln9B4X2ofJcloR7DlpohZ1DCX9vK/k6b
B2eMEP5XjfZ9nLv2EYtnmEdiFcFs0PLna2eCl70gBoHZXUKN/fZW9q83u8YG3iv+
vmnNDbKxwGesy1BaVnjIWtDtZL4pxxFCB14TqDUxSs2kZkR9wE263Ae6q7m+hWqt
8Yob2GUK16u93JiON1czL0gEmTFO3JYOqbAqNlh3qKPnRBR53eApu4vcCrLEZTAP
2YushC2/624QFkH0q4EFe65wCbaUFaNV2BJjL0RK1tLPpp1zSKHbwMdKcEUszLbt
uQINBFqxBeoBEAC6WQNcYwfFcb9uLZe/jL22e8CBlCKZbHuWP28iDut3SS8LCL6o
IjXinobGMxRrC9NsmcTP0XhhUhq8BP8AsJfz22EfUl5ofcZSAknOt6vdQxfWdSU/
yEGQW4m7lSaBD9s+APvd7ACT1631doUXOC5Kqzbwvk1kJtHue8/ewszmW7KkysBW
4/qdx93KMinmXkIKy0z7HdWt02HDSzebB5r5IAOs3s2h95HpIrfjOL3eh+WAgWKg
W541zUTrib/fp+6F2rtO/USVOZOyDM6GBlKC8yyBS+EVjakN2nphu3JrNbXP8e59
zMHjnFKE8oQhpBBmI5tMIEq5mDthT9b6mFZkvhG2mVaFBv74LVxsd2OD7l4+F/Xr
fu9iJjHDp9u/9+VvY0Hea+N0+TsrnEh9a8zretgUuM53922DMcQP6Wjbv+jvZjyS
6u221deBhooxjCZQmIp3B6JybmjRMYRC3s9+hkn2u46DIy/tiYCpDkX1vUQCeLLf
fYc99gzwMzg/ecapxTC96Yyrie+2C0iBoEM0ohr6MycKa5tkekw4c28xm5jtb8cE
kHwAYtNnkvWFfLdtRJXLuGZED/adOYT/OrPv5ZUhB8agoWfX1YP+AtLoQd5k9Slm
Ch5bOhK9UCcKJdQ6yoEWcqlolUk7LHXeEkQYM/d01ZuZiVDW5mEpPmVSmwARAQAB
iQIlBBgBAgAPBQJasQXqAhsMBQkDwmcAAAoJEASBlPdrM+i8aacP/05d6tTK+CTz
IwUNAZW0Gm5AG6vg/Hoa6RopxA+o+KpOQyjGkeQ+cMoY8SiFtr4TjE+a4ocZbonE
4O6aqo+tqVpeCPtKzLdBp7a69mQ7+z7QbwBwyiRSvsvnnSu9RdnCCEmAj+E01djx
DmZfT94pvz70MBY3rt7hjRNgm1d2RtmcwkyMwE7vTuSakIlPLH4yG7deMEZDxjYK
yLZl+0gISJQXNwaVY2jTX5iglYI8pyoE+aRREEbeqaQKuqKvuOLsnGF26RSNBWg6
YIuuNKP86xNkXKrr5HqqUmjWNHg4QorKfTk4gtcR3gzH9U3ysUqP+gWIuP78PICq
4mPT60OCp7XyRhGgiRO5/owvqj6HTCqGYq3UEBsCgjyNxaS9G32khSLsoFWSNGQp
3PbO2poj6sJSyHSs3LZnW2bweb0uPfNlbTSWIzqoUHbSS/7SSksSjAwSuaavvdWF
eYJEmJ+Zx0uVsKpeGtKIgV/KEWcGg8vWXVY7Y8RZPZnFBbpF8bVhd+4kV4lLsEGk
lJsUFf1e/P0KsIsTl81Gr7i6gOIc8ICHc0/DatVYO9KeTX50Omvjc+JZlMOEEqni
4Wn33thSBjcLF1fG14PiX0XA5P9or7n/PqD2NTKItUGtMMYQlf7zSj6cQRnUklxG
Snc41CqWfodSavfwnWe8Nf6bLwNs0WOYmQINBFv5lnkBEADAstefWzpzeZy1TVl4
nM5KmyvPmPMciQaL2+j2irsTPt/nM4Dj+4VVwh7htRXqC1yKe8lZz3cgQuoqBwkk
bzS1k8W5hyLFMq3TL3uo+u6we3+B6fgGL+3XktN5aMAuX24hOLLWnm8/UKOMLR+r
woHJNviL9kYI7YBVz859RrSWXHiduV4eFYDKH7zBO+ZzwkAnRmakicnr4n6+1bKv
sXsBQGdB/R5oOZFnROUAN3qlZCrnYSo4f2LjI5m7TSLP0CoX80G2slBCLAjzIbpN
sXZHOIB0hgy2FSlyJwjWycms8pknZJ71JlpiTN5SrSG5rnogLCnNF1siy7ag92gq
LNR8712tlWAgHBE+duFyRHa/t2HHi9JW3VcQuB+tOEe9KclWjzmrdp3vmVeF1uqp
Cmjt+OwRYo1vh5ekgb9kTo3V+gnULKPNleneuni2M2NILishQcHdnB9HqZEyhWBN
7LODG2kH8LBwDk4gCR2giu03csvpQXagwlSRoBDoyDu9euyhrRV7LzhTQMax9s+q
nsE8TC3VnmsdiZzGJEANL7vO4KGjCY40BTP5AbZzb8B0gtlSAlYf+kEnUYg8geyE
fd4OfkJ86BwPTAo+SX3ZBxPnFDMS74cTuPtIbBG0tvlSh5V8BV3snxir4O1aqL75
8/Yf0HnvOnYSgyaCf7BU/qcLyQARAQABtD5EamFuZ28gYWthIEJhc3RhcmQgT3Bl
cmF0b3IgZnJvbSBIZWxsIDxkamFuZ29AbWFpbHNlcnZlci5ndXJ1PokCOQQTAQIA
IwUCW/mWeQIbAwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEC1NcLAq3Yjr
RKMQAIxF/npeih19TOGnsr/tVZaVeYWlS072Xs7wKz+iLYlykuujxPz2jX7GMK0x
42fwuG0xEgpk3ZhAmhPQPZzLOkJLa0MphdO1uTGnuPax4iT67FjZrTT6D0bc0DSE
R66XGqRcPx2UYkXjjrx9fqm8gZv6zvh0Ouk+/OP6a63bz4VVMby4GI7IFJspk6xd
jzBC/zcq3sXqO9qirL1Dqa2IQBwDDklqf4Sw7IMAgZp8j2PUZ0jhBL77H6+NZYjU
lNPqPC1/17uwRqQcmAA0uIN2CgMFIPajQ3vfdZDFSJ/gIek075qFkTRa4jmK3WPc
sAWKQhCLyVsY9HeTN+rGWuewpYKjquIHmfxQwQQ0c+pLT/JZgaa81tAVfhfSzQ3D
Kl83/NFGzZrJbRGb+Gx1Wpz+JJI9zaLTZQp/xvuzL19SOGPEq2ikvsTEGGNs7vV5
A6UKVaOMfsYWxTOS2VGzneP6ipcHJvTpQ4R4l5Fzh4rJGv1D186w2o9ve3zA6Ivv
INDHX4LVbfdH/hhDHIkyjRjj5W1UCUOz8XWz8BNwWSKZE63DiV3kPhCF38K43cuD
nIOC7w+fp14vIjDl3jl9mOlhMb6HZqXjNaSPGH58fkRCSUfcWkqwraBQ46C84gSo
fAG9l5Bz1c7SkZ8jZg0xCKTIehjpN8x2wJFHnc+Uc5dDpjMjuQINBFv5lnkBEADq
brqkm05OQq1EVMWhGYcBCpZjHgR9tsgmBd6/8zBFvQpM1EpVQ2DjoUMdfLFGN0VE
buUD5kuA1rQ/wUPt/h5kow5r+RCmmuV3FwPwzjMNkCsyz9yFqv4SddoRqwjCsr5B
n9I3ho39wdICSY522qdTME4iRjfh8Nnz7k7yWBHhOyjRoETeBMFtT+wLrbT2h/1m
5XZ2HdZM4y9KSvKj9QY2tVGCMv1WHicHrbctl+sQE3QscHjpqYfKLU9XsG8zRkDv
sDJldp5aOjRxnbdr/jQ74P//t3lMekKNGOXNAgbPPZnxaVC6fIt4GbH9M0cS9dE+
LcIwEGbhd4WHL82ZPZvYV8XoS1/eN+nV/bOR5YwCtBV6Jmeg/wENKYnrX1NJJa3+
DmOTUhiyGbR5+q3l5vahkWPGaXJzMp7GS4IcGHjZR30cz8so2b/Y0lmpRtBsT14Q
dbauKpSVBZ/hxmnF42BafQ8vWe7IDBQqcHqU393gko57fBhCs5QG4gj2rEHs48gJ
dm846U6WVsnSEKblcRo8fUesMezSxrAZMMcceLYIyGBv93wfrQuQF/5fZYaOjZ5W
FvIHtsOzBle5gQLhYewZJZ5nDeun39ruKfNyoPqxwXJ1mIteHaIrVrCJT3IIYszf
FcRksVY6vY50eUoXn4nI1NSv4BWGqiK71/wmHUDi4wARAQABiQIfBBgBAgAJBQJb
+ZZ5AhsMAAoJEC1NcLAq3YjrhgAP/0dS9ykHlhZS8Sk6edCIsvUmIj0j4VrmLgBx
RDI8kxjfHnwVDsA3i80qWJ4jgCvwgXM1stmN4xIE/dvmI4mPA1bnLmMZkbVhJr4P
G3GvCHxFAmbZD65Kv32YZqii7GfX+0Xn3L2O1ZVXatzG8dgU7olJ0y+0/1zWq6o7
6hf3f4ivsh9D8YYVyJFXBc9U67O5q+tZMuEb7su6ypIEby2BWmtr1Q6xb64N4nfH
ROgtlFHLXciVbDFM4FimUmH4IGDV7XCBm11+XUxaEMa6KLJiyZZj2iL7uZE7C9/Q
xIkCBXFd7zGnLmKJu1XqKxAoPL8CEsohyME/4jMQmqMr5nZKbmyMzgEU02dphLrI
tULrfVT2Hemcrocx0EIuqsReOUB9VEe7EtCEDG4vmQ3Ni6Eb+L8inxbB1Anwzr06
8H+78As2KleYFx4Li2vTUmKx57NDFcAH4jl9zy/D2u0WF7+gzEc1ou4gFhiIoCLQ
bG4teqKxE5f4xdCS/iUHQmjtBJvwBkcSbAG7/jMK1eYrXl8pO6HKUhMfhkE03oV6
KKHbxEOFyKE5gepharYxMy2lLjKL31u89XYULhncQkFQmCDtWwKoeD9XnwUuiFri
JadOP8vyNTP3n99EaEzCC4jzPhes0rSQnBSYcM/4ncyZfvhoBOGFRGdobnvDvujj
Q5p4i37xuQINBFv5mqoBEADiQKASQcZE4ZexBeSL0M1lIPu3XsIbujSNh7V3KJ1q
rplno74h/0Yd6L6OFat3M4Ch254j8InyCCHh0olU2pMIJDAbGJObihaqaKBm/TAq
+HlFs0Cldy+Kk5pprAl5z5iLLh9+HL+vart6c4hPNL4eiiQufi2wXrwp6bC5za/L
MV8IXpX0FbWXOKCzYV2mciNeXaJ1EeE99BnQN2PJ4XdWdjRZuyPWo4oj6Ze07f1M
17o0s/DVOm3ZVeT7FYb3Ia4R4sJg6EiOamWhVatsPoe0M3MBNXpWkUxQUVRAY7+X
+kqe8NaPVRmdwiaPGl4D79B5dpFUsmDfYUnzTOl3PdTsE65xKJ+wjcXbXk8vl6b4
pUnC7SJaOmtCIPEQyyDEwzJ7u+yOupb2varLLzRPpQLtbtTj9JNqryTHrZ9mcA6T
+pulUBKU5PlZUQbVroeKUOETjVzInhb9NAgOmsEsz6hra1OTO2hWdH+SDrIfTKrx
MQOTFT0Nnvbu65l+cp8tH9H9EtyfYkVQh8/F6SSltAqu+98OM36itH8w7R7kbkpX
GGeMN4tf1p8P905+Um6p8Avkb7/rsRdqkaZtZnq8RsbPqbLDtH1xiMnLeyzKXvsx
arkOdwkiCBW9rU2dj75kpI4z+2shYOC87lmGmVyzEUctV3gCvsPrIXmvxwxkunVr
+QARAQABiQQ+BBgBAgAJBQJb+ZqqAhsCAikJEC1NcLAq3YjrwV0gBBkBAgAGBQJb
+ZqqAAoJEIavlvUlcEImOVQP/AyLNTA2nIGf0INYYVPAA2n6SxTmsdoPfW6FZ2dg
prVChQUP/+CxUhEyUHLUWqJk+vpCGGTO4T7uafdrJHzuGWXJNZFbWiWi/cH3SfGC
6owBrntsXYwfsvvQMZEylfW4wiFYZ9PbTt4KS1oRTnyINFKUwLjf8I7TBNMv98q9
8FHogLR1y3BYvkYTMqFcVC6pblzyIfkeB+7TMvfrWHBnG4YHCvp+YUJtWP/T4tWL
gNvSHX5hXevUXZMnq6hNI2QVNOIhjvsT1Gp2/ZtWCgB5XOgfAlfNhIxmrbH42Fbv
5ZH20Z066nvIZ/hu2hrGT41A2yKOMgzzPIjWJcpBPR4LTXfeMALxdcHDFEquOFvB
fZSjOBNgDiXh6hrm/As91v395gMB/DdDj5Br87hoabCVCwDR4NMH1Sjww3r4NY6k
NriaCU0F6HDO+ywdpL1Dptj6D/RhDCke7W+SrtO+Xl0qSLq23rLa4bEYAYA5WyCl
jplqyThhWgifUfJrAivkZjyg/cU+yDH+a48rdvSoJaVMusOpCwNb2SAybdwS3lYl
X5Oqp11EA4Av8/OeBhTnvbgbUBcDYvoiVWCc1xRszaoSXGy0a+CB6RbwXt/54YQ9
R6Y1znsAM0p3KjsWgTyxC9/dur73JhJzQS3mWjm97awxfAn3CZ5eZd/O/16RWhgw
cCFnSMYP/RdET9oVg3ZFrwFdvTAOwnobAp2DS5DVgOJTLDBlVKqIB5JeVeZLGzg2
86nHDZivHp11SKFbBfNWHTZaU4X5J60Ve8cn6ggWYAfkvJxELt6umw3SXw+oLRRe
WbJGJXM2NUAyCATgbLAa+frCFgvspO/QPwoWTQTqNxEXjqO1znxkCgo0glWExYiq
RjZguv+6NbmSFxMFbuRSb+kQp2iyy6g6MKBo9buJoMveH2wWyIw485s3Ij5ukdpY
U7eZRkljTm3TnSDOjatrTcw/CQGLqXUZ4GoaaCvv5ASsljrMfFvJiZZygDl3B3ci
M57+Hv8My275jG4d2DbMoeWRmft+mo4J2At9v1LXlgG2G3w6GlB7st4Gz6f3N/Vd
8XNAKE11Ps9AEHFygD4tbEJeKAAkCXzsC/yeee9DC/wHbsTo6ZDfztQllf9Mqsu9
bVxapqAMS4O2mCUYR9mvD6NRO2wti2uIkjU0cI6MeSidq/7rysGPqBZfecQght+6
ImPpqlRR3CIFCv3adP8ATlgAfFAwGKxUu2Ev9UkkYEDc/v1op/ZGi84S59dqIpgL
bLmM4Eb5Ro1y3w8EMw3H7LdyU8GQCr8wLbujVowYcQBzyffgSdq3jbsu17OEk6tN
X8UlzMsOnPtwjRG/dv786i32cz9Yw13bfoUrirNsJUptuw8jncjQuQINBFv5nYIB
EADCgCvBPdwrYXqcWxH26kWJP4lwbhN7CPVFJ8tC3eKJ4Vc7uAoPIkJmQTrLW5jm
QYBeOcqUGV2zuN38JUIsaSBlIn8b6kZ1iURR2REl9cR5pPZNXdF+1GnMWYurm58V
6W0LJqvOA396fQN7ZVYC9FDVzlGv51xdmULVU0GZnlgq7jvaY6ySSInW041uWXBC
pEuyd6frC4B9ehPAWANQB/rBG1zGUW+TJBbs1VvKSevvvixF3WG0yihG6NspC5am
Q5SO7leb9S/rzF/Vn7Qm0pSY6Mz7QW5HB0psIw0Fo1u1UgyBP5xYjHJO4aKskXhl
e0OeTHHT5g+gZNN5ULKGBRnqOxk/7wt4gnYDXXNOSqmzLU9SQLCStAANibsdEa+V
5OZQolcEgQALEFSJSEfbonhAivkktDpYsMsYscSaJXPG+ft+cJTxV8ewfv4oHui1
nBF8H+RvBlikU50esQMplk/KX2c7wh0WcGL+DSjxyRCJN7O1S9sTPe/jVeLJsezV
vsMbyNDv9/YkMf78mqOijgcbiWn8HdM3ITVKZ24+K3HODqPRwt2zNUXFz/vTryhf
BBw8hQeIM5swvHNYTHZWQjWS0ZQmMAvqM5lnnhND9gKqFHNr4833Kq8fBgW+vdHF
cM4DOVgcqiINhX8Ac4GqOqtctFq2T08UWUPUddE4QuLjpQARAQABiQIfBBgBAgAJ
BQJb+Z2CAhsgAAoJEC1NcLAq3Yjr27oQAJ9jwPlwmz9cdRYC1MN3V7YRCtaeUxEI
vFR+q2wKTV4H7rwIZiU+O5L3fyfNVA2/5m6fg53YLozMyQgIO9Caxi1AobGKDYd8
z2hsfA+cX6v0bFMTIQI1Jfzwduy8FTt6wrtfW5nwJKI5K7qTgxkzO/XPbvqs0oHB
AYOzBCE1mhOJyR2vUS5QRbcuLXJV9klcY6LYw9GkKsf+7ivd5wqEYDvTog6qlW3o
53DWU0LQcYmQG0PRqn3I8G1dEUAxWxy34WTuqW5TE8x9wI6qZeUYyt3/aqZ2u515
b/8lMFeTq6Io9MF0r3jD+dm60e3yibUmjbqP4r4xqbcYL9djZBeV0VmnCDzMGgyM
xKh+Ej/xYW2GZGm/NJcT2tLZ6Z5KzxNkPU6gKUIQFfepgZAHLPtNQ6pEUe0ySGMj
KHcfklnFrY9sdX9BPefIlha/lLorcHclt2nB9+wVy/eee2I70FvdjgpmvPU3MMWR
RmmtAsqORFZkpblJNqxmUM861H1mh8q71x25iIpTczld5X4L7MB85kyXK3gYR4EP
YaP7QSWSbSvomlNSDibZPkBEik+VpK5kJ6gvaXUmETwpTEdeNw7kcc9r35FYWLid
08y+Q6cJyfy5I1tcfUpIr5qHGIqFQ28BGr4KT9GzVoVdGWn9x+xKsIP3Ft1q378q
RDp46CjW4gse
=WChe
-----END PGP PUBLIC KEY BLOCK-----

Verschlüsseln und entschlüsseln

Nun werden wir kurz einmal testen, ob wir mit Hilfe der Hardware-Schlüssel-Karte eine Datei ver- und wieder entschlüsseln können.

  1. Zunächst Wir legen uns erst einmal ein beliebiges Testdokument an.
     $ cat /etc/redhat-release > testdatei.txt

    Die Date hat nun folgenden Inhalt:

     $ cat testdatei.txt
    CentOS Linux release 7.5.1804 (Core)
  2. Nun verschlüsseln wir dieses Textdokument:
     $ gpg2 -o testdatei.txt.pgp -a -r django@mailserver.guru -e testdatei.txt

    Wir haben also nun zwei Dokumente auf der Platte liegen.

     $ ll testdatei.txt*
    -rw-rw-r--. 1 django django  38 24. Nov 20:38 testdatei.txt
    -rw-rw-r--. 1 django django 962 24. Nov 20:38 testdatei.txt.pgp

    Die Datei testdatei.txt.pgp können wir nun soweit nicht mehr lesen.

     $ cat testdatei.txt.pgp
    -----BEGIN PGP MESSAGE-----
    Version: GnuPG v2.0.22 (GNU/Linux)
    
    hQIMA8oyvX4CemyZAQ/9Gnw8NSIvqSoTsWxITtV7d5oWIhBRYW5D7/OkDm4q+eYr
    4dFI2XipORxOS6KIJ+xp9IcziV4D+RpqmI0kjCy/4pDotYWERLA8bX5JToPkUdgZ
    nAvrZIL5SWKMPUnozKDlACAt4LifvPdejyMhDgaUBt+YHJGt8N7xKNg9MvKZ+kN2
    0kHDsTUPGfjgaFl9lntLIuoqX8qROG7PuKbAIJoOI0eQKhmOhXC9Bc/ExOV1UkKT
    DMysmwv2sXHiftkJLw94znC+If+Kc0ql2MyvsqgcMelvTyov6jOy8hopf2SkwTSJ
    LLtSMxOq/44h8CM2QzxplOGAc5rqWLsMEuJSb/+InhDtCtOdVnw1dwMvgFJGn3R7
    IJYrwd4ip6R7Q9uPm3eAx/RmKtowiHRrgKNC1yzrPUCgYVOCE87mjZVn/Ksvi9kp
    RIrMeuiGQ+igF/VYKnhTd9XOL1A35eP+CtMbY24pT2LLfXLTgJBTtJABmwZCHyPS
    y7NXNCwKqxv46ZzIhdUikxYvBcbT5Xc8ME82Z648M0pcBCo4L3q2TmbEvCPobj0/
    2qzpNrO9YVAvhqiqFlfu4cdV5Jf+sRDGMoTRjae9fut+oA8Hi6gmR92nsnX223Wn
    oG34HfLTJKLNTT/Tng6AJOLrWKtiAoWC3ApIcoHN2M53HUOCRgN2gtj79I6pjdLS
    bgEvj9LJp5YbZJbd7mO+YTJ4N1NNJ8yeKXrL9f0gx7otGI54tpPrk58JJQnCxG3o
    ldJT1hH1Iq6QrOZ6kGDF5oLhoRHzQzh8QQkD5bD9YVHC03V4c00eXDCEk5jDvSld
    GClAjm+uZQngqfUwHhMZ
    =mDf3
    -----END PGP MESSAGE-----
  3. Nun entschlüsseln wir unser Dokument wieder.
     gpg2 --decrypt testdatei.txt.pgp > testdatei-entschlüsselt.txt
    gpg: encrypted with 4096-bit RSA key, ID 2ADD88EB, created 2018-11-24
          "Django aka BOfH <secmail@mailserver.guru>

    Den Inhalt dieser Datei können wir nun nach erfolgter Entschlüsselung natürlich wieder lesen.

     $ cat testdatei-entschlüsselt.txt
    CentOS Linux release 7.5.1804 (Core)

Schlüssel aus dem lokalen Schlüsselspeicher entfernen

Löschen wir nun den kompletten Schlüssel aus der lokalen Schlüsseldatei, können wir folgenden Befehl verwenden.

 $ gpg --delete-secret-key michael.nausch@it.piratenpartei.de
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.


sec  4096R/2ADD88EB 2018-11-24 Django aka Bastard Operator from Hell <django@mailserver.guru>

Diesen Schlüssel aus dem Schlüsselbund löschen? (j/N) j
Dies ist ein privater Schlüssel! - Wirklich löschen? (j/N) j

Doch Achtung: Hier wird der komplette Schlüssel gelöscht, also den privaten Primären Signing Key und nicht nur die Proxy-Einträge! Dies kann zu Problemen bei der späteren Verwendung des Nitrokey Start auf der Konsole führen, da das gpg-Programm versucht den Schlüssel im Schlüsselbund zu finden!

Der gpg-Befehl --delete-secret-keys hat als Bezugspunkt den primären Signierungsschlüssel und würde beim Entfernen dieses Schlüssels natürlich auch die Unterschlüssel entfernen. Da wir nur den privaten primären Signierungsschlüssel aus dem Schlüsselbund löschen wollen, exportieren wir die privaten Unterschlüssel, bevor wir den privaten Primary Signing Key löschen und werden diese dann anschliessend wieder importieren.

Wir exportieren also erst einmal die Unterschlüssel und legen diese in einer lokalen Datei ab. Zunächst holen wir uns aber noch die Schlüssel-IDs da wir diese beim Exportieren eiegns angeben müssen.

 $ gpg2 --list-secret-keys
/home/django/.gnupg/secring.gpg
------------------------------
sec   4096R/2ADD88EB 2018-11-24
uid                  Django aka Bastard Operator from Hell <django@mailserver.guru>
ssb>  4096R/B815F8ED 2018-11-24
ssb>  4096R/25704226 2018-11-24
ssb>  4096R/E8B122B0 2018-11-24

Nun exportieren wir die Unterschlüssel mit Hilfe folgenden Aufrufs, bei dem wir die IDs der Unterschlüssel gefolgt von einem ! jeweils angeben:

 $ gpg2 -o subkeys --export-secret-subkeys B815F8ED! 25704226! E8B122B0!

Nun löschen wir den primären Signierungsschlüssel inkl. der Unterschlüssel.

 $ gpg2 --delete-secret-key django@mailserver.guru
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.


sec  4096R/2ADD88EB 2018-11-24 Django aka Bastard Operator from Hell <django@mailserver.guru>

Diesen Schlüssel aus dem Schlüsselbund löschen? (j/N) j
Dies ist ein privater Schlüssel! - Wirklich löschen? (j/N) j

Ein erneuter Aufruf des privaten Schlüsselspeichers zeigt und, dass dort nun keine Einträge mehr vorhanden sind.

 $ gpg2 --list-secret-keys

Nun importieren wir wieder die zuvor gesicherten privaten Unterschlüssel

 $ gpg2 --import subkeys
gpg: Schlüssel 2ADD88EB: geheimer Schlüssel importiert
gpg: Schlüssel 2ADD88EB: "Django aka Bastard Operator from Hell <django@mailserver.guru>" nicht geändert
gpg: Anzahl insgesamt bearbeiteter Schlüssel: 1
gpg:                             unverändert: 1
gpg:              gelesene geheime Schlüssel: 1
gpg:            geheime Schlüssel importiert: 1

Lassen wir uns nun den Inhalt des privaten Schlüsselbundes anzeigen, sehen wir die zurückgesicherten Unterschlüssel wieder.

 $ gpg2 --list-secret-keys
/home/django/.gnupg/secring.gpg
------------------------------
sec#  4096R/2ADD88EB 2018-11-24
uid                  Django aka Bastard Operator from Hell <django@mailserver.guru>
ssb>  4096R/B815F8ED 2018-11-24
ssb>  4096R/25704226 2018-11-24
ssb>  4096R/E8B122B0 2018-11-24

Zu guter letzt vernichten wir die Datei mit den gesicherten privaten Unterschlüsseln.

 $ shred --zero --remove subkeys

change-pin

WICHTIG: Unbedingt vor dem ersten Ändern der PINs ist es notwendig, erst einmal Schlüssel zu generieren bzw. zu importieren! Denn sonst schlägt das Ändern der Benutzer-PIN fehl, bzw. wird die Benutzer-PIN beim Überschreiben von Schlüsseln auf den Default-Wert von 123456 zurückgesetzt. Die Default-PIN für den Admin lautet 12345678.

Mit Hilfe des Befehls gpg --change-pin können wir 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!

Ferner ist darauf zu achten, dass zunächst die Admin-PIN und erst dann die Nutzer-PIN geändert. Ansonsten wird nämlich der admin-less mode aktiviert.

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 Start 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. D276000124010200FFFE432437110000 erkannt

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

Ihre Auswahl?

Wir ändern also zu erste die Admin-PIN durch Auswahl des Menüpunkts 3 aus und erst anschliessend die Benutzer-PIN mit 1. Wir werden dann nach der aktuellen PIN gefragt und müssen die neue PIN 2x eingeben zum Abändern.

Bild: PIN-Eingabedialog beim Abändern der Benutzer-/Admin-PIN

Ihre Auswahl? 3
PIN changed.

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

Ihre Auswahl? 1
PIN changed.

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

Ihre Auswahl? q

Nitrokey und Thunderbird

Unseren zuvor präparierten Kryptostick wollen wir nun verwenden um bei Thunderbird unsere elektronische Kommunikation per eMail abzusichern. Hierzu werden wir nun den schlüssel dem betreffenden Konto zuweisen. Über das Menü wählen wir den Punkt Konten-Einstellungen aus.

Bild: Thunderbird - Menüpunkt Konten-Einstellungen

Beim passenden Konto wählen wir dann die Option OpenPGP-Sicherheit aus.

Bild: Thunderbird - Menüpunkt OpenPGP-Sicherheit

Hier wählen wir nun den Schlüssel aus, den wir zuvor erstellt und auf die SmartCard des Kryptostick Start verschoben hatten.

Bild: Thunderbird - Auswahl des Schlüssels auf dem Kryptostick.

Sobald wir nun eine Nachricht verschicken die signiert werden soll, wird vor dem Versand die PIN abgefragt und die Nachricht mit dem Signatur-Unterschlüssel unterschrieben.

Bild: Thunderbird - Signieren und Versenden einer Nachricht.

Sobald wir eine verschlüsselte Nachricht öffnen, werden wir nach der PIN gefragt, damit der Schlüssel zum Entschlüsseln auf der SmartCard freigeschalten werden kann.

Bild: Thunderbird - Abfrage der PIN zum Entschlüsseln der Nachricht

Habne wir die PIN richtig eigegeben, wird die entschlüsselte Nachricht angezeigt.

Bild: Thunderbird - Anzeige der entschlüsselten Nachricht


1)
Stand November 2018
3)
Web of Trust
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
  • centos/nitrokey/start.txt
  • Zuletzt geändert: 22.07.2019 14:55.
  • (Externe Bearbeitung)