Хелпикс

Главная

Контакты

Случайная статья





Нелинейный модуль преобразования



Нелинейный модуль преобразования

Нелинейный модуль преобразования во многом аналогичен используемому в Российском шифраторе «Магма» (бывший ГОСТ 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 для фиксированных. Поэтому такое криптопреобразование получило название  «Русская Рулетка».

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.