
v3_2022-23 уч г_теория_ЛР2_ЦСПиМЗ
.pdfЛабораторная работа № 2 ИССЛЕДОВАНИЕ ЭФФЕКТОВ ОГРАНИЧЕНИЯ РАЗРЯДНОЙ СЕТКИ
ПРИ ЦИФРОВОЙ КРИПТОГРАФИЧЕСКОЙ ОБРАБОТКЕ СИГНАЛОВ
Лабораторная работа выполняется в среде автоматизированного проектирования программного обеспечения VisualDSP++. В ходе выполнения изучается архитектура и система команд сигнального процессора ADSP-2181, среда VisualDSP++ и исследуется работа подпрограммы деления целых чисел в простых полях Галуа с учетом эффекта ограничения разрядной сетки со стороны старших разрядов.
Общие указания
В таблице 1 представлен список источников информации, используемых при выполнении лабораторной работы.
Лабораторная работа выполняется индивидуально на домашнем компьютере или в компьютерном классе.
После завершения лабораторной работы следует составить отчёт в соответствии с требованиями к оформлению отчетов по лабораторным работам (см. в Приложении А, Б).
Отчёт оформляется письменно или в печатном виде с соблюдением требований, сформулированных в приложении А.
Отчет должен содержать титульный лист (приложение Б) и разделы: 1 Постановка задачи 2 Краткая теория
3 Блок-схема подпрограммы деления
4 Разработанная блок-схема алгоритма
5 Текст подпрограммы деления
6 Выводы.
Блок-схемы алгоритмов должны быть представлены в графическом виде в соответствии с действующими стандартами (приложение В).
Порядок выполнения
При подготовке к лабораторной работе следует повторить:
-архитектуру и систему команд арифметико-логического устройства (АЛУ) сигнального процессора ADSP-2181 по учебному пособию [1, с. 11-19];
-архитектуру и систему команд умножителя-накопителя по [1, с. 19-27];
-правила написания программ и псевдоинструкций ассемблера по [1, с.
32-37].
Особое внимание следует уделить целочисленному формату данных [1, с. 21] и правилам формирования и хранения признаков [1, с. 14, 24-25 ], а также мнемокодам условных операций АЛУ [1, с. 15].
1

Подпрограмма вычисления остатка от деления 32-разрядного числа из AY1 AY0 на 16-разрядное из AX0 [1, с. 26-27] представлена на странице 3.
Порядок самостоятельной разработки подпрограммы деления в простых полях Галуа представлен на странице 4.
В процессе выполнения лабораторной работы необходимо выполнить следующие задания:
1)составить блок-схему алгоритма деления целых чисел в простых полях Галуа mod m, используя готовую подпрограмму вычисления остатка от деления на странице 3.
2)используя описание подпрограммы деления в простых полях Галуа на странице 4, самостоятельно разработать блок-схему алгоритма деления целых чисел в простых полях Галуа mod m и соответствующую подпрограмму.
Таблица 1 — Список источников информации
Источники |
Ссылки на источники информации |
информации |
|
|
|
Учебные |
1. Шаврин С.С., Мельник С.В. Цифровые системы передачи и методы их за- |
пособия |
щиты [Электронный ресурс]: учебное пособие для бакалавров. - М.: ЭБС |
|
МТУСИ, 2020.- 91 с. Количество книг в библиотеке МТУСИ – 5. Режим досту- |
|
па: https://lms.mtuci.ru/lms/local/mtt/elib_download.php?book_id=2375 |
|
2. Шаврин С.С. Реализация базовых операций защиты информации на сиг- |
|
нальных процессорах. Часть 3: Учебное пособие / МТУСИ. – М.: ЭБС МТУ- |
|
СИ, 2018. – 34 с. ЭБС МТУСИ. Количество книг в библиотеке МТУСИ – 140. |
|
Режим доступа: https://lms.mtuci.ru/lms/local/mtt/elib_download.php? |
|
book_id=1854 |
Учебно- |
3. Мельник С.В., Зуйкова Т.Н., Мусатова О.Ю., Шаврин С.С. Исследование |
методические |
эффектов ограничения разрядной сетки при цифровой обработке сигна- |
пособия |
лов. Практикум. – М.: ЭБС МТУСИ, 2017. – 22 с. Количество книг в библио- |
|
теке МТУСИ – 190. Режим доступа: https://lms.mtuci.ru/lms/local/mtt/ |
|
elib_download.php?book_id=2168 |
|
4. Реализация генераторов ключевых последовательностей на сигнальных |
|
процессорах. Часть 2. Практикум / С.С. Шаврин, С.В. Мельник, Т.Н. Зуйкова, |
|
О.Ю. Мусатова. - М.: ЭБС МТУСИ, 2018. - 26 с.: Количество книг в библиоте- |
|
ке МТУСИ – 5. Режим доступа: |
|
https://lms.mtuci.ru/lms/local/mtt/elib_download.php?book_id=2169 |
2

