GNU Privacy Guard, GnuPG, GPG — свободная альтернатива набору криптографического ПО PGP, выпущенная под лицензией General Public License. Является частью проекта GNU, получила гранты от Германского правительства. GnuPG полностью совместим со стандартом IETF OpenPGP. Текущие версии GnuPG могут взаимодействовать с PGP и другими OpenPGP-совместимыми системами в режиме совместимости. GnuPG позволяет шифровать и подписывать данные в целях безопасного хранения и передачи информации
Если у вас возникла необходимость зашифровывать файлы на линуксе, а расшифровывать на Windows, или наоборот, вам нужно найти программу для шифрования, которая работала бы на обеих системах. Стандарной программой для шифрования на линуксе является PGP – Pretty Good Privacy. Она бесплатна для частных лиц, но для использования её в коммерческих целях требуется лицензия. Полностью открытый аналог этой программы GPG – Gnu Privacy Guard – делает то же самое, но абсолютно бесплатно, поэтому ею я и рекомендую пользоваться.
Для gpg существуют графические фронт-енды, которые существенно облегчают жизнь новичкам, но поскольку мы собираемся работать и на линуксе, то
Продолжение:
мы будем разбираться с оригинальной версией программы, которая запускается с коммандной строки.
Возможно, что gpg уже установлен на вашей линукс машине. Чтобы это проверить, запустите следующую комманду
gpg --version.
Если программа не установлена, установите её, используя менеджер пакетов, например для Дебиана:
pacman -S gpg
Дистрибутив для Windows можно скачать отсюда (2.1 Мб). Для удобства добавьте директорию, в которой после установки находится файл gpg.exe в системный путь/PATH.
Симметричное шифрование.
Обычная ситуация, когда у вас есть секретный пароль, который вы используете, для того чтобы зашифровать и расшифровать файл, называется симметричным шифрованием. Им пользоваться проще всего.
Зашифровать файл:
gpg -c filename
Расшифровать файл:
gpg --decrypt-files filename.gpg
В обоих случаях программа попросит вас ввести пароль. К названию зашифрованного файла добавляется расширение .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 , из списка выберите “5 = I trust ultimately”, написав 5 . Потом quit , чтобы выйти. Вот теперь уже импортированным ключом можно пользоваться.
Шифрование.
Ну наконец-то мы и добрались до самого главного. Шифруем!
gpg --recipient Anton --encrypt filename
—recipient – для кого шифруем (id публичного ключа, имя или емайл адрес, которые позволяют выбрать ключ из копилки). По умолчанию к filename добавляется расширение .gpg. Если вы хотите задать другое имя файла, добавьте к комманде —output another_filename.gpg.
В результате файл будет зашифрован. В обычной ситуации никто, кроме получателя, не сможет его расшифровать, даже вы сами. Но сейчас мы просто тестируем и вы одновременно являетесь и получателем и отправителем, так что теперь вы можете расшифровать файл, используя следующую комманду:
gpg --decrypt-files filename.gpg
Обратите внимание, что это не —decrypt, а —decrypt-files. Просто —decrypt печатает результат в окно, где бежит ваша коммандная строка, а это не то, что вы хотите. Gpg спросит ещё ваш секретный пароль, который вы указали, когда создавали ключ. (Секретный ключ сам зашифрован этим паролем – Уфф!)
Если вам удалось расшифровать этот файл, то вы можете с гордостью сказать, что вы умеете пользоваться gpg и уже знакомы с ассиметричным шифрованием. Слова pgp и gpg не должны у вас больше вызывать священного трепета. Если вам придётся создавать ключи для других программ: например, Apache или Exim’a, вы уже знаете что при этом на самом деле происходит.
По мотивам: http://letras.ru/2008/06/gpg-crossplatform-encryption