ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.06.2021

Просмотров: 3557

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

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.

 

Формирование

 

подключей

 


background image

Стандарт

 

шифрования

 

данных

 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 


background image

398

     

Глава

 18. 

Криптографическая

 

защита

 

 

S1 0 1 2 3 4 5

6

7

8

9

10

11

12

13 14 15 

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 

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 

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 

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 

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 

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 

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 

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 

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 


background image

Стандарт

 

шифрования

 

данных

 DES     

399

 

0 4 

11 2 

14 15 0

8

13

3

32

9

7

5

10 6 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 


background image

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