Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Реализация базовых операций защиты информации на сигнальных процессорах. Часть 2. Учебное пособие-1

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
993 Кб
Скачать

Обозначим символы любой из полученных после разбиения восьми гексад как 1 2 3 4 5 6. Крайние биты каждой гексады, т.е. 1 6, могут принимать четыре значения, а средние ( 2 3 4 5) – 16. Крайние биты играют роль параметра, задающего номер строки, а средние определяют номер столбца в таблице подстановок S1..S8 (S-box Substitution). Определенные стандартом таблицы подстановок S1..S8 приведены в таблицах 3.2 – 3.9 в шестнадцатеричной системе счисления.

 

S1

 

 

 

 

 

 

 

 

 

 

 

Таблица 3.2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Е

4

 

D

1

2

F

B

8

3

A

6

C

5

9

0

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

F

 

7

4

E

2

D

1

A

6

C

B

9

5

3

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

1

 

E

8

D

6

2

B

F

C

9

7

3

A

5

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

C

 

8

2

4

9

1

7

5

B

3

E

A

0

6

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S2

 

 

 

 

 

 

 

 

 

 

 

Таблица 3.3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

1

 

8

E

6

B

3

4

9

7

2

D

C

0

5

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

D

 

4

7

F

2

8

E

C

0

1

A

6

9

B

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

E

 

7

B

A

4

D

1

5

8

C

6

9

3

2

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

8

 

A

1

3

F

4

2

B

6

7

C

0

5

E

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S3

 

 

 

 

 

 

 

 

 

 

 

Таблица 3.4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

0

 

9

E

6

3

F

5

1

D

C

7

B

4

2

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

7

 

0

9

3

4

6

A

2

8

5

E

C

B

F

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

6

 

4

9

8

F

3

0

B

1

2

C

5

A

E

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

A

D

0

6

9

8

7

4

F

E

3

B

5

2

C

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S4

 

 

 

 

 

 

 

 

 

 

 

Таблица 3.5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

D

E

3

0

6

9

A

1

2

8

5

B

C

4

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

8

 

B

5

6

F

0

3

4

7

2

C

1

A

E

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

6

 

9

0

C

B

7

D

F

1

3

E

5

2

8

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

F

 

0

6

A

1

D

8

9

4

5

B

C

7

2

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S5

 

 

 

 

 

 

 

 

 

 

 

Таблица 3.6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

C

 

4

1

7

A

B

6

8

5

3

F

D

0

E

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

E

B

 

2

C

4

7

D

1

5

0

F

A

3

9

8

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

2

 

1

B

A

D

7

8

F

9

C

5

6

3

0

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B

8

 

C

7

1

E

2

D

6

F

0

9

A

4

5

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

31

 

S6

 

 

 

 

 

 

 

 

 

 

 

Таблица 3.7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

1

 

A

F

9

2

6

8

0

D

3

4

E

7

5

B

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

F

 

4

2

7

C

9

5

6

1

D

E

0

B

3

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

E

 

F

5

2

8

C

3

7

0

4

A

1

D

B

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

3

 

2

C

9

5

F

A

B

E

1

7

6

0

8

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S7

 

 

 

 

 

 

 

 

 

 

 

Таблица 3.8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

B

 

2

E

F

0

8

D

3

C

9

7

5

A

6

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

0

 

B

7

4

9

1

A

E

3

5

C

2

F

8

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

4

 

B

D

C

3

7

E

A

F

6

8

0

5

9

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

B

D

8

1

4

A

7

9

5

0

F

E

2

3

C

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S8

 

 

 

 

 

 

 

 

 

 

 

Таблица 3.9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

2

 

8

4

6

F

B

1

A

9

3

E

5

0

C

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

F

D

8

A

3

7

4

C

5

6

B

0

E

9

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

B

 

4

1

9

C

E

2

0

6

A

D

F

3

5

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

1

 

E

7

4

A

8

D

F

C

9

0

3

6

5

B

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пусть, например, первая гексада имеет в двоичной системе счисления вид: 1101112. Средние символы 10112 в десятичной записи изображают число 11 – номер столбца таблицы, а крайние символы представляют число 3 – номер строки таблицы (напоминаем, что нумерация строк и столбцов начинается с нуля!). На их пересечении в таблице S1 находится число Е, двоичная запись которого есть 11102. Таким образом, после подстановки вместо первой гексады используется тетрада 1110.

Наиболее естественной реализацией S – подстановок является представление ящиков S1…S8 как элементов памяти с организацией 26*4 бита. Такие ящики могут быть программно организованы как массивы (на всякий случай кольцевые) размером 64 ячейки памяти.

Для обеспечения возможности линейного доступа к элементам при записи в ячейки массив таблицы подстановок должны быть перестроены под линейный порядок следования адресов. В качестве примера в таблице 3.10 рассмотрено перестроение таблицы S1, при этом строки нумеруются от 0 до 3, а столбцы – от 0 до 15. Поскольку таблицы S – подстановок внесены в стандарт DES и не подлежат изменению, целесообразно их размещение в загрузочном кристалле процессора и запись в память данных с помощью псевдоинструкции ассемблера .init в соответствии с программой рис. 3.8.

32

Таблица 3.10

 

линейный порядок

 

 

номер строки

 

 

 

номер столбца

 

 

эл-т S

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

2

3

4

5

6

1

 

6

 

 

2

3

 

4

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

0

0

0

0

 

0

=

0

0

0

 

0

0

=

0

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

0

0

1

0

 

1

=

1

0

0

 

0

0

=

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

0

1

0

0

 

0

=

0

0

0

 

0

1

=

1

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

0

1

1

0

 

1

=

1

0

0

 

0

1

=

1

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

1

0

0

0

 

0

=

0

0

0

 

1

0

=

2

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

1

0

1

0

 

1

=

1

0

0

 

1

0

=

2

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

1

1

0

0

 

0

=

0

0

0

 

1

1

=

3

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

1

1

1

0

 

1

=

1

0

0

 

1

1

=

3

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

1

0

0

0

0

 

0

=

0

0

1

 

0

0

=

4

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

.

.

.

.

.

.

 

.

.

.

.

.

 

.

.

.

.

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

1

0

1

0

1

 

0

=

2

1

1

 

0

1

= 13

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

1

0

1

1

1

 

1

=

3

1

1

 

0

1

= 13

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

1

1

0

0

1

 

0

=

2

1

1

 

1

0

= 14

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

1

1

0

1

1

 

1

=

3

1

1

 

1

0

= 14

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

1

1

1

0

1

 

0

=

2

1

1

 

1

1

= 15

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

1

1

1

1

1

 

1

=

3

1

1

 

1

1

= 15

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

При организации линейного порядка обращения к элементам S – таблиц разбиение входного блока на гексады может быть выполнено в сдвигателе, а само обращение - с использованием режима косвенной поставтомодифицирующей адресации. Для хранения промежуточных результатов – выходных комбинаций подстановок S1…S8 – целесообразно использовать буфер buf_int на 8 ячеек памяти. Рассмотрим далее пример реализации S - подстановки на базе процессора ADSP-2181 в виде программы на языке ассемблера. Пусть на момент начала работы программы входная 48-разрядная входная комбинация S – подстановки размещена в регистрах MR1, MR0 и AR (в соответствии с результатом ранее рассмотренного примера реализации расширяющей подстановки). Согласно алгоритму DES, эта комбинация должна быть разбита на гексады в соответствии с рис. 3.4 для адресации каждого из массивов S1…S8, причем границы двух гексад будут размещены в разных регистрах исходной комбинации. Для адресации массивов S1…S8 используются регистры I2 и М2, запись/чтение промежуточных данных – выходных комбинаций S1…S8 – в/из буфера buf_int осуществляется под управлением регистра I1.

Выходная 32разрядная комбинация должна быть сформирована в регистрах SR1 (левая часть) и SR0 (правая).

Текст программы на языке ассемблера процессора ADSP-2181 представлен на рис. 3.8 с необходимыми комментариями.

33

{**********************************************************

Этот кусок следует разместить вначале в основной программе

----------------------------------------------------------

 

 

 

 

 

 

 

}

.var/dm/circ

buf_int[8];

 

 

 

 

{

 

 

 

 

 

 

 

 

Инициализация S - ящиков

 

 

 

 

}

 

 

 

 

 

 

 

 

.var/dm

s1[64];

 

 

 

 

 

 

.init

s1:

0xe, 0x0, 0x4, 0xf, 0xd, 0x7, 0x1, 0x4,

 

0x2, 0xe, 0xf, 0x2, 0xb, 0xd, 0x8, 0x1,

 

0x3, 0xa, 0xa, 0x6, 0x6, 0xc, 0xc, 0xb,

 

0x5,

0x9,

0x9,

0x5,

0x0,

0x3,

0x7,

0x8,

 

0x4, 0xf, 0x1, 0xc, 0xe, 0x8, 0x8, 0x2,

 

0xd, 0x4, 0x6, 0x9, 0x2, 0x1, 0xb, 0x7,

 

0xf, 0x5, 0xc, 0xb, 0x9, 0x3, 0x7, 0xe,

 

0x3, 0xa, 0xa, 0x0, 0x5, 0x6, 0x0, 0xd;

.var/dm

s2[64];

 

 

 

 

 

 

.init

s2:

0xf, 0x3, 0x1, 0xd, 0x8, 0x4, 0xe, 0x7,

 

0x6, 0xf, 0xb, 0x2, 0x3, 0x8, 0x4, 0xe,

 

0x9, 0xc, 0x7, 0x0, 0x2, 0x1, 0xd, 0xa,

 

0xc, 0x6, 0x0, 0x9, 0x5, 0xb, 0xa, 0x5,

 

0x0, 0xd, 0xe, 0x8, 0x7, 0xa, 0xb, 0x1,

 

0xa, 0x3, 0x4, 0xf, 0xd, 0x4, 0x1, 0x2,

 

0x5, 0xb, 0x8, 0x6, 0xc, 0x7, 0x6, 0xc,

 

0x9, 0x0, 0x3, 0x5, 0x2, 0xe, 0xf, 0x9;

.var/dm

s3[64];

 

 

 

 

 

 

.init

s3:

0xa, 0xd, 0x0, 0x7, 0x9, 0x0, 0xe, 0x9,

0x6, 0x3, 0x3, 0x4, 0xf, 0x6, 0x5, 0xa, 0x1, 0x2, 0xd, 0x8, 0xc, 0x5, 0x7, 0xe, 0xb, 0xc, 0x4, 0xb, 0x2, 0xf, 0x8, 0x1, 0xd, 0x1, 0x6, 0xa, 0x4, 0xd, 0x9, 0x0, 0x8, 0x6, 0xf, 0x9, 0x3, 0x8, 0x0, 0x7, 0xb, 0x4, 0x1, 0xf, 0x2, 0xe, 0xc, 0x3, 0x5, 0xb, 0xa, 0x5, 0xe, 0x2, 0x7, 0xc;

Рисунок 3.8 начало

34

.var/dm

s4[64];

 

 

 

 

 

 

.init

s4:

0x7, 0xd, 0xd, 0x8, 0xe, 0xb, 0x3, 0x5,

 

0x0, 0x6, 0x6, 0xf, 0x9, 0x0, 0xa, 0x3,

 

0x1,

0x4,

0x2,

0x7,

0x8,

0x2,

0x5,

0xc,

 

0xb, 0x1, 0xc, 0xa, 0x4, 0xe, 0xf, 0x9,

 

0xa, 0x3, 0x6, 0xf, 0x9, 0x0, 0x0, 0x6,

 

0xc, 0xa, 0xb, 0x1, 0x7, 0xd, 0xd, 0x8,

 

0xf, 0x9, 0x1, 0x4, 0x3, 0x5, 0xe, 0xb,

 

0x5, 0xc, 0x2, 0x7, 0x8, 0x2, 0x4, 0xe;

.var/dm

s5[64];

 

 

 

 

 

 

.init

s5:

0x2, 0xe, 0xc, 0xb, 0x4, 0x2, 0x1, 0xc,

 

0x7, 0x4, 0xa, 0x7, 0xb, 0xd, 0x6, 0x1,

 

0x8, 0x5, 0x5, 0x0, 0x3, 0xf, 0xf, 0xa,

 

0xd, 0x3, 0x0, 0x9, 0xe, 0x8, 0x9, 0x6,

 

0x4, 0xb, 0x2, 0x8, 0x1, 0xc, 0xb, 0x7,

 

0xa, 0x1, 0xd, 0xe, 0x7, 0x2, 0x8, 0xd,

 

0xf, 0x6, 0x9, 0xf, 0xc, 0x0, 0x5, 0x9,

 

0x6, 0xa, 0x3, 0x4, 0x0, 0x5, 0xe, 0x3;

.var/dm

s6[64];

 

 

 

 

 

 

.init

s6:

0xc, 0xa, 0x1, 0xf, 0xa, 0x4, 0xf, 0x2,

 

0x9, 0x7, 0x2, 0xc, 0x6, 0x9, 0x8, 0x5,

 

