LXF117:GPG

Материал из Linuxformat.

Перейти к: навигация, поиск

Содержание

А вы умеете хранить секреты?

Майанк Шарма представляет GNU Privacy Guard для работы с шифрованной перепиской между доверенными лицами. ФСБ, вам на заметку!

Благодаря приложениям типа GNU Privacy Guard (GnuPG), методы шифрования, применявшиеся раньше только самыми секретными правительственными учреждениями, теперь стали доступны всем.

По многим параметрам GnuPG выходит за рамки простой реализации нашумевшего приложения Pretty Good Privacy (PGP) Фила Циммерманна [Phil Zimmermann], да и превосходит любую другую криптографическую программу. GnuPG умеет проверять целостность почтовых сообщений, подтверждать личность отправителя и хранить содержимое в тайне от чужих глаз, не прибегая к патентованным алгоритмам шифрования.

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

GnuPG доступен в виде заурядного tar-архива, он легко устанавливается через ./configure, make и make install (последнее, как обычно, из-под root), без причитаний о нехватке зависимостей. Но программу вроде GnuPG можно даже просто взять из репозитория любимого дистрибутива: разработчики популярных систем вовсю используют GnuPG, так что это на редкость распространенное приложение. С точки зрения размера оно сравнимо с чихуахуа, и скачать его можно хоть через слабенькое телефонное соединение.

Однако прежде чем идти на страницу загрузки или запускать менеджер пакетов, откройте терминал и введите which gpg или which gpg2. Так вы узнаете, установлен ли на вашей машине GnuPG (или его более современная ипостась GnuPG 2), и если да, то где именно.

Ключ от квартиры

Главное в GnuPG – это ключи, так что напрягите мозги, до того как браться за гуж. Традиционная криптография обеспечивает секретность посредством общего секретного ключа, который нужно иметь для расшифровки сообщения. В старых фильмах о войне передачей ключа занимался бакалейщик; шифр прятался на внутренней стороне бутылочных этикеток. Звучит-то оно романтично, но в реальной жизни не годится, особенно если шифрованное сообщение поступает с другого конца планеты.

Более практичный подход – иметь вместо одного секретного ключа набор открытых (public) и закрытых (private) ключей. Открытые ключи доступны всем, а закрытые держатся в тайне. По сути, при такой системе (известной как асимметричная криптография) у каждого есть свой собственный секретный закрытый ключ и открытые ключи ото всех.

Итак, М.Малкин, посылая сообщение Васе Залкинду, шифрует сообщение, используя Васин открытый ключ. Даже если А.Чалкин перехватит сообщение, проку от этого будет мало, поскольку расшифровка сообщения удастся только Залкинду, с его закрытым ключом. Можнопойти даже дальше. С помощью GnuPG М.Малкин еще и подпишет сообщение своим закрытым ключом, гарантируя Залкинду, что письмо именно от М.Малкина.

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

Дайте два ключа, без соуса

Пора покувыркаться в командной строке. Откройте консоль и запустите процесс генерации ключей с помощью gpg --gen-key. Вас попросят указать: тип нужного вам ключа, его размер, срок действия, ваше имя и адрес электронной почты, а также необязательные комментарии о ключе. Для многих из этих параметров подойдут значения по умолчанию, но имя и e-mail лучше все же ввести свои собственные.

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

Так как GnuPG питается невинными стохастическими байтами, на время генерации ключа его надо ими подкормить. В старые добрые времена для этого было достаточно запуска OpenOffice.org или Firefox с 15 вкладками по умолчанию. Сейчас, в эпоху двухъядерных процессоров, для получения должной энтропии придется выполнить кодирование видео одновременно с компиляцией приложения на виртуальной машине.

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

Порядок в хаосе

Вы не поверите, но в случайной подборке символов, что GnuPG называет ключом, имеется подобие структуры. Введите в консоли gpg --list-keys, и на выходе будет нечто вроде следующего:

Скорая помощь

