Открыть сервис

Twofish

Twofish — это симметричный блочный шифр, разработанный в 1998 году группой криптографов во главе с Брюсом Шнайером. Шифр является финалистом конкурса AES (Advanced Encryption Standard), проводившегося Национальным институтом стандартов и технологий США (NIST) для выбора нового стандарта шифрования. Twofish отличается высокой скоростью работы на различных платформах, гибкостью (поддержка ключей длиной 128, 192 и 256 бит) и устойчивостью к известным криптоаналитическим атакам, хотя и не был выбран в качестве финального стандарта AES.

История создания

Разработка Twofish началась в 1997 году, когда NIST объявил конкурс на создание нового стандарта шифрования, который должен был прийти на смену устаревшему DES. Команда Counterpane Systems (США) под руководством Брюса Шнайера, известного криптографа и автора шифра Blowfish, представила свой алгоритм в 1998 году. Twofish стал одним из пяти финалистов конкурса, наряду с MARS, RC6, Serpent и Rijndael. В 2000 году победителем был объявлен Rijndael, который впоследствии стал стандартом AES. Тем не менее, Twofish остаётся широко используемым алгоритмом, особенно в программных реализациях, где его производительность часто превосходит AES.

Описание алгоритма

Twofish представляет собой блочный шифр с размером блока 128 бит. Он использует структуру сети Фейстеля, что облегчает реализацию и делает шифр устойчивым к некоторым видам атак. Ключевой особенностью Twofish является использование предварительно вычисляемых S-блоков (таблиц замен), которые зависят от ключа, что усложняет криптоанализ.

Основные параметры

Раундовая функция

Каждый раунд Twofish включает несколько этапов:

  1. Разделение блока: 128-битный блок делится на 4 32-битных слова.
  2. Применение S-блоков: Каждое слово проходит через 4 различных S-блока, которые зависят от ключа. S-блоки построены на основе арифметики в поле Галуа GF(2⁸) и включают нелинейные преобразования.
  3. Матричное умножение: Результаты S-блоков объединяются с помощью матрицы MDS (Maximum Distance Separable), которая обеспечивает диффузию — распространение изменений по всему блоку.
  4. Сложение с раундовыми ключами: После матричного преобразования данные складываются (по модулю 2³²) с двумя раундовыми ключами.
  5. Перестановка: В конце раунда выполняется операция PHT (Pseudo-Hadamard Transform), которая смешивает слова между собой.

Генерация ключей

Процедура расширения ключа в Twofish сложнее, чем в большинстве других шифров. Она включает:

Криптоанализ и безопасность

На момент создания Twofish считался одним из самых безопасных шифров. Он устойчив ко всем известным видам атак, включая:

На 2025 год не опубликовано ни одной практической атаки, которая бы взламывала Twofish быстрее, чем полный перебор ключа (2¹²⁸ для 128-битного ключа). Однако в 2011 году была предложена теоретическая атака на 8-раундовую версию Twofish (из 16) с использованием метода «невозможных дифференциалов», но она не представляет угрозы для полного шифра.

Применение

Twofish широко используется в различных областях, где требуется высокая скорость шифрования и гибкость:

Сравнение с AES

ХарактеристикаTwofishAES (Rijndael)
Размер блока128 бит128 бит
Длина ключа128/192/256 бит128/192/256 бит
Число раундов1610/12/14 (зависит от ключа)
СтруктураСеть ФейстеляПодстановочно-перестановочная сеть
Зависимость S-блоков от ключаДаНет
Скорость (программная)ВысокаяВысокая (оптимизирована для Intel)
Аппаратная эффективностьСредняяВысокая (поддержка AES-NI)

Основное преимущество AES — аппаратная поддержка в современных процессорах (инструкции AES-NI), что делает его быстрее на массовых платформах. Twofish, однако, остаётся конкурентоспособным в программных реализациях и на платформах без аппаратного ускорения.

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →