Добавил:
Да поможет вам Котельников Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

TsSP_Lab_8

.doc
Скачиваний:
6
Добавлен:
23.06.2024
Размер:
356.35 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

Московский технический университет связи и информатики

Кафедра многоканальных телекоммуникационных систем

Лабораторная работа № 8

по дисциплине

Цифровые системы передачи и методы их защиты

Реализация алгоритма Евклида

Номер студ. билета № 1БИН20037

Выполнил:

студент гр. БЗС2002

Ломакин А. А.

(Ф.И.О.)

Проверила:

Мусатова О. Ю.

(должность, Ф.И.О.)

Москва 2023

1. Постановка задачи

1) Изучить блок-схему расширенного алгоритма Евклида, используя часть 2 учебного пособия профессора С.С. Шаврина «Защита информации в многоканальных телекоммуникационных системах» на стр. 13.

2) Реализовать по блок-схеме функцию нахождения обратных значений в простых полях Галуа по расширенному алгоритму Евклида средствами сигнального процессора ADSP-2181.

2. Исходные данные для индивидуального задания

Исходные данные, соответствующие номеру студенческого билета, представлены в таблице 1.

Таблица 1 — Исходные данные для алгоритма Евклида

Последние две цифры номера студ. билета АВ

Формула для расчета

Расчетное значение

A = 3 B = 7

15

47

3. Краткая теория

Алгоритм Евклида используется в криптосистемах для 1) решения задач, связанных с факторизацией;

2) идентификации взаимно простых чисел.

Алгоритм Евклида решает задачу вычисления для двух целых чисел a и n наибольшего общего делителя d = НОД(a, n). Алгоритм Евклида решает задачу вычисления двух целых чисел x и y, удовлетворяющих решению уравнения .

4. Блок-схема алгоритма

Блок-схема расширенного алгоритма Евклида представлена на рисунке 1.

Рисунок 1 — Блок-схема расширенного алгоритма Евклида

5. Исходный текст подпрограммы

Исходный текст подпрограммы, реализующей расширенный алгоритм Евклида, представлен на рисунке 2.

.section/dm vars;

.var x1 = 1;

.var x2 = 0;

.var y1 = 0;

.var y2 = 1;

.var a = 15;

.var n = 47;

.var q, r, NOD, z;

.section/pm program;

ena m_mode;

ar = dm(n); // Запись числа n в AR

dm(z) = ar; // Дублирование числа n в переменной 'z'

find: nop; // Цикл поиска НОД'а

// Блок 1

mx0 = 1;

my0 = dm(n);

mr = mx0 * my0(uu); // Запись делимого N в MR

ax0 = dm(a); // Запись делителя A в AX0

call delen; // Вызов функции деления

dm(q) = ay0; // Запись частного в 'q' 5041

dm(r) = mr0; // Запись остатка в 'r'

// Блок 2

mr = 0; // Сброс MR

mr0 = dm(y2); // Запись Y2 в MR0

mx0 = dm(q); // Запись Q в MX0

my0 = dm(y1); // Запись Y1 в MY0

mr = mr - mx0 * my0(uu); // y = y2 - q * y1

ar = dm(y1); // Сохранение Y1

dm(y2) = ar; // Y2 = Y1

dm(y1) = mr0; // Y1 = Y

// Блок 3

mr = 0; // Сброс MR

mr0 = dm(x2); // Запись Y2 в MR0

mx0 = dm(q); // Запись Q в MX0

my0 = dm(x1); // Запись Y1 в MY0

mr = mr - mx0 * my0(uu); // y = y2 - q * y1

ar = dm(x1); // Сохранение Y1

dm(x2) = ar; // Y2 = Y1

dm(x1) = mr0; // Y1 = Y

// Блок 4

ax0 = dm(a); // AX0 = a

dm(n) = ax0; // n = AX0

ax0 = dm(r); // AX0 = r

dm(a) = ax0; // a = AX0

ar = pass ax0;

if gt jump find;

ay0 = dm(n);

dm(NOD) = ay0;

ar = ay0 - 1;

if ne jump find_NO;

mx0 = 1;

my1 = dm(x2);

mr = mx0 * my1(uu);

ax0 = dm(z);

call delen;

find_NO: astat=4;

end: jump end;

delen:

mr1 = 0;

AF = pass MR1;

AY0 = MR0;

ASTAT = 0;

AR = pass ax0;

if NE jump del;

ASTAT = 4;

rts;

del:

AR = pass AX0;

if GT jump large;

if LT jump smol;

large:

divq AX0; divq AX0;

divq AX0; divq AX0;

divq AX0; divq AX0;

divq AX0; divq AX0;

divq AX0; divq AX0;

divq AX0; divq AX0;

divq AX0; divq AX0;

divq AX0; divq AX0;

divq AX0;

MR2 = 0;

MY0 = AX0;

AR = pass AY0;

MR = MR - AR*MY0 (uu);

rts;

smol:

SR1 = AX0;

SR = lshift SR1 by -1(HI);

divq SR1; divq SR1;

divq SR1; divq SR1;

divq SR1; divq SR1;

divq SR1; divq SR1;

divq SR1; divq SR1;

divq SR1; divq SR1;

divq SR1; divq SR1;

divq SR1; divq SR1;

AR = pass AY0;

if EQ jump zero;

AF = tstbit 0 of AX0;

if NE AR = AR - 1;

zero:

MR2 = 0;

MY0 = AX0;

MR = MR - AR*MY0 (uu);

rts;

Рисунок 2 — Исходный текст подпрограммы нахождения обратных чисел по алгоритму Евклида

6. Результаты предварительного расчета и отладки подпрограммы нахождения обратных чисел по алгоритму Евклида

Результаты предварительного расчета для отладки подпрограммы нахождения по алгоритму Евклида значения числа , обратного числу по модулю , приведены в таблице 2, где

уравнение в целых числах

- частное

- остаток деления

- наибольший общий делитель

Таблица 2 - Предварительный расчет для отладки подпрограммы

q

n

a

r

x2

x1

x

y2

y1

y

3

47

15

2

0

1

-3

1

0

1

7

15

2

1

1

-3

22

0

1

-7

2

2

1

0

-3

22

-47

1

-7

15

1

0

22

-47

-7

15

x = n(22)mod47 - обратное числу по модулю . Проверка взаимообратности чисел и : .

15*22 + 47*(-7) = 1 - решение уравнения в целых числах.

Результаты отладки подпрограммы представлены в таблице 3.

Таблица 3 — Результаты отладки подпрограммы

q

n

a

r

x2

x1

x

y2

y1

y

3

47

15

2

0

1

-3

1

0

1

7

15

2

1

1

-3

22

0

1

-7

2

2

1

0

-3

22

-47

1

-7

15

1

0

22

-47

-7

15

Результаты работы подпрограммы в соответствии с исходными данными представлены в таблице 4.

Таблица 4 — Результаты работы подпрограммы

a

n

x=a-1 mod n

ПРОВЕРКА: (x * a-1) mod n

15

47

69

1

7 Анализ полученных результатов

Полученные данные на выходе программы подтверждают, что она работоспособна – были найдены обратные значения в простых полях Галуа по расширенному алгоритму Евклида.

8 Выводы

Алгоритм Евклида решает задачу нахождения вычисления для двух целых чисел a и n наибольшего общего делителя НОД(a,n). Алгоритм Евклида также решает задачу вычисления двух целых чисел x и y, удовлетворяющих решению уравнения a*x+n*y=НОД(a,n).

8