GnuPG 2 – это более новая модульная версия GnuPG для пользователей настольных систем. Она развивалась параллельно более старой ветке GnuPG 1.x. Команды данной статьи пригодны для обеих версий.

/home/bodhi/.gnupg/pubring.gpg
------------------------------
pub 1024D/CFEA026E 2009-01-18 [expires: 2009-02-08]
uid
Mayank Sharma (For locking documents and other files)
<geekybodhi@gmail.com>
sub 1024g/4CC088D2 2009-01-18 [expires: 2009-02-08]

Первая строка – это полный путь к связке ваших открытых ключей, изобретательно названной pubring.gpg. У вас есть еще одна связка, с секретными ключами, под названием secring.gpg, и эти ключи можно увидеть, введя gpg --list-secret-keys. Поскольку у вас пока есть только собственный ключ, содержимое pubring.gpg и secring.gpg одинаково. Они будут идентичными, пока вы не импортируете чей-нибудь открытый ключ в свою открытую связку.

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

Но самая главная – третья строка. pub означает открытый ключ; 1024D – число битов в нем; CFEA026E – уникальный ID ключа, за которым идут дата создания и дата истечения срока действия ключа. Четвертая строка – ID пользователя, там стоит ваше имя, адрес электронной почты и комментарий, указанный при создании ключа. Последняя строка – «подключ» (sub key); сведения о нем имеют тот же формат, что и в pub-блоке.

Все ключи снабжены также и «отпечатком» (fingerprint). Чтобы увидеть свой, введите gpg --fingerprint; появится примерно то же, что и при выполнении gpg --list-keys, но с дополнительной строкой про отпечаток вроде такой:

Key fingerprint = A3E7 007A 6277 77BB 2A4B 61A7 1ED7 562B CFEA 026E

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

Загрузка ключей

Чтобы суметь послать вам зашифрованные файлы, вашим сообщникам нужен ваш публичный ключ, так что передайте его «публике». Если вы входите в небольшой тайный клуб злодеев (или, скорее, в малую группу без порочащих связей), экспортируйте ключ в файл и разошлите его коллегам почтой. Хранение ключа в текстовом файле может пригодиться еще и для резервного копирования. Команда gpg --armor --export 86D68524 --output 7of9.asc сохранит открытый ключ с ID ключа 86D68524 в файл 7of9.asc, который теперь можно переслать всем членам вашего коллектива.

Однако самый популярный способ делиться публичными ключами состоит в использовании сервера публичных ключей. Таких серверов существует море, и они периодически синхронизируются друг с другом, поэтому на самом деле неважно, какой выбрать. Я взял сервер MIT PGP и послал туда свои ключи командой gpg --keyserver=x-hkp://pgp.mit.edu --send-keys 86D68524. Можно также использовать web-интерфейс на http://pgp.mit.edu, чтобы вставить ваш PGP-ключ, экспортированный опцией --armor.

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

Как и в случае экспорта ключа, вы можете попросить ваших коллег прислать вам их публичные ключи. Когда они это сделают, импортируйте их командой gpg --import key.asc (подразумевая, что ключ сохранен в файле key.asc).

Другая популярная возможность – пошарить на сервере публичных ключей и извлечь ключи оттуда. Если вы ищете своего друга Хью Барроуза [Hu Burrows], команда gpg --keyserver=x-hkp://pgp.mit.edu --search-keys Hu Burrows сделает запрос на сервер MIT PGP на все ключи, содержащие в своих ID Хью Барроуза, и выведет в ответ список:

gpg: searching for “Hu Burrows” from hkp server pgp.mit.edu
(1)        Hu Burrows <hu.me@gmail.com>
           1024 bit DSA key 89D62524, created: 2009-01-16
(2)        Hu Burrows <hu_stays@greenfields.com>
           1024 bit DSA key E0B08B2D, created: 2008-07-05
Enter number(s), N)ext, or Q)uit >

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

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

Скорая помощь

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

