Лабораторная работа № 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.
- Лабораторная работа № 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
- Библиографический список