Zum Inhalt

YubiKey - OpenPGP Schlüsselpaare erstellen - Master Key und Sub-Keys

Foto von rc.xyz NFT gallery auf Unsplash

In diesem Beitrag wird ein Master Key und drei Sub-Keys erstellt.

Schlüsselart Deutsch 🇩🇪 Englisch 🇬🇧
Hauptschlüssel Hauptschlüssel Master key
Sub-Key Signaturnutzbarkeit (S) sign capability (= S)
Sub-Key Verschlüsselungsnutzbarkeit (V) encrypt capability (= E)
Sub-Key Authentisierungsnutzbarkeit (A) authenticate capability (= A)

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. 1

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

Hinweise

Aus Sicherheitsgründen sollte die Erstellung der Schlüssel ausschließlich auf einem vertrauenswürdigen (Betriebs-)System erfolgen. Im besten Fall ist das System komplett neu eingerichtet oder ein Live-System (z.B. Tails) und wird nur zu dem Zweck der Erstellung des öffentlichen und privaten GPG-Schlüssels verwendet. Auch ein eigener Qube im Betriebssystem Qubes OS kann verwendet werden.

Das System benötigt für die Schlüsselerstellung keinen Internetzugang, die Tools sind in der Standardinstallation der gängigen Linux-Distribution (außer Ubuntu) bereits enthalten. Alle Schritte können somit offline, ohne Internetverbindung, durchgeführt werden.

Der Benutzer benötigt keine weitreichenden Rechte auf einem Linux-System für den ganzen Prozess.

Die Schlüssel sind nach dem Erstellen auf ein sicheres, externes Speichermedium zu kopieren und sicher aufzubewahren. Auf dem System / Gerät sollten sie nicht gespeichert bleiben. Geeignete Speichermedien sind z.B. SD-Karten, USB-Sticks, CD/DVD, etc. die auch verschlüsselt sein können.
Einige Banken bieten die Möglichkeit an, digitale Dokumente kostenfrei im eigenen Onlinebanking, in einem Tresor, aufzubewahren. Dort lassen sich die Schlüssel ebenfalls sicher aufbewahren.

Du solltest grundsätzlich bedenken, dass du beim Verlust bzw. Defekt deines YubiKey evtl. keine Verbindung mehr zu deinen Servern via SSH herstellen kannst sowie die anderen genutzten Funktionen des Hardwaretokens nicht mehr zur Verfügung stehen. Deshalb ist zu empfehlen, dass du einen zweiten YubiKey besitzt.

Achtung

Du kannst einen YubiKey nicht kopieren oder klonen! Bestehende OpenGPG-Schlüssel sind manuell auf den Hardwaretoken zu übertragen. 👉 Übertrag auf YubiKey

Achtet darauf, dass der YubiKey die hier genutzten Funktionalität Smart Card unterstützt!

OpenGPG Schlüssel erstellen

Für unser Vorhaben benötigen wir 4 verschiedene Schlüssel, die einzeln auf unseren YubiKey übertragen werden.

Beachte das unterschiedliche Kürzel beim Sub-Key Verschlüsselungsnutzbarkeit, je nach verwendeter Sprachdatei 🇩🇪 oder 🇬🇧 verwendet werden.

Schlüsselart Deutsch 🇩🇪 Englisch 🇬🇧
Hauptschlüssel Hauptschlüssel Master key
Sub-Key Signaturnutzbarkeit (S) sign capability (= S)
Sub-Key Verschlüsselungsnutzbarkeit (V) encrypt capability (= E)
Sub-Key Authentisierungsnutzbarkeit (A) authenticate capability (= A)

Der Master Key

Der Master Key ist

  • oberste Schlüssel, der u.a. die Kontaktdetails enthält, wie Name und E-Mail-Adresse,
  • der die Sub-Keys verwaltet,
  • der mit einem Passwort geschützt ist und nach dessen Eingabe den Zugriff auf den Master Key selbst und Sub-Keys erlaubt.

Wir haben also eine hierarchische Ordnung der Keys, ohne einen Master Key lässt sich kein Sub-Key anlegen.

Unser Master Key soll nur die Funktionalität Signaturnutzbarkeit (sign capability) erhalten.

Die anderen 3 werden jeweils auf einen Sub-Key aufgeteilt.

Mit einem solchen Vorgehen ist man ein wenig flexibler bei der Nutzung. Möchte man z.B. nur die Signaturnutzbarkeit verwenden, reicht der Export des Sub-Keys anstatt einen Key mit allen Funktionen auf das Gerät zu übertragen. Des Weiteren stellt das ein wenig mehr Sicherheit dar.

Hier die Gegenüberstellung von Englisch und Deutsch

Schlüsselart Deutsch 🇩🇪 Englisch 🇬🇧
Hauptschlüssel Hauptschlüssel Master key
Sub-Key Signaturnutzbarkeit (S) sign capability (= S)
Sub-Key Verschlüsselungsnutzbarkeit (V) encrypt capability (= E)
Sub-Key Authentisierungsnutzbarkeit (A) authenticate capability (= A)

Ist ein Ablaufdatum für den Master Key sinnvoll?

Das Setzen eines Ablaufdatums 📅 für den Master Key ist je nach Anwendungsfall ggf. unnötig. Das zwingt dich im Wesentlichen dazu, deine Unterschlüssel zu verwalten und gibt dem Rest der Welt bekannt, dass du dies tust.

Das Setzen eines Ablaufdatums für einen Master Key ist unwirksam, um den Schlüssel vor Verlust zu schützen - wer auch immer den Primärschlüssel hat, kann einfach die Ablaufzeit verlängern. Sperrzertifikate (👉 Revoke Datei) sind für diesen Zweck besser geeignet. Für deinen Anwendungsfall kann es daher sinnvoll sein, Ablaufdaten auf Unterschlüsseln zu setzen.

Schlüssel Ja Nein 🇬🇧 englische Bezeichnung
Master key x Master key
Sub-Key - Signaturnutzbarkeit (S) 📅 sign capability (= S)
Sub-Key - Verschlüsselungsnutzbarkeit (V) 📅 encrypt capability (= E)
Sub-Key - Authentisierungsnutzbarkeit (A) 📅 authenticate capability (= A)

Master Key erstellen

Im ersten Schritt wird der Master Key erstellt. Diesem Schlüssel sind standardmäßig alle 3 Schlüsselfunktionen zugeordnet.

Wir möchten aber nur die Signaturnutzbarkeit (sign capability) für den Master Key nutzen. Die anderen Funktionen "lagern" wir in Sub-Keys aus.

gpg --expert --full-gen-key
  • –expert – Expertenmodus wird aktiviert
  • –full-gen-key – Mit dieser Option werden neue Schlüsselpaare erstellt und für jede Option ein Dialog ausgegeben.
 gpg (GnuPG) 2.2.20; Copyright (C) 2020 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.

  Please select what kind of key you want:
     (1) RSA and RSA (default)
     (2) DSA and Elgamal
     (3) DSA (sign only)
     (4) RSA (sign only)
     (7) DSA (set your own capabilities)
     (8) RSA (set your own capabilities)
     (9) ECC and ECC
    (10) ECC (sign only)
    (11) ECC (set your own capabilities)
    (13) Existing key
    (14) Existing key from card
  Your selection? 8

In diesem Abschnitt wählen wir die Funktion für den Master Key aus. Wir möchten, dass dieser nur zum Signieren (= Certify) verwendet werden kann.

Aktuell kann er noch für alle drei Funktionen verwendet werden, durch An- und Abwählen lässt sich das jedoch ändern.

In dem Screenshot wird das dargestellt, wie sich die Funktionen ändern, bis am Ende nur noch Certify übrig bleibt.

YubiKey Funktionen umschalten

  Possible actions for a RSA key: Sign Certify Encrypt Authenticate
  Current allowed actions: Sign Certify Encrypt

     (S) Toggle the sign capability
     (E) Toggle the encrypt capability
     (A) Toggle the authenticate capability
     (Q) Finished

Damit ihr für den Master Key zum richtigen Ergebnis kommt, müsst ihr s, e, q auswählen.

Possible actions for a RSA key: Sign Certify Encrypt Authenticate
Current allowed actions: Certify

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? q
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0) 5y
Key expires at Do 11 Dez 2025 16:03:37 CET
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) heinrichh@duesseldorf.de"

Real name: test-benutzer
E-mail address: test-benutzer@testlauf.de
Comment:
You selected this USER-ID:
    "test-benutzer "

    Change (N)ame, (C)omment, (E)-mail or (O)kay/(Q)uit? o
    We need to generate a lot of random bytes. It is a good idea to perform
    some other action (type on the keyboard, move the mouse, utilise the
    disks) during the prime generation; this gives the random number
    generator a better chance to gain enough entropy.
    gpg: key 5C32B7A2290F8AE4 marked as ultimately trusted
    gpg: revocation certificate stored as '/home/dev/.gnupg/openpgp-revocs.d/EE223DBF5644229EFABE52C55C32B7A2290F8AE4.rev'
    public and secret key created and signed.

    pub   rsa4096 2020-12-12 [C] [expires: 2025-12-11]
          EE223DBF5644229EFABE52C55C32B7A2290F8AE4
    uid                      test-benutzer 

