RC4 — потоковый симметричный шифр, разработанный Рональдом Ривестом в 1987 году. Он долгое время считался одним из самых простых и быстрых алгоритмов шифрования, что обеспечило ему широкое распространение в программных библиотеках, протоколах TLS, WEP и различных прикладных системах. В библиотеке CryptoJS он исторически присутствовал как один из доступных алгоритмов, однако в современной криптографии его использование считается небезопасным и полностью устаревшим.
RC4 относится к классу потоковых шифров. В отличие от блочных алгоритмов (например, AES), он не работает с фиксированными блоками данных, а шифрует поток байтов, последовательно комбинируя открытый текст с псевдослучайным ключевым потоком.
Алгоритм состоит из двух ключевых стадий:
1. Инициализация ключевого состояния (Key-Scheduling Algorithm, KSA) Создаётся массив S длиной 256 байт, который инициализируется последовательностью от 0 до 255. Затем происходит перемешивание этого массива на основе ключа переменной длины:
Формально процесс можно представить как последовательность обменов значений в массиве S, зависящих от ключа.
2. Генерация псевдослучайного потока (Pseudo-Random Generation Algorithm, PRGA) После инициализации алгоритм начинает генерировать поток байтов:
Именно эта простота сделала RC4 крайне быстрым в программной реализации.
RC4 получил широкое распространение благодаря нескольким факторам:
В начале 2000-х RC4 использовался в:
Со временем были обнаружены фундаментальные уязвимости, которые невозможно исправить без полного отказа от алгоритма.
RC4 не генерирует равномерно распределённый псевдослучайный поток. Исследования показали наличие статистических смещений:
Это нарушает базовое требование криптографической стойкости — отсутствие статистической предсказуемости.
Одним из ключевых ударов по RC4 стала атака FMS, показавшая, что:
Эта атака стала причиной фактического взлома Wi-Fi сетей на основе WEP.
Позднее были обнаружены атаки на реализацию RC4 в TLS:
Даже при корректной реализации алгоритм оказался небезопасным в реальных сетевых условиях.
KSA RC4 не обеспечивает достаточной диффузии ключа. Это приводит к тому, что:
Отказ от RC4 в криптографических библиотеках и стандартах связан не с одной уязвимостью, а с совокупностью фундаментальных проблем.
Современная криптография требует, чтобы выходной поток был неотличим от истинного случайного распределения. RC4 этому требованию не соответствует:
В отличие от некоторых алгоритмов, RC4 нельзя «починить» патчами:
RC4 применялся в условиях, которые сегодня считаются небезопасными:
Криптографические стандарты постепенно исключили RC4:
В JavaScript-библиотеках криптографии, включая CryptoJS, RC4 долгое время присутствовал как легковесный потоковый шифр для клиентских приложений. Его использование объяснялось:
Однако по мере развития криптоанализа стало очевидно, что его применение в веб-среде особенно опасно:
В результате RC4 в современных версиях CryptoJS либо не рекомендуется к использованию, либо рассматривается только как учебный пример.
Современная криптография предлагает потоковые и блочные алгоритмы, которые решают проблемы RC4 на архитектурном уровне.
Один из наиболее популярных потоковых шифров:
Хотя AES является блочным шифром, режим GCM обеспечивает:
Расширенная версия ChaCha20:
История RC4 демонстрирует важный принцип: скорость и простота реализации не являются показателем безопасности. Алгоритм может оставаться популярным десятилетиями, но при этом иметь фундаментальные недостатки, проявляющиеся только при масштабном анализе и реальных атаках.
RC4 стал примером того, как: