GNU Privacy Guard (GnuPG або GPG) — вільне криптографічне програмне забезпечення, що використовується для шифрування та розшифрування даних, а також для створення та перевірки електронних підписів. Це відкрита і вільна альтернатива криптографічному пакету PGP (Pretty Good Privacy).

GnuPG є повною і вільною реалізацією стандартів IETF OpenPGP (визначеного RFC4880) і S/MIME, а також забезпечує підтримку Secure Shell (ssh).

GPG дозволяє шифрувати і підписувати дані і повідомлення, має універсальну систему управління ключами і модулі для доступу до всіх видів каталогів відкритих ключів.

GNU Privacy Guard розповсюджується на умовах ліцензії GNU GPL версії 3 і є частиною проєкту GNU.

Історія Проєкт було розпочато у 1997 році Вернером Кохом. профінансувало портування GnuPG на Microsoft Windows і розробку документації у 2000 році. GnuPG використовується кількома європейськими державними адміністраціями, в тому числі державною компанією Deutsche Bahn. Вернер Кох, початковий розробник GnuPG, був одним з тих, кого Федеральне відомство з інформаційної безпеки (BSI) найняла у 2006 році для розробки криптографічного інструментарію Gpg4win для шифрування і підпису у Windows, зокрема у MS Outlook і Windows Explorer після публічного тендеру. Кох: 'BSI також замовила розширення для GnuPG, частину S/MIME. Це розширення встановлено на всіх робочих станціях, і таким чином співробітники можуть безпечно спілкуватися, використовуючи S/MIME і OpenPGP'. Німецька газета Tageszeitung повідомила, що Міністерство внутрішніх справ країни тепер пропонує відкритий ключ GnuPG як частину контактної форми на своєму вебсайті, що дозволяє іншим особам надсилати листи до міністерства, які можуть бути розшифровані лише міністерством та відправником. Pretty Easy Privacy має на меті автоматизувати та таким чином значно спростити використання PGP. Наприкінці 2014 року Вернер Кох запустив краудфандингову кампанію. У січні 2015 року тему підхопила національна преса, і протягом кількох днів було забезпечено фінансування на два-три роки за рахунок пожертв.

Програма була розроблена як заміна PGP та реалізує стандарт OpenPGP відповідно до його застарілої версії RFC 4880. Підтримка поточної версії RFC 9580 не планується Натомість вона опирається на власну розробку «LibrePGP», яка, однак, не була прийнята як стандарт робочою групою OpenPGP. Версії 2.0 та пізніші також реалізують стандарти S/MIME та .

Концепція GnuPG прагне надати якомога більшій групі користувачів можливість використовувати криптографічні методи для конфіденційної передачі електронних даних.

GnuPG підтримує наступні функції:

Шифрування даних (наприклад, електронної пошти) для передачі конфіденційної інформації одному або декільком одержувачам, яка може бути розшифрована тільки самими одержувачами. Створення підпису на надісланих даних для підтвердження їхньої автентичності та цілісності.

Обидві функції можна поєднувати. Як правило, спочатку створюється підпис і додається до даних. Потім цей пакет, що складається з повідомлення і підпису, надсилається одержувачу у зашифрованому вигляді. GnuPG підтримує поєднання обох дій в одному виклику лише в такому порядку. При надсиланні електронних листів (як згідно з RFC 3156) можливі обидва варіанти, але через обмеження поштових клієнтів це єдина можлива послідовність на практиці. Неможливо спочатку зашифрувати електронний лист, а потім додати звичайний текстовий підпис (який потім може бути проаналізований, наприклад, антивірусним сканером або спам-фільтром, які не зможуть розшифрувати справжнє повідомлення). Однак можна зашифрувати файли незалежно від надсилання електронного листа, прикріпити їх до електронного листа, а потім підписати його як PGP/MIME.