На Linux-конференции или собрании местной LUG вы могли приметить, как толпы хакеров носятся взад-вперед, размахивая подписанными листами бумаги со всякой напечатанной ерундой. Они были так поглощены этим занятием, а вам так не терпелось дорваться до халявного пива, что вы не спросили о причине ажиотажа. А это была афера на марше – они выцарапывали у коллег подписи к их ключам.

На бумаге был ID их ключа, его отпечаток и личная подпись от руки. Чтобы Г. Уру [G. Uru] подписал ей ключи, Раки [Ruckie] показала ему свой лист. Затем Г. Уру импортирует ключи Раки с сервера публичных ключей, проверяет отпечаток и UID и подписывает их командой gpg --edit-key rukie@allthisstuff.net.

Подписав ключ, Г. Уру должен отправить его назад на публичный сервер, примерно так же, как до этого отправлял туда свой собственный ключ. В следующий раз, когда другой пользователь скачает ключи Раки, он сможет увидеть все подписи на этом ключе, используя gpg --list-sigs rukie@allthisstuff.net, при этом вывод будет похож вот на что:

pub 1024D/FBD7E879 2009-01-18
uid        Ruckie <rukie@allthisstuff.net>
sig 3      FBD7E879 2009-01-18 Ruckie <rukie@allthisstuff.net>
sig        CFEA026E 2009-01-18 G. Uru (For patches and releases)
<g.uru@gmail.com>
sub 1024g/7004C897 2009-01-18
sig        FBD7E879 2009-01-18 Ruckie <rukie@allthisstuff.net>

Но зачем людям эта морока с подписанными ключами? Все потому, что очень легко подделать вашу личность: создать от вашего имени ключи и послать их людям, которые вам доверяют. А вот если ваши настоящие ключи были подписаны общими друзьями, ваши респонденты мигом распознают подделку.

Обменявшись публичными ключами, мы готовы к преобразованию простого текста в сложную абракадабру. Команда gpg --encrypt --recipient ‘hu_stays@greenfields.com’ Ten_Places_to_chew.pdf зашифрует указанный файл PDF с помощью ключа нашего друга Хью [Hu Burrows]. Команда автоматически создаст двоичный файл под названием Ten_Places_to_chew.pdf.gpg. Если снабдить ее опцией --armor, получится файл с именем Ten_Places_to_chew.pdf.asc, который в текстовом редакторе-то откроется, но отобразит вереницу случайных букв и цифр.

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

Сезам, расшифруй!

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

Хью Барроуз получил ваш файл и прислал ответ. Для вашего почтового клиента он полная бредятина. Вам и раньше присылали хлам, но сейчас дело другое: шифрование – это сила! Скачайте прикрепление, откройте консоль и введите gpg --output foo.txt --decrypt foo.txt.asc. GnuPG распознает ваш публичный ключ, найдет в связке соответствующий закрытый ключ и спросит у вас парольную фразу. Если она подходит, он расшифровывает файл.

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

Подпись неразборчива

Всегда шифровать все свои сообщения не обязательно. Иногда небольшой сигнал вида «Привет! Это от меня. Подтверди.» – это все, что доктор прописал. Если Блек Одер [Blac Oder] хочет послать подписанный текстовый файл под названием leaks.txt Мелу Чату [Mel Chat], он введет gpg --clearsign leaks.txt, который создаст leaks.txt.asc, примерно такого вида:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Security isn’t a dirty word.
Leak is a positively disgusting word.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
iEYEARECAAYFAkl04owACgkQHtdWK8/qAm5Y/
gCgm60r81lkxqod6LN5JiNZijCt
9/EAnAsZk06HT+G89bP8RNI9cqkepq3y
=/lmK
-----END PGP SIGNATURE-----

Чтобы удостоверить подпись, Мел Чат вводит gpg --verify leaks.txt.asc и получает нечто вроде