0x0, 0x6, 0xd, 0x1, 0x3, 0xd, 0x4, 0xe,

 

0xe, 0x0, 0x7, 0xb, 0x5, 0x3, 0xb, 0x8,

 

0x9, 0x4, 0xe, 0x3, 0xf, 0x2, 0x5, 0xc,

 

0x2, 0x9, 0x8, 0x5, 0xc, 0xf, 0x3, 0xa,

 

0x7, 0xb, 0x0, 0xe, 0x4, 0x1, 0xa, 0x7,

 

0x1, 0x6, 0xd, 0x0, 0xb, 0x8, 0x6, 0xd;

.var/dm

s7[64];

 

 

 

 

 

 

.init

s7:

0x4, 0xd, 0xb, 0x0, 0x2, 0xb, 0xe, 0x7,

 

0xf, 0x4, 0x0, 0x9, 0x8, 0x1, 0xd, 0xa,

 

0x3, 0xe, 0xc, 0x3, 0x9, 0x5, 0x7, 0xc,

0x5, 0x2, 0xa, 0xf, 0x6, 0x8, 0x1, 0x6, 0x1, 0x6, 0x4, 0xb, 0xb, 0xd, 0xd, 0x8, 0xc, 0x1, 0x3, 0x4, 0x7, 0xa, 0xe, 0x7, 0xa, 0x9, 0xf, 0x5, 0x6, 0x0, 0x8, 0xf, 0x0, 0xe, 0x5, 0x2, 0x9, 0x3, 0x2, 0xc;

Рисунок 3.8 продолжение

35

.var/dm

s8[64];

 

 

 

 

 

 

.init

s8:

0xd, 0x1, 0x2, 0xf, 0x8, 0xd, 0x4, 0x8,

 

0x6, 0xa, 0xf, 0x3, 0xb, 0x7, 0x1, 0x4,

 

0xa, 0xc, 0x9, 0x5, 0x3, 0x6, 0xe, 0xb,

 

0x5, 0x0, 0x0, 0xe, 0xc, 0x9, 0x7, 0x2,

 

0x7, 0x2, 0xb, 0x1, 0x4, 0xe, 0x1, 0x7,

 

0x9, 0x4, 0xc, 0xa, 0xe, 0x8, 0x2, 0xd,

 

0x0, 0xf, 0x6, 0xc, 0xa, 0x9, 0xd, 0x0,

 

0xf,

0x3,

0x3,

0x6,

0x5,

0x5,

0x8,

0xb;

{----------------------------------------------------

*******************************************************}

