GnuPG/ru

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

О чем будет рассказано в этом руководстве
This guide assumes that you are familiar with public-key cryptography, encryption, and digital signatures. If this is not the case take a look at the GnuPG handbook, chapter 2, and then come back.

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

Установка требуемых программ
На самом простом уровне, Вам потребуется запустить. На сегодняшний день, множество приложений имеют тот или иной вид поддержки gpg, поэтому добавка crypt в список Ваших переменных USE, возможно, является хорошей идеей. Если Вы хотите иметь email client с возможностью использования gnupg, Вы можете использовать pine, mutt , Mozilla Thunderbird , evolution (evolution - это GNOME-близнец Microsoft Outlook со схожими принципами работы) и принадлежащий KDE Kmail.

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

Создание ключа
Чтобы создать Ваш ключ, просто запустите. При первом запуске, он создаст несколько каталогов; запустите его снова чтобы создать ключи:

Здесь Вы можете выбрать тип ключа, который Вы хотите использовать. Большинство пользователей предпочтут алгоритмы по умолчанию: RSA и RSA. Далее идет размер ключа. Запомните, что чем больше, тем лучше, но не используйте размер больший чем 2048 с ключами DSA/ElGamal. В основном, 2048 более чем достаточно для обычной почты.

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

Выбор размера ключа

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

Заполнение информации о пользователе

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

Далее, GnuPG сгенерирует Ваш ключ. Двигание мышкой или проигрывание mp3 на заднем плане поможет ускорить процесс, потому что это генерирует случайные данные.

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

Команда  перечисляет ключи в Вашей связке открытых ключей. Вы можете ее использовать для просмотра ID Вашего ключа, чтобы Вы могли создать сертификат отзыва. А сейчас, хорошей идеей будет скопировать весь каталог .gnupg и сертификат отзыва (в защищенном ASCII тексте - ) на какой-нибудь защищенный носитель (два гибких диска или CD-R, хранимые в безопасном месте). Запомните, что может быть использован для того, чтобы отозвать Ваши ключи и сделать их непригодными в дальнейшем.

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

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

Теперь, мы будем добавлять открытый ключ Луиса Пинто (моего друга) в нашу связку открытых ключей. После звонка по телефону и запрашивания отпечатка его ключа, я сравню отпечаток с результатом команды. В случае если ключ подлинный, я добавлю его в связку открытых ключей. В этом частном случае, ключ Луиса истечет на 2013-12-01, поэтому у меня будет спрошено желаю ли я, чтобы моя подпись этого ключа истекла в то же время.

Отправка ключей на сервер
Теперь, когда у нас есть ключ, возможно, хорошей идеей будет отправить его на сервер ключей. В мире существует много серверов ключей и большинство из них обмениваются ключами друг с другом. Здесь, мы собираемся отправить ключ, принадлежащий John Doe, на сервер subkeys.pgp.net. Он использует HTTP, поэтому если Вам потребуется использование прокси для HTTP трафика, не забудьте его установить. Команда для отправки ключа:, где   - это идентификатор ключа (key ID). Если Вам не нужен HTTP прокси, Вы можете убрать --keyserver-options honor-http-proxy.

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