gpg: Signature made Tuesday 20 January 2009 01:59:00 AM
IST using DSA key ID �REA026E
gpg: Good signature from “Blac Oder <blac-oder@goodlaugh.net>”

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

При создании сертификата отмены командой gpg --gen-revoke 86D68524, GnuPG запросит у вас причину отмены, потом необязательный комментарий и, наконец, парольную фразу. Сохраните ваш сертификат отмены где-нибудь в безопасном месте. Когда вам понадобится его использовать, просто импортируйте сертификат в вашу связку и затем пошлите ключ на сервер еще раз, чтобы аннулировать его.

Время GUI

Использовать GnuPG для web-почты в Firefox и IM-клиентах Jabber/XMPP, соответственно, позволят программы FireGPG и Psi.

Как любое приложение Linux, GnuPG живет и дышит в командной строке. Однако его легко приспособить под GUI, и он вполне поладит и с мышью. Графический интерфейс для GPG – это GPA (GNU Privacy Assistant). Он пока в состоянии бета-релиза, однако полностью функционален и отлично работает. Опять-таки, у вас есть возможность либо скомпилировать его из исходных текстов, либо добыть из репозитория вашего дистрибутива; мы рекомендуем последнее.

Также существуют интерфейсы для Gnome (Seahorse) и KDE (KGPG). Самое лучшее в этих трех программах то, что все они без малейших проблем уживаются и вместе, и с командной строкой. Можно создавать ключи в GPA, импортировать публичные ключи в Seahorse, а подписывать и загружать их через KGPG.

Большая удача также и то, что все три имеют схожие функции: они создают ключи и управляют ими, публикуют их и запрашивают с серверов, шифруют, дешифруют, подписывают, проверяют файлы и прочее. Единственное место, где KGPG и Seahorse дают фору GPA – это интеграция с рабочим столом. В KDE и Gnome они выскакивают в файловых менеджерах, показываются в текстовых редакторах и занимают свое место в контекстных меню правой кнопки мыши.

На сегодня мы зашифровали и подписали достаточно файлов. Читает ли Большой Брат вашу почту? Не знаю. Но я абсолютно уверен, что он не читает мою! LXF

Шаг за шагом: Импорт ключа

  • Найдите ключ
Если он у вас есть на жестком диске, нажмите на кнопку Импорт в интерфейсе Менеджера ключей и укажите ключ во встроенном менеджере файлов. Чтобы забрать ключи с сервера ключей, идите в Сервер > Загрузка ключей и введите ID ключа вашего друга.
  • Установите доверие владельцу
Чтобы облегчить работу GnuPG, щелкните правой кнопкой по ключу и выберите из меню пункт Установить доверие владельцу. Возникнет окно, где перечислены различные уровни доверия и предложена информация, способствующая правильному выбору.
  • Подпишите ключ
Если вы действительно доверяете человеку, приславшему вам этот ключ, вы также захотите подписать его. Опять, щелкните в Менеджере ключей правой кнопкой мыши и выберите из контекстного меню пункт Сертификация ключей. После получения от вас согласия GnuPG подпишет ключ вашим ключом.

Шаг за шагом: Шифрование/дешифровка файла

  • Выбор файла для шифрования
Кнопка Менеджер файлов в Менеджере ключей вызовет встроенный в GPA обозреватель. Используйте кнопку Открыть для выбора файлов .gpg, либо .asc, либо любого другого файла для шифрования.
  • Зашифруйте и подпишите
При шифровании файла GnuPG выводит окно, где позволяет вам выбрать публичный ключ получателя. У вас также есть возможность подписать зашифрованный файл свои закрытым ключом. Для шифрования нажмите OK.
  • Проверьте и дешифруйте
Если вы получили зашифрованный файл, подписанный автором, сперва неплохо бы проверить подпись, так что выберите файл и нажмите Подтвердить подпись в файловом менеджере. Если вы удовлетворены результатом, жмите кнопку Расшифровать, и пусть GnuPG творит свои чудеса.
Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию