Предупреждение : Этот документ находится в разработке, и его пока не следует считать официальным. |
Что вы найдёте в этом руководстве
Предполагается, что вы уже знакомы с такими понятиями, как открытый криптографический ключ (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.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. Это расшифрует документ и проверит его подпись (если есть хоть одна).
kgpg - это приятный GUI интерфейс для GnuPG. В основном экране вы можете вставить текст который желаете подписать или зашифровать. Вы также можете вставить зашифрованный ASCII текст для расшифровки.
Рисунок 5.1 |
![]() |
На этой картинке вы видите главное окно kgpg со вставленным зашифрованным текстом ASCII. Отсюда вы можете расшифровать этот файл (с паролем, конечно), зашифровать любые другие файлы, вставить новый текст для подписи...
Рисунок 5.2 |
![]() |
Теперь перед вами окно менеджера ключей. Отсюда мы видим наш хороший ключ для Джона До. Два проверенных ключа для Густаво и Луиса, и один непроверенный для Дэниела Роббинса (я всё ещё не запросил у него, его отпечаток пальца :) ).
Рисунок 5.3 |
![]() |
Рисунок 5.4 |
![]() |
Mozilla, начиная с версии 1.0 и выше, идёт вместе с Enigmail -- легко конфигурируемым плагином (plugin) для встроенного почтового клиента. Вам просто нужно выбрать в опциях "Preferences"> "Privacy" & "Security" -> "Enigmail". Там вы введёте свой e-mail и все готово.
Приходящая почта с непроверенными pgp, или gpg подписями будет помечена сломанной ручкой. Другая же с действительными подписями будет помечена красивой и целой ручкой. Enigmail даже позволяет получить ключи с удалённого ключевого сервера, но если с этим возникнут проблемы, будут выводиться весьма странные сообщения (но мы ведь помним как пользоваться командной строкой?)
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. позволяется издавать данный документ, как полагается.