Глава 4. Блочные шифры
MDS
MDS
p
(128 бит)
K
0
K
4
K
5
K
6
K
7
S
0
S
1
S
2
S
3
S
0
S
1
S
2
S
3
K
1
K
2
K
2
T
+8
K
2
T
+9
K
3
>>>1
<<<1
<<<8
F
g
g
PHT
с
(128 бит)
Отбеливание
входных данных
Один
раунд
Еще 15
раундов
Отменить
последнюю
перестановку
Отбеливание
выходных данных
Рис. 4.3.
Структура алгоритма Twofish
структура Twofish соответствует структуре шифра Файстеля. Здесь
F
— это
функция раунда, которая состоит из двух одинаковых функций
g
, функции
под названием PHT и операции сложения с подключом. Результат функции
F
складывается при помощи операции XOR с правой половиной текста (две вер-
тикальные линии справа). Прямоугольники с символами
<<<
и
>>>
внутри
означают циклический сдвиг битов 32-битового значения влево или вправо на
указанное число позиций.
Каждая функция
g
состоит из четырех S-матриц, за которыми следует
линейная функция перемешивания, очень похожая на ту, что используется
4.5. Современные блочные шифры
81
в AES. Однако S-матрицы здесь совсем другие. В отличие от всех блочных
шифров, которые нам до сих пор доводилось видеть, S-матрицы Twofish не
являются постоянными; их содержимое зависит от ключа. Существует алго-
ритм, который вычисляет S-матрицы для заданного ключа. S-матрицы были
сделаны переменными, так как анализировать матрицы, зависящие от ключа,
намного сложнее. Это также является причиной того, почему программные
реализации Twofish выполняют ряд предварительных операций над ключом.
Они вычисляют S-матрицы и сохраняют полученный результат в памяти.
Функция PHT перемешивает результаты двух функций
g
, используя 32-
битовые операции сложения. В последней части функции
F
выполняется сло-
жение данных с подключом. Обратите внимание, что обычная операция сло-
жения обозначена как
¢
, а операция “исключающее ИЛИ” — как
⊕
.
Помимо описанных функций, в алгоритме Twofish используется так на-
зываемое
отбеливание (whitening)
. В начале и в конце шифрования данные
складываются с дополнительными подключами. Это значительно затрудняет
осуществление большинства типов атак, а расходы на выполнение операции
отбеливания совсем небольшие.
Как и другие шифры, Twofish использует некоторый алгоритм генерации
подключей раундов и двух дополнительных подключей, применяемых в на-
чале и в конце шифрования, на основе фактического ключа шифрования.
Признаемся откровенно: наше мнение несколько субъективно. Как разра-
ботчики Twofish, мы очень любим свой шифр. Мы пытались сохранять объ-
ективность, однако в данной ситуации быть полностью объективными невоз-
можно. Twofish был разработан частично затем, чтобы удовлетворить наши
требования к хорошему блочному шифру. AES и Serpent были разработаны,
чтобы удовлетворить те требования, которые казались наиболее важными их
авторам. Например, в алгоритме Twofish мы сознательно добавили к шифру
два однобитовых циклических сдвига. Такие сдвиги имеют два недостатка.
Они вносят различие в операции шифрования и дешифрования, что требует
гораздо б´ольших расходов на реализацию. Они также замедляют реализа-
цию программного обеспечения примерно на 5%. Единственная причина до-
бавления циклических сдвигов состояла в том, чтобы нарушить ту четкую
структуру разбивки на байты, которая, например, наблюдается в AES. Лично
нам кажется, что алгоритм AES чрезмерно аккуратный и структурирован-
ный. Разработчики AES, в свою очередь, наверняка думают, что алгоритму
Twofish не хватает структурированности и элегантности. У каждого из нас
свое мнение, и мы, конечно же, глубоко уважаем мнения своих коллег. Но
в этой книге все советы определяются нашим мнением.
82
8>1> Достарыңызбен бөлісу: |