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

Математические основы криптологии и криптографические методы и средс

..pdf
Скачиваний:
49
Добавлен:
15.11.2022
Размер:
14.26 Mб
Скачать

сто брать фрагменты ключа, как это делается в отечественном стан­ дарте шифрования. Можно вырабатывать ключевые элементы с по­ мощью генератора псевдослучайных чисел. Здесь спектр возможных решений чрезвычайно широк - от сравнительно несложных схем вы­ работки гаммы на основе сдвиговых регистров с обратной связью до генерации последовательности элементов с помощью того же самого криптоалгоритма. Последний подход реализован, например, в шифре BLOWFISH. Конечно, он значительно увеличивает стойкость шифра, но и существенно затрудняет его эффективную реализацию. Напри­ мер, в упомянутом шифре BLOWFISH построение массива ключе­ вых элементов вычислительно эквивалентно выполнению более 500 циклов шифрования, что делает его непригодным для реального практического использования всюду, за исключением систем, в ко­ торых смена ключа происходит достаточно редко и объемы массивов, шифруемых на одном ключе, велики.

Наконец, требование компактности реализации алгоритма с точки зрения кода и используемых постоянных данных приводит к идеологии его построения из одинаковых групп преобразований, по­ вторенных нужное число раз. В этом случае реализация алгоритма работает итеративно - результат каждой итерации, за исключением последней, является входом для следующей итерации. Кроме того, очевидно, что каждая повторяющаяся группа преобразований, из ко­ торых построен криптоалгоритм, должна удовлетворять рассмотрен­ ному выше требованию антисимметричности прямого и обратного криптопреобразований, которое в данном случае должно выполнять­ ся на уровне отдельных групп.

Требование компактности вспомогательных массивов данных можно выполнить, используя на разных итерациях преобразования один и тот же комплект векторов замен.

Таким образом, мы рассмотрели базовые требования, в соответ­ ствии с которыми строятся современные шифры:

построение шифров из простых преобразований - перестано­ вок, подстановок, элементарных функциональных операций и чередование операций различного типа;

циклическая, итеративная структура алгоритма - одна итера­ ция состоит из нескольких простых преобразований, итера­ ции отличаются друг от друга только использованными клю­ чевыми элементами;

антисимметричная структура алгоритма, позволяющая дос­ тичь структурной эквивалентности процедур за- и расшиф­ рования, они отличаются друг от друга только последова­ тельностью использования ключевых элементов;

♦ использование ключа относительно небольшого размера и выработка из него массива ключевых элементов для шагов преобразования с помощью процедуры «развертывания» ключа.

Комбинированием простых шифрующих преобразований в линей­ ную цепочку можно создать вполне надежный составной шифр. Одна­ ко для достижения приемлемой стойкости такого шифра потребовалось бы использовать весьма большое количество элементарных преобразо­ ваний. Эта схема построения криптографических алгоритмов не полу­ чила сколько-нибудь заметного распространения, потому что была предложена другая схема, имеющая лучшие показатели сложности/трудоемкости преобразования. Более высокая эффективность дос­ тигается в ней использованием следующего общего принципа:

Если есть система обработки данных, составленная из от­ носительно простых блоков преобразований, то в общем случае ее сложность намного выше, если структура этой системы от­ лична от линейной и содержит ветвления и циклы.

В алгоритме с сильно разветвленной структурой разобраться намного сложнее, чем в линейном алгоритме. Другой пример, из тео­ рии автоматического регулирования: системы преобразования анало­ гового сигнала, содержащие петли обратной связи и параллельные ветви, на порядок сложнее анализировать, чем цепи, составленные из тех же самых динамических звеньев, но имеющие линейную струк­ туру. Таким образом, усложнить шифрующее преобразование при фиксированном количестве элементарных шагов можно, если сде­ лать его структуру нелинейной.

Ключевые данные могут комбинироваться с шифруемыми дан­ ными в преобразованиях двух типов: заменах и функциональных операциях. Оказывается, что второй способ использования ключевой информации предпочтительнее. Вместо того, чтобы делить входы вектора замены между блоком шифруемых данных и ключевым эле­ ментом, оказалось выгоднее скомбинировать данные с ключом по­ средством подходящей бинарной операции, а затем подвергнуть ре­ зультат замене. Предположим, например, что мы преобразуем 32-битовый блок данных, используя 32-битовый ключ и несколько узлов замены с 4-битовым входом. Если использовать для комбини­ рования ключа и данных узлы замены, то нам необходимо будет ис­ пользовать 16 узлов замены 4 бита на 2 бита, на вход каждого узла замены будут подаваться 2 бита шифруемых данных и 2 бита ключа. При этом каждый выходной бит такого узла будет зависеть ровно от 2 битов данных и от 2 битов ключа. Если же мы подвергнем преобра­ зованию замены побитовую сумму по модулю 2 ключа с данными, то нам необходимо будет использовать 8 узлов замены 4 бита на 4 бита, и каждый выходной бит узла замен будет зависеть уже от 4 битов

