- •Лабораторная работа № 1 Архитектура нейромикропроцессоров семейства NeuroMatrix® nm640х и их функциональные возможности
- •1. Описание и порядок пользования программой nmcalculator
- •1.1. Формирование векторной команды
- •1.2. Разбиение рабочей матрицы и запись весовых коэффициентов
- •1.3. Установка входных значений
- •1.4. Генератор кода
- •2. Порядок выполнения работы
- •Лабораторная работа № 2
- •1. Указания к выполнению работы
- •2. Элементы языка ассемблера процессора nm6403
- •2.1. Формат ассемблерных инструкций
- •2.2. Векторные инструкции процессора
- •2.3. Регистры процессора
- •2.3.1. Основные регистры
- •3. Порядок выполнения работы
- •4. Контрольные вопросы
- •Лабораторная работа № 3
- •2.3. Использование меток в макросах
- •2.4. Импорт макросов из макробиблиотек
- •3. Пример простейшей программы
- •4. Порядок выполнения работы
- •Лабораторная работа № 4
- •1.2. Реализация алгоритма шифрования на процессоре nm6403
- •Практическая часть
- •2.1. Реализация алгоритма гост 28147-89 на нейропроцессоре nm6403/6404
- •2.2. Реализация алгоритма гост 28147-89 на эмуляторе вектора векторных команд
- •2.3. Варианты заданий
- •2.4. Удаленный доступ к плате NeuroMatrix
- •Библиографический список
Лабораторная работа № 4
Кодирование и декодирование информации
в нейромикропроцессоре NeuroMatrix® NM640Х
Цели работы
Научиться работать с эмулятором векторных команд, обеспечивающим написание, отладку и получение генерируемого, компилированного и сохраняемого кодов с контролем реальных аппаратных ресурсов и распределения памяти процессора Л1879ВМ1, Л1879ВМ2 (NM6403/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; схема цикла зашифрования 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 |
Замена по таблице
Первое слово:
|
Входное слово |
0000 0001 |
0000 1011 |
0001 0100 |
0000 0000 |
|
Замена |
1101 0111 |
1010 0100 |
1110 0001 |
1000 1110 |
Второе слово:
|
Входное слово |
0001 0110 |
0000 1011 |
0001 0101 |
0000 0000 |
|
Замена |
1000 1111 |
1010 0100 |
1110 1101 |
1000 1110 |
Сдвиг на 11 разрядов
Первое слово:
|
Входное слово |
1101 0111 |
1010 0100 |
1110 0001 |
1000 1110 |
|
Сдвиг |
0010 0111 |
0000 1100 |
0111 0110 |
1011 1101 |
Второе слово:
|
Входное слово |
1000 1111 |
1010 0100 |
1110 1101 |
1000 1110 |
|
Сдвиг |
0010 0111 |
0110 1100 |
0011 1010 |
0011 1110 |
S+N2 mod 2
Первое слово:
|
S |
0010 0111 |
0000 1100 |
0111 0110 |
1011 1101 |
|
N2 |
0100 1110 |
0100 0101 |
0100 0101 |
0101 0001 |
|
S+N2 mod 2 |
0110 1001 |
0100 1001 |
0011 0011 |
1110 1100 |
Второе слово:
|
S |
0010 0111 |
0110 1100 |
0011 1010 |
0011 1110 |
|
N2 |
0101 0001 |
0100 1110 |
0100 0001 |
0100 1100 |
|
S+N2 mod 2 |
0111 0110 |
0010 0010 |
0111 1011 |
0111 0010 |
Вторая итерация
Первое слово N1: 4E 45 45 51
Второе слово N1: 51 4E 41 4C
K2: 52 54 5F 53
N1+K1 mod 2
Первое слово:
|
N1 |
0100 1110 |
0100 0101 |
0100 0101 |
0101 0001 |
|
K1 |
0101 0010 |
0101 0100 |
0101 1111 |
0101 0011 |
|
N1+K1 mod2 |
0001 1100 |
0001 0001 |
0001 1010 |
0000 0010 |
Второе слово:
|
N1 |
0101 0010 |
0100 1110 |
0100 0110 |
0100 0101 |
|
K1 |
0101 0010 |
0101 0100 |
0101 1111 |
0101 0011 |
|
N1+K1 mod2 |
0000 0000 |
0001 1010 |
0001 1001 |
0001 0110 |
Замена по таблице
Первое слово:
|
Входное слово |
0001 1100 |
0001 0001 |
0001 1010 |
0000 0010 |
|
Замена |
1000 1010 |
1011 1101 |
1110 1100 |
1000 1111 |
Второе слово:
|
Входное слово |
0000 0000 |
0001 1010 |
0001 1001 |
0001 0110 |
|
Замена |
1101 0100 |
1011 1001 |
1110 0111 |
1111 1011 |
Сдвиг на 11 разрядов
Первое слово:
|
Входное слово |
1000 1010 |
1011 1101 |
1110 1100 |
1000 1111 |
|
Сдвиг |
1110 1111 |
0110 0100 |
0111 1100 |
0010 0101 |
Второе слово:
|
Входное слово |
1101 0100 |
1011 1001 |
1110 0111 |
1111 1011 |
|
Сдвиг |
1100 1111 |
0011 1111 |
1101 1110 |
1010 0101 |
S+N2 mod 2
Первое слово:
|
S |
1110 1111 |
0110 0100 |
0111 1100 |
0010 0101 |
|
N2 |
0110 1001 |
0100 1001 |
0011 0011 |
1110 1100 |
|
S+N2 mod 2 |
1000 0110 |
0010 1101 |
0100 1111 |
1100 1001 |
Второе слово:
|
S |
1100 1111 |
0011 1111 |
1101 1110 |
1010 0101 |
|
N2 |
0111 0110 |
0010 0010 |
0111 1011 |
0111 0010 |
|
S+N2 mod 2 |
1011 1001 |
0001 1101 |
1010 0101 |
1101 0111 |
Третья итерация
Первое слово N1: 69 49 33 EC
N2: 86 2D 4F C9
Второе слово N1: 76 22 7B 72
N2: B9 1D A5 D7
K3: 54 4F 52 4D
N1+K1 mod 2
Первое слово:
|
N1 |
0110 1001 |
0100 1001 |
0011 0011 |
1110 1100 |
|
K1 |
0101 0100 |
0100 1111 |
0101 0010 |
0100 1101 |
|
N1+K1 mod2 |
0011 1101 |
0000 0110 |
0110 0001 |
1010 0001 |
Второе слово:
|
N1 |
0111 0110 |
0010 0010 |
0111 1011 |
0111 0010 |
|
K1 |
0101 0100 |
0100 1111 |
0101 0010 |
0100 1101 |
|
N1+K1 mod2 |
0010 0010 |
0110 1101 |
0010 1001 |
0011 1111 |
Замена по таблице
Первое слово:
|
Входное слово |
0011 1101 |
0000 0110 |
0110 0001 |
1010 0001 |
|
Замена |
1010 1001 |
1010 1100 |
0000 0100 |
1110 1001 |
Второе слово:
|
Входное слово |
0010 0010 |
0110 1101 |
0010 1001 |
0011 1111 |
|
Замена |
0101 1000 |
0011 0001 |
1100 0111 |
0110 0010 |
Сдвиг на 11 разрядов
Первое слово:
|
Входное слово |
1010 1001 |
1010 1100 |
0000 0100 |
1110 1001 |
|
Сдвиг |
0110 0000 |
0010 0111 |
0100 1101 |
0100 1101 |
Второе слово:
|
Входное слово |
0101 1000 |
0011 0001 |
1100 0111 |
0110 0010 |
|
Сдвиг |
1000 1110 |
0011 1011 |
0001 0010 |
1100 0001 |
S+N2 mod 2
Первое слово:
|
S |
0110 0000 |
0010 0111 |
0100 1101 |
0100 1101 |
|
N2 |
1000 0110 |
0010 1101 |
0100 1111 |
1100 1001 |
|
S+N2 mod 2 |
1110 0110 |
0000 1010 |
0000 0010 |
1000 0100 |
Второе слово:
|
S |
0101 1000 |
0011 0001 |
1100 0111 |
0110 0010 |
|
N2 |
1011 1001 |
0001 1101 |
1010 0101 |
1101 0111 |
|
S+N2 mod 2 |
1110 0001 |
0010 1100 |
0110 0010 |
1011 0101 |
Результат: первое слово 86 2D 4F C9 D6 0A 02 84;
второе слово B9 1D A5 D7 71 2C 62 B5.
