![]() |
![]() |
![]() |
Вход на сайт Навигация по сайту Любить и уважать Бонус-счастливчики
|
Содержимое файла ". . .. RijnDael.doc" (без форматирования) Методические указания к лабораторной работе №6 ШифрRijnDael Цель работы: Углубление знаний о структуре и механизме работы шифра RijnDael (РайнДал). Лабораторное задание: Для каждой бригады необходимо выбрать осмысленное слово или словосочетание из 16 букв (открытый текст) и перевести его в двоичный код. Также необходимо выбрать последовательность из 16 символов, которая будет являться ключом для шифра. Используя упрощенный алгоритм RijnDael (имеющий только два раунда), необходимо зашифровать выбранное словосочетание (открытый текст) с выбранным ключом. После того, как будет получен шифротекст, группы должны обменяться сообщениями, состоящими из шифротекста и своего ключа. Далее необходимо расшифровать полученный от другой бригады шифротекст при помощи полученного ключа с использованием обратного алгоритма RijnDael. Полученный блок из 16 байт необходимо перевести в символы. Указания к выполнению работы 1. Прежде всего, необходимо выбрать открытый текст. Его длина должна быть близка к 16 буквам, но не больше. Открытый текст нужно записать в протоколе. Это должно быть осмысленное слово или словосочетание на русском или английском языке. Далее, нужно записать открытый текст в виде последовательности байтов. Для этого удобно использовать кодировку ASCII. Воспользуйтесь утилитой Таблица символов ASCII для того чтобы определить, какой именно байт соответствует каждой букве текста. Запишите последовательность байтов под открытым текстом. Если длина вашего открытого текста меньше 16 букв, необходимо дополнить последовательность байтов нулевыми байтами $00, так чтобы получить блок данных длиной в 16 байт. 2. Далее необходимо выбрать ключ. Его длина тоже должна быть равна 16 байтам, но это не обязательно должны быть осмысленные слова. Естественно, для выбора ключа нужно использовать только различимые символы в таблице ASCII. Ключ также необходимо перевести в цифровую форму при помощи той же утилиты, что и открытый текст. Символьное и байтовое выражение ключа тоже должно быть зафиксировано в протоколе. 3. Байты в лабораторной работе записываются в виде двух шестнадцатеричных чисел, например $a5 или $08. Для внесения определенности, в этом методическом указании перед значениями байтов ставится знак доллара $. На рисунках байты могут также изображаться, как пара чисел в фигурных скобках, например:{0b}. 4. В процессе шифрования все операции будут проводиться с переменной state (переменной состояния), которая представляет собой массив из 16 байтов, расположенных в виде квадрата4x4 (рис.1). 5. Перед началом процесса шифрования нужно заполнить переменную state открытым текстом в цифровом виде – по байту в ячейку в таком порядке, как показано на рисунке1. После того, как сообщение будет полностью зашифровано, и его можно будет передавать, оно должно быть прочтено из переменной state в таком же порядке. Шифрование будет производиться по стандартному алгоритму AES-128 с одним только различием – количество раундов при шифровании и дешифровании уменьшено с 10 до 2. Размер блока – 128 бит (16 байт), размер ключа – 128 бит (16 байт). Структурная схема процесса шифрования AES Для того, чтобы зашифровать открытый текст, необходимо произвести над переменной state последовательно преобразования, указанные на рис. 2. Рассмотрим эти преобразования. Преобразование SubBytes (Замена байтов) Это преобразование заключается в том, что каждый из 16 байтов переменной state заменяется другим по некоторому закону. Для этого используется табл. 1. Чтобы заменить байт, нужно найти строку, соответствующую первой половине байта, и столбец, соответствующий второй половине. На их пересечении и будет находиться искомый байт. Его нужно записать на место заменяемого. Преобразование ShiftRows (Сдвиг строк) Процедура ShiftRows заключается в том, что во второй строке state все байты циклически сдвигаются влево на один байт, в третей – на два байта, в четвертой – на три байта (рис. 3). Преобразование MixColumns (Смешивание в столбцах) Преобразование MixColumns выполняется четыре раза – по разу для каждого столбца переменной state. Эту операцию можно записать в матричном виде: SX,C – значения байтов в столбцах до преобразования, а S’X,C – после. Умножение матрицы на столбец выполняется по обычным правилам: строка на столбец. Можно получить формулы для расчета каждого байта в столбце: Следует отдельно обратить внимание на операции, которые производятся с байтами в этих формулах. Это операции в конечном поле шифра RijnDael. Операция сложения в поле RijnDael переопределена: байты не просто арифметически складываются; чтобы найти сумму двух байтов в этом поле, находят побитовое исключающее или этих байтов – xor. В формулах операция xor обозначена плюсом в кружке – . Для удобного нахождения результата xor двух байтов можно воспользоваться утилитой Сложение в поле RijnDael. Операция умножения двух байтов в конечном поле RijnDael также переопределена. Это сложная операция, которая не может быть представлена простыми побитовыми командами. Для реализации этой операции в криптосистемах используется специальная подпрограмма. В формулах эта операция обозначается крупной точкой – •. Для определения произведения двух байтов можно воспользоваться утилитой Умножение в поле RijnDael. Под значениями {02} и {03} в формулах понимаются байты $02 (0000 0010) и $03 (0000 0011). Преобразоваение AddRoundKey Это преобразование заключается в том, что каждый байт переменной state исключающе суммируется (xor) c соответствующим байтом ключа. В укороченном алгоритме эта процедура проделывается три раза. Каждый раз в процедуре принимают участие различные части ключа. Таким образом, для укороченного алгоритма необходимо сгенерировать 3*16 = 48 байт ключа. Алгоритм генерирования полного ключа шифра RijnDael Исходный ключ шифра имеет длину 128 бит (16 байт). Он записывается в переменную, имеющую такую же структуру, как и state – 4 на 4 байта. Запись производится так же, как и запись в state – сверху вниз, слева направо (рис. 1). Все 16 байт исходного ключа уже являются первыми 16-ю байтами полного ключа. Следующие 16 байт генерируются следующим образом: Копируется последний (4-ый) столбец исходного ключа. Байты в нем циклически сдвигаются на один байт вверх. Самый верхний байт перемещается вниз. Каждый из 4-х его байтов заменяется при помощи процедуры SubBytes; Результирующий столбец исключающе складывается (xor) с первым столбцом исходного ключа и с первым столбцом массива rcon (этот столбец имеет $01 в верхнем байте и $00 в трех остальных). Результат записывается в первый столбец ключа первого раунда. Во второй столбец ключа первого раунда записывается исключающее или (xor) второго столбца ключа и первого столбца ключа первого раунда (рис. 4). В (i-тый) столбец ключа первого раунда записывается исключающее или (xor) (i – 1)-го столбца и (i – 4)-го столбца полного ключа. Первый столбец ключа 2-го раунда генерируется аналогично первому столбцу ключа 1-го раунда, с тем исключением, что для генерации используется ключ первого раунда вместо исходного ключа, а также используется второй столбец массива rcon (этот столбец имеет $02 в верхнем байте и $00 в трех остальных). Остальные столбцы ключа 2-го раунда генерируются согласно п.5. Дешиифрование AES Чтобы дешифровать блок данных, зашифрованный AES, необходимо знать ключ. Генерирование полного ключа при дешифровании производится точно так же, как и при шифровании. Но в процедуры AddRoundKey подключи должны подаваться в обратном порядке. В лабораторной работе ключ нужно передать вместе с сообщением. Рассмотрим последовательность действий, которую необходимо выполнить, чтобы расшифровать сообщение, зашифрованное AES. Структурная схема процесса дешифрования AES Для дешифрования сообщения необходимо проделать с переменной state обратную последовательность операций, каждая из которых отменит соответствующую операцию шифрования. Порядок операций, а также порядок использования подключей показан на рис. 5. Так как процедура AddRoundKey использует только операцию xor, она же и является собственной обратной операцией. Для других же процедур обратные операции существенно отличаются, поэтому им даны другие названия, приставка Inv- в названии |
Посетителей: 36, из них зарегестрированных: 0, гостей: 36 Зарегистрированные пользователи: Подробно | Страница сгенерирована за 0.1406 сек. |