Реализация базовых операций защиты информации на сигнальных процессорах. Часть 2. Учебное пособие-1
.pdf
3.ЛОГИЧЕСКИЕ МЕХАНИЗМЫ, ИСПОЛЬЗУЕМЫЕ
ВКРИПТОГРАФИЧЕСКИХ АЛГОРИТМАХ
Клогическим механизмам, наиболее часто используемым в криптографических алгоритмах, относятся сеть (машина) Файстеля и SP–сеть подстановок и перестановок (Substitution - Permutation). Эти механизмы строятся на основе таблиц перестановок, таблиц подстановок, сдвиговых и логических операций.
3.1. Сеть Файстеля
Сеть Файстеля выполняет функции перестановок аналогично процессу тасовки игральных карт. Понятие сети Файстеля относится к блочным шифрам, ее функционирование иллюстрируется рис. 3.1.
Рисунок 3.1
Шифруемый блок информации разделяется на две половины - левую L и правую R, над которыми производится N раундов идентичных действий. На каждом раунде над левой половиной блока Li-1 выполняется операция «исключающее ИЛИ» с результатом некоторого функционального преобразования f правой части Ri-1 с использованием подключа ki, являющегося частью общего ключа k. Результат операции «исключающее ИЛИ» занимает позицию правой Ri, а правая часть Ri-1 - левой Li половины блока, преобразуемого на следующем раунде шифрования.
Функциональные преобразования f в разных алгоритмах криптозащиты имеют индивидуальное выражение, реализуемое на табличных, логических и сдвиговых операциях.
21
3.2. SP-сеть
Как и следует из названия, SP-сеть реализует функции блочной подстановки (обычно называемой S-подстановкой) и перестановку порядка следования битов. Идея SP-сети иллюстрируется рис. 3.2.
Рисунок 3.2
Функции S-блоков заключаются в подстановке одной группы бит - выходной вместо другой - входной. Количество бит во входной и выходной группах может быть разным.
22
3.3.Циклические сдвиги
Внекоторых криптографических алгоритмах функции перемешивания и рассеивания усиливаются использованием циклических сдвигов шифруемого текста и/или ключа на каждом раунде шифрования. Циклический сдвиг обеспечивает смену позиции выходного блока, на значение которой отдельный бит исходного сообщения и ключа оказывает влияние на текущем раунде шифрования. Циклическому сдвигу могут подвергаться как информационной блок раунда обработки целиком, так и отдельные части блока.
3.4.Реализация базовых операций
Вреальных криптографических алгоритмах, использующих логические механизмы разрушения внутренних статических связей в шифруемой информации, рассмотренные принципы обычно комбинируются. Так, на рис. 3.3 представлен в виде блок-схемы алгоритм шифрования DES как типичный образец сети Файстеля. Этот алгоритм имеет особое значение с познавательной точки зрения, поскольку включает в себя наиболее широкий спектр возможных базовых операций, его подробное описание можно найти в [1; 3]. Функция шифрования f алгоритма DES, иллюстрируемая рис. 3.4, реализует типовую функцию SP - сети наряду с операцией расширяющей подстановки с использованием ключа. Функция формирования ключа текущего раунда шифрования иллюстрируется рис. 3.5, она использует циклический сдвиг двух половин ключа шифрования на заданное для каждого раунда количество бит.
Циклические сдвиги как самостоятельный механизм рассеивания применяется, например, в рамках алгоритма ГОСТ 28147-89.
Порядок выполнения операций в соответствии с ГОСТ 28147-89 иллюстрируется рис. 3.6, подробное описание этого алгоритма можно найти в [1; 3; 7].
Этот алгоритм также реализует сеть Файстеля, при этом после S –подстановки по таблице замен используется операция циклического сдвига влево на одиннадцать разрядов 32 – разрядной комбинации битов.
23
64 бита открытой информации
Начальная перестановка
|
L0 |
|
|
R0 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
f
K1
|
L1=R0 |
|
|
R1=L0 f(R0,K1) |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
f
K2
|
L2=R1 |
|
|
R2=L1 f(R1,K2) |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
L15=R14 |
|
|
R15=L14 f(R14,K15) |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
f
K16
|
R16=L15 f(R15,K16) |
|
|
L16=R15 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
Обратная перестановка
64 бита закрытой информации
Рисунок 3.3
24
Рисунок 3.4
25
Рисунок 3.5
В качестве примеров реализации на сигнальном процессоре ADSP-2181 интерес представляют три операции – расширяющая подстановка, S-подстановка и циклические сдвиги.
С точки зрения обеспечения максимальной эффективности реализации шифрования функцию формирования ключей текущего раунда обычно целесообразно не вычислять средствами процессора, а записать в память в виде таблицы шестнадцати раундовых ключей по 48 разрядов.
26
Рисунок 3.6
3.4.1. Расширяющая подстановка
Расширяющая подстановка выполняется в соответствии с таблицей 3.1, она реализует функции перестановки и рассеивания таким образом, чтобы каждый бит исходного блока и каждый бит ключа оказывали воздействие на все биты зашифрованного сообщения. Для этого 32-разрядная правая половина шифруемого блока Ri-1 расширяется до 48 разрядов,
повторением бит с номером 1, 32, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21, 24, 25, 28, 4, 29.
Таблица 3.1
32 |
1 |
2 |
3 |
4 |
5 |
4 |
5 |
6 |
7 |
8 |
9 |
|
|
|
|
|
|
|
|
|
|
|
|
8 |
9 |
10 |
11 |
12 |
13 |
12 |
13 |
14 |
15 |
16 |
17 |
|
|
|
|
|
|
|
|
|
|
|
|
16 |
17 |
18 |
19 |
20 |
21 |
20 |
21 |
22 |
23 |
24 |
25 |
|
|
|
|
|
|
|
|
|
|
|
|
24 |
25 |
26 |
27 |
28 |
29 |
28 |
29 |
30 |
31 |
32 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
Биты в таблице 3.1 нумеруются слева направо начиная с первого, т.е. первым (старшим) битом 48 - разрядной комбинации должен быть последний - 32 (младший) - бит Ri-1. Следом за ним должен быть размещен старший (первый) бит Ri-1, и далее 2, 3, 4, 5, 4; 5…
Поскольку объектом перестановок (подстановок) являются биты, реализация расширяющей подстановки целесообразна с использованием
27
битовых операций АЛУ [2; 4; 5; 9]. Битовые операции могут выполняться только под операторами типа хор, поэтому целесообразно 32-разрядную комбинацию Ri-1 разместить в регистрах АХ1 и АХ0, а выходную 48–разрядную комбинацию формировать в регистре AR. Поскольку длина регистра AR составляет 16 разрядов, формирование выходной операции следует проводить в три этапа, при этом по завершении каждого этапа формирования шестнадцати разрядов целесообразно выполнить операцию «исключающее ИЛИ» с цикловым ключом Ki. Ключ Ki на момент выполнения этой операции должен быть расположен в регистре типа уор, например в АУ0. Поскольку выбор ключей из таблицы производится строго в соответствии с номером раунда, целесообразно для обращения к таблице ключей использовать режим косвенной поставтомодифицирующей адресации. Пусть на момент начала работы программы правая 32-разрядная половина Ri-1 шифруемого блока размещена в регистрах АХ1 (левые 16 разрядов Ri) и АХ0 (правые 16 разрядов). Таблица ключей размещена в кольцевом массиве kluch в памяти данных таким образом, что левые 16 разрядов ключа занесены в ячейку с младшим адресом, а правые – в ячейку с более старшим адресом (естественно, старшие 16 разрядов размещены в ячейке между ними). Регистр I3 содержит адрес ячейки с левыми 16 разрядами раундового ключа Ki, а М1=1.
Выходная 48 разрядная комбинация должна быть сформирована в регистрах MR1 (левые 16 разрядов), MR0 (средние), AR(правые).
Пример программы реализации расширяющей подстановки на языке ассемблера процессора ADSP-2181 с необходимыми комментариями приведен на рис. 3.7.
{
доступ к началу таблицы с записью ключа
}
i3 = ^kluch;
l3 = %kluch;
m1 = 1;
{
формирование 16-ти левых (старших) бит
}
Рисунок 3.7 начало
28
{
сначала предполагаем, что все они равны 0, о чем заносим запись в AR
}
ar = pass 0, ay0 = dm(i3,m1);
{
а теперь проверяем, так ли это, и если нет, то прописываем их как единицы
}
af = tstbit 0 of ax0; {проверить бит 32}
if ne ar = setbit 0xf of ar; {если он равен 1,
то установить бит 1=1 } af = tstbit 0xf of ax1; { проверить бит 1}
if ne ar = setbit 0xe of ar; { если он равен 1,
то установить бит 2=1 } af = tstbit 0xe of ax1; { проверить бит 2}
if ne ar = setbit 0xd of ar; { если он равен 1,
то установить бит 3=1 } af = tstbit 0xd of ax1; { проверить бит 3}
if ne ar = setbit 0xc of ar; { если он равен 1,
то установить бит 4=1 } af = tstbit 0xc of ax1; { проверить бит 4}
if ne ar = setbit 0xb of ar; { если он равен 1,
то установить бит 5=1 } if ne ar = setbit 0x9 of ar; { да еще и
установить бит 7=1 } af = tstbit 0xb of ax1; { проверить бит 5}
if ne ar = setbit 0xa of ar; { если он равен 1,
то установить бит 6=1 } if ne ar = setbit 0x8 of ar; { да еще и
установить бит 8=1 } af = tstbit 0xa of ax1; { проверить бит 6}
if ne ar = setbit 0x7 of ar; { если он равен 1,
то установить бит 9=1 } af = tstbit 0x9 of ax1; { проверить бит 7}
if ne ar = setbit 0x6 of ar; { если он равен 1,
то установить бит 10=1 } af = tstbit 0x8 of ax1; { проверить бит 8}
if ne ar = setbit 0x5 of ar; { если он равен 1,
то установить бит 11=1 } if ne ar = setbit 0x3 of ar; { да еще и
установить бит 13=1 } af = tstbit 0x7 of ax1; { проверить бит 9}
Рисунок 3.7 продолжение
29
if ne ar = setbit 0x4 of ar; { если он равен 1,
то установить бит 12=1 } if ne ar = setbit 0x2 of ar; { да еще и
установить бит 14=1 } af = tstbit 0x6 of ax1; { проверить бит 10}
if ne ar = setbit 0x1 of ar; { если он равен 1,
то установить бит 15=1 } af = tstbit 0x5 of ax1; { проверить бит 11}
if ne ar = setbit 0x0 of ar; { если он равен 1,
то установить бит 16=1 }
{
операция «исключающее ИЛИ» с ключом и запись результата в регистр MR1
}
ar = ar xor ay0; mr1 = ar;
{
а дальше аналогично со средними и правыми (младшими) 16-битовыми фрагментами
}
ar = pass 0, ay0 = dm(i3,m1);
Рисунок 3.7 окончание
Аналогичным (и более простым) образом могут быть реализованы все остальные виды таблиц перестановок алгоритма: начальная и обратная (не несущие криптографической нагрузки), а также Р-перестановка и, при необходимости, операции формирования раундовых ключей – начальный выбор, разделение на половины и перестановочный выборки (Compression Permutation).
|
|
3.4.2. S – подстановка |
S – |
подстановка |
реализует функцию сжатия 48-разрядной |
комбинации |
– результата операции «исключающее ИЛИ», |
|
– в 32 – разрядную для дальнейшей Р – перестановки в соответствии с рис. 3.4. Сжатие реализуется разбиением входной комбинации на восемь шестиразрядных гексад и формированием выходной комбинации из восьми четырехразрядных тетрад, каждая из которых определяется параметрической подстановкой из соответствующей таблицы – так называемых ящиков S1…S8.
30
