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

2.3.2. Блоковые шифры

2.3.2.1. Общие положения

Блоковый шифр можно определить как зависящее от ключа K обратимое преобразование блока X из n двоичных символов. Далее полагается, что длина результата Y преобразования равна длине X. Таким образом, блоковый шифр задается обратимой функцией:

Y = EK(X); X = E1K(Y)  X.

(E1K иногда называют обратным шифром).

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

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

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

В действительности (по состоянию на сегодняшний день) ни для одного шифра не доказано соответствие этому определению. Поэтому на практике используют следующее менее жесткое определение:

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

Кратко опишем некоторые используемые в настоящее время блоковые шифры:

  • DES (Data Encription Standart) – шифр, который был принят в США в качестве стандарта в 1977 г. Его основные параметры: размер блока – 64 бита, длина ключа 56 бит, 16 раундов. Шифр интенсивно использовался ~20 лет и сейчас еще встречается в некоторых работающих системах. Алгоритм взлома шифра не был найден, несмотря на многочисленные попытки. Однако, при использовании современной вычислительной техники он может быть вскрыт за приемлемое время путем простого перебора ключей (например, в 1993 г. было опубликовано описание системы, стоимостью ~1 млн. долл., позволяющей взламывать любой ключ DES за 7 часов). Поэтому DES не рекомендуется использовать во вновь создаваемых криптосистемах;

  • AES (Advanced Encription Standart) – новый американский стандарт. Принят в 2001 году на основе конкурсных разработок. В его основу был положен шифр Rijndael (Рейндал), созданный бельгийскими криптографами В.Рейманом и Й.Даманом. Его основные параметры: размер блока – 128 бит, длина ключа 128, 192 или 256 бит, количество раундов – 10, 12 или 16 в зависимости от длины ключа;

  • ГОСТ 28147-89 – российский стандарт, принятый в 1989 г. Его основные параметры: размер блока – 64 бита, длина ключа 256 бит, 32 раунда. Шифр более удобен в программной реализации, чем DES – по некоторым оценкам выигрыш по времени при шифровании может составлять 1,5 раза. Никаких эффективных атак против этого шифра не опубликовано. Основные его параметры позволяют утверждать, что шифр не должен быть слабым.

2.3.2.2. Блоковый шифр гост 28147-89

Для иллюстрации в качестве примера блокового шифра рассмотрим шифр ГОСТ 28147-89. В его основе, как и в основе шифра DES, лежит так называемая схема Фейстела. В соответствии с этой схемой блок разбивается на две одинаковые части – правую R и левую L. Правая часть объединяется с ключевым элементом K посредством некоторого алгоритма f, а результат используется для шифрования левой части. Перед следующим раундом левая и правая части меняются местами. Такая структура позволяет использовать один и тот же алгоритм как для шифрования, так и для дешифрования, что особенно важно при аппаратной реализации, когда одно и то же устройство используется при шифровке и дешифровке – меняется только порядок подачи ключа.

Таким образом, исходное сообщение L0R0 32 раза преобразуется так:

Li = Ri1; Ri = Li1f(Ri1, Ki), i = 1,..., 32.

Здесь i – номер раунда. Схема Фейстела наглядно изображена на рис. 2.2.

Li1

Ri1

Li

Ki1

Ri

Рис. 2.2. Криптопреобразование Фейстела.

Введем необходимые понятия.

Последовательность из 32 бит будем называть словом. Блок текста Х (64 бита), также как и блок шифртекста Y, состоит из двух слов – L и R.

Секретный ключ представляется как последовательность из восьми слов (подключей): K = K0K1...K7. На его основе строится рабочий ключ W = W0W1...W31, состоящий из 32 слов (подключей). Структура рабочего ключа на этапе шифрования такова:

W = W0W1...W31 = K0K1...K7K0K1...K7K0K1...K7K7K6...K0 .

Для работы шифра нужны 8 таблиц замены S0, S1,..., S7 (S-боксы). Каждая такая таблица содержит 16 4-битовых элементов – их обычно записывают десятичными числами от 0 до 15. ГОСТ рекомендует заполнять каждую таблицу случайными последовательностями попарно различных чисел из множества {0, 1, ..., 15}. Совокупность этих таблиц является дополнительным секретным параметром шифра5.

В шифре используются следующие операции

⊞  сложение по модулю 232;

  побитовое сложение по модулю 2 (побитовая операция xor);

q – циклический сдвиг слова влево на q бит.

Используя приведенные обозначения и общую схему Фейстела, один раунд работы шифра можно изобразить схемой на рис 2.3.

Li1

Ri1

Wi1 (генератор подключей)

+i

Перемешивание с помощью таблиц замены

↩ 11

Li

Ri

Рис. 2.3. Один раунд шифра ГОСТ 28147-89.

Более подробно содержание работы отдельных операторов, указанных на рис. 2.3, таково.

Сначала правая часть блока – Ri1 складывается по модулю 232 с подключом Wi1. Полученное слово делится на восемь 4-битовых чисел. Каждое из этих чисел преобразуется с помощью соответствующего S-бокса. При этом каждый S-бокс определяет подстановку. Пусть, например, бокс S1 имеет вид:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

S1 = (4 10 9 2 13 8 0 14 11 6 1 12 15 5 3 7).

Тогда, если в него поступает 4-битовое число 310, то выходом будет 4-битовое число 210, если в него поступает 4-битовое число 810, то выходом будет 4-битовое число 1110 и т.д.

4-битовые выходы всех боксов конкатенацией формируют новое слово, которое сдвигается циклически влево на 11 бит – получается некое слово R'. После этого выполняется побитовая операция Li1 R' = Ri.

При дешифровании используется тот же алгоритм, но рабочий ключ формируется так:

W = W0W1...W31 = K0K1...K7K7K6...K0K7K6...K0K7K6...K0 .