Gnu Privacy Guard (gpg) / Generate - Backup

Теги

Gnu Privacy Guard (gpg) - это бесплатная реализация СТАНДАРТА OPENGPG, проекта Gnu с открытым исходным кодом.

Система шифрования gpg называется "асимметричной" и основана на шифровании с открытым ключом: шифруем документ открытым ключом получателя, который будет единственным, кто сможет его расшифровать, поскольку владеет закрытым ключом, связанным с ним. Gpg позволяет нам также подписывать документы с помощью нашего закрытого ключа и позволять другим проверять эту подпись с помощью нашего открытого ключа. 

Чтобы иметь возможность генерировать наши пары ключей Gpg, первое, что мы должны сделать, это установить программу gpg. Хотя она уже должна быть установлена в нашем любимом дистрибутиве Linux. В Debian мы должны запустить:

$ sudo apt-get update && sudo update-get install gpg

На Fedora, или, в более общем случае, на всех последних версиях дистрибутивов, входящих в семейство Red Hat, мы можем использовать менеджер пакетов dnf для выполнения установки:

$ sudo dnf install gnupg2

В Archlinux пакет называется gnupg и включен в репозиторий дистрибутива "Core"; для его установки мы используем менеджер пакетов pacman:

$ sudo pacman -Sy gnupg

Генерация пары ключей. После того как программа gnupg установлена в нашей системе, мы можем приступить к генерации пары ключей. Чтобы запустить процесс генерации, выполните следующую команду:

$ gpg --full-gen-key

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

gpg (GnuPG) 2.2.12; 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)
Your selection?

По умолчанию выбран первый вариант (RSA и RSA); мы можем просто нажать Enter и использовать его. Следующий шаг заключается в выборе размера ключей, который может быть от 1024 до 4096 бит. По умолчанию используется значение 3072. Если мы хотим использовать любое другое значение, мы должны просто ввести его и подтвердить свой выбор. Например:

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096

Следующее, что мы должны решить, это срок действия наших ключей (если таковые имеются):

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0)

Установление срок действия, в конце процесса будет сгенерирован сертификат отзыва. Очень важно сохранить его в безопасности, чтобы мы могли использовать его для отзыва наших ключей в разных ситуациях. По умолчанию выбрано значение 0, поэтому срок действия ключей никогда не истечет. Если мы просто введем цифру, она будет интерпретирована как количество дней после истечения срока действия ключей. Чтобы цифра(ы) интерпретировалась как неделя, месяц или год, мы можем использовать соответствующие суффиксы, соответственно w, m и y.

Следующий этап процесса заключается в создании идентификатора ключей. Нам будет предложено ввести наши личные данные:

Real name: John Smith
Email address: john.smith@gmail.com
Comment: personal
You selected this USER-ID:
    "John Smith (personal) <john.smith@gmail.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?

Запрашиваемая информация включает в себя:

  • Наше настоящее имя.
  • Наш адрес электронной почты.
  • Необязательный комментарий (он может быть использован, например, для уточнения использования ключа).

После того как мы заполним все поля, нам будет предложено ввести построенный ID и подтвердить наши данные или изменить их. Для этого нужно нажать клавишу между скобками, так, чтобы изменить имя, нужно ввести клавишу "n". Для подтверждения достаточно ввести "o" и нажать Enter.

Начнется процесс генерации ключей. Для выполнения этого действия системе требуется большое количество случайных байтов, поэтому она предложит нам выполнить некоторые другие действия, чтобы сгенерировать достаточное количество энтропии. Нам также будет предложено ввести кодовую фразу и подтвердить ее, чтобы защитить наш закрытый ключ:

            ┌──────────────────────────────────────────────────────┐
            │ Please enter the passphrase to                       │
            │ protect your new key                                 │
            │                                                      │
            │ Passphrase: ________________________________________ │
            │                                                      │
            │       <OK>                              <Cancel>     │
            └──────────────────────────────────────────────────────┘

Обратите внимание, что приведенная выше подсказка может измениться, если вы используете графическую среду. В конце процесса мы получим подтверждение о создании ключей и сертификата отзыва:

gpg: /home/egdoc/.gnupg/trustdb.gpg: trustdb created
gpg: key 705637B3C58F6090 marked as ultimately trusted
gpg: directory '/home/egdoc/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/egdoc/.gnupg/openpgp-revocs.d/A4A42A471E7C1C09C9FDC4B1705637B3C58F6090.rev'
public and secret key created and signed.

pub   rsa4096 2021-04-20 [SC]
      A4A42A471E7C1C09C9FDC4B1705637B3C58F6090
uid                      Jhon Smith (personal) <john.smith@gmail.com>
sub   rsa4096 2021-04-20 [E]

Мы можем в любой момент перечислить открытые ключи в нашей связке ключей, выполнив следующую команду:

$ gpg --list-keys

Чтобы перечислить наши секретные/закрытые ключи, вместо этого нужно выполнить команду:

$ gpg --list-secret-keys

Мастер и саб-ключи. Если мы посмотрим на нашу связку ключей, то увидим, что на самом деле были сгенерирована пара главного ключа и пара подключей. Первый идентифицируется префиксом pub в начале строки, а в скобках мы видим обозначение, определяющее его использование: [SC]. Что это означает? "S" означает, что ключ используется для подписи, а "C" означает, что ключ также может быть использован для подписи других ключей.

Подключ описывается в строке, которая начинается с префикса sub. Мы можем увидеть тип ключа (rsa4096) и дату генерации. Наконец, мы можем увидеть, для чего он используется. Здесь [E] означает, что ключевая пара, частью которой является ключ, используется для шифрования/дешифрования.

Вот полный список используемых обозначений:

(S)ign: sign some data (like a file)
(C)ertify: sign a key (this is called certification)
(A)uthenticate: authenticate yourself to a computer (for example, logging in)
(E)ncrypt: encrypt data

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

$ tar -cvpzf gnupg.tar.gz ~/.gnupg

Приведенная выше команда создаст сжатый файл с именем gnupg.tar.gz в нашем текущем рабочем каталоге, который мы должны сохранить в безопасном месте. Альтернативным способом резервного копирования наших открытых и закрытых ключей, а также нашей базы данных trustdb (база данных trustdb отслеживает уровень доверия к ключам в нашей связке ключей), является использование некоторых специальных команд gpg. Например, для экспорта наших открытых ключей мы можем выполнить:

$ gpg --export --output public_keys

Когда gpg вызывается с опцией --export, он экспортирует все ключи из связки ключей в STDOUT или в файл, который мы можем указать с помощью опции --output. В данном случае мы экспортировали их в файл public_keys. Аналогично, чтобы экспортировать наши секретные ключи, мы можем выполнить:

$ gpg --export-secret-keys --output secret_keys

При экспорте или реимпорте секретных ключей будет запрошен пароль, который мы использовали для защиты наших ключей. Чтобы импортировать обратно файл, который мы создали с помощью команд выше, мы можем использовать опцию --import. Например, для импорта из файла public_keys мы выполним:

$ gpg --import public_keys

Наконец, для экспорта/импорта нашей trustdb мы можем использовать, соответственно, опции --export-ownertrust и --import-ownertrust:

$ gpg --export-ownertrust > otrust.txt

Чтобы импортировать его обратно:

$ gpg --import-ownertrust otrust.txt

В этой заметке мы рассмотрели, как сгенерировать пару ключей Gnu Privacy Guard (gpg).


GnuPG полностью совместима со стандартом IETF OpenPGP.