Записки програміста
Використання PGP/GPG, посібник для нетерплячих
Ця стаття є коротким посібником з використання GnuPG (він же GPG). У ній ви знайдете основні команди, приклади використання, а також інструкції щодо прикручування GPG до поштових клієнтів. Далі передбачається, що ви знайомі з принципом роботи GPG і пояснювати, наприклад, що таке асиметрична криптографія, відкритий і закритий ключ, цифровий підпис і таке інше не потрібно. За кілька десятиліть існування GPG ніхто особливо не досяг успіху в його зломі, що начебто натякає нам, що це досить надійне рішення як для обміну зашифрованими повідомленнями, так і просто шифрування файлів.
Термінологія
Існує деяка плутанина у термінології. Наприклад, далеко не всі можуть пояснити, чим PGP відрізняється від GPG. Давайте ж у всьому розберемося.
- OpenPGP — стандарт шифрування, описаний у RFC 4880 та RFC 6637. Не слід плутати з конкретними реалізаціями, такими як PGP і GPG;
- GnuPG або GPG — конкретна відкрита (GPLv3) реалізація OpenPGP, про яку йтиметься у цій статті;
- PGP – Дуже пропрієтарна реалізація OpenPGP від компанії PGP Corporation. У 2010 році компанію купила Symantec, а її продукти перейменувала на щось типу Symantec Desktop Email Encryption;
Часто, кажучи «PGP», люди мають на увазі спосіб шифрування, описаний в OpenPGP, і відповідно будь-яку його реалізацій.
Основні команди GnuPG
Хорошою ідеєю буде вибрати алгоритм RSA та довжину ключів 4096 біт.
Важливо! Не забудьте пароль від закритого ключа.
Часта проблема – повідомлення на кшталт такого:
Не приємні random bytes available. Please do some other work to give
the OS a chance to collect більше entropy! (Need 204 more bytes)
Вирішується вона встановленням демона для збирання ентропії:
Перегляд списку ключів:
Отримання fingerprint ключа:
pub 4096R/8640D6B9 2016-09-27
Fingerprint = DB5E AA39 0745 427D ED31 D189 3197 3F00 8640 D6B9
uid Aleksander Alekseev
sub 4096R/5982B4BF 2016-09-27
Fingerprints використовуються переважно для перевірки того, що з сервера ключів (див. далі) був імпортований дійсно правильний ключ. Для пошуку їх використовують.
Для відображення безпечніших довгих id використовуйте опцію keyid-format:
Короткі keyid зручні для маніпуляції з ключами локально. Для пошуку завжди слід використовувати довгі id і перевіряти fingerprints. В останніх версіях GPG довгі ID використовуються за замовчуванням.
Експорт відкритого ключа у текстовому вигляді (можна писати на всіх парканах):
Експорт закритого ключа в текстовому вигляді (ключ ще зашифрований майстер-паролем, можна використовувати для бекапу в Git):
Імпорт відкритого ключа:
Імпорт закритого ключа:
Якщо не вказати –allow-secret-key-import , імпортується лише відкритий ключ, і при спробі підписати щось ви будете отримувати дивні помилки на кшталт:
gpg: no default secret key: secret key not available
gpg: msg.txt: sign+encrypt failed: secret key not available
Експорт відкритого ключа на keyserver:
Важливо! Після того, як ви залили ключ на keyserver, його неможливо видалити, тільки зробити revoke. Переконайтеся, що ви зробили резервну копію ключа. Якщо ви раніше ніколи не працювали з PGP/GPG, дуже раджу спочатку потренуватись на поштових адресах у зоні example.ru.
Не має великого значення, який ключсервер вказати. Наприклад, є ще keys.gnupg.net, а також інші. Усі вони іноді обмінюються друг з одним даними.Не має сенсу зробити send-keys відразу на кілька серверів, щоб їх швидше побачили всі користувачі PGP/GPG. Синхронізація серверів, за моїми спостереженнями, займає 10-15 хвилин.
Hint: щоб постійно не вказувати –keyserver просто допишіть в ~/.bashrc:
Імпорт відкритого ключа з keyserver:
У світі PGP/GPG існує так звана мережа довіри (web of trust). У двох словах це означає, що GPG не довіряє ключу, якщо він не підписаний кимось, кому ви довіряєте. Крім того, якщо ви довіряєте Петі, а Петя довіряє Колі, то ви автоматично довіряєте Колі. Зокрема, за умовчанням під час перевірки підпису та інших дій GPG лаятиметься так:
WARNING: Цей ключ не є впевненим з trusted signature!
There is no indication that the signature belongs to
the owner.
Щоб виправити це, кажемо:
Потім у діалозі говоримо trust, тиснемо 5 («I trust ultimately»), говоримо quit. Інші ключі можна підписати командою tsign. До речі, там можна змінити пароль від вашого ключа (команда passwd ), змінити дату експірації ключа в будь-який бік (команда expire ), додати ім'я/email (команда adduid ), видалити ім'я/email (команда revuid ), подивитися алгоритми шифрування, що використовуються за замовчуванням (showpref) і робити інші цікаві речі.
Примітка: Що робити, коли ключ заекспайрувався? У цьому випадку можна змінити дату експірації на пізнішу та перезалити ключ. Або створити новий ключ, підписати його старим, і залити новий ключ на keyserver. Робити revoke не потрібно.
Ви можете підписати чий ключ і залити підписаний ключ на сервер, підтвердивши тим самим, що ключ дійсно належить людині, вказаній в описі:
На якійсь іншій машині можна завантажити ключ заново та подивитися, ким він підписаний:
gpg –keyserver pgp.mit.edu –search-keys [email protected]
gpg –list-sigs [email protected]
gpg –check-sigs [email protected]
Час від часу варто оновлювати ключі, якщо у ключів з'явилися нові підписи, або якісь ключі відкликали:
Приклад шифрування та підпису файлу для заданого одержувача (ключ -r можна вказувати багато разів):
Розшифровка файлу та перевірка підпису здійснюється командою:
Приклад підпису та перевірки підпису бінарного файлу (наприклад, ISO образу диска):
Симетричне шифрування/дешифрування файлу (зручно, наприклад, для зберігання паролів):
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 запитує пароль через GUI інтерфейс, що я особисто знаходжу не дуже зручним. Змінити цю поведінку можна так:
Може виявитися, що ваш закритий ключ скомпрометований, тобто його вкрали та підібрали пароль. Або ви втратили його. Або просто не можете згадати пароль від ключа. Для таких випадків передбачено відкликання ключа. Робиться це так. Заздалегідь, відразу після створення ключів, потрібно створити сертифікат відкликання:
Використовуючи його, ключ можна відкликати так:
Важливо! Сертифікат відкликання не шифрується і може бути використаний будь-ким. Переконайтеся, що зберігайте його у надійному місці (краще навіть у кількох таких місцях) і неодмінно у зашифрованому вигляді!
Прикручуємо GnuPG до Claws Mail
У Ubuntu нам знадобляться такі пакети:
У Configuration → Plugins → Load завантажуємо pgpcore.so, pgpinline.so та pgpmime.so. Далі просто налаштовуємо плагіни через настоянки клієнта. У налаштуваннях облікового запису можна вказати, які ключі використовувати, а також згенерувати нові ключі та відправити їх на keyserver. При написанні листа Options стануть доступні галочки Encrypt і Sign.
У властивостях облікового запису у вкладці Privacy можна налаштувати плагіни так, щоб повідомлення завжди підписувалися, шифрувалися при відповіді на зашифровані повідомлення, і так далі. Використовувати раджу PGP/MIME, оскільки PGP/Inline може не дратувати користувачів, які не використовують PGP/GPG. Тобто майже всіх.
З косяків плагіна я зіткнувся тільки з тим, що в налаштуваннях потрібно вказати повний шлях до файлу gpg, що виконується, після цього все запрацювало.
Прикручуємо GnuPG до Mutt
Щоб GPG запрацював у Mutt, в ~/.muttrc дописуємо:
# включаємо підтримку 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. На жаль, розглянути їх у рамках однієї статті неможливо.
Ви можете надіслати свій коментар мені на пошту, або скористатися коментарями в Telegram-групі.
Чи варто надавати особисте листування можливого розголосу, коли існують засоби шифрування?
Якщо ви стежите за останніми новинами, то чули чимало історій на тему недоторканності приватного життя, витоку інформації, шпигунства та інших подібних речей. Зважаючи на те, що більшість сучасних комунікацій проходять через Інтернет або за допомогою електронних пристроїв, ми повинні знати, як правильно захистити цінну інформацію. Це стосується не тільки великих організацій, але корисно також усім, хто регулярно використовує комп'ютери в своєму житті. У нас є інформація, яку ми хочемо зберігати недоступною для сторонніх. Але так як ми спілкуємося через Інтернет, то нам може допомогти сильний, але простий у використанні інструмент інтернет-комунікації.
Програма Pretty Good Privacy (PGP), створена Філом Циммерманом, є комп'ютерною програмою, яка може бути використана для захисту вашого приватного життя, яка посилює безпеку і перевіряє достовірність відправників електронного листування. Можна зашифрувати будь-яке електронне листування, файли або навіть весь жорсткий диск, що ускладнить прослуховування і перехоплення конфіденційної інформації третіми особами.Також для листування PGP може запропонувати щось на кшталт «цифрового підпису», що підтверджує достовірність відправника (тобто гарантує, що відправник є саме тією людиною, яка вказана у підписі) та цілісність послання. Взагалі, уявіть собі світ, у якому зникли б усі загрози у повсякденному листуванні, фішинг би пропав через величезні складнощі у здійсненні і всі подібні загрози були б економічно невигідні через вкрай складну систему захисту.
«PGP дає людям реальну можливість контролювати своє приватне життя. Це соціально потрібна річ. Тому я й створив PGP», – каже Філ Ціммерман.
Пройшло вже 20 років з моменту створення PGP, і з того часу система значно прогресувала. Тоді Циммерман потрапив під розслідування уряду США в так званій справі про «безліцензійний збройовий експорт». «Зброєю» виявилися продукти для шифрування сильніші за 40 біт (а PGP була 128-бітною). Хоча сама справа потім була закрита, а звинувачень нікому так і не пред'явили, але це показує, наскільки потужним інструментом може бути шифрування інформації і наскільки можуть бути зацікавлені у змісті систем шифрування під особливим наглядом певні сторони.
Зрештою, повнофункціональна версія PGP стала доступною для широкого кола користувачів у всьому світі. Фонд вільного програмування розробив власну OpenPGP-сумісну програму під назвою GNU Privacy Guard (GnuPG, або скорочено GPG), яка вільно поширюється і має всі необхідні бібліотеки, які використовуються для шифрування, дешифрування та підпису документів та файлів.Ця система може застосовуватися для широкого спектру завдань, доступна скрізь і досить проста у використанні за рахунок використання графічного інтерфейсу.
Враховуючи, що вихідний код PGP доступний для вільного завантаження, ви зможете подивитися його, пошукати можливі помилки, перевірити наявність бекдорів або просто вивчити його роботу. Навіть якщо ви самі не в змозі все це вивчити, то для цього є цілі спільноти, не залежні від уряду чи будь-яких зацікавлених організацій. І ці спільноти регулярно перевіряють цілісність та безпеку PGP-коду. Це особливо актуально, якщо згадати історію про якусь службу із трьох літер, яка намагалася обходити шифрування у протоколах зв'язку.
До цього моменту ви вже явно зацікавилися і готові хоча б просто подивитися, що таке PGP/GPG, і дізнатися, навіщо це може стати вам у нагоді. В асиметричній криптографії нам потрібно мати два роздільні ключі, один з яких буде приватним (закритим, використовуваним для шифрування або підпису), а інший публічним (відкритим, для шифрування первинного тексту або перевірки цифрового підпису). Зовсім не обов'язково вникати у всі тонкощі, але пам'ятайте, що всі знання та потрібний досвід прийдуть до вас у процесі щоденного використання. Тим не менш, ми розглянемо основні поняття криптографії з публічним ключем, щоб ви могли почуватися комфортніше, освоюючи нові інструменти шифрування.
Немає обмежень щодо використання PGP/GPG, оскільки інструмент доступний на всіх операційних системах.
Коли ми говоримо про ключ, ми маємо на увазі буквено-цифровий блок тексту.Цей ключ можна експортувати у файл або завантажити його на сервер ключів, щоб потім поділитися ним з рештою світу (це відноситься до відкритого ключа). Цей ключ генерується PGP, використовуючи алгоритм асиметричного шифрування. Ви повинні пам'ятати, що публічні та приватні ключі математично взаємопов'язані, що дає вам можливість поділитися відкритим ключем з громадськістю без шкоди власної безпеки.
Немає обмежень щодо використання PGP/GPG, оскільки інструмент доступний на всіх операційних системах. Як ми вже згадували раніше, ми маємо справу з доступною системою GNU PG, проте є й спеціалізовані набори, що працюють під якоюсь однією операційною системою. Для Mac OS ми маємо GPG-пакет, який містить плагін для Mail, модуль для керування всіма ключами, систему шифрування/дешифрування та цифрового підпису, перевірки текстів та файлів та багато чого ще. Є й MacGPG — інструмент управління PGP за допомогою командного рядка. Якщо ж у вас Windows, для цієї системи є аналогічні компоненти в пакеті на ім'я GPGWin.
Важливо пам'ятати, що безпека вашого ключа залежить не тільки від кодової фрази, яку ви використовуєте під час створення, але й від конфіденційності під час використання самого ключа. Якщо хтось має доступ до вашого сховища ключів або ключової фрази (або комп'ютер був скомпрометований за допомогою кейлоггера), то вся система безпеки може вважатися марною. Тому ніколи не залишайте ваші ключі доступними стороннім і не вибирайте секретну фразу таким чином, щоб її легко підібрати.
Коли ви створюєте нову пару ключів за допомогою PGP, ви повинні вибрати довжину ключа та фрази, яка захистить ключ.Чим більша ця довжина, тим більше часу займає процес генерації ключа, проте це робиться лише один раз, тому варто потерпіти. А я вам раджу вибирати довжину не менше 4096 біт, а для максимальної безпеки краще взяти 8192 біти. Сподіваюся, ви досить терплячі, щоб дочекатися закінчення процесу створення ключа, оскільки наша система генерації роздільна для PGP та GPG.
PGP використовує кілька ключів — публічний і приватний. Тримайте приватний у таємному місці та не соромтеся пропонувати публічний всім навколо.
Чому вибір довжини ключа та кодової фрази такий важливий? Ну, припустімо, що хтось отримав доступ до вашого сховища ключів і заволодів копією файлу секретного ключа. Якщо ця людина не знає ваш пароль, то їй доведеться перебирати, що навіть з урахуванням нинішніх технічних можливостей не так просто. Іншим варіантом злому є підбір ключової фрази за допомогою словника. Цей варіант є найбільш поширеним та прямолінійним. Тому, роблячи секретний ключ досить довго, можна відбити у зловмисника бажання зламати його.
Коли у вас з'явиться власна пара PGP-ключів, ви можете почати використовувати їх так: поширіть публічний ключ, включіть його у свій поштовий підпис, роздайте друзям та колегам, з якими ведете активне листування. Вони також повинні використовувати аналогічне PGP/GPG-шифрування своїх повідомлень за допомогою публічного ключа. Будь-яка третя сторона не зможе розшифрувати це листування, навіть якщо у неї і буде цей публічний ключ. Для цього буде потрібно ваш особистий ключ. І якщо ви захочете відправити у відповідь таке ж зашифроване послання, яке надіслали вам друзі, вам потрібно буде скористатися їх публічним ключем.Цифровий підпис працює з точністю до навпаки — він використовує ваш особистий ключ, у який вставляє «мітку», за допомогою якої одержувачі вашого листа можуть ідентифікувати вас як надійного відправника та бути впевненими, що лист дійшов до них у незмінному вигляді. Це може здатися дещо складним, проте варто один раз правильно налаштувати поштовий клієнт за пару кліків мишкою:
Отже, ми дізналися, як непросто розпочиналася система PGP, вивчили основи безпеки та отримали деякі рекомендації щодо роботи з PGP. Я сподіваюся, це послужить гарним поштовхом для того, щоб спробувати це шифрування та використати його надалі. Про свою конфіденційність у Мережі ми маємо піклуватися самі, а з таким інструментом зробити це набагато простіше. Ви будете дякувати собі за те, що знайшли сили та час, щоб зробити перший крок до особистої безпеки.
Уряди та спецслужби, як і злочинний світ, давно вже використовують такі системи у своєму повсякденному житті. А що ж звичайні юзери? Ще недавно солідне шифрування можна було собі дозволити лише за великі гроші. Так було до появи на сцені PGP. Звичайна людина не могла зберегти свій особистий інформаційний простір недоторканним. Та й сторона, що цікавиться цією інформацією, не особливо хотіла цього. Потрібно було 20 років на те, щоб це питання нарешті вирішилося. І тепер у нас набагато більше можливостей залишатись у недоторканності.
Іноді зіштовхуєшся із ситуацією, коли у досить великому підприємстві зовсім не розуміють (або не хочуть розуміти) навіщо необхідне шифрування даних, каналів зв'язку, поштового листування. Така ситуація має місце і на моїй роботі.Розрубати цей гордієв вузол допомогла ситуація з дивною втратою даних клієнт-банку.
Зараз у кілька етапів проходить навчання колективу азам роботи з програмою gpg. Рішення використовувати для шифрування поштового листування, файлів утиліту GnuPG прийнято через її доступність у різних дистрибутивах Linux. Ви запитаєте – чого Linux робить у підприємстві. Я відповім так – внаслідок завзятої 3-х місячної роботи мережу з порядку 200 пк була з 90%-им успіхом переведена на linux, про що я можу розповім трохи пізніше.
Розберемося для початку з азами та принципами шифрування. Розбиратимемо систему, відому під назвою шифрування відкритим ключем (public key encryption), яка стала фактичним стандартом шифрування різноманітних інформації.
Ця схема використовує два ключі: один – особистий ключ, який зберігається тільки у користувача, і другий – відкритий ключ, який знаходиться у публічному доступі та передається іншим користувачам. Відкритий ключ, що належить користувачеві або тому, кому він хоче надіслати зашифровану інформацію, використовується для шифрування. І лише власник відповідного особистого ключа зможе розшифрувати дані. Є також і третій ключ, який називається ключем сеансу. Він генерується автоматично і використовується для шифрування та розшифровки. Оскільки все це виконується автоматично, він рідко згадується в описі процесу.
Широкого поширення набули два пакети шифрування за схемою відкритого ключа. Перший – комерційний PGP (Pretty Cood Privacy), GPG (GNU Privacy Guard), який є вільною реалізацією PGP. Другий – OpenSSH. Далі ми розглядатимемо лише GPG, зважаючи на його відкритість і поширеність.
Основним завданням GPG є виконання процедури шифрування файлів.Він не встановлює захищені канали передачі даних, як це робить OpenSSH. Він просто шифрує дані та перевіряє їх цілісність.
Перше, що потрібно зробити перед початком роботи з GPG – це створити пару ключів: відкритий і особистий. Найкраще це зробити під тим обліковим записом, під яким постійно працюєте. Команда для створення ключів така:
У процесі генерації необхідно вибрати тип ключа (за замовчуванням підходить перший варіант), його розмір, термін дійсності, ім'я користувача, e-mail, пароль. Всі ці пункти інтуїтивно зрозумілі і зупинятись на них я не буду.
Генерація закінчена, пара ключів готова до використання. Обидва файли — pubring.gpg (зв'язок відкритих ключів) і secring.gpg (зв'язок особистих ключів) — будуть збережені в двійковому коді в каталозі $HOME/.gnupg. Відкритий ключ може бути представлений у двох видах: у вигляді двійкового коду та у текстовому форматі. За промовчанням використовується двійковий формат. Щоб конвертувати ключ у текстовий формат, необхідно виконати:
gpg -a –export user > user.pub.key.asc
частина команди “> user.pub.key.asc” служить для перенаправлення виведення не на екран, а файл.
Щоб побачити ідентифікатор ключа, можна запустити перевірку ключа, в результаті чого буде виведено список ключів у файлі pubring.gpg:
До цього ми проводили операції зі своїми ключами. А що робити з ключами інших користувачів? Для цього необхідно вставити отриманий з боку відкритий ключ у зв'язку відкритих ключів:
gpg –import otherkey.pub.key.gpg.asc (де otherkey.pub.key.gpg.asc – це отриманий файл ключа)
Шифрування є лише одним із способів перевірки цілісності та достовірності інформації. Інший спосіб – це підписування файлів.У цьому вся методі з урахуванням характеристик файлу створюється свого роду підпис, у створенні якої беруть участь дані особистого ключа. Якщо файл між моментом, коли він був підписаний і моментом отримання не змінювався, то при його розшифровці або перевірці за допомогою GPG з'явиться таке повідомлення:
[user@host]$ gpg –verify foo.txt.asc foo.txt
gpg: Signature made Thu March 18 14:10:50 2009 EST using DSA key ID 12EA888D
gpg: Good signature from "******"
Щоб підписати файл з ім'ям "file", потрібно виконати:
В результаті виконання цієї команди створиться файл у двійковому вигляді. Щоб перевести їх у ASCII уявлення, необхідно зробити так:
Опція “-b” використовується для створення окремого підпису. Файл підпису має ту саму назву, що і файл, що підписується, але тільки з розширенням .gpg або .asc, залежно від того в якому вигляді — двійковому або в ASCII — цей файл підписаний.
І насамкінець я розповім як власне шифрувати файли. Припустимо, що користувач має вам відкритий ключ і хоче надіслати вам зашифрований файл. Йому для цього необхідно виконати таку команду:
gpg -r user -e file (де "user" – це ідентифікатор ключа у зв'язці, власнику якого відправляється зашифрований файл, "file" – ім'я файлу, що шифрується)
В результаті створюється файл file.gpg, який можна надсилати. Можна також на виході отримати одразу файл у текстовому поданні:
gpg -r user -ea file (де "user" – це ідентифікатор ключа у зв'язці, власнику якого відправляється зашифрований файл, "file" – ім'я файлу, що шифрується)
Отримавши такий файл, вам потрібно лише виконати:
gpg -d file.gpg (або .asc)
Об'єднати шифрування та підписом можна однією командою:
gpg -r user -bea file
В результаті отримаємо зашифрований файл, при дешифруванні якого будуть виконані дії щодо створення для нього підпису.