Народный

Безопасность

ChaCha20-Poly1305 — потоковый AEAD-шифр

Современный потоковый шифр + аутентификационный код в одной паре. Быстрый без аппаратной поддержки, идеален для мобильных устройств. Основа WireGuard.

Определение

ChaCha20-Poly1305 — связка потокового шифра ChaCha20 (Daniel J. Bernstein, 2008) и аутентификационного кода Poly1305 (DJB, 2005), стандартизованная в RFC 8439 (2018). AEAD (Authenticated Encryption with Associated Data) — за один проход обеспечивает и шифрование, и аутентификацию.

В отличие от блочных шифров (AES), ChaCha20 — это потоковый шифр на основе ARX-операций (Add, Rotate, XOR). Не требует аппаратной поддержки для быстрой работы.

Зачем нужен, если есть AES

  • На устройствах БЕЗ AES-NI. На дешёвых ARM-телефонах, IoT-устройствах, старых ноутбуках AES программно работает в 3–10 раз медленнее, чем ChaCha20.
  • Простая реализация. Меньше тонкостей с side-channel-атаками, чем у AES. Constant-time реализация ChaCha20 пишется без специальных трюков.
  • Криптографическое разнообразие. Если бы все доверяли только AES, в случае внезапного криптоанализа AES (теоретически невозможного, но в криптомире никогда не говори «никогда») — весь интернет был бы открыт. ChaCha20 — независимая семья шифров, разработанная другим криптографом.

Где используется

  • WireGuard — единственный шифр в протоколе. Принципиальный выбор: проектировщик WireGuard Jason Donenfeld хотел минимальную атакуемую поверхность.
  • TLS 1.3 — наравне с AES-256-GCM. Браузеры (Chrome/Firefox) на ARM-телефонах автоматически предпочитают ChaCha20-Poly1305.
  • OpenSSH — поддерживается с OpenSSH 6.5 (2014).
  • Outline VPN / Shadowsocks — Shadowsocks-2022 поддерживает ChaCha20-Poly1305 как первый класс шифров.
  • OpenVPN 2.5+ — добавлен (требует OpenSSL 1.1.1+).
  • Mosh — UDP-аналог SSH использует AES-OCB, но рассматривает миграцию на ChaCha20-Poly1305.

Производительность

CPUAES-256-GCM (с AES-NI)ChaCha20-Poly1305Победитель
Intel x86-64 (десктоп/сервер)4–10 GB/sec2–4 GB/secAES
ARM Cortex-A53 (бюджетный смартфон)0.5 GB/sec1.5 GB/secChaCha
ARM Cortex-A78 (флагман 2022+)5–8 GB/sec3–5 GB/secAES
MIPS на роутере (без AES-NI)30 Mbit/sec250 Mbit/secChaCha

Поэтому выбор по умолчанию у современных стеков: AES на серверах, ChaCha20 на мобильных и роутерах.

Криптографические свойства

  • Размер ключа: 256 бит.
  • Размер nonce: 96 бит. Достаточно для безопасной случайной генерации без коллизий в реальных объёмах трафика.
  • Размер тега аутентификации (Poly1305): 128 бит.
  • Стойкость: ни одной известной атаки лучше brute-force на 2^256 ключей.
  • Не зависит от устойчивости отдельных компонент — ChaCha20 и Poly1305 криптографически независимы.

Источники

  • RFC 8439 — ChaCha20-Poly1305 в IETF.
  • D. J. Bernstein — ChaCha family page.
  • WireGuard whitepaper — обоснование выбора.

Связанные термины

  • AES-256-GCM — конкурент.
  • WireGuard — главный потребитель.
  • TLS 1.3 — где ChaCha20 — равноправный шифр.