С помощью обобщенного алгоритма Евклида найдите числа х и у, удовлетворяющие уравнению 30х +12y = НОД(30,12). х=1, у=-2, НОД = 6. Где ошибка? |
Поточные шифры и генераторы псевдослучайных чисел. Часть 2
Алгоритм RC4
Алгоритм RC4 разработан Р.Ривестом специально как генератор потока ключевой информации с ключом переменной длины. Генераторы псевдослучайных чисел, построенные с помощью таких алгоритмов, как RC4, как правило, значительно быстрее генераторов, основанных на блочных шифрах. Алгоритм RC4 широко применяется в различных системах защиты информации, в компьютерных сетях (например, в протоколе SSL, для шифрования паролей в Windows NT, и др.). Алгоритм RC4 довольно прост и мы полностью рассмотрим принцип его действия.
RC4 — фактически класс алгоритмов, определяемых размером его блока или слова – параметром n. Обычно n = 8, но можно использовать и другие значения. Для упрощения анализа алгоритма примем n=4. Внутреннее состояние RC4 состоит из массива размером 2n слов и двух счетчиков, каждый размером в одно слово. Два счетчика, оба при n=4 4-битовые, назовем i и j. Все вычисления проводятся по модулю 2n.
Массив используется как таблица замен, называемая S-бокс, и далее будет обозначаться как S. В каждый момент времени таблица S содержит все возможные n-битовые (в нашем случае 4-битовые) числа в перемешанном виде. Конкретная перестановка значений в таблице определяется ключом. Так как каждый элемент таблицы принимает значения в промежутке 0 до 15, то его можно трактовать двояко: либо как число, либо как номер другого элемента в таблице.
Алгоритм RC4 состоит из двух этапов. На первом, подготовительном этапе производится инициализация таблицы замен S. На втором, основном этапе вычисляются псевдослучайные числа.
Посмотрим, как инициализируется таблица S. Вначале она заполняется последовательно числами от 0 до 15. Ключ представляется в виде последовательности 4-битовых слов, которыми заполняется другой массив K, такого же размера, как S. Если ключ оказался короче, чем надо, он повторяется нужное число раз. Затем выполняются следующие действия ( алгоритм 1 ):
1. j = 0; i =0; 2. j = (j + Si + Ki) mod 16; 3. поменять местами Si и Sj; 4. i = i +1; 5. если i <16, то перейти на п.2
В результате выполнения этого алгоритма производится начальное заполнение таблицы замен S, причем это начальное перемешивание значений производится в зависимости от секретного ключа.
После того, как таблица S подготовлена, можно начинать генерацию случайных n-битовых слов. Для этого счетчикам i и j присваивается начальное значение 0. Затем для получения каждого нового значения zi выполняются следующие действия ( алгоритм 2 ):
i = (i + 1) mod 16; j = (j + Si) mod 16; поменять местами Si и Sj; a = (Si + Sj) mod 16; zi = Sa.
Полученное 4-битовое значение zi может использоваться в качестве ключа для шифрования очередного 4-битового блока входного потока данных.
Например, пусть секретный ключ состоит из шести 4-битовых значений (приведем их в десятичном виде): 1, 2, 3, 4, 5, 6. Попробуем сгенерировать последовательность чисел по алгоритму RC4.
Заполним таблицу S последовательно числами от 0 до 15.
Затем подготовим таблицу K, записав в нее ключ необходимое количество раз:
Затем перемешаем содержимое таблицы S. Для этого будем использовать алгоритм 1, описанный выше. Процесс выполнения представим в виде трассировочной таблицы ( таблица 8.2), в которой укажем все производимые действия. При выполнении вычислений необходимо помнить, что все операции сложения выполняются по модулю 16.
Номер пункта алг. | Выполняемое действие (по mod 16) | Новое значение i | Новое значение j |
---|---|---|---|
1 | j = 0; i =0 | 0 | |
2 | j = j + Si + Ki = 0 + 0 + 1 = 1 | 1 | |
3 | Поменять местами Si и Sj, то есть S0 и S1 | ||
4 | i = i +1 | 1 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = j + Si + Ki = 1 + 0+ 2 = 3 | 3 | |
3 | Поменять местами Si и Sj, то есть S1 и S3 | ||
4 | i = i +1 | 2 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (3 + 2 + 3) mod 16 = 8 | 8 | |
3 | Поменять местами Si и Sj , то есть S2 и S8 | ||
4 | i = i +1 | 3 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (8 + 0 + 4) mod 16 = 12 | 12 | |
3 | Поменять местами Si и Sj , то есть S3 и S12 | ||
4 | i = i +1 | 4 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (12 + 4 + 5) mod 16 = 5 | 5 | |
3 | Поменять местами Si и Sj , то есть S4 и S5 | ||
4 | i = i +1 | 5 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (5 + 4 + 6) mod 16 = 15 | 15 | |
3 | Поменять местами Si и Sj , то есть S5 и S15 | ||
4 | i = i +1 | 6 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (15 + 6 + 1) mod 16 = 6 | 6 | |
3 | Поменять местами Si и Sj , то есть S6 и S6 | ||
4 | i = i +1 | 7 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (6 + 7 + 2) mod 16 = 15 | 15 | |
3 | Поменять местами Si и Sj , то есть S7 и S15 | ||
4 | i = i +1 | 8 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (15 + 2 + 3) mod 16 = 4 | 4 | |
3 | Поменять местами Si и Sj , то есть S8 и S4 | ||
4 | i = i +1 | 9 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (4 + 9 + 4) mod 16 = 1 | 1 | |
3 | Поменять местами Si и Sj , то есть S9 и S1 | ||
4 | i = i +1 | 10 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (1 + 10 + 5) mod 16 = 0 | 0 | |
3 | Поменять местами Si и Sj , то есть S10 и S0 | ||
4 | i = i +1 | 11 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (0 + 11 + 6) mod 16 = 1 | 1 | |
3 | Поменять местами Si и Sj , то есть S11 и S1 | ||
4 | i = i +1 | 12 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (1 + 0 + 1) mod 16 = 2 | 2 | |
3 | Поменять местами Si и Sj , то есть S12 и S2 | ||
4 | i = i +1 | 13 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (2 + 13 + 2) mod 16 = 1 | 1 | |
3 | Поменять местами Si и Sj , то есть S13 и S1 | ||
4 | i = i +1 | 14 | |
5 | i < 16, поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (1 + 14 + 3) mod 16 = 2 | 2 | |
3 | Поменять местами Si и Sj , то есть S14 и S2 | ||
4 | i = i +1 | 15 | |
5 | i < 16 , поэтому перейти на п.2 | ||
2 | j = (j + Si + Ki ) mod 16= (2 + 7 + 4) mod 16 = 13 | 13 | |
3 | Поменять местами Si и Sj , то есть S15 и S13 | ||
4 | i = i +1 | 16 | |
5 | i < 16 – неверно, поэтому закончить |
После выполнения алгоритма 1 получим инициализированную и подготовленную к основному этапу таблицу S:
После того как таблица S подготовлена, можно начинать генерацию случайных 4-битовых слов. Вычислим первые 5 чисел псевдослучайной последовательности, используя алгоритм 2. Результаты вычисления последовательности значений также представим в виде таблицы ( таблица 8.3)