Zum Inhalt

YubiKey - OpenPGP-Schlüssel auf den YubiKey exportieren

In diesem Beitrag werden die erstellen Sub Keys auf einen YubiKey übertragen.

Achtung, nicht jeder YubiKey ist als Smart Card für OpenPGP geeignet. Ich verwende jeweils einen YubiKey 5C NFC und einen YubiKey 5Ci, die diese Funktion unterstützen.

Begrifflichkeiten

OpenPGP Smart Card ist ein externes Speichergerät, auf dem OpenPGP-Schlüssel sicher abgespeichert und zum Signieren, Verschlüsseln und Authentisieren genutzt werden können. (https://en.wikipedia.org/wiki/OpenPGP_card)

Deutsch 🇩🇪 Englisch 🇬🇧
Signaturnutzbarkeit (S) sign capability (= S)
Verschlüsselungsnutzbarkeit (V) encrypt capability (= E)
Authentisierungsnutzbarkeit (A) authenticate capability (= A)
  • Der YubiKey ist ein Hardwaretoken, das je nach Version die Smart Card-Funktion unterstützt. Nicht jeder YubiKey ist eine OpenPGP Smart Card❗️

Vorbereitung

In diesem Schritt werden die Sub-Keys auf den YubiKey geschrieben. Der Master Key verbleibt sicher verwahrt im Schlüsselbund auf dem Client, also auf dem System wo die Schlüssel erstellt wurden

Nachdem der YubiKey am System angeschlossen ist, lassen sich die Informationen über den Hardwaretoken abfragen.

gpg --card-status

In der Ausgabe seht ihr, dass auf dem YubiKey noch keine Schlüssel hinterlegt worden sind.

  Reader ...........:
  Application ID ...:
  Application type .: OpenPGP
  Version ..........:
  Manufacturer .....: Yubico
  Serial number ....:
  Name of cardholder: [not set]
  Language prefs ...: [not set]
  Salutation .......:
  URL of public key : [not set]
  Login data .......: [not set]
  Signature PIN ....: not forced
  Key attributes ...: rsa2048 rsa2048 rsa2048
  Max. PIN lengths .: 127 127 127
  PIN retry counter : 3 0 3
  Signature counter : 0
  KDF setting ......: off
  Signature key ....: [none]
  Encryption key....: [none]
  Authentication key: [none]
  General key info..: [none]

Die Felder sind noch leer

  Signature key ....: [none]
  Encryption key....: [none]
  Authentication key: [none]

Bevor wir mit dem Export der Sub-Keys auf den YubiKey beginnen, solltet ihr noch einen kurzen Blick auf die Zeile "PIN retry counter" werfen.

Die Werte zeigen an, wie oft ihr euren YubiKey PIN falsch eingeben dürft, bevor er gesperrt wird. Im Standard sind das 3 Versuche.

Note

Wird der YubiKey gesperrt, weil der AdminPIN falsch eingegeben wurde oder verloren ging, dann kann die Smart Card-Funktion des YubiKeys auf die Werkseinstellung zurückgesetzt werden.
👉Hilfreiche GPG-Befehle

Die Smart Card kann sowohl über grafische Tools des Schlüsselbundes als auch über die CLI editiert werden.


KDF Setting - Key Derived Format (KDF)

Key Derived Function (KDF) ermöglicht einen Hash des PINs zu speichern verhindert so, dass der PIN im Klartext weitergegeben wird.

Diese Funktion setzt eine relativ neue Version von GnuPG voraus und ist möglicherweise nicht mit anderen GPG-Clients (vor allem mobilen Clients) kompatibel.

❗Damit KDF auf einem YubiKey aktiviert werden kann, darf kein GPG-Schlüssel auf dem Hardwaretoken abgelegt sein, da sonst der folgende Fehler auftaucht

gpg: error for setup KDF: Conditions of use not satisfied

Um KDF zu aktivieren, ist der Key in den Admin-Modus zu setzen.

$ gpg2 --edit-card
gpg/card> admin
gpg/card> kdf-setup

Admin PIN und PIN ändern

Die Admin PIN und die PIN sind vor weiteren Anpassungen zu ändern.

gpg --card-edit
gpg/card> admin
Admin commands are allowed

gpg/card> passwd
gpg: OpenPGP card no. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx detected

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

Your selection?

Als Erstes wird die AdminPIN (3), im zweiten Schritt dann noch die normale PIN (1) geändert.

Die Standardpasswörter sind

  • Admin PIN = 12345678
  • PIN = 123456

Sind PIN (1) und PUK (= Admin PIN 3) für den YubiKey aktiviert, kann es mit dem Export der Schlüssel losgehen.

Sub Keys auf YubiKey schreiben

Achtung

Die Keys lassen sich nur EINMAL auf einen YubiKey übertragen. Danach wird hinter dem jeweiligen Schlüssel ein > angezeigt. Ein Export auf einen anderen Hardwaretoken ist NICHT mehr möglich.

Für einen Export auf einen anderen YubiKey oder Smart Card, sind alle Schlüssel (private und öffentliche Schlüssel) aus dem Schlüsselbund des Betriebssystems zu löschen und neu zu importieren. (👉 Hilfreiche GPG-Befehle zur Verwaltung von Schlüsselpaaren)

Jeder Sub-Key ist EINZELN auf den YubiKey zu exportieren.

Zur Erinnerung noch einmal die Gegenüberstellung der 🇩🇪 deutschen und 🇬🇧 englischen Begriffe.

Deutsch 🇩🇪 Englisch 🇬🇧
Signaturnutzbarkeit (S) sign capability (= S)
Verschlüsselungsnutzbarkeit (V) encrypt capability (= E)
Authentisierungsnutzbarkeit (A) authenticate capability (= A)

Der Export wird gestartet 🏁.

gpg --expert --edit-key XXX111222333444555

Der erste Sub-Key für die Verschlüsselungsnutzbarkeit = encrypt capability (E) wird übertragen.

gpg (GnuPG) 2.2.17; Copyright (C) 2019 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 Unterschlüssel ist vorhanden.

pub  rsa4096/XXX111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: C
     Vertrauen: ultimativ     Gültigkeit: ultimativ
ssb  rsa4096/111222333444555666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: E
ssb  rsa4096/YY111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: S
ssb  rsa4096/AA999888777666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: A
[ ultimativ ] (1). benutzer <benutzer@e-mail.de>


gpg> key 1

pub  rsa4096/XXX111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: C
     Vertrauen: ultimativ     Gültigkeit: ultimativ
ssb* rsa4096/111222333444555666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: E
ssb  rsa4096/YY111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: S
ssb  rsa4096/AA999888777666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: A
[ ultimativ ] (1). benutzer <benutzer@e-mail.de>

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

gpg> save

Es wird zuerst nach der Passphrase des GPG-Schlüssels gefragt, dann nach der AdminPIN (= PUK) des YubiKeys. (Ggf. sind zur Bestätigung die Metall-Kontakte am Hardwaretoken zu drücken.)

Ein Blick auf den YubiKey zeigt dort den ersten erfolgreich übertragenen Schlüssel an:

  gpg --card-status

Die verbleibenden Sub-Keys lassen sich nach dem gleichen Schema übertragen und in den richtigen Slot auf dem YubiKey schreiben.

gpg> key 2

pub  rsa4096/XXX111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: C
     Vertrauen: unbekannt     Gültigkeit: unbekannt
ssb  rsa4096/111222333444555666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: E
     Kartennummer:0006 11182540
ssb* rsa4096/YY111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: S
ssb  rsa4096/AA999888777666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: A
[ unbekannt ] (1). benutzer <benutzer@e-mail.de>

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

pub  rsa4096/XXX111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: C
     Vertrauen: unbekannt     Gültigkeit: unbekannt
ssb  rsa4096/111222333444555666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: E
     Kartennummer:0006 11182540
ssb* rsa4096/YY111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: S
ssb  rsa4096/AA999888777666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: A
[ unbekannt ] (1). benutzer <benutzer@e-mail.de>

gpg> save

Mit dem Befehl save wird der Export gespeichert.

benutzer@computer:~$ gpg2 --expert --edit-key XXX111222333444555
gpg (GnuPG) 2.2.17; Copyright (C) 2019 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 Unterschlüssel ist vorhanden.

pub  rsa4096/XXX111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: C
     Vertrauen: unbekannt     Gültigkeit: unbekannt
ssb  rsa4096/111222333444555666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: E
     Kartennummer:0006 11182540
ssb  rsa4096/YY111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: S
     Kartennummer:0006 11182540
ssb  rsa4096/AA999888777666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: A
[ unbekannt ] (1). benutzer <benutzer@e-mail.de>

gpg> key 3

pub  rsa4096/XXX111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: C
     Vertrauen: unbekannt     Gültigkeit: unbekannt
ssb  rsa4096/111222333444555666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: E
     Kartennummer:0006 11182540
ssb  rsa4096/YY111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: S
     Kartennummer:0006 11182540
ssb* rsa4096/AA999888777666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: A
[ unbekannt ] (1). benutzer <benutzer@e-mail.de>

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

pub  rsa4096/XXX111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: C
     Vertrauen: unbekannt     Gültigkeit: unbekannt
ssb  rsa4096/111222333444555666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: E
     Kartennummer:0006 11182540
ssb  rsa4096/YY111222333444555
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: S
     Kartennummer:0006 11182540
ssb* rsa4096/AA999888777666
     erzeugt: 2019-11-01  verfällt: 2023-10-31  Nutzung: A
[ unbekannt ] (1). benutzer <benutzer@e-mail.de>

gpg> save

Alle Sub-Key wurden damit auf den YubiKey übertragen. Die drei Slots auf dem YubiKey sollten nun alle belegt sein.

gpg --card-status

Der YubiKey ist fertig und kann nun verwendet werden.

Ein zweiter Export auf einen anderen YubiKey ist nicht möglich

Die privaten und öffentlichen Schlüssel befinden sich nach wie vor noch im Schlüsselbund auf dem Client. In der Übersicht hat sich jedoch ein kleines aber entscheidendes Detail geändert. Jeder exportierte Schlüssel wurde automatisch mit einem > versehen.

gpg -K

Ein besonders Augenmerk ist auf das Zeichen > hinter ssb zu legen. Es zeigt an, dass der / die Subkeys bereits einmal Exportiert wurden.

benutzer@computer:~$ gpg2 --list-secret-keys
/home/user/.gnupg/pubring.kbx
-----------------------------
sec   rsa4096 2019-11-01 [C]
      XXX111222333444555
uid           [ultimate] benutzer <benutzer@e-mail.de>
ssb>  rsa4096 2019-11-01 [E] [expires: 2023-10-31]
ssb>  rsa4096 2019-11-01 [S] [expires: 2023-10-31]
ssb>  rsa4096 2019-11-01 [A] [expires: 2023-10-31]

Achtung

Die Keys lassen sich nur EINMAL auf einen YubiKey übertragen. Danach wird hinter dem jeweiligen Schlüssel ein > angezeigt. Ein Export auf einen anderen Hardwaretoken ist NICHT mehr möglich.

Für einen Export auf einen anderen YubiKey oder Smart Card, sind alle Schlüssel (private und öffentliche Schlüssel) aus dem Schlüsselbund des Betriebssystems zu löschen und neu zu importieren. (👉 Hilfreiche GPG-Befehle zur Verwaltung von Schlüsselpaaren)

Note

Artikel überarbeitet: November 2023

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj