Алгоритм формирования ключей в процессе функционирования DES
Алгоритм формирования ключей в процессе функционирования DES
2
Кафедра: АСОИиУ
Лабораторная работа
«Алгоритм формирования ключей в процессе функционированияDES»
по дисциплине
«Методы и средства защиты информации»
Москва 2009г.
Оглавление
Техническое задание 3
Алгоритм формирования ключей в процессе функционирования DES. 3
Работа алгоритма 4
1 шаг. Перестановки битов ключа с использованием таблицы перестановок. 5
2 шаг. Разбиение ключа. 6
3 шаг. Создание 16-ти подключей путем сдвига. 7
4 шаг. Перестановка битов ключа с использованием таблицы PC1. 8
Исходный код 9
Пример работы программы 15
Техническое задание
1. Реализовать алгоритм формирования ключей в процессе функционирования DES на языке программирования C++.
2. Провести тест программы.
Алгоритм формирования ключей в процессе функционирования DES
Формирование ключей - алгоритм, позволяющий получить по относительно короткому ключу шифрования последовательность раундовых ключей.
Входные данные: Ключ состоит из 8 символов или 8 байт. Соответственно ключ имеет размер 64 байта. Но размер ключа используется только для записи (для организации данных). Фактически, каждый 8 бит отбрасывается и эффективный размер ключа - 56 бит.
Работа алгоритма
1 шаг. Перестановки битов ключа с использованием таблицы перестановок.
В начале над ключом шифра выполняется операция B, которая сводится к выбору определенных бит и их перестановке, как это показано в таблицей. Причем, первые четыре строки определяют, как выбираются биты последовательности C(0) (первым битом C(0) будет бит 57 бит ключа шифра, затем бит 49 и т.д., а последними битами биты 44 и 36 ключа шифра), а следующие четыре строки - как выбираются биты последовательности D(0) (т.е. последовательность D(0) будем состоять из битов 63,55,…, 12, 4 ключа шифра).
57
49
41
33
25
17
9
1
58
50
42
34
26
18
10
2
59
51
43
35
27
19
11
3
60
52
44
36
63
55
47
39
31
23
15
7
62
54
46
38
30
22
14
6
61
53
45
37
29
21
13
5
28
20
12
4
В результате перестановки ключ будет выглядеть так:
На этом шаге осуществляется разбиение ключа на 2 половины C0 и D0. Каждая половина содержит 28 бит.
C0:
0000111111111111111100000000
D0:
0101110101100101100001110011
3 шаг. Создание 16-ти подключей путем сдвига
После определения C(0) и D(0) рекурсивно определяются C(i) и D(i), i=1,2,…, 16. Для этого применяются операции сдвига влево на один или два бита в зависимости от номера шага итерации, как это показано в таблице «Функция сдвига Si». Операции сдвига выполняются для последовательностей C(i) и D(i) независимо. Например, последовательность C(3) получается, посредством сдвига влево на две позиции последовательности C(2), а последовательность D(3) - посредством сдвига влево на две позиции последовательности D(2). Следует иметь в виду, что выполняется циклический сдвиг влево. Например, единичный сдвиг влево последовательности C(i) приведет к тому, что первый бит C(i) станет последним и последовательность бит будет следующая: 2,3,…, 28,1.
Таблица «Функция сдвига Si»
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
В результате сдвига получаем следующие пары
Количество сдвигов
Созданные пары
1
C1: 0001111111111111111000000000
D1: 1011101011001011000011100110
1
C2: 0011111111111111110000000000
D2: 0111010110010110000111001101
2
C3: 1111111111111111000000000011
D3: 1101011001011000011100110111
2
C4: 1111111111111100000000001111
D4: 0101100101100001110011011101
2
C5: 1111111111110000000000111111
D5: 0110010110000111001101110101
2
C6: 1111111111000000000011111111
D6: 1001011000011100110111010110
2
C7: 1111111100000000001111111111
D7: 0101100001110011011101011001
2
C8: 1111110000000000111111111111
D8: 0110000111001101110101100101
1
C9: 1111100000000001111111111111
D9: 1100001110011011101011001011
2
C10: 1110000000000111111111111111
D10: 0000111001101110101100101100
2
C11: 1000000000011111111111111110
D11: 0011100110111010110010110000
2
C12: 0000000001111111111111111000
D12: 1110011011101011001011000011
2
C13: 0000000111111111111111100000
D13: 1001101110101100101100001110
2
C14: 0000011111111111111110000000
D14: 0110111010110010110000111001
2
C15: 0001111111111111111000000000
D15: 1011101011001011000011100110
1
C16: 0011111111111111110000000000
D16: 0111010110010110000111001101
4 шаг. Перестановка битов ключа с использованием таблицы PC1
До финальной перестановки битов ключей, необходимо слияние каждой пары данных. После того, как для каждого битового блока CnDn, где 1<=n<=16 осуществиться соответствующая перестановка по таблице (см ниже), формируя ключи. Только 48 бит каждой объединенной пары сохраняется в перестановленном ключе.