logo
Методичка (НСиНК) - лабораторные работы

Лабораторная работа № 4

Кодирование и декодирование информации

в нейромикропроцессоре NeuroMatrix® NM640Х

Цели работы

  1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

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

  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

  1. Замена по таблице

Первое слово:

Входное слово

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

  1. Сдвиг на 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

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

  1. Вторая итерация

Первое слово N1: 4E 45 45 51

Второе слово N1: 51 4E 41 4C

K2: 52 54 5F 53

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

  1. Замена по таблице

Первое слово:

Входное слово

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

  1. Сдвиг на 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

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

  1. Третья итерация

Первое слово 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

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

  1. Замена по таблице

Первое слово:

Входное слово

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

  1. Сдвиг на 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

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