GnuPG (или GPG) - шифруйте свои данные и сделайте жизнь более безопасной

Материал из Викиадмин
Перейти к навигации Перейти к поиску

GPG или GnuPG - Gnu Privacy Guard. Полностью открытый аналог PGP (Pretty Good Privacy). Распространяется под лицензией GPL. В настоящее время в наличии практически во всех репозитариях в дистрибутивах Linux. GnuPG служит для создания цифровых подписей и шифрования данных. То есть лицо, получившее от вас письмо или файл, может быть на 100% уверено, что оно не поддельное и прочитать его сможет только получатель, указанный отправителем. Таким образом, ваша почта может быть существенно более безопасной и данные сложнее будет получить злоумышленникам даже в случае полного доступа к ящику во время взлома.

Симметричное шифрование

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

gpg -c file

Система дважды запросит пароль. В итоге вы получите рядом с исходным файлом новый с разширением .gpg в конце. Например, file.gpg. Расшифровать очень просто:

gpg file.gpg

И после введения пароля вы получите свой исходный файл.

Асимметричное шифрование

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

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

gpg --gen-key

Далее система запросит: Выберите тип ключа:

(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (только для подписи)
(4) RSA (только для подписи)

Нужно выбрать ПЕРВЫЙ вариант.

Запрос системы:

ключи RSA могут иметь длину от 1024 до 4096 бит.
Какой размер ключа Вам необходим? (2048)

По умолчанию стоит 2048. Этого в настоящее время вполне хватит. Просто нажмите ENTER.

Запрос системы:

Выберите срок действия ключа.
        0 = без ограничения срока действительности
     <n>  = срок действительности n дней
     <n>w = срок действительности n недель
     <n>m = срок действительности n месяцев
     <n>y = срок действительности n лет
Ключ действителен до? (0)

В данном случае вы можете указать срок действия ключа. В качестве принятого (да и в законодательстве РФ), срок действия ключа ограничивают 1 годом. Но вы можете оставить и 0 - срок действия ключа не будет ограничен. Просто нажмите ENTER.

Запрос системы:

Для идентификации Вашего ключа необходим User ID
Программа создаст его из Вашего имени, комментария и адреса e-mail в виде:
    "Wiki Admin (pensioner) <wikiadmin@wikiadmin.net>"
Ваше настоящее имя:

Вам необходимо указать ваше полное имя, желательно латинскими символами. Например, как указано выше: Wiki Admin. Далее система запросит у вас адрес электронной почты, комментарий (что угодно можно указать тут). И после этого покажет полные введенные данные:

Вы выбрали следующий User ID:
    "Wiki Admin (pensioner) <wikiadmin@wikiadmin.net>"

Если все ок, просто нажмите латинскую “О”. Система дважды запросит у вас пароль для ключа. Советую использовать сложный, но в то же время хорошо запоминаемый вами пароль. И после этого пойдет процесс генерации ключей. Необходимо сгенерировать много случайных чисел. Желательно, что бы Вы выполняли некоторые другие действия (печать на клавиатуре, движения мыши, обращения к дискам) в процессе генерации; это даст генератору случайных чисел возможность получить лучшую энтропию. Этот процесс протекает не очень быстро, поэтому не торопитесь его прерывать, думая, что все “зависло”. Просмотр списка ключей в системе

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

gpg --list-keys

где pub - публичный ключ, sub - секретный.

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

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

gpg --output wikiadmin@wikiadmin.net.asc --armor --export 111111

Где вместо wikiadmin@wikiadmin.net.asc укажите свою почту и добавьте расширение asc. (В принципе, вы можете назвать файл 1.txt, но если вы кому-то его пошлете, он может быть потерян, перепутан с другими файлами и т.д. Назвав же таким образом, получателю будет ясно, что это ключ (asc) для зашифрованных писем от wikiadmin@wikiadmin.net). В качестве 111111 идут символы после слова pub в списке ключей (Например, “pub 2048R/F22D3246” - вам нужно указать только “F22D3246” - это и есть ID вашего открытого ключа.) Хотя в качестве ID вы так же можете указать свой e-mail или имя, но не всегда это может быть хорошей идеей.

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

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

где 111111 - идентификатор ключа, pgp.mit.edu - рекомендуемый сервер ключей. Как получить ключ корреспондента с сервера - чуть ниже… Импорт открытого ключа другой стороны и доверие к нему

Все, ключи сгенерированы, открытый ключ лежит в ожидании отправки нужным корреспондентам. Но вам нужно не только отправить свой ключ, но и получить ключ того, с кем вы будете вести приватную переписку. Достаточно для этого просто получить файл (например aleksdem@aleksdem.com.asc) и импортировать его командой:

gpg --import aleksdem@aleksdem.com.asc

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

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

где 111111 - идентификатор или (что проще) email корреспондента.

Но, чтобы пользоваться ключoм, вам ещё специфически надо указать, что вы доверяете владельцу этого ключа. Найдите ключ, который вы импортировали (gpg –list-keys). Дальше наберите gpg –edit-key aleksdem@aleksdem.com (используйте имя владельца, или идентификатор ключа). Откроется ком. строка, куда вам нужно набрать слово “trust” и нажмите ENTER. Далее, вам нужно из предлагаемого списка выбрать “5 = I trust ultimately”, написав 5 Enter . Потом команда quit, чтобы выйти. Вот теперь уже импортированным ключом можно пользоваться. Перенос ключей

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

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

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

Создание копии открытого ключа

Выведите список ключей при помощи команды:

$gpg --list-keys

Часть строки после pub 2048R/ является идентификатором открытого ключа. Экспорт открытого ключа можно выполнить при помощи команды:

$gpg --armor --output mail@example.com.asc --export идентификатор

Создание копии секретного ключа

Выведите список секретных ключей при помощи команды:

$gpg --list-secret-keys

Часть строки после sec 2048R/ является идентификатором закрытого ключа. Экспорт закрытого ключа можно выполнить при помощи команды:

$gpg --armor --output mail@example.com.key --export-secret-keys идентификатор

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

Восстановление ключей осуществляется путём их импорта при помощи команд:

$gpg --import mail@example.com.asc
$gpg --import mail@example.com.key

Отправка зашифрованного сообщения из консоли Linux с помощью mail

Это делается так:

echo "Ваше сообщение" | gpg -e -a -r почта@получателя.com |mail -s "тема" почта@получателя.com

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