Використання 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?

Сподобався пост? Поділися з іншими: