Раздел: Документация
0 ... 100 101 102 103 104 105 106 ... 169 При расшифровке вычисления включают в себя разбиение шифротекста: L16 - L R16 = R И затем прохождение по циклам в обратном порядке, т. е. используя 16 циклов (i - 1,16). Рч : - xor f (Ri-SKSi, SK31.:) Li-i ™ Ri-SK31-SK3ii.2 311 128-битное значение открытого текста получается как Алгоритм выработки ключей LOKI97 использует алгоритм выработки ключей, базирующийся на несбалансированной петле Фейстеля (как у Schneier и Kelsey [ScKe96]), оперирующий четырьмя 64-байтовыми словами. Используется та же функция f(A,B), как и при вычислении данных, чтобы обеспечить достаточную нелинейность для гарантии того, что вычислить связанные ключи трудно. Алгоритм выработки ключей устанавливает четыре 64-битных слова [К40КЗОК20К10] на основании размера предлагаемого ключа следующим образом : При заданном 256-битном ключе [KaKbKcKd]получим: При заданном 192-битном ключе [K.jKbKc] получим: [К40К30К20К10] = [KaKbKcf(Ka,Kb) ] При заданном 128-битном ключеполучим: [К40К30)К20К10] = [KaKb!f(Kb,Ka)f(Ka,Kb)] Затем они пропускаются через 48 циклов (i = 1,48) для получения 48 вспомогательных ключей: [К40К301К20К10] = KaKbKcKd] I К4А.г xor gi (Kli.i, K3J.1, К2.х) КЗ i-l K2 i-X K2i = Kl где gi (Kl,K3,K2)=f (Kl+K3+(Delta*i) ,K2) Delta = (sqrt (5} ~1) *26;i = 9E3779B97F4A7C1516 312 Три цикла алгоритма выработки ключей требуются для создания трех вспомогательных ключей каждого цикла вычисления данных. Так, требуется всего 48 циклов для алгоритма выработки ключей, эквивалентных примерно трем зашифровывающим вычислениям. Добавление формы Kl+K3+(Delta*i) в группу, несовместимую с xor-ом, используемым на выходе предыдущего цикла, — такое же, как и при вычислении данных. Оно включает умножение по модулю 264 на Delta — значение, полученное из «золотого» соотношения для уменьшения проблем симметричности. Расшифровывание использует ключи в обратном порядке, добавляя замену вспомогательного ключа SK;), на SK3j и наоборот. Это необходимо, чтобы высчитать первоначально зашифрованное значение, и не существует укороченного варианта без этого действия. Функция f(A,B) Сильно нелинейная функция f(A,B) имеет два 64-битных входных значения А и В, которые обрабатываются с использованием двух «слоев» S-блоков с высочайшей степенью нелинейности для получения 64-битного выхода. Используются две перестановки для гарантии максимального лавинного эффекта между всеми битами функции. Основное новшество в предлагаемой мною разработке — это использование двух уровней S-P петли вместо одного, как в большинстве других существующих сейчас шифров Фейстеля. Оно используется как для обеспечения максимального желаемого лавинного эффекта, так и для того, чтобы минимизировать возможность существования подходящих разностных и линейных характеристик (для осуществления атак). Наличие ключевой перестановки на входе функции, перенаправляющее различные входы S-блоков, гарантирует, что предугадать то, в какой S-блок попадет отдельный входной бит, — весьма сложно. Это увеличивает сложность получения любой полезной для атаки характеристики. Данная функция выглядит следующим образом: £(А,В) = Sb ( Р ( Sa ( Е ( КР ( А,В ) ) ) ), В) 313 0 ... 100 101 102 103 104 105 106 ... 169
|