{######################################################

А это уже программа S – подстановок

#######################################################}

{

Извлечение восьми гексад из содержимого регистров MR1, MR0 и AR и запись их в ячейки буфера buf_int для дальнейшего использования как адресов обращения к ящикам S1..S8.

______________________________________________________

установка указателя I1 на начало буфера промежуточных результатов buf_int:

}

i1 = ^buf_int; l1 = %buf_int; m1 = 1;

{

правая гексада – адрес обращения к ящику S8 – извлечение из младших разрядов регистра AR, обнуление старших разрядов и запись в буфер промежуточных результатов

}

sr = lshift ar by 10 (lo); sr = lshift sr0 by -10 (lo); dm(i1,m1) = sr0;

Рисунок 3.8 продолжение

36

{

следующая гексада - адрес обращения

к ящику S7 - обнуление старших разрядов, позиционирование по месту младших разрядов и запись в буфер промежуточных результатов

}

 

sr = lshift

ar by 4 (lo);

sr = lshift

sr0 by -10 (lo);

dm(i1,m1) =

sr0;

{

 

формирование следующей гексады - адреса обращения к ящику S6 - из 2-х младших разрядов регистра MR0 и 4-х старших регистра AR

и запись в буфер промежуточных результатов

}

 

 

sr = lshift

mr0 by

14 (lo);

sr = lshift

sr0 by

-10 (lo);

sr = sr or lshift ar by -12 (lo);

dm(i1,m1) =

sr0;

 

{

 

 

Дальнейшие действия аналогичны

}

 

 

sr = lshift

mr0 by

8 (lo);

sr = lshift

sr0 by

-10 (lo);

dm(i1,m1) =

sr0;

 

sr = lshift

mr0 by

2 (lo);

sr = lshift

sr0 by

-10 (lo);

dm(i1,m1) =

sr0;

 

sr = lshift

mr1 by

12 (lo);

sr = lshift

sr0 by

-10 (lo);

sr = sr or lshift mr0 by -14 (lo);

dm(i1,m1) =

sr0;

 

sr = lshift

mr1 by

6 (lo);

sr = lshift

sr0 by

-10 (lo);

dm(i1,m1) =

sr0;

 

sr = lshift

mr1 by

-10 (lo);

dm(i1,m1) =

sr0;

 

Рисунок 3.8 продолжение

37

{

_______________________________________________________

Формирование выходной комбинации S - подстановки

врегистрах SR1 SR0

}

l2 = 0;

{

извлечение правой гексады из буфера buf_int, использование ее как адреса обращения к ящику S8

врежиме косвенной поставтомодифицирующей адресации через регистр I2,

извлечение из ящика S8 соответствующей тетрады

и запись ее по месту младших разрядов в регистр SR0

}

i2 = ^s8;

si = dm(i1,m1); m2 = si; modify(i2,m2); sr0 = dm(i2,m1);

{

аналогичное обращение к ящикам S7..S1 и формирование выходной комбинации

врегистрах SR1 SR0

}

i2 = ^s7;

si = dm(i1,m1); m2 = si; modify(i2,m2); si = dm(i2,m1);

sr = sr or lshift si by 4 (lo); i2 = ^s6;

si = dm(i1,m1); m2 = si; modify(i2,m2); si = dm(i2,m1);

sr = sr or lshift si by 8 (lo); i2 = ^s5;

si = dm(i1,m1); m2 = si; modify(i2,m2); si = dm(i2,m1);

sr = sr or lshift si by 12 (lo); i2 = ^s4;

Рисунок 3.8 продолжение

38

si = dm(i1,m1); m2 = si; modify(i2,m2); si = dm(i2,m1);

sr = sr or lshift si by 16 (lo); i2 = ^s3;

si = dm(i1,m1); m2 = si; modify(i2,m2); si = dm(i2,m1);

sr = sr or lshift si by 20 (lo); i2 = ^s2;

si = dm(i1,m1); m2 = si; modify(i2,m2); si = dm(i2,m1);

sr = sr or lshift si by 24 (lo); i2 = ^s1;

si = dm(i1,m1); m2 = si; modify(i2,m2); si = dm(i2,m1);

sr = sr or lshift si by 28 (lo);

Рисунок 3.8 окончание

3.4.3. Операции циклических сдвигов

Операция рассмотренного ранее циклического сдвига влево на 11 разрядов, используемая в рамках криптографического алгоритма ГОСТ 28147–89, выполняется достаточно тривиально с помощью сдвигателя.

Пусть на момент начала работы программы сдвига комбинация размещена в регистрах MR1(левая часть) и MR0(правая).

В результате выполнения трех команд:

sr = lshift mr0 by 11 (lo);

sr = sr or lshift mr1 by 11 (hi); sr = sr or lshift mr1 by -5 (lo);

результат сдвига будет записан в регистры SR1(левая часть) и SR0(правая).

39

СПИСОК ЛИТЕРАТУРЫ

1.Schneier B. Applied Cryptography, second edition: protocols, algorithms, and source code in C (cloth) // J. Wiley & Sons, INC. New York, 1996.

2.ASDP-2100 Family user's manual. Third edition. Analog Devices, inc. Norwood, MA, 1995.

3.Шаврин С.С. Защита информации в многоканальных телекоммуникационных системах. Ч. 1. Защищенные системы связи: Учебное пособие / МТУСИ. - М., 2003.

4.ADSP-2100 Family Assembler tools & simulator manual. Analog Devices, inc. Norwood, MA, 1994.

5.Digital signal processing applications using the ADSP-2100 Family. Volume 1. Prentice Hall, Englewood Cliffs, NJ 07632.

6.NIST SP 800-131A, "Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths", Jan 2011.

7.RFC 4357. Additional Cryptographic Algorithms for Use with GOST 28147-89, GOST R 34.10-94, GOST R 34.10-2001, and GOST R 34.11-94 Algorithms. 2006.

8.Jaffe, J., Cassotta, L., and Feldstein, S. Markovian model of time patterns of speech. Science (New Series) 144, 3620 (May 1964), 884–886. doi:10.1126/science.144.3620.884.

9.Шаврин С.С., Климов Д.А. Реализация базовых операций защиты информации на сигнальных процессорах. Ч.1: Учебное пособие /

МТУСИ. – М., 2012.

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]