CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Gnuтый PGP

Сергей aka Gray ГУЛЕНОК graywolf@ukrpost.net

Тема защиты информации, передаваемой по Сети, становится все более и более актуальной. Для шифровки и подписи передаваемых данных часто используется инструмент под названием PGP (Pretty Good Privacy). О работе с этим стандартом в ОС Linux (ну, и во FreeBSD заодно) и пойдет речь в статье.

Реализация технологии PGP в Linux называется GnuPG (GNU Privacy Guard). Этот сервис может быть использован для шифровки данных и цифровой подписи документов. Здесь я не буду детально останавливаться на том, что собой представляет PGP; если вы еще не знакомы с принципами его работы, прошу посетить, например, http://www.pgpru.com. Утилита, посредством которой будут производиться махинации :-) с ключами, называется gpg. Более детально о ней можно почитать в man gpg. Мы же рассмотрим базовые приемы работы с ней.

Итак, для начала нам нужно создать пару ключей (keypair): секретный (private) — тот, который должен быть у вас и только у вас, и открытый (public) — тот, который вы распространяете среди тех, с кем вы планируете вести безопасную переписку. Создание ключа производится с помощью комманды --gen-key.

Итак, gpg предлагает нам на выбор четыре типа ключей (поддерживается и больше, но первичный ключ должен подходить для создания цифровой подписи). Ну что ж, начнем с простенького —подписей, выберем вариант 5 (можно и 2).

Далее gpg запрашивает размер ключа. По умолчанию 1024? Ладно, пойдет. Вообще-то размер ключа DSA имеет размер от 512 до 1024 бит, а RSA и ElGamal — неограниченный. Размер ключа влияет на его качество (более длинный ключ тяжелее расшифровать) и на скорость шифровки/расшифровки данных. Кстати, размер нельзя будет изменить после создания ключа.

Далее нужно задать срок действия ключа. Мы не параноики — подойдет и бессрочный ключ. Ставим 0.Теперь нужно ввести и информацию о пользователе ключа. Информация эта состоит из имени, почтового адреса и комментария. Вводим ее аккуратно, ведь идентификатор пользователя не может быть изменен после создания ключа. Эта информация связывает ключ с введенным пользователем.

Наконец вводим контрольную фразу — проще говоря, пароль для защиты ключей. Длина не ограничена, тоже нужно подбирать очень аккуратно — если у вас стянут ваш private-key, это будет последний рубеж обороны от взлома секретного ключа.

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

Как видим, существующий открытый ключ связан с пользователем vasya, e-mail которого —vasya@localhost. Поле комментария я оставил пустым, поэтому он тут и не выводится.

Для того чтобы начать переписку, нам нужно отправить желаемому адресату наш открытый ключ (public key). Он хоть и создан, но хранится во внутреннем формате gpg, а нам нужно получить его в транспортабельном виде. Для этого существует команда --export. При вызове ей нужно передать идентификатор пользователя, ключ которого мы экспортируем. Кроме того, необходимо указать файл, куда выводить результаты, с помощью команды --output, потому что по умолчанию — стандартный выход, то есть консоль. И еще нужно указать параметр --armor (или его алиас -a), чтобы результат выдавался в ASCII-формате, который чаще всего используется для передачи ключей по электропочте. Для нашего варианта это выглядит примерно так:

Файл vasya.key будет содержать информацию примерно такого вида:

Теперь можете разослать этот файл тем, с кем вы желаете вести безопасную переписку.

А что если вам пришел открытый ключ? Как включить его в связку открытых ключей вашего GnuPG? Все достаточно просто. Нужно воспользоваться командой --import.

Смотрим:

Как видим, у нас появился еще один открытый ключ от пользователя с идентификатором petya. Теперь неплохо было бы проверить, точно ли это petya нам ключ прислал? Для этого нужно сравнить так называемые «отпечатки пальцев» ключа (fingerprint). Делается это командой --fingerprint:

Получив отпечаток, можно при личной встрече сравнить их на предмет подлинности. Если все ОК, то можно подписать (заверить нотариально :-)) импортированный ключ как ваш собственный, чтобы злоумышленник не мог его изменить. Для этого переходим в режим редактирования ключа petya (этот режим, кстати, интерактивен):

И набираем команду sign, которая подписывает импортированный ключ в нашу собственность.