ключа и от 4 битов данных. Тем самым в этом пре­

 

 

Т,

образовании может быть достигнута большая сте­

 

 

 

 

Г

пень перемешивания и рассеивания.

 

о

 

<Ki

В результате сказанного выше в практических

 

 

 

шифрах для комбинирования шифруемых данных

 

 

 

и ключа почти повсеместно используются бинар­

 

1'Ч+1

ные операции аддитивного и, значительно реже,

Рис. 25. Комби­

мультипликативного типа.

нирование клю­

Рассмотрим указанную процедуру, соответст­

чевого

элемен­

вующий блок преобразования показан на рис. 25:

та с

данными

В этом случае преобразование осуществляется

с

использовани­

по следующему уравнению:

ем бинарной опе­

 

рации « \[»

Ti + 1 = Tt [К ,

 

 

 

 

Бинарная операция « р>, использованная для

модификации

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

ратная ей операция «•», такая, что для любых блоков данных Т и К допустимого размера должно выполняться следующее условие:

 

 

|[-А) К = Т.

 

 

 

Ti

 

Сложность

преобразования

 

Ki

существенно повысится, если ком­

 

A W

 

бинировать с данными не непо­

 

 

 

 

 

 

средственно ключевой код, а код,

 

 

 

выработанный из ключа и завися­

I r

т.

 

щий от данных,

как

показано на

;+1

 

рис. 26:

 

 

Рис. 24. Шифрующее пре­

 

 

 

 

В этом случае преобразование

образование блока данных

с использованием кода,

 

осуществляется

по

следующему

выработанного из ключе­

 

уравнению:

 

 

вого элемента К , и шиф­

 

Ti+l = T, 1КДВД.

 

руемого блока Ti

 

 

 

 

 

 

На самом деле понятно, что с математической точки зрения данная запись мало отличается от наи­ более общей формы записи преобразования:

7} +1 = д а д , (*), однако в отличие от последней она содержит некоторые указания на

возможный способ своей реализации. Ее важная особенность заклю­ чается в том, что от функции преобразования f из первого уравнения уже не требуется обратимость, как от функции F из уравнения (*), от нее требуется только как можно большая сложность плюс выполне­ ние некоторых дополнительных условий, которые в сильно упро­ щенном виде могут быть сформулированы как отсутствие потерь информации при ее вычислении. Дело в том, что при создании шиф­ рующего преобразования общего вида бывает необходимо прими­ рить два противоречащих друг другу требования:

преобразование должно быть обратимым - иначе расшифро­ вание будет невозможным;

преобразование должно быть достаточно сложным и нели­ нейным - в противном случае оно не может претендовать на то, чтобы являться подлинно шифрующим преобразованием.

По**ятно>почему указанные требования противоречат друг дру­ гу - выполнение обратного преобразования есть не что иное, как ре­ шение уравнения прямого преобразования относительно одного из его аргументов, однако если это уравнение нелинейное, то нс суще­ ствует общих методов его решения.

Обратимость изображенного на рис. 27 преобразования означает, что должна существовать эффективно вычислимая функция g{Ti + 1,Кд> обладающая следующим свойством:

Л З Д ) =£т, +а д

||- л а д ,а ,) (**)

для любых допустимых блоков данных Tj и К,. В этом случае обратное преобразова­ ние будет иметь вид, изображенный на рис. 27:

Обратное преобразование выполня­ ется в соответствии со следующим урав­ нением:

7,- = 7,-+ 1 -5(7,-+ 1Д/).

Рис. 27.Обращение шифрующего

В общем

случае сконструировать

преобразования

пару функций

преобразования ( f и g),

 

удовлетворяющих уравнению (**) и являющихся при этом сложны­ ми и нелинейными, достаточно трудно. Тем не менее это возможно, если «отделить» требование сложности функций/и g от требования выполнения условия (**). Это легко можно сделать, если использо­ вать операцию « |(-» модификации шифруемого блока, которая остав­ ляет неизменным значение некоторой функции от преобразуемого блока данных:

7 = J{Ti) = J(Ti |(-Г,) = 7(7,- + 1)

для любых блоков данных 7}, Г,- подходящего размера. Понятно, что в этом случае и обратная ей операция «•» также обладает указанным свойством:

Ъ = А Ъ + 1 ) = 1(Т,+ 1 Г,) = 7(7}).

