https://yoake72.ru службы доставки готовой еды в тюмени.

Описание SAFER K-64

Блок открытого текста делится на восемь байтовых подблоков: B1, B2, . . . , B7, B8. Затем подблоки обрабатываются в ходе r этапов. Наконец подблоки подвергаются заключительному преобразованию. На каждом этапе используется два подключа: K2r-1 и K2r.

На Рис. 14-4 показан один этап SAFER K-64. Сначала над подблоками выполняется либо операция XOR, либо сложени с байтами подключа K2r-1. Затем восемь подблоков подвергаются одному из двух нелинейных преобразований:

y = 45x mod 257. (Если x = 0, то y = 0.)

y = log45 x. (Если x = 0, то y = 0.)

[image]

Рис. 14-4. Один этап SAFER.

Это операции в конечном поле GF(257), а 45 - элемент поля, являющийся примитивом. В реализациях SAFER K-64 быстрее выполнять поиск в таблице, чем все время рассчитывать новые результаты.

Затем подблоки либо подвергаются XOR, либо складываются с байтами подключа K2r. Результат этого действия проходит через три уровня линейных операций, целью которых является увеличение лавинного эффекта. Каждая операция называется псевдоадамаровым преобразованием (Pseudo-Hadamard Transform, PHT). Если на входе PHT a1 и a2, то на выходе:

b1 = (2a1 + a2) mod 256

b2 = (a1 + a2) mod 256

После r этапов выполняется заключительное преобразование. Оно совпадает с преобразованием, являющимся первым действием каждого этапа. Над B1, B4, B5 и B8 выполняется XOR с соответствующими байтами последнего подключа, а B2, B3, B6 и B7 складываются с соответствующими байтами последнего подключа. В результате и получается шифротекст.

Дешифрирование представляет собой обратный процесс: сначала заключительное преобразование (с вычитанием вместо сложения), затем r инвертированных этапов. Обратное PHT (Inverse PHT, IPHT) - это:

a1 = (b1 - b2) mod 256

a2 = (-b1 + 2b2) mod 256

Массей рекомендует использовать 6 этапов, но для большей безопасности количество этапов можно увеличить.

Генерировать подключи совсем не трудно. Первый подключ, K1, - это просто ключ пользователя. Последующие ключи генерируются в соответствии со следующей процедурой:

Ki+1 = (Ki <<<3i) + ci

Символ "<<<" обозначает циклический сдвиг налево. Сдвиг выполняется побайтно, а ci является константой этапа. Если cij - это j-ый байт константы i-го этапа, то можно рассчитать все константы этапов по следующей формуле

cij = 4545^((9i+j) mod 256) mod 257 mod 257

Обычно эти значения хранятся в таблице.