|
|||
Нелинейный модуль преобразованияНелинейный модуль преобразования Нелинейный модуль преобразования во многом аналогичен используемому в Российском шифраторе «Магма» (бывший ГОСТ 28147-89) но имеет размер 16байт. Нелинейный модуль выполняет операции перестановки и кольцевого сдвига. Сначала выполняется перестановка, индексы 16байтовой перестановки задаются в алгоритме, для каждого модуля используется собственная перестановка. Затем выполняется кольцевой сдвиг фрагментов накопителя, сдвиги используются двух типов. Первый тип использует фиксированные коэффициенты сдвига, для каждого накопителя, они задаются в алгоритме. Кольцевые сдвиги выполняются над 2байтными фрагментами накопителя. Внутри каждого накопителя все сдвиги одинаковые. Второй тип кольцевого сдвига использует в качестве коэффициента сдвига переменное значение из накопителя сдвинутого в кольце нелинейных преобразователей на 8 позиций. Кольцевые сдвиги выполняются над 4байтными фрагментами 16байтного накопителя. Коэффициенты сдвига берутся из первого байта каждого 4байтного слова. Соответственно в таком модуле используется 4 сдвига с не предсказуемыми и различными коэффициентами сдвига. Сами циклические сдвигатели реализуют функцию частичной инверсии. Если в старшем разряде сдвигателя находится единичный бит, то старшие разряды инвертируются, число инвертируемых разрядов равняется числу коэффициента сдвига. Вот реализация модуля с переменным кольцевым сдвигом: vperm2i128 ymm8,ymm0,ymm0,001h; запомнить с обменом местами накопители vpshufb ymm0,ymm0,[r14+0100h]; две перестановки по 16 байт каждая vpand ymm8,ymm8,[r14]; обнуление в двойных словах разрядов 5-31 vpsubb ymm12,ymm15,ymm8; обратное значение для кольцевого сдвига vpsravd ymm8,ymm0,ymm8; сдвиг с размножением знакового разряда vpsllvd ymm0,ymm0,ymm12; сдвиг на освобожденные места vpxor ymm0,ymm0,ymm8; суммирование с частичным инвертированием
В регистре ymm15 содержится значение 020h в каждом двойном слове По адресу [r14+0100h] содержатся индексы перестановки По адресу [r14] содержится восемь масок сдвига со значением 01fh
Вот реализация модуля с фиксированным кольцевым сдвигом: vpshufb ymm1,ymm1,[r14+0100h]; две перестановки по 16 байт каждая vpsraw ymm14,ymm1,5; сдвиг с размножением знакового разряда vpsllw ymm1,ymm1,16-5; сдвиг на освобожденные места vpxor ymm1,ymm1,ymm14; суммирование с частичным инвертированием vpxor ymm1,ymm1,ymm2; суммирование накопителя с предшествующим
Если подсчитать общее количество кольцевых сдвигов в одном раунде преобразования, то их будет 4*16=64 для переменных сдвигов и 8*16=96 для фиксированных. Поэтому такое криптопреобразование получило название «Русская Рулетка».
|
|||
|