CoderTools

Шифрование ChaCha20

Современный потоковый шифр с опциональной аутентификацией

Безопасность на стороне клиента

Все операции шифрования/дешифрования выполняются локально в вашем браузере. Данные не отправляются ни на какой сервер.

ChaCha20: 256-битный потоковый шифр с 96-битным nonce. Быстрый и безопасный, без аутентификации.

Начальное значение счётчика (по умолчанию: 0)

Параметры формата
🔒 100% Локальная обработкаВаши файлы обрабатываются полностью в вашем браузере. Никакие данные не отправляются на сервер.

О ChaCha20

ChaCha20 — это современный потоковый шифр, разработанный Дэниелом Дж. Бернштейном в 2008 году, производный от шифра Salsa20. Он использует 256-битный ключ и работает с 512-битными блоками, генерируя поток ключей, который XOR-ится с открытым текстом для шифрования. Шифр известен своей скоростью, безопасностью и устойчивостью к атакам по времени.

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

Сравнение алгоритмов

Алгоритм Аутентификация Длина ключа Размер nonce Применение
ChaCha20 Потоковый шифр 256 bits 96 bits (12 bytes) Сырое шифрование, пользовательские протоколы
ChaCha20-Poly1305 AEAD 256 bits 96 bits (12 bytes) TLS 1.3, QUIC, защищённые сообщения
XChaCha20 Потоковый шифр 256 bits 192 bits (24 bytes) Сценарии со случайным nonce
XChaCha20-Poly1305 AEAD 256 bits 192 bits (24 bytes) Большинство приложений (рекомендуется)

Как работает ChaCha20

ChaCha20 работает за 20 раундов, применяя четвертьраундовые функции к матрице 4×4 из 32-битных слов. Начальное состояние состоит из:

Каждый раунд перемешивает состояние с помощью сложений, XOR и ротаций, обеспечивая отличную диффузию при сохранении высокой скорости в программной реализации.

AEAD: Аутентифицированное шифрование

ChaCha20-Poly1305 — это конструкция AEAD, стандартизированная в RFC 8439. Она сочетает ChaCha20 для шифрования с MAC Poly1305 для аутентификации. Это обеспечивает как конфиденциальность, так и целостность — любое изменение шифротекста или AAD будет обнаружено при дешифровании. 128-битный тег аутентификации добавляется к шифротексту.

Это обеспечивает как конфиденциальность, так и целостность - любое изменение шифротекста или AAD будет обнаружено при дешифровании. 128-битный тег аутентификации вычисляется по шифротексту и AAD.

Основные особенности

  • Высокая производительность: Оптимизирован для программных реализаций, в 3 раза быстрее AES без аппаратного ускорения
  • Постоянное время: Устойчив к атакам по времени кэша, в отличие от табличных реализаций AES
  • Простой дизайн: Использует только операции ARX (сложение, ротация, XOR), легко правильно реализовать
  • Широкое применение: Используется в TLS 1.3, OpenSSH, WireGuard, Signal Protocol и др.
  • Расширенный nonce: Вариант XChaCha20 позволяет безопасную генерацию случайного nonce без риска коллизий

Вопросы безопасности

  • Никогда не используйте nonce повторно с тем же ключом — это полностью нарушает безопасность
  • Используйте варианты AEAD (Poly1305) для большинства приложений для обнаружения подделки
  • Для случайных nonce используйте XChaCha20 (192 бита) для минимизации вероятности коллизий
  • Используйте подходящую KDF (HKDF, Argon2) для получения ключей из паролей

Реальное применение

  • TLS 1.3: Набор шифров по умолчанию (TLS_CHACHA20_POLY1305_SHA256)
  • WireGuard VPN: Основной протокол шифрования
  • Signal Protocol: Сквозное шифрование сообщений
  • Cloudflare: Предпочтительнее AES-GCM для мобильных клиентов
  • Ядро Linux: CSPRNG (/dev/urandom)

Ссылки

FAQ

В чём разница между ChaCha20 и AES?

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

Почему использовать XChaCha20 вместо ChaCha20?

192-битный nonce XChaCha20 позволяет безопасную генерацию случайного nonce. С 96-битным nonce требуется тщательное управление для избежания коллизий. XChaCha20 рекомендуется, когда вы не можете гарантировать уникальные последовательные nonce.

Для чего нужен параметр счётчика?

Счётчик позволяет шифровать сообщения длиннее 64 байт, увеличиваясь для каждого блока. Для режимов AEAD он начинается с 1 (блок 0 генерирует ключ Poly1305). Обычно можно оставить значение по умолчанию (0).

Можно ли шифровать файлы с помощью этого инструмента?

Этот инструмент полностью работает в браузере и подходит для шифрования текста и небольших данных. Для больших файлов используйте нативные инструменты, такие как openssl или приложения на основе libsodium.

Безопасен ли этот инструмент для использования в продакшене?

Этот инструмент предназначен для образовательных и разработческих целей. Хотя реализация соответствует стандартным спецификациям, продакшн-системы должны использовать хорошо проверенные криптографические библиотеки, такие как libsodium, OpenSSL или API платформы.