GNU Privacy Guard, также известная как GPG, — популярное программное обеспечение с открытым исходным кодом для безопасного общения.

В этой статье я объясню ключи GPG, как они работают и как их можно использовать.

Что такое GPG?

GPG — это реализация OpenPGP, стандарта для аутентификации или шифрования данных с использованием криптографии с открытым ключом.

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

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

Установка GPG

Вы можете загрузить и установить GPG с Официального сайта если он еще не установлен.

Чтобы проверить, правильно ли он установлен, запустите:

gpg -h

Генерация новой пары ключей GPG

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

gpg --full-generate-key

Вам несколько раз будет предложено настроить ключи:

  • Вид: RSA и RSA (по умолчанию)
  • Размер: > 4096 (для подписи коммитов)
  • Срок действия: может составлять дни, недели, месяцы или годы. Например, «1y» установит его равным одному году.
  • Имя, адрес электронной почты и комментарий: этот адрес электронной почты и имя будут связаны с вашей подписью.
  • Пароль: Безопасная парольная фраза для разблокировки закрытого ключа. Сделайте его сильным. По возможности используйте генератор паролей.

Как только вы выполните все подсказки, gpg сгенерирует пару ключей.

Совет: Поскольку gpg использует энтропию для генерации пары ключей, это будет зависеть от того, насколько активна ваша система. Чтобы генерировать больше энтропии, вы можете использовать что-то вроде rng-tools.

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

gpg --list-keys

Создание сертификата отзыва

Сертификат отзыва может сделать ваш открытый ключ недействительным, если вы забудете свою парольную фразу или скомпрометируете свой закрытый ключ.

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

Чтобы сгенерировать сертификат отзыва, запустите:

gpg --output ~/revocation.crt --gen-revoke your-email@your-provider.com

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

Экспорт вашего открытого ключа

Чтобы использовать ключи GPG, вы должны экспортировать свой открытый ключ. Я расскажу, как вы можете поделиться экспортированным ключом с другими на общедоступном сервере ключей.

Чтобы экспортировать ключ, запустите:

gpg --armor --export your-email@your-provider.com

Вы также можете экспортировать его в файл, запустив:

gpg --output ~/public.key --armor --export your-email@your-provider.com

Подписание коммитов с помощью вашей пары ключей GPG

Все мои проекты и проекты, в которых я участвую, находятся на Gitea. Если вы используете другие платформы, такие как GitLab, вы можете следить за их официальная документация.

Примечание. Адрес электронной почты, связанный с вашим ключом GPG, должен совпадать с проверенным адресом электронной почты, настроенным в вашей учетной записи GitHub.

На GitHub перейдите в «Настройки» > «Доступ» > «Ключи SSH и GPG» > «Новый ключ GPG».

Это будет использоваться для проверки нашей подписи при коммитах.
Настройка открытого ключа на GitHub

Это будет использоваться для проверки нашей подписи при коммитах.

В поле «Ключ» вставьте открытый ключ, из которого вы экспортировали -----BEGIN PGP PUBLIC KEY BLOCK----- в -----END PGP PUBLIC KEY BLOCK----- включая оба.

Нажмите «Добавить ключ GPG» и введите свой пароль для подтверждения.

Затем вам нужно настроить Git для использования созданного закрытого ключа GPG для подписи ваших коммитов.

Сначала найдите полную форму идентификатора ключа, запустив:

gpg --list-secret-keys --keyid-format=long
/Users/user1/.gnupg/pubring.kbx
---------------------------------
sec  rsa4096/3AA5C34371567BD2 2022-10-12 [SC]
   29D5E24EA8EF21FD70A8F2D3B33049A4551D
uid         [ultimate] Firstname Lastname (comment) <your-email@your-provider.org>
ssb  rsa4096/4BB6D45482678BE3 2022-10-12 [E]

В этом примере идентификатор ключа 3AA5C34371567BD2.

Теперь используйте этот идентификатор ключа для настройки Git:

git config --global user.signingkey 3AA5C34371567BD2

Совет: чтобы подписать все коммиты по умолчанию, запустите:

git config --global commit.gpgsign true

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

Если вы отправите эти коммиты на GitHub, вы увидите, что они проверены с помощью вашего открытого ключа.

Все мои коммиты теперь проверены
Подтвержденные коммиты

Все мои коммиты теперь проверены

Отправка зашифрованных сообщений с помощью вашей пары ключей GPG

Шифрование сообщений

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

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

Вы также можете загрузить свой ключ на сервер открытых ключей, например pgp.mit.edu:

gpg --send-keys --keyserver pgp.mit.edu 3AA5C34371567BD2

Примечание: 3AA5C34371567BD2 является идентификатором ключа. Замените его идентификатором вашего ключа.

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

gpg --recv-keys keyid

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

gpg --encrypt --sign --armor -r receiver-email@receiver-provider.com -r sender-email@sender-provider.com name-of-file

Это создаст файл .asc, содержащий ваше зашифрованное сообщение.

Расшифровка сообщений

Чтобы расшифровать сообщение, вы можете запустить gpg, и он предложит вам при необходимости:

gpg name-of-file.asc

Это создаст новый файл с расшифрованным сообщением.

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