Как использовать GPG для шифрования и подписи сообщений

Вступление

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

В этом руководстве мы обсудим, как работает GPG и как ее реализовать. Мы будем использовать сервер Ubuntu 16.04 для этой демонстрации, но также будем включать инструкции для других дистрибутивов.

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

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

Убедитесь, что только предполагаемая сторона может читать

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

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

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

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

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

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

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

Если по какой-либо причине GPG не установлен, в * Ubuntu * и * Debian * вы можете обновить локальный индекс репо и установить его, набрав:

sudo apt-get update
sudo apt-get install gnupg

В * CentOS * вы можете установить GPG, набрав:

sudo yum install gnupg2

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

gpg --gen-key

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

  • Пожалуйста, выберите, какой тип ключа вы хотите: * (1) RSA и RSA (по умолчанию) *

  • Какой размер ключа вы хотите? * 4096 *

  • Ключ действителен для? * 1 год * (истекает через 1 год. Если вы просто тестируете, вы можете сначала создать недолговечный ключ, используя вместо этого число, например «3».)

  • Это правильно? y

  • Настоящее имя: * Ваше настоящее имя здесь *

  • Адрес электронной почты: [email protected]

  • Комментарий: * Необязательный комментарий, который будет виден в вашей подписи *

  • Изменить (N) ame, © omment, (E) mail или (O) kay / (Q) uit? O

  • Введите кодовую фразу: * Введите здесь безопасную кодовую фразу (верхний и нижний регистр, цифры, символы) *

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

Этот процесс может занять много времени в зависимости от того, насколько активна ваша система и выбранный вами размер клавиш. Для более легкой генерации дополнительной энтропии вы можете use использовать инструмент, называемый hasged. Откройте новый терминал и снова введите SSH на сервер, чтобы настроить + hasged + на вашем сервере.

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

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

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

gpg --output ~/ --gen-revoke

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

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

OutputRevocation 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 ~/

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

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

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

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

gpg --import

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

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

https://pgp.mit.edu/

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

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

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

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

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

Проверьте личность другого человека

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

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

К счастью, вместо проверки полных открытых ключей обеих сторон, вы можете просто сравнить «отпечаток», полученный из этих ключей. Это даст вам разумную уверенность в том, что вы оба используете одну и ту же информацию открытого ключа.

Вы можете получить отпечаток открытого ключа, набрав:

gpg --fingerprint
Outputpub   4096R/311B1F84 2013-10-04
     Key fingerprint =
uid                  Test User <[email protected]>
sub   4096R/8822A56A 2013-10-04

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

Подпишите их ключ

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

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

gpg --sign-key

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

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

gpg --output ~/ --export --armor

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

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

gpg --import ~/

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

Как сделать ваш публичный ключ доступным

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

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

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

gpg --output ~/ --armor --export
Output-----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. Найдите свой ключевой идентификатор, набрав:

gpg --list-keys

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

Outputpub   4096R/ 2013-10-04
uid                  Test User <[email protected]>
sub   4096R/8822A56A 2013-10-04

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

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

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

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

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

Шифровать сообщения

Вы можете зашифровать сообщения, используя флаг «–encrypt» для GPG. Основной синтаксис будет:

gpg --encrypt --sign --armor -r

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

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

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

Расшифровать сообщения

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

gpg .asc

Программное обеспечение предложит вам при необходимости.

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

Ключ обслуживания

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

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

gpg --list-keys

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

Вы можете обновить ключевую информацию, выполнив:

gpg --refresh-keys

Это будет получать новую информацию от ключевых серверов.

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

gpg --keyserver  --refresh-keys

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

Заключение

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

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

Related