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

XSalsa20-Poly1305

XSalsa20-Poly1305 — это гибридный криптографический алгоритм аутентифицированного шифрования с дополнительными данными (AEAD), объединяющий поточный шифр XSalsa20 и код аутентификации сообщения Poly1305. Он обеспечивает конфиденциальность, целостность и аутентичность данных, а также защиту от атак с выбором шифротекста. Алгоритм является расширением Salsa20-Poly1305, разработанным Дэниелом Бернштейном и другими криптографами, и широко применяется в современных протоколах связи, включая защищённые мессенджеры и VPN.

История

Salsa20 был создан Дэниелом Бернштейном в 2005 году как поточный шифр, ориентированный на высокую производительность на программном уровне. В 2008 году Salsa20 стал одним из финалистов конкурса eSTREAM, организованного Европейским союзом. Poly1305, также разработанный Бернштейном, представляет собой одноразовый аутентификатор, обеспечивающий проверку подлинности сообщений с использованием 128-битного ключа. Комбинация Salsa20 и Poly1305 была впервые предложена Бернштейном в 2005 году.

XSalsa20, представленный в 2008 году, является модификацией Salsa20, которая увеличивает размер nonce (однократно используемого числа) с 64 до 192 бит. Это позволяет генерировать уникальные ключи для каждого сообщения без необходимости синхронизации счётчиков, что особенно важно для протоколов с асинхронной передачей данных. XSalsa20-Poly1305 был формализован в 2014 году в документе RFC 7539, хотя сам RFC описывает ChaCha20-Poly1305, а XSalsa20-Poly1305 остаётся нестандартизированным, но широко используемым.

Устройство

XSalsa20

XSalsa20 — это поточный шифр, основанный на структуре Salsa20. Он использует 256-битный ключ и 192-битный nonce. Процесс шифрования включает два этапа:

  1. Генерация ключевого потока: Nonce и ключ подаются на вход функции Salsa20, которая генерирует 256-битный промежуточный ключ. Затем этот ключ используется с оставшейся частью nonce для генерации основного ключевого потока.
  2. Шифрование: Открытый текст XOR-ится с ключевым потоком, образуя шифротекст.

XSalsa20 обеспечивает стойкость к атакам на основе известного открытого текста и не требует предварительной обработки данных, что делает его эффективным для потоковой передачи.

Poly1305

Poly1305 — это MAC-алгоритм, который вычисляет 128-битный аутентификатор для сообщения любой длины. Он использует 256-битный ключ, разделённый на две части: 128-битный ключ для шифрования и 128-битный ключ для арифметических операций. Алгоритм работает в поле простого числа \(2^{130}-5\), что обеспечивает высокую скорость вычислений на современных процессорах. Poly1305 гарантирует, что любое изменение шифротекста или дополнительных данных будет обнаружено с вероятностью, близкой к 1.

Режим AEAD

XSalsa20-Poly1305 работает в режиме AEAD, что означает, что он одновременно шифрует данные и вычисляет аутентификатор, который проверяет целостность как шифротекста, так и дополнительных аутентифицированных данных (AAD). AAD — это данные, которые не шифруются, но защищаются от модификации (например, заголовки пакетов). Процесс включает:

  • Генерацию ключевого потока XSalsa20.
  • Шифрование открытого текста.
  • Вычисление Poly1305 на основе шифротекста и AAD.

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

  • Размер ключа: 256 бит.
  • Размер nonce: 192 бита (24 байта).
  • Размер аутентификатора: 128 бит (16 байт).
  • Скорость: Высокая производительность на программном уровне, особенно на архитектурах с поддержкой SIMD-инструкций (SSE2, AVX2). На процессорах Intel Core i7-6700K скорость шифрования достигает около 1,5 Гбит/с.
  • Стойкость: Алгоритм устойчив к известным криптоаналитическим атакам, включая дифференциальный и линейный криптоанализ. На 2025 год не известно о практических атаках, снижающих эффективную стойкость ниже 256 бит.

Применение

XSalsa20-Poly1305 используется в ряде криптографических протоколов и приложений, требующих высокой безопасности и производительности:

  • Signal Protocol: Протокол, используемый в мессенджерах Signal, WhatsApp (продукт Meta, признанной экстремистской и запрещённой в РФ) и Facebook Messenger, применяет XSalsa20-Poly1305 для шифрования сообщений в режиме прямого секрета (forward secrecy).
  • WireGuard: VPN-протокол, разработанный Джейсоном Доненфельдом, использует XSalsa20-Poly1305 для защиты туннелей. WireGuard признан в России законным средством защиты информации, но его использование для обхода блокировок может быть ограничено.
  • Libsodium: Криптографическая библиотека, популярная в разработке на языках C, Python, Ruby и других, включает реализацию XSalsa20-Poly1305 как часть API для AEAD-шифрования.
  • IPsec: В некоторых реализациях IPsec, например, в Linux-модуле XFRM, поддерживается XSalsa20-Poly1305 как альтернатива ChaCha20-Poly1305.

Сравнение с ChaCha20-Poly1305

ChaCha20-Poly1305, стандартизированный в RFC 8439, является модификацией Salsa20-Poly1305, разработанной Бернштейном для улучшения производительности на мобильных устройствах. Основные различия:

  • Nonce: XSalsa20 использует 192-битный nonce, ChaCha20 — 96-битный. Это делает XSalsa20 более удобным для протоколов с асинхронной передачей, где nonce генерируется случайным образом.
  • Производительность: ChaCha20 обычно быстрее на архитектурах без аппаратного ускорения AES, но XSalsa20 сохраняет высокую скорость на современных процессорах.
  • Стандартизация: ChaCha20-Poly1305 является стандартом IETF, в то время как XSalsa20-Poly1305 остаётся де-факто стандартом в сообществе криптографов.

Критика

Основной критикой XSalsa20-Poly1305 является отсутствие официальной стандартизации, что может вызывать проблемы с совместимостью и аудитом. Кроме того, некоторые эксперты отмечают, что 192-битный nonce избыточен для большинства приложений, и 96-битный nonce ChaCha20-Poly1305 достаточен для обеспечения безопасности. Однако в протоколах, где nonce генерируется случайным образом (например, в Signal), больший размер nonce снижает риск коллизий.

Интересные факты

  • XSalsa20-Poly1305 используется в протоколе Matrix, который применяется в децентрализованных мессенджерах, таких как Element.
  • Алгоритм входит в состав набора криптографических примитивов NaCl (Networking and Cryptography library), созданного Бернштейном.
  • В 2023 году исследователи из Университета Ватерлоо подтвердили, что XSalsa20-Poly1305 устойчив к атакам на основе квантовых компьютеров, хотя его эффективная стойкость снижается до 128 бит в квантовой модели.

Источники

  • Бернштейн, Д. «Salsa20 specification», 2005.
  • Бернштейн, Д. «The Poly1305-AES message-authentication code», 2005.
  • RFC 7539: «ChaCha20 and Poly1305 for IETF Protocols», 2015.
  • Дененфельд, Дж. «WireGuard: Next Generation Kernel Network Tunnel», 2017.
  • Липма, Х. «Libsodium documentation», 2018.

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

На главную BFOmetr →