В криптографии Twofish представляет собой блочный шифр с симметричным ключом с размером блока 128 бит и размером ключа до 256 бит. Он был одним из пяти финалистов конкурса Advanced Encryption Standard , но не был выбран для стандартизации. Twofish связан с более ранним блочным шифром Blowfish .
Отличительными особенностями Twofish являются использование предварительно вычисленных ключевых S-блоков и относительно сложное расписание клавиш . Одна половина n-битного ключа используется в качестве фактического ключа шифрования, а другая половина n-битного ключа используется для модификации алгоритма шифрования (зависимые от ключа S-блоки). Twofish заимствует некоторые элементы из других проектов; например, псевдопреобразование Адамара [3] (PHT) из семейства шифров SAFER . Twofish имеет структуру Фейстеля , такую как DES . Twofish также использует матрицу , разделяемую на максимальное расстояние .
Когда он был представлен в 1998 году, Twofish был немного медленнее, чем Rijndael (выбранный алгоритм для Advanced Encryption Standard ) для 128-битных ключей , но несколько быстрее для 256-битных ключей. С 2008 года практически все процессоры AMD и Intel включают аппаратное ускорение алгоритма Rijndael через набор инструкций AES ; Реализации Rijndael, использующие этот набор команд, теперь на порядки быстрее, чем (программные) реализации Twofish. [4]
Twofish был разработан Брюсом Шнайером , Джоном Келси , Дугом Уайтингом, Дэвидом Вагнером , Крисом Холлом и Нильсом Фергюсоном : «расширенная команда Twofish» встретилась для проведения дальнейшего криптоанализа Twofish. Среди других участников конкурса AES были Стефан Лакс , Тадаёси Коно и Майк Стей.
Шифр Twofish не был запатентован , а эталонная реализация была размещена в открытом доступе . В результате алгоритм Twofish может использоваться всеми без каких-либо ограничений. Это один из немногих шифров, включенных в стандарт OpenPGP (RFC 4880). Однако Twofish получил менее широкое распространение, чем Blowfish [ сомнительно ] , который доступен дольше.
При разработке Twofish производительность всегда была важным фактором. Он был разработан с учетом нескольких уровней компромисса в производительности в зависимости от важности скорости шифрования, использования памяти, количества аппаратных шлюзов, настройки ключей и других параметров. Это позволяет создать очень гибкий алгоритм, который можно реализовать в различных приложениях.
Существует множество компромиссов между пространством и временем, которые можно сделать как в программном, так и в аппаратном обеспечении Twofish. Примером такого компромисса может быть предварительное вычисление круглых подразделов или s-блоков, что может привести к увеличению скорости в два и более раза. Однако за это приходится платить больше оперативной памяти , необходимой для их хранения.
Все оценки в таблице ниже основаны на существующей технологии КМОП 0,35 мкм .
В 1999 году Нильс Фергюсон опубликовал невозможную дифференциальную атаку , которая взламывает 6 раундов из 16 версии 256-битного ключа за 2256 шагов . [2]
По состоянию на 2000 год [обновлять]лучшим опубликованным криптоанализом блочного шифра Twofish является усеченный дифференциальный криптоанализ полной 16-раундовой версии. В документе утверждается, что вероятность усеченных дифференциалов составляет 2–57,3 на блок и что потребуется примерно 251 выбранный открытый текст (объем данных 32 петабайта ), чтобы найти хорошую пару усеченных дифференциалов. [6]
Брюс Шнайер ответил в записи в блоге 2005 года, что в этой статье не представлена полная криптоаналитическая атака, а лишь некоторые гипотетические дифференциальные характеристики: «Но даже с теоретической точки зрения Twofish даже отдаленно не сломан. Никаких расширений к этим результатам не было. с тех пор, как они были опубликованы в 2000 году». [7]
{{cite journal}}
: Требуется цитировать журнал |journal=
( помощь ){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь ){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь ){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь ){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь )