Вы находитесь на странице: 1из 10

Министерство образования республики Молдова

Технический университет Молдовы


Кафедра «Автоматика и информационные технологии»

Отчёт
по лабораторной работе № 4
по криптографии

Тема: Блочные шифры. Алгоритм DES


Вариант 5

Выполнила студент гр. SI-: xxxx xxxxx


Проверил: xxxxx xxxxx

Кишинёв 2022
Алгоритм DES (Data Encryption Standard)- алгоритм для симметричного шифрования, разработанный
фирмой IBM является наиболее широко используемым алгоритмом шифрования в мире. Размер
блока для DES равен 64 битам. В основе алгоритма лежит сеть Фейстеля с 16 циклами (раундами)
и ключом, имеющим длину 56 бит. Алгоритм использует комбинацию нелинейных (S-блоки) и
линейных (перестановки E, IP, IP-1) преобразований.

Как работает DES

m = The Data Encryption Standard (DES) specifies two FIPS approved cryptographic algorithms as
required by FIPS 140-1. When used in conjunction with American National Standards Institute (ANSI)
X9.52 standard, this publication provides a complete description of the mathematical algorithms for
encrypting (enciphering) and decrypting (deciphering) binary coded information.

зашифруем блок i сообщения m алгоритмом DES с ключом k, учитывая укороченный вариант,


состоящий из одного раунда.

Пусть m будет простым текстовым сообщением


m = APRROVED

Переписываем m в двоичный формат, получаем 64-битный блок текста:


m=01000001 01010000 01010010 01010010 01001111 01010110 01000101 01000100
L=01000001 01010000 01010010 01010010

R=01001111 01010110 01000101 01000100

//DES работает с 64-битными блоками, используя размеры ключей 56 бит. Ключи


хранятся длиной 64 бита, но каждый 8-й бит в ключе не используется.

Пусть K - шестнадцатеричный ключ

K = 133457799BBCDFF1

K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

Алгоритм DES использует следующие шаги

Шаг 1: Создание 16 подразделов, каждый из которых имеет длину 48 бит.

64-разрядный ключ переставляется в соответствии со следующей таблицей, PC-1


//Поскольку первая запись в таблице - "57", это означает, что 57-й бит исходного
ключа K становится первым битом переставленного ключа K+. 49-й бит исходного
ключа становится вторым битом переставленного ключа. 4-й бит исходного ключа
является последним битом переставленного ключа

Из исходного 64-разрядного ключа

K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

мы получаем 56-битную перестановку

К+ = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111

Затем разделим этот ключ на левую и правую половины, C0 и D0, где каждая
половина имеет 28 бит.

Из переставленного ключа K+ мы получаем

C0 = 1111000 0110011 0010101 0101111

D0 = 0101010 1011001 1001111 0001111

Определив C0 и D0, мы теперь создаем шестнадцать блоков(в нашем случае, один


блок) Cn и Dn, 1<=n<=16. Каждая пара блоков Cn и Dn формируется из предыдущей
пары Cn-1 и Dn-1, соответственно, для n = 1, 2, ..., 16, используя следующий график
"сдвигов влево" предыдущего блока.

Число Количество
Раундов сдвигов Влево

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

//Чтобы выполнить сдвиг влево, перемещаем каждый бит на одно место влево, за
исключением первого бита, который циклически перемещается до конца блока.

Из исходной пары пары C0 и D0 мы получаем:

C0 = 1111000 0110011 0010101 0101111


D0 = 0101010 1011001 1001111 0001111

C1 = 1110000 1100110 0101010 1011111


D1 = 1010101 0110011 0011110 0011110

Теперь мы формируем ключи Kn, применяя следующую таблицу перестановок.

//Каждая пара имеет 56 бит, но PC-2 использует только 48 из них

Для первого ключа у нас есть

C1 D1 = 1110000 1100110 0101010 1011111 1010101 0110011 0011110 0011110

который, после того как мы применим перестановку PC-2, становится

K1 = 000110 110000 001011 101111 111111 000111 000001 110010

Шаг 2: Закодировать каждый 64-битный блок данных

Существует начальная перестановка IP 64 бит данных сообщения m. Это приводит к перестановке


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

m = 01000001 01010000 01010010 01010010 01001111 01010110 01000101 01000100


IP =11111111 00101110 11110000 01010001 00000000 00000000 00010000 00111100

разделим переставленный блок IP на левую половину L0 из 32 бит и правую половину R0 из 32 бит

L0=11111111 00101110 11110000 01010001

R0=00000000 00000000 00010000 00111100

Теперь мы выполняем 1 итерацию используя функцию f, которая работает с двумя


блоками - блоком данных из 32 бит и ключом K1 из 48 бит - для получения блока из
32 бит.

//Пусть + обозначает сложение XOR (побитовое сложение по модулю 2)

