RFC 7539
RFC 7539 — это запрос комментариев (Request for Comments), опубликованный Инженерным советом Интернета (IETF) в мае 2015 года, который определяет набор алгоритмов аутентифицированного шифрования с дополнительными данными (AEAD) на основе поточного шифра ChaCha20 и алгоритма аутентификации Poly1305. Документ является стандартом, заменяющим экспериментальный RFC 7539, и описывает конкретные параметры и процедуры для использования ChaCha20 и Poly1305 в протоколах TLS (Transport Layer Security) и IPsec (Internet Protocol Security), а также в других приложениях, требующих высокой производительности на программном уровне, особенно на устройствах без аппаратной поддержки AES (Advanced Encryption Standard).
История и контекст
Разработка ChaCha20 и Poly1305 началась в 2005 году, когда криптограф Дэниел Бернштейн представил поточный шифр Salsa20, а затем его модификацию ChaCha20, улучшающую диффузию и производительность. Poly1305, также созданный Бернштейном, был представлен как быстрый одноразовый аутентификатор сообщений (MAC). Первоначально эти алгоритмы не были широко стандартизированы, но их эффективность на процессорах без аппаратного ускорения AES (например, на старых ARM-чипах или встроенных системах) привлекла внимание сообщества.
В 2013 году, после разоблачений Эдварда Сноудена, стало известно о возможных уязвимостях в реализации AES и алгоритмов, рекомендованных NIST. Это усилило интерес к альтернативным шифрам, не имеющим известных бэкдоров. В 2014 году Google внедрил ChaCha20-Poly1305 в протокол TLS для HTTPS-соединений в браузере Chrome, что подтвердило его практическую пригодность. В ответ IETF создала рабочую группу для стандартизации, результатом которой стал RFC 7539.
RFC 7539 был опубликован в мае 2015 года, заменив экспериментальный RFC 7539 (июнь 2015 года — примечание: в реальности RFC 7539 был опубликован один раз, но в некоторых источниках упоминается как обновление экспериментального RFC). Документ был подготовлен авторами: Йоав Нир (Yoav Nir) и Адам Лэнгли (Adam Langley), которые также участвовали в реализации ChaCha20 в Google. Впоследствии RFC 7539 был обновлён и заменён RFC 8439 (июнь 2018 года), который уточнил некоторые детали, такие как обработка нестандартных длин nonce и тегов.
Техническое описание
RFC 7539 определяет три взаимосвязанных алгоритма:
- ChaCha20 — поточный шифр, работающий с 512-битным состоянием (16 слов по 32 бита). Он использует 256-битный ключ, 32-битный счётчик и 96-битный nonce (однократно используемое число). Шифрование выполняется путём генерации ключевого потока, который XOR-ится с открытым текстом.
- Poly1305 — одноразовый аутентификатор сообщений (MAC), который принимает 256-битный одноразовый ключ (полученный из сеансового ключа) и сообщение, возвращая 128-битный тег аутентичности. Poly1305 гарантирует целостность и подлинность данных, если ключ используется только для одного сообщения.
- ChaCha20-Poly1305 — комбинированный AEAD-алгоритм, который объединяет шифрование и аутентификацию. Он принимает ключ, nonce, открытый текст и дополнительные аутентифицированные данные (AAD), возвращая зашифрованный текст и тег аутентичности.
Структура состояния ChaCha20
Состояние ChaCha20 представляет собой матрицу 4×4 32-битных слов, инициализируемую константами, ключом, счётчиком и nonce. Константы — это 4 слова: «expand 32-byte k» (0x61707865, 0x3320646e, 0x79622d32, 0x6b206574). Ключ занимает 8 слов (с 4 по 11), счётчик — 1 слово (12), nonce — 3 слова (13–15). Каждый раунд (всего 20 раундов: 8 «двойных» раундов) применяет операции четверть-раунда, состоящие из сложения по модулю 2³², XOR и циклического сдвига.
Процедура шифрования ChaCha20-Poly1305
- Инициализация: На основе ключа и nonce генерируется первый блок ключевого потока ChaCha20. Первые 32 байта этого блока используются как ключ для Poly1305.
- Шифрование: Оставшаяся часть ключевого потока (начиная с блока 1) XOR-ится с открытым текстом для получения зашифрованного текста. Длина зашифрованного текста равна длине открытого текста.
- Аутентификация: Poly1305 вычисляет тег на основе зашифрованного текста, AAD и длины этих полей. Для этого AAD дополняется нулями до 16-байтовой границы, затем зашифрованный текст также дополняется, после чего добавляются 8-байтовые значения длины AAD и зашифрованного текста (в little-endian).
- Вывод: К зашифрованному тексту добавляется 16-байтовый тег аутентичности.
Параметры nonce и счётчика
RFC 7539 использует 96-битный nonce и 32-битный счётчик, что позволяет зашифровать до 2³² блоков (примерно 256 ГБ) данных с одним nonce. Nonce может быть случайным или детерминированным (например, счётчиком), но его повторение с одним и тем же ключом приводит к компрометации безопасности.
Применение
RFC 7539 нашёл применение в нескольких ключевых протоколах:
- TLS 1.2 и 1.3: ChaCha20-Poly1305 стал одним из рекомендуемых шифров для TLS, особенно в Google Chrome и Android. В TLS 1.3 (RFC 8446) он включён в список обязательных к реализации шифров.
- IPsec: RFC 7634 определяет использование ChaCha20-Poly1305 в IPsec, где он обеспечивает аутентифицированное шифрование для ESP (Encapsulating Security Payload).
- SSH: В протоколе Secure Shell (SSH) ChaCha20-Poly1305 используется как альтернатива AES, например, в OpenSSH.
- WireGuard: Протокол VPN WireGuard (RFC 8997) использует ChaCha20-Poly1305 для шифрования туннелей, что обеспечивает высокую производительность на мобильных устройствах.
- QUIC: Протокол QUIC, разработанный Google, также использует ChaCha20-Poly1305 для защиты данных.
Преимущества и недостатки
Преимущества
- Программная производительность: ChaCha20-Poly1305 значительно быстрее AES-GCM на процессорах без аппаратного ускорения AES (например, на ARM Cortex-A53 или старых x86-процессорах).
- Безопасность: Алгоритмы не имеют известных уязвимостей, основанных на бэкдорах, и устойчивы к атакам на время выполнения (timing attacks) благодаря отсутствию таблиц подстановок.
- Простота реализации: Код ChaCha20 и Poly1305 компактен и легко реализуется на любых платформах, включая встраиваемые системы.
Недостатки
- Ограниченная длина nonce: 96-битный nonce требует осторожного управления, чтобы избежать повторений. В RFC 8439 добавлена поддержка 64-битного nonce для некоторых приложений.
- Отсутствие аппаратного ускорения: На современных процессорах с инструкциями AES-NI AES-GCM может быть быстрее ChaCha20-Poly1305.
- Нестандартный размер тега: 128-битный тег может быть избыточен для некоторых приложений, но RFC не предусматривает сокращённые теги.
Критика и обновления
RFC 7539 подвергался критике за неоднозначность в описании обработки nonce и счётчика. В частности, некоторые реализации интерпретировали nonce как 64-битный, что приводило к несовместимости. В ответ в 2018 году был опубликован RFC 8439, который уточнил, что nonce должен быть 96-битным, и добавил описание режима с 64-битным nonce и 64-битным счётчиком. Также RFC 8439 исправил ошибку в алгоритме Poly1305, связанную с порядком байтов при вычислении тега.
Интересные факты
- Название ChaCha20 происходит от испанского слова «cha-cha», отражающего ритмическую структуру алгоритма.
- Poly1305 использует арифметику по модулю 2¹³⁰−5, что позволяет эффективно реализовать на 32-битных процессорах.
- RFC 7539 был одним из первых стандартов, принятых IETF после скандала с АНБ, что подчеркнуло сдвиг в сторону алгоритмов с открытой криптографией.
Источники
- RFC 7539 — ChaCha20 and Poly1305 for IETF Protocols (май 2015)
- RFC 8439 — ChaCha20 and Poly1305 for IETF Protocols (июнь 2018)
- Bernstein, D. J. (2008). «ChaCha, a variant of Salsa20». Workshop Record of SASC 2008.
- Nir, Y., & Langley, A. (2015). «ChaCha20-Poly1305 Cipher Suites for Transport Layer Security (TLS)» (RFC 7905).
- Google Security Blog (2014). «Speeding up and strengthening HTTPS connections for Chrome on Android».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →