Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы МИСЗКИ.doc
Скачиваний:
21
Добавлен:
04.09.2019
Размер:
1 Мб
Скачать
☆

Пример выполнения Задания2

Алгоритм шифрования RSA. Цифровая подпись

  1. Выработка собственных секретных ключей.

, , ,

-2

-1

0

1

2

3

-

-

0

22

1

6

1

0

1

22

23

160

  1. Дешифровка посланного сообщения.

-2

-1

0

1

2

3

4

5

-

-

0

24

1

2

2

2

1

0

1

24

25

74

173

420

  1. Выработка общего ключа (алгоритм Диффи-Хеллмана).

GF(19)

  1. Верификация расшифрованного сообщения.

Итоговое (расшифрованное, верифицированное) сообщение: (355, 16).

Пример выполнения Задания3.

Алгоритм Диффи-Хеллмана

Открытый элемент Р задан в таблице 3 – графа 2. Найти примитивный элемент поля. Считая, что секретный ключ каждого участника равен номеру студента в списке группы i, вычислить ключ обмена для участника с номером 35 – i по алгоритму Диффи-Хэллмана.

Вариант № 7, группа 2091 (№ 1)

Номер в списке группы i = 7

Номер группы k = 1

P = 43

Открытый элемент P = 43. Найти примитивный элемент поля. Секретный ключ каждого участника i = 7, вычислить ключ обмена для участника с номером 35.

GF(43) = <0, 1, 2, 3, …, 40, 41, 42>

Найдем примитивный элемент поля GF(43).

Требуется найти такое число, принадлежащее интервалу [2,42], которое при возведении в 42-ю степень по модулю 43 будет давать в результате единицу. Если же единица будет получена раньше, чем при возведении в 42-ю степень, результаты возведения в степень начнут повторяться, и через выбранный элемент не удастся представить все элементы поля. Исходя из таких соображений, получаем несложный алгоритм нахождения примитивных элементов поля GF(43).

Алгоритм нахождения примитивных элементов поля GF(43).

int _tmain(int argc, _TCHAR* argv[])

{

long int mem, i, j, num, deg, modul, res;

unsigned char mas[44];

deg = 0; modul = 43; mem = 2;

while (mem < 42)

{

num = mem; deg = 0;

while (deg != 42)

{

res = 1; deg = 0;

for (i = 0; i < 42; i++) mas[i] = 0;

do

{

res = res*num; res = res % modul;

deg++; mas[deg] = res;

}

while(res != 1);

num++;

}

std::cout << num-1 << std::endl;

for (i = 0; i < 42; i++)

{

for (j = 0; j < 42; j++)

{

if ((i != j) && (mas[j] == mas[i]))

std::cout << "Wrong" << std::endl;

}

mem = num;

}

}

return 0;

}

В результате выполнения программы получим следующие значения:

3, 5, 12, 18, 19, 20, 26, 28, 29, 30, 33, 34

Выберем значение α = 20. Найдем элементы поля.

α = 20

α2 = 13

α3 = 2

α4 = 40

α5 = 26

α6 = 4

α7 = 37

α8 = 9

α9 = 8

α10 = 31

α11 = 18

α12 = 16

α13 = 19

α14 = 36

α15 = 32

α16 = 38

α17 = 29

α18 = 21

α19 = 33

α20 = 15

α21 = 42

α22 = 23

α23 = 30

α24 = 41

α25 = 3

α26 = 17

α27 = 39

α28 = 6

α29 = 34

α30 = 35

α31 = 12

α32 = 25

α33 = 27

α34 = 24

α35 = 7

α36 = 11

α37 = 5

α38 = 14

α39 = 22

α40 = 10

α41 = 28

α42 = 1

Секретный ключ участника А: XA = 7.

Секретный ключ участника B: YB = 35-7 = 28.

Открытый ключ участника А:

Открытый ключ участника B:

15 * 208 = 6

Обменный ключ участника А:

Обменный ключ участника B:

Значения обменного ключа для А и В совпадают.

Обменный ключ: K = 6