Twofish разрабатывался специально с учетом требований и рекомендаций NIST для AES:
- 128-битный блочный симметричный шифр
- Длина ключей 128, 192 и 256 бит
- Отсутствие слабых ключей
- Эффективная программная (в первую очередь на 32-битных процессорах) и аппаратная реализация
- Гибкость (возможность использования дополнительных длин ключа, использование в поточном шифровании, хэш-функциях и т. д.)
- Простота алгоритма - для возможности его эффективного анализа
Twofish - 128-битный блочный шифр, который принимает ключ длины 128, 192, 256 бит. Twofish, являясь симметричным алгоритмом шифрования, то есть использует один ключ как для шифрования данных, так и для их расщифровки. Шифр имеет входное, выходное отбеливания и 16 раундов сети Фейстеля, каждый из которых обладает биективной функцией F, четырех зависящих от ключа S-блоков, фиксированной MDS матрицы, псевдопреобразования Адамара, побитовых поворотов, и тщательно разработанное ключевое расписание.
Отличительными особенностями Twofish являются использование предварительно вычисленных S-блоков, зависящих от ключа, и относительно сложное ключевое расписание.. Одна половина n-битного ключа используется в качестве фактического ключа шифрования, а другая половина n-битного ключа используется для модификации алгоритма шифрования (зависящие от ключа S-блоки). Twofish заимствует некоторые элементы из других конструкций, например, преобразование псевдо-Адамара из семейства шифров SAFER.
В Twofish используется достаточно сложную структуру, которая сильно усложняет его анализ, что является как плюсом так и минусом алгоритма. В алгоритме можно выделить несколько основных элементов участвующих в процессе шифрования:
- Отбеливание. Метод до первого и после последнего раундов, при котором над частью ключевого материала и входными блоками открытого текста выполняется операция исключающего «или» (XOR).
- Сеть Фейстеля. Методов построения блочных шифров, состоящий из многократно повторяющихся раундов, на каждом из которых вычисляется функция F от части шифруемого блока, результат которой складывается с другой частью этого же блока.
- S-боксы. Широко распространённый в блочных шифрах метод нелинейной замены бит. В Twofish S-блоки зависит от ключевого материала, принимают 8 бит на входе и возвращают 8 бит на выходе.
- MDS(maximum distance separable) - матрицы разделения на максимальное расстояние. В Twofish используется заранее известная MDS матрицу размером 4 на 4 над полем Галуа. Она используется для перемешивания ключа, чтобы гарантировать, что небольшое изменение ключа создаст совершенно новый зашифрованный текст на выходе шифра.
- Псевдо-преобразование Адамара (PHT). Обратимое преобразование битовых строк, заключающиеся во взаимном сложении по модулю двух выходов g-функций.
- Ключевое расписание. Метод создания множества различных раундовых ключей из одного ключевого материала, которые будут использованы на каждом раунде, процессе отбеливания и определении S-боксов
Помимо всего вышеперечисленного в алгоритме используются следующие операции работы c информацией, представленной в двоичном коде:
Ниже представлена общая схема алгоритма Twofish: