Раздел: Документация
0 ... 89 90 91 92 93 94 95 ... 169 ца между ними заключается в том, что в первой для модификации данных используется операция побитового исключающего ИЛИ, а во втором - любая подходящая бинарная операция. Такая архитектура шифров была предложена в 70-е годы пионером в создании криптографических алгоритмов подобного типа доктором Хорстом Файстелем, работавшим в то время в исследовательской лаборатории фирмы IBM и создавшим там криптосистему Люцифер, послужившую прототипом наиболее известного шифра этого типа -американского стандарта шифрования, криптоалгоритма DES, сохраняющего свой статус стандарта вплоть до настоящего времени, но, очевидно, доживающего в этом качестве последние месяцы. В общем случае обе части, на которые делится преобразуемый блок данных, могут иметьразмер. Можно всегда представить шифр этого типа таким образом, что шифрующей является младшая часть блока, а шифруемой - старшая его часть. В этом случае между раундами необходимо выполнить вращение блока в любую сторону таким образом, чтобы на следующем раунде шифруемой стала часть блока, входившая на предыдущем раунде в его шифрующую часть. Понятно, что для каждого раунда разделение блока на шифрующую и шифруемую части будет выполняться заново. Конечно, размер шифрующей и шифруемой частей блока может изменяться от раунда к раунду, однако особого смысла в этом нет и обычно эти величины постоянны для конкретного криптоалгоритма. Если они равны друг другу, то такая схема называется сбалансированной, а если нет - то несбалансированной сетью Файстеля. Чтобы блок гаммы, вырабатываемый и используемый на раунде шифрования, мог принимать любое возможное значение — это необходимо для обеспечения высокой стойкости шифра, — суммарный размер шифрующей части блока и ключа раунда не должен быть меньше размера шифруемой части блока. Более того, для усложнения анализа алгоритма целесообразно выбирать эти размеры таким образом, чтобы каждый из них в отдельности был не меньше размера шифруемой части блока. Попричине на практике не так часто встречаются шифры Файстеля, в которых шифрующая часть блока меньше шифруемой по размеру Li < Hi, особенно для размеров блока, не превышающих 64 бита, С другой стороны, за один раунд шифруется Hi бит блока, и если уменьшить эту величину, то при фиксированном количестве раундов каждый бит блока будет шифроваться меньшее число раз, поэтому шифры Файстеля с размером шифруемой части блока меньше шифрующей тоже не получили значительного 278 ния. Таким образом, остаютсяв которых размеры обеих час- тей блока одинаковы: Li = Hi. Именно такие шифры, архитектура которых, как было отмечено выше, называется сбалансированной сетью Файстеля, доминируют в современной практической криптографии. В сбалансированной сети Файстеля преобразования выполняются по следующим уравнениям: ХО = HiT/2(T), XI - LoT/2(T), Xi + 1 - Xi-1 0 f(Xi,Ki) , для i = 1,2,...,n, T - Xn+1 I. I Xn Если последовательностьфункций, использованных в шифре,и, в частности, если на всех раундах ис- пользуется одна и та же функция шифрования, то процедуры за- и расшифрования различаются только порядком использования раундо-вых ключей - они взаимно обратны. В этом случае шифр обладает весьма полезным, с точки зрения удобства реализации, свойством -процедуры за- и расшифрования могут быть выполнены одним и тем же аппаратным или программным модулем. Использование одинаковых или почти одинаковых функций шифрования позволит достигнуть другого весьма желательного свойства шифра - итеративности. Это означает, что все итерации-раунды может выполнять один и тот же модуль, в результате чего станет возможным получить более компактные реализации шифров. Следует отметить, что в цепочку преобразований блока в шифрах подобной структуры иногда добавляют преобразования, рассмотренные в выпуске № 4, так называемые прямые преобразования - перестановки, подстановки, функциональные операции непосредственно над шифруемыми данными. Для того, чтобы алгоритмы за- и расшифрования были структурно эквивалентны, необходимо, чтобы для каждого включенного в алгоритм прямого преобразования, отстоящего от начала цепочки на несколько шагов, симметрично ему, то есть точно на таком же расстоянии от конца преобразования, находилось обратное преобразование - в точности, как это было описано в выпуске №4. Обычно прямое преобразование добавляют в начало алгоритма; это делают для того, чтобы «разбить» типовые паттерны, встречающиеся в шифруемых данных. В соответствии с вышеизложенным правилом в этом случае в конце цепочки используется обратное вание. Например, перед первым раундом шифрования в алгоритме 279 DES выполняется битовая перестановка, а после последнего раунда -обратная ей битовая перестановка. В более поздних шифрах для этой цели используется комбинирование с ключевым элементом, выполняемое намного быстрее, нежели перестановка битов. Следует отметить, что раундом шифрования обычно называют цикл преобразования с использованием функции шифрования, нетривиальным образом зависящей от ключа раунда и шифрующей части блока. Если преобразование проще и в нем используется только ключевой элемент или только шифрующая часть блока, такой шаг, хотя формально и мог бы рассматриваться как раунд, таковым не считается. Например, шаги алгоритма, реализующие изображенные на следующем ниже рисунке упрощенные преобразования, не считаются раундами: = Р(Т) На этом мы с вами закончим рассмотрение сетейи пе- рейдем к рассмотрению альтернативных решений в построении шифров. Оставлять часть преобразуемого блока неизменной - наиболее простой и очевидный способ получить инвариант относительно преобразования, но не единственный. Другой способ сделать это состоит в том, чтобы разделить шифруемый блок на несколько частей и изменять их согласованным образом: Т = (Т1,Т2, . . .,TL) , Tl = Ti ™i Г, Т = (Т1,Т2, .. .,TL) так, чтобы некоторая функция от преобразуемого блока не меняла своего значения: J(T)J(T),или J(Tl,Т2, . . . , TL) J(Tl,Т2TL ) , где J - функция выработки инварианта. Блок можно разделить на произвольное число частей. Однако, поскольку обычно размер блока в битах является степенью двойки, а размеры частей блока также желательно сделать одинаковыми, то количество частей, на которые он разделяется, тоже могут быть только степенями двойки. Обычно шифруемый блок делится на две одинаковые части: 280 0 ... 89 90 91 92 93 94 95 ... 169
|