Эта статья ориентирована на начинающих - здесь не будет затрагиваться принцип работы GPG, алгоритмы, которые в нем используются и прочее.
Теория
Ситуация. Олег хочет отправить информацию Николаю, но между ними расстояние несколько тысяч километров и есть только незащищенный способ связи - публичный чат с большим количеством людей.
Можно подумать, что нужно использовать обычное симметричное шифрование (а-ля сейф с ключом) - но нет. Оно подразумевает передачу секретного (приватного) ключа получателю - что не подходит для нашего случая.
Для таких случаев изобрели асимметричное шифрование. В нем есть уже 2 ключа - приватный и публичный. Название второго говорит само за себя - его можно раздавать каждому встречному1. Почему? Публичный ключ - может только зашифровать информацию, но не расшифровать её. Приватный же, может и зашифровывать, и расшифровывать информацию.
На практике это можно представить так2: У участника A есть личный замок и ключ от него. Если участник А хочет получить секретную посылку от участника Б, то он публично передаёт ему свой замок. Участник Б защёлкивает замок на секретной посылке и отправляет её участнику А. Получив посылку, участник А открывает ключом замок и получает посылку.
GPG - свободная бесплатная программа для шифрования и подписывания файлов и текстовых сообщений, реализация OpenPGP, который в свою очередь “реализация” ассиметричного шифрования.
Итак, вернёмся к нашим баранам челам.
Алгоритм обмена зашифровки и обмена информацией с GPG:
- Олег просит Николая создать ключи
- Николай генерирует приватный и публичный ключи
- Николай отправляет публичный ключ Олегу
- Олег зашифровывает информацию публичным ключом Николая
- Олег отправляет зашифрованную информацию Николаю через публичный чат
- Николай расшифровывает информацию приватным ключом
Но тут появился глупый злоумышленник, не знающий как работает GPG, и попытался расшифровать сообщение публичным ключом. Но у него ничего не получится - публичный ключ может только зашифровывать, но не расшифровывать.
Краткая практика
Для практики будем использовать Windows 10+ и GPG4Win.
Не волнуйтесь - во всех программах для работы с OpenPGP всё выглядит и работает примерно одинаково
GPG4Win - это “пакет” софта, включающий в себя сам GPG, а также плагин для Outlook и удобный графический интерфейс Kleopatra.
Допустим, ваш друг хочет отправить вам какую-либо информацию.
Скачиваем GPG4Win с официального сайта и устанавливаем (с этим не должно быть никаких проблем) на свой компьютер и компьютер друга.
Для начала, вам нужно создать пару ключей OpenPGP (приватный + публичный):
Запускаем “Файл => Новая пара OpenPGP ключей”
Вводим имя и по желанию E-Mail:
Нажимаем “Дополнительные параметры”
Если хотим, можем указать здесь дату прихода в негодность ключа (1), его функционал (2) и тип (3). Кратко про типы ключей -
RSA
самый популярный и везде поддерживается, аECDSA/EdDSA
самый надежный:Теперь нажимаем
OK
:
Готово:

Далее, нужно экспортировать публичный ключ в файл:

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

Теперь ваш друг может зашифровать файл или текст. Файл проще всего зашифровать, нажав ПКМ по файлу в Проводнике:

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

В папке с файлом появляется его зашифрованная копия:

С примерно следующим содержимым:
-----BEGIN PGP MESSAGE-----
hF4DzgN7xgit3/4SAQdACj8ebo85FR9Sv4vnwNxD4p2AkFgKHqQl5/MlDDUnxRkwRRz/82b2xb7QozIZBR+kX0upF03U7drwswZoVDZr+EWr1pXHDsT5r+0osb2e5WwL1MBBAQkCEBnJEBwq65YTxv04sMZIg81jntbEvbuq+op0PlH2wBxQShvaa/MKPq5aQ+AC1uqpXZvwACwjorU8SFtCVc+gL/WLijJeduQWSr4EXq539sBjAAH0talZZWT4PNLpzcLgIyG4JAZX1X8eQ9ypHgA9f5ioLQOmhSpbVpvBxx2lMYvhSMT8SEy/oDGjfwPLz1vrWiEOZH4iNO4tRfdVwWSlQipqKh4Q7wn4Qu9b15hX3twulT7/DHXB54hWlTJe7se/lIQD1CF428zBhPap2NnHenFIEXNjU2HynDY/oCWk8Xjre/9mKOgpAvZNhRjUZ5gjTS9PFC2lRzE6eAOxTF4==1dcC-----END PGP MESSAGE-----
Затем ваш друг отправляет этот зашифрованный файлик вам. Теперь вам нужно его расшифровать. Проще всего это можно сделать просто открыв файл через проводник, либо нажав ПКМ и выбрав “Проверить/Расшифровать” и затем нажав “Сохранить всё”:

Также в Kleopatra существует “Блокнот” - раздел позволяющий зашифровывать и расшифровывать текстовые сообщения без файлов.
Здесь есть вкладка “Получатели:

И вкладка с текстовым полем:

Если ввести в это поле сообщение и нажать “Зашифровать”, сообщение заменится своей зашифрованной версией:

Если же в это поле вставить такое зашифрованное сообщение и нажать “Расшифровать”, сообщение (как неожиданно xD) расшифруется:

Вот в принципе и все. Главное не забывайте:
- НЕ ДАВАЙТЕ НИКОМУ ПРИВАТНЫЙ КЛЮЧ!
- Можете раскидываться публичными ключами как хотите
- Можете посылать ЗАШИФРОВАННОЕ сообщение по любым незащищенным каналам связи
Если что-то не понятно или хотите побольше узнать про все вот это вот ваше это все, можете посмотреть здесь:
Дополнительные источники
- (SingleFile) Proglib - ”🕵 GPG и все-все-все: настраиваем шифрование переписки за 10 минут по методу Кристофера Робина”
- (SingleFile) Habr - “Kleopatra: GnuPG в графической оболочке”
- (SingleFile) Habr - “Используем GPG для шифрования сообщений и файлов”
- (SingleFile) Как пользоваться gpg: шифрование, расшифровка файлов и сообщений, подпись файлов и проверка подписи, управление ключами