Получение ключей с сервера
Теперь мы собираемся найти ключ Gustavo Felisberto и добавить его в связку ключей John Doe (на случай, если Вы не заметили, Gustavo Felisberto - автор этого руководства :&#41;).

Как видно из ответа сервера, я отослал несколько ключей на сервер, но в данный момент я использую только B9F2D52A. Теперь John Doe может его получить и подписать, если он ему доверяет.

Что такое GPG Agent?
Иногда, работа с определенными приложениями требует от Вас очень частого использования ключа GPG. Это означает что Вам придется вводить парольную фразу много раз. Несколько приложений поддерживали механизм кэширования парольной фразы чтобы облегчить жизнь пользователям. Однако, это не позволяло делить этот кэш между программами (насколько это было бы безопасно?) и вынуждало приложения изобретать колесо снова и снова.

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

Gentoo provides a few GPG agent applications. The package contains what could be considered the reference one, and will be the one we'll use in this document.

Конфигурация gpg-agent и pinentry
GnuPG включает  и. - это вспомогательное приложение, которое gpg-agent использует для запроса парольной фразы в графическом окне. Оно бывает трех видов: отображение окна с использованием gtk+, Qt, или библиотеки curses (в зависимости от Ваших USE-флагов в ).

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

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

Затем, настройте GnuPG на использование agent, когда это уместно. Отредактируйте и добавьте следующую строчку:

Теперь Ваша система (почти) настроена на использование GPG agent.

Автоматический запуск GPG Agent
Если Вы используете KDE в качестве графической среды, отредактируйте и раскомментируйте следующее (глобально) или добавьте следующую команду в  (для локального пользователя), чтобы KDE автоматически запускал GPG agent:

Дополнительно, раскомментируйте следующее в (глобально) или добавьте в  (для локального пользователя):

Если Вы используете другую графическую среду, поместите эту строку (ту же, что и упомянутую выше) в (если Вы используете  ) или  (если Вы используете XDM/GDM/KDM/...).

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

Следующие три команды как раз это и сделают: зашифруют, подпишут и зашифруют/подпишут.

Это создаст двоичные файлы. Если Вы хотите создать ASCII-файлы, просто добавьте  в начало команды.

Расшифровка и проверка подписей
Предположим, Вы получили файл, который зашифрован Вашим открытым ключом. Командой для расшифровки является. Это расшифрует документ и проверит подпись (если таковая имеется).

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

GnuPG запросит парольную фразу и ее подтверждение.

Расширенные функции
В GnuPG есть несколько приятных расширенных функций. Чтобы их найти, откройте файл.

Найдите две линии выше и раскомментируйте их. С этим, всякий раз когда GnuPG потребуется проверить подпись и он не найдет открытый ключ в локальной связке, GnuPG соединится с сервером ключей по адресу subkeys.pgp.net и попытается получить их оттуда.

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

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

Существует два способа подписать/зашифровать почту с GnuPG, старый способ и новый способ &#41;. По старому способу, сообщения будут появляться в виде простого текста, без возможного форматирования, а любые вложенные файлы будут не подписаны/не зашифрованы. Здесь приведен пример сообщения, подписанного старым способом:

Подпись простого текста

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

Для того, чтобы решить эту проблему, к стандарту MIME (Multipurpose Internet Mail Extensions) было создано дополнение. Оно добавило поле в email сообщение, которое сообщает программе чтения почты, что все содержимое этого сообщения подписано и/или зашифровано. Проблема заключается в том, что не все программы чтения почты это поддерживают. И некоторые даже портят содержимое; Microsoft Outlook знаменит своими отказами с этим работать.

Kgpg
Kgpg - это отличный графический интерфейс пользователя для GnuPG. На главном экране вы можете вставить текст, который Вы хотите подписать или зашифровать, и Вы также можете вставить защищенный текст ASCII, который Вы хотите расшифровать.

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

Seahorse
Seahorse ориентирована на то, чтобы быть графическим интерфейсом GnuPG для рабочего стола Gnome. Программа быстро развивается, но все еще не имеет множества важных функций, которые могут быть найдены в Kgpg или командной строке.

KMail
Если у Вас установлен USE-флаг, KMail скомпилируется с поддержкой gpg, и сможет шифровать и расшифровывать встроенные в почту в виде текста сообщения PGP  автоматически, а также шифровать сообщения OpenPGP/MIME. Если Вы также хотите расшифровывать сообщения OpenPGP/MIME (что, скорее всего, так), Вам нужно запустить GPG agent.

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

Если у Вас все еще не получается заставить KMail работать должным образом, посмотрите страницу Описание KMail PGP, чтобы получить больше информации.

Claws-Mail
Эта программа чтения электронной почты очень быстро работает с большими почтовыми ящиками, имеет все приятные в работе функции, которые требуются от программ чтения электронной почты и очень хорошо работает с gpg. Только одна проблема заключается в том, что она не работает со старыми подписями PGP, поэтому, когда Вы получаете этот вид писем, Вам потребуется проверять подписи вручную.

Чтобы использовать Ваш gpg ключ с Claws-Mail, просто перейдите к конфигурации учетной записи и выберите вкладку privacy. Как только это сделано, просто выберите какой ключ нужно использовать, возможно, большинству пользователей подойдет ключ по умолчанию.

Введение в Криптографию с Открытым Ключом
Идея криптографии с открытым ключом была первоначально разработана Уитфилдом Диффи и Мартином Хеллманом в 1976. Когда я услышал слова открытый ключ и криптография впервые в одном и том же предложении в 93-ем году, я подумал про себя, что сделать такое было бы невозможно. В те дни не было интернета (по правде говоря, был, но не для меня), поэтому я пошел в библиотеку и спросил книги по Криптографии. Я должен признаться, что в то время мне было 16, поэтому служащий посмотрел на меня в недоумении и принес мне книгу по подстановочным шифрам для детей (тем шифрам, в которых вы заменяете одну букву на другую, как в знаменитом шифре Цезаря или ROT-13). Я был этим очень расстроен и начал искать дополнительную информацию. Хорошо, когда в семье есть математики, потому что как только я поговорил с одним из них, передо мной открылся новый мир.

А теперь немного математики:

Математические понятия

Если я дам вам число 35 и скажу что это число является произведением двух простых чисел, легко найти, что этими числами являются 5 и 7. Но если я скажу Вам то же самое для 1588522601, Вы потратите много времени (или циклов центрального процессора), чтобы обнаружить, что это были числа 49811*31891. И если это число на самом деле очень большое, эта задача становится невыполнимой. Поэтому сейчас, если я сообщу мое большое число, которое является произведением двух простых, всему миру, я буду знать об этом числе что-то, что не знает никто другой.

Это основы сегодняшней реализации криптографии с открытым ключом (Public Key Cryptography - сокр.PKC). В качестве (нереалистичного) примера, я сообщу мое число кому-то, и этот кто-то использует его для того, чтобы зашифровать мне сообщение. Все смогут видеть зашифрованное сообщение, потому что только один я знаю секрет, чтобы его прочитать. Всем другим придется сперва разбить это большое число, чтобы получить возможность прочитать сообщение, и фактом является то, что это невозможно сделать за короткий промежуток времени (с сегодняшними методами и самыми быстрыми компьютерами в мире понадобятся тысячи лет чтобы это выполнить). В этом сценарии два больших простых числа назывались бы ЗАКРЫТЫЙ КЛЮЧ, а большое составное число - ОТКРЫТЫЙ КЛЮЧ.

На практике, это не на 100% точно, но мы дали хорошую идею новичку. За более подробной информацией обратитесь к Википедии - протокол Диффи-Хеллмана. Чтобы найти еще больше информации, зайдите в библиотеку и возьмите копию "Handbook of Applied Cryptography" от Alfred J. Menezes, Paul C. van Oorschot и Scott A. Vanstone. Эта книга также доступна онлайн абсолютно бесплатно на сайте, указанном выше.

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

Подписи
Мы уже видели как кто-нибудь может отправить нам зашифрованное сообщение, если он обладает нашим открытым ключом. Но как нам узнать, что автором сообщения на самом деле является тот, кто об этом заявляет? Или, другими словами: Если я получаю электронное сообщение от Вас, как мне действительно узнать, что это были Вы, а не кто-то другой, притворяющийся Вами.

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

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

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

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

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

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

Давайте представим ситуацию для трех лиц: Антона, Марии и Лизы. Антон дружит с Марией, но не знает Лизу; Лиза дружит с Марией, но не знает Антона. В один день, Лиза отправляет Антону подписанное сообщение. Антон получает открытый ключ Лизы с сервера ключей и тестирует сообщение. Если все прошло успешно, он увидит, что кто-бы ни подписал это сообщение, он также создал и этот ключ. Но как мне узнать, что это на самом деле был тот человек, который заявляет об этом?

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

Теперь Вы готовы использовать это руководство. Вы можете перейти обратно к главе 1 и начать изучать как использовать gpg.

Некоторые из проблем
У меня были некоторые проблемы с использованием фото в ключах. Проверьте версию которой Вы пользуетесь. Если у Вас GnuPG 1.2.1-r1 и выше, Вы, вероятно, в порядке. Более старые версии могут иметь проблемы. Также, большинство серверов ключей не работают с ключами с фото, поэтому будет лучше если Вы не станете добавлять фотографии.

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

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

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

Благодарности
Настольная Книга GnuPG от John Michaeil Ashley - очень хорошая книга для новичков.

Swift (Sven Vermeulen) за подталкивание меня к переписанию этого руководства.

Каждого из команды #gentoo-doc. Парни, вы рулите.

Tiago Serra, за мое возвращение обратно на путь конфиденциальности.

Благодарности
Мы хотели бы поблагодарить следующих авторов и редакторов за их вклад в это руководство:


 * Gustavo Felisberto
 * John P. Davis
 * Sven Vermeulen
 * nightmorph