PGP (англ.Pretty Good Privacy) — комп'ютерна програма, також бібліотека функцій, що дозволяє виконувати операції шифрування і цифрового підпису повідомлень, файлів та іншої інформації, поданої в електронному вигляді, у тому числі прозоре шифрування даних на запам'ятовуючих пристроях, наприклад, на твердому диску. Програма була написана Пилипом Цимерманом в 1991 році[6].
PGP має безліч реалізацій, сумісних між собою і з багатьма іншими програмами (GnuPG, FileCrypt та інші) завдяки стандарту OpenPGP (RFC 4880), але вони мають різний набір функціональних можливостей. Існують реалізації PGP для всіх найбільш поширених операційних систем. Крім вільно розповсюджуваних реалізацій є ще й комерційні.
Коли користувач зашифровує дані за допомогою PGP, програма для початку їх стискає. Стиск скорочує час модемної передачі і заощаджує дисковий простір, а також, що важливіше, підвищує криптографічну стійкість. Більшість криптоаналітичних техніків засновано на статистичному аналізі шифротексту в пошуках ознак відкритого тексту. Стиск зменшує число таких ознак, що істотно підсилює опірність криптоаналізу.
Потім, PGP створює сеансовий ключ, тобто одноразовий симетричний ключ, застосовуваний тільки для однієї операції. Цей сеансовий ключ являє собою псевдовипадкове число, згенероване від випадкових рухів мишки і натискання клавіш. Сеансовий ключ працює на основі дуже надійного, швидкого симетричного алгоритму, яким PGP зашифровує стиснуте повідомлення; у результаті виходить шифротекст. Як тільки дані зашифровані, сеансовий ключ також шифрується, але уже відкритим ключем одержувача. Цей зашифрований відкритим ключем сеансовий ключ прикріплюється до шифротексту і передається разом з ним одержувачеві.
Розшифрування відбувається в зворотному порядку. PGP одержувача використовує його закритий ключ для витягу сеансового ключа з повідомлення, яким шифротекст вихідного послання відновлюється у відкритий текст.
Таким чином, комбінація цих двох криптографічних методів поєднує зручність шифрування відкритим ключем зі швидкістю роботи симетричного алгоритму. Симетричне шифрування в тисячі разів швидше асиметричного. Шифрування відкритим ключем, у свою чергу, надає просте рішення проблеми керування ключами і передачі даних. При використовувані їх спільно, швидкість виконання і керування ключами взаємно доповнюються і поліпшуються без якого-небудь збитку безпеки.
Сумісність
Оскільки PGP розвивається, деякі системи дозволяють створювати зашифровані повідомлення з використанням нових можливостей, які відсутні в старих системах. Відправник і одержувач повинні знати можливості один одного або, принаймні, узгодити налаштування PGP.
Захищеність
У 1996 році криптограф Брюс Шнайер охарактеризував ранню версію PGP як «найближчу до криптосистем військового рівня». На даний момент не відомо жодного способу злому даних, зашифрованих PGP, за допомогою повного перебору або уразливості криптоалгоритма. Ранні версії PGP були теоретично уразливими, тому рекомендується користуватися сучасними версіями.
Криптографічна стійкість PGP заснована на припущенні, що використовувані алгоритми стійкі до криптоаналізу на сучасному обладнанні. Наприклад, у PGP перших версій для шифрування ключів сесії використовувався алгоритм RSA, заснований на односторонній функції (факторизація). У PGP версії 2 додатково можна використовувати алгоритм IDEA. У подальшому були додані додаткові алгоритми шифрування. У жодного використовуваного алгоритму немає відомих вразливостей.
Ступені довіри в PGP
Найвищий рівень довіри — безумовна довіра (Implicit Trust) — це довіра вашій власній ключовій парі. PGP думає, що якщо ви володієте закритим ключем, то повинні довіряти і діям відповідного відкритого. Усі ключі, підписані вашим довір'ям безумовно, для вас вірні і справжні.
Існує три ступені довіри, що ви можете привласнити чужому відкритому ключеві:
повна довіра;
часткова довіра;
немає довіри.
Щоб ще більше все заплутати, існує також три рівні дійсності:
справжній;
можливо справжній;
невизначений.
Щоб дати іншому ключеві повноваження поручительства, ви:
Берете справжній ключ, який або підписаний вами, або іншим довіреним поручителем.
Встановлюєте рівень довіри, який, на вашу думку, заслуговує власник.
Для прикладу представимо, що на вашому зв'язуванні є ключ Олесі. Ви визначили дійсність її ключа і, підписуючи його, указуєте на це. Вам відомо, що Олеся — активний прихильник ретельної перевірки чужих ключів. Тому ви наділяєте її Повною довірою, що, фактично, перетворює її в Центр сертифікації: якщо Олеся підпише чужий ключ, він буде вірним на вашому зв'язуванні апріорі.
PGP вимагає одну довіру Цілком або дві довірі частково, щоб встановити ключ як справжній. Метод PGP прирівнювання двох Часткових до одній Повного аналогічний тому, як іноді від вас вимагають два види документів, що засвідчують особистість. Ви можете порахувати Олесю частково надійної, також порахувати Олександра, який частково заслуговує довіри. Є ризик, що кожний з них окремо може випадково підписати липовий ключ, так що ви, імовірно, не станете надавати Повної довіри жодному. Однак, імовірність того, що обоє вони підпишуть той самий липовий ключ, досить мала.
Всередині PGP Inc., хвилювались щодо проблем з патентами. RSADSI оспорювало передачу ліцензії Viacrypt RSA у нову об'єднану компанію. Компанії довелося впровадити неформальний внутрішній стандарт, який вони назвали «Необтяжений PGP» (англ.Unencumbered PGP) що «не використовував жодних алгоритмів зі складнощами ліцензування». Через важливість PGP шифрування у світі, багато хто хотів написати власне програмне забезпечення, сумісне з PGP 5. Цимерман став переконаним в необхідності для компанії і криптографічної спільноти загалом відкритого стандарту PGP. В липні 1997, PGP Inc. запропонувало IETF стандарт, названий OpenPGP. Вони дали IETF дозвіл використовувати назву OpenPGP аби описувати цей стандарт і будь-яку програму, що його підтримує. IETF прийняло пропозицію і запустило робочу групу OpenPGP.