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

Руководство пользователя по GnuPG

Gustavo Felisberto  автор
John P. Davis  редактор
Иван Зенков  переводчик
Георгий Шаповалов  редактор перевода

Обновлено 5 июня 2003
Исходный документ обновлен 29 декабря 2007

1.  Введение

Что вы найдёте в этом руководстве

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

Данное руководство объяснит вам, как правильно установить GnuPG, как создать свою пару ключей (keypair), как добавить ключи в вашу ключевую схему (keyring), как предоставить ваш открытый ключ в ключевой сервер (keyserver) и как (подписывать/шифровать)/(проверять/расшифровывать) посланные/полученные вами сообщения. Вы также узнаете, как зашифровать файлы на своём компьютере, чтобы не допустить посторонних людей к просмотру их содержимого.

Установка необходимого ПО

На самом базовом уровне можно просто набрать emerge gnupg, если вы также хотите получить e-mail клиент использующий gnupg, то можете использовать pine (emerge pinepgp), mutt (emerge mutt), Mozilla/Netscape Mail, evolution (evolution - это GNOME-подобие Microsoft Outlook), и, собственно для KDE, KMail (KMail это часть пакета kdenetwork).

Опять же, если вы используете KDE, вас возможно заинтересует Kgpg. Это - маленькая программка позволяющая генерировать пары ключей, импортировать ключи из ASCII файлов, подписывать импортированные ключи, экспортировать ключи и содержащая ещё несколько дополнительных особенностей (к сожалению среди них отсутствует возможность импорта ключей с ключевых серверов, но вы научитесь этому из командной строки).

2.  Генерирование ключа и добавление пары ключей в вашу схему (keyring)

Создание ключа

Для создания ключа просто запустите gpg --gen-key. Если вы запускаете это в первый раз, то будут лишь созданы некоторые директории. Запустите ещё раз для создания ключей:

Листинг 2.1: Процесс генерации ключа

#gpg --gen-key
gpg (GnuPG) 1.0.7; Copyright (C) 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Please select what kind of key you want:
   (1) DSA and ElGamal (default)
   (2) DSA (sign only)
   (4) ElGamal (sign and encrypt)
   (5) RSA (sign only)
   Your selection?1

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

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

Листинг 2.2: Выбор размера ключа

DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
              minimum keysize is  768 bits
              default keysize is 1024 bits
    highest suggested keysize is 2048 bits
    What keysize do you want? (1024) 2048
Requested keysize is 2048 bits       
Please specify how long the key should be valid.
         0 = key does not expire
	 <n>= key expires in n days
	 <n>w = key expires in n weeks
	 <n>m = key expires in n months
	 <n>y = key expires in n years
	 Key is valid for? (0) 0
Key does not expire at all

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

Листинг 2.3: Заполнение пользовательской информации

					Is this correct (y/n)? y

You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: John Doe
Email address: john@nowhere.someplace.flick
Comment: The Real John Doe
You selected this USER-ID:
"John Doe (The Real John Doe) <john@nowhere.someplace.flick>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O 
You need a Passphrase to protect your secret key.

Enter passphrase:

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

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

Создание аннулирующего сертификата

Важно: Эта часть очень важна и вы должны пройти её прямо СЕЙЧАС.

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

Листинг 2.4: Создание сертификата аннулирования

#gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub  1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick>
sub  2048g/96D6CDAD 2002-12-08

bash-2.05a$ gpg --output revoke.asc --gen-revoke 75447B14

sec  1024D/75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhere.someplace.flick>

Create a revocation certificate for this key? y
Please select the reason for the revocation:   
  0 = No reason specified
  1 = Key has been compromised
  2 = Key is superseded
  3 = Key is no longer used
  Q = Cancel
(Probably you want to select 1 here)
Your decision? 1 
Enter an optional description; end it with an empty line:
> Someone cracked me and got my key and passphrase
>
Reason for revocation: Key has been compromised
Someone cracked me and got my key and passphrase
Is this okay? y

You need a passphrase to unlock the secret key for
user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"
1024-bit DSA key, ID 75447B14, created 2002-12-08

ASCII armored output forced.
Revocation certificate created.

Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable.  But have some caution:  The print system of
your machine might store the data and make it available to others!

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

