Генерирование ключей Twofish

Я пытаюсь выяснить, как генерируется расширенный ключ шифра Twofish.

На данный момент я выяснил, что сначала генерируется одна часть ключа, которая используется для отбеливания, а затем в каждом раунде генерируется 2x32-битная ключевая часть.

Первая часть ключа состоит из 3 векторов, Мо, Я и S.

Mo и Me генерируются просто путем расширения первичного ключа до первой определенной длины и разделения его на четные и нечетные 32b слова, которые затем помещаются в векторы Mo и Me.

Вектор S, с другой стороны, состоит из k слов, где k = N/64, в случае N=128 S содержит 2x32b слов.

Итак, мы получили Mo(2x32) + Me(2x32) + S(2x32) + 16x2x32 = 38 32-битных слов. 2 слова отсутствуют. Зачем??

А что если N=192 или N=256? Как расширенный ключ может быть 40 32-битными словами вместо 41 и 44?

Любая помощь будет отличной.

Спасибо

1 ответ

Чтобы ответить на мой собственный вопрос, я обнаружил, что векторы Mo, Me и S на самом деле не являются частью расширенного ключа, как я сначала подумал, на самом деле они просто используются для генерации расширенных ключей и зависимых от ключа S-блоков. Часть ключа, которая используется для отбеливания, генерируется так же, как части, которые используются в каждом раунде, с использованием функции h, просто они не используются где-либо еще, кроме отбеливания. Надеюсь, что это избавит людей от подобных вопросов.:)

Другие вопросы по тегам