GnuPG/ru

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

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

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

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

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

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

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

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

Choosing key size

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

Entering user information

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

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

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

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

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

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

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

Отправка ключей на сервер
Теперь, когда у нас есть ключ, возможно, хорошей идеей будет отправить его на сервер ключей. В мире существует много серверов ключей и большинство из них обмениваются ключами друг с другом. Здесь, мы собираемся отправить ключ на сервер 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 предоставляет несколько приложений GPG агент. Пакет  содержит то, что можно рассматривать как эталон, и будет тем, что мы будем использовать в этом документе.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

A plain text signature

Сообщения этого рода не имеют смысла в сегодняшнем мире, где мы имеем удобные графические интерфейсы пользователя и программы чтения электронной почты, которые понимают 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. Как только это сделано, просто выберите какой ключ нужно использовать, возможно, большинству пользователей подойдет ключ по умолчанию.

Введение в Криптографию с Открытым Ключом
The concept of public key cryptography was originally devised by Whitfield Diffie and Martin Hellman in 1976. When I first heard the words "public key" and "cryptography" in the same sentence back in '93 I thought to myself that it would be impossible to do such a thing. In those days there was no Internet (well there was, but not for me) so I went to the public library and asked for books on Cryptography. I must say that I was 16 at the time so the clerk there looked to me in astonishment and brought me a book for children on substitution cyphers (those where you change a letter for another like the famous Caesar Cypher or ROT-13 (Tragbb Ebpxf, naq lbh xabj vg vf tbbq orpnhfr lbh ner ernqvat guvf qbp.), (  if you cannot read the preceding text)). I was very upset with this and started to search for more info. It is good to have mathematicians in the family, because as soon as I talked to one of them I was introduced to a new world.

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

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

Если я дам вам число 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. Эта книга также доступна онлайн абсолютно бесплатно на сайте, указанном выше.

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

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

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

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

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

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

Key signing means that if I have the public key of another person, and I know for sure that it is really that persons key (it is my personal friend, someone I know in real life, etc.) I can sign that public key and send it to keyservers, that way I am telling the world: "This key really belongs to the person it claims to belong.". That way persons that have my public key and trust me can use that trust to trust other keys.

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

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

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

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

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

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

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

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

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

Swift (Sven Vermeulen) for pushing me to re-write this.

Everyone in the #gentoo-doc team you guys rock.

Tiago Serra for getting me back to the privacy track.

Acknowledgements
We would like to thank the following authors and editors for their contributions to this guide:


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