
TsSP_Lab_8
.docМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
Московский технический университет связи и информатики
Кафедра многоканальных телекоммуникационных систем
Лабораторная работа № 8
по дисциплине
Цифровые системы передачи и методы их защиты
Реализация алгоритма Евклида
Номер студ. билета № 1БИН20037
Выполнил:
студент гр. БЗС2002
Ломакин А. А.
(Ф.И.О.)
Проверила:
Мусатова О. Ю.
(должность, Ф.И.О.)
Москва 2023
1. Постановка задачи
1) Изучить блок-схему расширенного алгоритма Евклида, используя часть 2 учебного пособия профессора С.С. Шаврина «Защита информации в многоканальных телекоммуникационных системах» на стр. 13.
2) Реализовать по блок-схеме функцию нахождения обратных значений в простых полях Галуа по расширенному алгоритму Евклида средствами сигнального процессора ADSP-2181.
2. Исходные данные для индивидуального задания
Исходные данные, соответствующие номеру студенческого билета, представлены в таблице 1.
Таблица
1 — Исходные данные для алгоритма Евклида
Последние две цифры номера студ. билета АВ |
Формула для расчета |
Расчетное значение |
A = 3 B = 7 |
|
|
|
|
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).