В GPG не використовуються ні запатентовані, ні обмежені в інший спосіб алгоритми, включаючи алгоритм шифрування IDEA, який підтримувався в PGP майже з самого початку. Замість цього, використовуються інші, не запатентовані алгоритми, такі як CAST5, Triple DES, AES, Blowfish та Twofish. Алгоритм IDEA в GPG наразі лише підтримується, використання IDEA не рекомендується через малу довжину блоку і призначений лише для розшифрування заархівованих даних. IDEA є запатентованим алгоритмом, і тому використання IDEA в країнах, де цей патент є чинним, може бути заборонено через обмеження, що містяться в ліцензії GPL. Однак, якщо користувачеві вкрай необхідно використовувати IDEA, він може завантажити файл idea.c.gz і його підпис, прочитати інструкції у верхній частині файлу і використовувати його як плагін до GnuPG для розшифрування даних.

Принцип дії GPG зашифровує повідомлення, використовуючи асиметричні алгоритми та згенеровані користувачем ключі. Отримані відкриті ключі можуть обмінюватись різноманітними шляхами, наприклад, через сервери ключів. Обмін відкритих ключів слід виконувати дуже уважно, аби уникнути підміни ідентичності відправника під час надсилання ключа. Також можливо додавати цифровий підпис до листів для того, щоб можна було підтвердити цілісність повідомлення та автентичність відправника.

GPG є програмою з гібридним шифруванням, в тому сенсі, що для підвищення швидкості роботи використовуються симетричні алгоритми шифрування, та асиметричні алгоритми шифрування для полегшення процедури обміну ключами, як правило, використовуючи відкритий ключ отримувача повідомлення для шифрування ключа сеансу, який використовується лише один раз. Цей режим роботи є частиною стандарту OpenPGP, і використовувався в PGP, починаючи з його першої версії.

Функціональність GPG – це метод шифрування з відкритим ключем, що означає, що для шифрування повідомлень не потрібна секретна інформація. Кожен користувач GPG створює пару ключів, що складається з двох частин: закритого ключа та публічного ключа. Тільки власник має доступ до закритого ключа, тому він зазвичай захищений паролем. За допомогою нього можна розшифровувати та підписувати дані. Відкритий ключ використовується для шифрування даних і перевірки підписаних даних. Він має бути доступним кожному партнеру по спілкуванню, який хоче виконати ці дві дії. Дані не можуть бути підписані або розшифровані за допомогою відкритого ключа, тому його розповсюдження не пов'язане з жодним ризиком для безпеки. Відкритими ключами можна обмінюватися з іншими користувачами за допомогою різних каналів, наприклад, серверів ключів в Інтернеті. Вони (або комбінація відкритого ключа та ідентифікатора користувача) завжди повинні бути надійно перевірені перед використанням, щоб запобігти маніпуляціям з ідентифікаційними даними, оскільки ідентифікаційні дані, що вводяться в відкриті ключі, можуть бути легко підроблені. GPG може лише визначити, чи були дані підписані або зашифровані певним ключем. Користувач повинен вирішити, чи заслуговує на довіру сам ключ; зрештою, будь-хто може створити ключ, використовуючи дані інших користувачів, і завантажити його на сервер ключів. Тому ключу, завантаженому з незахищеного джерела (наприклад, з Інтернету), не варто довіряти з самого початку. Для перевірки можна отримати відбиток ключа (хеш-значення) через захищений канал (наприклад, захищену електронну пошту, телефон) і порівняти його з локально згенерованим відбитком завантаженого ключа. Це безпечно, оскільки неможливо згенерувати відповідний ключ для даного відбитка. Ця безпека залежить від надійності хеш-функції (і кількості можливих ключів). Версія 4 формату ключів OpenPGP визначає використання хеш-функції SHA-1, для якої в даний час (2012) можливі атаки на зіткнення, але не атаки з використанням другого зображення які є вирішальними для імітації ключів. З огляду на нещодавню специфікацію хеш-функції SHA-3, розробка наступного формату ключа OpenPGP, як очікується, розпочнеться найближчим часом.

Для шифрування або підписання даних доступні ключі різної стійкості. В даний час (2014) зазвичай використовуються ключі довжиною від 2048 до 4096 біт, з рекомендованою довжиною 2048 біт. GPG наразі використовує лише незапатентовані алгоритми для шифрування даних, такі як RSA, Elgamal, CAST5, Triple-DES (3DES), AES (Rijndael) та Blowfish.