Mit diesen paar Schritten haben wir nun unseren Master Key erstellt.

Im Schlüsselbund können wir den Schlüssel anzeigen lassen. Am Anfang der Zeile steht pub und in der Klammer steht C. Das zeigt an, dass es sich auch wirklich um den Master Key handelt.

Sub-Keys erstellen

Für die Erstellung der Sub-Keys werden weniger Schritte benötigt, da die persönlichen Informationen bereits im Master Key abgespeichert sind, dafür ist der Erstellungsprozess dreimal zu durchlaufen.

Mit dem Befehl kann man zum Master Key mit der ausgewählten ID Sub-Keys hinzufügen. Die ID des Master Keys wird im Schlüsselbund angezeigt.

Zur Erinnerung, wir benötigen 3 Sub-Keys mit den Schlüsselfunktionen

  • Sub-Key für die Signaturnutzbarkeit = sign capability (S)
  • Sub-Key für die Verschlüsselungsnutzbarkeit = encrypt capability (E)
  • Sub-Key für die Authentisierungsnutzbarkeit = authenticate capability (A)
gpg --expert --edit-key EE223DBF5644229EFABE52C55C32B7A2290F8AE4

gpg (GnuPG) 2.2.20; Copyright (C) 2020 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.

Secret key is available.

sec  rsa4096/5C32B7A2290F8AE4
     created: 2020-12-12  expires: 2025-12-11  usage: C
     trust: ultimate      validity: ultimate
[ultimate] (1). test-benutzer 

gpg> addkey

Sub-Key für Verschlüsselungsnutzbarkeit (Encrypt Capability)

  Please select what kind of key you want:
     (3) DSA (sign only)
     (4) RSA (sign only)
     (5) Elgamal (encrypt only)
     (6) RSA (encrypt only)
     (7) DSA (set your own capabilities)
     (8) RSA (set your own capabilities)
    (10) ECC (sign only)
    (11) ECC (set your own capabilities)
    (12) ECC (encrypt only)
    (13) Existing key
    (14) Existing key from card
  Your selection? 8

  Possible actions for a RSA key: Sign Encrypt Authenticate
  Current allowed actions: Sign Encrypt

     (S) Toggle the sign capability
     (E) Toggle the encrypt capability
     (A) Toggle the authenticate capability
     (Q) Finished

  Your selection? s

  Possible actions for a RSA key: Sign Encrypt Authenticate
  Current allowed actions: Encrypt

     (S) Toggle the sign capability
     (E) Toggle the encrypt capability
     (A) Toggle the authenticate capability
     (Q) Finished

  Your selection? q
  RSA keys may be between 1024 and 4096 bits long.
  What keysize do you want? (3072) 4096
  Requested keysize is 4096 bits
  Please specify how long the key should be valid.
           0 = key does not expire
          = key expires in n days
        w = key expires in n weeks
        m = key expires in n months
        y = key expires in n years
  Key is valid for? (0) 5y
  Key expires at Do 11 Dez 2025 16:18:43 CET
  Is this correct? (y/N) y
  Really create? (y/N) y
  We need to generate a lot of random bytes. It is a good idea to perform
  some other action (type on the keyboard, move the mouse, utilise the
  disks) during the prime generation; this gives the random number
  generator a better chance to gain enough entropy.

  sec  rsa4096/5C32B7A2290F8AE4
       created: 2020-12-12  expires: 2025-12-11  usage: C
       trust: ultimate      validity: ultimate
  ssb  rsa4096/AC3DF8B5D579D99A
       created: 2020-12-12  expires: 2025-12-11  usage: E
  [ultimate] (1). test-benutzer 

  gpg>

Der Sub-Key wurde automatisch zum Schlüsselbund hinzugefügt. Mit ssb wird angezeigt, dass es sich um einen Unterschlüssel handelt. Hinter usage steht das E für Verschlüsselungsnutzbarkeit (Encrypt Capability).