Ln = Rn-1 
Rn = Ln-1 + f(Rn-1,Kn)

Для n = 1 мы имеем

K1 = 000110 110000 001011 101111 111111 000111 000001 110010

L1 = R0 =00000000 00000000 00010000 00111100

R1 = L0 + f(R0,K1)

Чтобы вычислить f, мы сначала расширяем каждый блок Rn-1 с 32 бит до 48 бит. Это
делается с помощью таблицы выбора, которая повторяет некоторые биты в Rn-1 .

Мы будем называть использование этой таблицы выбора функцией E. Таким образом,


E (Rn-1) имеет 32-битный входной блок и 48-битный выходной блок.
//Пусть E таково, что 48 бит его выходных данных, записанных в виде 8 блоков по 6
бит в каждом, получаются путем выбора битов на его входных данных в порядке,
соответствующем таблице

Мы вычисляем E(R0) из R0 следующим образом:

R0=00000000 00000000 00010000 00111100

E(R0) =000000 000000 000000 000000 000010 100000 000111 111000

(каждый блок из 4 исходных битов был расширен до блока из 6 выходных битов.)

Далее мы XOR выводим E(Rn-1) с помощью ключа K1:

K1 + E(Rn-1).

Для K1 , E(R0) мы имеем

K1 = 000110 110000 001011 101111 111111 000111 000001 110010

E(R0) =000000 000000 000000 000000 000010 100000 000111 111000

K1+E(R0)=000110 110000 001011 101111 111101 100111 000110 001010

Теперь у нас есть 48 битов, или восемь групп по шесть битов.

//Далее мы делаем что-то странное с каждой группой из шести битов: мы используем их в качестве
адресов в таблицах, называемых "S boxes". Каждая группа из шести битов даст нам адрес в другом
поле S. По этому адресу будет располагаться 4-разрядное число. Это 4-разрядное число заменит
исходные 6 бит. Конечным результатом является то, что восемь групп по 6 битов преобразуются в
восемь групп по 4 бита (4-разрядные выходные данные из блоков S), всего 32 бита.

Запишем предыдущий результат, который составляет 48 бит, в виде:

Kn + E(Rn-1) =B1B2B3B4B5B6B7B8
где каждый Bi представляет собой группу из шести битов.

Теперь мы вычисляем:

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8)

где Si(Bi) относится к выходу i-го блока S

Таблица для определения S1:

S1

Номер столбца
ряд. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

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

Для первого раунда мы получаем в качестве выходных данных восемь S-боксов:

K1+E(R0)=000110 110000 001011 101111 111101 100111 000110 001010


S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) =0001 0101 0100 1000 0010 1100 1110 1111

//для входного блока B = 000110 первый бит равен "0", и последний бит "0" дает 00 в качестве
строки. Это строка 0. Средние четыре бита - это "0011". Это двоичный эквивалент десятичного числа
3, поэтому столбец имеет номер столбца 3. В строке 0 в столбце 3 отображается 1. Это определяет
выходной сигнал; 1 - двоичный 0001, так что выходной сигнал равен 0001. Следовательно, S1 = 0001

Заключительным этапом вычисления f является выполнение перестановки P выходных данных S-box


для получения конечного значения f

f = P(S1(B1)S2(B2)...S8(B8))

Перестановка P определена в следующей таблице.

Из выходных данных восьми S-боксов:

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) =0001 0101 0100 1000 0010 1100 1110 1111

мы получаем:

f = 0001 1000 0001 0011 0100 1100 1111 1011

R1 = L0 + f(R0 , K1 )

L0=11111111 00101110 11110000 01010001

+ 0001 1000 0001 0011 0100 1100 1111 1011

= 1110 0111 0011 1101 1011 1100 1010 1010

Затем мы меняем порядок двух блоков на 64-битный блок в обратном порядке

R1L1

и применяем окончательную перестановку IP-1, как определено в следующей таблице


L1 =00000000 00000000 00010000 00111100

R1 = 11100111 00111101 10111100 10101010

R1L1=11100111 00111101 10111100 10101010 00000000 00000000 00010000 00111100

IP-1 =01010000 01000001 01010110 00010111 00011110 01010111 01000000 01000101

который в шестнадцатеричном формате равен


504156171E574045

Исходное сообщение: m= APRROVED


Зашифровано в: c=504156171E574045

Примечание: наш открытый текст имел длину ровно 64 бита. Но большинство сообщений не будут
точно кратны 64 битам
(то есть точному кратному 16 шестнадцатеричным числам). Например, возьмем сообщение "Ваши
губы более гладкие, чем вазелин". Длина этого открытого текстового сообщения составляет 38 байт (
76 шестнадцатеричных цифр). Таким образом, это сообщение должно быть дополнено несколькими
дополнительными байтами в конце для шифрования. Как только зашифрованное сообщение
расшифровано, эти дополнительные байты отбрасываются.

Вам также может понравиться