Ключевые слова:pgp, gnupg, crypt, (найти похожие документы)
From: Антон Прошанин <anton@letras.ru.>
Newsgroups: email
Date: Mon, 29 Jun 2008 17:02:14 +0000 (UTC)
Subject: gpg - шифрование для всех платформ
Если у вас возникла необходимость зашифровывать файлы на линуксе,
а расшифровывать на Windows, или наоборот, вам нужно найти программу
для шифрования, которая работала бы на обеих системах. Стандарной программой
для шифрования на линуксе является PGP - Pretty Good Privacy.
Она бесплатна для частных лиц, но для использования её в коммерческих целях
требуется лицензия. Полностью открытый аналог этой программы
GnuPG - Gnu Privacy Guard - делает то же самое,
но абсолютно бесплатно, поэтому ею я и рекомендую пользоваться.
Для gpg существуют графические фронт-енды, которые существенно облегчают жизнь
новичкам, но поскольку мы собираемся работать и на линуксе, то мы будем
разбираться с оригинальной версией программы, которая запускается с коммандной
строки.
Возможно, что gpg уже установлен на вашей линукс машине. Чтобы это проверить,
запустите следующую комманду gpg --version. Если программа не установлена,
установите её, используя менеджер пакетов, например для Дебиана:
apt-get install gpg. Дистрибутив для Windows можно скачать
отсюда (2.1 Мб).
Для удобства добавьте директорию, в которой после установки находится
файл gpg.exe в системный путь/PATH.
Симметричное шифрование
Обычная ситуация, когда у вас есть секретный пароль, который вы используете,
для того чтобы зашифровать и расшифровать файл, называется симметричным
шифрованием. Им пользоваться проще всего.
Зашифровать файл:
gpg -c filename
Расшифровать файл:
gpg --decrypt-files filename.gpg
В обоих случаях программа попросит вас ввести пароль. К названию зашифрованного
файла добавляется расширение .gpg .
Ассиметричное шифрование
Ассиметричное шифрование сложнее, но именно им обычно и пользуются,
когда работают с gpg. Слабым моментом симметричного шифрования является то,
что когда вы посылаете зашифрованный файл, вам надо каким-то образом передать
получателю и секретный пароль. Как это сделать? Опять шифровать? А что
делать с паролем, которым вы зашифруете пароль? :)
Ассиметричное шифрование решает эту проблему весьма элегантным образом.
Вместо одного пароля вы используете два. Один - публичный, который вы активно
раздаёте всем желающим, второй - ваш личный секретный пароль, который знаете
только вы. Когда вам хотят послать что-нибудь глубоко секретное, посылатель
шифрует это посредством публичного пароля. А вы уже со своей стороны
расшифровываете полученный файл своим личным паролем. Ваш секретный пароль
при этом никуда не передаётся и не может попасть в чужие руки.
Перечитайте предыдущий параграф ещё раз, ибо мне не хочется приводить примеров
про чуждых нашему сердцу Боба и Алис, которые обмениваются между собой
секретными посланиями. Есть два пароля: один для всех, другой для себя.
Когда что-то шифруют для вас, используют пароль, открытый для всех.
Когда вам надо расшифровать файл, вы используете тот пароль, который "для себя".
В этом-то, собственно, и состоит ассиметричность, от которой происходит
название метода.
Пароли и ключи
Итак, вам нужна пара паролей, или как их ещё называют, ключей. Одним паролем
шифруют, другим расшифровывают. Они создаются автоматически, поэтому если вы
надеетесь увидеть что-нибудь читаемое и легко запоминающееся, вынужден вас
огорчить. Ключи - скорее куски текста, содержащие набор символов.
Мой публичный ключ, например, выглядит вот так.
Поскольку запомнить это обычному человеку невозможно, а при общении со многими
людьми приходится использовать большое количество публичных ключей для каждого
из них, встаёт вопрос: как все эти ключи хранить. Так вот, ключи хранятся в
специальной копилке, добавлять и удалять их оттуда можно с помощью программы -
вы угадали - gpg. Создавать ключи, впрочем, тоже. Именно этим мы сейчас и
займёмся.
Создание пары ключей
Чтобы создать свою собственную пару ключей запустите следующую комманду:
gpg --gen-key. Программа предлагает разумные параметры по умолчанию,
так что на данном этапе не вдавайтесь в тонкости криптографии, соглашайтесь
с тем, что предлагает gpg, укажите только своё имя и емайл. Когда программа
сообщит, что она хочет создать случайный набор байтов, вам надо изобразить
на компьютере бурную активность: откройте браузер, посетите пару сайтов,
бессмысленно поводите мышкой, напечатайте что-нибудь, послушайте mp3 файл.
Созданные ключи не сохраняются в файл, а попадают в копилку ключей. Убедиться
в этом можно набрав комманду gpg --list-keys. Ключ, который я только что создал
показывается так:
pub 1024D/0443FB22 2008-06-02
uid Anton Proshanin
sub 2048g/5F28F4F0 2008-06-02
0443FB22 в первой строчке, это id ключа. Если вы впоследствии захотите
обратиться к ключу в коллекции, то вам придётся указать либо его id,
либо какую-нибудь часть записи, которая позволит эго однозначно
идентифицировать.
Экспорт и импорт ключей
Давайте теперь экспортируем только что созданный ключ в текстовый файл.
После этого вы можете его разместить на своём вебсайте, или разослать своим
друзьям, и начинать обмениваться всякими секретами.
Следующая комманда экспортирует публичный ключ:
gpg --output mygpgkey_pub.txt --armor --export 0443FB22
mygpgkey_pub.txt - название файла, куда будет сохранён ключ;
--armor значит, что файл будет текстовым (по умолчанию создаётся бинарный).
Откройте файл в текстовом редакторе, у вас должно получиться нечто примерно
такое. (Да, да - это тот самый
ключ, который вы уже видели).
Вместо id можно использовать имя или емайл как полностью так и частично.
Например, комманды
gpg --output mygpgkey_pub.txt --armor --export Anton
или
gpg --output mygpgkey_pub.txt --armor --export anton@letras.ru
делают то же самое.
Если вам нужно перенести свой личный ключ на другой компьютер - скажем,
чтобы использовать тот же самый ключ на нескольких машинах, сделать это можно
так:
gpg --output mygpgkey_sec.txt --armor --export-secret-key Anton
Вот здесь, например, находится мой секретный ключ.
Чтобы импортировать ключи используйте следующие комманды:
gpg --import mygpgkey_pub.txt
gpg --allow-secret-key-import --import mygpgkey_sec.txt
Вопрос: ваш приятель прислал вам свой публичный ключ. Как его добавить в
коллекцию ключей на вашей машине?
Если вы читали внимательно, вы скажете: gpg --import filename.txt, и будете
правы, но чтобы пользоваться ключoм, вам ещё специфически надо указать,
что вы доверяете владельцу этого ключа.
Найдите ключ, который вы импортировали (gpg --list-keys). Дальше наберите
gpg --edit-key Anton (используйте имя владельца, или ид ключа). Откроется
незатейливый шелл клиент для редактирования ключа, куда вы сможете вбивать
разные комманды. Напишите trust Enter;, из списка выберите
"5 = I trust ultimately", написав 5 Enter . Потом quit Enter, чтобы выйти.
Вот теперь уже импортированным ключом можно пользоваться.
Шифрование
Ну наконец-то мы и добрались до самого главного. Шифруем!
gpg --recipient Anton --encrypt filename
--recipient - для кого шифруем (id публичного ключа, имя или емайл адрес,
которые позволяют выбрать ключ из копилки). По умолчанию к filename
добавляется расширение .gpg. Если вы хотите задать другое имя файла,
добавьте к комманде --output another_filename.gpg.
В результате файл будет зашифрован. В обычной ситуации никто, кроме получателя,
не сможет его расшифровать, даже вы сами. Но сейчас мы просто тестируем и вы
одновременно являетесь и получателем и отправителем, так что теперь вы можете
расшифровать файл, используя следующую комманду:
gpg --decrypt-files filename.gpg
Обратите внимание, что это не --decrypt, а --decrypt-files. Просто --decrypt
печатает результат в окно, где бежит ваша коммандная строка, а это не то, что
вы хотите. Gpg спросит ещё ваш секретный пароль, который вы указали, когда
создавали ключ. (Секретный ключ сам зашифрован этим паролем - Уфф!)
Если вам удалось расшифровать этот файл, то вы можете с гордостью сказать,
что вы умеете пользоваться ассиметричным шифрованием. Слова pgp и gpg не должны
у вас больше вызывать священного трепета. Если вам придётся создавать ключи для
других программ: например, Apache или Exim'a, вы уже знаете что при этом на
самом деле происходит.
Оригинал статьи находится здесь: http://letras.ru/2008/06/gpg-crossplatform-encryption/
А вот мне надо написать скрипт, который будет работать
по крону, автоматически. Шифровать там буду симметрично.
Какую команду прописать в этом скрипте, что скрипт сам вводил автоматически
секретное слово passphrase ?
Статья весьма поверхностная и не учитывает многие возникающие вопросы.
Например, абзац:
"Когда программа сообщит, что она хочет создать случайный набор байтов, вам надо изобразить на компьютере бурную активность: откройте браузер, посетите пару сайтов, бессмысленно поводите мышкой, напечатайте что-нибудь, послушайте mp3 файл."
Ну допустил, изобразил эту бурную деятельность - а дальше-то что?
Если продолжать эту деятельность долго, то генерация ключей закачивается ошибкой:
^[gpg: agent_genkey failed: Лимит времени
Key generation failed: Лимит времени
Если прервать ее по Ctrl-C, то тоже ничего хорошего -
^C
gpg: signal Interrupt caught ... exiting
И в первом, и во воторм случае ключи не созданы.
В-общем, понятно - автор забыл написать, чем нужно закончивать генерацию.
А если он посоветует обратиться к мануалу, то тогда вообще зачем его такая недоделанная статья?
по мнению автора, должна отображать следующую информацию:
pub 1024D/0443FB22 2008-06-02
uid Anton Proshanin
sub 2048g/5F28F4F0 2008-06-02
На самом деле она показывает несколько иное.
Из-за этих неясностей на этом и остановился.
Использую GPG версии 2.1.18.
Да, можно предположить, что авторская статья с момента ее публикации существенно устарела и не соотвествует новым версиям GPG.
Но зачем тогда держать на opennet.ru такой нафталиновый хлам?
Да и не только на opennet, все статьи, которые удалось найти на сайтах, не соответствует реальной работе GPG.
Неужели здесь некому выложить для GPG актуальную статью по ее использованию?
Кое-как удалось "протолкнуть" генерацию ключей.
Однако странное дело - используемая версия GPG 2.1.18 не спрашивает ни тип ключа, ни его длину, ни время жизни.
В то же время более старая версия 2.0.14 все это позволяет.