Generowanie klucza OpenPGP z kopią zapasową

Poniższe instrukcje wyjaśniają generowanie kluczy OpenPGP i sposób ich kopiowania na Nitrokey. Metoda ta ma tę zaletę, że zapewnia kopię zapasową kluczy w przypadku utraty lub złamania Nitrokey. Instrukcje opierają się na interfejsie wiersza poleceń programu GnuPG. W związku z tym musisz mieć zainstalowany GnuPG w swoim systemie. Najnowszą wersję GnuPG dla Windows można znaleźć tutaj, a najnowszą wersję dla MacOS można znaleźć tutaj. Użytkowników systemów linuksowych prosimy o zainstalowanie GnuPG za pomocą menedżera pakietów.

Generowanie kluczy

Na początku należy wygenerować klucz lokalnie. Możesz zdecydować, jakich atrybutów klucza użyć i - co najważniejsze - możesz wyeksportować klucz i zachować go w bezpiecznym miejscu na wypadek, gdybyś musiał go odtworzyć.

Klucz główny i podklucz szyfrujący

Możemy użyć polecenia gpg --full-generate-key --expert, aby rozpocząć generowanie klucza z wszystkimi możliwymi opcjami. Możesz wybrać typ klucza (zwykle RSA (1) lub ECC (9)), długość klucza i inne atrybuty. Poniższe wyjście jest tylko prostym przykładem, możesz wybrać inne wartości.

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

Informacja

Informacje na temat obsługiwanych algorytmów można znaleźć na stronie faq

Podklucz dla uwierzytelniania

Masz teraz klucz główny z możliwością podpisywania i poświadczania (oznaczony jako [SC]) oraz klucz podrzędny do szyfrowania (oznaczony jako [E]). Konieczne jest posiadanie jeszcze jednego klucza podrzędnego dla przypadków użycia, w których potrzebne jest uwierzytelnienie. Ten podklucz jest generowany w następnym kroku. Wpisz gpg --edit-key --expert keyID, aby rozpocząć proces, podczas gdy „keyID” jest albo identyfikatorem klucza, albo adresem e-mail użytym podczas generowania klucza.

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

Teraz jesteś w interaktywnym trybie GnuPG i możesz dodać klucz wpisując po prostu addkey. Musisz wybrać klucz, którego chcesz użyć. Kluczowe jest wybranie opcji „set your own capabilities”, ponieważ chcemy mieć możliwość „authenticate”, która nie jest dostępna w innym przypadku. Przełączamy podpisywanie i szyfrowanie wpisując s oraz e i aktywujemy uwierzytelnianie wpisując a.

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

Kończymy z q. Następnie musimy odpowiedzieć na te same pytania co poprzednio. W końcu mamy gotowy zestaw kluczy, który możemy zaimportować do naszego urządzenia.

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

Teraz jest dobry czas na zrobienie kopii zapasowej klucza. Proszę zachować tę kopię bardzo bezpiecznie. Najlepszą praktyką jest, aby nigdy nie mieć tego klucza na zwykłym komputerze, który ma połączenie z Internetem, tak aby klucz nigdy nie został naruszony. Możesz utworzyć kopię zapasową za pomocą czegoś takiego jak:

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

Kluczowy import

Masz klucz główny i dwa podklucze, które mogą zostać zaimportowane do Twojego Nitrokey. Przed kontynuacją upewnij się, że naprawdę masz kopię zapasową klucza, jeśli jej potrzebujesz. Polecenie keytocard użyte w następnych krokach spowoduje usunięcie Twojego klucza z dysku!

Proces rozpoczynamy od ponownego wejścia do interaktywnego interfejsu GnuPG za pomocą gpg --edit-key --expert keyID, natomiast keyID jest albo identyfikatorem klucza, albo adresem e-mail użytym podczas generowania klucza.

> 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

Właśnie zaimportowaliśmy klucz główny na kartę. Teraz zajmiemy się dwoma kluczami podrzędnymi. Wpisujemy key 1 aby wybrać klucz podrzędny szyfrujący i wpisujemy ponownie keytocard i wybieramy slot do użycia.

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

Teraz usuwamy zaznaczenie pierwszego klucza za pomocą key 1 i wybieramy drugi klucz podrzędny za pomocą key 2 i przenosimy go również za pomocą keytocard. Następnie kończymy pracę i zapisujemy zmiany.

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

Twoje klucze są teraz przeniesione do Nitrokey i w ten sposób zabezpieczone sprzętowo. Gratulacje!

Eksportowanie klucza publicznego i użycie Keyservera

Chociaż możesz zacząć używać Nitrokey od razu po wygenerowaniu kluczy w Twoim systemie, musisz zaimportować swój klucz publiczny na każdym systemie, na którym chcesz używać Nitrokey. Aby być przygotowanym masz dwie opcje: albo zapisujesz klucz publiczny gdziekolwiek chcesz i używasz go na innym systemie, albo zapisujesz klucz publiczny na stronie internetowej/serwerze kluczy.

Generowanie pliku klucza publicznego

Aby uzyskać prosty plik swojego klucza publicznego, możesz po prostu użyć gpg --armor --export keyID > pubkey.asc. Użyj albo odcisku palca jako „keyID” (spójrz na gpg -K, aby go uzyskać) lub po prostu użyj swojego adresu e-mail jako identyfikatora.

Możesz nosić ten plik przy sobie lub wysłać go do kogokolwiek chcesz. Ten plik nie jest w ogóle tajny. Jeśli chcesz użyć Nitrokey w innym systemie, najpierw importujesz ten klucz publiczny przez gpg --import pubkey.asc, a następnie wpisujesz gpg --card-status, aby system wiedział, gdzie szukać tego klucza. To wszystko.

Przesyłanie klucza publicznego

If you don’t want to carry a public key file, you can upload it to keyserver. For the common SKS federated keyservers, for example, keyserver.ubuntu.com. Type gpg --keyserver keyserver.ubuntu.com --send-key keyID. If you are using another machine, you can just import it by using gpg --keyserver keyserver.ubuntu.com --recv-key keyID.

Można również użyć openpgp.keys.org. Zalecanym sposobem jest zrobienie tego przez gpg --export your_address@example.net. Jeśli korzystasz z innego komputera, możesz po prostu zaimportować go za pomocą gpg --auto-key-locate hkps://keys.openpgp.org.

Inną możliwością jest zmiana ustawienia adresu URL na karcie. Uruchom ponownie gpg --card-edit i najpierw ustaw adres URL, pod którym znajduje się klucz (np. na serwerze kluczy lub na swojej stronie internetowej itp.) za pomocą polecenia url. Od tego momentu możesz zaimportować klucz do innego systemu, używając polecenia fetch w gpg --card-edit environment.