GnuPg: Полная замена PGP! - Шифруемся по-максимуму!

Stalsen

Xakep, номер #050, стр. 068-071

stalsen@mail.ru, www.trinux.ru

Следят за нами или нет – вопрос, по большей части, риторический. Сколько людей - столько и мнений. Но ответ всегда один: "Быть параноиком - полезно!", в нашем случае это можно переформулировать так: “Шифроваться нужно!”, хотя бы от вездесущих админов ;). Так что хватит использовать коммерческий PGP (да, его уже купили...), пора переходить на GnuPg. GNU Generation!

WHO is WHO?

GnuPG – это, бесспорно, полная замена коммерческому PGP, и хотя он не поддерживает запатентованных алгоритмов (например, IDEA), тем не менее, распостраняется абсолютно свободно на условиях GNU GPL. Вклад в его развитие может внести любой человек, умеющий кодить, более того, можно развивать свою версию GPG! Как ты уже знаешь, PGP давно куплен NA, и вдобавок ко всему прочему относительно недавно этот проект вообще решили закрыть. Поэтому предлагаю не теряя времени перейти на GNU, который, в отличие от PGP, имеет все шансы на успешное развитие.

Let’s Go!

Во-первых, надо скачать эту тулзу по адресу www.gnupg.org (русская версия сайта тоже есть). На момент написания статьи последней версией была 1.0.7. После скачивания следует распаковать архив:

# tar -zxvf gpg-version.tar.gz

Далее выполняем ./configure:

# cd gpg-version
#./configure

И устанавливаем:

# make; make install

Все, теперь gpg установлен на твоем компе.

Генерация Пары

Давай запустим gpg –help Как видишь, опций множество, обо всех и не расскажешь. Так что перейдем к основным "обывательским" опциям. Для начала надо сгенерировать свою пару ключей. Уверен, найдутся товарищи, которые спросят: “А что это такое?” Поясняю: два ключа, открытый и закрытый - первый ты раздаешь всем, а другой хранишь в тайне. Далее отправитель шифрует текст твоим открытым ключом, посылает тебе, а ты его расшифровываешь закрытым. Если ты хочешь узнать побольше о криптографии и криптоанализе, советую зайти на www.cryptography.ru.

Генерируем:

#gpg --gen-key
gpg (GnuPG) 1.0.7; Copyright © 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
Please select what kind of key you want:
(1) DSA and ElGamal (default)
(2) DSA (sign only)
(4) ElGamal (sign and encrypt)
(5) RSA (sign only)

Ты используешь прогу на свой страх и риск - это стандартное условие GPL. Вот, например, тебя просят ввести алгоритм генерации. Не углубляясь в описание алгоритмов, скажу лишь, что sign - подпись, точнее алгоритм для создания

подписи, encrypt - шифрование. Известно, что при выборе ElGamal возможны проблемы совместимости с другими версиями OpenPGP (за более полной информацией обращайся к RUSSIAN GPG HOWTO, там все подробно описано).

Итак, я выбрал RSA (что и тебе советую) - так как это довольно авторитетный алгоритм. Но спешу предупредить, он предназначен только для подписи, следовательно, ты должен будешь еще создать подключ для шифрования/дешифрования. Если не хочешь возиться, выбирай 3 (ElGamal). Далее следует указать размер ключа. Хочу заметить, что от него многое зависит - чем больше ключ, тем выше его криптостойкость, но ниже производительность... Выбирай сам, что имеет для тебя больший приоритет.

Your selection? [По твоему усмотрению]
What keysize do you want? (1024) [Введи размер влюча]
Requested keysize is 2048 bits
Please specify how long the key should be valid.

Далее надо определить период "устаревания" ключа:

0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0
Is this correct (y/n)? y

А здесь следует ввести некоторую информацию о себе:

You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
Real name: test_for_Xakep
Email address: test_for_xakep@real.xakep.ru
Comment: Test for Xakep Mail Box
You selected this USER-ID:
"test_for_Xakep (Test for Xakep Mail Box) <test_for_xakep@real.xakep.ru>"
Change (N)ame, © omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.

Пароль для безопасности твоих ключей:

Enter passphrase: [Введи пароль]
Repeat passphrase: [Повтори пароль]
We need to generate a lot of random bytes.

Подвигай немного мышкой - и все, случайная (или псевдослучайная, спорить не будем) последовательность сгенерирована!

Раздача

Все, теперь надо позаботиться о распространении своего открытого ключа (повторяю - открытого, смотри, не перепутай) знакомым и друзьям. Можно разместить его на своем сайте, можно разослать друзьям, это твое дело. Мы поговорим о том, как "выудить" свой ключ из GPG. Для этого создана команда --export. Получить ключ можно в двух форматах: в ASCII (Американский Стандартный код Обмена Информацией, в общем, обычный текстовый) и в двоичном.

В двоичном формате:

# gpg --export user_id --output open_key.gpg

В текстовом:

gpg --armor --export Stalsen > openkeyMY.txt

В первом методе открытый ключ сохраняется в файле open_key.gpg, а во втором в openkeyMY.txt. Итак, ты его импортировал и разослал всем, и через пару дней тебе приходит письмо с открытым ключом твоего друга, который уже давно пользуется GPG. Что с ним делать? Во-первых, его (ключ, а не друга ;)) надо добавить к твоей связке:

# gpg --import your_friend.asc

Но откуда мы знаем, что письмо-ключ послал именно твой друг? Ведь адрес отправителя легко подделать! Тут нам поможет отпечаток ключа:

# gpg --fingerprint
pub 2048R/1E23DDE5 2002-07-05 test <test@test>
Key fingerprint = A16B AC62 5A82 S3E4 BADD 4298 95FE B6D7 5E59 DDE0

После поля Key fingerprint и идет отпечаток. Теперь тебе надо связаться со своим другом и подтвердить Key Fingerprint. После того, как ты убедился в подлинности сообщения, тебе недо подписать этот ключ:

# gpg --edit-key friend@mail
gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/2
pub 3008R/607F3BDB created: 2002-07-05 expires: never trust: u/u
(1). friend <friendA@mail>
Command> [вводи sign]
How carefully have you verified the key you are about to sign actually belongs
to the person named above? If you don't know what to answer, enter "0".
(0) I will not answer. (default)
(1) I have not checked at all.
(2) I have done casual checking.
(3) I have done very careful checking.
Your selection? [вводи, что хочешь]
Are you really sure that you want to sign this key
with your key: "Stalsen <friend@mail>"
Really sign? [вводи yes]

Все, теперь ключ твоего друга подписан.

You Have Mail! and Please Send Your Mail!

Проходит еще два дня, и тебе приходит зашифрованное твоим открытым ключом сообщение. Как его расшифровать? Все очень просто, есть несколько вариантов. Во многих мылерах (например KMail или Mutt) уже встроена поддержка GPG (а для других можно скачать дополнения и патчи). Но в любом случае расшифровать сообщения можно следующей командой:

# gpg --output plain_text.txt --decrypt crypt_message.gpg

Далее тебя спросят твой пароль (ты указывал его при генерации). Это, кстати, еще одна линия защиты. После этого у тебя появится файл под названием plain_text.txt, который и будет являться расшифровкой crypt_message.gpg. Сообщение мы расшифровали, прочитали, и теперь надо отправить ответ. То есть нужно зашифровать это сообщение открытым ключом вашего друга. Это можно сделать командой:

# gpg --output your_message.gpg --encrypt
gpg: please see http://www.gnupg.org/faq.html for more information
You did not specify a user ID. (you may use "-r")
Enter the user ID. End with an empty line: [Введи user_id]

Хочу пояснить: чтобы послать сообщение своему другу, ты должен иметь его открытый ключ и добавить его в свою цепочку. User_id - идентификатор ключа, например stalsen.

Также можно это сделать командой:

# gpg --output your_message.gpg --encrypt --recipient stalsen@mail.ru message.txt

Опция --recipient как раз указывает user id (то есть идентификатор открытого ключа), следовательно, файл message.txt будет зашифрован открытом ключом stalsen и сохранен в файле your_nessage.gpg. Затем тебе следует следует просто отправить этот файл по почте. А получатель расшифрует сообщение своим закрытым ключом, а потом направит тебе новое сообщение, уже зашифрованное твоим открытым ключом, и так до бесконечности. Надеюсь, я тебя не слишком утомил? Выпей пивка, расслабься, и поехали дальше.

GPA - cтандарт де-факто!

Конечно GPG - штука хорошая, но очень уж неудобная (поначалу, естественно). Нет, конечно, очень хорошо пользваться командной строкой gpg, если ее знаешь. А что делать новичкам? Да и кому не хочется удобства! Вот для этого и создан GUI для GPG. Пока стандартов в этом направлении нет, на рынке (если можно так сказать) плавает множество средств (есть и для KDE, и для GNOME), но самый продивинутый - GPA (скачать можно на www.gnupg.org/gpa.html). Весит он совсем немного (415Кб), но, естественно, требует уже установленного GPG. А теперь пора перейти к инсталлу GPA:

# ./configure; make; make install

Срузу говорю, для установки требуется GTK (Gimp Tool Kit) и если у тебя не возникло никаких ошибок, то вводи:

# gpa

Он сразу предложит сгенерировать твою пару ключей (если ее еще нет):

Далее все идет по порядку, спросят твой e-mail, комментарий, пароль, создать резервную копию - и все, ключ создан, быстро и просто.

Чтобы импортировать или экспортировать ключи предусмотрены две удобные кнопки (Import/Export, соответственно). Хочется заметить, что экспортировать ключ можно не только в файл, но и на специальный key server. Есть возможность изменять некоторые параметры ключа (Edit), можно его удалять (Remove), либо подписывать (Sign). Очень простая шифровка/расшифровка/подпись данных.

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

Содержание
ttfb: 3.6911964416504 ms