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/...).

Шифрование и подпись
Let's say that you have a file that you wish to send Luis. You can encrypt it, sign it, or encrypt it and sign it. Encrypting means that only Luis will be able to open it. The signature tells Luis that it was really you who created the file.

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

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

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

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

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

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

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

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

О подписях электронной почты
95% of the time you will use GnuPG with email, signing/encrypting your outgoing messages and reading signed/encrypted messages. So it is only fair that I talk about that first.

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:

A plain text signature

Messages this way are no good in today's world, where we have nice GUIs and email readers that understand html.

To solve this an addition to the MIME (Multipurpose Internet Mail Extensions) was created. This adds a field to the email that tells the mail reader that the full content of the message is signed and/or encrypted. The problem with this is that not all mail readers support this. And some even mess up the content; Microsoft's Outlook is famous for not working with this.

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 which to decrypt.

From within the main screen you can decrypt text (you will have to provide your password), encrypt other files, paste new text to sign....

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
If you have the  USE flag set, KMail will be compiled with gpg support, and will be able to encrypt and decrypt inline PGP mails automatically as well as encrypting OpenPGP/MIME mails. If you want to decrypt OpenPGP/MIME mails as well (which you probably want) you need to have a running GPG agent.

You can verify if KMail is properly configured by going 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.

If you still are unable to get KMail to behave, please see the KMail PGP HowTo page for more information.

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

To use your gpg key with Claws-Mail just go to the account configuration and select the privacy tab. Once there just choose which key to use, probably most users will go with the default key.

Basic Public Key Cryptography
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.

And now a bit of mathematics:

Mathematical Concepts

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 alot 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 (todays 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.

In practice this is not 100% accurate with reality, but will give a good idea to the newcomer. For more information, check Wikipedia on the Diffie-Hellman protocol. For even more info go to the public library and grab a copy of the "Handbook of Applied Cryptography" by Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone. This book is also available online for free at the above site.

One consequence of the above is that if you cypher a message to me, and you loose the original uncyphered message you will no longer be able to retrieve it from the cyphered version.

Signatures
We already saw how someone can send us a cyphered message if they have our public key. But how do we know that the author of the message is really who he claims to be? Or in other words: If I receive an email from you how do I really know it was you and not someone else claiming to be you?

Remember me saying that PKC was not as simple as I had said? The idea is that when you cypher a message to me you sign it with your private key so that, when I receive it, I can first use your public key to check your signature and then use my private key to decypher the message. As you can see we could not do that in the setup I described before.

It's also very important to sign messages so that you don't have to cypher them beforehand. Now you can create messages that can be read by anyone, but that come with your "branding". And if any single character is changed in the message it can (and will) be detected.

Key Servers and Signed Keys
But let's say that I have no previous contact with you until you send me a message: how do I get your public key, and how do I really know it is yours?

To solve this problem public Key Servers were created. When you create your key pair (Public and Private key), you send your public key to the key server. After this everyone can retrieve your key from there. This solves the problem of finding the key. But how do I really know that that key is the author's key? For this another concept must be introduced, and that is key signing:

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.

This can sometimes be confusing so let's see a real world situation.

Let's imagine a 3 person situation: John, Mary, and Lisa. John is a good friend of Mary but does not know Lisa; Lisa is a good friend of Mary but does not know John. One day Lisa sends John a signed email. John will fetch Lisa's Public Key from the keyserver and test the message, if all went ok he will see that whoever wrote that message also created that key. But how do I know it was really the person it claims to be?

He then sees that it is signed by Mary, which he can check because he already has Mary's key and he trusts that key. With this ring of trust he continues to conclude that the email he received was really written by Lisa.

You are now ready to use this guide, you can go back to chapter 1 and learn how to use gpg.

Some problems
I had some problems with photos in keys. Check the version you are using. If you have GnuPG 1.2.1-r1 and up you are probably OK, older versions may have problems. Also most keyservers don't like keys with photos, so you are better if you don't add photos.

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

What is not here
is a very complex tool, it lets you do much more than what I have covered here. This document is for the user who is new to GnuPG. For more information, you should check theGnuPG Website.

I did not write about other tools like ,   ,   and maybe Windows tools, but I will probably extend this document in the future.

Credits
John Michael Ashley's GnuPG Handbook it is a very good book for beginners.

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