Лекция 12. Практикум для студентов всех специальностей, использующих федеральный компонент по основам информационной безопасности и защите информации
Скачать 1.25 Mb.
|
Расширение ключа (Key Expansion) Расширенный ключ представляет собой линейный массив 4-х байтовых слов и обозначен как W[Nb*(Nr+1)]. Первые Nk слов содержат ключ шифрования. Все остальные слова определяются рекурсивно из слов с меньшими индексами. Алгоритм выработки ключей зависит от величины Nk: ниже приведена версия для Nk равного или меньшего 6 и версия для Nk большего 6. Для Nk<6 или Nk=6 мы имеем: KeyExpansion(CipherKey,W) { for (i = 0; i < Nk; i++) W[i] = CipherKey[i]; for (j = Nk; j < Nb*(Nk+1); j+=Nk) { W[j] = W[j-Nk] ^ SubByte( Rotl( W[j-1] ) ) ^ Rcon[j/Nk]; 53 for (i = 1; i < Nk && i+j < Nb*(Nr+1); i++) W[i+j] = W[i+j-Nk] ^ W[i+j-1]; } } Как можно заметить, первые Nk слов заполняются ключом шифрования. Каждое последующее слово W[i] получается посредством EXOR предыдущего слова W[i-1] и слова на Nk позиций ранее W[i-Nk]. Для слов, позиция которых кратна Nk, перед EXOR применяется преобразование к W[i-1], а затем еще прибавляется цикловая константа. Преобразование содержит циклический сдвиг байтов в слове, обозначенный как Rotl, затем следует SubByte - применение замены байт. Для Nk>6 мы имеем: KeyExpansion(CipherKey,W) { for (i=0; i W[j] = W[j-Nk] ^ SubByte(Rotl(W[j-1])) ^ Rcon[j/Nk]; for (i=1; i<4; i++) W[i+j] = W[i+j-Nk] ^ W[i+j-1]; W[j+4] = W[j+4-Nk] ^ SubByte(W[j+3]); for (i=5; i } Отличие для схемы при Nk>6 состоит в применении SubByte для каждого 4-го байта из Nk. Цикловая константа независит от Nk и определяется следующим образом: Rcon[i] = ( RC[i], '00' , '00' , '00' ), где RC[0]='01' RC[i]=xtime(Rcon[i-1]) 54 Шифрование Шифр Rijndael включает следующие преобразования: начальное добавление циклового ключа; Nr-1 циклов; заключительный цикл. На псевдо-Си это выглядит следующим образом: Rijndael (State, CipherKey) { KeyExpansion(CipherKey, ExpandedKey); // Расширение ключа AddRoundKey(State, ExpandedKey); // Добавление циклового ключа For ( i=1 ; i } Если предварительно выполнена процедура расширения ключа, то процедура будет выглядеть следующим образом: Rijndael (State, CipherKey) { AddRoundKey(State, ExpandedKey); For ( i=1 ; i } Описание демонстрационной программы Программа выполнена на языке C# и состоит из двух элементов – файла Rijndael.dll, содержащего реализацию алгоритма шифрования, и демонстрационного приложения RijndaelDemo.exe. Для работы приложения необходима ОС Windows с установленным .NET Framework v1.1. В основном окне демонстрационной программы задаются длина ключа, длина блока, можно посмотреть расширенный ключ шифрования, 55 вычисляемый в соответствии с заданным ключом шифрования. Основное окно программы Окно демонстрации расширенного ключа Также есть возможность подробно рассмотреть действие всех цикловых преобразований (ByteSub, ShiftRow, MixColumn, AddRoundKey) как при шифровании, так и при расшифровании. 56 При шифровании предлагается выбрать исходный файл и файл, куда будет помещен результат шифрования, при расшифровании соответственно зашифрованный файл и файл, предназначенный для помещения результата расшифрования. В процессе используются, указанные в главном окне программы, ключ шифрования и длины ключа и блока. 57 58 2. Задание 1. Ознакомиться со сведениями о программе RijndaelDemo , изложенными в разделе 1. Запустить модуль RijndaelDemo.exe. 2. Изучить на примере обычных текстовых файлов способы шифрования и расшифрования с помощью алгоритма Rijndael. Подробно рассмотреть действие всех цикловых преобразований (ByteSub, ShiftRow, MixColumn, AddRoundKey), как при шифровании, так и расшифровании. Исходный текст для шифрования может быть подготовлен заранее и сохранен в файле *.txt. 3. Сохранить в отчете экранные формы, демонстрирующие процесс шифрования и расшифрования информации, проанализировать полученные результаты. 4. Включить в отчет о лабораторной работе ответы на контрольные вопросы, выбранные в соответствии с номером варианта. 59 Номер варианта Контрольные вопросы 1,5,7,26 Сравните основные характеристики алгоритмов Rijndael и ГОСТ 28147-89. 2,4,6 Сравните основные характеристики алгоритмов Rijndael и DES. 11,13 Опишите структуру сети Фейстеля. 12,14,16 Приведите обобщенные схемы шифрования данных с помощью алгоритма Rijndael и ГОСТ 28147-89. Дайте их сравнительный анализ. 3,9,18,29 Сравните один раунд шифрования данных с помощью алгоритма Rijndael и ГОСТ 28147-89. 20,22,24 Сравните эквивалентность прямого и обратного преобразований в алгоритмах Rijndael и ГОСТ 28147-89. 10,17,19 Сравните выработку ключевой информации в алгоритмах Rijndael и ГОСТ 28147-89. 21,23,25 Сравните алгоримы Rijndael и ГОСТ 28147-89 по показателям диффузии. 8, 28,27 Сравните алгоримы Rijndael и ГОСТ 28147-89 по показателям стойкости. 12,15,30 Сравните алгоримы Rijndael и ГОСТ 28147-89 по показателям производительности и удобству реализации. 60 Список литературы 1. Бабаш А.В., Шанкин Г.П. Криптография. / Под редакцией В.П.Шерстюка, Э.А. Применко. – М.: СОЛОН-Р, 2007. – 512 с. 2. Бабаш А.В. Криптографические и теоретико-автоматные аспекты современной защиты информации. Криптографические методы защиты. – М.: Изд.центр ЕАОИ, 2009. – 414 с. 3. Баранова Е.К. Эффективное кодирование и защита информации: Текст лекций для студентов специальности 510200. – М.: МГУЛ, 2002. – 88 с. 4. Мельников В.В. Защита информации в компьютерных системах. М.: Финансы и статистика; Электроинформ, 1997. 368 с. 5. Романец Ю.В., Тимофеев П.А., Шаньгин В.Ф. Защита информации в компьютерных системах и сетях. – М.: Радио и связь, 2001. – 376 с. 6. Смарт Н. Криптография. – М.: Техносфера, 2006. – 528 с. |