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

ChaCha20-Poly1305

ChaCha20-Poly1305 — это комбинированный алгоритм аутентифицированного шифрования с дополнительными данными (AEAD), объединяющий потоковый шифр ChaCha20 и код аутентификации сообщения (MAC) Poly1305. Предназначен для обеспечения конфиденциальности, целостности и подлинности данных при передаче или хранении. Алгоритм был разработан Дэниелом Бернштейном в 2005—2008 годах и получил широкое распространение в протоколах безопасности, таких как TLS 1.2 и TLS 1.3, а также в криптографических библиотеках (OpenSSL, libsodium, BoringSSL). Основное преимущество ChaCha20-Poly1305 — высокая скорость работы на программном уровне, особенно на устройствах без аппаратной поддержки шифрования (например, мобильные процессоры ARM), а также устойчивость к временным атакам.

История

Алгоритм ChaCha20 был представлен Дэниелом Бернштейном в 2008 году как модификация его же потокового шифра Salsa20, предложенного в 2005 году для участия в проекте eSTREAM. Основное отличие ChaCha20 от Salsa20 — изменённая функция раундового смешивания, которая улучшила диффузию и повысила устойчивость к криптоанализу. Poly1305, разработанный Бернштейном в 2005 году, изначально предназначался для аутентификации сообщений с использованием одноразового ключа.

В 2013 году Бернштейн совместно с Таньей Ланге и Питером Швабе официально объединил ChaCha20 и Poly1305 в единый AEAD-режим, опубликовав спецификацию в RFC 7539 (в 2015 году). В 2018 году алгоритм был стандартизирован в RFC 8439, который стал обязательным для реализации в протоколе TLS 1.3 (RFC 8446). ChaCha20-Poly1305 также используется в протоколах SSH, IPsec (RFC 7634), WireGuard и Signal.

Устройство и принцип работы

ChaCha20-Poly1305 состоит из двух независимых компонентов, работающих параллельно:

ChaCha20 (потоковый шифр)

ChaCha20 генерирует псевдослучайную последовательность байтов (гамму), которая накладывается на открытый текст с помощью операции XOR. Шифр основан на 20 раундах преобразования 4×4-матрицы 32-битных слов. Начальное состояние матрицы формируется из 256-битного ключа, 96-битного одноразового номера (nonce) и 32-битного счётчика блоков. Каждый блок генерирует 64 байта (512 бит) гаммы.

Основные этапы раунда:

ChaCha20 не использует аппаратные инструкции AES (AES-NI), что делает его эффективным на процессорах без поддержки таких инструкций.

Poly1305 (код аутентификации)

Poly1305 вычисляет 16-байтовый тег аутентификации для каждого сообщения. Алгоритм работает в поле простого числа 2¹³⁰ − 5 (порядка 2.6×10³⁹). Ключ Poly1305 (32 байта) делится на две части:

Сообщение разбивается на 16-байтовые блоки, каждый из которых интерпретируется как число по модулю 2¹³⁰ − 5. Вычисляется полиномиальное значение с использованием схемы Хорнера, после чего к результату прибавляется s. Полученное 128-битное число является тегом аутентификации.

Режим AEAD

В режиме AEAD алгоритм обрабатывает три типа данных:

Процесс:

  1. Генерация гаммы ChaCha20 с nonce и счётчиком.
  2. Шифрование открытого текста путём XOR с гаммой.
  3. Вычисление тега Poly1305 на основе шифротекста, AAD и длины обоих полей.
  4. Формирование выходного сообщения: шифротекст + тег (16 байт).

Характеристики

Применение

ChaCha20-Poly1305 активно используется в следующих областях:

Критика и ограничения

Основное ограничение ChaCha20-Poly1305 — требование уникальности nonce для каждого сообщения при одном ключе. Повторное использование nonce приводит к возможности восстановления ключа и подделки тега аутентификации. В некоторых реализациях (например, в протоколе WireGuard) nonce генерируется как счётчик, что гарантирует уникальность, но требует синхронизации состояния.

Критики также отмечают, что ChaCha20-Poly1305 не обеспечивает защиту от атак по сторонним каналам (например, по времени выполнения) в программных реализациях без специальных мер (константное время). Однако большинство современных библиотек (libsodium, OpenSSL) реализуют операции в константном времени.

Сравнение с AES-GCM:

Стандартизация и RFC

Источники

  1. Bernstein, D. J. (2008). «ChaCha, a variant of Salsa20». Workshop Record of SASC 2008.
  2. Bernstein, D. J. (2005). «The Poly1305-AES message-authentication code». Fast Software Encryption (FSE 2005).
  3. Nir, Y., Langley, A. (2018). RFC 8439: ChaCha20 and Poly1305 for IETF Protocols. Internet Engineering Task Force.
  4. Rescorla, E. (2018). RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3. Internet Engineering Task Force.
  5. Langley, A., Chang, W. (2015). RFC 7539: ChaCha20 and Poly1305 for IETF Protocols. Internet Engineering Task Force.
  6. Bernstein, D. J., Lange, T., Schwabe, P. (2013). «NaCl: Networking and Cryptography library».

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

На главную BFOmetr →