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 не хватает структурированности и элегантности. У каждого из нас
свое мнение, и мы, конечно же, глубоко уважаем мнения своих коллег. Но
в этой книге все советы определяются нашим мнением.