Рефераты. Композиции шифров

        Меркл предполагал, что в алгоритме Khafre следует использовать 64- или 128-битовые ключи и что в этом алгоритме понадобится большее число раундов, чем в Khufu. Это, наряду с тем, что каждый раунд Khafre сложнее раунда Khufu, делает Khafre менее скоростным. Зато алгоритму Khafre не нужны никакие предварительные расчеты, что ускорит шифрование небольших порций данных.

        В 1990 году Бихам и Шамир применили свой метод дифференциального криптоанализа к алгоритму Khafre. Им удалось взломать 16-раундовый Khafre атакой с подобранным открытым текстом, используя около 1500 различных шифрований. На их персональном компьютере это заняло около часа. Преобразование этой атаки в атаку с известным открытым текстом потребует около 238 шифрований. Алгоритм Khafre с 24 раундами можно взломать с помощью атаки с подобранным открытым текстом за 253 шифрования, а с помощью атаки с известным открытым текстом – за 259 шифрования.


        Алгоритмы Khufu и Khafre запатентованы. Исходный код этих алгоритмов приведен в патенте.


3.6. Алгоритм ММВ

      Недовольство использованием в одном из криптоалгоритмов 64-битового блока шифрования привело к созданию Джоаной Дэймен алгоритма под названием ММВ (Modular Multiplication-based Block cipher - модулярный мультипликативный блочный шифр). В основе ММВ лежит смешивание операций различных алгебраических групп. ММВ - итеративный алгоритм, главным образом состоящий из линейных действий (XOR и использование ключа) и параллельного применения четырех крупных обратимых нелинейных подстановок. Эти подстановки определяются с помощью умножения по модулю 232-1 с постоянными множителями. В итоге появляется алгоритм, использующий 128-битовый ключ и 128-битовый блок.

        Алгоритм ММВ оперирует 32-битовыми подблоками текста (х0, х1, х2, x3) и 32-битовыми подблоками ключа (k0, k1, k2, k3). Это упрощает реализацию алгоритма на современных 32-битовых   процессорах. Чередуясь с операцией   XOR, шесть раз используется нелинейная функция f. Вот этот алгоритм (все операции с индексами выполняются по модулю 4):

        xi = xi Å  ki для i = 0..3

        f(х0, х1, х2, x3)

        xi = xi Å  ki+1 для i = 0..3

        f(х0, х1, х2, x3)

        xi = xi Å  ki+2 для i = 0..3

        f(х0, х1, х2, x3)

        xi = xi Å  ki для i = 0..3

        f(х0, х1, х2, x3)

        xi = xi Å  ki+1 для i = 0..3

        f(х0, х1, х2, x3)

        xi = xi Å  ki+2 для i = 0..3

        f(х0, х1, х2, x3)


        Функция f исполняется в три шага:

1.     xi = сi * xi  для i = 0..3 (Если на входе умножения одни единицы, то на выходе - тоже одни единицы).

2.     Если младший значащий бит х0 = 1, то x0 = х0 Å  С. Если младший значащий байт х3 = 0, то х3 = х3 Å  С.

3.     xi = хi-1 Å   xi Å   хi+1 для i = 0..3. 

 

        Все операции с индексами выполняются по модулю 4. Операция умножения на шаге 1 выполняется по модулю 232-1. Специальный случай для данного алгоритма: если второй операнд равен 232-1, результат тоже равен 232-1. В алгоритме используются следующие константы:

С = 2ааааааа

c0 = 025f1cdb            

c1 = 2*c0

с2=23 *с0

с3=27 *с0

             Константа С - «простейшая» константа без круговой симметрии, высоким троичным весом и нулевым младшим значащим битом. У константы с0 есть другие особые характеристики. Константы c1, с2 и с3 - сдвинутые версии с0, и служат для предотвращения атак, основанных на симметрии.

        Расшифрование выполняется в обратном порядке, Этапы 2 и 3 инверсны им самим. На этапе 1 вместо сi используется сi-1 . Значение с0-1 = 0dad4694 .

3.6.1. Стойкость алгоритма  ММВ

        Схема алгоритма ММВ обеспечивает на каждом раунде значительное и независимое от ключа рассеивание. ММВ изначально проектировался в расчете на отсутствие слабых ключей.

        ММВ – это уже мертвый алгоритм. Это утверждение справедливо по многим причинам, хотя криптоанализ ММВ и не был опубликован. Во-первых, алгоритм проектировался без учета требования устойчивости к линейному криптоанализу. Устойчивость к дифференциальному криптоанализу обеспечил выбор мультипликативных множителей, но о существовании линейного криптоанализа авторы не знали.

        Во-вторых, Эли Бихам реализовал эффективную атаку с подобранным ключом, использующую тот факт, что все раунды идентичны, а развертка ключа – просто циклический сдвиг на 32 бита. В третьих, несмотря на эффективность программной реализации ММВ, аппаратное исполнение менее эффективно по сравнению с DES.

        Дэймен предлагает желающим улучшить алгоритм ММВ сначала проанализировать умножение по модулю с помощью линейного криптоанализа и подобрать новый множитель, а затем сделать константу С различной на каждом раунде. Затем улучшить развертку ключа, добавляя к ключам раундов константы с целью устранения смещения. Однако сам он не стал заниматься этим, а разработал алгоритм 3-Way.


