Открыть сервис

Режим 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 недоступна или нежелательна.

Источники

  1. RFC 8439 — ChaCha20 and Poly1305 for IETF Protocols (2018).
  2. Bernstein, D. J. (2008). "ChaCha, a variant of Salsa20".
  3. Bernstein, D. J. (2005). "The Poly1305-AES message-authentication code".
  4. RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3 (2018).
  5. RFC 7634 — ChaCha20-Poly1305 Cipher Suites for Transport Layer Security (TLS) (2015).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →