Способ итеративного шифрования блоков двоичных данных
Реферат
Изобретение относится к области электросвязи и вычислительной техники, а конкретнее к области криптографических способов и устройств для шифрования данных. В основу изобретения положена задача уменьшения числа раундов шифрования, благодаря чему повышается скорость шифрования. Способ заключается в формировании секретного ключа в виде совокупности m-битовых подключей, разбиении блока данных на два n-битовых подблока L и R, выполнении N2 раундов шифрования, каждый из которых включает вычисление значения раундовой функции F путем формирования по подблоку R и по крайней мере одному m-битовому подключу n-битового двоичного вектора V1 и преобразования двоичного вектора V1 и наложении с помощью двухместной операции значения раундовой функции F на подблок L. Новым является то, что при вычислении раундовой функции F дополнительно формируют по крайней мере еще один двоичный вектор V2, преобразуют двоичный вектор V2, а значение раундовой функции F формируют по преобразованным значениям двоичных векторов V1 и V2. Новым является также то, что двоичные векторы V1 и V2 преобразуют поочередно. Кроме того, новым является то, что двоичные векторы V1 и V2 преобразуют одновременно. Кроме того, новым является и то, что по двоичным векторам V1 и V2 формируют расширенный двоичный вектор и над расширенным двоичным вектором выполняют операцию перестановки. 3 з.п.ф-лы, 4 ил.
Изобретение относится к области электросвязи и вычислительной техники, а конкретнее к области криптографических способов и устройств для шифрования сообщений (информации).
В совокупности признаков заявляемого способа используются следующие термины: - секретный ключ представляет из себя двоичную информацию, известную только законному пользователю; - шифрование - процесс преобразования информации, который зависит от секретного ключа и преобразует исходный текст в шифртекст (криптограмму), представляющий собой псевдослучайную последовательность знаков, из которой получение информации без знания секретного ключа практически неосуществимо; - дешифрование - процесс, обратный процедуре шифрования; дешифрование обеспечивает восстановление информации по криптограмме при знании секретного ключа; - шифр представляет собой совокупность элементарных шагов преобразования входных данных с использованием секретного ключа; шифр может быть реализован в виде программы для ЭВМ или в виде отдельного устройства; - двоичный вектор - это некоторая последовательность нулевых и единичных битов, например (101101011); конкретная структура двоичного вектора может быть интерпретирована как двоичное число, если считать, что позиция каждого бита соответствует двоичному разряду, т. е. двоичному вектору может быть сопоставлено целое число, значение которого однозначно определяется структурой двоичного вектора; - криптоанализ - метод вычисления секретного ключа для получения несанкционированного доступа к зашифрованной информации; - криптостойкость является мерой надежности защиты зашифрованной информации и представляет собой трудоемкость, измеренную в количестве элементарных операций, которые необходимо выполнить для восстановления информации по криптограмме при знании алгоритма преобразования, но без знания секретного ключа; в случае односторонних преобразований под криптостойкостью понимается сложность вычисления входного значения блока по его выходному значению; - одноместная операция - это операция, выполняемая над одним операндом (блоком данных или двоичным вектором); значение подблока после выполнения некоторой данной одноместной операции зависит только от его начального значения; примером одноместных операций являются операции циклического сдвига; - двухместная операция - это операция, выполняемая над двумя операндами; результат выполнения некоторой данной двухместной операции зависит от значения каждого операнда; примером двуместных операций являются операции сложения, вычитания, умножения и др.; - операция конкатенации - это операция объединения нескольких двоичных векторов, в результате которой формируется новый двоичный вектор, включающий все биты каждого из объединяемых двоичных векторов, причем взаимное расположение битов, соответствующих исходным двоичным векторам не изменяется; например, конкатенация двоичных векторов W1 = (101101011) и W2 = (011101010) записывается в виде W1|W2 = (101101011011101010); данные двоичные вектора могут быть объединены операцией конкатенации еще одним способом: W2|W1 = (011101010101101011); - атака на основе аппаратных ошибок - разновидность нападения на шифры, которая может быть осуществлена нападающим в случае, когда он имеет физический доступ к устройству шифрования и возможность вводить в устройство специально подобранные сообщения для шифрования и получать соответствующие им криптограммы. Известны способы блочного шифрования данных, см. например, шифр DES [B. Schneier, "Applied Cryptography", Second Eddition, John Wiley & Sons, Inc., New York, 1966, pp. 270-277] . В данном способе шифрование блоков данных выполняют путем формирования секретного ключа, разбиения преобразуемого блока данных на два подблока L и R и поочередного изменения последних путем выполнения операции поразрядного суммирования по модулю два над подблоком L и двоичным вектором, который формируется как выходное значение некоторой функции F от значения подблока R. После этого подблок R и преобразованный подблок L меняются местами. Функция F в указанном способе реализуется путем выполнения операций перестановки и подстановки, выполняемых над подблоком R. Данный способ обладает высокой скоростью преобразований при реализации в виде специализированных электронных схем. Однако, известный способ-аналог использует секретный ключ малого размера (56 бит), что делает его уязвимым к криптоанализу на основе подбора ключа. Последнее связано с высокой вычислительной мощностью современных ЭВМ. Другим известным способом блочного шифрования данных является способ, реализованный в шифре RC5 [B.Schneier, "Applied Cryptography", Second Eddition, John Wiley & Sons, Inc., New York, 1966, pp. 344-346] . Данный способ включает в себя формирование секретного ключа в виде совокупности подключей, разбиение двоичного кода информации на g-битовые информационные блоки и поочередное преобразование g-битовых блоков. Преобразование g-битовых блоков осуществляют путем разбиения g-битового блока данных на n-битовые подблоки A и B, и поочередное преобразование подблоков. Подблоки преобразуются путем выполнения над ними одноместных и двухместных операций. В качестве двуместных операций используются операции сложения по модулю 2n, где n = g/2 = 8, 16, 32, 64, и операция поразрядного суммирования по модулю 2. В качестве одноместной операции используется операция циклического сдвига влево, причем число бит, на которое сдвигается преобразуемый подблок, зависит от значения другого подблока, что определяет зависимость операции циклического сдвига на текущем шаге преобразования подблока от исходного значения входного блока данных. Двухместная операция выполняется над подблоком и под ключом, а также над двумя подблоками. Характерным для способа RC5 является использование операции циклического сдвига, зависящей от значения входного блока. Подблок, например подблок B, преобразуют путем наложения подблока A на подблок B с помощью операции поразрядного суммирования по модулю 2, т.е. выполняется операция поразрядного суммирования по модулю 2 (обозначаемая знаком ) над подблоками A и B и значение, получаемое после выполнения этой операции, присваивается подблоку B. Это записывается в виде соотношения B := B A, где знaк := обозначает операцию присваивания. После этого над подблоком B выполняют операцию циклического сдвига влево на число бит, равное значению подблока A: B := B <<< A. Затем над подблоком B и одним из подключей S выполняют операцию суммирования по модулю 2n (+), где n - длина подблока в битах: B:= (B+S) mod 2n. После этого аналогичным образом преобразуется подблок A. Выполняется несколько таких шагов преобразования обоих подблоков. Недостатком шифра RC5 является недостаточная стойкость к дифференциальному криптоанализу. Наиболее близким по своей технической сущности к заявляемому способу итеративного шифрования блоков двоичных данных является способ, описанный в Российском стандарте криптографической защиты данных [Стандарт СССР ГОСТ 28147-89. Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования] . Способ-прототип включает в себя формирование ключа шифрования в виде последовательности из 8 подключей длиной 32 бита, разбиение входной информации, представленной в виде двоичного кода, на участки длиной по 64 бит, формирование на их основе 64-битовых блоков данных и преобразование блоков под управлением ключа шифрования. Блок данных разбивается на два 32-битовых подблока A и B, которые поочередно преобразуются путем выполнения 32 раундов шифрования (итераций). Один раунд преобразования заключается в вычислении раундовой функции F. Раундовая функция вычисляется по подблоку B и по одному из подключей. Выходное значение раундовой функции представляет собой 32-битовое двоичное число. Вычисление раундовой функции осуществляется следующим образом. По подключу Qi и по подблоку B вычисляется значение F путем наложения на подблок B текущего подключа Qi, являющегося фиксированным для данного раунда, с помощью операции сложения по модулю 232 в соответствии с формулой F := (B + Qi) mod 232, где 1 i 8, после чего над значением F выполняют операцию подстановки, затем операцию циклического сдвига влево на одиннадцать бит, т.е. на одиннадцать двоичных разрядов в сторону старших разрядов. Полученное в результате этого значение F является вычисленным значением раундовой функции. Это значение накладывают на подблок A с помощью операции поразрядного суммирования по модулю два () в соответствии с формулой A := A F. После каждого раунда шифрования, за исключением последнего раунда, подблоки переставляются. Операция подстановки выполняется следующим образом. Двоичный вектор F разбивается на 8 двоичных векторов длиной по 4 бит. Каждый двоичный вектор заменяется двоичным вектором из таблицы подстановок. Выбранные из таблицы подстановок 8 4-битовых векторов объединяются в преобразованный 32-битовый двоичный вектор F. Однако, способ-прототип имеет недостатки, а именно, по известному значению B и нескольким известным битам значения раундовой функции легко вычисляется несколько бит раундового подключа, что обусловливает низкую криптостойкость способа-прототипа к атакам на основе аппаратных ошибках. В основу изобретения положена задача разработать способ итеративного шифрования блоков двоичных данных, в котором вычисление раундовой функции осуществлялось бы таким образом, чтобы обеспечивалась высокая сложность вычисления раундового подключа по известному значению раундовой функции, благодаря чему повышается стойкость шифров к атакам на основе аппаратных ошибок. Поставленная цель достигается тем, что в способе итеративного шифрования блоков двоичных данных, заключающемся в формировании секретного ключа в виде совокупности m-битовых подключей, разбиении блока данных на два n-битовых подблока L и R, выполнении N 2 раундов шифрования, каждый из которых включает вычисление значения раундовой функции F путем формирования по подблоку R и по крайней мере одному m-битовому подключу n-битового двоичного вектора V1 и преобразования двоичного вектора V1, и наложении с помощью двухместной операции значения раундовой функции F на подблок L, новым, согласно изобретению, является то, что при вычислении раундовой функции F дополнительно формируют по крайней мере еще один двоичный вектор V2, преобразуют двоичный вектор V2, а значение раундовой функции F формируют по преобразованным значениям двоичных векторов V1 и V2. Благодаря такому решению обеспечивается повышение стойкости шифра к атакам на основе аппаратных ошибок. Новым является также то, что двоичные векторы V1 и V2 преобразуют поочередно. Благодаря такому решению обеспечивается упрощение аппаратной реализации итеративного шифрования. Новым является также то, что двоичные векторы V1 и V2 преобразуют одновременно. Благодаря такому решению обеспечивается повышение скорости шифрования. Кроме того, новым является то, что по двоичным векторам V1 и V2 формируют расширенный двоичный вектор и над расширенным двоичным вектором выполняют операцию перестановки. Благодаря такому решению обеспечивается дополнительное повышение криптостойкости. Ниже сущность заявляемого изобретения более подробно разъясняется примерами его осуществления со ссылками на прилагаемые чертежи. В рассматриваемых примерах в качестве базовой операции преобразования используется управляемая операция перестановки, под которой понимается осуществление перестановки битов входного блока в зависимости от какого-либо переменного параметра, участвующего в преобразовании. Такими переменными параметрами могут быть подключи, подблоки данных или специально вырабатываемые значения, изменяющиеся с изменением исходного значения информационного блока. В общем случае значение, управляющее операцией перестановки, будем называть управляющим кодом U. Под формированием управляющего кода U будем понимать формирование сигналов на управляющем входе управляемого операционного блока перестановок. Управляемым операционным блоком перестановок будем называть устройство преобразования, имеющее n-разрядный информационный вход, n-разрядный выход и m-разрядный управляющий вход. Управляемый операционный блок перестановок (P-блок) выполняет операцию перестановки битов информационного блока, подаваемого на информационный вход P-блока, зависящую от значения сигналов на m-разрядном управляющем входе. Совокупность всех сигналов на управляющем входе составляет управляющий код U, значение которого задает конкретный вариант перестановки битов преобразуемого двоичного вектора. Конкретный вид (или тип) управляемой операции перестановки P длины n характеризуется упорядоченным множеством где U - фиксированные перестановки длины n, которые в общем случае являются различными, U - значение управляющего кода, m - разрядность управляющего кода. Могут быть сконструированы P-блоки со значением m, удовлетворяющим следующим условиям: 1) m < n, 2) m = n и 3) m > n. Для практического построения устройств криптографического преобразования интерес представляют P-блоки со значением n = 32,64 и значением m, в два и более раз превышающем значение n. В этих случаях формируется управляющий код, имеющий соответствующую длину. Например, управляющий код может быть сформирован путем повторения двоичного вектора V:U = V|V|...|V. Управляемая перестановка действует на преобразуемый двоичный вектор V следующим образом. По значению управляющего кода U выбирается модификация U, в соответствии с фиксированной перестановкой U осуществляется перестановка битов информационного блока T, в результате которой формируется значение PU(T). Управляемые операционные блоки перестановок могут быть легко реализованы в виде несложных быстро действующих комбинационных электронных схем, использующих в качестве базового узла элементарные блоки P2/1. На фиг. 1 представлены Р-блоки следующих видов: P2/1 (а), P4/4 (б), P16/32 (в) и P32/80 (г), где использована запись Pn/m для обозначения P-блока с n-битовым информационным входом и m-битовым управляющим входом. На фиг. 1а показан блок P2/1, где u - управляющий сигнал, a и b - входные сигналы данных, c и d - выходные сигналы данных. При u = 1 линия а коммутируется с линией с, а линия b - с линией d. При u = 0 линия а коммутируется с линией d, а линия b - с линией с. Таким образом, при значении управляющего бита u = 0 осуществляется перестановка двух входных битов, а при u = 1 входные биты не переставляются. Для блока P4/4 на фиг. 1б предусмотрено использование 4-разрядного управляющего кода. Он реализует 16 уникальных перестановок из 24 возможных перестановок четырех битов. Из схемы этого блока легко установить, что он реализует перестановки равновероятного смещения, т.е. для случайного значения управляющего кода каждый входной бит с одинаковой вероятностью может переместиться в любой разряд выходного двоичного вектора. Блок P16/32 (фиг. 1в) построен на основе восьми блоков P4/4. В блоке P16/32 16 бит преобразуемого двоичного вектора поступают на вход четырех блоков P4/4 первой ступени. Выход первой ступени соединен со входом второй таким образом, что все выходные биты каждого из четырех блоков P4/4 первой ступени поступают на вход разных блоков P4/4 второй ступени. Поскольку для случайного значения управляющего кода любой входной бит на выходе первой ступени с равной вероятностью может оказаться на входе любого 4-битового блока второй ступени, то на выходе второй ступени этот бит может оказаться с одинаковой вероятностью в любом из 16 двоичных разрядов. Легко показать, что блок P32/80 (фиг. 1г) также формирует перестановки равновероятного смещения. Он состоит из двух ступеней. Первая ступень включает два блока P16/32, вторая - 16 элементарных переключателей, на вход которых подаются биты с выхода двух разных блоков P16/32. Рассмотренные выше P-блоки типа P4/4, P16/32, P32/80 реализуют уникальные перестановки для каждого значения управляющего кода. Аналогичным способом могут быть построены P-блоки других типов, например, P32/64, P64/96, P64/128, P128/256 и др. P-блоки с одинаковым числом информационных и управляющих входов могут между собой различаться по строению. Например, могут быть разработаны много различных вариантов блоков типа P32/64. P-блоки с рассмотренной выше структурой реализуются с помощью комбинационных электрических схем, обладающих высоким быстродействием. P-блоки перспективны для построения раундовых функций шифрования F вместо обычно используемых блоков подстановки, имеющих низкое быстродействие. Современная микроэлектронная технология позволяет изготавливать недорогие электронные устройства, основанные на управляемых перестановках и обеспечивающие высокую скорость шифрования. Рассмотрим конкретные примеры реализации заявляемого способа итеративного шифрования блоков двоичных данных. Пример 1: шифрование 64-битового блока данных T. Пример 1 поясняется на фиг. 2, где P и P' - управляемые операционные блоки перестановок с 32-битовым информационным входом и 64-битовым управляющим входом. Сформировать секретный ключ, представленный в виде следующей совокупности 32-битовых раундовых подключей: К1, К2,..., K16. Разбить блок данных на два подблока L = Т div 232 и R = Т mod 232, где div - операция целочисленного деления (на 232) и mod - операция взятия остатка от деления (на 232). Таким образом, подблок L представляет собой старшие 32 бита блока данных T, а подблок R - младшие 32 бита блока данных Т. Шифрование блока данных выполнить в соответствии со следующим алгоритмом. 1. Установить счетчик числа раундов шифрования r := 1. 2. Сформировать по подблоку L и подключу Кr двоичный вектор V1: V1 := (L + Kr) mod 232. 3. Используя операцию поразрядного суммирования по модулю 2, сформировать двоичный вектор V2 по подключу Кr и двоичному вектору V1: V2 := V1 Kr. 4. Сформировать по двоичному вектору V1 управляющий код U1: U1 := V1|V1. 5. Сформировать по двоичному вектору V2 управляющий код U2: U2 := V2|V2. 6. Преобразовать двоичный вектор V1, выполнив над ним управляемую операцию перестановки, осуществляемую операционным блоком P', в зависимости от значения управляющего кода U2: V1 := P'U2(V1). 7. Преобразовать двоичный вектор V2, выполнив над ним управляемую операцию перестановки, осуществляемую операционным блоком P, в зависимости от значения управляющего кода U1: V2 := P'U1(V2). 8. По значениям преобразованных двоичных векторов вычислить значение раундовой функции: F := (V1 + V2) mod 232. 9. Используя операцию поразрядного суммирования по модулю 2, наложить значение F на подблок R: R := R F. 10. Если r < 16, то прирастить r := r + 1, переставить подблоки L и R (т. е. взять двоичный вектор L в качестве двоичного вектора R, а двоичный вектор R - в качестве двоичного вектора L) и перейти к шагу 2. 11. СТОП. Преобразования, соответствующие шагам 4 и 6, выполняются одновременно с выполнением шагов 5 и 7. Блок криптограммы C формируется путем объединения преобразованных подблоков L и R: C = L|R. Дешифрование блока криптограммы осуществляется с помощью этого же алгоритма, с той лишь разницей, что при выполнении шагов 2 и 3 используется подключ K17-r вместо подключа Кr. Пример 2: шифрование 64-битового блока данных Т. Пример 2 поясняется на фиг. 3, где операционные блоки P, P' и P'' представляют собой блоки типа P32/64. Сформировать секретный ключ, представленный в виде следующей совокупности 32-битовых раундовых подключей: K1, К2,..., K10 и Q1, Q2,..., Q10. Разбить блок данных на два 32-битовых подблока L = Т div 232 и R = Т mod 232. Шифрование блока данных выполнить в соответствии со следующим алгоритмом. 1. Установить счетчик числа раундов шифрования r := 1. 2. Сформировать по подключу Кr и подблоку L двоичный вектор V1 и управляющий код U1: V1 := Кr L, U1:= V1|V1. 3. Сформировать по подблоку L двоичный вектор V2 и управляющий код U2: V2 := L, U2 := V2|V2. 4. Сформировать по подключу Qr и подблоку L двоичный вектор V3 и управляющий код U3: V3 := Qr L, U3 := V3|V3 . 5. В зависимости от значения U1 преобразовать двоичный вектор V2, выполнив над ним управляемую операцию перестановки с помощью операционного блока P': V2 := P'U1(V2). 6. В зависимости от значения U2 преобразовать двоичный вектор V3, выполнив над ним управляемую операцию перестановки с помощью операционного блока Р'': V3 := P''U2(V3). 7. В зависимости от значения U3 преобразовать двоичный вектор V1, выполнив над ним управляемую операцию перестановки с помощью операционного блока P: V1 := PU3(V1). 8. С помощью операции поразрядного суммирования по модулю 2 наложить преобразованный двоичный вектор V2 на преобразованный двоичный вектор V1: V1 := V1 V2. 9. По преобразованным значениям двоичных векторов V1 и V3 вычислить значение раундовой функции F: F := (V1 + V3) mod 232. 10. Используя операцию поразрядного суммирования по модулю 2, наложить значение раундовой функции F на подблок R: R := R F. 11. Если r < 10, то прирастить r := r + 1, переставить подблоки L и R и перейти к шагу 2. 12. СТОП. Блок криптограммы C представляет собой конкатенацию преобразованных подблоков L и R: C = L|R. Дешифрование блока криптограммы осуществляется с помощью этого же алгоритма с той лишь разницей, что при выполнении шага 2 используется подключ K11-r вместо подключа Kr, а при выполнении шага 4 - подключ Q11-r вместо Qr. Пример 1 показывает вариант поочередного преобразования двоичных векторов при вычислении значения раундовой функции, а пример 2 - вариант одновременного преобразования двоичных векторов. Второй вариант может быть также реализован путем перестановки некоторых битов двоичного вектора V1 на позиции битов двоичного вектора V2 и битов V2 на позиции битов V1. Это может быть осуществлено, например, путем объединения двоичных векторов V1 и V2 в расширенный двоичный вектор E и выполнения над E операции перестановки. Данный вариант поясняется примером 3. Пример 3: шифрование 64-битового блока данных Т. Пример 3 поясняется на фиг. 4, где P - управляемый операционный блок с 64-битовым информационным входом и 128-битовым управляющим входом. Сформировать секретный ключ, представленный в виде следующей совокупности 32-битовых раундовых подключей: K1, K2,..., K10 и Q1, Q2,..., Q10. Разбить блок данных на два подблока L = Т div 232 и R = Т mod 232. Шифрование блока данных выполнить в соответствии со следующим алгоритмом. 1. Установить счетчик числа раундов шифрования r := 1. 2. Сформировать по подключу Kr двоичный вектор V1: V1 := Kr. 3. Сформировать по подблоку L и подключу Qr двоичный вектор V2: V2 := L Qr. 4. Сформировать по подключу Qr и подблоку L 128-битовый управляющий код U: U := Qr|L|Qr|L. 5. Объединить 32-битовые двоичные векторы V1 и V2 в расширенный 64-битовый двоичный вектор E: E := V1|V2. 6. В зависимости от значения U преобразовать двоичный вектор E, выполнив над ним управляемую операцию перестановки с помощью операционного блока P: E := PU(Е). 7. Взять в качестве преобразованного значения двоичных векторов V1 (V2) старшие (младшие) 32 бита расширенного двоичного вектора E: V1 := E div 232 и V2 := E mod 232. 8. По значениям двоичных векторов V1 и V2 вычислить значение раундовой функции F: F := (V1 + V2) div 232. 9. Используя операцию поразрядного суммирования по модулю 2, наложить значение раундовой функции F на подблок R: R := R F. 10. Если r < 10, то прирастить r := r + 1, переставить подблоки L и R и перейти к шагу 2. 11. СТОП. Блок криптограммы C представляет собой конкатенацию преобразованных подблоков L и R: C = L|R. Дешифрование блока криптограммы осуществляется с помощью этого же алгоритма за исключением того, что при выполнении шага 2 используется подключ К11-r вместо подключа Kr, а при выполнении шагов 3 и 4 - подключ Q11-r вместо Qr. В рассмотренных примерах обеспечивается высокая сложность вычисления раундового подключа по известному значению раундовой функции и известному значению подблока L, а именно, в примере 1 для этого в среднем надо выполнить около 2 109 вычислений раундовой функции, а в примерах 2 и 3 - около 4 1018 вычислений раундовой функции, благодаря чему повышается стойкость шифров к атакам на основе аппаратных ошибок. Приведенные примеры показывают, что предлагаемый способ криптографических преобразований блоков двоичных данных технически реализуем и позволяет решить поставленную задачу.Формула изобретения
1. Способ итеративного шифрования данных блоков двоичных данных, заключающийся в формировании секретного ключа в виде совокупности m-битовых подключей, разбиении блока данных на два n-битовых подблока L и R, выполнении N 2 раундов шифрования, каждый из которых включает формирование по подблоку R и по крайней мере одному m-битовому подключу двоичного вектора V1, преобразование двоичного вектора V1, вычисление значения раундовой функции F и наложение с помощью двуместной операции значения раундовой функции F на подблок L, отличающийся тем, что дополнительно формируют по крайней мере еще один двоичный вектор V2, преобразуют двоичный вектор V2, а значение раундовой функции F вычисляют по преобразованным значениям двоичных векторов V1 и V2. 2. Способ по п.1, отличающийся тем, что двоичные векторы V1 и V2 преобразуют поочередно. 3. Способ по п.1, отличающийся тем, что двоичные векторы V1 и V2 преобразуют одновременно. 4. Способ по п.3, отличающийся тем, что двоичным векторам V1 и V2 формируют расширенный двоичный вектор и над расширенным двоичным вектором выполняют операцию перестановки.РИСУНКИ
Рисунок 1, Рисунок 2, Рисунок 3, Рисунок 4