Sub-Key für Signaturnutzbarkeit (sign capability)

  gpg> addkey
  Please select what kind of key you want:
     (3) DSA (sign only)
     (4) RSA (sign only)
     (5) Elgamal (encrypt only)
     (6) RSA (encrypt only)
     (7) DSA (set your own capabilities)
     (8) RSA (set your own capabilities)
    (10) ECC (sign only)
    (11) ECC (set your own capabilities)
    (12) ECC (encrypt only)
    (13) Existing key
    (14) Existing key from card
  Your selection? 8

  Possible actions for a RSA key: Sign Encrypt Authenticate
  Current allowed actions: Sign Encrypt

     (S) Toggle the sign capability
     (E) Toggle the encrypt capability
     (A) Toggle the authenticate capability
     (Q) Finished

  Your selection? e

  Possible actions for a RSA key: Sign Encrypt Authenticate
  Current allowed actions: Sign

     (S) Toggle the sign capability
     (E) Toggle the encrypt capability
     (A) Toggle the authenticate capability
     (Q) Finished

  Your selection? q
  RSA keys may be between 1024 and 4096 bits long.
  What keysize do you want? (3072) 4096
  Requested keysize is 4096 bits
  Please specify how long the key should be valid.
           0 = key does not expire
          = key expires in n days
        w = key expires in n weeks
        m = key expires in n months
        y = key expires in n years
  Key is valid for? (0) 5y
  Key expires at Do 11 Dez 2025 16:21:16 CET
  Is this correct? (y/N) y
  Really create? (y/N) y
  We need to generate a lot of random bytes. It is a good idea to perform
  some other action (type on the keyboard, move the mouse, utilise the
  disks) during the prime generation; this gives the random number
  generator a better chance to gain enough entropy.

  sec  rsa4096/5C32B7A2290F8AE4
       created: 2020-12-12  expires: 2025-12-11  usage: C
       trust: ultimate      validity: ultimate
  ssb  rsa4096/AC3DF8B5D579D99A
       created: 2020-12-12  expires: 2025-12-11  usage: E
  ssb  rsa4096/F2F84EBBFEFDC588
       created: 2020-12-12  expires: 2025-12-11  usage: S
  [ultimate] (1). test-benutzer 

  gpg>

Der Sub-Key wurde automatisch zum Schlüsselbund hinzugefügt. Mit ssb wird der Unterschlüssel angezeigt. Hinter usage steht das "S" für Signaturnutzbarkeit (sign capability).

Sub-Key für Authentisierungsnutzbarkeit (authenticate capability)

  gpg> addkey
  Please select what kind of key you want:
     (3) DSA (sign only)
     (4) RSA (sign only)
     (5) Elgamal (encrypt only)
     (6) RSA (encrypt only)
     (7) DSA (set your own capabilities)
     (8) RSA (set your own capabilities)
    (10) ECC (sign only)
    (11) ECC (set your own capabilities)
    (12) ECC (encrypt only)
    (13) Existing key
    (14) Existing key from card
  Your selection? 8

  Possible actions for a RSA key: Sign Encrypt Authenticate
  Current allowed actions: Sign Encrypt

     (S) Toggle the sign capability
     (E) Toggle the encrypt capability
     (A) Toggle the authenticate capability
     (Q) Finished

  Your selection? a

  Possible actions for a RSA key: Sign Encrypt Authenticate
  Current allowed actions: Sign Encrypt Authenticate

     (S) Toggle the sign capability
     (E) Toggle the encrypt capability
     (A) Toggle the authenticate capability
     (Q) Finished

  Your selection? s

  Possible actions for a RSA key: Sign Encrypt Authenticate
  Current allowed actions: Encrypt Authenticate

     (S) Toggle the sign capability
     (E) Toggle the encrypt capability
     (A) Toggle the authenticate capability
     (Q) Finished

  Your selection? e

  Possible actions for a RSA key: Sign Encrypt Authenticate
  Current allowed actions: Authenticate

     (S) Toggle the sign capability
     (E) Toggle the encrypt capability
     (A) Toggle the authenticate capability
     (Q) Finished

  Your selection? q
  RSA keys may be between 1024 and 4096 bits long.
  What keysize do you want? (3072) 4096
  Requested keysize is 4096 bits
  Please specify how long the key should be valid.
           0 = key does not expire
          = key expires in n days
        w = key expires in n weeks
        m = key expires in n months
        y = key expires in n years
  Key is valid for? (0) 5y
  Key expires at Do 11 Dez 2025 16:25:33 CET
  Is this correct? (y/N) y
  Really create? (y/N) y
  We need to generate a lot of random bytes. It is a good idea to perform
  some other action (type on the keyboard, move the mouse, utilise the
  disks) during the prime generation; this gives the random number
  generator a better chance to gain enough entropy.

  sec  rsa4096/5C32B7A2290F8AE4
       created: 2020-12-12  expires: 2025-12-11  usage: C
       trust: ultimate      validity: ultimate
  ssb  rsa4096/AC3DF8B5D579D99A
       created: 2020-12-12  expires: 2025-12-11  usage: E
  ssb  rsa4096/F2F84EBBFEFDC588
       created: 2020-12-12  expires: 2025-12-11  usage: S
  ssb  rsa4096/F122ED392968B430
       created: 2020-12-12  expires: 2025-12-11  usage: A
  [ultimate] (1). test-benutzer 

  gpg>

