RFC 4880
RFC 4880 — это запрос комментариев (Request for Comments) Интернет-инженерного совета (IETF), который определяет стандарт OpenPGP (Pretty Good Privacy) — криптографический протокол для шифрования, цифровой подписи и аутентификации электронных сообщений и данных. Опубликованный в ноябре 2007 года, RFC 4880 заменил предыдущие версии стандарта (RFC 2440 и RFC 1991) и стал основным документом, описывающим формат сообщений, ключей и процедур, используемых в программном обеспечении, реализующем OpenPGP, таком как GnuPG (GNU Privacy Guard). Стандарт является открытым и не требует лицензионных отчислений.
История
Разработка стандарта OpenPGP началась в середине 1990-х годов как попытка создать открытый и свободный от патентных ограничений аналог проприетарного программного обеспечения PGP (Pretty Good Privacy), созданного Филом Циммерманом. Первая версия стандарта была опубликована в 1997 году как RFC 1991, которая описывала формат PGP 5.0. В 1998 году была выпущена версия RFC 2440, которая внесла значительные улучшения и уточнения. RFC 4880, опубликованный в ноябре 2007 года, стал результатом многолетней работы IETF Working Group OpenPGP и включил в себя накопленный опыт использования и реализации протокола. Он уточнил многие аспекты, включая алгоритмы хеширования, сжатия и управления ключами. В 2015 году был опубликован RFC 6637, который добавил поддержку эллиптической криптографии (Elliptic Curve Cryptography, ECC), а в 2018 году — RFC 8351, который уточнил использование алгоритмов на основе эллиптических кривых. RFC 4880 остается основным документом, хотя его положения дополняются более новыми RFC.
Основные положения
RFC 4880 определяет несколько ключевых аспектов протокола OpenPGP:
Формат сообщений
Стандарт описывает структуру зашифрованных и подписанных сообщений. Сообщение состоит из последовательности пакетов (packets), каждый из которых имеет свой тип и длину. Основные типы пакетов включают:
- Пакеты открытых ключей — содержат открытый ключ, алгоритм, идентификатор пользователя (User ID) и подписи.
- Пакеты секретных ключей — содержат зашифрованный секретный ключ.
- Пакеты подписей — содержат цифровую подпись, включая информацию об алгоритме, хеше и подписанных данных.
- Пакеты данных — содержат сами зашифрованные или открытые данные.
- Пакеты сжатия — содержат сжатые данные.
Формат пакетов и их последовательность строго регламентированы, что обеспечивает совместимость между различными реализациями.
Алгоритмы
RFC 4880 определяет набор поддерживаемых криптографических алгоритмов. К ним относятся:
- Асимметричное шифрование: RSA (с ключами длиной до 4096 бит), ElGamal (только для шифрования, не для подписей), DSA (для подписей), а также алгоритмы на основе эллиптических кривых (ECDSA, EdDSA, ECDH) в соответствии с более поздними RFC.
- Симметричное шифрование: AES (128, 192, 256 бит), IDEA, CAST5, TripleDES (3DES), Blowfish, Twofish.
- Хеширование: SHA-1, SHA-256, SHA-384, SHA-512, MD5, RIPEMD-160.
- Сжатие: ZIP, ZLIB, BZip2.
Стандарт допускает использование алгоритмов, не указанных в RFC, но для обеспечения совместимости рекомендуется использовать поддерживаемые.
Управление ключами
RFC 4880 описывает формат ключей и процедуры их создания, хранения и распространения. Ключи включают:
- Открытый ключ — содержит алгоритм, параметры (например, модуль и экспоненту для RSA) и идентификатор пользователя (User ID), который обычно представляет собой адрес электронной почты.
- Секретный ключ — зашифрован с использованием симметричного шифрования и парольной фразы (passphrase).
- Подписи — ключи могут быть подписаны другими пользователями (cross-signing) или центрами сертификации, что создает сеть доверия (web of trust).
Стандарт также определяет механизмы отзыва ключей (key revocation), истечения срока действия (expiration) и привязки к пользователям.
Подписи
RFC 4880 описывает несколько типов подписей:
- Подпись данных — подтверждает целостность и авторство сообщения.
- Подпись ключа — подтверждает принадлежность открытого ключа пользователю (User ID).
- Подпись отзыва — аннулирует ключ или подпись.
- Подпись временной метки — подтверждает время создания подписи.
Подпись включает информацию об алгоритме, хеше, времени создания и идентификаторе подписывающего ключа.
Структура пакетов
Каждый пакет в OpenPGP имеет следующий формат:
- Тег (1 байт) — указывает тип пакета.
- Длина (1, 2, 4 или 5 байт) — определяет длину данных пакета.
- Данные — содержимое пакета, зависящее от типа.
Стандарт поддерживает два способа кодирования длины: старый (Old-Style) и новый (New-Style). Новый способ позволяет использовать длину до 4 байт и поддерживает частичные тела (partial body lengths), что полезно для потоковой передачи данных.
Применение
OpenPGP, основанный на RFC 4880, широко используется для:
- Шифрования электронной почты — программы, такие как GnuPG, Enigmail (для Mozilla Thunderbird) и Symantec Encryption Desktop, реализуют стандарт для защиты переписки.
- Цифровой подписи программного обеспечения — многие дистрибутивы Linux и другие проекты подписывают свои пакеты с помощью OpenPGP.
- Аутентификации и управления ключами — в системах, где требуется проверка подлинности без центрального удостоверяющего центра (например, в сети доверия).
- Шифрования файлов и архивов — для защиты данных на диске или при передаче.
Критика и ограничения
Несмотря на широкое распространение, RFC 4880 подвергается критике за несколько аспектов:
- Сложность реализации — из-за большого количества опций и алгоритмов реализация полного стандарта сложна и подвержена ошибкам.
- Устаревшие алгоритмы — некоторые алгоритмы, такие как MD5 и SHA-1, считаются криптографически слабыми, но все еще поддерживаются стандартом для обратной совместимости.
- Отсутствие поддержки современных механизмов — например, не поддерживается Perfect Forward Secrecy (PFS) на уровне протокола, хотя его можно реализовать на уровне приложения.
- Проблемы с управлением ключами — сеть доверия, хотя и децентрализована, может быть сложна для массового использования и требует активного управления.
Связанные стандарты
RFC 4880 является частью семейства стандартов OpenPGP. К другим важным RFC относятся:
- RFC 1991 — первая версия стандарта (1997 год).
- RFC 2440 — вторая версия (1998 год).
- RFC 6637 — добавление поддержки эллиптической криптографии (2015 год).
- RFC 8351 — уточнение использования ECC (2018 год).
- RFC 9580 — обновление формата ключей и подписей (2024 год).
Источники
- RFC 4880 — OpenPGP Message Format (ноябрь 2007 года).
- RFC 1991 — PGP Message Exchange Formats (август 1997 года).
- RFC 2440 — OpenPGP Message Format (ноябрь 1998 года).
- RFC 6637 — Elliptic Curve Cryptography (ECC) in OpenPGP (июнь 2015 года).
- RFC 8351 — Elliptic Curve Cryptography (ECC) in OpenPGP (март 2018 года).
- RFC 9580 — OpenPGP Message Format (июнь 2024 года).
- Документация GnuPG (GNU Privacy Guard).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →