RC4

RC4 — это симметричный алгоритм шифрования потоков, разработанный Роном Ривестом в 1987 году. Он используется в большинстве современных протоколов шифрования, таких как WEP, WPA, SSH и TLS. Алгоритм RC4 использует потоковое шифрование, которое означает, что данные проходят через шифровальную программу по одному байту за раз. Алгоритм использует дополнительную параметризованную секретную последовательность в качестве ключа для генерации индекса. Индекс используется для алгоритма XOR и генерирует «таблицу перестановок», которую используется для дальнейшего шифрования. Алгоритм RC4 использует перемешивание таблицы после прогона каждого байта данных.

Шифр разработан в компании RSA Security, и для его использования требуется соответствующая лицензия.

Алгоритм RC4, как и любой потоковый шифр, строится на основе генератора псевдослучайных битов. На вход генератора записывается ключ, а на выходе читаются псевдослучайные биты. Длина ключа может составлять от 40 до 2048 бит. Генерируемые биты имеют равномерное распределение.

Основные преимущества шифра:

  • высокая скорость работы;
  • переменный размер ключа.

RC4 довольно уязвим, если:

  • используются не случайные или связанные ключи;
  • один ключевой поток используется дважды.

Эти факторы, а также способ использования могут сделать криптосистему небезопасной (например, WEP).

Алгоритм работает примерно так:

1) Инициализация массива S со значениями от 0 до 255

2) Инициализация массива T со значениями от 0 до 255 в соответствии с ключом

3) Инициализация индекса i в нулевое значение

4) Инициализация индекса j в нулевое значение

5) Цикл от 0 до 255

6) Получить индекс i из массива S и добавить к нему значение j из массива T

7) Записать результат в индекс i массива S

8) Записать значение i массива S в индекс j массива T

9) Записать значение j массива T в индекс i массива S

10) Увеличить индекс i на 1

11) Увеличить индекс j на значение i массива S

12) Закончить цикл

13) Цикл для данных

14) Получить i из массива S

15) Записать значение i массива S в индекс j массива T

16) Записать значение j массива T в индекс i массива S

17) Увеличить индекс i на 1

18) Получить значение i из массива S и добавить к нему значение j из массива T

19) Записать полученный результат в индекс j массива T

20) Записать значение j массива T в индекс i массива S

21) Вычислить значение K как значение S[j] + S[i]

22) Зашифровать или расшифровать данные с использованием K

23) Увеличить индекс j на значение i массива S

24) Закончить цикл

25) Вернуть зашифрованные или расшифрованные данные

Обсуждение закрыто.