Пакет OpenPGP
OpenPGP — это открытый стандарт шифрования и цифровой подписи данных, основанный на асимметричной криптографии и использующий инфраструктуру открытых ключей. Стандарт определяет форматы ключей, сертификатов, сообщений и процедуры их обработки, обеспечивая конфиденциальность, аутентификацию и целостность информации. OpenPGP является развитием и стандартизацией протокола Pretty Good Privacy (PGP), созданного Филом Циммерманом в 1991 году. Основные спецификации стандарта зафиксированы в документах RFC 4880 (текущая версия) и RFC 5581.
История
Создание PGP
В 1991 году американский программист и криптоактивист Фил Циммерман разработал программу Pretty Good Privacy (PGP) для шифрования электронной почты и файлов. Циммерман стремился предоставить обычным пользователям доступ к криптографической защите, которая ранее была доступна в основном спецслужбам и военным. Первая версия PGP использовала алгоритм IDEA для симметричного шифрования и RSA для асимметричного шифрования и цифровой подписи.
Стандартизация
В 1997 году была создана рабочая группа OpenPGP при IETF (Internet Engineering Task Force) для формализации и стандартизации протокола. Целью было создание открытого, непатентованного стандарта, который мог бы быть реализован независимыми разработчиками. В 1998 году был опубликован RFC 2440 — первая версия стандарта OpenPGP. В 2007 году вышла обновлённая версия RFC 4880, которая остаётся основной спецификацией по состоянию на 2025 год.
Развитие и форки
После стандартизации появилось множество реализаций OpenPGP, включая GNU Privacy Guard (GnuPG или GPG) — свободную программу, разработанную Вернером Кохом. GnuPG является наиболее распространённой реализацией стандарта в операционных системах на ядре Linux. Коммерческие версии PGP (например, PGP Desktop) продолжали развиваться корпорацией Symantec, которая приобрела PGP Corporation в 2010 году. В 2023 году компания Proton AG (разработчик Proton Mail) приобрела активы PGP у Symantec и начала разработку открытой версии под названием PGP.
Основные принципы работы
Асимметричное шифрование
OpenPGP использует пару криптографических ключей: открытый ключ (публичный) и закрытый ключ (приватный). Открытый ключ распространяется свободно, а закрытый хранится в секрете. Сообщение, зашифрованное открытым ключом, может быть расшифровано только соответствующим закрытым ключом. Это позволяет любому отправителю зашифровать данные для конкретного получателя, не требуя предварительного обмена секретными ключами.
Цифровая подпись
Для аутентификации и обеспечения целостности данных OpenPGP поддерживает цифровые подписи. Отправитель создаёт хеш сообщения и шифрует его своим закрытым ключом. Получатель, используя открытый ключ отправителя, расшифровывает хеш и сравнивает его с вычисленным хешем полученного сообщения. Совпадение подтверждает, что сообщение не было изменено и отправлено именно владельцем закрытого ключа.
Инфраструктура открытых ключей (PKI)
OpenPGP не использует централизованные центры сертификации, как в модели X.509. Вместо этого применяется сеть доверия (Web of Trust). Каждый пользователь может подписывать открытые ключи других пользователей, подтверждая их подлинность. Доверие к ключу определяется на основе цепочки подписей от доверенных лиц. Эта децентрализованная модель позволяет устанавливать доверие без единого центра сертификации.
Форматы и структура данных
Ключи и сертификаты
OpenPGP-ключ состоит из одного или нескольких ключей шифрования и подписи, объединённых в сертификат. Сертификат содержит:
- Первичный ключ (master key) — используется для подписи других ключей и сертификатов.
- Подчинённые ключи (subkeys) — используются для шифрования и подписи сообщений. Подчинённые ключи могут быть отозваны или заменены без изменения первичного ключа.
- Идентификаторы пользователя (User ID) — обычно имя и адрес электронной почты.
- Подписи — цифровые подписи, подтверждающие связь между ключом и идентификатором пользователя.
Формат сообщений
OpenPGP-сообщение может быть:
- Зашифрованным — данные зашифрованы симметричным алгоритмом (например, AES, Twofish), а ключ для симметричного шифрования зашифрован асимметричным алгоритмом (RSA, ECDH).
- Подписанным — данные содержат цифровую подпись, созданную с помощью закрытого ключа.
- Сжатым — данные могут быть сжаты перед шифрованием или подписью (алгоритмы ZIP, ZLIB, BZip2).
- Литеральным — данные в открытом виде с метаданными (имя файла, дата).
Алгоритмы
Стандарт OpenPGP поддерживает широкий набор криптографических алгоритмов:
- Асимметричные: RSA (до 4096 бит), DSA, ElGamal, ECDH (эллиптическая кривая Диффи-Хеллмана), ECDSA (эллиптическая кривая цифровой подписи), EdDSA (алгоритм подписи на основе эллиптических кривых, например, Curve25519).
- Симметричные: AES (128, 192, 256 бит), Twofish, Blowfish, 3DES, CAST5.
- Хеш-функции: SHA-1, SHA-2 (256, 384, 512 бит), SHA-3, RIPEMD-160.
- Сжатие: ZIP, ZLIB, BZip2.
Применение
Шифрование электронной почты
OpenPGP является основным стандартом для шифрования электронной почты. Программы, такие как GnuPG, Enigmail (расширение для Thunderbird) и встроенные функции в почтовых клиентах (например, Proton Mail, Tutanota), позволяют пользователям шифровать и подписывать письма. Формат сообщений обычно соответствует стандарту PGP/MIME (RFC 3156).
Шифрование файлов и дисков
OpenPGP используется для шифрования отдельных файлов и архивов. Утилиты, такие как gpg (GnuPG), позволяют шифровать файлы с помощью открытых ключей или парольной фразы (симметричное шифрование). Также существуют реализации для шифрования целых дисковых разделов (например, с использованием LUKS в сочетании с GPG).
Управление ключами
Для распространения и поиска открытых ключей существуют серверы ключей (keyservers), такие как SKS Keyserver Pool и keys.openpgp.org. Пользователи могут публиковать свои открытые ключи и искать ключи других пользователей. Серверы ключей не проверяют подлинность ключей — это возлагается на сеть доверия.
Подписание программного обеспечения
Разработчики программного обеспечения часто используют OpenPGP для подписания своих релизов. Пользователи могут проверить цифровую подпись, чтобы убедиться, что скачанный файл не был изменён и действительно выпущен разработчиком. Например, многие дистрибутивы Linux (Debian, Ubuntu, Fedora) подписывают свои пакеты с помощью GPG.
Реализации
GNU Privacy Guard (GnuPG)
GnuPG (также известный как GPG) — наиболее распространённая свободная реализация стандарта OpenPGP. Разрабатывается с 1997 года, доступна для большинства операционных систем (Linux, macOS, Windows). GnuPG поддерживает все основные алгоритмы и форматы, включая эллиптические кривые. Является стандартной утилитой в большинстве дистрибутивов Linux.
PGP (коммерческие версии)
Коммерческие версии PGP, разрабатывавшиеся PGP Corporation и позже Symantec, включали графические интерфейсы, интеграцию с почтовыми клиентами и дополнительные функции (например, шифрование дисков). После приобретения активов компанией Proton AG в 2023 году, ведётся работа по созданию открытой версии PGP.
Другие реализации
- OpenPGP.js — реализация на JavaScript, работающая в браузере.
- Sequoia-PGP — реализация на языке Rust, ориентированная на безопасность и производительность.
- Bouncy Castle — криптографическая библиотека на Java, включающая поддержку OpenPGP.
- RPGP — реализация на языке Go.
Критика и ограничения
Сложность использования
OpenPGP считается сложным для обычных пользователей. Управление ключами, проверка отпечатков, настройка почтовых клиентов требуют технических знаний. Это препятствует массовому внедрению.
Отсутствие forward secrecy
Стандарт OpenPGP не обеспечивает совершенную прямую секретность (forward secrecy). Если закрытый ключ получателя будет скомпрометирован, все ранее зашифрованные сообщения могут быть расшифрованы. В отличие от современных протоколов (например, Signal Protocol), OpenPGP не использует эфемерные ключи для каждого сеанса.
Проблемы с серверами ключей
Серверы ключей не проверяют подлинность ключей, что позволяет злоумышленникам публиковать поддельные ключи. Кроме того, серверы ключей не поддерживают удаление ключей по запросу, что создаёт проблемы с конфиденциальностью.
Устаревшие алгоритмы
Некоторые алгоритмы, поддерживаемые стандартом (например, SHA-1, 3DES, IDEA), считаются устаревшими или небезопасными. Хотя современные реализации (GnuPG, Sequoia-PGP) по умолчанию используют более стойкие алгоритмы, совместимость со старыми версиями может вынуждать использовать слабые алгоритмы.
Будущее стандарта
В 2023 году рабочая группа OpenPGP при IETF начала работу над новой версией стандарта (OpenPGP v5), которая должна устранить некоторые недостатки текущей версии. Ожидается внедрение обязательного использования эллиптических кривых, улучшенной поддержки forward secrecy и более строгих требований к алгоритмам. Также разрабатывается новый формат сертификатов, упрощающий управление ключами.
Источники
- RFC 4880 — OpenPGP Message Format (2007).
- RFC 5581 — The Camellia Cipher in OpenPGP (2009).
- RFC 3156 — MIME Security with OpenPGP (2001).
- RFC 6637 — Elliptic Curve Cryptography (ECC) in OpenPGP (2012).
- Документация GNU Privacy Guard (GnuPG).
- Статья Фила Циммермана «Why I Wrote PGP» (1991).
- Материалы рабочей группы OpenPGP при IETF.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →