Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Эл-ты_криптологии-лек.doc
Скачиваний:
24
Добавлен:
24.11.2019
Размер:
757.76 Кб
Скачать

2.3.3.2. Режим ofb блокового шифра

В режиме OFB (Output FeedBack – обратная связь по потоку) для генерирования псевдослучайной последовательности используется блоковый шифр на основе секретного ключа K и инициализирующего слова Y0. Такой генератор формирует последовательность r-битовых псевдослучайных чисел z1 z2 zk. Будем считать, как и раньше, что размер блока шифра равен n. Тогда псевдослучайная последовательность генерируется по следующей схеме

Yi = EK(Yi1), zi = [r старших бит числа Yi], i = 1,..., k,

где r – параметр генератора, EK – функция преобразования какого-то блокового шифра.

Таким образом, в данном случае блоковый шифр используется как вспомогательный алгоритм – для генерирования псевдослучайной последовательности z1 z2 zk.

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

Средний период псевдослучайной последовательности (при случайно выбранных K и Y0) составляет ~r2n1 бит. Кроме того, псевдослучайная последовательность "непредсказуема" для противника, поскольку возможность предсказания zi+1 на основе подпоследовательности z1 z2 zi означала бы нестойкость блокового шифра по отношению к атаке по известному тексту. Предсказание становится даже более трудной задачей, чем взлом самого блокового шифра, если r < n.

Дешифрование сообщений для рассмотренного шифра может производиться только с начала, так как невозможно получить произвольный элемент последовательности z1 zk, не вычислив предыдущие элементы. В этом смысле режим OFB подобен режиму CBC. Преимущество режима OFB заключается в том, что последовательность z1 zk может быть сформирована заранее для того, чтобы быстрее шифровать и дешифровать сообщения по алгоритмам (2.28) и (2.29) в момент их поступления. Это особенно актуально для систем, обрабатывающих данные в режиме реального времени.

2.3.3.3. Режим ctr блокового шифра

Режим CTR (CounTeR – счетчик) похож на режим OFB, но в нем шифруется не предыдущий выход шифра, а просто счетчик, увеличиваемый на каждом шаге на постоянное число (обычно 1). Схема шифрования имеет вид:

Yi = EK(Y0 + i), zi = [r старших бит числа Yi], i = 1,..., k.

При использовании "идеального" блокового шифра режим CTR обеспечивает те же параметры стойкости, что и OFB. Преимущество состоит в том, что любой элемент последовательности z1 zk может быть вычислен непосредственно. Это дает возможность шифровать и дешифровать фрагменты сообщения независимо друг от друга.

2.3.3.4. Алгоритм rc4 6

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

Алгоритм RC4 работает с n-битовыми словами (обычно n = 8). Все вычисления проводятся по модулю 2n (остаток x mod 2n быстро вычисляется с помощью выделения n младших бит в x).

Алгоритм использует L-словный ключ: K = K0K1...KL1 и генерирует последовательность слов Z = z1 z2 …, конкретный вид которой определяется ключом K.

Состояние генератора задается таблицей S из 2n слов и двух переменных i и j. В каждый момент времени таблица S содержит все возможные n-битовые числа в перемешанном виде. Так как каждый элемент таблицы принимает значения из интервала [0, 2n1], то его можно интерпретировать двояко: либо как элемент таблицы, либо как номер другого элемента таблицы.

Секретный ключ дает только начальное перемешивание чисел в таблице. Такое перемешивание формируется с помощью следующего алгоритма (дан в псевдокодах):

j:=0; S:=(0,1,..., 2n 1);

FOR i = 0,1,..., 2n 1 DO

BEGIN

j:=(j + Si + Ki mod L) mod 2n; {Sii-й элемент таблицы S}

Sj  Si {здесь  – операция транспозиции}

END;

i:=0; j:=0.

После этого генератор готов к работе. Генерация очередного псевдослучайного слова zi осуществляется так:

i:=(i + 1) mod 2n;

j:=(j + Si) mod 2n;

Sj  Si;

t:=(Si + Sj) mod 2n;

zi :=St.