
ЛР3
.docМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
Московский технический университет связи и информатики
Кафедра многоканальных телекоммуникационных систем
Лабораторная работа № 3
по дисциплине
Цифровые системы передачи и методы их защиты
Реализация принципов криптозащиты на основе средств микропроцессорной техники
Бригада № 5
Выполнил: студент гр. БЗС2002
Протасова Т. Н.
Проверила: Зуйкова Т. Н.
Москва 2023
1. Постановка задачи и исходные данные
Средствами сигнального процессора ADSP-2181 реализовать операцию умножения в простых полях Галуа и базовую криптографическую операцию XOR в соответствии с индивидуальным заданием.
Xi = {1616; 1318; 342; 35; 31},
Ki = {2241; 1318; 1616; 910; 14},
p = 2267;
2. Краткая теория
Структура ГАД иллюстрируется рис. 1. В состав каждого ГАД входят четыре комплекта пар 14 - разрядных регистров I - указателей косвенной адресации и L - длины буфера, а также четыре 14 - разрядных регистра - модификатора M. Косвенный поставтомодифицирующий режим адресации к кольцевым буферам организуется в следующей последовательности.
В начале программы адресуемый буфер должен быть объявлен как кольцевой, и, при необходимости, инициализирован.
Рисунок 1. Структура ГАД 1 и ГАД 2
Перед началом цикла обращений пара регистров Ik и Lk должна быть привязана к соответствующему буферу: регистр - указатель Ik должен быть установлен на ячейку начала адресации (при этом адрес начала буфера может быть указан как ^имя_буфера), а в регистр длины Lk должно быть записано значение длины кольцевого буфера (в абсолютном выражении или как %имя_буфера). В регистр - модификатор Мn должно быть записано положительное или отрицательное значение величины шага изменения адреса при обращении.
3. Разработанные блок-схемы программ
Рисунок 2 - блок-схема программы XOR
Рисунок 3 – блок-схема программы нахождения остатка
4. Тексты программ
.section/dm vars;
.var/circ Z[5];
.var/circ X[5] = 1616, 1318, 342, 35, 31;
.var/circ K[5] = 2241, 1318, 1616, 910, 14;
.var/circ Y[5];
.var p = 2267;
.var a = 5;
.var b = 3;
.section/pm program;
jump main;
div:
af = pass mr1;
ay0 = mr0;
ax0 = dm(p);
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 (ss);
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 (ss);
rts;
main:
ena m_mode;
I0 = X;
L0 = length(X);
I1 = K;
L1 = length(K);
I2 = Z;
L2 = length(Z);
I3 = Y;
L3 = length(Y);
M0 = 1;
CNTR = 5;
do c1 until CE;
mx0 = dm(I0, M0);
my0 = dm(I1, M0);
mr = mx0 * my0 (uu);
call div;
c1: dm(I2, M0) = mr0;
CNTR = 5;
do c2 until CE;
ax0 = dm(I0, M0);
ay0 = dm(I1, M0);
ar = ax0 xor ay0;
dm(I3, M0) = ar;
c2: ar = 0;
end: jump end;
5. Анализ полученных данных
Посчитаем вручную, что нужно получить в результате выполнения программы:
X1 = 1616 = В#011001010000 = 0x650, X2 = 1318 = В#010100100110 = 0x526, X3 = 342 = В#000101010110 = 0x156, X4 = 35 = В#00100011 = 0x23, X5 = 31 = В#00011111 = 0x1F;
K1 = 2241 = В#100011000001 = 0x8C1, K2 = 1318 = В#010100100110 = 0x526, K3 = 1616 = В#011001010000 = 0x650, K4 = 910 = В#001110001110 = 0x38E, K5 = 14 = В#1110 = 0xE;
X1⋅K1 = 1616⋅2241 = 3621456, X2⋅K2 = 1318⋅1318 = 1737124, X3⋅K3 = 342⋅1616 = 552672, X4⋅K4 = 35⋅910 = 31850, X5⋅K5 = 31⋅14 = 434;
(X1⋅K1):2267 = (1616⋅2241):2267 = 1597, (X2⋅K2):2267 = (1318⋅1318):2267 = 766, (X3⋅K3):2267 = (342⋅1616):2267 = 243, (X4⋅K4):2267 = (35⋅910):2267 = 14, (X5⋅K5):2267 = (31⋅14):2267 = 0;
(X1⋅K1) mod 2267 = (1616⋅2241) mod 2267 = 1057, (X2⋅K2) mod 2267 = (1318⋅1318) mod 2267 = 602, (X3⋅K3) mod 2267 = (342⋅1616) mod 2267 = 1791, (X4⋅K4) mod 2267 = (35⋅910) mod 2267 = 112, (X5⋅K5) mod 2267 = (31⋅14) mod 2267 = 434;
X1 XOR K1 = 3729, X2 XOR K2 = 0, X3 XOR K3 = 1798, X4 XOR K4 = 941, X5 XOR K5 = 17;
Результат работы программы совпадает с полученными расчётами, значит, программа работает корректно.
6. Выводы
В результате сделанной лабораторной работы была получена программа умножения элементов массива и нахождения остатка от этого произведения (умножение в простых полях Галуа) и программа сложения по модулю 2 элементов массива с помощью команды XOR. При реализации этих программ следует изучить работу ГАД, уметь правильно использовать циклы, а также обращать внимание на правильную инициализацию и обращение к массивам данных.