Generering av OpenPGP-nycklar med säkerhetskopiering#

(Nitrokey HSM 2 - Linux)

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.

Nyckelgenerering#

Först måste du generera en nyckel lokalt. Du kan bestämma vilka nyckelattribut som ska användas och - viktigast av allt - du kan exportera nyckeln och spara den någonstans om du behöver återställa nyckeln.

Huvudnyckel och krypteringsundernyckel#

Vi kan använda kommandot gpg --full-generate-key --expert för att starta en guidad nyckelgenerering med alla möjliga alternativ. Du kan välja nyckeltyp (vanligtvis RSA (1) eller ECC (9)), nyckellängd och andra attribut. Följande utdata är bara ett enkelt exempel, du kan välja andra värden.

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

Följande tabell visar vilken algoritm som kan användas på vilken enhet, om du vill använda olika nyckelattribut.

Starta

Pro + lagring

Pro 2 + lagring 2

rsa1024

rsa2048

rsa3072

rsa4096

kurva25519

NIST (ECC)

Brainpool 192

secp256

Undernyckel för autentisering#

Du har nu en huvudnyckel med möjlighet att signera och certifiera (markerad med [SC]) och en undernyckel för kryptering (markerad med [E]). Det är nödvändigt att ha ytterligare en undernyckel för användningsfall där autentisering behövs. Denna undernyckel genereras i nästa steg. Skriv gpg --edit-key --expert keyID för att starta processen, medan ”keyID” är antingen id för nyckeln eller den e-postadress som används vid nyckelgenereringen.

> 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 är du i GnuPG:s interaktiva läge och du kan lägga till en nyckel genom att helt enkelt skriva addkey. Du måste välja den nyckel du vill använda. Det är viktigt att välja ”set your own capabilities”, eftersom vi vill ha funktionen ”authenticate”, som annars inte är tillgänglig. Vi växlar mellan signering och kryptering genom att skriva s och e och vi aktiverar autentisering genom att skriva a<x>.

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

Vi slutar med q. Därefter måste vi besvara samma frågor som tidigare. Slutligen har vi en färdig nyckeluppsättning som vi kan importera till vår enhet.

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 är det dags att säkerhetskopiera din nyckel. Förvara denna säkerhetskopia på ett mycket säkert sätt. Det är bäst att aldrig ha nyckeln på en vanlig dator med internetanslutning, så att nyckeln inte äventyras. Du kan skapa en säkerhetskopia med något liknande:

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

Nyckelimport#

Du har en huvudnyckel och två undernycklar som kan importeras till din Nitrokey. Innan du fortsätter bör du se till att du verkligen har en säkerhetskopia av nyckeln, om du behöver en sådan. Kommandot keytocard som används i nästa steg kommer att radera din nyckel från din disk!

Vi startar processen genom att återigen öppna GnuPG:s interaktiva gränssnitt med gpg --edit-key --expert keyID, medan keyID är antingen nyckelns id eller e-postadressen som användes under nyckelgenereringen.

> 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

Vi har just importerat huvudnyckeln till kortet. Nu fortsätter vi med de två undernycklarna. Vi skriver key 1 för att välja krypteringsundernyckeln och skriver keytocard igen och väljer den kortplats som ska användas.

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 avmarkerar vi den första nyckeln med key 1 och markerar den andra undernyckeln med key 2 och flyttar den också med keytocard. Därefter avslutar vi och sparar ändringarna.

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

Dina nycklar flyttas nu till Nitrokey och är därmed säkrade i hårdvara. Grattis!

Exportera offentlig nyckel och användning av Keyserver#

Även om du kan börja använda din Nitrokey direkt efter att du har genererat nycklarna på ditt system måste du importera din offentliga nyckel till alla system som du vill använda Nitrokey på. För att vara förberedd har du två alternativ: Antingen sparar du den offentliga nyckeln var som helst och använder den på ett annat system eller så sparar du den offentliga nyckeln på en webbsida/nyckelserver.

Generera en fil med offentlig nyckel#

För att få en enkel fil med din offentliga nyckel kan du bara använda gpg --armor --export keyID > pubkey.asc. Använd antingen fingeravtrycket som ”keyID” (titta på gpg -K för att få fram det) eller använd bara din e-postadress som identifierare.

Du kan ha den här filen med dig eller skicka den till vem du vill. Den här filen är inte alls hemlig. Om du vill använda Nitrokey på ett annat system importerar du först denna offentliga nyckel via gpg --import pubkey.asc och skriver sedan gpg --card-status så att systemet vet var det ska leta efter denna nyckel. Det var allt.

Ladda upp den offentliga nyckeln#

Om du inte vill bära med dig en offentlig nyckelfil kan du ladda upp den till keyserver. Du kan göra detta genom att skriva gpg --keyserver search.keyserver.net --send-key keyID. Om du använder en annan maskin kan du bara importera den genom att använda gpg --keyserver search.keyserver.net --recv-key keyID.

En annan möjlighet är att ändra URL-inställningen på kortet. Starta gpg --card-edit igen och ställ först in URL:en där nyckeln finns (t.ex. på keyservern eller på din webbsida osv.) via kommandot url. Från och med nu kan du importera nyckeln på ett annat system genom att bara använda kommandot fetch inom gpg --card-edit environment.