Раздел: Документация
0 ... 88 89 90 91 92 93 94 ... 169 Для определенности будем называть подобное преобразование стандартным шифрующим преобразованием или стандартным шагом шифрования, а архитектуру шифров, им задаваемую, стандартной или базовой архитектурой шифров. Их использование позволяет разделить очень сложную в общем случае задачу создания преобразования, обладающего одновременно высокой сложностью и нелинейностью, с одной стороны, и являющегося при этом обратимым, с другой стороны, на две решаемые независимо друг от друга подзадачи: создание функции преобразования данных, обладающей высокой сложностью и нелинейностью; создание схемы преобразования, использующей заданную функцию преобразования и при этом обратимой независимо от примененной функции. Функция J(Ti), используемая для выделения инвариантного относительно преобразования блока данных как из самого преобразуемого блока, так и из результата его преобразования, называется инвариантом стандартного шифрующего преобразования или инвариантом стандартного шага шифрования, а функция f(Ii,Ki), предназначенная для выработки блока данных, используемого для модификации шифруемого блока, из инварианта Ii и ключевого элемента Ki, называется функцией шифрования шага преобразования. Сам шаг шифрования в шифрах, построенных в соответствии с изложенными принципами, называется раундом шифрования или просто раундом. В рассматриваемом случае прямое и обратное шифрующие преобразования осуществляются в соответствии со следующими уравнениями: Ti + l - Ti " f(J(Ti)(Ki) , Ti - Ti+l • f (J (Ti+l) ,Ki) Прежде чем продолжить рассмотрение необходимых свойств стандартных шифрующих преобразований, обсудим возможные соотношения между размерами блоков, участвующих в них. Если между размерами преобразуемого блока (Ti), модифицирующего значения и инварианта выполняется следующее соотношение: I Ti + Ii , (***) то операция модификации данных («°») не должна терять информацию о своих аргументах — это, в частности, означает, что изменение любого из аргументов должно приводить к изменению значения функ- 275 ции. Если равенство (***) не будет выполняться и его левая часть будет больше правой части, то стойкость преобразования будет далеко от оптимума - ее можно будет повысить, увеличив размер модификатора (11), инварианта или их обоих. Если же правая часть окажется больше левой части, то операция модификации обязательно будет терять информацию о модифицирующем элементе - это означает, что будут существовать различные элементы Г и такие, что для некоторого блока данных Т будет выполняться следующее равенство: в чем также нет особого смысла. Таким образом, резонно выбирать размеры блоков, участвующих в преобразовании, такими, чтобы выполнялось приведенное выше равенство (***). Идем дальше, с точки зрения достижения необходимой стойкости и эффективности шифрующего преобразования выгодно взять размеры модификатора (П) и инварианта (П) равными: I П = Ii . С учетом равенства (***) их размер будет равен половине размера шифруемого блока: I Г = I = Т /2 Данное соотношение выполняется для подавляющего большинства современных практических шифров, построенных в соответствии с описанной архитектурой. Продолжим рассмотрение стандартной архитектуры шифров: инвариант и функция шифрования могут быть различными для различных шагов шифрования. Вспомним о желательном свойстве криптоалгоритмов, обсуждавшемся в предыдущем выпуске, - о возможности реализации прямого и обратного преобразований одним и тем же аппаратным блоком или программным модулем. Для шифров, имеющих рассматриваемую архитектуру, это возможно, если они имеют антисимметричную структуру. Это означает, что операции модификации, используемые на равноотстоящих от начала и конца цепочки преобразований шагах, должны быть обратными друг другу, а их инварианты и функции шифрования должны совпадать. Наиболее простым образом этого можно до- 276 стигнуть, если для модификации использовать операцию побитового исключающего ИЛИ, изменяющую весь блок или его часть, а все инварианты и функции шифрования взять одинаковыми. Теперь поговорим о том, каким образом можно создать инвариант в шифрующем преобразовании. Один из наиболее очевидных способов сделать это заключается в том, чтобы... не менять определенную часть преобразуемого блока, оставить ее неизменной, в буквальном смысле слова, инвариантной. В этом случае эта неизменяемая часть блока и будет являться инвариантом, для определенности, предположим, что это младшая его часть. Приводим стандартное шифрующее преобразование блока данных, в котором инвариантом является часть шифруемого блока. В этом случае преобразование осуществляется по следующим уравнениям: Hi + = Hi • f(Li,Ki), Li + = Li, где Hi и Li - соответственно, старшая и младшая части преобразуемого блока данных. Ту часть блока, которая не изменяется на раунде, давайте называть шифрующей частью, а ту, которая подвергается преобразованию - шифруемой частью. Так как одна из частей блока в ходе такого преобразования не подвергается изменению, понятно, что для построения стойкого шифра перед каждым новым шагомнеобходимо по-новому разделить блок на шифрующую и шифруемую части. Интуитивно ясно, что для обеспечения максимальной стойкости при прочих равных условиях необходимо обеспечить, чтобы все двоичные разряды блока входили в шифруемую часть одинаковое или почти одинаковое количество раз. Технически этого можно достигнуть различными способами, например, после каждого шага преобразования выполнять циклический сдвиг блока, выводящий на шифруемую позицию не подвергавшиеся изменению на предыдущем шаге разряды блока. Преобразование осуществляется по следующим уравнениям: Hi+2 = Hi+l Hi ° f(Li,Ki), Li+2 = Li+1 1 g(Hi + l,Ki + l) = Li ° g(Hi + l,Ki + l) Архитектура шифров, базирующаяся на описанном выше преобразовании, оставляющем неизменной часть шифруемого блока, называется сетью Файстеля, точнее - обобщенной сетью Файстеля. Разни- 277 0 ... 88 89 90 91 92 93 94 ... 169
|