Генерация ключей OpenPGP с резервным копированием#

(Nitrokey 3 - 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.

Генерация ключей#

Сначала вам нужно сгенерировать ключ локально. Вы можете решить, какие атрибуты ключа использовать, и - самое главное - вы можете экспортировать ключ и сохранить его где-нибудь на случай, если вам понадобится восстановить ключ.

Основной ключ и подключ шифрования#

Мы можем использовать команду gpg --full-generate-key --expert для запуска управляемой генерации ключей со всеми возможными опциями. Вы можете выбрать тип ключа (обычно RSA (1) или ECC (9)), длину ключа и другие атрибуты. Приведенный ниже результат является простым примером, вы можете выбрать другие значения.

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

Примечание

Информацию о поддерживаемых алгоритмах можно найти на сайте faq.

Подключ для аутентификации#

Теперь у вас есть главный ключ с возможностью подписи и сертификации (обозначен как [SC]) и подключ для шифрования (обозначен как [E]). Необходимо иметь еще один подключ для случаев, когда требуется аутентификация. Этот подключ генерируется на следующем шаге. Введите gpg --edit-key --expert keyID, чтобы начать процесс, в то время как «keyID» - это либо идентификатор ключа, либо адрес электронной почты, использованный при генерации ключа.

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

Теперь вы находитесь в интерактивном режиме GnuPG и можете добавить ключ, просто набрав addkey. Вам нужно выбрать ключ, который вы хотите использовать. Очень важно выбрать «set your own capabilities», потому что мы хотим иметь возможность «authenticate», которая недоступна в других случаях. Мы переключим режим подписи и шифрования, набрав s и e и активируем аутентификацию, набрав 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

Мы закончили с q. После этого нам нужно ответить на те же вопросы, что и раньше. Наконец, у нас есть готовый набор ключей, который мы можем импортировать на наше устройство.

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

Сейчас самое время сделать резервную копию вашего ключа. Пожалуйста, храните эту резервную копию очень надежно. Лучше всего не хранить этот ключ на обычном компьютере, подключенном к Интернету, чтобы ключ никогда не был скомпрометирован. Вы можете создать резервную копию с помощью такой программы, как:

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

Импорт ключей#

У вас есть основной ключ и два подключа, которые можно импортировать в Nitrokey. Прежде чем продолжить, пожалуйста, убедитесь, что у вас действительно есть резервная копия ключа, если она вам понадобится. Команда keytocard, используемая в следующих шагах, удалит ваш ключ с диска!

Мы начинаем процесс с повторного доступа к интерактивному интерфейсу GnuPG с gpg --edit-key --expert keyID, в то время как keyID является либо идентификатором ключа, либо адресом электронной почты, использованным при генерации ключа.

> 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

Мы только что импортировали главный ключ на карту. Теперь перейдем к двум подключам. Мы вводим key 1 для выбора подключа шифрования и снова вводим keytocard и выбираем слот для использования.

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

Теперь отменим выделение первой клавиши с помощью key 1 и выделим вторую подклавишу с помощью key 2 и перемещаем ее также с помощью keytocard. После этого выходим и сохраняем изменения.

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

Теперь ваши ключи перенесены в Nitrokey и, таким образом, надежно закреплены. Поздравляем!

Экспорт открытого ключа и использование сервера ключей#

Хотя вы можете начать использовать Nitrokey сразу после генерации ключей на вашей системе, вам необходимо импортировать ваш открытый ключ на каждую систему, на которой вы хотите использовать Nitrokey. Поэтому, чтобы быть готовым, у вас есть два варианта: Либо вы сохраняете открытый ключ в любом удобном для вас месте и используете его на другой системе, либо вы сохраняете открытый ключ на веб-странице/сервере ключей.

Генерация файла открытого ключа#

Чтобы получить простой файл вашего открытого ключа, вы можете просто использовать gpg --armor --export keyID > pubkey.asc. Используйте либо отпечаток пальца в качестве «keyID» (посмотрите gpg -K, чтобы получить его), либо просто используйте свой адрес электронной почты в качестве идентификатора.

Вы можете носить этот файл с собой или отправить его любому желающему. Этот файл не является секретным. Если вы хотите использовать Nitrokey на другой системе, сначала импортируйте этот открытый ключ через gpg --import pubkey.asc, а затем введите gpg --card-status, чтобы система знала, где искать этот ключ. Вот и все.

Загрузка открытого ключа#

Если вы не хотите носить с собой открытый ключевой файл, вы можете загрузить его на keyserver. Это можно сделать, набрав gpg --keyserver search.keyserver.net --send-key keyID. Если вы используете другую машину, вы можете просто импортировать его, используя gpg --keyserver search.keyserver.net --recv-key keyID.

Другая возможность - изменить настройку URL на вашей карте. Запустите gpg --card-edit снова и сначала установите URL, где находится ключ (например, на сервере ключей или на вашей веб-странице и т.д.) с помощью команды url. Теперь вы можете импортировать ключ на другую систему, просто используя команду fetch внутри команды gpg --card-edit environment.