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

ChaCha20

ChaCha20 — это потоковый шифр (симметричный шифр), разработанный Дэниелом Бернштейном в 2008 году. Является модификацией более раннего шифра Salsa20, также созданного Бернштейном. ChaCha20 относится к семейству шифров на основе арифметики с добавлением, вращением и XOR (ARX). Он получил широкое распространение как альтернатива шифру AES (Advanced Encryption Standard) в системах, где важна высокая скорость программной реализации и устойчивость к атакам по времени.

История

Шифр Salsa20 был представлен Бернштейном в 2005 году и стал финалистом конкурса eSTREAM (проект Европейского Союза по поиску новых потоковых шифров). В 2008 году Бернштейн опубликовал модификацию, названную ChaCha. Основным отличием ChaCha от Salsa20 стала изменённая функция раунда, которая, по замыслу автора, обеспечивает лучшую диффузию (распространение влияния одного бита входных данных на выходные) и повышенную устойчивость к криптоанализу. Впоследствии были предложены варианты с различным числом раундов: ChaCha8 (8 раундов), ChaCha12 (12 раундов) и наиболее распространённый ChaCha20 (20 раундов).

ChaCha20 привлёк внимание криптографического сообщества, особенно после того, как в 2013 году были обнаружены уязвимости в реализации шифра RC4 в протоколе TLS. В 2014 году Google объявил о внедрении ChaCha20 в связке с алгоритмом аутентификации Poly1305 (также разработанным Бернштейном) в протоколе TLS для мобильных устройств, где программная реализация AES часто была медленнее из-за отсутствия аппаратного ускорения. В 2018 году комбинация ChaCha20-Poly1305 была официально стандартизирована в RFC 8439 (Internet Engineering Task Force, IETF) как часть протокола TLS 1.3.

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

ChaCha20 является потоковым шифром, который генерирует псевдослучайный ключевой поток (гамму), который затем побитово складывается (XOR) с открытым текстом для получения шифротекста. Дешифрование выполняется аналогично — XOR шифротекста с тем же ключевым потоком.

Инициализация состояния

Внутреннее состояние шифра представляет собой матрицу 4×4 из 32-битных слов (всего 16 слов, 512 бит). Состояние инициализируется следующим образом:

Функция раунда

Каждый раунд ChaCha20 состоит из четырёх операций, называемых «квартетными раундами» (quarter rounds). Квартетный раунд принимает на вход четыре 32-битных слова (a, b, c, d) и выполняет последовательность операций сложения, XOR и циклического сдвига:

  1. a = a + b; d = d XOR a; d = d <<< 16
  2. c = c + d; b = b XOR c; b = b <<< 12
  3. a = a + b; d = d XOR a; d = d <<< 8
  4. c = c + d; b = b XOR c; b = b <<< 7

Один полный раунд ChaCha20 (из 20) состоит из двух типов квартетных раундов:

После выполнения всех 20 раундов (10 пар «столбец-диагональ») исходное состояние складывается с результирующим состоянием (побитовое сложение по модулю 2^32). Полученный 64-байтовый блок используется как ключевой поток для шифрования 64 байт открытого текста. Затем счётчик увеличивается, и процесс повторяется для следующего блока.

Классификация и варианты

ChaCha20 относится к классу потоковых шифров на основе блочных операций (block cipher in counter mode, CTR). Он также может рассматриваться как псевдослучайная функция (PRF).

Основные варианты:

Применение

ChaCha20 получил широкое распространение в современных криптографических протоколах и системах:

Криптостойкость

На 2025 год ChaCha20 считается криптостойким шифром. Лучшие известные атаки на ChaCha20 с 20 раундами являются теоретическими и требуют либо огромных вычислительных ресурсов (например, атака на основе дифференциального криптоанализа с трудоёмкостью около 2^256 операций), либо предполагают использование очень малого числа раундов (например, ChaCha6 взломан, ChaCha8 имеет серьёзные уязвимости). Практических атак на ChaCha20 не существует.

Основные преимущества ChaCha20 перед AES:

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

Источники

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

На главную BFOmetr →