Раздел: Документация
0 ... 101 102 103 104 105 106 107 ... 169 Графически это выглядит так : jSM. имя l+o.a-J6 63 63 KP [nput Л до I pi-OI Input В ДО В деталях различные составляющие операций таковы: КР() Очень простая ключевая перестановка, которая разбивает 64-битный вход А на два 32-битных слова и использует нижние (т. е. наиболее значимые) 32 бита входа В, чтобы определить необходимо ли поменять соответствующие пары битов в этих словах (если бит ключа 1), или же нет (если бит ключа 0), похожая на что используется в ICE [Kwan97]. Это может быть вычислено как: КР( [AlAr],SKr) = И (Al & -SKr) (Ar & SKr)) ( (Ar & -SKr) I (Al & SKr)) ] EO Расширяющая функция, похожая на соответствующую в LO.CI91, но измененная в плане более быстрого выполнения, которая разбивает на пересекающиеся группы по 13 или 11 бит (S1 или S2 314 соответственно) так, что по крайней мере несколько бит влияют на два S-блока одновременно, и, с учетом предыдущего сложения, это означает, что все биты имеют некоторое влияние на множество S-блоков. Таким образом, Е распределяет 64 бита входного значения на 96 битов выходного: [4-0, 63-5658-4852-4 042-3234-24[28-16!18-8 12-0] . Sa(), Sb() Две колонки S-блоков, выполненных просто конкатенацией блоков S1 и S2 (описанных ниже) так, что Sa()[S1,S2,S1,S2,S2,S1,S2,S1]и Sb()=[S2,S2,Sl,Sl,S2,S2,Sl,Sl]. В Sa() входы смешаны (вход + ключ из выхода Е), а в Sb() верхние биты — это только ключевые биты (из нижних, более значимых 32 битов В) . Р() перестановка, рассеивающая выходы S-блоков полностью по 64- битной длине, используя регулярный шаблон латинского квадрата, похожий на LOKI91, но с такими незначительными изменениями, что один и тот же выход никогда не войдет в соответствующий вход. Р распределяет входные биты [63-0] так: [56,48,40,32,24,16,08,00,57,49,41,33,25,17,09,01, 58,50, 42,34,26,18,10, 02,59, 51, 43,35,27,19,11, 03, 60,52,44,36,28,20,12,04,61,53,45,37,29,21,13,05, 62,54,46,38,30,22,14,06,63,55,47,39,31,23,15,07] Я полагаю, что эта функция будет выполнима с 24 табличными заданиями (8 на каждый из Sa, Р и Sb), плюс несколькоог-ов, хог-ов, сдвигов и сложений на каждый цикл. Это сделает ее выполнение реально быстрым и эффективным . 315 S-блоки S-блоки, выбранные для LOKI97 используют возведение в куб в нечетном поле Галуа GF(2n), т. к. оно имеет несколько очень удобных свойств (таких, как сильная нелинейность и относительно однообразный профиль хог). Чтобы количество входов было нечетно, в S1 используется 13 входных битов, а в S2 — 11 битов. Они распределяются так, как описано выше, чтобы объединиться для работы над каждым входным блоком. Входное значение инвертируется (так, что входы О или 1 никогда не дадут выходов 0 или 1), и выходное значение маскируется в выбранные 8 нижних выходных битов. Функции S-блоков таковы: Sl[x] = Ux хог 1FFF)3 mod 2911) & FF, in GF(213) S2[x] = ( (x xor 7FF)3 mod AA7) & FF, in GF(211) (Заметим , что все константы приведены в 16-ричнойсист?мс , а все вычисления сделаны как полиномиальные в GF(2n) ). Контрольная тройка Сертификационная тройка (пример LOKI97) такова: LCKI97 key: 000102030405060708090ACBOCODOEOF10111213141516i718191AlBlClDlElF LOKI97 plain: 0 0 0102 03 0 4 05 0 6 0 7 0 8 0 9 0AOBOCODOEOF LOKI97cipher: 75 0 80E3 5 9F10FE640144B3 5C5712 8DAD Беглый криптоанализ Мой беглый взгляд на криптоанализ говорит о том, что : Алгоритм выработки ключей сильно нелинеен, вспомогательные ключи получены как выход функции f (А, В) и сложно зависят от всех ключевых бит. Я не могу найти какого-либо очевидного способа определения связанных ключей, что достигается прибавлением кратностей Delta в каждом цикле. 316 0 ... 101 102 103 104 105 106 107 ... 169
|