YubiKey - OpenPGP Schlüsselpaare erstellen - Master Key und Sub-Keys
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) |
- YubiKey - OpenPGP Schlüsselpaare erstellen - Master Key und Sub-Keys
- Begrifflichkeiten
- Hinweise
- OpenGPG Schlüssel erstellen
- Sub-Keys erstellen
- OpenPGP Smartcard Fields
- Die nächsten wichtigen Schritte
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.
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
= (ehemalsSEX
) -
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 ason
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
- Es ist eine Revoke Datei zu erstellen, um den Master Key ggf. als ungültig zu erklären.
- Die erstellen Schlüssel lassen sich auf eine Smart Card, wie den YubiKey übertragen 👉 OpenPGP-Schlüssel auf den YubiKey exportieren
- Der OpenPGP-Schlüssel lässt sich in einen SSH-Schlüssel umwandeln, der dann für die Anmeldung an Linux-Systemen in der
authorized_keys
eingetragen werden kann. 👉 Anmeldung an Linux-Systemen mit SSH
YubiKey Themenseite
Hier geht es zur 👉 YubiKey Themenseite, dort findest du noch mehr Beiträge rund um den YubiKey.
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.
Follow Me❗️
Source
Foto von rc.xyz NFT gallery auf Unsplash