Режим ChaCha20-Poly1305¶
ChaCha20-Poly1305 — это аутентифицированный алгоритм шифрования с дополнительными данными (AEAD), объединяющий потоковый шифр ChaCha20 и аутентификационный код сообщения Poly1305. Он обеспечивает конфиденциальность, целостность и аутентификацию данных, а также защиту от атак с подменой сообщений. Алгоритм был разработан Дэниелом Бернштейном в 2008 году как усовершенствованная альтернатива более старому режиму AES-GCM, особенно в контексте программной реализации и работы на устройствах без аппаратной поддержки шифрования.
¶История и разработка
ChaCha20 является модификацией более раннего потокового шифра Salsa20, также созданного Бернштейном. Основное отличие — увеличенное с 64 до 96 бит количество раундов (в ChaCha20 используется 20 раундов, отсюда число 20) и иная структура внутренних операций, что повышает устойчивость к криптоанализу. Poly1305 — это одноразовый аутентификатор сообщения, основанный на полиномиальном хешировании над полем простого порядка 2^130 - 5, разработанный Бернштейном в 2005 году.
В 2013 году ChaCha20-Poly1305 был предложен в качестве замены AES-GCM в протоколах безопасности, таких как TLS, из-за проблем с производительностью AES-GCM на устройствах без аппаратного ускорения AES. В 2018 году алгоритм был включён в стандарт RFC 8439 (Internet Engineering Task Force, IETF) как обязательный для реализации в протоколе TLS 1.3. Позднее он также был принят в качестве стандарта для шифрования в протоколах SSH, IPsec и WireGuard.
¶Устройство и принцип работы
Режим ChaCha20-Poly1305 работает в два этапа: сначала выполняется шифрование данных с помощью ChaCha20, затем вычисляется аутентификационный тег с помощью Poly1305. Оба этапа используют один и тот же ключ и одноразовый номер (nonce).
¶ChaCha20
ChaCha20 — это потоковый шифр, который генерирует псевдослучайную последовательность битов (ключевой поток), которая затем складывается по модулю 2 (XOR) с открытым текстом для получения шифротекста. Шифр использует 256-битный ключ, 96-битный одноразовый номер и 32-битный счётчик блока. Внутренняя структура основана на 16-словном (64-байтном) состоянии, которое инициализируется константами, ключом, счётчиком и одноразовым номером. Каждый раунд включает в себя операции сложения, XOR и циклического сдвига, выполняемые над 32-битными словами. 20 раундов (10 двойных раундов) обеспечивают высокую степень перемешивания.
¶Poly1305
Poly1305 — это аутентификатор, который вычисляет 16-байтовый тег для данного сообщения и ключа. Он работает в режиме одноразового ключа: для каждого сообщения используется уникальный ключ, полученный из первых 32 байтов ключевого потока ChaCha20. Алгоритм разбивает сообщение на 16-байтовые блоки, каждый блок интерпретируется как число 2^130-5, и вычисляется полиномиальное значение по модулю этого простого числа. Результат затем XOR-ится с последними 16 байтами ключевого потока, образуя финальный тег.
¶AEAD-режим
В режиме AEAD (Authenticated Encryption with Associated Data) ChaCha20-Poly1305 принимает на вход:
- открытый текст (данные для шифрования);
- дополнительные данные (AAD, Associated Authenticated Data), которые не шифруются, но аутентифицируются;
- ключ (256 бит);
- одноразовый номер (96 бит).
На выходе алгоритм выдаёт шифротекст (той же длины, что и открытый текст) и аутентификационный тег (128 бит). При расшифровке сначала проверяется тег; если он не совпадает, данные считаются скомпрометированными и не возвращаются.
¶Преимущества и недостатки
¶Преимущества
- Высокая производительность на программном уровне: ChaCha20-Poly1305 не требует аппаратной поддержки AES или специальных инструкций (например, AES-NI) и эффективно работает на процессорах общего назначения, включая ARM и x86.
- Устойчивость к временным атакам: операции шифрования и аутентификации не зависят от данных, что затрудняет атаки по сторонним каналам.
- Простота реализации: алгоритм не требует сложных таблиц подстановок или предварительных вычислений, что снижает риск ошибок при реализации.
- Безопасность: ChaCha20-Poly1305 считается криптостойким и не имеет известных уязвимостей при правильном использовании (уникальный одноразовый номер для каждого сообщения).
¶Недостатки
- Отсутствие аппаратного ускорения: на устройствах с аппаратной поддержкой AES (например, современные процессоры Intel) AES-GCM может быть быстрее ChaCha20-Poly1305.
- Зависимость от одноразового номера: повторное использование одного и того же одноразового номера с одним ключом полностью компрометирует безопасность (аналогично другим потоковым шифрам).
- Меньшая распространённость в старых протоколах: до широкого внедрения TLS 1.3 многие системы использовали AES-GCM, что создаёт проблемы совместимости.
¶Применение
ChaCha20-Poly1305 активно используется в современных криптографических протоколах и системах:
- TLS 1.3: алгоритм является обязательным для реализации в соответствии с RFC 8446. Он используется для шифрования данных в канале связи между клиентом и сервером.
- WireGuard: протокол VPN, использующий ChaCha20-Poly1305 для защиты трафика. WireGuard получил широкое распространение в Linux и других операционных системах.
- SSH: некоторые реализации (например, OpenSSH) поддерживают ChaCha20-Poly1305 как альтернативу AES-GCM.
- IPsec: в RFC 7634 описано использование ChaCha20-Poly1305 в протоколе IPsec для защиты VPN-туннелей.
- Мобильные приложения: из-за эффективности на ARM-процессорах алгоритм часто используется в приложениях для мессенджеров (например, Signal, WhatsApp) и браузерах.
- Криптовалюты: некоторые блокчейн-протоколы, такие как Monero, используют ChaCha20-Poly1305 для шифрования транзакций.
¶Криптоанализ и безопасность
На момент 2025 года не существует известных эффективных атак на ChaCha20-Poly1305, которые бы нарушали его конфиденциальность или аутентификацию при правильном использовании. Алгоритм прошёл многолетнюю проверку криптографическим сообществом. Основные риски связаны с неправильной реализацией (например, повторное использование одноразового номера, утечка ключа через побочные каналы) или использованием слабых случайных чисел для генерации ключей.
ChaCha20-Poly1305 считается одним из самых надёжных и безопасных AEAD-режимов, рекомендованных для использования в современных системах, особенно в условиях, где аппаратная поддержка AES недоступна или нежелательна.
¶Источники
- RFC 8439 — ChaCha20 and Poly1305 for IETF Protocols (2018).
- Bernstein, D. J. (2008). "ChaCha, a variant of Salsa20".
- Bernstein, D. J. (2005). "The Poly1305-AES message-authentication code".
- RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3 (2018).
- RFC 7634 — ChaCha20-Poly1305 Cipher Suites for Transport Layer Security (TLS) (2015).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


