OpenPGP-sleutelgeneratie met back-up#

(Nitrokey Pro 2 - macOS)

The following instructions explain the generation of OpenPGP keys and how to copy them to the Nitrokey. This method has the advantage of providing a backup of the keys in case of losing or breaking the Nitrokey. The instructions are based on the command line interface of GnuPG. Thus, you need to have GnuPG installed on your system. The newest GnuPG version for Windows can be found here and the newest version for MacOS can be found here. Users of Linux systems please install GnuPG with help of the package manager.

Sleutel generatie#

Eerst moet u lokaal een sleutel genereren. U kunt beslissen welke sleutelattributen u wilt gebruiken en - het belangrijkste - u kunt de sleutel exporteren en ergens bewaren voor het geval u de sleutel moet herstellen.

Hoofdsleutel en Encryptie Sub Sleutel#

We kunnen het commando gpg --full-generate-key --expert gebruiken om een begeleide sleutelgeneratie te starten met alle mogelijke opties. U kunt het type sleutel kiezen (gewoonlijk RSA (1) of ECC (9)), de lengte van de sleutel en andere attributen. De volgende uitvoer is slechts een eenvoudig voorbeeld, u kunt andere waarden kiezen.

> 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]

De volgende tabel illustreert welk algoritme op welk apparaat kan worden gebruikt, voor het geval u verschillende sleutelattributen wilt gebruiken.

Start

Pro + Storage

Pro 2 + Storage 2

RSA1024

RSA2048

rsa3072

RSA4096

curve25519 (ECC)

NIST (ECC)

Brainpool (ECC)

secp256k1

Sub-Sleutel voor Authenticatie#

U hebt nu een hoofdsleutel met de mogelijkheid om te ondertekenen en te certificeren (gemarkeerd als [SC]) en een subsleutel voor encryptie (gemarkeerd als [E]). Er moet nog een subsleutel zijn voor gevallen waarin authenticatie nodig is. Deze subsleutel wordt in de volgende stap gegenereerd. Typ gpg --edit-key --expert keyID in om het proces te starten, waarbij “keyID” ofwel het id van de sleutel is of het e-mailadres dat tijdens het genereren van de sleutel werd gebruikt.

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

Nu bent u in de interactieve modus van GnuPG en kunt u een sleutel toevoegen door simpelweg addkey te typen. U moet de sleutel kiezen die u wilt gebruiken. Het is cruciaal om “set your own capabilities” te kiezen, omdat we de “authenticate” mogelijkheid willen hebben die anders niet beschikbaar is. We schakelen tussen ondertekenen en versleutelen door te typen s en e en we activeren authenticeren door a te typen.

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

We stoppen met q. Daarna moeten we dezelfde vragen beantwoorden als voorheen. Tenslotte hebben we een kant-en-klare sleutelset die we kunnen importeren naar ons apparaat.

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

Nu is een goed moment om een backup te maken van uw sleutel. Bewaar deze backup goed. Het is het beste om deze sleutel nooit op een gewone computer met internetverbinding te hebben, zodat de sleutel nooit in gevaar komt. U kunt een backup maken met iets als:

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

Sleutel Invoer#

U hebt een hoofdsleutel en twee subsleutels die in uw Nitrokey kunnen worden geïmporteerd. Voordat u verder gaat, zorg ervoor dat u echt een back-up van de sleutel hebt, als u die nodig hebt. Het keytocard commando dat in de volgende stappen wordt gebruikt, zal uw sleutel van uw schijf verwijderen!

We beginnen het proces door de interactieve interface van GnuPG opnieuw te openen met gpg --edit-key --expert keyID, terwijl keyID ofwel de id van de sleutel is of het e-mailadres dat tijdens het genereren van de sleutel werd gebruikt.

> 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

We hebben zojuist de hoofdsleutel naar de kaart geïmporteerd. Nu gaan we verder met de twee subsleutels. We typen key 1 om de encryptie-subsleutel te selecteren en typen opnieuw keytocard en selecteren de te gebruiken sleuf.

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

Nu deselecteren we de eerste toets met key 1 en selecteren de tweede subsleutel met key 2 en verplaatsen deze ook met keytocard. Daarna sluiten we af en slaan de wijzigingen op.

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

Uw sleutels zijn nu overgebracht naar de Nitrokey en dus hardwarematig beveiligd. Gefeliciteerd!

Exporteren van publieke sleutel en Keyserver-gebruik#

Hoewel u uw Nitrokey meteen kunt gebruiken nadat u de sleutels op uw systeem hebt gegenereerd, moet u uw publieke sleutel importeren op elk systeem waarop u de Nitrokey wilt gebruiken. Dus om voorbereid te zijn heb je twee opties: Of u slaat de publieke sleutel op waar u maar wilt en gebruikt deze op een ander systeem, of u slaat de publieke sleutel op een webpagina/sleutelserver op.

Een bestand met openbare sleutels genereren#

Om een eenvoudig bestand van uw publieke sleutel te krijgen, kunt u gewoon gpg --armor --export keyID > pubkey.asc gebruiken. Gebruik ofwel de vingerafdruk als “keyID” (kijk naar gpg -K om het te krijgen) of gebruik gewoon uw email adres als identifier.

U kunt dit bestand bij u dragen of opsturen naar wie u maar wilt. Dit bestand is helemaal niet geheim. Als u de Nitrokey op een ander systeem wilt gebruiken, importeert u eerst deze publieke sleutel via gpg --import pubkey.asc en typt dan gpg --card-status zodat het systeem weet waar het naar deze sleutel moet zoeken. Dat is alles.

De openbare sleutel uploaden#

Als u geen publiek sleutelbestand bij u wilt dragen, kunt u het uploaden naar de keyserver. U kunt dit doen door gpg --keyserver search.keyserver.net --send-key keyID te typen. Als u een andere machine gebruikt, kunt u het gewoon importeren door gpg --keyserver search.keyserver.net --recv-key keyID te gebruiken.

Een andere mogelijkheid is om de URL-instelling op uw kaart te veranderen. Start gpg --card-edit opnieuw en stel eerst de URL in waar de sleutel zich bevindt (bijv. op de keyserver of op uw webpagina etc.) via het url commando. Vanaf nu kunt u de sleutel op een ander systeem importeren door gewoon het fetch commando te gebruiken binnen het gpg --card-edit environment.