Алгоритм формування ключів в процесі функціонування DES

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Кафедра: АСОІ

Лабораторна робота

«Алгоритм формування ключів в процесі функціонування DES»

з дисципліни

«Методи та засоби захисту інформації»

Москва 2009

Зміст

Технічне завдання

Алгоритм формування ключів в процесі функціонування DES.

Робота алгоритму

1 крок. Перестановки бітів ключа з використанням таблиці перестановок.

2 крок. Розбиття ключа.

3 крок. Створення 16-ти підключений шляхом зсуву.

4 крок. Перестановка бітів ключа з використанням таблиці PC1.

Вихідний код

Приклад роботи програми

Технічне завдання

  1. Реалізувати алгоритм формування ключів в процесі функціонування DES на мові програмування C + +.

  2. Провести тест програми.

Алгоритм формування ключів в процесі функціонування DES

Формування ключів - алгоритм, що дозволяє отримати за відносно коротким ключу шифрування послідовність раундових ключів.

Вхідні дані: Ключ складається з 8 символів або 8 байт. Відповідно ключ має розмір 64 байта. Але розмір ключа використовується тільки для запису (для організації даних). Фактично, кожен 8 біт відкидається і ефективний розмір ключа - 56 біт.

Робота алгоритму

1 крок. Перестановки бітів ключа з використанням таблиці перестановок.

Для прикладу введемо:

olga 1234

Поставлене ключ у двійковому представленні:

На початку над ключем шифру виконується операція 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 крок. Розбиття ключа

На цьому кроці здійснюється розбиття ключа на 2 половини C 0 і D 0. Кожна половина містить 28 біт.

C 0:

0000111111111111111100000000

D 0:

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

C 1: 0001111111111111111000000000

D 1: 1011101011001011000011100110

1

C 2: 0011111111111111110000000000

D 2: 0111010110010110000111001101

2

C 3: 1111111111111111000000000011

D 3: 1101011001011000011100110111

2

C 4: 1111111111111100000000001111

D 4: 0101100101100001110011011101

2

C 5: 1111111111110000000000111111

D 5: 0110010110000111001101110101

2

C 6: 1111111111000000000011111111

D 6: 1001011000011100110111010110

2

C 7: 1111111100000000001111111111

D 7: 0101100001110011011101011001

2

C 8: 1111110000000000111111111111

D 8: 0110000111001101110101100101

1

C 9: 1111100000000001111111111111

D 9: 1100001110011011101011001011

2

C 10: 1110000000000111111111111111

D 10: 0000111001101110101100101100

2

C 11: 1000000000011111111111111110

D 11: 0011100110111010110010110000

2

C 12: 0000000001111111111111111000

D 12: 1110011011101011001011000011

2

C 13: 0000000111111111111111100000

D 13: 1001101110101100101100001110

2

C 14: 0000011111111111111110000000

D 14: 0110111010110010110000111001

2

C 15: 0001111111111111111000000000

D 15: 1011101011001011000011100110

1

C 16: 0011111111111111110000000000

D 16: 0111010110010110000111001101

4 крок. Перестановка бітів ключа з використанням таблиці PC 1

До фінальної перестановки бітів ключів, необхідне злиття кожної пари даних. Після того, як для кожного бітового блоку C n D n, де 1 <= n <= 16 здійснитися відповідна перестановка з таблиці (див. нижче), формуючи ключі. Тільки 48 біт кожної об'єднаної пари зберігається в перестановленном ключі.

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

Всі підключи:

K 1: 111001111101001101110010001100110001010011011101

K 2: 111001101101001101110011111011100011011001010110

K 3: 101011111101001111011011001111011110001011101010

K 4: 001111100101001111011011011101001101110001000011

K 5: 001111100101100111011001100011101010010001111110

K 6: 000111110110100111011101101010011111111011000000

K 7: 000111100110110110011101011111001100011000110011

K 8: 010111100010110110101101100111110100110001001110

K 9: 010110111010110110101101010001010001111010110110

K 10: 110110001010110010101111110110010010100011111001

K 11: 111100001010111010100110001000111101101000011101

K 12: 111100011011111000100110000101110011010010110110

K 13: 111000011011011001110110111010010000100011100101

K 14: 111001001101011001110110010001101110101010011111

K 15: 111001111101001101110010001100110001010011011101

K 16: 111001101101001101110011111011100011011001010110

Вихідний код

# Include <stdio.h>

# Include <math.h>

# Include <string.h>

# Include <stdlib.h>

int main (int argc, char * argv []) {

int

i, b, y, r, j, v, p, m, l, f, u, k, a, s, q, D [100] [100], Y [100] [100], U [100] [100], X [1000] [1000], E [100] [100], G [100] [100], W [100] [100], P [100] [1 $

double z;

int key [16] = {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};

char A [1000];

char B [200];

char N [200];

char T [200];

char C [1000];

char Z [43];

char R [43];

char L [43];

char * str2;

char * str;

char * str1;

char * str3;

char * str4;

char * str5;

char d [100];

printf ("\ nVvedite key \ n");

<

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Лабораторна робота
45.6кб. | скачати


Схожі роботи:
Алгоритм формування корпоративної культури на підприємстві
Функціонування емоцій у процесі цілеутворення
Формування і функціонування венчурних фондів
Особливості формування і функціонування кооперативної власності
Ринок основи формування закони функціонування
Формування і функціонування корпоративних структур в економіці регіону
Аудит особливостей функціонування підприємства Особливості формування
Демографічна основа формування і функціонування ринку праці
Психологічні закономірності формування і функціонування соціальної спільності людей
© Усі права захищені
написати до нас