MADRYGA (в честь автора W. E. Madryga) — блочный алгоритм шифрования, созданный В. Е. Мадрига в 1984 году.
Этот алгоритм разработан для простой и эффективной реализации шифрования внутри программного обеспечения. Все операции алгоритм выполняет над байтами.
При проектировании алгоритма автор решал следующие задачи:
Алгоритм DES удовлетворял первым девяти требованиям, но последние три стали новыми. Они дают этому алгоритму возможность программных реализаций.
Madryga состоит из двух вложенных циклов. Внешний цикл повторяется восемь раз (но это количество может быть увеличено для повышения безопасности) и содержит применение внутреннего цикла к открытому тексту. Внутренний цикл превращает открытый текст в шифротекст, повторяясь для каждого 8-битового блока (байта) открытого текста. Следовательно, весь открытый текст восемь раз последовательно обрабатывается алгоритмом.
Итерация внутреннего цикла оперирует с 3-байтовым окном данных, называемым рабочим кадром. Это окно смещается на один байт за итерацию. Первые две байта рабочего кадра циклически сдвигаются на переменное число позиций, а для последнего байта выполняется XOR с некоторыми битами ключа. По мере продвижения рабочего кадра все байты последовательно «вращаются» и подвергаются операции XOR с частями ключа. Последовательные вращения перемешивают результаты предыдущих операций XOR и вращения, а результат XOR влияет на вращение. Это делает процесс обратимым.
Так как каждый байт данных влияет на да байта слева от себя и на один байт справа, после восьми проходов каждый байт шифротекста зависит от 16 байтов слева и от восьми байтов справа.
При шифровании каждая операция внутреннего цикла устанавливает рабочий кадр на предпоследний байт текста и циклически перемещает его к байту открытого текста, третьему слева от последнего. Сначала весь ключ подвергается операции XOR со случайной константой, а затем циклически смещается влево на 3 бита. Младшие три бита младшего байта рабочего кадра сохраняются, они определяют вращение остальных двух байтов. Затем для младшего байта рабочего кадра выполняется операция XOR с младшим байтом ключа. Далее объединение двух старших байтов циклически смещается влево на переменное число битов (от 0 до 7). Наконец рабочий кадр смещается вправо на один байт и весь процесс повторяется.
Смысл случайной константы в том, чтобы превратить ключ в псевдослучайную последовательность. Длина константы должна быть равна длине ключа. При обмене данными абоненты должны пользоваться константами одинаковой длины. Для 64-битового ключа Мадрига рекомендует константу 0x0f1e2d3c4b5a6978.
При дешифровании процесс инвертируется. При каждой итерации внутреннего цикла рабочий кадр устанавливается на байт, третий слева от последнего байта шифротекста, и циклически перемещается в обратном направлении до байта, который находится на два байта левее последнего байта шифротекста. И ключ и два байта шифротекста в процессе циклически смещаются направо, а XOR выполняется перед циклическими сдвигами.
Исследователи из Технического Университета в Квинсланде (Queensland University of Technology) исследовали Madryga вместе с некоторыми другими блочными шифрами. Они обнаружили, что в этом алгоритме не проявляется лавинный эффект для преобразования открытого текста в шифротекст. Кроме того, во многих шифротекстах процент единиц был выше чем процент нулей.
При поверхностном знакомстве с алгоритмом Эли Бихам пришёл к следующим выводам:
Для улучшения этой статьи желательно: |