Nitrokey, gpg und Fedora
Posted on Fr 14 September 2018 in Blog
Disclaimer: Auch wenn die Schlüssel auf einem Nitrokey gespeichert werden, sollte man unbedingt Backups der Schlüssel machen, denn ein Nitrokey kann verloren oder kaputt gehen.
Smartcard-Support unter Fedora installieren
sudo dnf install opensc ccid pcsc-lite pcsc-tools`
Und Smartcard-Support starten
sudo systemctl enable pcscd # enable at boot
sudo systemctl start pcscd # start the process
sudo systemctl status pcscd # verify the status
Schlüsselpaare erstellen
gpg --full-generate-key
Folgende Optionen wurden ausgewählt
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)
(14) Vorhandener Schlüssel auf der Karte
Ihre Auswahl? 1
RSA-Schlüssel können zwischen 1024 und 4096 Bit lang sein.
Welche Schlüssellänge wünschen Sie? (2048) 4096
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"): dominik
Email-Adresse: test@pata.gonia.org
Kommentar:
Sie haben diese User-ID gewählt:
"dominik <test@pata.gonia.org>"
Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(A)bbrechen? f
Neuen Signing Subkey hinzufügen
gpg --edit-key test@pata.gonia.org
Geheimer Schlüssel ist vorhanden.
sec rsa4096/7F1E5EDBDFF4F981
erzeugt: 2020-05-21 verfällt: niemals Nutzung: SC
Vertrauen: ultimativ Gültigkeit: ultimativ
ssb rsa4096/15F434089E3E8AC6
erzeugt: 2020-05-21 verfällt: niemals Nutzung: E
[ ultimativ ] (1). dominik <test@pata.gonia.org>
gpg> addkey
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)
(14) Vorhandener Schlüssel auf der Karte
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
gpg> quit
Änderungen speichern? (j/N) j
Widerrufzertifikat erstellen
gpg --output test@pata.gonia.org.gpg-revocation-certificate --gen-revoke test@pata.gonia.org
in Widerrufszertifikat für diesen Schlüssel erzeugen? (j/N) j
Grund für den Widerruf:
0 = Kein Grund angegeben
1 = Hinweis: Dieser Schlüssel ist nicht mehr sicher
2 = Schlüssel ist überholt
3 = Schlüssel wird nicht mehr benutzt
Q = Abbruch
(Wahrscheinlich möchten Sie hier 1 auswählen)
Ihre Auswahl? 1
Geben Sie eine optionale Beschreibung ein. Beenden mit einer leeren Zeile:
>
Grund für Widerruf: Hinweis: Dieser Schlüssel ist nicht mehr sicher
(Keine Beschreibung angegeben)
Ist das OK? (j/N) j
Schlüssel exportieren
gpg --export-secret-keys --armor test@pata.gonia.org > test@pata.gonia.org.private.gpg-key
gpg --export --armor test@pata.gonia.org > test@pata.gonia.org.public.gpg-key
Diese Schlüssel und das Widerrufszertifikat sollten jetzt an einem sicheren (verschlüsselten) Ort gespeichert werden. Das kann beispielsweise ein Nitrokey Storage sein. Diesen sollte man allerdings nicht verlieren.
Zusätzlich können wir die Schlüssel auf einen Nitrokey transferieren.
gpg --edit-key --expert test@pata.gonia.org
sec rsa4096/7F1E5EDBDFF4F981
erzeugt: 2020-05-21 verfällt: niemals Nutzung: SC
Vertrauen: ultimativ Gültigkeit: ultimativ
ssb rsa4096/15F434089E3E8AC6
erzeugt: 2020-05-21 verfällt: niemals Nutzung: E
ssb rsa4096/4B3E2541A687FCFB
erzeugt: 2020-05-21 verfällt: niemals Nutzung: S
[ ultimativ ] (1). dominik <test@pata.gonia.org>
gpg> keytocard
Den Hauptschlüssel wirklich verschieben? (j/N) j
Wählen Sie den Speicherort für den Schlüssel:
(1) Signatur-Schlüssel
(3) Authentisierungs-Schlüssel
Ihre Auswahl? 1
sec rsa4096/7F1E5EDBDFF4F981
erzeugt: 2020-05-21 verfällt: niemals Nutzung: SC
Vertrauen: ultimativ Gültigkeit: ultimativ
ssb rsa4096/15F434089E3E8AC6
erzeugt: 2020-05-21 verfällt: niemals Nutzung: E
ssb rsa4096/4B3E2541A687FCFB
erzeugt: 2020-05-21 verfällt: niemals Nutzung: S
[ ultimativ ] (1). dominik <test@pata.gonia.org>
Jetzt wurde der Hauptschlüssel auf den Nitrokey übertragen. Die zwei Unterschlüssel können ebenfalls auf den Nitrokey übertragen werden. Der Befehl key Nummer
wählt einen Schlüssel aus bzw. ab.
gpg> key 1
sec rsa4096/7F1E5EDBDFF4F981
erzeugt: 2020-05-21 verfällt: niemals Nutzung: SC
Vertrauen: ultimativ Gültigkeit: ultimativ
ssb* rsa4096/15F434089E3E8AC6
erzeugt: 2020-05-21 verfällt: niemals Nutzung: E
ssb rsa4096/4B3E2541A687FCFB
erzeugt: 2020-05-21 verfällt: niemals Nutzung: S
[ ultimativ ] (1). dominik <test@pata.gonia.org>
gpg> keytocard
Wählen Sie den Speicherort für den Schlüssel:
(2) Verschlüsselungs-Schlüssel
Ihre Auswahl? 2
sec rsa4096/7F1E5EDBDFF4F981
erzeugt: 2020-05-21 verfällt: niemals Nutzung: SC
Vertrauen: ultimativ Gültigkeit: ultimativ
ssb* rsa4096/15F434089E3E8AC6
erzeugt: 2020-05-21 verfällt: niemals Nutzung: E
ssb rsa4096/4B3E2541A687FCFB
erzeugt: 2020-05-21 verfällt: niemals Nutzung: S
[ ultimativ ] (1). dominik <test@pata.gonia.org>
Jetzt wurde der erste Schlüssel übertragen.
gpg> key 1
sec rsa4096/7F1E5EDBDFF4F981
erzeugt: 2020-05-21 verfällt: niemals Nutzung: SC
Vertrauen: ultimativ Gültigkeit: ultimativ
ssb rsa4096/15F434089E3E8AC6
erzeugt: 2020-05-21 verfällt: niemals Nutzung: E
ssb* rsa4096/4B3E2541A687FCFB
erzeugt: 2020-05-21 verfällt: niemals Nutzung: S
[ ultimativ ] (1). dominik <test@pata.gonia.org>
gpg> key 2
sec rsa4096/7F1E5EDBDFF4F981
erzeugt: 2020-05-21 verfällt: niemals Nutzung: SC
Vertrauen: ultimativ Gültigkeit: ultimativ
ssb rsa4096/15F434089E3E8AC6
erzeugt: 2020-05-21 verfällt: niemals Nutzung: E
ssb* rsa4096/4B3E2541A687FCFB
erzeugt: 2020-05-21 verfällt: niemals Nutzung: S
[ ultimativ ] (1). dominik <test@pata.gonia.org>
gpg> keytocard
Wählen Sie den Speicherort für den Schlüssel:
(1) Signatur-Schlüssel
(3) Authentisierungs-Schlüssel
Ihre Auswahl? 3
sec rsa4096/7F1E5EDBDFF4F981
erzeugt: 2020-05-21 verfällt: niemals Nutzung: SC
Vertrauen: ultimativ Gültigkeit: ultimativ
ssb rsa4096/15F434089E3E8AC6
erzeugt: 2020-05-21 verfällt: niemals Nutzung: E
ssb* rsa4096/4B3E2541A687FCFB
erzeugt: 2020-05-21 verfällt: niemals Nutzung: S
[ ultimativ ] (1). dominik <test@pata.gonia.org>
Danach müssen die Änderungen noch gespeichert werden.
gpg> quit
Änderungen speichern? (j/N) j
Auf jedem System, auf dem der Nitrokey genutzt werden soll, muss auch der öffentliche Schlüssel vorhanden sein.
gpg --import test\@pata.gonia.org.public.gpg-key
Wenn man die privaten Schlüssel nicht nur auf dem Nitrokey haben will, dann könnte man für die Arbeit am Laptop noch den original signing subkey entfernen.
mkdir /tmp/gpg
sudo mount -t ramfs -o size=1M ramfs /tmp/gpg
sudo chown $(logname):$(logname) /tmp/gpg
gpg --export-secret-subkeys test@pata.gonia.org > /tmp/gpg/subkeys
Danach löschen wir den Subkey vom Schlüsselbund
gpg --delete-secret-key test@pata.gonia.org
Im nächsten Schritt werden die Subkeys wieder importiert
gpg --import /tmp/gpg/subkeys
sudo umount /tmp/gpg
rmdir /tmp/gpg
Ob es funktioniert hat, kann man mit folgendem Befehl überprüfen
gpg --list-secret-keys
sec# rsa4096
Wenn die Zeile mit sec#
beginnt, dann hat es funktioniert, denn #
zeigt an, der Schlüssel zum Signieren nicht im Schlüsselbund ist.
Update: 2020-05-21 Transfer auf den Nitrokey ergänzt.
Referenzen
- https://alexcabal.com/creating-the-perfect-gpg-keypair
- https://askbot.fedoraproject.org/en/question/124207/install-smart-card-driver-in-fedora/?answer=124224
- https://support.yubico.com/support/solutions/articles/15000011370-troubleshooting-issues-with-gpg
- https://support.yubico.com/support/solutions/articles/15000014892-troubleshooting-gpg-no-such-device-
- https://www.kuketz-blog.de/gnupg-schluesselerstellung-und-smartcard-transfer-nitrokey-teil2/
- https://wiki.ubuntuusers.de/GnuPG/
- https://emailselfdefense.fsf.org/de/index.html
- https://blog.tinned-software.net/create-gnupg-key-with-sub-keys-to-sign-encrypt-authenticate/
- https://security.stackexchange.com/questions/76940/what-exactly-is-a-subkey
- http://www.stephan-nix.de/2009/01/12/gnupg-gultigkeit-eines-schlussels-verlangern/