Сама по себе тема шифрования довольно объёмна и может занять целый курс университета. Попробуем кратко раскрыть тему в разрезе прикладного использования. Итак, gpg шифрование.
Что такое GPG?
GPG (GNU Privacy Guard, GnuPG) это программа для шифрования информации. Была разработана в качестве альтернативы не «свободной» PGP. Выпущена GPG под свободной лицензией и является полной альтернативой PGP. Использует пару ассиметричных ключей и непатентованные алгоритмы (AES, 3DES, CAST5, Blowfish и Twofish) шифрования.
Как это работает?
Принцип работы GPG шифрования заключается в генерации и использовании пары ассиметричных ключей (открытий и закрытый). Открытый ключ можно выкладывать где угодно и посылать кому угодно, так как он может быть использован только для шифрования. Расшифровать им уже не получиться (в этом и состоит принцип асинхронного шифрования), для расшифровки нужен закрытый (приватный) ключ.
Симметричное шифрование с утилитой GPG
Основа pgp-технологии это асимметричное шифрование. Хотя, есть возможность шифрования файлов с помощью пароля (симметричное шифрование): gpg -c file.name
, утилита запросит пароль:
После ввода пароля будет создан файл с расширением .gpg
(исходный файл при этом удален не будет — останется в неизменном виде). Кроме того, будет осуществлено сжатие конечного файла (по умолчанию используется zlib, но можно поменять в настройках конфигурации на zip или bzip2).
Для расшифровки нужно набрать gpg file.name.gpg
после ввода пароля файл будет расшифрован и записан без расширения .gpg
Можно использовать ключ -d для расшифровки, но тогда надо перенаправлять вывод в файл: gpg -d file.name.gpg > file.name
или использовать опцию --output
Асимметричное шифрование
Чтобы начать работу, необходимо сгенерировать пару ключей для ассиметричного шифрования: gpg --gen-key
или gpg --full-generate-key
для полного контроля над процессом. Программа запросит тип ключа (RSA или DSA — рекомендация: RSA), длину ключа, срок действия (если 0, то бессрочно), ваше имя и E-mail. Далее, gpg запросит задать пароль на ключ, но если вы будете использовать ключи в автоматическом режиме — оставьте пустыми пароли:
или же задайте пароль для большей защиты. В любом случае, обеспечьте сохранность приватного ключа. Посмотреть доступные ключи можно командой: gpg --list-keys
или --list-secret-keys
, для просмотра приватных ключей
Шифрование
Для шифрования файлов можно использовать gpg -e -r uid file.for.encrypt
, но лучше использовать совместно с утилитой tar -cf - file.or.directory | gpg -e -r uid -o file.tar.gpg
, где uid это ваше имя (или имя импортированного ключа), которое вы использовали при генерации ключа. Если вы не устанавливали пароль, то процесс можно автоматизировать, например, для создания бэкапа и отправки его на не слишком доверительный файл-сервер для хранения. Расшифровать такой архив без закрытого ключа не получится за обозримое будущее. Для дешифровки нужно использовать команду: gpg filename.gpg
или gpg -d filename.tar.gpg | tar -x
, если использовали tar при шифровании (опция -d обязательна).
Экспорт и импорт ключей
Если вы обмениваетесь файлами или сообщениями с кем-либо, то для сохранения приватности есть смысл обменяться публичными ключами. Для экспорта своего публичного ключа надо воспользоваться командой: gpg -a -o filename.asc --export uid
, где:
- -a (—armor) экспорт в ASCII формате, для отправки по E-mail, например (иначе будет сформирован бинарный файл);
- -o (—output) вывод в файл, иначе в STDOUT;
- —export — собственно, опция экспорта;
- uid — идентификатор ключа, если не задать, то будут экспортированы ВСЕ ключи.
Порядок опций важен! Именно такой надо использовать. Если поместить —export в начало, то выведет в STDOUT в бинарном формате.
Для импорта ключа используйте: gpg --import filename.asc
Далее, неплохо задать уровень доверия к ключу: gpg --edit-key
далее запустится интерактивная оболочка. Где можно делать разные манипуляции с ключом (команда help в помощь), нас интересует команда trust Выход по команде quit
Подписи
Кроме шифрования gpg умеет подписывать файлы как совместно с шифрованием, так и без него. Это может быть полезно при передаче разных файлов с уверенностью что никто не внёс никакие изменения, например, не добавил свой кусок кода. При верификации изменённого файла подпись не сойдется. Команды подписи: gpg --sign
file.name