Шифрование и подпись сообщений с помощью GPG

GPG (GNU Privacy Guard) – это свободное средство для шифрования данных. GPG обеспечивает безопасную передачу информации и может подтвердить подлинность источника сообщения.

Это руководство расскажет, как работает и как реализовывается GPG.

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

Как работает шифрование на открытых ключах

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

Ограничение доступа к сообщению

В некоторых случаях право на чтение сообщения должно быть только у получателя (особенно если сообщения содержат конфиденциальные данные).

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

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

Подтверждение подлинности отправителя

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

 Настройка GPG-ключей

В большинстве дистрибутивов GPG устанавливается по умолчанию.

Если это не так, установите GPG самостоятельно. В Ubuntu и Debian введите:

sudo apt-get update
sudo apt-get install gnupg

В CentOS нужно ввести:

sudo yum install gnupg2

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

gpg --gen-key

Команда задаст ряд вопросов.

Please select what kind of key you want: (1) RSA and RSA (по умолчанию)
What keysize do you want? 4096
Key is valid for? 1y (Срок действия истекает через 1 год. Для тестирования достаточно создать ключ с коротким сроком действия; для этого просто укажите число.)
Is this correct? y
Real name: имя
Email address: your_email@address.com
Comment: Дополнительный комментарий, который будет отображаться в подписи
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
Enter passphrase: Введите надежную парольную фразу (верхний и нижний регистр, цифры, символы).

После этого gpg сгенерирует ключи с помощью энтропии. Энтропия – это уровень непредсказуемости и неопределенности, которая существует в системе. GPG использует энтропию для создания безопасного набора ключей.

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

Читайте также: Использование простого демона энтропии Haveged

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

Также нужно предусмотреть способ отзыва пары ключей (он пригодится в случае потери закрытого ключа). GPG позволяет быстро создать такой сертификат.

Это нужно сделать сразу после генерирования пары ключей. Сгенерируйте сертификат отзыва заранее и храните его в надежном месте (учтите, что компьютер может подвергнуться атаке или просто сломаться).

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

gpg --output ~/revocation.crt --gen-revoke your_email@address.com

Программа предложит подтвердить создание сертификата отзыва, а затем спросит, по какой причине нужно отозвать ключи. Эта информация будет видна другим пользователям. Вы можете выбрать любой из доступных вариантов (но он не будет точным, поскольку это делается заранее).

Примечание: Многие рекомендуют создать сертификат отзыва для каждого из вероятных сценариев.

После этого будет предложено добавить комментарий и подтвердить действия. Чтобы создать сертификат отзыва, нужно ввести свою парольную фразу GPG. Сертификат отзыва будет записан в файл, указанный с помощью флага —output (в данном случае в revocation.crt).

Revocation certificate created.
Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable.  But have some caution:  The print system of
your machine might store the data and make it available to others!
Сразу ограничьте доступ к файлу сертификата:
chmod 600 ~/revocation.crt

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

Импорт открытых ключей других пользователей

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

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

gpg --import name_of_pub_key_file

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

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

https://pgp.mit.edu/

Также поиск можно выполнять с помощью GPG.

gpg --keyserver pgp.mit.edu  --search-keys search_parameters

Проверка и подпись ключа

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

Подтверждение личности пользователей

Как понять, что человек, дающий вам открытый ключ, действительно является тем, за кого себя выдает? Если вы знакомы с человеком лично, это вообще не проблема: вы можете обменяться файлами при встрече.

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

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

Чтобы получить отпечаток ключа, введите:

gpg --fingerprint your_email@address.com
pub   4096R/311B1F84 2013-10-04
Key fingerprint = CB9E C70F 2421 AF06 7D72  F980 8287 6A15 311B 1F84
uid                  Test User <test.user@address.com>
sub   4096R/8822A56A 2013-10-04

Полученное значение можно сравнить с самим пользователем или же с кем-то, кто имеет доступ к его серверу.

Подпись ключа

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

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

gpg --sign-key email@example.com

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

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

gpg --output ~/signed.key --export --armor email@example.com

Теперь нужно снова ввести парольную фразу. После этого подписанный открытый ключ  будет выведен на экране. Отправьте его владельцу, чтобы он мог использовать эту «печать одобрения» при общении с другими пользователями.

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

gpg --import ~/signed.key

Доступность открытого ключа

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

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

Чтобы отправить кому-либо открытый ключ, запросите его в GPG:

gpg --output ~/mygpg.key --armor --export your_email@address.com
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (GNU/Linux)
mQINBFJPCuABEACiog/sInjg0O2SqgmG1T8n9FroSTdN74uGsRMHHAOuAmGLsTse
9oxeLQpN+r75Ko39RVE88dRcW710fPY0+fjSXBKhpN+raRMUKJp4AX9BJd00YA/4
EpD+8cDK4DuLlLdn1x0q41VUsznXrnMpQedRmAL9f9bL6pbLTJhaKeorTokTvdn6
5VT3pb2o+jr6NETaUxd99ZG/osPar9tNThVLIIzG1nDabcTFbMB+w7wOJuhXyTLQ
JBU9xmavTM71PfV6Pkh4j1pfWImXc1D8dS+jcvKeXInBfm2XZsfOCesk12YnK3Nc
u1Xe1lxzSt7Cegum4S/YuxmYoh462oGZ7FA4Cr2lvAPVpO9zmgQ8JITXiqYg2wB3
. . .

Затем можно скопировать и вставить его в текстовый файл или отправить его любым другим удобным способом.

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

Также это можно сделать через интерфейс GPG. Чтобы узнать ID своего ключа, введите:

gpg --list-keys your_email@address.com

Выделенная часть в выводе – это ID ключа. Это короткий путь сослать ключ на внутреннее программное обеспечение.

pub   4096R/311B1F84 2013-10-04
uid                  Test User <test.user@address.com>
sub   4096R/8822A56A 2013-10-04

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

gpg --send-keys --keyserver pgp.mit.edu key_id

Шифрование и дешифровка сообщений при помощи GPG

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

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

Для шифрования сообщений используется флаг —encrypt. Базовый синтаксис выглядит так:

gpg --encrypt --sign --armor -r person@email.com name_of_file

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

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

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

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

Получив сообщение, просто вызовите GPG на файл сообщения:

gpg file_name.asc

В случае необходимости программа запросит пароль.

Если сообщение имеет вид чистого текста, то его можно скопировать и вставить, перед этим набрав gpg безо всяких аргументов. Можно нажать «CTRL-D», чтобы обозначить конец сообщения, и GPG расшифрует его.

Поддержка ключей

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

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

gpg --list-keys

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

Обновить информацию о ключах можно с помощью команды:

gpg --refresh-keys

Эта команда извлекает новую информацию о ключах с серверов ключей.

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

gpg --refresh-keys

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

Заключение

Правильное использование GPG обезопасит переписку. Это очень полезно как при работе с конфиденциальной информацией, так и в обыденной переписке.

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

Tags: ,