OpenPGP-Schlüsselerzeugung mit Backup#

(Nitrokey Pro 2 - macOS)

Die folgende Anleitung erklärt die Erzeugung von OpenPGP-Schlüsseln und wie man sie auf den Nitrokey kopiert. Diese Methode hat den Vorteil, dass sie ein Backup der Schlüssel für den Fall bietet, dass der Nitrokey verloren geht oder kaputt geht. Die Anleitung basiert auf der Kommandozeilenschnittstelle von GnuPG. Sie müssen also GnuPG auf Ihrem System installiert haben. Die neueste GnuPG-Version für Windows finden Sie hier und die neueste Version für MacOS finden Sie hier. Nutzer von Linux-Systemen installieren GnuPG bitte mit Hilfe des Paketmanagers.

Schlüsselerzeugung#

Zunächst müssen Sie einen Schlüssel lokal erzeugen. Sie können entscheiden, welche Schlüsselattribute Sie verwenden möchten, und - ganz wichtig - Sie können den Schlüssel exportieren und an einem sicheren Ort aufbewahren, falls Sie den Schlüssel wiederherstellen müssen.

Hauptschlüssel und Verschlüsselungsunterschlüssel#

Wir können den Befehl gpg --full-generate-key --expert verwenden, um eine geführte Schlüsselerzeugung mit allen möglichen Optionen zu starten. Sie können den Schlüsseltyp (normalerweise RSA (1) oder ECC (9)), die Länge des Schlüssels und andere Attribute wählen. Die folgende Ausgabe ist nur ein einfaches Beispiel, Sie können auch andere Werte wählen.

> gpg --full-generate-key --expert
gpg (GnuPG) 2.2.10; Copyright (C) 2018 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
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want for the subkey? (2048)
Requested keysize is 2048 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)
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: Jane Doe
Email address: jane@example.com
Comment:
You selected this USER-ID:
    "Jane Doe "

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, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
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, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: key 0EFFB0704391497C marked as ultimately trusted
gpg: revocation certificate stored as '/home/nitrokey//.gnupg/openpgp-revocs.d/9D12C91F6FC4CD6E10A1727A0EFFB0704391497C.rev'
public and secret key created and signed.

pub   rsa2048 2018-09-17 [SC]
      9D12C91F6FC4CD6E10A1727A0EFFB0704391497C
uid                      Jane Doe
sub   rsa2048 2018-09-17 [E]

Bemerkung

Informationen zu den unterstützten Algorithmen finden Sie in der faq

Unterschlüssel für die Authentifizierung#

Sie haben nun einen Hauptschlüssel mit der Fähigkeit zu signieren und zu zertifizieren (markiert als [SC]) und einen Unterschlüssel für die Verschlüsselung (markiert als [E]). Für Anwendungsfälle, in denen eine Authentifizierung benötigt wird, ist ein weiterer Unterschlüssel notwendig. Dieser Unterschlüssel wird im nächsten Schritt erzeugt. Geben Sie gpg --edit-key --expert keyID ein, um den Vorgang zu starten, wobei „keyID“ entweder die ID des Schlüssels oder die bei der Schlüsselerzeugung verwendete E-Mail-Adresse ist.

> gpg --edit-key --expert jane@example.com
gpg (GnuPG) 2.2.10; Copyright (C) 2018 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  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
[ultimate] (1). Jane Doe

gpg>

Jetzt befinden Sie sich im interaktiven Modus von GnuPG und können einen Schlüssel hinzufügen, indem Sie einfach addkey eingeben. Sie müssen den Schlüssel auswählen, den Sie verwenden wollen. Es ist entscheidend, „set your own capabilities“ zu wählen, da wir die Fähigkeit „authenticate“ haben wollen, die sonst nicht verfügbar ist. Wir schalten Signieren und Verschlüsseln um, indem wir `s und e eingeben, und wir aktivieren „authenticate“, indem wir a eingeben.

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
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? e

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

   (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: Authenticate

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

Your selection? q

Wir hören mit q auf. Danach müssen wir die gleichen Fragen wie zuvor beantworten. Schließlich haben wir einen fertigen Schlüsselsatz, den wir in unser Gerät importieren können.

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 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)
Key does not expire at all
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, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> quit
Save changes? (y/N) y

Jetzt ist ein guter Zeitpunkt, Ihren Schlüssel zu sichern. Bitte bewahren Sie diese Sicherung sehr sicher auf. Am besten ist es, diesen Schlüssel nie auf einem normalen Computer zu haben, der eine Verbindung zum Internet hat, so dass der Schlüssel nie kompromittiert wird. Sie können ein Backup erstellen mit etwas wie:

> gpg --export-secret-keys jane@example.com > sec-key.asc

Taste Import#

Sie haben einen Hauptschlüssel und zwei Unterschlüssel, die in Ihren Nitrokey importiert werden können. Bevor Sie fortfahren, vergewissern Sie sich bitte, dass Sie wirklich ein Backup des Schlüssels haben, falls Sie eines benötigen. Der in den nächsten Schritten verwendete Befehl keytocard wird Ihren Schlüssel von Ihrer Festplatte löschen!

Wir starten den Vorgang, indem wir die interaktive Oberfläche von GnuPG erneut mit gpg --edit-key --expert keyID aufrufen, wobei keyID entweder die ID des Schlüssels oder die bei der Schlüsselerzeugung verwendete E-Mail-Adresse ist.

> gpg --edit-key --expert jane@example.com
gpg (GnuPG) 2.2.10; Copyright (C) 2018 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  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> keytocard
Really move the primary key? (y/N) y
Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection? 1

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

Wir haben gerade den Hauptschlüssel auf die Karte importiert. Nun fahren wir mit den beiden Unterschlüsseln fort. Wir geben Schlüssel 1 ein, um den Unterschlüssel für die Verschlüsselung auszuwählen und tippen wieder Schlüsselkarte ein und wählen den zu verwendenden Steckplatz.

gpg> key 1

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb* rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> keytocard
Please select where to store the key:
   (2) Encryption key
Your selection? 2

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb* rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

Nun deselektieren wir den ersten Schlüssel mit Taste 1 und selektieren den zweiten Unterschlüssel mit Taste 2 und verschieben ihn ebenfalls mit Tastenkarte. Danach verlassen wir das Programm und speichern die Änderungen.

gpg> key 1

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> key 2

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb* rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> keytocard
Please select where to store the key:
   (3) Authentication key
Your selection? 3

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb* rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> quit
Save changes? (y/N) y

Ihre Schlüssel sind nun auf den Nitrokey verschoben und damit in der Hardware gesichert. Herzlichen Glückwunsch!

Exportieren des öffentlichen Schlüssels und Keyserver-Verwendung#

Obwohl Sie Ihren Nitrokey sofort nach der Schlüsselerzeugung auf Ihrem System verwenden können, müssen Sie Ihren öffentlichen Schlüssel auf jedes System importieren, auf dem Sie den Nitrokey verwenden möchten. Um vorbereitet zu sein, haben Sie also zwei Möglichkeiten: Entweder Sie speichern den öffentlichen Schlüssel an einem beliebigen Ort und verwenden ihn auf einem anderen System oder Sie speichern den öffentlichen Schlüssel auf einer Webseite/Schlüsselserver.

Erzeugen einer Public-Key-Datei#

Um eine einfache Datei mit Ihrem öffentlichen Schlüssel zu erhalten, können Sie einfach gpg --armor --export keyID > pubkey.asc verwenden. Verwenden Sie entweder den Fingerabdruck als „keyID“ (schauen Sie sich gpg -K an, um ihn zu erhalten) oder verwenden Sie einfach Ihre E-Mail-Adresse als Bezeichner.

Sie können diese Datei mit sich führen oder an jeden senden, den Sie mögen. Diese Datei ist überhaupt nicht geheim. Wenn Sie den Nitrokey auf einem anderen System verwenden wollen, importieren Sie zunächst diesen öffentlichen Schlüssel über gpg --import pubkey.asc und geben dann gpg --card-status ein, damit das System weiß, wo es nach diesem Schlüssel suchen muss. Das war’s schon.

Hochladen des öffentlichen Schlüssels#

Wenn Sie eine öffentliche Schlüsseldatei nicht mit sich führen wollen, können Sie sie auf den Keyserver hochladen. Dies können Sie tun, indem Sie gpg --keyserver search.keyserver.net --send-key keyID eingeben. Wenn Sie einen anderen Rechner benutzen, können Sie es einfach importieren, indem Sie gpg --keyserver search.keyserver.net --recv-key keyID eingeben.

Eine andere Möglichkeit ist, die URL-Einstellung auf Ihrer Karte zu ändern. Starten Sie erneut gpg --card-edit und stellen Sie zunächst mit dem Befehl url die URL ein, unter der sich der Schlüssel befindet (z.B. auf dem Keyserver oder auf Ihrer Webseite etc.). Von nun an können Sie den Schlüssel auf einem anderen System importieren, indem Sie einfach den Befehl fetch innerhalb der gpg --card-edit Umgebung verwenden.