Смекни!
smekni.com

Методические указания к лабораторным работам по курсу «Методы и средства защиты компьютерной информации» Волгоград 2008 (стр. 1 из 4)

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ВОЛЖСКИЙ ПОЛИТЕХНИЧЕСКИЙ ИНСТИТУТ (филиал) ВОЛГОГРАД­СКОГО ГОСУДАРСТВЕННОГО ТЕХНИЧЕСКОГО УНИВЕРСИТЕТА

КАФЕДРА «ИНФОРМАТИКА И ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ»

Блочное симметричное шифрование

Методические указания к лабораторным работам по

курсу «Методы и средства защиты компьютерной информации»

Волгоград 2008


УДК 004.056

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ЛАБОРАТОРНЫМ РАБОТАМ: Блочное симметричное шифрование / Сост. Лясин Д.Н., Макушкин И.А.; Волгоград. гос. техн. ун-т. - Волгоград, 2008,. – 24 с.

Содержатся сведения, необходимые для изучения студентами основных принципов блочного симметричного шифрования данных: структуры шифров, формирования образующих функций, использования материала ключа. Дан обзор современных блочных симметричных шифров и режимов их использования. Приведены варианты заданий к лабораторным работам.

Предназначены для студентов, обучающихся по направлению 5528 "Инфор­матика и вычислительная техника" и специальности 2201 "Вычислитель­ные машины, комплексы, системы и сети" всех форм обучения в рамках курса «Методы и средства защиты компьютерной информации»

Ил. 6. Табл. 6. Библиогр.: 5 назв.

Рецензент: к.т.н., доцент каф. ВАЭ и ВТ ВПИ (филиал) ВолгГТУ

Студеникин А.В.

Печатается по решению редакционно-издательского совета Волгоград­ского государственного технического университета

© Волгоградский государственный

технический университет, 2008


Лабораторная работа N 2

Блочное симметричное шифрование

Цель работы: изучение структуры и основных принципов работы современных алгоритмов блочного симметричного шифрования, приобретение навыков программной реализации блочных симметричных шифров.

Основные сведения

Блочное симметричное шифрование предполагает выполнение криптографического преобразования над блоками открытого текста фиксированного размера (32, 64, 128, 256 бит). Таким образом, блочный шифр можно представить как шифр замены над очень большим алфавитом, который, например, для блока размером 64 бита имеет 264 символов. Любой шифр замены можно представить в виде таблицы соответствия между входными и выходными символами. Однако размер такой таблицы для современных блочных шифров будет настолько велик (требуется 270 бит ЗУ для алгоритма с 64-битным блоком только для одного ключа шифрования), что представление соответствия входных и выходных данных эффективно описывается только алгоритмически.

Обобщенно алгоритм блочного шифрования описывается следующим образом: блок открытого текста X преобразуется в блок шифротекста Y того же размера с использованием некоторого ключа шифрования Key:

Y=Encrypt(X,Key)

Процедура дешифрации выполняет обратное преобразование, используя тот же самый ключ:

X=Decrypt(Y,Key)

Преобразования Encrypt и Decrypt трактуют блоки открытого и зашифрованного текста как целые числа и выполняют над ними ряд арифметических либо логических действий, основная задача которых – тщательно «перемешать» биты блока открытого текста между собой, а также связать их с битами используемого ключа шифрования для формирования блока закрытого текста. При этом для блочного шифра несущественен тип преобразуемой информации, он разбивает ее на блоки определенного размера, интерпретирует эти блоки как целые числа в диапазоне [0..2k-1], где k- размер блока, и выполняет над этими числами ряд преобразований в соответствии с алгоритмом метода.

Для выполнения криптографических преобразований в блочных шифрах особую роль играют обратимые операции, поскольку только использование данных операций обеспечивает инъективность (обратимость) всего криптопреобразования [1]. Наиболее часто используемые в современных блочных шифрах обратимые операции приведены в таблице 1.

Таблица 1. Основные обратимые операции

Название операции Графическое обозначение Формула преобразования Обратное преобразование
Сложение
X=X+V Вычитание
Сложения по модулю 2
X=X Å V Автообратима
Умножение по модулю 2N+1 (N- размер блока)
X=(X×V) mod (2N+1) Сомножитель можно найти по алгоритму Евклида
Циклические сдвиги вправо/влево
X=X ROR V X=X ROL V Циклический сдвиг в обратном направлении
Перестановка бит
Табличная подстановка
X=SBox(X) Обратная подстановка