Краткая теория
Подпрограмма вычисления остатка от деления 32-разрядного числа из AY1 AY0 на 16-разрядное из AX0 [1, с. 26-27].
3
Порядок разработки алгоритма подпрограммы вычисления остатка от деления [4, с. 7-9]:
-Записать значение 32-разрядного делимого (16+16 разрядов) в пару регистров AF AY0. Значение 16-разрядного делителя записать в регистр АХ0.
-Содержимое регистра состояния ASTAT установить в 0 (при делении положительных чисел бит AQ = 0).
8-разрядный регистр состояния ASTAT содержит признаки, формируемые АЛУ, умножителем-накопителем и сдвигателем:
SS, MV, AQ, AS, AC, AV, AN, AZ.
-Убедиться, что значение делителя не равно нулю, в противном случае завершить выполнение подпрограммы и выставить флаг невозможности деления AV = 1 (соответственно ASTAT=4).
-Проанализировать значение старшего разряда делителя.
Если значение старшего разряда делителя равно нулю, то для вычисления частного следует 17 раз выполнить команду divq AX0.
В противном случае следует сдвинуть значение делителя на один разряд вправо, например, с использованием сдвигателя, и для вычисления частного 16 раз выполнить команду divq dreg, где dreg – имя регистра, содержащего результат сдвига.
-Частное сформируется в регистре AY0.
-Для случая, когда старший разряд делителя равен единице, проанализировать значение младшего разряда делителя, и, если оно равно единице, вычесть единицу из частного.
-Вычислить остаток от деления по формуле:
MR = MR - AX0* AY0,
где MR – делимое; AX0 – делитель; AY0 – частное. Значение остатка будет представлено в регистре MR0.
4
Порядок разработки текста подпрограммы деления в простых полях Галуа
Шаг 1. Записать значение делимого в пару регистров AF AY0,
делителя – в регистр АХ0 (самостоятельно дописать недостающие строки): af = pass mr1;
.
.
.
Шаг 2. В ASTAT записать 0: astat = 0;
Шаг 3. Проверить значение делителя на предмет равенства нулю, в этом случае завершить выполнение подпрограммы и выставить флаг невозможности
деления AV = 1 (соответственно ASTAT=4): ar = pass ax0;
if ne jump deli; astat = 4;
rts;
Шаг 4. Проанализировать значение старшего разряда делителя. deli: ar = pass ax0;
if gt jump deli_0; if lt jump deli_1;
Шаг 5. Если значение старшего разряда делителя равно единице, то следует сдвинуть значение делителя на один разряд вправо и 16 раз выполнить
команду divq.
deli_1: 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 = ay0;
af = tstbit 0 of ax0; if ne ar = ar – 1;
Перейти к шагу 7.
Шаг 6. Если значение старшего разряда делителя равно нулю, то следует 17 раз выполнить команду divq AX0.
deli_0: divq AX0; divq AX0; divq AX0; divq AX0; divq AX0; divq AX0; divq AX0; divq AX0; divq AX0; divq AX0; divq AX0; divq AX0;
5
divq AX0; divq AX0; divq AX0; divq AX0; divq AX0;
Шаг 7. Вычислить остаток от деления, используя команду MR = MR – xop * yop (UU);
Результат в MR0.
Самостоятельно дописать недостающие строки программы:
.
.
.
mr = mr – ar * my0 (uu);
Для дополнительного изучения операции деления в простых полях Галуа можно ознакомиться с реализациями конгруэнтного генератора псевдослучайных чисел и генератора псевдослучайной последовательности на числах Блюма.
Конгруэнтный генератор
При реализации конгруэнтных генераторов X i =( A * X i-1 + B ) mod m
необходимо вычисление остатка от деления 32-разрядного целого беззнакового числа на аналогичное по формату 16-разрядное. Средствами процессора ADSP-
2181 это может быть выполнено с помощью подпрограммы. delen: nop;
{
подпрограмма вычисления остатка от деления 32-разрядного числа из MR на 16-разрядное из AX0; возвращает: частное - в AY0, остаток - в MR0 признак невозможности деления - AV
}
af = pass mr1; ay0 = mr0;
ar = pass ax0; if gt jump tttt;
llll: if lt jump rrrr; astat = 4;
rts;
tttt:astat = 0;
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;
6
rrrr:sr1 = ax0;
sr = lshift sr1 by -1(hi); astat = 0;
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; mr2 = 0;
my0 = ax0, ar = pass ay0; af = tstbit 0xf of sr0;
if ne ar = ar – 1; ay0 = ar;
mr = mr - ar * my0 (uu);
rts;
Для выполнения поразрядного деления в АЛУ делимое должно быть записано в регистры AF (старшие разряды) и AY0 (младшие), делитель – в AX0. Частное формируется поразрядно в регистре AY0.
В результате выполнения подпрограмма возвращает значения частного в AR и остатка от деления в регистр MR0. В случае невозможности деления (если делитель равен нулю) устанавливается флаг AV, что соответствует ASTAT =4.
Генератор ПСП на числах Блюма
Генератор псевдослучайной последовательности на числах Блюма представляет собой разновидность конгруэнтного генератора. Он относится к нелинейным и в некоторых случаях допускает использование в качестве генератора гаммы шифра. Для его реализации необходимо выбрать два больших простых числа p и q, удовлетворяющих условиям:
p mod 4 = 3, |
q mod 4 = 3 |
и вычислить значение |
|
n = p * q,
которое называют числом Блюма.
Далее следует выбрать число Х, взаимно простое с числами p и q, и вычислить
Х 0 = Х2 mod n.
Псевдослучайная последовательность формируется из младших битов Хi , генерируемых рекуррентной процедурой
Х i = ( Х i – 1 ) 2 mod n.
Числа p, q и Х 0 составляют ключ генератора.
Если длина разрядной сетки, необходимой для представления числа (n–1), равна N, то для формирования ПСП могут быть использованы M младших битов чисел Х i :
M = log 2 N.
Так, например, для организации (не особенно сложного) генератора ПСП, работающего в 16-разрядной сетке,
7
M = log 2 16 = 4,
в качестве p и q могут быть использованы числа:
p = 239 |
=> |
239 mod 4 = 3 |
q = 251 |
=> |
251 mod 4 = 3 |
n = p * q = 59989 =0xEA55. |
В качестве Х можно выбрать число, взаимно простое с числами p и q: Х = 65535 = 0xFFFF.
Процедура вычисления Xi средствами процессора ADSP-2181 может быть реализована, например, в виде программы, представленной на рисунке 2, в которой используется вызов подпрограммы вычисления остатка от деления, рассмотренной на рисунке 1.
В генерируемую ПСП могут быть включены 4 младших бита сгенерированных псевдослучайных чисел.
Gen2: ena m_mode;
{
программа генератора на числах Блюма
}
{
начальный вброс
}
mx0 = 0xffff; mr = mx0 * mx0 (uu);
{
генератор
}
do gener until forever;
{
вычисление остатка (х * х)mod n n = 0xea55 -> AX0
}
ax0 = 0xea55; call delen;
{
остаток - в MR0, отсечение
4-х младших разрядов в SR0
}
sr = lshift mr0 by 12 (lo); sr = lshift sr0 by -12 (lo);
{
вывод в файл
}
io(0) = sr0;
{
возведение в квадрат
}
gener: mr = mr0 * mr0 (uu);
{
подпрограмма деления целых чисел:
8
делимое - в MR; делитель - в AX0; возвращает: частное - в AY0, остаток - в MR0 признак невозможности деления - AV
delen: |
} |
|
mr1; |
|
af = pass |
|
|||
|
ay0 = mr0; |
|
||
|
ar = |
pass |
ax0; |
|
llll: |
if gt jump tttt; |
|||
|
if lt jump rrrr; |
|||
rts; |
astat = 4; |
|
||
|
astat = 0; |
|||
tttt: |
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; |
|
ar = pass ay0; |
|
|
my0 = ax0, |
|||
rts; |
mr = |
mr - ar * my0 (uu); |
||
|
|
|
|
rrrr:sr1 = ax0;
sr = lshift sr1 by -1(hi); astat = 0;
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;
mr2 = 0;
my0 = ax0, ar = pass ay0; af = tstbit 0xf of sr0;
if ne ar = ar – 1; ay0 = ar;
mr = mr - ar * my0 (uu);
rts;
9