Дальше gpg пожелает убедиться, насколько тщательно мы проверили отпечатки. Это секрет, и мы ничего не скажем, а поэтому выбираем 0. Еще раз вводим наш пароль, и все. Подпись petya ныне нами утверждена. Ура! А вот как заверенные подписи отображаются по команде check:

Это можно было сделать и из командной строки. Нужно было лишь воспользоваться командой --sign-key.

OK. Значит, теперь мы можем подписывать наши файлы. Для этого используется команда --clearsign. Например:

gpg предлагает нам ввести пароль для разблокировки секретного ключа для vasya. Вводим этот пароль, а теперь можно набрать некоторый текст, завершив ввод нажатием Ctrl+D. В результате в файле f.signed получим подписанный документ. Если после команды --clearsign указать название файла, то зашифровываться будет указанный файл, а не введенный вами в консоли текст.

В результате можно получить следующее:

Теперь можно проверить подпись документа. Она производится командой --verify.

Гуд так гуд. Если документ имел бы отличия, то было бы что-то типа

Если же вы не хотите портить документ, вставляя в него подпись, то можете сбросить ее в отдельный файл и транспортировать отдельно от самого документа. Получить файл с подписью можно с помощью команды --detach-sign (или ее алиаса -b). Кстати, при проверке подписи команде --verify тогда нужно указывать оба файла: как файл подписи, так и документ.

Ну и наконец самое интересное —шифрование документов. Так как в примере мы создали ключ, который поддерживает только подпись, нам необходимо создать подключ, который будет осуществлять шифровку. Чтобы это сделать, используется следующая последовательность действий в интерактивном режиме редактирования ключа:

Команда addkey добавляет подключ к связке ключей.

Здесь мы опять набираем пароль. Безопасность, однако. И опять нам на выбор доступны варианты:

Нам подходят варианты 3 и 6. Ну а дальше все аналогично созданию ключа с помощью --gen-key. Завершается создание ключа сохранением изменений при выходе из интерактивного режима.

Подключ для шифрования готов. Его наличие можно проверить командой --list-keys.

Осталось научится шифровать и расшифровывать информацию. Итак, допустим, некто (тот же petya, например) прислал нам свой открытый ключ. Будем считать, что мы его уже импортировали, ведь процедура импорта ключа рассматривалась выше, — остановимся детальнее на шифровании. Для шифрования воспользуемся командой --encrypt. Кроме нее gpg необходимо еще передать, какой именно открытый ключ мы будем использовать для шифровки, поскольку их у нас может быть несколько. Поэтому указываем опцию --recipient (или просто -r), и ей в качестве параметра передаем идентификатор пользователя ключа (в качестве идентификатора, кстати, можно использовать и почтовый адрес). Если желаете видеть результат в текстовом формате, не забывайте про --armor. Все это выглядит примерно так:

Расшифровать файл можно командой --decrypt. Например вот так:

Так, поэкспериментировали с ключиками, пора и убрать за собой. Для этого используются команды --delete-key и --delete-secret-key. Первая используется для удаления открытых ключей, которые вы импортировали.

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

Чтобы не набирать эти две команды, можно воспользоваться одной: --delete-secret-and-public-key:

Если же у пары ключиков есть подключи, то они удаляются в режиме редактирования ключа. Сначала необходимый подключ выбирается командой key <номер ключа> (выбранный ключ отмечается звездочкой), а потом удаляется командой delkey. Пример:

Кстати, команды --delete-* сносят ключи вместе с подключами.

Ну вот, в принципе, и все. На этом основы работы с gpg заканчиваются. Реально в работе вам придется в основном создавать, импортировать и экспортировать ключи (сейчас существуют и фронт-энды к gpg, например Kgpg, которые значительно упрощают работу с ней). Прикладные программы, например те же почтовые клиенты, как правило имеют встроенные средства работы с gpg по части шифрования и подписей. Если же вы хотите встроить в свою программу возможность работы с gpg, вам понадобятся пакеты pgpme и pgpme-devel, представляющие собой набор функций для работы с gnupg из ваших программ. Но это уже другая история...

Если вы заинтересовались работой с PGP загляните сюда: http://www.arh.ru/~zwon. Документация здесь более полна и более профессиональна, поскольку это перевод официального The GNU Privacy Handbook, оригинал которого можно найти по адресу http://www.gnupg.org/docs.html. Кроме того, почитайте FAQ, который идет с GnuPG. Там вы найдете ответы на многие интересные вопросы (например, по поводу совместимости GnuPG и PGP 2.x и PGP 5.x). И пусть ваша информация остается конфиденциальной.

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov