|
Краткое описание алгоритма
MARS является блочно-симметричным шифром с секретным ключом. Размер блока при шифровании 128 бита, размер ключа может варьироваться от 128 до 448 бит включительно (кратные 32 битам). Создатели стремились совместить в своём алгоритме быстроту кодирования и стойкость шифра. В результате получился один из самых криптостойких алгоритмов, участвовавших в конкурсе AES.
Алгоритм уникален тем, что использовал практически все существующие технологии, применяемые в криптоалгоритмах, а именно:
Использование двойного перемешивания представляет сложность для криптоанализа, что некоторые относят к недостаткам алгоритма. В то же время на данный момент не существует каких-либо эффективных атак на алгоритм, хотя некоторые ключи могут генерировать слабые подключи.
Структура алгоритма
Авторы шифра исходили из следующих предположений:
В шифре MARS использовались следующие методы шифрования:
Структуру алгоритма MARS можно описать следующим образом:
Прямое перемешивание
В первой фазе на каждое слово данных накладывается слово ключа, а затем происходит восемь раундов смешивания согласно сети Фейстеля третьего типа совместно с некоторыми дополнительными смешиваниями. В каждом раунде мы используем одно слово данных (называемое, исходным словом) для модификации трёх других слов(называемые, целевыми словами). Мы рассматриваем четыре байта исходного слова в качестве индексов на двух S-блоков, S0 и S1, каждый, состоящий из 256 32-разрядных слов, а далее проводим операции XOR или добавления данных соответствующего S-блока в три других слова.
Если четыре байта исходного слова b0, b1, b2, b3 (где b0 является первым байтом, а b3 является старшим байтом), то мы используем b0, b2, как индексы в блока S0 и байты b1, b3, как индексы в S-блоке S1. Сначала сделаем XOR S0 к первому целевому слову, а затем прибавим S1 к тому же слову. Мы также добавляем S0 ко второму целевому слову и XOR блока-S1 к третьему целевому слову. В заключении, мы вращаем исходное слово на 24 бита вправо.
В следующем раунде мы вращаем имеющиеся у нас четыре слова: таким образом, нынешнее первое целевое слово становится следующим исходным словом, текущее второе целевое слово становится новым первым целевым словом, третье целевое слово становится следующую вторым целевым словом, и текущее исходное слово становится третьим целевым словом.
Более того, после каждого из четырёх раундов мы добавляем одно из целевых слов обратно в исходное слово. В частности, после первого и пятого раундов мы добавим третье целевое слово обратно в исходное слово, а после второго и шестого раунда мы добавляем первое целевое слово обратно в исходное слово. Причиной этих дополнительных операций смешивания, является ликвидация нескольких простых дифференциальных криптоатак в фазе перемешивания, чтобы нарушить симметрию в фазе смешивания и получить быстрый поток.
Псевдокод
1. // Первое наложение ключа на данные
2.
3.
4. // Затем 8 раундов прямого перемешивания
5. // используем D[0] для модифицирования D[1]; D[2]; D[3]
6. // обращаемся к 4-ем S-блокам
7.
8.
9.
10.
11. // и вращаем исходное слово вправо
12.
13. // также проделаем дополнительные операции смешивания
14.
15. // добавим D[3] к исходному слову
16.
17. // добавим D[1] к исходному слову
18. // вращаем массив D[ ]
19.
20.
Криптографическое ядро
Криптографическое ядро MARS — сеть Фейстеля 3-го типа, содержащая в себе 16 раундов. В каждом раунде мы используем ключевую Е-функцию, которая является комбинацией умножений, вращений, а также обращений к S-блокам. Функция принимает на вход одно слово данных, а возвращает три слова, с которыми впоследствии будет осуществлена операция сложения или XOR к другим трем словам данным. В дополнении исходное слово вращается на 13 бит влево.
Для обеспечения, серьёзного сопротивления к криптоатакам, три выходных значения Е-функции(O1, O2, O3) используются в первых восьми раундах и в последних восьми раундах в разных порядках. В первые восемь раундов мы добавляем O1 и O2 к первому и второму целевому слову, соответственно, и XOR O3 к третьему целевому слову. За последние восемь раундов, мы добавляем O1 и O2 к третьему и второму целевому слову, соответственно, и XOR O3 к первому целевому слову.
Псевдокод
1. // Проделаем 16 раундов шифрования при использовании ключа
2.
3.
4.
5.
6. // сначала 8 раундов прямого преобразования
7.
8.
9. // потом 8 раундов обратного преобразования
10.
11.
12.
13. // вращаем массив D[ ]
14.
15.
Е-функция
E-функция принимает в качестве входных данных одно слово данных и использует ещё два ключевых слов, производя на выходе три слова. В этой функции мы используем три временные переменные, обозначаемые L, M и R (для левой, средней и правой).
Изначально мы устанавливаем в R значение исходного слова смещенного на 13 бит влево, а в M — сумма исходных слов и первого ключевого слова. Затем мы используем первые девять битов M как индекс к одной из 512 S-блоков (которое получается совмещением S0 и S1 смешиванием фазы), и сохраняем в L значение соответствующего S-блока.
Затем умножим второе ключевое слово на R, сохранив значение в R. Затем вращаем R на 5 позиций влево (так, 5 старших битов становятся 5 нижними битами R после вращения). Тогда мы делаем XOR R в L, а также просматриваем пять нижних бит R для определения величины сдвига (от 0 до 31), и вращаем M влево на эту величину. Далее мы вращаем R ещё на 5 позиций влево и делаем XOR в L. В заключении, мы вновь смотрим на 5 младших битов R, как на величину вращения и вращаем L на эту величину влево. Таким образом результат работы E-функции — 3 слова (по порядку): L, M, R.
Псевдокод
1. // используем 3 временные переменные L; M; R
2. Невозможно разобрать выражение(неизвестная ошибка):
//добавляем первое ключевое слово
3. // умножаем на второе ключевое слово, которое должно быть четным
4.
5. Невозможно разобрать выражение(неизвестная ошибка):
// взятие S-блока
6.
7. // эти биты описывают величину последующего вращения
8. // первое вращение на переменную величину
9.
10.
11.
12. // эти биты описывают величину последующего вращения
13. // второе вращение на переменную величину
14.
Дата добавления: 2015-10-26; просмотров: 148 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Как женщины не понимают мужчин | | | Обратное перемешивание |