Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие КЗИ учебное пособие.docx
Скачиваний:
130
Добавлен:
08.05.2019
Размер:
1.34 Mб
Скачать

3.3.2. Алгоритм des

DES представляет собой 64-битовый блочный алгоритм с 56-битовым ключом. Как и ГОСТ он построен на классической сети Файстеля и выполняется в течение 16 раундов (см рис.15), кроме того, он имеет начальную и завершающую перестановки.

При подстановке через S-блок на вход подается 48-битовый блок, разбитый на восемь 6-битовых подблока, соответствующие каждый своей S-матрице. Первый и последний биты подблока объединяются в 2-битовое число, определяющее строку S-матрицы, а средние 4 бита объединяются в 4-битовое число, определяющее столбец. На выход подается 4-битовое значение соответствующего элемента S-матрицы.

Рис.15. Раунд шифрования DES

Алгоритм DES являлся коммерческим стандартом шифрования США до 2000 года, когда ему на смену пришел AES. В настоящее время алгоритм применяется в варианте 3DES – каждый блок шифруется трижды на разных ключах. Фактическая длина ключа составила 168 бит.

3.3.3. Блочный шифр tea

Один из самых простых в реализации, но признанно стойких криптоалгоритмов – TEA (Tiny Encryption Algorithm).

Параметры алгоритма:

Размер блока – 64 бита.

Длина ключа – 128 бит.

В алгоритме использована сеть Фейстеля с двумя ветвями в 32 бита каждая.

Образующая функция F обратима.

Сеть Файстеля несимметрична из-за использования в качестве операции наложения не исключающего "ИЛИ", а арифметического сложения.

Ниже приведен код криптоалгоритма на языке программирования PASCAL.

type TLong2=array[0.. 1] of longint;

TLong2x2=array[0.. 1] of TLong2;

const Delta=$9E3779B9;

Var key:tLong2x2;

procedure EnCryptRouting(var data);

Var y,z,sum:longint; a:byte;

begin

y:=TLong2(data)[0];z:=TLong2(data)[1];sum:=0;

for a:=0 to 31 do

begin

Inc(sum,Delta);

inc(y,((z shl 4)+key[0,0]) xor (z+sum) xor

((z shr 5)+key[0,1]));

inc(z,((y shl 4)+key[1,0]) xor (y+sum) xor

((y shr 5)+key[1,1]));

end;

TLong2(data)[0]:=y;TLong2(data)[1]:=z

end;

Рис.16. Алгоритм TEA

Отличительной чертой криптоалгоритма TEA является его размер. Простота операций, отсутствие табличных подстановок и оптимизация под 32-разрядную архитектуру процессоров позволяет реализовать его на языке ASSEMBLER в предельно малом объеме кода. Недостатком алгоритма является некоторая медлительность, вызванная необходимостью повторять цикл Фейштеля 32 раза (это необходимо для тщательного "перемешивания данных" из-за отсутствия табличных подстановок).

Схема работы алгоритма приведена на рис. 16.

3.3.4. Международный алгоритм idea

Данный алгоритм получает на входе 64-битовый блок открытого текста (в процессе шифрования он разбивается на четыре 16-битовых подблока) и 128-битовый ключ, из которого генерируется пятьдесят два 16-битовых подключа шифрования Z1..Z52 по шесть подключей на каждый из восьми раундов и четыре подключа для выходного преобразования. На выходе генерируется 64-битовый блок шифрованного текста. Алгоритм расшифрования IDEA полностью повторяет структуру алгоритма шифрования: в качестве входных данных использует 64-битовый блок шифрованного текста и тот же 128-битовый ключ, из которого генерируются пятьдесят два 16-битовых подключей расшифрования U1..U52. В результате работы алгоритм расшифрования должен генерировать 64-битовый блок открытого текста.

Алгоритм шифрования представляет собой сложную комбинацию смешанного использования трех различных операций. Каждая из операций предполагает два 16-битовых входных значения, в результате обработки которых получается одно 16-битовое выходное значение. Вот эти операции:

Побитовое исключающее "ИЛИ" (XOR, сумма по модулю 2), обозначаемое символом .

Сложение целых чисел по модулю 216 (по модулю 65536) с входными и выходными значениями, рассматриваемыми как 16-битовые целые числа без знака. Эта операция обозначается символом .

Умножение целых чисел по модулю 216 + 1 (по модулю 65537) с входными и выходными значениями, рассматриваемыми как 2-битовые целые числа без знака, за исключением блока, состоящего из одних нулей, который интерпретируется как 216. Эта операция обозначается символом .

Упрощенно операция реализуется следующим отображением:

Обратите внимание, что (ab mod 216) соответствует 16 наименее значимым битам ab, а (ab div 216) является простым сдвигом ab вправо на 16 битов. Особенность данной операции в том, что она образует группу (т. е. каждый элемент обратим, включая 0  216). Эти операции являются несогласованными: 1) Никакие две из этих трех операций не подчиняются дистрибутивному закону. 2) Никакие две из этих трех операций не подчиняются ассоциативному закону.

Вычисление подключей IDEA.

В алгоритме IDEA используется 128-битовый ключ Z, который должен быть как у отправителя, так и у получателя сообщения. Из этого до начала шифрования или расшифрования генерируются пятьдесят два 16-битовых подключа. При этом применяется следующая схема. Первые восемь подключей, обозначенные Z1..Z8, образуются непосредственно из ключа: Z1 равен первым 16 битам ключа, Z2 - следующим 16 и т.д.

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

Подключи расшифрования U1..U52 получаются из ключей шифрования по схеме, приведенной в таблице. Где

Zi-1 – мультипликативное обращение Zi по модулю 216+1 (простое число) то есть

Zi Zi-1 = 0000000000000001.

-Zi – аддитивное обращение Zi по модулю 216 то есть

Zi (-Zi) = 0000000000000000.

1. Первых четыре подключa для i-го раунда дешифрования получаются из первых четырех подключей (10 - i)-гo раунда шифрования, если 9-м раундом считать выходное преобразование. Первый и четвертый подключи дешифрования равны мультипликативным обращениям по модулю 216 +1 первого и четвертого подключей шифрования соответственно. Для раундов со 2-го по 8-й второй и третий подключи дешифрования равны аддитивным обращениям по модулю 216 третьего и второго подключей шифрования соответственно. Для раундов 1 и 9 второй и третий подключи дешифрования равны аддитивным обращениям по модулю 216 второго и третьего подключей шифрования соответственно.

2. Для первых восьми раундов два последних подключа i-го раунда дешифрования равны двум последним подключам (9 – i)-го раунда шифрования.

Зашифрование и расшифрование в IDEA

Процесс шифрования предполагает два раунда и выходное преобразование. Один раунд состоит из преобразования входных блоков и субшифрования (см рис. 17). Основой субшифрования является основной строительный блок алгоритма – мультипликативно-аддитивная (МА) структура.

Рис.17. Раунд шифрования IDEA

Раунд начинается с преобразования, которое с помощью операции сложения и умножения связывает четыре входных подблока с четырьмя подключами. Это преобразование представлено серым прямоугольником вверху рисунка. Четыре выходных блока этого преобразования связываются операцией XOR с целью получения двух 2-битовых блоков, которые затем подаются на вход структуры МА, представленной на рисунке нижним серым прямоугольником. Кроме того, структура МА получает на входе два подключа, а в результате обработки всех полученных данных на выходе этой структуры генерируется два 2-битовых значения.

Наконец, четыре блока, полученных на выходе первого преобразования связываются с помощью операции XOR с двумя блоками, полученными на выходе структуры МА, и в результате имеется четыре выходных блока (W11..W14) данного раунда (см. рис.18).

Рис.18. Выходное преобразование IDEA

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

Подробно рассмотрим работу алгоритма. Выходы первого раунда расшифрования обозначим как (V11..V14). Промежуточные выходы первого раунда зашифрования и расшифрования обозначим соответственно как (I11..I14) и (J11..J14).

При шифровании на выходе функции выходного преобразования имеем

Y1 = W81Z49, Y2 = W83 Z50, Y1 = W82 Z51, Y4 = W84Z52.

При расшифровании на выходе первой подстадии первого раунда получаем

J11 = Y1U1, J12 = Y2 U2, J13 = Y3 U3, J14 = Y4U4.

Заменив соответствующие значения эквивалентными получим

J11 = Y1Z49-1 = W81 Z49Z49-1= W81,

J12 = Y2 -Z50 = W83 Z50 -Z50 = W83,

J13 = Y3 -Z51 = W82 Z51 -Z51 = W82,

J14 = Y4Z52-1 = W84 Z52Z52-1= W84.

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

W81 = I81MAR(I81I83, I82I84),

W82 = I83MAR(I81I83, I82I84),

W83 = I82MAL(I81I83, I82I84),

W84 = I84MAL(I81I83, I82I84),

Где MAR(X, Y) обозначает правое выходное значение структуры МА для входных значений X и Y, а MAL(X, Y) соответственно левое выходное значение. Тогда

V11 = J11MAR(J11J13, J12J14) =

= W81MAR(W81W82, W83W84) =

= I81MAR(I81I83, I82I84)  MAR [I81MAR(I81I83, I82I84)  I83MAR(I81I83, I82I84),

I82MAL(I81I83, I82I84)  I84MAL(I81I83, I82I84)] =

= I81MAR(I81I83, I82I84)  MAR(I81I83, I82I84) =

= I81.

Точно так же получаем V11 = I81, V12 = I83, V13 = I82, V14 = I84. Таким образом, выходные данные второй подстадии процесса расшифрования совпадают с входными значениями предпоследней стадии процесса шифрования за исключением перестановки второго и третьего блоков. Далее можно показать, что соотношение сохраняется для всех последующих подстадий вплоть до V81 = I11, V82 = I13, V83 = I12, V84 = I14. Наконец, входное преобразование процесса расшифрования эквивалентно преобразованию первой подстадии шифрования за исключением перестановки 2-3 блоков и результаты зашифрования/расшифрования совпадут.