- •Лабораторная работа №1 Архитектура нейромикропроцессоров семейства NeuroMatrix ® nm 640х и их функциональные возможности
- •1. Описание и порядок пользования программой nmcalculator
- •1.1 Общие сведения о программе
- •1.2 Формирование векторной команды
- •1.3 Разбиение рабочей матрицы и запись весовых коэффициентов
- •1.4 Установка входных значений
- •1.5 Генератор кода
- •2. Порядок выполнения работы
- •Лабораторная работа № 2
- •1.Порядок выполнения работы
- •2. Элементы языка ассемблера процессора nm 6403
- •2.1 Формат ассемблерных инструкций
- •2.2 Векторные инструкции процессора
- •2.3 Регистры процессора
- •2.3.1 Основные регистры
- •3. Примеры простейших программ Пример 1: Организация циклов и доступ к памяти
- •Пример 2: Копирование массива данных на скалярном процессоре
- •Пример 3: Копирование массива данных на векторном процессоре
- •Пример 4: Операция взвешенного суммирования
- •4. Порядок выполнения работы
- •5. Контрольные вопросы
- •Лабораторная работа № 3
- •2.3 Использование Меток в Макросах
- •2.4 Импорт Макросов из Макробиблиотек
- •3. Примеры простейших программ Пример 1: Пример использования макросов в программе
- •Пример 2: Создание Библиотеки Макросов
- •4. Порядок выполнения работы
- •Лабораторная работа №4 Кодирование и декодирование информации в нейромикропроцессоре NeuroMatrix ® nm 640х
- •Теоретическая часть
- •1.1 Описание алгоритма шифрования гост 28147-89
- •Замена по таблице
- •Сдвиг на 11 разрядов
- •Вторая итерация
- •Замена по таблице
- •Сдвиг на 11 разрядов
- •Третья итерация
- •Замена по таблице
- •Сдвиг на 11 разрядов
- •1.2 Реализация алгоритма шифрования на процессоре nm6403
- •Практическая часть
- •2.1 Реализация алгоритма гост 28147-89 на нейропроцессоре nm 6403/6404
- •2.2 Реализация алгоритма гост 28147-89 на эмуляторе векторе векторных команд
- •2.3 Варианты заданий
- •2.4 Удаленный доступа к плате NeuroMatrix
- •Список используемой литературы:
Лабораторная работа №4 Кодирование и декодирование информации в нейромикропроцессоре NeuroMatrix ® nm 640х
Цель работы:
Научиться работать с эмулятором векторных команд, обеспечивающим оахоаюльку написание, отладку и получение генерируемого, компилированного и сохраняемого кодов с контролем реальных аппаратных ресурсов и распределения памяти процессора Л1879ВМ1, Л1879ВМ2 (NM 6403/6404).
Научиться шифровать: кодировать и декодировать информацию по ГОСТу 28147-89
Применить данный эмулятор векторных команд для шифрования по вышеуказанному ГОСТу.
Теоретическая часть
1.1 Описание алгоритма шифрования гост 28147-89
Шифрование (в режиме простой замены) заключается в многократном повторении основного шага алгоритма.
Основной шаг криптопреобразования по своей сути является оператором, определяющим преобразование 64-битового блока данных. Дополнительным параметром этого оператора является 32-битовый блок, в качестве которого используется какой-либо элемент ключа. Схема алгоритма основного шага приведена на рисунке 1. Ниже даны пояснения к алгоритму основного шага:
Рис. 1 Схема основного шага криптопреобразования алгоритма ГОСТ 28147-89
Шаг 0. Определяет исходные данные для основного шага криптопреобразования N – преобразуемый 64-битовый блок данных, в ходе выполнения шага его младшая (N2) и старшая (N1) части обрабатываются как отдельные 32-битовые целые числа без знака.
Таким образом, можно записать N=(N1,N2). Х = 32-битовый элемент ключа;
Шаг 1. Сложение с ключом. Старшая половина преобразуемого блока складывается по модулю 2 с используемым на шаге элементом ключа, результат передается на следующий шаг;
Шаг 2. Поблочная замена. 32-битовое значение, полученное на предыдущем шаге, интерпретируется как массив из восьми 4-битовых блоков кода: S-(S0,S1,S2,S3,S4,S5,S6,S7). Далее значение каждого из восьми блоков заменяется новым, которое выбирается по таблице замен следующим образом: значение бока Si меняется на Si-тый по порядку элемент (нумерация с нуля) i-того узла замен (т. Е. i-той строки таблиц замен, нумерация также с нуля). Другими словами, в качестве замены для значения блока выбирается элемент из таблицы замен с номером строки, равным номеру заменяемого блока, и номером столбца, равным значению заменяемого блока как 4-битового целого неотрицательного числа.
Шаг 3. Циклический сдвиг на 11 бит влево. Результат предыдущего шага сдвигается циклически на 11 бит в сторону старших разрядов и передается на следующий шаг. На схеме алгоритма символом R обозначена функция циклического сдвига своего аргумента на 11 бит влево, т. Е. в сторону старших разрядов.
Шаг 4. Побитовое сложение: значение, полученное на шаге 3, побитно складывается по модулю 2 с младше половиной преобразуемого блока.
Шаг 5. Сдвиг по цепочке; младшая часть преобразуемого блока сдвигается на место старшей и на ее место помещается результат выполнения предыдущего шага.
Шаг 6. Полученное значение преобразуемого блока возвращается как результат выполнения алгоритма основного шага криптопреобразования.
Основной шаг, как уже было написано выше, многократно повторяется. В режиме простой замены цикл кодирования можно представить в следующем виде:
К0, К1, К2, К3, К4, К5, К6, К7, К0, К1, К2, К3, К4, К5, К6, К7, К0, К1, К2, К3, К4, К5, К6, К7,К7, К6, К5, К4, К3, К2, К1, К0.
Где Кi – 32-битовый элемент ключа.
Таким образом, цикл кодирования состоит в повторении основного шага 32 раза с разными элементами ключа.
Цикл декодирования является обратным к циклу кодирования, то есть последовательное применение этих двух циклов к произвольному блоку должно дать в итоге исходный блок.
В режиме простой замены цикл кодировния можно представить в следующем виде:
К0, К1, К2, К3, К4, К5, К6, К7, К7, К6, К5, К4, К3, К2, К1, К0, К7, К6, К5, К4, К3, К2, К1, К0,К7, К6, К5, К4, К3, К2, К1, К0.
Рис. 2а Схема цикла зашифрования 32-3
Рис. 2б Схема цикла зашифрования 32-Р
Пример кодирования:
Входные данные:
ENGENEER (45 4E 47 45 4E 45 45 51 h);
INFERNAL (52 4E 46 45 51 4E 41 4C h).
Ключ:
DESERT_STORM (44 45 53 45 52 54 5F 53 54 4F 52 4D h).
Таблица замен
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
0 |
13 |
8 |
5 |
10 |
7 |
2 |
11 |
5 |
1 |
15 |
3 |
6 |
14 |
0 |
12 |
9 |
1 |
4 |
7 |
8 |
14 |
0 |
11 |
15 |
1 |
2 |
13 |
12 |
5 |
10 |
9 |
3 |
6 |
2 |
10 |
11 |
14 |
6 |
9 |
13 |
3 |
8 |
7 |
4 |
0 |
1 |
15 |
5 |
2 |
12 |
3 |
15 |
13 |
8 |
7 |
11 |
14 |
12 |
3 |
2 |
10 |
9 |
4 |
6 |
1 |
5 |
0 |
4 |
6 |
14 |
12 |
5 |
10 |
3 |
0 |
11 |
15 |
3 |
4 |
7 |
2 |
9 |
1 |
8 |
5 |
11 |
4 |
6 |
15 |
1 |
13 |
2 |
9 |
14 |
7 |
12 |
0 |
10 |
5 |
8 |
3 |
6 |
8 |
15 |
9 |
6 |
12 |
7 |
3 |
5 |
0 |
2 |
14 |
13 |
4 |
11 |
10 |
1 |
7 |
14 |
9 |
15 |
13 |
8 |
10 |
11 |
12 |
4 |
1 |
5 |
6 |
7 |
3 |
0 |
2 |
Таблица кодов ASCII
65 (41h) |
A |
75 (4Bh) |
K |
84 (55h) |
U |
66 (42h) |
B |
76 (4Ch) |
L |
85 (56h) |
V |
67 (43h) |
C |
77 (4Dh) |
M |
86 (57h) |
W |
68 (44h) |
D |
78 (4Eh) |
N |
87 (58h) |
X |
69 (45h) |
E |
79 (4Fh) |
O |
88 (59h) |
Y |
70 (46h) |
F |
80 (50h) |
P |
89 (5Ah) |
Z |
71 (47h) |
G |
81 (51h) |
Q |
|
|
72 (48h) |
H |
81 (52h) |
R |
32 (20h) |
‘ ‘ |
73 (49h) |
I |
82 (53h) |
S |
95 (5Fh) |
‘_’ |
74 (4Ah) |
J |
83 (54h) |
T |
|
|
N1+K1 mod 2
Первое слово:
N1 |
0100 0101 |
0100 1110 |
0100 0111 |
0100 0101 |
K1 |
0100 0100 |
0100 0101 |
0101 0011 |
0100 0101 |
N1+K1 mod2 |
0000 0001 |
0000 1011 |
0001 0100 |
0000 0000 |
Второе слово:
N1 |
0101 0010 |
0100 1110 |
0100 0110 |
0100 0101 |
K1 |
0100 0100 |
0100 0101 |
0101 0011 |
0100 0101 |
N1+K1 mod2 |
0001 0110 |
0000 1011 |
0001 0101 |
0000 0000 |
