Twofish: поколение отбеливающих подразделов
Я реализую алгоритм Twofish для использования в образовательном программном обеспечении. Я использую QT для пользовательского интерфейса и использую исследование из Википедии и статьи Twofish Брюса Шнайера, но я застрял на создании отбеливающих подразделов. Я успешно понял, как создавать круглые подключи, но не нашел способа создать отбеливающие.
Я беру k = 2 (128-битный ключ, 128/64 = 2), поэтому 2k = 4; размер M_e и M_0 равен 2, я заполняю их по исходному ключу и вычисляю круглые ключи на 16 раундов, по 2 ключа на каждый.
Итак, вместо 40 подключей я получаю только 32.
Где я пропустил 8 для отбеливания? Я перечитал статью и не нашел для них алгоритм или предложения о том, как они генерируются, например, первые или последние N ключей до или после раундовых.
Как сгенерировать отбеливающие ключи?
1 ответ
Страница 5:
Дважды xors 128 битов подраздела до первого раунда Фейстеля, и еще 128 битов после последнего раунда Фейстеля. Эти подключи рассчитываются так же, как и круглые подключи, но не используются где-либо еще в шифре.
Уравнения на странице 7 показывают, что отбеливание на входе выполняется с первыми 4 Ки, а отбеливание на выходе - с последующими 4 Ки.
Функция F (используется в основных раундах) использует клавиши K_(2r+8) и K_(2r+9). +8 и +9 добавлены, чтобы пропустить 8 клавиш, используемых для отбеливания.
Таким образом, вам нужно сгенерировать ключи для дополнительных 4 раундов (делая 8 дополнительных ключей). Первые 4 клавиши используются для ввода, а следующие 4 для вывода.