ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.06.2021
Просмотров: 3557
Скачиваний: 3
396
Глава
18.
Криптографическая
защита
На
каждом
цикле
(
рис
. 18.8)
из
ключа
X
длиной
56
бит
формируется
ключ
X
i
размером
48
бит
.
Сам
ключ
X
размещает
-
ся
в
восьмибайтовом
слове
,
причем
вось
-
мые
разряды
каждого
байта
являются
контрольными
и
в
ключ
не
входят
.
Перед
шифрованием
,
в
соответствии
с
процеду
-
рой
выбора
PC1
(
табл
. 18.2),
из
X
выби
-
раются
56
бит
,
которыми
заполняются
два
регистра
(
C
и
D
)
длиной
28
бит
каж
-
дый
.
В
дальнейшем
,
при
входе
в
очеред
-
ной
цикл
с
номером
i
,
регистры
сдвига
-
ются
циклически
влево
.
Величина
сдвига
зависит
от
номера
цикла
,
но
является
фиксированной
и
заранее
известна
.
После
сдвига
оба
подблока
объединяются
в
по
-
рядке
(
C
,
D
).
Затем
,
в
соответствии
с
функцией
выбора
PC2
(
табл
. 18.3),
из
них
выбираются
48
бит
подключа
Xi
.
Шифрование
и
расшифровывание
отличаются
направ
-
лением
сдвигов
(
табл
. 18.4).
Таблица
18.2
.
Преобразование
PC1
Заполнение
С
Заполнение
D
57 49 41 33 25 17
9
63
55
47
39
31 23 15
1 58 50 42 34 26
18
7
62
54
46
38 30 22
10 2 59 51 43 35
27
14
6
61
53
45 37 29
19 11 3 60 52 44
36
21
13
5
28
20 12 4
Таблица
18.3.
Преобразование
PC2
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
Выбор
битов
по
таблицам
18.2–18.4
из
соответствующих
блоков
производится
сле
-
дующим
образом
.
Таблица
рассматривается
как
последовательность
ее
строк
,
записанных
друг
за
другом
,
начиная
с
первой
строки
.
Биты
блока
данных
соответствующей
длины
ну
-
меруются
слева
направо
,
начиная
с
единицы
.
Каждый
элемент
s
таблицы
рассматривается
,
Рис
. 18.8.
Формирование
подключей
Стандарт
шифрования
данных
DES
397
как
номер
бита
b
s
в
блоке
данных
.
Преобразование
заключается
в
замене
всех
элементов
s
на
биты
b
s
.
Таблица
18.4.
Соответствие
сдвигов
номерам
циклов
DES
Номер
цикла
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Сдвиг
влево
(
шифрование
)
1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
Сдвиг
вправо
(
расшифровывание
)
1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
Цикловая
функция
производит
следующие
действия
.
1.
Расширение
блока
R
i-1
до
48
бит
за
счет
повторения
битов
блока
с
помощью
функции
расширения
EP
(
табл
. 18.5).
2.
Поразрядное
сложение
результата
с
ключом
X
i
.
3.
Преобразование
полученной
суммы
с
помощью
замены
(
используя
так
называемые
S-
блоки
),
в
результате
которого
получается
блок
длиной
32
бит
.
4.
Применение
перестановки
P
(
табл
. 18.6),
что
дает
значение
функции
Y = f(R,X)
.
Таблица
18.5.
Преобразование
EP
Таблица
18.6.
Перестановка
P
32 1 2 3 4 5
16
7
20
21
29
12
28
17
4 5 6 7 8 9
1
15
23
26
5
18
31
10
8 9 10 11 12 13
2
8
24
14
32
27 3 9
12 13 14 15 16 17
19
13
30
6
22
11 4 25
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-
блоков
Преобразование
,
с
помощью
которого
48-
разрядный
блок
преобразуется
в
32-
разрядный
,
сводится
к
выборке
восьми
тетрад
из
8
таблиц
(S-
блоков
)
размером
4
×
16 (
табл
. 18.7).
Из
каждого
S-
блока
выбирается
одна
тетрада
.
Для
этого
48-
разрядный
блок
делится
последова
-
тельно
на
8
комбинаций
по
6
бит
каждая
.
Первая
комбинация
(
слева
)
является
входом
в
пер
-
вый
S-
блок
,
вторая
—
во
второй
и
т
.
д
.
При
этом
первый
и
последний
биты
комбинации
задают
номер
строки
,
а
остальные
4
бита
—
номер
столбца
S-
блока
,
на
пересечении
кото
-
рых
расположена
соответствующая
тетрада
.
Конкретные
значения
S
i
(
i = 1, …, 8
)
пред
-
ставлены
в
табл
. 18.7.
Таблица
18.7.
Таблицы
S -
блоков
для
DES
398
Глава
18.
Криптографическая
защита
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
S2 0 1 2 3 4 5
6
7
8
9
10
11
12
13 14 15
0
15 1 8
14 6 11
3
4
9
7
2
13
12
0 5 10
1 3
13 4 7 15 2
8
14
12
0
1
10
6
9 11 5
2 0
14 7
11 10 4
13
1
5
8
12
6
9
3 2 15
3 13 8 10 1 3 15
4
2
11
6
7
12
0
5 14 9
S3 0 1 2 3 4 5
6
7
8
9
10
11
12
13 14 15
0
10 0 9
14 6 3
15
5
1
13
12
7
11
4 2 8
1
13 7 0 9 3 4
6
10
2
8
5
14
12
11 15 1
2 13 6 4 9 8 15
3
0
11
1
2
12
5
10 14 7
3 1
10
13 0 6 9
8
7
4
15
14
3
11
5 2 12
S4 0 1 2 3 4 5
6
7
8
9
10
11
12
13 14 15
0 7
13
14 3 0 6
9
10
1
2
8
5
11
12 4 15
1 13 8 11 5 6 15
0
3
4
7
2
12
1
10 14 9
2 10 6 9 0 12 11
7
13
15
1
3
14
5
2 8 4
3 3
15 0 6 10 1
13
8
9
4
5
11
12
7 2 14
S5 0 1 2 3 4 5
6
7
8
9
10
11
12
13 14 15
0 2
12 4 1 7 10
11
6
8
5
3
15
13
0 14 9
1
14
11 2
12 4 7
13
1
5
0
15
10
3
9 8 6
2 4 2 1 11 10 13
7
8
15
9
12
5
6
3 0 14
3
11 8
12 7 1 14
2
13
6
15
0
9
10
4 5 3
S6 0 1 2 3 4 5
6
7
8
9
10
11
12
13 14 15
0
12 1
10
15 9 2
6
8
0
13
3
4
14
7 5 11
1
10
15 4 2 7 12
9
5
6
1
13
14
0
11 3 8
2 9
14
15 5 2 8
12
3
7
0
4
10
1
13 11 6
3 4 3 2
12 9 5
15
10
11
14
1
7
6
0 8 13
Окончание
таблицы
18.7
S7 0 1 2 3 4 5
6
7
8
9
10
11
12
13 14 15
Стандарт
шифрования
данных
DES
399
0 4
11 2
14 15 0
8
13
3
32
9
7
5
10 6 1
1
13 0
11 7 4 9
1
10
14
3
5
12
2
15 8 6
2 1 4
11
13 12 3
7
14
10
15
6
8
0
5 9 2
3 6
11
13 8 1 4
10
7
9
5
0
15
14
2 3 12
S8 0 1 2 3 4 5
6
7
8
9
10
11
12
13 14 15
0 13 2 8 4 6 15
11
1
10
9
3
14
5
0 12 7
1 1
15
13 8 10 3
7
4
12
5
6
11
0
14 9 2
2 7
11 4 1 9 12
14
2
0
6
10
13
15
3 5 8
3 2 1 14 7 4 10
8
13
15
12
9
0
3
5 6 11
Пример
реализации
алгоритма
DES
представлен
в
листингах
18.3
и
18.4 (
компилятор
— PowerBasic).
Листинг
18.3.
Пример
реализации
алгоритма
DES
на
языке
Basic
для
шифрования
файлов
$CPU 80386
$FLOAT NPX
$OPTIMIZE SPEED
$LIB ALL-
$OPTION CNTLBREAK ON
DECLARE FUNCTION MYBIN$ (n%)
DECLARE FUNCTION desalg$ (a$)
DECLARE SUB f (i%, a%(), x%())
DECLARE SUB transpose (datax%(), T%(), n%)
DECLARE SUB mrotate (keyx%())
DECLARE SUB stob (a$, mbits%())
DECLARE SUB btos (mbits%(), a$)
DECLARE SUB letbe (target%(), source%(), LAST%)
DECLARE SUB init (x() AS INTEGER, n%)
DECLARE SUB sboxinit (b() AS INTEGER)
DECLARE SUB xtob (a$, mbits%())
DIM s(1 TO 8, 1 TO 64) AS shared INTEGER
400
Глава
18.
Криптографическая
защита
Продолжение
листинга
18.3
'
Инициализация
RESTORE InitialTrl
DIM InitialTr(1 TO 64) AS shared INTEGER
init InitialTr(), 64
RESTORE FinalTrl
DIM FinalTr(1 TO 64) AS shared INTEGER
init FinalTr(), 64
RESTORE swappyl
DIM swappy(1 TO 64) AS shared INTEGER
init swappy(), 64
RESTORE KeyTr1l
DIM KeyTr1(1 TO 56) AS shared INTEGER
init KeyTr1(), 56
RESTORE KeyTr2l
DIM KeyTr2(1 TO 48) AS shared INTEGER
init KeyTr2(), 48
RESTORE etrl
DIM etr(1 TO 48) AS shared INTEGER
init etr(), 48
RESTORE ptrl
DIM ptr(1 TO 32) AS shared INTEGER
init ptr(), 32
sboxinit s()
RESTORE rotsl
DIM rots(1 TO 16) AS shared INTEGER
init rots(), 16
DIM XR(1 TO 56) AS shared INTEGER
DIM EF(1 TO 64) AS shared INTEGER
DIM ikeyf(1 TO 64) AS shared INTEGER
DIM yf(1 TO 64) AS shared INTEGER