GnuPG: шифрование для честного гражданина
В данном ликбезе познакомимся и рассмотрим основные принципы работы и возможности GnuPG, как наиболее доступного средства для шифрования и защиты личных данных.
Шифрование для всех
На первый взгляд, практические вопросы защиты и шифрования личных данных интересны только работникам спецслужб и криминальным авторитетам, а для простого гражданина вся эта криптография представляет исключительно познавательный интерес. Как говорится, честному человеку нечего скрывать от жены и родного правительства.
На самом деле у каждого бывают случаи, когда нужно скрыть содержимое отдельных файлов на своём диске. Или же нужно передать данные другому лицу, прикрыв их от посторонних глаз, вот как бумажный конверт прикрывает письмо. Просто обычному пользователю подобные криптографические функции нужны нечасто, от случая к случаю. Соответственно, каждому не помешает иметь под рукой программу, способную решить все типовые задачи по шифрованию данных.
Есть такая программа
В качестве доступного и эффективного криптографического средства следует однозначно назвать утилиту GnuPG - Gnu Privacy Guard. Эта утилита распространяется под лицензией General Public License (GPL) и присутствует практически в любом дистрибутиве. Есть даже версия для Windows.
GnuPG является консольной программой, Хотя, конечно, уже есть и графические оболочки для работы с этой утилитой. Программа также используется как вспомогательная утилита в других приложениях, требующих шифрования. Однако для изучения основ лучше познакомиться именно с консольной версией.
GnuPG хороша тем, что способна решить все типовые криптографические задачи - шифрование файла на диске, защищённый обмен файлами, цифровая подпись для файлов и управление ключами и паролями для шифрования. Утилита поддерживает большое количество алгоритмов шифрования: RSA, RSA-E, RSA-S, ELG-E, DSA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH и др.
Однако честному гражданину вникать в особенности этих протоколов нет необходимости. Создатели GnuPG - это честные парни, и для всех операций программа предлагает по умолчанию оптимальные и разумные параметры и алгоритмы. Так что, установив в системе GnuPG, можно сразу приступать к операциям.
Шифруем файл на диске
Самое простое - это симметричное шифрование файла. Симметричное шифрование означает, что каким паролем вы зашифровали файл, тем же паролем и нужно расшифровывать.
Шифрование делается командой:
$ gpg -c имя_файла
Программа попросит ввести пароль с подтверждением и зашифрует файл, добавив к нему расширение gpg.
Расшифровываем файл командой:
$ gpg --decrypt-files имя_файла
Передаём секретные файлы
Симметричное шифрование не очень хорошо подходит для обмена зашифрованными данными через Интернет. Ведь с зашифрованным файлом придётся как-то передавать и сам пароль. Поэтому для данного случая умные математические головы придумали асимметричное шифрование.
Суть асимметричного шифрования заключается в том, что для шифрования данных используется один пароль, а для расшифровки - другой. Расшифровать данные одним и тем же паролем нельзя. Это позволяет обеспечить конфиденциальность передачи данных по следующей схеме:
- Получатель передаёт свой первый пароль отправителю.
- Отправитель шифрует этим паролем данные и передаёт получателю.
- Получатель для расшифровки использует свой второй пароль.
Связка этих двух паролей и называется асимметричным ключом. Один ключ из этой связки делается публичным и раздаётся всем желающим, а второй ключ называется закрытым и прячется в системе.
Создаём асимметричный ключ
Для генерации асимметричного ключа при помощи GnuPG нужно выполнить команду:
$ gpg --gen-key
Программа сначала предложит выбрать параметры ключа. Обычному пользователю можно согласиться с параметрами по умолчанию. Потом будет предложено выбрать срок действия ключа.
После выбора срока действия программа предложит создать User-ID, посредством которого можно производить управление ключами. Для генерации UID нужно ввести своё имя, адрес электронной почты и комментарий, а также пароль для доступа к закрытому ключу. После генерации GnuPG выведет приблизительно такие данные о вашем публичном и закрытом ключе:
pub 1024D/9CF8754C 2010-01-08
uid Mihail (honest) <[email protected]>
sub 2048g/213F88AE 2010-01-08
Здесь pub и sub - это, соответственно, открытый и закрытый ключи, а 9CF8774C и 413F88AE - их идентификаторы.
Управляем ключами
Сгенерировав ассиметричный ключ, прежде чем бежать отправлять секретную информацию, как Юстас Алексу, следует научиться управлять этой своей связкой ключей.
Посмотреть наличествующие ключики можно командой:
$ gpg --list-keys
Чтобы передать свой публичный ключ друзьям, его надо импортировать и сохранить в файл:
$ gpg --output mykey.txt --armor --export Mihail
В качестве имени публичного ключа здесь можно употреблять заданные при генерации uid почтовый адрес, комментарий или непосредственно идентификатор.
В результате импорта получится увесистый "золотой ключик" размером около двух килобайт. Его можно передать как файл или же просто скопипастить в свой блог или на сайт.
Чтобы импортировать ключ друга, нужно выполнить команду:
$ gpg --import friendkey.txt
Бывают случаи, когда нужно перенести свою связку ключей на другой компьютер. Для этого нужно экспортировать свой закрытый ключ:
$ gpg --output seckey.txt --armor --export-secret-key
Устанавливается секретный ключ следующим образом:
$ gpg --allow-secret-key-import --import seckey_sec.txt
Свой открытый ключ и открытые ключи друзей устанавливаются через gpg -import. И теперь, можно сказать, Юстас вполне готов передавать Алексу секретную информацию.
Шифрование
Теперь можно зашифровать файл публичным ключом друга и передать данные через Интернет, не боясь, что содержимое файла прочтёт какой-нибудь товарищ майор или недремлющий правообладатель:
$ gpg --recipient друг --encrypt файл
При шифровании желательно добавить опцию --output с указанием другого имени для зашифрованного файла.
Расшифровка файла, зашифрованного публичным ключом, делается так:
$ gpg --decrypt-files файл
Вот и всё шифрование.
Электронная подпись
GnuPG можно использовать не для шифрования, а для создания цифровых подписей к документам. Цифровая подпись удостоверяет создателя и дату создания документа. Если в документ были внесены изменения, то проверка по цифровой подписи обнаружит несоответствие.
Для примера создадим отдельную цифровую подпись файла документа:
$ gpg --output document.doc.sig --etach-sign document.doc
В данном примере будет создан файл doc.sig, являющийся цифровой подписью файла document.doc.
Для проверки подписи необходимы и подпись, и сам документ. Проверка по подписи осуществляется следующей командой:
$ gpg --verify document.doc.sig
Если проверка была успешной, то GnuPG выведет сообщение о дате создания подписи документа и информацию о владельце закрытого ключа. В ином случае GnuPG объявит подпись плохой.
Вот и все основные понятия и операции, которые желательно усвоить начинающему пользователю Linux при знакомстве с GnuPG. А для более детального освоения - очень хороший русифицированный man.
Михаил АСТАПЧИК
Горячие темы