Реализация режима сцепления блоков шифра deal
Исследование специфики изменения зашифрованного текста. Рассмотрение сравнения алгоритмов шифрования. Ознакомление с результатами по показателю "криптостойкость". Анализ процесса программной реализации. Изучение основ изменения вектора инициализации.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 11.06.2022 |
Размер файла | 660,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФГБОУ ВО
«БРЯНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Кафедра «Информатика и программное обеспечение»
Курсовая работа
Реализация режима сцепления блоков шифра deal
Выполнил студент гр. О-18-ИВТ-2-по-Б Черненок П.В.
Руководитель к.т.н., доц. Дергачев К.В.
Брянск 2021
Содержание
Введение
1. Аналитическая часть
1.1 Алгоритм DEAL
1.2 Serpent
1.3 IDEA
1.4 TwoFish
1.5 Итоги сравнительного анализа алгоритмов
2. Конструкторская часть
2.1 Функциональная модель
2.2 Алгоритмическое конструирование
2.3 Программная реализация
2.4 Разработка интерфейса
2.5 Вывод
3. Экспериментальная часть
3.1 Базовый пример
3.2 Изменение ключа
3.3 Изменение вектора инициализации
3.4 Изменение открытого текста
3.5 Изменение зашифрованного текста
3.6 Шифрование одинаковых блоков
3.7 Подведение итогов
Заключение
Список литературы
Приложение
Введение
DEAL (Алгоритм Шифрования Данных с Крупными блоками - англ. Data Encryption Algorithm with Larger blocks) - это блочный шифр, производный от DES. DEAL был впервые представлен Ларсом Кнудсеном в виде доклада на конференции Selected Areas in Cryptography в 1997 году. Впоследствии этот же алгоритм был представлен Ричардом Аутербриджем на конкурсе AES в 1998 году.
1. Аналитическая часть
1.1 Алгоритм DEAL
DEAL представляет собой сеть Фейстеля, использующую DES как функцию в раунде сети. Удовлетворяя требованиям AES, DEAL имеет длину блока 128 бит и длину ключа 128, 192 или 256 бит. В случае длины в 128 или 192 бит используется 6 раундов, в случае 256 бит - 8 раундов.
Так как DEAL является производным от DES, ему свойственны те же операции, что и для DES: перестановки, замены и сложение по модулю 2.
Входными параметрами для расписания ключей являются s ключей DES, каждый по 56 бит плюс 8 «проверочных» бит. Для разных исходных длин ключа s = 2, 3, 4, и входные ключи обозначаются: . На выходе получаем ключей DES . Расписание ключей единообразно для всех трех длин исходного ключа. Сначала расширяется ключей до ключей, создавая отсутствующие ключи операцией XOR с новой константой для каждого нового ключа. Константа используется чтобы исключить слабые ключи. К полученным ключам применим DES в режиме CBC с (шестнадцатеричное число) - фиксированный ключ для DES. В DEAL-128 подключи генерируются следующим образом:
,
,
,
,
,
,
где - 64-битное целое число, в котором - 1-ый бит (нумерация с 0) установлен в «1», а остальные - в «0».
В DEAL-192 подключи генерируются следующим образом:
,
,
,
,
,
,
В DEAL-256 подключи генерируются следующим образом:
,
,
,
,
,
,
,
.
Таким образом для генерации раундовых ключей DEAL необходимо 8 «проходов» DEAL. Чтобы не тратить процессорное время, эти ключи следует сохранить для всего процесса шифрования или расшифрования.
При шифровании исходный текст разбивается на блоки по 128 бит каждый, . Из исходного ключа с помощью расписания ключей получается ключей для работы DES , где . Расписание ключей описано выше. Обозначим и как «левую» и «правую» части блока соответственно. Тогда шифрование описывается следующими выражениями: зашифрованный криптостойкость программный
Положим и , и вычислим для
,
,
На Рис. 1 изображена одна итерация цикла для DEAL.
Рис. 1 Один раунд DEAL
Для DEAL-128 и DEAL-192 используются 6 циклов, полагая . Однако, такого количества раундов может оказаться недостаточно для DEAL-256, в котором необходимо использовать большее количество раундов: . По замыслу разработчиков DEAL-256 должен использоваться только когда требуется особенно сильное шифрование.
В заключительном раунде DEAL «правая» и «левая» половинки блока так же меняются (а не остаются на местах как в DES). Это обусловлено следующим: «правая» часть шифруемого блока не шифруется в последнем раунде -го прохода DEAL, и только «левая» половина блока на -м проходе (исходный блок которого равен {\displaystyle C_{i}\oplus P_{i+1}}) шифруется в первом раунде. Это означает, что «правая» часть не будет шифроваться вообще в течение двух раундов. Это можно рассматривать как уязвимость алгоритма, учитывая, что с DEAL используется всего 6 или 8 раундов. Подобной «особенностью» обладает и DES в режиме CBC. Но, учитывая, что у DES 16 раундов, это не становиться столь яркой уязвимостью. Так или иначе - эта перестановка не влияет на стойкость блочного шифра в режиме ECB.
1.2 Serpent
Serpent - симметричный блочный алгоритм шифрования. Разработан Россом Андерсоном, Эли Бихамом и Ларсом Кнудсеном.
Алгоритм Serpent представляет собой SP-сеть, в которой весь блок данных длиной 128 бит на каждом раунде разбивается на 4 слова длиной по 32 бита. Все значения, использующиеся при шифровании, представляются битовыми потоками. Индексы бит пробегают значения от 0 до 31 для 32-битных слов, от 0 до 127 для 128-битных блоков, от 0 до 255 для 256-битных ключей и так далее. Для внутренних вычислений все биты величин представлены в прямом порядке (little-endian).
Serpent шифрует открытый текст P длиной 128 бит в шифртекст C длиной так же 128 бит за 32 раунда с помощью 33 подключей{\displaystyle K_{0},...,K_{32}} длиной 128 бит. Длина используемого ключа может принимать различные значения, но для конкретики зафиксируем их длину в 128, 192 или 256 бит. Короткие ключи длиной менее 256 бит дополняются до полной длины в 256 бит.
Шифрование состоит из следующих основных шагов:
· начальная перестановка;
· 32 раунда, каждый из которых состоит из операции смешивания с 128-битным ключом (побитовое логическое исключающее «или»), табличная замена (S-box) и линейное преобразование. В последнем раунде линейное преобразование заменяется дополнительным наложением ключа;
· конечная перестановка.
Начальная и конечная перестановки не имеют какой-либо криптографической значимости. Они используются для упрощения оптимизированной реализации алгоритма и повышения вычислительной эффективности.
При разработке и анализе алгоритма Serpent не было выявлено каких-либо уязвимостей в полной 32-раундовой версии. Но при выборе победителя конкурса AES это было справедливо и для остальных алгоритмов-финалистов.
Рис. 2 Схема алгоритма Serpent
1.3 IDEA
IDEA - симметричный блочный алгоритм шифрования данных, запатентованный швейцарской фирмой Ascom.
Так как IDEA использует 128-битный ключ и 64-битный размер блока, открытый текст разбивается на блоки по 64 бит. Если такое разбиение невозможно, последний блок дополняется различными способами определённой последовательностью бит. Для избежания утечки информации о каждом отдельном блоке используются различные режимы шифрования. Каждый исходный незашифрованный 64-битный блок делится на четыре подблока по 16 бит каждый, так как все алгебраические операции, использующиеся в процессе шифрования, совершаются над 16-битными числами. Для шифрования и расшифрования IDEA использует один и тот же алгоритм.
Фундаментальным нововведением в алгоритме является использование операций из разных алгебраических групп, а именно:
· сложение по модулю{\displaystyle 2^{16}}
· умножение по модулю{\displaystyle 2^{16}+1}
· побитовое исключающее ИЛИ (XOR).
Применение этих трех операций затрудняет криптоанализ IDEA по сравнению с DES, который основан исключительно на операции исключающее ИЛИ, а также позволяет отказаться от использования S-блоков и таблиц замены. IDEA является модификацией сети Фейстеля.
Существенным недостатком является то, что IDEA запатентован, так как это препятствует его свободному распространению. IDEA не предусматривает увеличение длины ключа. Недостатком можно также считать тот факт, что не все работы по криптоанализу были опубликованы, то есть вполне возможно, что шифр взломан, или будет взломан в будущем.
Рис. 3 Схема шифрования IDEA
1.4 TwoFish
Twofish - симметричный алгоритм блочного шифрования с размером блока 128 бит и длиной ключа до 256 бит. Число раундов 16. Разработан группой специалистов во главе с Брюсом Шнайером.
Отличительными особенностями алгоритма являются использование предварительно вычисляемых и зависящих от ключа узлов замены и сложная схема развёртки подключей шифрования. Половина -битного ключа шифрования используется как собственно ключ шифрования, другая - для модификации алгоритма (от неё зависят узлы замены).
Twofish разрабатывался специально с учетом требований и рекомендаций NIST для AES:
· 128-битный блочный симметричный шифр;
· длина ключей 128, 192 и 256 бит;
· отсутствие слабых ключей;
· эффективная программная (в первую очередь на 32-битных процессорах) и аппаратная реализация;
· гибкость (возможность использования дополнительных длин ключа, использование в поточном шифровании, хеш-функциях и т. д.);
· простота алгоритма - для возможности его эффективного анализа.
Однако именно сложность структуры алгоритма и, соответственно, сложность его анализа на предмет слабых ключей или скрытых связей, а также достаточно медленное время выполнения по сравнению с Rijndael на большинстве платформ, сыграло не в его пользу.
Twofish разбивает входной 128-битный блок данных на четыре 32-битных подблока, над которыми, после процедуры входного отбеливания (input whitening), производится 16 раундов преобразований. После последнего раунда выполняется выходное отбеливание (output whitening). Отбеливание - это процедура xor'а данных с подключами перед первым раундом и после последнего раунда.
Алгоритм Twofish не запатентован и может быть использован кем угодно без какой-либо платы или отчислений. Он используется во многих программах шифрования, хотя и получил меньшее распространение, чем Blowfish.
Рис. 4 Схема алгоритма TwoFish
1.5 Итоги сравнительного анализа алгоритмов
Итоги сравнения рассмотренных алгоритмов шифрования приведены в табл. 1.
Таблица 1 Сравнение алгоритмов шифрования
ШифрПараметр |
DEAL |
Serpent |
IDEA |
TwoFish |
|
Криптостойкость |
* |
**** |
** |
*** |
|
Кол-во раундов |
6/6/8 |
32 |
9 |
16 |
|
Длина блока, бит |
128 |
128 |
64 |
128 |
|
Размер ключа, бит |
128/192/256 |
128/192/256 |
128 |
256 |
|
Кол-во раундовых ключей |
6 |
33 |
52 |
40 |
|
Скорость шифрования, Мбайт/с |
154,4 |
200 |
41,2 |
176,4 |
|
Основные операции |
Перестановки, замены, XOR |
Перестановки, замены, битовые сдвиги, XOR |
Сложение по модулю , умножение по модулю , XOR |
Перестановки, замены, сложение по модулю , XOR |
Исходя из результатов сравнения, можно сказать, что алгоритм Serpent является лучшим из рассмотренных, превосходя остальные алгоритмы по всем показателям. Алогритм IDEA - единственный из представленных, использующий блок длиной 64 бит, при этом скорость шифрования значительно уступает аналогам. Только благодаря своей сравнительно неплохой криптостойкости алгоритм не является худшим из представленных. Алгоритм TwoFish показывает хорошие результаты в категории «скорость шифрования» и «криптостойкость». Только незначительное отставание по этим показателям от Serpent удерживет TwoFish от лидерства.
Алгоритм DEAL показал наихудший результат по показателю «криптостойкость», однако по скорости шифрования довольно близок к Serpent. Анализ алгоритма DEAL выявил несколько недостатков: наличие подмножеств слабых ключей, подверженность дифференциальному криптоанализу, отсутствие усиления при использовании 192-битных ключей по сравнению с 128-битными. Во-первых, алгоритм расписания ключей не дает достаточно сильных ключей. Действительно, в случае «нулевого» исходного ключа DEAL раундовые ключи получаются слабыми: у первых трёх только один-два бита отличаются от нулей. Во-вторых, после разбиения исходного блока на два по 64 бита, полученные шифртексты «сшиваются» либо с помощью CBC, либо конкатенацией. Такая схема уязвима для дифференциального анализа. Получаемая надежность оказывается порядка {\displaystyle 2^{65}}, вместо {\displaystyle 2^{128}}.
2. Конструкторская часть
2.1 Функциональная модель
Функциональная модель приложения представлена на Рис. 5.
Рис. 5 Функциональная модель
Данная модель визуализирует алгоритм работы приложения, реализующего режим сцепления блоков шифра алгоритма DEAL. Входными данными являются ключ, вектор инициализации, исходный текст и команда (зашифровать или расшифровать текст). Данные отправляются на сервер в виде запроса, обработав который сервер выполняет запрашиваемую операцию над исходными данными и передает клиенту результат выполнения команды в виде ответа на запрос. Клиент помещает полученный результат в поле ввода исходного текста.
2.2 Алгоритмическое конструирование
Алгоритм принимает на вход следующие параметры: ключ, вектор инициализации и текст (открытый текст или шифртекст). Согласно алгоритму, на основе первичного ключа генерируется шесть раундовых ключей. Стоит отметить, что при дешифрации ключи применяются в порядке, обратном порядку при шифрации. Ранее выбранная операция применяется к тексту, предварительно поделенному на блоки длиной 128 бит. Поскольку алгоритм реализует режим CBC, при шифровании очередной блок открытого текста проходит через блочный алгортим шифрования, а также дополнительно изменяется с использованием результата шифрования предыдущего блока. Как только все блоки открытого текста (шифртекста) пройдут процедуру шифрования (расшифрования), результат выполнения будет подан на выход и алгоритм завершит свою работу.
Блок-схема алгоритма представлена на Рис. 6.
Рис. 6 Блок-схема алгоритма
2.3 Программная реализация
Приложение было разработано с применением языков программирования PHP и JavaScript, а также языка разметки гипертекста HTML. В качестве веб-сервера был использован PHP built-in web server. Исходный код приведен в приложении.
Таблица 2 Используемые методы
Метод |
Описание |
Входные параметры |
Возвращаемое значение |
Вызываемые методы |
|
Класс Deal |
|||||
encrypt |
Метод для шифрования открытого текста. |
$text - открытый текст в символьном представлении |
Шифртекст в символьном представлении |
CBCStrategy::ecnrypt |
|
decrypt |
Метод для расшифрования шифртекста. |
$cipher - шифртекст в символьном представлении |
Открытый текст в символьном представлении |
CBCStrategy::decrypt |
|
Класс CBCStrategy |
|||||
encrypt |
Метод для шифрования открытого текста. |
$text - открытый текст в символьном представлении |
Шифртекст в двоичном представлении |
ECBStrategy::encrypt BinaryString |
|
decrypt |
Метод для расшифрования шифртекста. |
$cipher - шифртекст в символьном представлении |
Открытый текст в двоичном представлении |
ECBStrategy::decrypt BinaryString |
|
Класс ECBStrategy |
|||||
generate Round Keys |
Метод для генерации раундовых ключей DEAL |
$key - ключ в символьном представлении |
- |
DES::getKey, DES::encrypt |
|
encrypt Binary String |
Метод для шифрования текста |
$binaryString - открытый текст в двоичном представлении |
Шифртекст в двоичном представлении |
ECBStrategy::encrypt Block |
|
encyptBlock |
Метод для шифрования блока открытого текста |
$block - блок открытого текста в двоичном представлении |
Шифрблок |
DES::encrypt |
|
decrypt Binary String |
Метод для расшифрования текста |
$binaryString - шифртекст в двоичном представлении |
Открытый текст в двоичном представлении |
ECBStrategy::decrypt Block |
|
decrypt Block |
Метод для расшифрования блока шифртекста |
$block - блок шифртекста в двоичном представлении |
Блок открытого текста |
DES::encrypt |
|
Класс DES |
|||||
getKey |
Метод для получения раундового ключа |
$index - индекс ключа |
Раундовый ключ |
- |
|
encrypt |
Метод для шифрования 64-битного блока открытого текста |
$block - блок открытого текста в двоичном представлении |
Зашифрован ный блок |
- |
2.4 Разработка интерфейса
Визуальный интерфейс приложения представляет собой интерактивную HTML-страницу, на которой расположены все необходимые для ввода входных данных элементы управления (Рис. 7). Для стилизации страницы был использован CSS-фреймворк Materialize.
Рис. 7 Главная страница
Каждому полю ввода соответствует свой заголовок. Пользователю необходимо ввести соответствующие данные в произвольном порядке и с помощью кнопок «Зашифровать» и «Расшифровать» выбрать интересующую опцию. Результат операции отобразится в текстовом поле «Текст».
2.5 Вывод
Разработано веб-приложение с использованием языков PHP, JavaScript и HTML, серверная часть которого реализует алгоритм шифрования DEAL в режиме сцепления блоков шифра, а клиентская - предоставляет удобный визуальный интерфейс для шифрования и дешифрации текста с заданными параметрами.
3. Экспериментальная часть
3.1 Базовый пример
Пример корректного шифрования и расшифровки данных программой, представленный в табл. 3, будет считаться отправным, на основе которого будут строиться остальные примеры с отклонением от данного.
Таблица 3 Базовый пример
Параметр |
Значение параметра |
|
Ключ |
testkey123 |
|
Вектор инициализации |
92192198710 |
|
Исходный текст |
«Всё в прошлом» -- картина русского художника Василия Максимова. |
|
Шифртекст |
wP6 c \^ h {?VF9 !) 8 m E ? 9 xSvH < q \ Y ' 0U.I 2І9x(" ! y* &5^ . YW[Z 06 ?8 |
|
Дешифрованный текст |
«Всё в прошлом» -- картина русского художника Василия Максимова. |
3.2 Изменение ключа
Таблица 4 Дешифрация с измененнным ключом
Параметр |
Значение параметра |
|
Ключ |
tesQWey123 |
|
Вектор инициализации |
92192198710 |
|
Исходный текст |
«Всё в прошлом» -- картина русского художника Василия Максимова. |
|
Шифртекст |
wP6 c \^ h {?VF 9 !) 8 m E ? 9 xSvH < q \ Y ' 0U.I 2І9x(" ! y¬* & 5^ . YW[Z 0¬6 ?8 |
|
Дешифрованный текст |
h E N hn c d s w .V"= * ?? rS rZ #} O O VD? - 6 HX < & U}T? bl k d* 4 - >tq K ? o2' |
Перед осуществлением дешифрации ключ был изменен с testkey123 на tesQWey123. В результате можно наблюдать, что даже небольшие изменения в ключе повлекли за собой невозможность корректной дешифрации.
3.3 Изменение вектора инициализации
Таблица 5 Дешифрация с измененным вектором инициализации
Параметр |
Значение параметра |
|
Ключ |
testkey123 |
|
Вектор инициализации |
52192198710 |
|
Исходный текст |
«Всё в прошлом» -- картина русского художника Василия Максимова. |
|
Шифртекст |
wP6 c \^ h {?VF 9 !) 8 m E ? 9 xSvH < q \ Y ' 0U.I 2І9x(" ! y¬* & 5^ . YW[Z 0¬6 ?8 |
|
Дешифрованный текст |
І bAё в прошлом» -- картина русского художника Василия Максимова. |
Цель эксперимента - выявить ошибки дешифрации при изменении вектора инициализации (IV был изменен с 92192198710 на 52192198710).
Изменение вектора инициализации влечет за собой невозможность правильно расшифровать начало исходного сообщения.
3.4 Изменение открытого текста
Таблица 6 Изменение открытого текста
Параметр |
Значение параметра |
|
Ключ |
testkey123 |
|
Вектор инициализации |
92192198710 |
|
Исходный текст (до изменений) |
«Всё в прошлом» -- картина русского художника Василия Максимова. |
|
Шифртекст (до изменений) |
wP6 c \^ h {?VF 9 !) 8 m E ? 9 xSvH < q \ Y ' 0U.I 2І9x(" ! y¬* & 5^ . YW[Z 0¬6 ?8 |
|
Исходный текст (после изменений) |
«Всё в прошлом» -- картина русскогО художника Василия Максимова. |
|
Шифртекст (после изменений) |
wP6 c \^ h {?VF 9 !) 8 m E ? 9 xSvH < q \@5 B8 8?| ? ?Xq? i j ?N 2t 1! # n |
В данном эксперименте была изменена одна буква во втором блоке открытого текста.
В результате блок шифртекста, соответствующий измененному блоку открытого текста, и все последующие блоки полностью изменились. Это произошло потому, что при шифровании очередной блок открытого текста, проходя через блочный алгортим шифрования, дополнительно изменяется с использованием результата шифрования предыдущего блока.
3.5 Изменение зашифрованного текста
Таблица 7 Изменение зашифрованного текста
Параметр |
Значение параметра |
|
Ключ |
testkey123 |
|
Вектор инициализации |
92192198710 |
|
Шифртекст (до изменений) |
wP6 c \^ h {?VF 9 !) 8 m E ? 9 xSvH < q \ Y ' 0U.I 2І9x(" ! y¬* & 5^ . YW[Z 0¬6 ?8 |
|
Шифртекст (после изменений) |
wP6 c \^ h {?VF 9 !) 8 m F ? 9 xSvH < q \ Y ' 0U.I 2І9x(" ! y¬* & 5^ . YW[Z 0¬6 ?8 |
|
Дешифрованный текст (до изменений) |
«Всё в прошлом» -- картина русского художника Василия Максимова. |
|
Дешифрованный текст (после изменений) |
.Mh D } ? G!< 775Z( & T |l*CЦ( wn i \ [d ? G 3? ? ? <@j? %;|Y5LPM c H C@& Q r6 8? D ? \, \ ^jkv &.6Tk г U ~+^ #Y Q L aw[ SЋ yu [ S M yu [ S M |
В данном эксперименте были внесены изменения во второй блок шифртекста (заменено 6 символов).
Результат эксперимента показал, что исходный текст изменился даже при незначительном изменении шифртекста. Опираясь на этот результат, можно сказать, что алгоритм не является помехоустойчивым.
3.6 Шифрование одинаковых блоков
Таблица 8 Шифрование одинаковых блоков
Параметр |
Значение параметра |
|
Ключ |
testkey123 |
|
Вектор инициализации |
92192198710 |
|
Исходный текст |
аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа |
|
Шифртекст |
wP6 M9 # h3 qC i X< S I 2N N% Fp ? Vx"H R~ w KK w b J I m P0? ; J #A c 5s;9 /lU ?? V' - ?QL d{?y v y x esul |
|
Дешифрованный текст |
аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа |
В данном эксперименте осуществляется шифрование однотипных блоков открытого текста (5 блоков, состоящих из букв «а»). Это позволяет оценить характер шифрования.
На этапе шифрования можно заметить, что одинаковые блоки открытого текста по-разному представляются в шифртексте. Это говорит о нефиксированном характере шифрования.
3.7 Подведение итогов
Работа алгоритма была протестирована в нормальных условиях, а также в условиях изменения его параметров на определенных этапах выполнения. При дешифрации с измененным вектором инициализации алгоритм показал ожидаемый результат: первый блок текста был расшифрован неправильно, что не повлияло ра расшифрование последующих блоков. Изменение 3-го блока шифртекста повлияли на изменение соответствующего блока шифртекста и последующих блоков. Изменение шифртекста влечет за собой невозможность корректного расшифрования текста. Таким образом, можно сказать, что алгоритм не является помехоустойчивым. При шифровании одинаковых блоков алгоритм показал нефиксированный характер шифрования.
Заключение
В данной работе реализован алгоритм DEAL в режиме сцепления блоков шифртекста. Так как не все работы по криптоанализу были опубликованы, то вполне возможно, что шифр взломан, или будет взломан в будущем. Поэтому для усиления криптографической стойкости данного алгоритма используется режим сцепления блоков. Данный режим шифрования позволяет повысить криптографическую стойкость за счет изменения исходного текста перед его подачей в входные параметры алгоритма. Так же данный режим позволяет осуществлять аутентификацию сообщения при передаче последнего блока шифрования.
В аналитической части разрабатываемый алгоритм был рассмотрен в сравнении с аналогичными, были выявлены его достоинства и недостатки.
В конструкторской части была сформирована и подробно описана функциональная модель данного алгоритма шифрования, которая наглядно показывает его работу, а также было проведено алгоритмическое конструирование, где с помощью блок-схем были описаны алгоритмы шифрования и дешифрации. Были реализованы основные функции алгоритма шифрования на языке PHP.
Работа алгоритма была протестирована в нормальных условиях, а также в условиях изменения его параметров на определенных этапах выполнения. При дешифрации с измененным вектором инициализации алгоритм показал ожидаемый результат: первый блок текста был расшифрован неправильно, что не повлияло ра расшифрование последующих блоков. Изменение 3-го блока шифртекста повлияли на изменение соответствующего блока шифртекста и последующих блоков. Изменение шифртекста влечет за собой невозможность корректного расшифрования текста. Таким образом, можно сказать, что алгоритм не является помехоустойчивым. При шифровании одинаковых блоков алгоритм показал нефиксированный характер шифрования.
Задачи курсовой работы были выполнены в полной мере.
Список литературы
1. Прохорова, О.В. Информационная безопасность и защита информации [Электронный ресурс]: учебник / О.В. Прохорова. - Электрон. текстовые данные. - Самара: Самарский государственный архитектурно-строительный университет, ЭБС АСВ, 2014. - 113 c. Режим доступа: http://www.iprbookshop.ru/43183.html. - ЭБС «IPRbooks».
2. Massey, J. A Proposal for a New Block Encryption Standard, EUROCRYPT: Springer-Verlag, 1991. - P. 389-404.
3. Шнайер, Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си / Б. Шнайер пер. с англ. - М.: Триумф, 2002. - 816 с.
4. Панасенко, С. П. Алгоритмы шифрования: специальный справочник / С.П. Панасенко. - СПб.: БХВ-Петербург, 2009. - 576 с.
5. Lucks, S. Attacking Triple Encryption/ S. Lucks // Fast Software Encryption. FSE 1998. Lecture Notes in Computer Science. - Berlin / Heidelberg: Springer, 1998. - vol. 1372. - P. 239-253.
Приложение
class Deal
{
private IStrategy $strategy;
public function __construct(IStrategy $strategy)
{
$this->strategy = $strategy;
}
public function encrypt(string $text): string
{
return TextBinConverter::textFromBinaryString($this->strategy->encrypt($text));
}
public function decrypt(string $cipher): string
{
return TextBinConverter::textFromBinaryString($this->strategy->decrypt($cipher));
}
}
class CBCStrategy implements IStrategy
{
private $initializationVector;
private $ecbMode;
public function __construct($initVector, $key = 0x1234567890ABCDEF)
{
$this->initVectorDecimalToBin($initVector);
$this->initializationVector = Helper::padWithZerosIfNeeded($this->initializationVector, 128);
$this->ecbMode = new ECBStrategy($key);
}
private function initVectorDecimalToBin($initVector)
{
#make sure that the IV is <= than subblock size
$module = gmp_mul(2**32,2**33);
$initVector = gmp_init($initVector) % $module;
$binString = "";
while ($initVector > 0) {
$binString .= $initVector % 2;
$initVector /= 2;
}
$this->initializationVector = strrev($binString);
}
function encrypt(string $text): string
{
$binaryString = TextBinConverter::textToBinaryString($text);
$binaryString = Helper::padWithZerosIfNeeded($binaryString, 128);
$cipher = "";
$prevBlock = $this->initializationVector;
foreach (str_split($binaryString, 128) as $block) {
$newBlock = $this->ecbMode->encryptBinaryString(Helper::doXor($prevBlock, $block));
$cipher .= $newBlock;
$prevBlock = $newBlock;
}
return $this->initializationVector . $cipher;
}
function decrypt(string $cipher): string
{
$binaryString = TextBinConverter::textToBinaryString($cipher);
$binaryString = Helper::padWithZerosIfNeeded($binaryString, 128);
$text = "";
$prevBlock = substr($binaryString, 0, 128);
$binaryString = substr($binaryString, 128);
foreach (str_split($binaryString, 128) as $block) {
$newBlock = Helper::doXor($this->ecbMode->decryptBinaryString($block), $prevBlock);
$newBlock = Helper::padWithZeros($newBlock, 128);
$text .= $newBlock;
$prevBlock = $block;
}
return $text;
}
}
class ECBStrategy implements IStrategy
{
private array $roundKeys;
public function __construct($key = 0x1234567890ABCDEF)
{
$this->generateRoundKeys($this->normalizeKey($key));
}
private function normalizeKey($key) : string {
$keyBinary = TextBinConverter::textToBinaryString($key);
if (strlen($keyBinary) > 56) {
$keyBinary = substr($keyBinary, strlen($keyBinary) - 56, 56);
}
return $keyBinary;
}
private function generateRoundKeys($key)
{
$des = new Des(TextBinConverter::textToBinaryString($key));
$key1 = $des->getKey(0);
$key2 = $des->getKey(1);
$constant1 = "1000000000000000000000000000000000000000000000000000000000000000";
$constant2 = "0100000000000000000000000000000000000000000000000000000000000000";
$constant4 = "0001000000000000000000000000000000000000000000000000000000000000";
$constant8 = "0000000100000000000000000000000000000000000000000000000000000000";
$this->roundKeys[0] = $des->encrypt($key1);
$this->roundKeys[1] = $des->encrypt(Helper::doXor($key2, $this->roundKeys[0]));
$this->roundKeys[2] = $des->encrypt(Helper::doXor(Helper::doXor($key1, $constant1), $this->roundKeys[1]));
$this->roundKeys[3] = $des->encrypt(Helper::doXor(Helper::doXor($key2, $constant2), $this->roundKeys[2]));
$this->roundKeys[4] = $des->encrypt(Helper::doXor(Helper::doXor($key1, $constant4), $this->roundKeys[3]));
$this->roundKeys[5] = $des->encrypt(Helper::doXor(Helper::doXor($key2, $constant8), $this->roundKeys[4]));
}
public function encrypt(string $text): string
{
$binaryString = TextBinConverter::textToBinaryString($text);
$binaryString = Helper::padWithZerosIfNeeded($binaryString, 128);
return $this->encryptBinaryString($binaryString);
}
public function encryptBinaryString(string $binaryString): string
{
$cipher = "";
foreach (str_split($binaryString, 128) as $block) {
$cipher .= $this->encryptBlock($block);
}
return $cipher;
}
private function encryptBlock(string $block): string
{
$block = Helper::padWithZeros($block, 128);
$prevLeftSubBlock = substr($block, 0, 64);
$prevRightSubBlock = substr($block, 64, 64);
for ($i = 0; $i < 6; $i++) {
$des = new Des($this->roundKeys[$i]);
$newLeftSubBlock = Helper::doXor($des->encrypt($prevLeftSubBlock), $prevRightSubBlock);
$newLeftSubBlock = Helper::padWithZeros($newLeftSubBlock, 64);
$newRightSubBlock = $prevLeftSubBlock;
$prevLeftSubBlock = $newLeftSubBlock;
$prevRightSubBlock = $newRightSubBlock;
}
return $newLeftSubBlock . $newRightSubBlock;
}
public function decrypt(string $cipher): string
{
$binaryString = TextBinConverter::textToBinaryString($cipher);
$binaryString = Helper::padWithZerosIfNeeded($binaryString, 128);
return $this->decryptBinaryString($binaryString);
}
public function decryptBinaryString(string $binaryString): string
{
$text = "";
foreach (str_split($binaryString, 128) as $block) {
$text .= $this->decryptBlock($block);
}
return $text;
}
private function decryptBlock(string $block): string
{
$block = Helper::padWithZeros($block, 128);
$prevLeftSubBlock = substr($block, 0, 64);
$prevRightSubBlock = substr($block, 64, 64);
for ($i = 5; $i >= 0; $i--) {
$des = new Des($this->roundKeys[$i]);
$newRightSubBlock = Helper::doXor($des->encrypt($prevRightSubBlock), $prevLeftSubBlock);
$newRightSubBlock = Helper::padWithZeros($newRightSubBlock, 64);
$newLeftSubBlock = $prevRightSubBlock;
$prevLeftSubBlock = $newLeftSubBlock;
$prevRightSubBlock = $newRightSubBlock;
}
return $newLeftSubBlock . $newRightSubBlock;
}
}
Размещено на Allbest.ru
...Подобные документы
Назначение алгоритма "Blowfish", особенности длины ключа и степени криптостойкости. Обоснование программной реализации расширения ключа и сцепления блоков шифра "Blowfish". Проверка использования инициализирующего вектора и распространения ошибок шифра.
курсовая работа [1,3 M], добавлен 30.01.2014Реализация криптографического алгоритма шифрования и дешифрования с использованием шифра Виженера. Понятие и суть полиалфавитного шифра. Метод полиалфавитного шифрования буквенного текста с использованием ключевого слова. Взлом полиалфавитных шифров.
курсовая работа [863,0 K], добавлен 21.04.2012Шифрование и дешифрование с помощью сети Фейстеля. Процесс блочного преобразования открытой информации в зашифрованную информацию. Таблица перевода чисел и букв. Криптостойкость шифра как показатель его эффективности. Подстановки и перемещение битов.
курсовая работа [475,6 K], добавлен 30.12.2013Реализация алгоритма DES и режимов шифрования для любой длины сообщения и любой длины ключа. Шифрование сообщений различной длины и ключа с замериванием времени и скорости шифрования. Реализация алгоритма RSA. Сохранение зашифрованного файла на диск.
курсовая работа [398,4 K], добавлен 26.01.2010Проблема скрытия и защиты информации от несанкционированного использования. История создания шифра. Решения задачи шифрования текста и кодирования данных. Тестирование полученного приложения и анализ работы программы с точки зрения пользователя.
курсовая работа [3,0 M], добавлен 24.11.2013Описание компонентов сети конфиденциальной связи. Система распределения ключей на основе линейных преобразований. Описание разработанных программ. Криптостойкость алгоритма распределения ключей. Алгоритм шифрования данных в режиме обратной связи.
курсовая работа [98,3 K], добавлен 26.09.2012Основные требования к разрабатываемым программам и исходным текстовым файлам. Характеристика шифров замены. Укрупненные структурные схемы и коды программ шифрования и дешифрования, скриншоты их выполнения. Пример зашифрованного текста и его дешифрования.
курсовая работа [556,8 K], добавлен 14.01.2013Возможности создания и обработки графики. Алгоритм шифрования текста в графику. Изменения цветовых каналов. Инициализация объектов html-сущностей. Формирование декодированной строки. Инструменты для обработки массивов, текстовых данных и графики.
курсовая работа [50,5 K], добавлен 26.11.2013Исследование элементов эллиптических кривых, необходимых для реализации криптографических протоколов. Изучение алгоритмов арифметики точек эллиптической кривой и способов генерации кривых для криптографических алгоритмов. Описание алгоритмов шифрования.
курсовая работа [371,2 K], добавлен 07.08.2012Простейшие шифры и их свойства. Криптостойкость шифра как его основной показатель эффективности. Шифратор Ч. Уитстона. Размер ключа перестановки. Алгоритм сложной замены – шифр Гронсфельда. Ассиметричная криптографическая система с открытым ключом.
курсовая работа [512,3 K], добавлен 18.01.2013Симметричные криптосистемы; алгоритмы шифрования и дешифрования данных, их применение в компьютерной технике в системах защиты конфиденциальной и коммерческой информации. Основные режимы работы алгоритма DES, разработка программной реализации ключа.
курсовая работа [129,6 K], добавлен 17.02.2011Исследование симметричных алгоритмов блочного шифрования. Минусы и плюсы алгоритма IDEA. Разработка программы аутентификации пользователя и сообщений на основе алгоритма IDEA. Выбор языка программирования. Тестирование и реализация программного средства.
курсовая работа [314,2 K], добавлен 27.01.2015Ознакомление с особенностями программной реализации алгоритмов преобразования одномерных массивов. Исследование развития вычислительной техники, которое подразумевает использование компьютерных и информационных технологий. Изучение интерфейса программы.
курсовая работа [1,0 M], добавлен 02.06.2017Сравнение производительности программных реализаций алгоритмов шифрования с оптимизациями под языки С и Java. История разработки, сущность, принципы шифрования и успехи в криптоанализе таких алгоритмов шифрования как AES, RC4, RC5, RC6, Twofish и Mars.
реферат [1,3 M], добавлен 13.11.2009Автоматизация процесса шифрования на базе современных информационных технологий. Криптографические средства защиты. Управление криптографическими ключами. Сравнение симметричных и асимметричных алгоритмов шифрования. Программы шифрования информации.
курсовая работа [795,7 K], добавлен 02.12.2014Появление шифров, история эволюции криптографии. Способ приложения знаний особенностей естественного текста для нужд шифрования. Критерии определения естественности. Способ построения алгоритмов симметричного шифрования. Криптосистема с открытым ключом.
реферат [452,2 K], добавлен 31.05.2013История появления и развития шифрования текста. Проблема шифрования и дешифрования текстовых сообщений в современности. Создание программы для зашифровки и расшифровки вводимого текста пятью методами: Атбаш, Цезаря, Полибия, Гронсфельда и Винжера.
курсовая работа [923,6 K], добавлен 26.12.2011Программа на языке Turbo Pascal для шифрования данных с помощью шифра Тритемиуса. Входные, выходные данные. Схема алгоритма и текст программы. Порядок ввода исходных данных и описание получаемых результатов. Тестовых задания и анализ их функционирования.
курсовая работа [4,0 M], добавлен 06.01.2011Разработка криптографического алгоритма программы ручного шифра по таблице Виженера. Разработка программы, выполняющей шифрование и расшифрование. Особенности использования в качестве ключа самого открытого текста. Алгоритмы решения "обратных" задач.
курсовая работа [45,0 K], добавлен 13.11.2009Принцип программной реализации классических криптографических методов. Метод шифрования с использованием таблицы Виженера. Создание текстового редактора "Блокнот", содержащего методы шифрования. Вербальный алгоритм и программа для методов шифрования.
курсовая работа [2,0 M], добавлен 20.01.2010