Головні ключі За допомогою майстер-ключів GnuPG підтримує функцію безпеки, яка виходить за рамки стандарту OpenPGP і тому не працює надійно, якщо такі секретні ключі потрібно імпортувати в іншу програму OpenPGP. Головний ключ використовується не для повсякденного підписання і розшифрування, а для керування власними ключовими компонентами (ідентифікаторами користувачів і підключами) і сертифікації інших ключів. Ці дії відбуваються порівняно рідко, Ці дії відбуваються відносно рідко, тому майстер-ключ може бути спеціально захищений. Перевагами такого підходу є: Партнерам по комунікації не потрібно повторювати перевірку ключа. Головний ключ залишається дійсним. Підключі можна легко замінити. Закінчення терміну дії та нові підключі не є чимось особливим для OpenPGP, вони автоматично додаються під час оновлень ключів і використовуються прозоро для користувача. Якщо майстер-ключ також дозволено підписувати, його значно вищий рівень безпеки можна використовувати для підпису дуже важливої інформації, наприклад, політики приватних ключів.

Технічний підхід полягає в тому, щоб експортувати секретні ключі без головного ключа (після створення резервної копії головного ключа), потім видалити всі секретні ключі, а потім імпортувати лише підключі. На жаль, ця функція GnuPG поки що не підтримується графічним інтерфейсом, тому доведеться виконати необхідні дії самостійно у консолі.

Павутина довіри Існує раціональне сподівання, що вирішить проблему неможливості особистої перевірки автентичності ключів усіх партнерів по спілкуванню. Користувачі можуть підписувати інші ключі своїм власним ключем і таким чином підтверджувати третім особам, що вони переконані в автентичності ключа. Ви також можете вказати, наскільки ви довіряєте підпису людини. Це створює описану мережу довіри. Наприклад, якщо Аліса підтвердила автентичність ключа Боба своїм підписом, то Клоі може довіряти автентичності ключа Боба, навіть якщо вона не змогла безпосередньо перевірити його сама, наприклад, тому що отримала його з Інтернету. Передумовою для цього, звичайно, є те, що вона знає і довіряє ключу Аліси. Існує кілька центрів сертифікації ( (CA), які перевіряють автентичність ключів, наприклад, шляхом особистого контакту та перевірки особи. Це пропонується безкоштовно, наприклад, журналом c't та CAcert. Зацікавлені сторони можуть особисто ідентифікувати себе в цих організаціях, наприклад, на комп'ютерних виставках, таких як CeBIT, та отримати підтвердження своїх відкритих ключів.

Мережа довіри PGP була ретельно вивчена та візуалізована дослідниками. Було виявлено, що значна частина користувачів належить до підмножини, яка повністю пов'язана через взаємні підтвердження, так званої Сильної множини Мережі довіри. Дослідження також показали, що криптокампанія c't зробила значний внесок у зміцнення зв'язків між учасниками.

Ще одним важливим внеском у є проєкт Debian, який вимагає цифрових підписів для включення внесків.

Підтримка SSH У версії 2 GPG управління закритими ключами було передано на аутсорсинг демону (gpg-agent). Схожа структура (ssh-agent) існує в OpenSSH, але там вона не є обов'язковою. Оскільки алгоритм підпису RSA використовується як в OpenPGP, так і в SSH, відповідні ключі в принципі взаємозамінні. Тому gpg-agent можна використовувати для встановлення SSH-з'єднання за допомогою ключа OpenPGP (який повинен мати можливість автентифікації, яка зазвичай не використовується). Це відкриває дві корисні можливості:

Для SSH також можна використовувати вже перевірений ключ OpenPGP. Верифікацію (можливо, складну) другого ключа можна не проводити. Оскільки GPG підтримує смарт-картки, доступ по SSH може бути пов'язаний з використанням смарт-картки (що також можливо без GPG завдяки підтримці в OpenSSH).

Тестування поштової програми