ПРИЛОЖЕНИЕ А
Порядок оформления отчета по лабораторной работе
Пример оформления титульного листа отчета по лабораторной работе представлен в приложении Б.
Отчет оформляется на компьютере на листах формата А4 с применением 14-го размера шрифта Times New Roman через 1,5 интервала. Текст должен быть отформатирован по левому и правому полям страницы. Каждая страница имеет одинаковые поля: левое – 30 мм, правое – 10 мм, верхнее – 20 мм, нижнее
– 25 мм. Абзацный отступ по всему тексту должен быть одинаковым и составлять 1,25 см.
Расстояние между названием раздела и последующим текстом должно составлять три интервала. Такое же расстояние выдерживается между заголовками раздела и подраздела. Названия разделов и подразделов оформляются 14-м размером шрифта Times New Roman с полужирным выделением. Названия разделов оформляются прописными буквами.
Нумерация страниц начинается с титульного листа, на котором цифра «1» не проставляется. На следующей странице проставляется цифра «2». Далее весь последующий объем отчета, включая приложения, нумеруется по порядку до последней страницы. Порядковый номер страницы печатается в центре нижнего поля документа.
Все таблицы отчета, если их несколько, нумеруются арабскими цифрами. Номер таблицы размещается над заголовком таблицы в левом верхнем углу после слова «Таблица» (например, Таблица 4). Таблица сопровождается названием, которое размещается после её номера через тире и пишется с прописной буквы без точки на конце, например:
Таблица 4 – Периоды М-последовательностей (пример оформления таблицы)
№ |
Полином |
Расчетный период |
Период генерации ПСП, |
|
ПСП, бит |
бит |
|||
|
|
|||
|
|
|
|
|
1 |
|
63 |
63 |
|
|
|
|
|
|
2 |
|
131071 |
131071 |
|
|
|
|
|
Правила оформления блок-схем алгоритмов приведены в Приложении Б. Все схемы, блок-схемы, временные диаграммы и графики именуются рисунками. Рисунки нумеруются арабскими цифрами. Номер рисунка размещается под рисунком после слова «Рисунок» (например, Рисунок 4).
Рисунки должны размещаться сразу после первой ссылки на них в тексте, если на листе есть свободное место. Ссылки на рисунки в тексте выполняются в свободной форме, например, «…на рисунке 4…». Каждый рисунок должен со-
10