Der Sub-Key wurde automatisch zum Schlüsselbund hinzugefügt. Mit ssb wird der Unterschlüssel angezeigt. Hinter usage steht das "A" für Authentisierungsnutzbarkeit (authenticate capability).

Alle drei Sub-Keys sind erstellt und die Bearbeitung kann beendet werden.

  gpg> save

Den Schlüsselbund mit allen so eben erstellen Keys könnt ihr euch mit dem Befehl anzeigen lassen.

gpg -k
/home/dev/.gnupg/pubring.kbx
----------------------------
pub   rsa4096 2020-12-12 [C] [expires: 2025-12-11]
      EE223DBF5644229EFABE52C55C32B7A2290F8AE4
uid           [ultimate] test-benutzer 
sub   rsa4096 2020-12-12 [E] [expires: 2025-12-11]
sub   rsa4096 2020-12-12 [S] [expires: 2025-12-11]
sub   rsa4096 2020-12-12 [A] [expires: 2025-12-11]

Möchtet ihr nur die öffentlichen Keys im Schlüsselbund angezeigt bekommen, dann lt. der Befehl:

gpg -k

oder

gpg --list-keys

Die privaten Keys im Schlüsselbund lassen sich mit anzeigen

gpg --list-secret-keys

OpenPGP Smartcard Fields

  • Application ID = The manufacture's ID. This includes the type of the card, the implemented version of the specification, the manufacturer and the serial number. This is a unique identifier for any card.

  • Version = The used OpenPGP specification.

  • Manufacturer = The card's manufacturer.

  • Serial number = A unique number for all cards from this manufacturer.

  • Name of cardholder = The holder of this card. Only plain ASCII characters are Allowed here. gpg does not use this field.

  • Language prefs = The card holder's language preferences. gpg ignores this value.

  • Salutation = (ehemals SEX)

  • URL of public key = Used by the fetch command of gpg2 --edit-card. It may contain an URL to be used to retrieve the public key.

  • Login data = This field may be used to store the account name of the card holder. It may be used for login purposes. gpg does not enforce any match of this name with a name used in the key. See the source (app-openpgp.c) for some special features of the login-name field.

  • Signature PIN = When set to "forced", gpg requests the entry of a PIN for each signature operation. When set to "non forced", gpg may cache the PIN as long as the card has not been removed from the reader.

  • Max. PIN lengths = This field is unchangeable. The values are put on the card right after personalisation - this is the moment after the chip has been glued on the card.

  • PIN retry counter = This field saves how many tries still are left to enter the right PIN. They are decremented whenever a wrong PIN is entered. They are reset whenever a correct Admin-PIN is entered. The first and second PIN are for the standard PIN. gpg makes sure that the two numbers are synchronized. The second PIN is only required due to peculiarities of the ISO-7816 standard; gpg tries to keep this PIN in sync with the first PIN. The third PIN represents the retry counter for the Admin-PIN.

  • Signature counter = This number keeps track of the signatures performed with the stored key. It is only reset if a new signature key is created on or imported to the card.

  • KDF setting= KDF = Key Derived Function; With the KDF function enabled, the PIN is stored as a hash on the YubiKey. When entering the PIN to the OpenPGP Smart Card, the OpenPGP client will only pass the hashed value, never passing the PIN directly. KDF functionality is set on the card itself, and communicated to the client; it is transparent to the user. Should the KDF functionality not be enabled, the PIN function will work as previously. The KDF function is listed in section 4.3.2 of the OpenPGP Smart Card 3.4 spec.

  • UIF setting [on|off|permanent] = Change the User Interaction Flag. That flags tells whether the confirmation button of a token shall be used. n must in the range 1 to 3. permanent is the same as on but the flag can’t be changed anymore

  • Signature key = This key is commonly used as the primary OpenPGP key.

  • Encryption key = This key is commonly used as an encryption Sub-Key.

  • Authentication key= This key is not used by gpg at all. Other tools like PAM modules or ssh use this key for authentication services.

  • General key info = This primary user ID is shown if the corresponding public OpenPGP key is available.

Für weitere Informationen zu den einzelnen Feldern siehe

Die nächsten wichtigen Schritte

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

Source

Foto von rc.xyz NFT gallery auf Unsplash