Примечание: Если у вас есть несколько e-mail адресов, которые вы желали бы использовать с этим ключом, запустите gpg --edit-key ВАШ_ID и используйте команду adduid. У вас спросят имя, e-mail и комментарий ко второму ID, который вы будете использовать.

Экспорт ключей

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

Импорт ключей

Чтобы добавить файл в вашу открытую ключевую схему, вы должны вначале его импортировать и проверить "ключевой отпечаток пальца" (fingerprint). После проверки отпечатка пальца, вам ещё раз необходимо удостоверится в его действительности.

Примечание: Проверяя ключи, вы должны быть очень внимательны. Это одна из уязвимых точек шифрования с открытым ключом.

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

Листинг 2.5: Импорт и подпись ключей

#gpg --import luis.asc
gpg: key 462405BB: public key imported
gpg: Total number processed: 1
gpg:               imported: 1
humpback@sam humpback $ gpg --list-keys      
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub  1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick>
sub  2048g/96D6CDAD 2002-12-08

pub  1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@student.dei.uc.pt>
	uid                            Luis Pinto <lmpinto@dei.uc.pt>
sub  4096g/922175B3 2002-12-01 [expires: 2003-12-01]

humpback@sam humpback $ gpg --edit-key lmpinto@dei.uc.pt
gpg (GnuPG) 1.0.7; Copyright (C) 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.


gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
pub  1024D/462405BB  created: 2002-12-01 expires: 2003-12-01 trust: -/-
sub  4096g/922175B3  created: 2002-12-01 expires: 2003-12-01
(1)  Luis Pinto <lmpinto@dei.uc.pt>
(2). Luis Pinto <lmpinto@student.dei.uc.pt>

Command> fpr
pub  1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@dei.uc.pt>
             Fingerprint: F056 3697 ADE3 CF98 B80B  8494 0AD3 E57B 4624 05BB
	     
Command> sign
Really sign all user IDs? y
                           
pub  1024D/462405BB  created: 2002-12-01 expires: 2003-12-01 trust: -/-
             Fingerprint: F056 3697 ADE3 CF98 B80B  8494 0AD3 E57B 4624 05BB

	     Luis Pinto <lmpinto@dei.uc.pt>
	     Luis Pinto <lmpinto@student.dei.uc.pt>

This key is due to expire on 2003-12-01.
Do you want your signature to expire at the same time? (Y/n) Y
How carefully have you verified the key you are about to sign actually belongs
to the person named above?  If you don't know what to answer, enter "0".

   (0) I will not answer. (default)
   (1) I have not checked at all.
   (2) I have done casual checking.
   (3) I have done very careful checking.

   Your selection? 3
Are you really sure that you want to sign this key
with your key: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"

I have checked this key very carefully.

Really sign? y
              
You need a passphrase to unlock the secret key for
user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"
1024-bit DSA key, ID 75447B14, created 2002-12-08

Command> check
uid  Luis Pinto <lmpinto@dei.uc.pt>
sig!3       462405BB 2002-12-01   [self-signature]
sig!3       75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhe
uid  Luis Pinto <lmpinto@student.dei.uc.pt>
sig!3       462405BB 2002-12-01   [self-signature]
sig!3       75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhe

3.  Обмен ключами с ключевыми серверами

Отправка ключей ключевым серверам

Теперь когда у нас есть ключ, было бы хорошей идеей отправить его в мировой ключевой сервер. По всему миру разбросано множество ключевых серверов и большинство из них обмениваются между собой. Здесь мы собираемся отправить ключ Луиса на сервер pgp.mit.edu. При этом используется HTTP, поэтому если вам нужен HTTP прокси, не забудьте его указать (export http_proxy=http://proxy_host:port/). Команда для отправки ключа следующая: gpg --keyserver pgp.mit.edu --keyserver-options honor-http-proxy --send-key john@nowhere.someplace.flick. Если вам, наоборот, не нужен HTTP прокси, можете убрать --keyserver-options honor-http-proxy.

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

Получение ключей с ключевых серверов

Теперь мы попробуем найти ключ Густаво Фелисберто и добавить его в ключевую схему Джона До (на всякий случай, вы не обращайте внимание, что Густаво Фелисберто - человек, пишущий это руководство :) ).

Листинг 3.1: Поиск ключей в ключевых серверах

