Входе переписки с некоторыми персоналиями выяснилось, что они до сих пор не умеют пользоватся GPG, а точнее шифровать файлы.
Большинство разумного человечества и представителей других рас здесь ничего нового не узнает, те же кто не умеет читать инструкции по эксплуатации, подчерпнут здесь основы работы с GPG в консоли.
Прежде всего нужно установить GPG если оно не установлено по умолчанию. Тарболы можно скачать с оффсайта – gnupg.org. Однако, вместо компиляции исходников, некоторые предпочитают пакетные менеджеры.
Linux’ы на основе Red Hat:
yum install pgp |
В Debian’ах:
apt-get install pgp |
генерация ключей
Прежде всего хочется отметить, что GPG имеет возможность делать как ключи для симметричного шифрования, так и для несимметричного. Разница в том, что в первом случае один ключ подходит как для шифрации, так и для дешифрации, а во-втором открытым ключом можно только шифровать, а закрытым можно расшифровать.
Для нас большую ценность представляет несимметричное шифрование т.к. оно круче.
Итак, генерируем ключи. Под root’ом это делать или нет разницы, ну кроме того что у файлов ключей будут права рутовские или нет.
$ gpg --gen-key gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Выберите тип ключа: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (только для подписи) (4) RSA (только для подписи) Ваш выбор (?-подробнее)? |
Здесь я обычно либо ввожу 1, либо оставляю по умолчанию.
ключи RSA могут иметь длину от 1024 до 4096 бит. Какой размер ключа Вам необходим? (2048) |
Здесь чем больше тем лучше, но 2048 тоже круто и достаточно.
Запрашиваемый размер ключа 4096 бит Выберите срок действия ключа. 0 = без ограничения срока действительности = срок действительности n дней w = срок действительности n недель m = срок действительности n месяцев y = срок действительности n лет Ключ действителен до? (0) Ключ не имеет ограничения срока действительности Все верно? (y/N) y |
Вводим срок действия и подтверждаем введенные данные.
Для идентификации Вашего ключа необходим User ID Программа создаст его из Вашего имени, комментария и адреса e-mail в виде: "Baba Yaga (pensioner) " Ваше настоящее имя: antonio Email-адрес: antonio@mail.com Комментарий: fjkgjdg Вы выбрали следующий User ID: "antonio (fjkgjdg) " Сменить (N)Имя, (C)Комментарий, (E)email-адрес или (O)Принять/(Q)Выход? O |
Отвечаем на вопросы GPG, честно отвечая на вопросы.
Для защиты секретного ключа необходим пароль. Необходимо сгенерировать много случайных чисел. Желательно, что бы Вы выполняли некоторые другие действия (печать на клавиатуре, движения мыши, обращения к дискам) в процессе генерации; это даст генератору случайных чисел возможность получить лучшую энтропию. .............................+++++ ....+++++ Необходимо сгенерировать много случайных чисел. Желательно, что бы Вы выполняли некоторые другие действия (печать на клавиатуре, движения мыши, обращения к дискам) в процессе генерации; это даст генератору случайных чисел возможность получить лучшую энтропию. ......+++++ ....+++++ gpg: ключ 6A189DDA помечен как абсолютно доверяемый. открытый и закрытый ключи созданы и подписаны. gpg: проверка таблицы доверий gpg: 3 ограниченных необходимо, 1 выполненных необходимо, PGP модель доверия gpg: глубина: 0 корректных: 1 подписанных: 0 доверия: 0-, 0q, 0n, 0m, 0f, 1u pub 4096R/6A189DDA 2010-10-28 Отпечаток ключа = 404B 5DD8 79F1 7AD9 7FA7 2B7A 2E1C FEB7 6A18 9DDA uid antonio (fjkgjdg) sub 4096R/664BC16D 2010-10-28 |
Вводим пароль и запоминаем его. Когда GPG просит сделать какие-нибудь действия берем мышку в руки и внимательно вырисовываем ей амперсант, затем тильду и букву ‘Ё’.
Теперь проверяем, вывод должен быть примерно такой:
$ gpg --list-keys /home/your_username/.gnupg/pubring.gpg --------------------------- pub 4096R/6A189DDA 2010-10-28 uid antonio (fjkgjdg) sub 4096R/664BC16D 2010-10-28 |
экспорт ключей
После того как ключи сгенерированы, в случае если они вам на долго, то их можно сохранить.
открытый ключ
gpg --export -armor -o pub.asc |
Если убрать -armor то ключ экспортируется в бинарном виде.
закрытый ключ
gpg --export-secret-key -armor -o sec.asc |
Теперь у вас в текующей директории должно быть 2 файла: sec.asc и pub.asc.
шифрование и дешифрование файлов
шифрование
Для примера я зашифрую файл test.rb:
$ gpg -e test.rb > test.rb.gpg Не задан User ID. (можете использовать "-r") Текущие получатели: Введите User ID. Пустая строка для завершения: antonio Текущие получатели: 4096R/664BC16D 2010-10-28 "antonio (fjkgjdg) " |
Если не перенаправлять вывод, то содержимое зашифрованного файла выведется на стандартный вывод т.е. экран консоли.
дешифрование
$ gpg -d test.rb.gpg > test222.rb Необходим пароль для доступа к секретному ключу пользователя: "antonio (fjkgjdg) " 4096-бит RSA ключ, ID 664BC16D, создан 2010-10-28 (главный ключ ID 6A189DDA) gpg: зашифровано 4096-битным ключом RSA, с ID 664BC16D, созданным 2010-10-28 "antonio (fjkgjdg) " |
При расшифровке потребуется пароль, ситуация с перенаправлением вывода такая же как и с шифрованием.
Теперь для того чтобы передать сверхважную информацию (а я уверен что у вас только такая инфа и есть) другу через открытый канал, например icq, необходимо вашему дружку скинуть открытый ключ, который мы предусмотрительно экспортировали в файл pub.asc. Друг у себя на компе зашифрует файл и отправит вам, который вы расшифруете закрытым ключом.
удаление ключей
После того как вы получили необходимый файл от другана и прочитали его, заметаем следы и удаляем ключи.
Сначала нужно удалить секретный ключ, просто потому что иначе GPG не даст это сделать.
$ gpg --delete-secret-keys antonio gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. sec 4096R/6A189DDA 2010-10-28 antonio (fjkgjdg) Удалить данный ключ из таблицы ключей? (y/N)y Это секретный ключ! - действительно удалить? (y/N)y |
Теперь удаляем открытый ключ:
$ gpg --delete-keys antonio gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. pub 4096R/6A189DDA 2010-10-28 antonio (fjkgjdg) Удалить данный ключ из таблицы ключей? (y/N)y |
И проверяем, что все удалено:
$ gpg --list-keys
gpg: проверка таблицы доверий
gpg: не найдено абсолютно доверяемых ключей |
Видите как все просто, и ни в коем случае не надо передавать закрытый ключ!