В случае построения шифрующего преобразования по указан­ ному принципу прямое и обратное преобразования будут иметь структуру, изображенную на следующем ниже рис. 28:

Рис. 28. Стандартные шифрующие преобразования: прямое (слева) и обратное (справа)

Для определенности будем называть подобное преобразование

стандартным шифрующим преобразованием или стандартным шагом шифрования, а архитектуру шифров, ими задаваемую, стан­ дартной или базовой архитектурой шифров. Их использование позволяет разделить очень сложную в общем случае задачу создания преобразования, обладающего одновременно высокой сложностью и нелинейностью, с одной стороны, и являющегося при этом обрати­ мым, с другой стороны, на две решаемые независимо друг от друга подзадачи:

создание функции преобразования данных, обладающей вы­ сокой сложностью и нелинейностью;

создание схемы преобразования, использующей заданную функцию преобразования и при этом обратимой независимо от примененной функции.

Функция J{Ti), используемая для выделения инвариантного от­ носительно преобразования блока данных как из самого преобразуе­ мого блока, так и из результата его преобразования, называется ин­ вариантом стандартного шифрующего преобразования или инва­ риантом стандартного шага шифрования, а функция Д/„АГ,), предназначенная для выработки блока данных, используемого для модификации шифруемого блока, из инварианта /,• и ключевого эле­ мента Ки называется функцией шифрования шага преобразования.

Сам шаг шифрования в шифрах, построенных в соответствии с из­ ложенными принципами, называется раундом шифрования или просто раундом.

В рассматриваемом случае прямое и обратное шифрующие пре­ образования осуществляются в соответствии со следующими урав­ нениями:

т, л-\ = т, 1 а А Т Ш ,

Ti=Ti+ 1

+ 1 ),ЛГ/).

Прежде чем продолжить

рассмотрение необходимых свойств

стандартных шифрующих преобразований, обсудим возможные со­ отношения между размерами блоков, участвующих в них. Если меж­ ду размерами преобразуемого блока (7}), модифицирующего значе­ ния (Г/) и инварианта (/,•) выполняется следующее соотношение:

|Г ,| = |Г ,| + |/,|, (***),

то операция модификации данных ( ||-) не должна терять информацию о своих аргументах - это, в частности, означает, что изменение лю­ бого из аргументов должно приводить к изменению значения функ­ ции. Если равенство (***) не будет выполняться и его левая часть будет больше правой части, то стойкость преобразования будет да­ леко от оптимума - ее можно будет повысить, увеличив размер мо­ дификатора (Г,), инварианта (Ij) или их обоих. Если же правая часть окажется больше левой части, то операция модификации обязательно будет терять информацию о модифицирующем элементе - это озна­ чает, что будут существовать различные элементы Г и Г', такие, что для некоторого блока данных Т будет выполняться следующее ра­ венство:

т\ [ г = т \ [ г ,

вчем также нет особого смысла. Таким образом, резонно выбирать размеры блоков, участвующих в преобразовании, такими, чтобы вы­ полнялось приведенное выше равенство (***). Идем дальше, с точки зрения достижения необходимой стойкости и эффективности шиф­ рующего преобразования выгодно взять размеры модификатора (Г,) и инварианта (//) равными: | Г,-1 = | /, |. С учетом равенства (***) их размер будет равен половине размера шифруемого блока:

|Г | = |/ | = | Т\/2.

Данное соотношение выполняется для подавляющего большин­ ства современных практических шифров, построенных в соответст­ вии с описанной архитектурой. Продолжим рассмотрение стандарт­ ной архитектуры шифров: инвариант и функция шифрования могут быть различными для различных шагов шифрования. Вспомним о желательном свойстве криптоалгоритмов - о возможности реали­ зации прямого и обратного преобразований одним и тем же аппарат­ ным блоком или программным модулем. Для шифров, имеющих рас­ сматриваемую архитектуру, это возможно, если они имеют антисим­ метричную структуру. Это означает, что операции модификации, используемые на равноотстоящих от начала и конца цепочки преоб­ разований шагах, должны быть обратными друг другу, а их инвари­ анты и функции шифрования должны совпадать:

[0|]_,=°И-1 + 1, fi - fn~i+

•Л = Jn-i+\-

Наиболее простым образом этого можно достигнуть, если для модификации использовать операцию побитового ИСКЛЮЧАЮ­ ЩЕГО ИЛИ, изменяющую весь блок или его часть, а все инварианты и функции шифрования взять одинаковыми.

Чтобы блок гаммы, вырабатываемый и используемый на раунде шифрования, мог принимать любое возможное значение - это необ­ ходимо для обеспечения высокой стойкости шифра, суммарный раз­ мер шифрующей части блока и ключа раунда не должен быть мень­ ше размера шифруемой части блока:

Я ' - Я Ф Г , L' = L ®Г, У(Я, L) = Н (ВL.

Более того, для усложнения анализа алгоритма целесообразно выбирать эти размеры таким образом, чтобы каждый из них в от­ дельности был не меньше размера шифруемой части блока:

Если последовательность раундовых функций, использованных в шифре, палиндромиальна, что означает выполнение равенства:

f\ ~ fn’f l ~ in-X'"''f\nH.\ ~ fn+\-\n!2\

и, в частности, если на всех раундах используется одна и та же функ­ ция шифрования, то процедуры за- и расшифрования различаются только порядком использования раундовых ключей-они взаимно обратны. В этом случае шифр обладает весьма полезным с точки зрения удобства реализации свойством - процедуры за- и расшифро­ вания могут быть выполнены одним и тем же аппаратным или про­ граммным модулем. Использование одинаковых или почти одинако­ вых функций шифрования позволит достигнуть другого весьма же­ лательного свойства шифра - итеративности. Это означает, что все итерации-раунды может выполнять один и тот же модуль, в резуль­ тате чего станет возможным получить более компактные реализации шифров. Следует отметить, что в цепочку преобразований блока в шифрах подобной структуры иногда добавляют так называемые прямые преобразования - перестановки, подстановки, функциональ­ ные операции непосредственно над шифруемыми данными. Для того чтобы алгоритмы за- и расшифрования были структурно эквивалент­ ны, необходимо, чтобы для каждого включенного в алгоритм прямо­ го преобразования, отстоящего от начала цепочки на несколько ша­ гов, симметрично ему, т.е. точно на таком же расстоянии от конца преобразования, находилось обратное преобразование. Обычно пря­ мое преобразование добавляют в начало алгоритма, это делают для того, чтобы «разбить» типовые паттерны, встречающиеся в шифруе­ мых данных. В соответствии с вышеизложенным правилом в этом случае в конце цепочки используется обратное преобразование. На­ пример, перед первым раундом шифрования в алгоритме DES вы­ полняется битовая перестановка, а после последнего раунда - обратная ей битовая перестановка. В более поздних шифрах для этой цели используется комбинирование с ключевым элементом, вы­ полняемое намного быстрее, нежели перестановка битов. Следует отметить, что раундом шифрования обычно называют цикл преобра­ зования с использованием функции шифрования, нетривиальным образом зависящей от ключа раунда и шифрующей части блока. Ес­ ли преобразование проще, и в нем используется только ключевой элемент или только шифрующая часть блока, такой шаг, хотя фор­

мально и мог бы рассматриваться как раунд, таковым не считается. На­ пример, шаги алгоритма, реализующие изображенные на следующем ниже рис. 29 упрощенные преобразования, не считаются раундами.

т

СЗ*----------

 

т \

 

Е П

н ' — у —

т \ 1

r j

 

H ' = H ® L

Т ' = Т ® К

Т' = Р (Г )

Рис. 29. Преобразования, используемые в шифрах наряду со стандартными шагами (раундами) шифрования

Перейдем к рассмотрению альтернативных решений в построе­ нии шифров. Оставлять часть преобразуемого блока неизменнойнаиболее простой и очевидный способ получить инвариант относи­ тельно преобразования, но не единственный. Другой способ сделать это состоит в том, чтобы разделить шифруемый блок на несколько частей и изменять их согласованным образом:

Г =(Л ,72,...,7У ,

T' =Ti> г„ T=(T\\T2\...,T Lf) ,

так, чтобы некоторая функция от преобразуемого блока не меняла своего значения:

7(7) = /(Г ),

или

где 7 - функция выработки инварианта.

Блок можно разделить на произвольное число частей. Однако поскольку обычно размер блока в битах является степенью двойки, а размеры частей блока также желательно сделать одинаковыми, то количество частей, на которые он разделяется, тоже может быть только степенями двойки. Обычно шифруемый блок делится на две одинаковые части:

Т= (Я,7), |Я| = = I Г| = |7|/2 = N/2.