#gpg --keyserver pgp.mit.edu --keyserver-options honor-http-proxy \
	--search-keys humpback@felisberto.net
gpg: searching for "humpback@felisberto.net" from HKP server pgp.mit.edu
Keys 1-5 of 5 for "humpback@felisberto.net"
(1)	Gustavo Felisberto (apt-get install anarchy) <humpback@felisberto.net> 1024
	  created 2002-12-06, key B9F2D52A
(2)	Gustavo Felisberto <humpback@altavista.net> 1024
	  created 1999-08-03, key E97E0B46
(3)	Gustavo A.S.R. Felisberto <humpback@altavista.net> 1024
	  created 1998-12-10, key B59AB043
(4)	Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024
	  created 1998-08-26, key 39EB133D
(5)	Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024
	  created 1998-06-14, key AE02AF87
	  Enter number(s), N)ext, or Q)uit >1
gpg: requesting key B9F2D52A from HKP keyserver pgp.mit.edu
gpg: key B9F2D52A: public key imported
gpg: Total number processed: 1
gpg:               imported: 1

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

4.  Работа с документами

Шифрование и подписывание

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

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

Листинг 4.1: Проверка ключей в файлах и их дешифровка

#gpg --output doc.gpg --encrypt --recipient lmpinto@dei.uc.pt doc_to_encrypt
#gpg --output doc.gpg --sign --recipient lmpinto@dei.uc.pt doc_to_sign
#gpg --output doc.gpg --encrypt --sign --recipient \
		lmpinto@dei.uc.pt doc_to_encrypt_and_sign

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

Расшифровка и проверка подписей

Предположим, что вы получили зашифрованный для вас файл. Команда расшифровки следующая gpg --output document --decrypt encrypted_doc.gpg. Это расшифрует документ и проверит его подпись (если есть хоть одна).

5.  Интерфейсы к GnuPG

kgpg

kgpg - это приятный GUI интерфейс для GnuPG. В основном экране вы можете вставить текст который желаете подписать или зашифровать. Вы также можете вставить зашифрованный ASCII текст для расшифровки.


Рисунок 5.1

Fig. 1: Главное окно kgpg

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


Рисунок 5.2

Fig. 2: Окно  менеджера ключей kgpg

Теперь перед вами окно менеджера ключей. Отсюда мы видим наш хороший ключ для Джона До. Два проверенных ключа для Густаво и Луиса, и один непроверенный для Дэниела Роббинса (я всё ещё не запросил у него, его отпечаток пальца :) ).


Рисунок 5.3

Fig. 3: Опции безопасности kmail для OpenGPG


Рисунок 5.4

Fig. 4: Опции идентификации kmail, OpenGPG ключа

Mozilla Enigmail

Mozilla, начиная с версии 1.0 и выше, идёт вместе с Enigmail -- легко конфигурируемым плагином (plugin) для встроенного почтового клиента. Вам просто нужно выбрать в опциях "Preferences"> "Privacy" & "Security" -> "Enigmail". Там вы введёте свой e-mail и все готово.

Приходящая почта с непроверенными pgp, или gpg подписями будет помечена сломанной ручкой. Другая же с действительными подписями будет помечена красивой и целой ручкой. Enigmail даже позволяет получить ключи с удалённого ключевого сервера, но если с этим возникнут проблемы, будут выводиться весьма странные сообщения (но мы ведь помним как пользоваться командной строкой?)

KMail

KMail также приятно прост в установке. Я просто покажу несколько картинок по его настройке. В основном вам потребуется указать KMail использовать GPG и каким ключом подписывать.

6.  Заключительные комментарии, благодарности и авторские права

Некоторые проблемы

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

Чего здесь нет

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

Я не рассказал о таких инструментах как pgp4pine, gpgpine, evolution и, возможно, Windows-инструментарии. Возможно, в будущем я добавлю и их в это руководство.

Благодарности

Спасибо Джону Майклу Эшли (John Michael Ashley) за чудесную книгу Руководство по GnuPG. Очень хорошая книга для новичков.

Спасибо каждому участнику канала #gentoo-doc.

Благодарю Тиаго Серра (Tiago Serra) за помощь в моем возвращении на дорогу секретности.

Авторские права

Авторские права принадлежат Gustavo Felisberto. Gentoo Technologies Inc. позволяется издавать данный документ, как полагается.