Використання pgp
Термінологія
Існує деяка плутанина в термінології. Наприклад, далеко не всі можуть чітко пояснити, чим PGP відрізняється від GPG. Давайте ж у всьому розберемося.
Часто, кажучи «PGP», люди мають на увазі спосіб шифрування, описаний в OpenPGP, і відповідно будь-яку з його реалізацій.
Основні команди GnuPG
Доброю ідеєю буде вибрати алгоритм RSA і довжину ключів 4096 біт.
Важливо! Не забудьте пароль від закритого ключа.
Часта проблема - повідомлення на кшталт такого:
Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 204 more bytes)
Вирішується вона установкою демона для збору ентропії:
sudo apt-get install rng-tools
Fingerprints використовуються в основному для перевірки того, що з сервера ключів (див далі) був імпортований дійсно правильний ключ. Для пошуку їх не використовують.
Для відображення більш безпечних довгих id використовуйте опцію keyid-format:
gpg --keyid-format LONG --list-keys
gpg --keyid-format 0xLONG -k 7EFE74E5
Короткі keyid зручні для маніпуляції з ключами локально. Для пошуку завжди слід використовувати довгі id і перевіряти fingerprints. В останніх версіях GPG довгі id використовуються за замовчуванням.
gpg --delete-secret-keys 8640D6B9
gpg --delete-keys 8640D6B9
Експорт відкритого ключа в текстовому вигляді (можна писати на всіх парканах):
gpg --armor --output pubkey.txt --export 8640D6B9
Експорт закритого ключа в текстовому вигляді (ключ все ще зашифрований майстер-паролем, можна використовувати для бекапа в Git):
gpg --armor --output privkey.txt --export-secret-keys 8640D6B9
Імпорт відкритого ключа:
gpg --allow-secret-key-import --import privkey.txt
Якщо не вказати --alow-secret-key-import. імпортується тільки відкритий ключ, і при спробі підписати щось ви будете отримувати дивні помилки на кшталт:
gpg: no default secret key: secret key not available
gpg: msg.txt: sign + encrypt failed: secret key not available
Експорт відкритого ключа на keyserver:
gpg --keyserver pgp.mit.edu --send-keys 8640D6B9
Не має великого значення, який keyserver вказати. Наприклад, ще є keys.gnupg.net, а також інші. Всі вони час від часу обмінюються один з одним даними. Не позбавлене сенсу зробити send-keys відразу на кілька серверів, щоб їх швидше побачили всі користувачі PGP / GPG. Синхронізація серверів, за моїми спостереженнями, займає хвилин 10-15.
Hint: щоб постійно не вказувати --keyserver. просто допишіть в
alias gpg = "gpg --keyserver pgp.mit.edu"
Імпорт відкритого ключа з keyserver:
gpg --keyserver pgp.mit.edu --search-keys afiskon @ example.ru
У світі PGP / GPG існують так звана мережа довіри (web of trust). У двох словах це означає, що GPG не довіряє ключу, якщо тільки він не підписаний кимось, кому ви довіряєте. Крім того, якщо ви довіряєте Петі, а Петя довіряє Колі, то ви автоматично довіряєте Колі. Зокрема, під час перевірки підпису і інших діях GPG буде лаятися так:
WARNING: This key is not certified with a trusted signature!
There is no indication that the signature belongs to the owner.
Щоб виправити це, говоримо:
gpg --edit-key afiskon @ example.ru
Потім в діалозі говоримо trust. тиснемо 5 ( «I trust ultimately»), говоримо quit. Інші ключі можна підписати командою tsign. До речі, там же можна змінити пароль від вашого ключа (команда passwd), змінити дату експірації ключа в будь-яку сторону (команда expire), додати ім'я / email (команда adduid), видалити ім'я / email (команда revuid), подивитися алгоритми шифрування, які використовуються за замовчуванням (showpref) і робити інші цікаві речі.
Примітка: Що робити, коли ключ заекспайрілся? В цьому випадку можна змінити дату експірації на більш пізню і перезаліть ключ. Або ж створити новий ключ, підписати його старим, і залити новий ключ на keyserver. Робити revoke не потрібно.
Ви можете підписати чий завгодно ключ і залити підписаний ключ на сервер, підтвердивши тим самим, що ключ дійсно належить людині, зазначеного в описі:
gpg --sign-key 7EFE74E5
gpg --keyserver pgp.mit.edu --send-keys 7EFE74E5
На якийсь інший машині можна скачати ключ заново і подивитися, ким він підписаний:
gpg --keyserver pgp.mit.edu --search-keys eax @ example.ru
gpg --list-sigs eax @ example.ru
gpg --check-sigs eax @ example.ru
Час від часу варто оновлювати ключі, на випадок, якщо у ключів з'явилися нові підписи, або якісь ключі відкликали:
gpg --keyserver pgp.mit.edu --refresh-keys
Приклад шифрування і підпису файлу для заданого одержувача (ключ -r можна вказувати багато разів):
gpg --encrypt --sign --armor -r eax @ example.ru msg.txt
Розшифровка файлу і перевірка підпису здійснюється командою:
Приклад підпису і перевірки підпису бінарного файлу (наприклад, ISO образу диска):
gpg --detach-sign file.iso
gpg --verify file.iso.sig
Симетричне шифрування / дешифрування файлу (зручно, наприклад, для зберігання паролів):
gpg -o nonsense.gpg --cipher-algo AES -a -c nonsense.txt
gpg -o nonsense2.txt -d nonsense.gpg
Симетричне шифрування зі збереженням в бінарному форматі (зручно для шифрування резервних копій):
tar -cvzf - / home / eax | \
gpg --symmetric --cipher-algo AES256 --digest-algo SHA256 \
--compression-algo Uncompressed> backup.tgz.gpg
Розшифровка зашифрованого таким чином файлу:
gpg --decrypt backup.tgz.gpg | tar -xvzf -
При цьому за замовчуванням GPG запитує пароль через GUI інтерфейс, що я особисто знаходжу не дуже-то зручним. Змінити дану поведінку можна так:
echo 'pinentry-program / usr / bin / pinentry-tty' >> \
/ .gnupg / gpg-agent.conf
killall gpg-agent
Може виявитися, що ваш закритий ключ скомпрометований, тобто, його вкрали і підібрали до нього пароль. Або ж ви втратили його. Або просто не можете згадати пароль від ключа. Для таких випадків передбачено відкликання ключа. Робиться це так. Заздалегідь, відразу після створення ключів, потрібно створити сертифікат відкликання:
gpg --gen-revoke --armor --output = revocation.crt eax @ example.ru
Використовуючи його, ключ можна відкликати так:
gpg --import revocation.crt
gpg --keyserver pgp.mit.edu --send-keys 7EFE74E5
Важливо! Сертифікат відкликання не шифрується і може бути використаний будь-ким. Переконайтеся, що зберігаєте його в надійному місці (краще навіть в декількох таких місцях) і неодмінно в зашифрованому вигляді!
Прикручуємо GnuPG до Claws Mail
В Ubuntu нам знадобляться наступні пакети:
sudo apt-get install claws-mail-pgpinline claws-mail-pgpmime
З косяків плагіна я зіткнувся тільки з тим, що в налаштуваннях потрібно вказати повний шлях до виконуваного файлу gpg, після цього все запрацювало.
Прикручуємо GnuPG до Mutt
Щоб GPG заробив в Mutt. в
# Включаємо підтримку GPG
set crypt_use_gpgme = yes
# По дефолту підписувати всі повідомлення
set crypt_autosign = yes
# Шифрувати відповіді на зашифровані повідомлення
set crypt_replyencrypt = yes
При написанні листа тиснемо p. там вибираємо опції - підписати, зашифрувати, і так далі. Всі опції crypt_ * і pgp_ * описані в man muttrc. Плюс до цього тут є довга рядок. завдяки якій Mutt можна навчити перевіряти підписи для inline повідомлень.
Мій повний і підтримуваний в актуальному стані варіант конфіга для Mutt знаходиться тут.
висновок
GPG прикручується ще дуже багато до чого. Скажімо, для Thunderbird є плагін Enigmail. Існують мобільні додатки з підтримкою GPG. Наприклад, для iPhone є oPenGP і iPGMail. Крім того, існують плагіни і для IM-клієнтів, зокрема, для Psi. На жаль, розглянути їх усі в рамках однієї статті не представляється можливим.
В якості домашнього завдання можете додати мене до свого keyring, підписати мої ключі і відправити мені на email зашифрований лист.
А чи використовуєте ви PGP / GPG?