Безопасность
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.
Производительность
| CPU | AES-256-GCM (с AES-NI) | ChaCha20-Poly1305 | Победитель |
|---|---|---|---|
| Intel x86-64 (десктоп/сервер) | 4–10 GB/sec | 2–4 GB/sec | AES |
| ARM Cortex-A53 (бюджетный смартфон) | 0.5 GB/sec | 1.5 GB/sec | ChaCha |
| ARM Cortex-A78 (флагман 2022+) | 5–8 GB/sec | 3–5 GB/sec | AES |
| MIPS на роутере (без AES-NI) | 30 Mbit/sec | 250 Mbit/sec | ChaCha |
Поэтому выбор по умолчанию у современных стеков: 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 — равноправный шифр.