GnuPG/ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Отправка ключей на сервер
Теперь, когда у нас есть ключ, возможно, хорошей идеей будет отправить его на сервер ключей. В мире существует много серверов ключей и большинство из них обмениваются ключами друг с другом. Здесь, мы собираемся отправить ключ, принадлежащий John Doe, на сервер keys.pgp.net. Он использует HTTP, поэтому если Вам потребуется использование прокси для HTTP трафика, не забудьте его установить ( export http_proxy= http://proxy_host:port/ ). Команда для отправки ключа: gpg --keyserver keys.gnupg.net --keyserver-options honor-http-proxy --send-key 75447B14, где 75447B14 - это идентификатор ключа (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 agent. Пакет содержит то, что можно рассматривать как эталон, и будет тем, что мы будем использовать в этом документе.

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

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

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

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

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

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

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

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

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

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

This will create binary files. If you wish to create ASCII files, just add a --clearsign option to the beginning of the command.

Расшифровка и проверка подписей
Suppose that you have received a file which is encrypted to you. The command used to decrypt it is gpg --output document --decrypt encrypted_doc.gpg. This will decrypt the document and verify the signature (if there is one).

Шифрование и расшифровка без ключей
It is also possible to encrypt files using passwords instead of keys. Well, the password itself will function as the key - it will be used as a symmetric cypher. You can encrypt the file using gpg --symmetric ; decrypting uses the same command as we talked about before.

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

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

Search for the above two lines and uncomment them. With this any time GnuPG needs to check a signature and it does not find the public key on the local keyring it will contact the key server at keys.gnupg.net and will try to fetch it from there.

Another nice command is gpg --refresh-keys. This will contact the keyserver defined in the options file and refresh public keys in your local key ring from there, searching for revoked keys, new IDs, and new signatures on keys. You should probably run this once or twice a month so that if someone revokes his key you will be notified.

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

There are two ways two sign/encrypt a email with GnuPG, the old way and the new way. In the old way messages would appear in plain text, with no possible formatting and attached files would be unsigned/unencrypted. Here is an example of a message signed the old way:

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

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

Kgpg
Kgpg is a nice GUI for GnuPG. In the main screen you can paste the text that you wish to sign or encrypt, and you can also paste the ASCII armored text that you wish to decrypt.

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

Seahorse
Seahorse aims to be a GnuPG GUI interface for the Gnome desktop. The software has been evolving fast, but it still lacks many important features that can be found in Kgpg or the command line version.

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

To verify if KMail is properly configured navigate to. You should see a GpgME-based backend listed and you should be able to fill the OpenPGP checkbox. If it is listed but grayed out, click on. If the GpgME-based backend remains grayed out, KMail is not working properly.

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

Claws-Mail
This mail reader is very fast with big mailboxes, has all the nice features one wants in mail readers and works well with gpg. The only problem is that it does not work with the old PGP signatures, so when receiving those kind of mails the signatures must be hand checked.

To use your gpg key with Claws-Mail navigate to. Once there just choose which key to use, probably most users will go with the default key.

Введение в Криптографию с Открытым Ключом
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.), ( emerge rotix 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.

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

If I give you the number 35 and I tell you that this number is the product of two prime numbers it is easy to find that it was 5 and 7. But if I tell you the same for 1588522601 you will spend a lot of time (or CPU cycles) to find it was 49811*31891. And if this number is really really big this task becomes "impossible". So now if I give the world my large number that is the product of two primes I know something about that number that no one else knows.

This is the basis for Public Key Cryptography (PKC) implementations today. As an (unrealistic) example, I give anyone my number and that someone will use if for cyphering a message to me. Anyone can see the cyphered message, because I am the only one who knows a shortcut to read it, anyone else will first have to "split" that big number to be able to read the message, and it is a "fact" that it is impossible to do that in a short amount of time (today's methods and the fastest computers in the world would take thousands of years to do that). In this setup the two large prime numbers would be called the PRIVATE KEY, and the large non prime number is the PUBLIC KEY.

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

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

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

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

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

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

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

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

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

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

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

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

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

The latest versions of gnupg don't seem to work with the gpg --send-keys that was used so send all keys in your keyring to the public server.

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

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

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

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

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

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