3.7. Алгоритм Blowfish

        Blowfish - это алгоритм, разработанный Брюсом Шнайером специально для реализации на больших микропроцессорах. Алгоритм Blowfish не запатентован. При проектировании алгоритма Blowfish Шнайер пытался удовлетворить следующим критериям:

ü     Скорость. Программа, реализующая алгоритм Blowfish на 32-битовых микропроцессорах, шифрует данные со скоростью 26 тактов на байт.

ü     Компактность. Для исполнения программной реализации алгоритма Blowfish достаточно 5 Кбайт памяти.

ü     Простота. В алгоритме Blowfish используются только простые операции: сложение, XOR и подстановка из таблицы по 32-битовому операнду. Анализ его схемы несложен, что снижает риск ошибок реализации алгоритма.

ü     Настраиваемая стойкость. Длина ключа Blowfish переменна и может достигать 448 бит.


        Алгоритм Blowfish оптимизирован для применения в системах, не практикующих частой смены ключей, например, в линиях связи и программах автоматического шифрования файлов. При реализации на 32-битовых микропроцессорах с большим размером кэша данных, например, процессорах Pentium и PowerPC, алгоритм Blowfish заметно быстрее DES. Алгоритм Blowfish не годится для применения в случаях, где требуется частая смена ключей, например, в коммутаторах пакетов, или в качестве однонаправленной хэш-функции. Большие требования к памяти не позволяют использовать этот алгоритм в смарт-картах.

3.7.1. Описание алгоритма Blowfish

        Blowfish представляет собой 64-битовый блочный алгоритм шифрования с ключом переменной длины. Алгоритм состоит из двух частей: расширения ключа и шифрования данных. Расширение ключа преобразует ключ длиной до 448 битов в несколько массивов подключей общим размером 4168 байт.

        Шифрование данных заключается в последовательном исполнении простой функции 16 раз. На каждом раунде выполняются зависимая от ключа перестановка и зависимая от ключа и данных подстановка. Используются только операции сложения и XOR над 32-битовыми словами. Единственные дополнительные операции каждого раунда - четыре взятия данных из индексированного массива.

        В алгоритме Blowfish используется множество подключей. Эти подключи должны быть вычислены до начала зашифрования или расшифрования данных.

Рис 3. Алгоритм Blowfish

 

Р-массив состоит из восемнадцати 32-битовых подключей:

        Р1,Р2,...,Р18

Каждый из четырех 32-битовых S-блоков содержит 256 элементов:

        S1,0, S1,1,…, S1,255

             S2,0, S2,2,…, S2,255

             S3,0, S3,3,…, S3,255

             S4,0, S4,4,…, S4,255

Алгоритм Blowfish представляет собой сеть Файстеля, состоящей из 16 раундов. На вход подается 64-битовый элемент данных х. Для зашифрования данных:

        Разбить  х на  две  32-битовых половины: xL, xR

        Для i от 1 до 16:

               xL = xL Å   Pi

                         xR = F (xL) Å   xR

                         Переставить xL и xR

             Переставить xL и xR (отнять последнюю перестановку)

        xR = xR Å   P17

             xL = xL Å   P18

             Объединить xL и xR

 

Рис. 4. Функция F

       

Функция F рассчитывается следующим образом ( Рис. 4.):

        Разделить xL на четыре 8-битовых фрагмента: а, b, с и d

        F(xL) = ((S1,a + S2,bmod232)Å   S3,c) + S4,dmod232                                          

Расшифрование выполняется точно так же, как и зашифрование,  но Р1,Р2,...,Р18 используются в обратном порядке.

        В реализациях Blowfish, в которых требуется очень высокая скорость, цикл должен быть развернут, а все ключи храниться в кэше.

        Подключи рассчитываются с помощью самого алгоритма Blowfish. Вот какова точная последовательность действий.

1.     Сначала Р-массив, а затем четыре S-блока по порядку инициализируются фиксированной строкой. Эта строка состоит из шестнадцатеричных цифр π.

2.     Выполняется операция XOR над Р1 с первыми 32 битами ключа, XOR над Р2 со вторыми 32 битами ключа, и т.д. для всех битов ключа (вплоть до Р18). Операция XOR выполняется циклически над битами ключа до тех пор, пока весь Р-массив не будет инициализирован.

3.     Используя подключи, полученные на этапах 1 и 2, алгоритм Blowfish шифрует строку из одних нулей.

4.     Р1 и Р2 заменяются результатом этапа 3.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.