Протоколи безпеки Інтернет |
---|
Керування ключами |
Рівень застосувань |
Система доменних імен |
|
Рівень Інтернет |
PGP (англ. Pretty Good Privacy) — комп'ютерна програма, також бібліотека функцій, що дозволяє виконувати операції шифрування і цифрового підпису повідомлень, файлів та іншої інформації, поданої в електронному вигляді, у тому числі прозоре шифрування даних на запам'ятовуючих пристроях, наприклад, на твердому диску. Програма була написана Пилипом Цимерманом в 1991 році[6].
PGP має безліч реалізацій, сумісних між собою і з багатьма іншими програмами (GnuPG, FileCrypt та інші) завдяки стандарту OpenPGP (RFC 4880), але вони мають різний набір функціональних можливостей. Існують реалізації PGP для всіх найбільш поширених операційних систем. Крім вільно розповсюджуваних реалізацій є ще й комерційні.
PGP поєднує в собі найкращі сторони симетричної криптографії і криптографії з відкритим ключем. PGP — це гібридна криптосистема.
Коли користувач зашифровує дані за допомогою PGP, програма для початку їх стискає. Стиск скорочує час модемної передачі і заощаджує дисковий простір, а також, що важливіше, підвищує криптографічну стійкість. Більшість криптоаналітичних техніків засновано на статистичному аналізі шифротексту в пошуках ознак відкритого тексту. Стиск зменшує число таких ознак, що істотно підсилює опірність криптоаналізу.
Потім, PGP створює сеансовий ключ, тобто одноразовий симетричний ключ, застосовуваний тільки для однієї операції. Цей сеансовий ключ являє собою псевдовипадкове число, згенероване від випадкових рухів мишки і натискання клавіш. Сеансовий ключ працює на основі дуже надійного, швидкого симетричного алгоритму, яким PGP зашифровує стиснуте повідомлення; у результаті виходить шифротекст. Як тільки дані зашифровані, сеансовий ключ також шифрується, але уже відкритим ключем одержувача. Цей зашифрований відкритим ключем сеансовий ключ прикріплюється до шифротексту і передається разом з ним одержувачеві.
Розшифрування відбувається в зворотному порядку. PGP одержувача використовує його закритий ключ для витягу сеансового ключа з повідомлення, яким шифротекст вихідного послання відновлюється у відкритий текст.
Таким чином, комбінація цих двох криптографічних методів поєднує зручність шифрування відкритим ключем зі швидкістю роботи симетричного алгоритму. Симетричне шифрування в тисячі разів швидше асиметричного. Шифрування відкритим ключем, у свою чергу, надає просте рішення проблеми керування ключами і передачі даних. При використовувані їх спільно, швидкість виконання і керування ключами взаємно доповнюються і поліпшуються без якого-небудь збитку безпеки.
Оскільки PGP розвивається, деякі системи дозволяють створювати зашифровані повідомлення з використанням нових можливостей, які відсутні в старих системах. Відправник і одержувач повинні знати можливості один одного або, принаймні, узгодити налаштування PGP.
У 1996 році криптограф Брюс Шнайер охарактеризував ранню версію PGP як «найближчу до криптосистем військового рівня». На даний момент не відомо жодного способу злому даних, зашифрованих PGP, за допомогою повного перебору або уразливості криптоалгоритма. Ранні версії PGP були теоретично уразливими, тому рекомендується користуватися сучасними версіями.
Криптографічна стійкість PGP заснована на припущенні, що використовувані алгоритми стійкі до криптоаналізу на сучасному обладнанні. Наприклад, у PGP перших версій для шифрування ключів сесії використовувався алгоритм RSA, заснований на односторонній функції (факторизація). У PGP версії 2 додатково можна використовувати алгоритм IDEA. У подальшому були додані додаткові алгоритми шифрування. У жодного використовуваного алгоритму немає відомих вразливостей.
Найвищий рівень довіри — безумовна довіра (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.
OpenPGP - це Internet Standard[en] і активно розробляється. Багато клієнтів e-mail надають OpenPGP-сумісну безпеку повідомлень описану в RFC 3156. Поточною специфікацією є RFC 4880 (листопад 2007). RFC 4880 визначає набір необхідних алгоритмів до якого входить Схема Ель-Гамаля, DSA, Triple DES та SHA-1. На додачу до цих алгоритмів, стандарт рекомендує RSA як описано в PKCS #1[en] v1.5 для шифрування та підписів, а також AES-128, CAST-128 та IDEA. Крім цих, підтримуються також інші алгоритми. Стардарт розширили підтримкою шифру Camellia у RFC 5581 у 2009, та підписом і обміном ключами на основі еліптичної криптографії (тобто ECDSA та ECDH) у RFC 6637 у 2012. Підтримка шифрування на основі еліптичної криптографії була додана запропонованим RFC 4880bis у 2014.