Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка (НСиНК) - лабораторные работы.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
477.18 Кб
Скачать

Лабораторная работа №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

  1. 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