Особенное внимание в таблице 1 необходимо уделить операциям умножения и табличной подстановки, поскольку они, внося нелинейность в общее криптопреобразование, делают алгоритм более стойким к линейному криптоанализу [2].

Одним из основных принципов структурного построения современных криптоалгоритмов является принцип итерирования. Его идея заключается в многократной, состоящей из нескольких циклов (или раундов), обработке одного блока открытого текста с использованием на каждом цикле специального ключа раунда, вычисляемого на основе ключа шифрования. Количество циклов можно варьировать из соображений криптостойкости и эффективности реализации алгоритма: увеличение количества циклов приводит к повышению стойкости шифра, но увеличивает время шифрации и потребляемые вычислительные ресурсы. Подобные циклические структуры принято называть сетями, и большинство современных блочных шифров построены с использованием сетевой архитектуры.

В качестве примера криптографических сетей можно привести SP-сети, содержащие в каждом раунде два слоя – подстановки (substitution), в котором обычно используются обратимые операции преобразования над шифруемым блоком и материалом ключа, и перестановки (permutation), в котором происходит перестановка бит внутри блока. Однако самой популярной сегодня является сеть Фейштеля, схема которой представлена на рис.1.

При шифровании блок открытого текста разбивается на две равные части - левую и правую. Очевидно, что длина блока при этом должна быть четной. На каждом цикле одна из частей подвергается преобразованию при помощи образующей функции F и вспомогательного ключа раунда ki, полученного из исходного ключа. Результат преобразования складывается по модулю 2 с другой частью, после чего части меняются местами. Преобразования на каждом цикле идентичны и лишь после последнего раунда не выполняется перестановка частей блока.

Достоинством сети Фейштеля является то, что дешифрация выполняется той же последовательностью преобразований, лишь порядок следования вспомогательных ключей меняется на обратный. Это достигается за счет автообратимости операции суммы по модулю 2, смешивающей части блока между собой


. Если размер блока шифрования криптоалгоритма слишком велик, возможны модификации сети Фейштеля с 4 ветвями.

Описание алгоритмов шифрования DES и TEA, построенных на основе сети Фейштеля, можно найти в [2, 5]. Сеть Фейштеля использована как структурная основа таких алгоритмов шифрования, как FEAL, CAST, Blowfish, IDEA, RC5, COST, ГОСТ 28147-89 и многих других. Рассмотрим подробнее некоторые из этих алгоритмов.

Алгоритм IDEA (Intrnational Data Encryption Algorithm) задумывался как замена стандарта шифрования DES и не стал таковым по причине его запатентованности и необходимости лицензирования для коммерческих приложений. Конечная редакция алгоритма была опубликована в 1992 году.

IDEA оперирует 64-битовыми блоками открытого текста. Исходный блок данных разбивается на 4 части – все операции IDEA выполняются в 16-битной арифметике. Затем в каждом из 8-ми раундов над ветвями и материалом ключа выполняются в специально подобранной очередности три операции:

  • поразрядное сложение по модулю 2 (операция "исключающее ИЛИ"); операция обозначается как (+);
  • сложение беззнаковых целых по модулю 216; операция обозначается как [+];
  • умножение беззнаковых целых по модулю (216+1), причем блок из 16 нулей рассматривается как 216; операция обозначается как (·). Если после взятия модуля результат равен 216 , то он заменяется на 0.

Для обеспечения симметричности операций шифрования/дешифрования после восьми раундов над ветвями производится дополнительное преобразование.

Алгоритм использует 128-битный ключ. Создание подключей раунда Z1...Z6 также относительно несложно. Алгоритм использует всего 52 подключа (по шесть для каждого из восьми циклов и еще четыре для преобразования выхода). Сначала 128-битовый ключ делится на восемь 16-битовых подключей. Это - первые восемь подключей для алгоритма (шесть подключей - для первого цикла и первые два подключа - для второго). Затем 128-битовый ключ циклически сдвигается влево на 25 бит и снова делится на восемь подключей (четыре подключа - для второго цикла и четыре подключа - для третьего). Ключ снова циклически сдвигается влево на 25 бит для получения следующих восьми подключей и т.д., пока выполнение алгоритма не завершится.