OpenPGP
OpenPGP (Pretty Good Privacy) — это открытый криптографический стандарт, определяющий форматы и процедуры для шифрования, дешифрования, создания и проверки электронных подписей, а также управления ключами. Стандарт основан на оригинальной программе Pretty Good Privacy (PGP), разработанной Филипом Циммерманном в 1991 году. OpenPGP обеспечивает конфиденциальность, целостность и аутентификацию данных, передаваемых по незащищённым каналам связи, и широко применяется для защиты электронной почты, файлов и цифровых подписей.
История
Разработка PGP
Первая версия PGP была создана американским программистом и активистом Филипом Циммерманном в 1991 году. Первоначально программа предназначалась для защиты электронной почты от перехвата и прослушивания. Циммерманн опубликовал PGP в свободном доступе в интернете, что вызвало обеспокоенность правительства США, так как программное обеспечение для шифрования классифицировалось как «военная техника» и подлежало экспортным ограничениям. В 1993 году началось расследование в отношении Циммерманна по обвинению в нарушении законов об экспорте криптографии, которое было прекращено в 1996 году.
Стандартизация OpenPGP
В 1997 году для обеспечения совместимости различных реализаций PGP и создания открытого стандарта была сформирована рабочая группа OpenPGP в рамках Internet Engineering Task Force (IETF). Результатом её работы стал документ RFC 2440 «OpenPGP Message Format», опубликованный в 1998 году. Позднее стандарт был обновлён: в 2007 году вышел RFC 4880, который остаётся основной спецификацией OpenPGP на 2025 год. В 2015 году была опубликована дополнительная спецификация RFC 6637 для использования эллиптических кривых.
Развитие и современное состояние
После стандартизации OpenPGP появилось множество реализаций, включая коммерческие (PGP Desktop, Symantec Encryption Desktop — разработка компании Symantec) и свободные (GnuPG, OpenPGP.js, Sequoia-PGP). Наиболее известной и широко используемой реализацией является GNU Privacy Guard (GnuPG), разработанная немецким программистом Вернером Кохом. В 2024 году IETF начала работу над новой версией стандарта (OpenPGP v6), которая предусматривает использование современных алгоритмов, таких как криптография на эллиптических кривых (EdDSA, ECDH), и улучшенные методы защиты ключей.
Основные принципы работы
Гибридное шифрование
OpenPGP использует гибридную криптосистему, сочетающую симметричное и асимметричное шифрование. Асимметричное шифрование (с открытым и закрытым ключом) используется для безопасной передачи симметричного ключа (сеансового ключа), который затем применяется для шифрования основного сообщения. Это позволяет сочетать удобство управления ключами (асимметричная криптография) с высокой скоростью обработки больших объёмов данных (симметричная криптография).
Цифровые подписи
Для аутентификации отправителя и обеспечения целостности сообщения OpenPGP использует цифровые подписи. Отправитель создаёт хеш-функцию от сообщения и шифрует её своим закрытым ключом. Получатель, используя открытый ключ отправителя, расшифровывает подпись и сравнивает её с вычисленным хешем. Совпадение подтверждает, что сообщение не было изменено и отправлено именно владельцем закрытого ключа.
Сертификаты и сеть доверия
OpenPGP не использует централизованную иерархию сертификационных центров (как в X.509). Вместо этого применяется модель «сети доверия» (Web of Trust). Каждый пользователь может подписывать открытые ключи других пользователей, подтверждая их подлинность. Степень доверия к ключу определяется количеством и качеством подписей от доверенных лиц. Этот подход децентрализован и не требует обращения к единому центру сертификации.
Структура данных OpenPGP
Пакеты (Packets)
Все данные в OpenPGP организованы в виде последовательности пакетов. Каждый пакет имеет заголовок, содержащий тип (например, открытый ключ, зашифрованное сообщение, подпись, идентификатор пользователя) и длину. Основные типы пакетов:
- Public-Key Packet — содержит открытый ключ.
- Signature Packet — содержит цифровую подпись.
- User ID Packet — содержит информацию о владельце ключа (обычно имя и адрес электронной почты).
- Symmetric-Key Encrypted Session Key Packet — содержит зашифрованный сеансовый ключ.
- Literal Data Packet — содержит незашифрованные данные (например, текст сообщения).
Ключи
Каждый пользователь OpenPGP имеет пару ключей: открытый (публикуется для всех) и закрытый (хранится в секрете). Ключи могут быть защищены парольной фразой. Открытый ключ обычно содержит:
- Криптографический алгоритм (RSA, DSA, ElGamal, ECDSA, EdDSA).
- Размер ключа (от 1024 до 4096 бит для RSA).
- Идентификатор ключа (Key ID) — обычно последние 8 или 16 шестнадцатеричных цифр отпечатка ключа.
- Срок действия (может быть бессрочным).
Алгоритмы
Стандарт OpenPGP поддерживает несколько криптографических алгоритмов:
- Асимметричные: RSA (шифрование и подписи), DSA (только подписи), ElGamal (только шифрование), ECDSA, EdDSA (на эллиптических кривых).
- Симметричные: AES (128, 192, 256 бит), Triple DES, Twofish, Camellia, CAST5, IDEA.
- Хеш-функции: SHA-1, SHA-256, SHA-384, SHA-512, MD5 (устарел).
Применение
Защита электронной почты
Наиболее распространённое применение OpenPGP — шифрование и подписание электронных писем. Для этого используются плагины и расширения к почтовым клиентам, такие как Enigmail (для Mozilla Thunderbird), GPG Suite (для Apple Mail), Gpg4win (для Microsoft Outlook). Пользователь может зашифровать письмо так, что прочитать его сможет только получатель, имеющий соответствующий закрытый ключ.
Цифровые подписи файлов
OpenPGP применяется для создания цифровых подписей к файлам, что позволяет проверять их подлинность и целостность. Это часто используется при распространении программного обеспечения: разработчики публикуют подписи к установочным пакетам, а пользователи могут проверить, что файл не был изменён злоумышленником.
Управление ключами
Для обмена открытыми ключами используются специальные серверы ключей (keyservers), такие как keys.openpgp.org. Пользователи могут загружать свои открытые ключи на серверы и скачивать ключи других. Серверы ключей не хранят закрытые ключи и не проверяют подлинность загружаемых данных, полагаясь на сеть доверия.
Критика и ограничения
OpenPGP критикуется за сложность использования для неспециалистов. Процесс генерации ключей, обмена ими, проверки подписей и управления доверием требует определённых знаний. Кроме того, модель «сети доверия» может быть уязвима для атак, если злоумышленник получает контроль над ключами доверенных лиц. Также отмечается, что стандарт OpenPGP не обеспечивает защиты метаданных (например, темы письма, адресов отправителя и получателя), которые передаются в открытом виде. В 2024 году началась работа над версией 6 стандарта, которая призвана устранить некоторые из этих недостатков, включая поддержку современных алгоритмов и улучшенную защиту ключей.
Реализации
GnuPG (GNU Privacy Guard)
GnuPG — свободная реализация OpenPGP, написанная на C. Она является стандартной в большинстве дистрибутивов Linux и доступна для Windows и macOS. GnuPG поддерживает все основные функции OpenPGP и может использоваться как через командную строку, так и через графические интерфейсы.
Sequoia-PGP
Sequoia-PGP — современная реализация OpenPGP на языке Rust, ориентированная на безопасность и производительность. Она предоставляет библиотеку для разработчиков и набор инструментов командной строки.
OpenPGP.js
OpenPGP.js — реализация OpenPGP на JavaScript, работающая в браузере и в среде Node.js. Она используется для шифрования данных в веб-приложениях.
Другие
Существуют также коммерческие реализации, такие как PGP Desktop (ранее Symantec Encryption Desktop) и GPG Suite для macOS.
Интересные факты
- Название «Pretty Good Privacy» (PGP) было придумано Филипом Циммерманном как ироничный отсыл к названию магазина «Ralph’s Pretty Good Grocery» из радиопередачи «Prairie Home Companion».
- В 1990-х годах PGP была объектом судебного разбирательства в США из-за экспортных ограничений на криптографию. Циммерманн опубликовал исходный код PGP в виде книги, что позволило обойти ограничения, так как книги не подлежали экспортному контролю.
- В 2018 году компания Symantec продала бизнес PGP компании DigiCert, после чего развитие коммерческой версии PGP было прекращено.
Источники
- RFC 4880 «OpenPGP Message Format»
- RFC 6637 «Elliptic Curve Cryptography (ECC) in OpenPGP»
- Zimmermann, P. (1995). «The Official PGP User’s Guide». MIT Press.
- Garfinkel, S. (1995). «PGP: Pretty Good Privacy». O’Reilly Media.
- Документация GNU Privacy Guard (gnupg.org)
- Материалы рабочей группы IETF OpenPGP
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →