Алгоритм шифрования данных DES разработан для зашифрования и расшифрования
данных разрядностью 64 бит на основе 64-битового ключа. Расшифрование
выполняется по тому же ключу, что и зашифрование, но этот процесс является
инверсным по отношению к процессу зашифрования данных. При описании алгоритма
шифрования используются следующие обозначения. Если
L и
R - последовательности бит, то через LR будем
обозначать конкатенацию последовательностей L и R, т.е. последовательность
бит, размерность которой равна сумме размерностей
L и R. В этой
последовательности биты последовательности
R следуют за битами
последовательности L. Конкатенация битовых строк является ассоциативной,
то есть запись ABCDE, означает, что за битами
последовательности A, следуют, биты
последовательности B, затем
C и т.д. Символом + будем обозначать операцию побитового сложения по
модулю 2.
Процесс шифрования.
Процесс шифрования данных поясняется рисунком 1. Сначала 64 бита входной последовательности
перестанавливаются в соответствии с таблицей 1. Таким образом, бит 58 входной последовательности
становится битом 1, бит 50 – 2 и т.д.
Таблица 1. "Начальная перестановка"
58
50
42
34
26
18
10
2
60
52
44
36
28
20
12
4
62
54
46
38
30
22
14
6
64
56
48
40
32
24
16
8
57
49
41
33
25
17
9
1
59
51
43
35
27
19
11
3
61
53
45
37
29
21
13
5
63
55
47
39
31
23
15
7
Полученная последовательность бит разделяется на две
последовательности: L(0) (биты 58, 50, 42, ..., 8) и
R(0) (биты 57, 49, 41, ..., 7), каждая из которых
содержит 32 бита. Затем выполняется итеративный процесс шифрования, который
описывается следующими формулами:
L(i)=R(i-1), i=1,2,...,16.
R(i)=L(i-1) + F(R(i-1),K(i)), i=1,2,...,16.
Функция F
называется функцией шифрования. Ее
аргументами являются последовательность R, полученная на предыдущем шаге, и 48-битовый ключ K(i),
который является результатом функции преобразования 64-битового ключа шифра.
Подробно функция шифрования и алгоритм получения ключей
K(i) описаны ниже.
На последнем шаге итерации будут получены последовательности L(16) и R(16), которые конкатенируются в 64-х битовую
последовательность R(16)L(16).
Видно, что в полученной
последовательности 64 бита, перестанавливаются в соответствии с таблицей
2. Как легко
видеть данная перестановка является обратной по отношению к начальной (см.
таблицу 1).
Таблица 2. "Конечная перестановка"
40
8
48
16
56
24
64
32
39
7
47
15
55
23
63
31
38
6
46
14
54
22
62
30
37
5
45
13
53
21
61
29
36
4
44
12
52
20
60
28
35
3
43
11
51
19
59
27
34
2
42
10
50
18
58
26
33
1
41
9
49
17
57
25
Полученная последовательность из 64 бит и будет являться
зашифрованной последовательностью.
Рисунок 1.
Процесс расшифрования.
Процесс расшифрования данных является инверсным по отношению к процессу
шифрования. Все действия должны быть выполнены в обратном порядке. Это означает,
что расшифровываемые данные сначала переставляются в соответствии с таблицей
1, а затем
над последовательностью бит R(16)L(16) выполняется те же действия, что и в процессе
зашифрования, но в обратном порядке. Итеративный процесс расшифрования описан
следующими формулами:
R(i-1)=L(i), i =16, 15, ..., 1
L(i-1)=R(i)+F(L(i),K(i)), i=16, 15, ..., 1.
На последнем шаге итерации будут получены последовательности L(0) и R(0), которые конкетанируются в 64 битовую
последовательность L(0)R(0). В полученной
последовательности 64 бита перестанавливаются в соответствии с таблицей 2. Результат преобразования -
исходная последовательность бит (расшифрованное 64-битовое
значение).
Функция шифрования.
Функция шифрования F(R,K) схематически показана на
рисунке 2.
Для вычисления значения
функции F
используется функция E (расширение 32 бит до 48), функции S(1), S(2),...,S(8)
преобразование 6-битового числа в
4-битовое) и функция P (перестановка бит в 32-битовой
последовательности). Приведем определения этих функций. Аргументами функции
шифрования являются R (32 бита) и K (48
бит). Результат
функции E(R)
есть 48-битовое число, которое складывается по модулю 2
с числом K. Таким
образом, получается 48-битовая последовательность, которая рассматривается, как
конкатенация 8 строк длиной по 6 бит (т.е. B(1)B(2)B(3)B(4)B(5)B(6)B(7)B(8)). Результат функции S(i)B(i) - 4 битовая
последовательность, которую будем обозначать L(i). В результате
конкетанации всех 8 полученных последвательностей L(i) имеем 32-битовую
последовательность L=L(1)L(2)L(3)L(4)L(5)L(6)L(7)L(8). Наконец, для получения результат функции
шифрования надо переставить биты последовательности L. Для этого применяется
функция перестановки P(L).
Рисунок 2.
Функция расширения Е, выполняющая расширение 32
бит до 48, определяется таблицей 3. В соответствии с этой таблицей первые
три бита Е(R) - это биты 32,1 и 2, а последние -
31,32,1.
Таблица 3. "Функция расширения Е"
32
1
2
3
4
5
4
5
6
7
8
9
8
9
10
11
12
13
12
13
14
15
16
17
16
17
18
19
20
21
20
21
22
23
24
25
24
25
26
27
28
29
28
29
30
31
32
1
Функция S(i), которая преобразует 6-битовые числа в 4-битовые,
определяется в таблицей 4.
Таблица 4. "Функции преобразования S(i)"
S(1)
14
4
13
1
2
15
11
8
3
10
6
12
5
9
0
7
0
15
7
4
14
2
13
1
10
6
12
11
9
5
3
8
4
1
14
8
13
6
2
11
15
12
9
7
3
10
5
0
15
12
8
2
4
9
1
7
5
11
3
14
10
0
6
13
S(2)
15
1
8
14
6
11
3
4
9
7
2
13
12
0
5
10
3
13
4
7
15
2
8
14
12
0
1
10
6
9
11
5
0
14
7
11
10
4
13
1
5
8
12
6
9
3
2
15
13
8
10
1
3
15
4
2
11
6
7
12
0
5
14
9
S(3)
10
0
9
14
6
3
15
5
1
13
12
7
11
4
2
8
13
7
0
9
3
4
6
10
2
8
5
14
12
11
15
1
13
6
4
9
8
15
3
0
11
1
2
12
5
10
14
7
1
10
13
0
6
9
8
7
4
15
14
3
11
5
2
12
S(4)
7
13
14
3
0
6
9
10
1
2
8
5
11
12
4
15
13
8
11
5
6
15
0
3
4
7
2
12
1
10
14
9
10
6
9
0
12
11
7
13
15
1
3
14
5
2
8
4
3
15
0
6
10
1
13
8
9
4
5
11
12
7
2
14
S(5)
2
12
4
1
7
10
11
6
8
5
3
15
13
0
14
9
14
11
2
12
4
7
13
1
5
0
15
10
3
9
8
6
4
2
1
11
10
13
7
8
15
9
12
5
6
3
0
14
11
8
12
7
1
14
2
13
6
15
0
9
10
4
5
3
S(6)
12
1
10
15
9
2
6
8
0
13
3
4
14
7
5
11
10
15
4
2
7
12
9
5
6
1
13
14
0
11
3
8
9
14
15
5
2
8
12
3
7
0
4
10
1
13
11
6
4
3
2
12
9
5
15
10
11
14
1
7
6
0
8
13
S(7)
4
11
2
14
15
0
8
13
3
12
9
7
5
10
6
1
13
0
11
7
4
9
1
10
14
3
5
12
2
15
8
6
1
4
11
13
12
3
7
14
10
15
6
8
0
5
9
2
6
11
13
8
1
4
10
7
9
5
0
15
14
2
3
12
S(8)
13
2
8
4
6
15
11
1
10
9
3
14
5
0
12
7
1
15
13
8
10
3
7
4
12
5
6
11
0
14
9
2
7
11
4
1
9
12
14
2
0
6
10
13
15
3
5
8
2
1
14
7
4
10
8
13
15
12
9
0
3
5
6
11
К таблице 4 требуются дополнительные пояснения. Каждая из
функций S(i)B(i)
преобразет 6-битовый код в 4-битовый выход по следующему алгоритму:
первый и последний биты входной последовательности B, определяют номер строки
k.
второй, третий, четвертый и пятый биты последовательности B задают номер колонки
l
результат преобразования выбирается из строки k и колонки l.
Предположим, что B=011011. Тогда S(1)(B)=0101. Действительно,
k=1, l=13. В
колонке 13 строки 1 задано значение 5, которое и является значением функции
S(1)(011011).
Функция перестановки бит P(L), также используемая для определения функции
шифрования, задается значениями, приведенными в таблице 5. В
последовательности L 32 перестанавливается так, чтобы бит 16 стал
первым битом, бит 7 - вторым и т.д.
Таблица 5. "Функция перестановки P"
16
7
20
21
29
12
28
17
1
15
23
26
5
18
31
10
2
8
24
14
32
27
3
9
19
13
30
6
22
11
4
25
Процесс получения ключей.
Чтобы завершить описание алгоритма шифрования данных, осталось
привести алгоритм получение ключей K(i), i=1,2,...,16, размерностью в
48 бит. Ключи K(i) определяются по 64-битовому ключу шифра как это
показано на рисунке 3.
Рисунок 3.
В начале над ключом шифра выполняется операция B, которая сводится к выбору
определенных бит и их перестановке, как это показано в таблицей 6.
Причем, первые четыре строки определяют, как выбираются биты последовательности
C(0) (первым
битом C(0) будет
бит 57 бит ключа шифра, затем бит 49 и т.д., а последними битами биты 44 и 36
ключа шифра), а следующие четыре строки - как выбираются биты последовательности
D(0) (т.е.
последовательность D(0) будем состоять из битов 63,55,...,12, 4 ключа
шифра).
Таблица 6. "Функция перестановки и выбора последовательности
B"
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
Как видно из таблицы 6, для генерации
последовательностей C(0) и D(0) не используются биты 8,16,25,32,40,48,56 и 64
ключа шифра. Эти биты не влияют на шифрование и могут служить для других целей
(например, для контроля по четности). Таким образом, в действительности ключ
шифра является 56-битовым. После определения C(0) и D(0) рекурсивно определяются
C(i) и
D(i), i=1,2,...,16. Для этого применяются операции сдвига влево на
один или два бита в зависимости от номера шага итерации, как это показано в
таблицей 7. Операции сдвига выполняются для последовательностей
C(i) и
D(i) независимо.
Например, последовательность C(3) получается, посредством сдвига влево на две
позиции последовательности C(2), а последовательность D(3) - посредством сдвига
влево на две позиции последовательности D(2). Следует иметь в виду, что выполняется
циклический сдвиг влево. Например, единичный сдвиг влево последовательности
C(i) приведет к
тому, что первый бит C(i) станет последним и последовательность бит будет
следующая: 2,3,..., 28,1.
Таблица 7. "Функция сдвига 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
Ключ K(i), определяемый на каждом шаге итерации, есть
результат выбора определенных бит из 56-битовой последовательности C(i)D(i) и их перестановки.
Другими словами, K(i) =
K(C(i)D(i)), где функция K определяется данными,
приведенными в таблицей 8.
Таблица 8. "Функция перестановки и выбора K"
14
17
11
24
1
5
3
28
15
6
21
10
23
19
12
4
26
8
16
7
27
20
13
2
41
52
31
37
47
55
30
40
51
45
33
48
44
49
39
56
34
53
46
42
50
36
29
32
Как следует из таблицы 8 первый бит K(i) - это бит 14
последовательности C(i)D(i), второй - бит 17, последний - бит 32.
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Алгоритм шифрования DES", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу: Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!