Автор: Пользователь скрыл имя, 15 Декабря 2010 в 01:27, курсовая работа
Предмет исследования – криптографический алгоритм Blowfish. Цель работы – разработка программного продукта обеспечивающего шифрование/расшифрование данных по алгоритму Blowfish. Алгоритм Blowfish — блочный шифр, основанный на сети Файстеля. Алгоритм прост в реализации, он является стойким ко всем, известнымна сегодняшний день, методам криптоанализа.
Введение 4
1 Понятие шифрования данных 7
2 Описание алгоритма blowfish 11
2.1 Структура алгоритма 11
2.2 Процедура расширения ключа 13
2.3 Достоинства и недостатки алгоритма 14
3 Практическая реализация алгоритма blowfish 16
4 Описани работы с программным продуктом 21
4.1 Минимальные требования для работы программного продукта 21
4.2 Шифрование данных 21
4.3 Расшифрование данных 23
4.4 Генерация пароля 25
Заключение 26
Список использованных источников 27
Приложение 1. Содержимое заголовочного файла 28
Приложение 2. Содержимое основного файла 29
Симметричное
шифрование используется, например, некоторыми
банками в сетях банкоматов. Однако
симметричное шифрование обладает несколькими
недостатками. Во-первых, очень сложно
найти безопасный механизм, при помощи
которого отправитель и получатель
смогут тайно от других выбрать ключ.
Возникает проблема безопасного
распространения секретных
Обмен информацией осуществляется в 3 этапа:
Наибольшую известность в мире среди алгоритмов шифрования получили алгоритмы, выступавшие в разное время как стандарты США: DES, Triple DES и AES. На самом деле алгоритмов шифрования достаточно много, они предназначены для различных применений и реализованы в разных средствах шифрования [7].
Произведем сравнение криптографического стандарта России ГОСТ 28147-89 с алгоритмом Blowfish. Сравнение алгоритмов приведено в таблице наже 1.
Таблица1. Сравнение алгоритмов
Название характеристики | ГОСТ 28147-89 | Blowfish |
Размер ключа, бит | 256 | 32-448 |
Длина блока, бит | 64 | 64 |
Число раундов | 32 | 16 |
Скорость шифрования на Intel 486SX/33МГц (Кбайт/с) | 65 | 135 |
Основные операции | Сложение по модулю 232,перестановка, побитовое исключающее ИЛИ, циклический сдвиг | Сложение по модулю 232,подстановка, побитовое исключающее ИЛИ |
Криптостойкость | Для атаки требуется 235 выбранных открытых текстов | Для атаки требуется 2129 выбранных открытых текстов |
Примечание | Эффективность и высокое быстродействие, наличие защиты от навязывания ложных данных и одинаковый цикл. | Сеть Фейстеля; быстр при шифровании, медленная установка ключа; сравнительно прост; имеет небольшое пространство слабых ключей; имеет большой запас прочности |
Как
видно из таблицы алгоритм Blowfish обеспечивает
наибольшую скорость шифрования данных
и является наиболее устойчив к криптоанализу
по сравнению с ГОСТ 28147-89. Но надо заметить,
что скорость шифрования алгоритма во
многом зависит от используемой техники
и системы команд. На различных архитектурах
один алгоритм может значительно опережать
по скорости его конкурентов, а на другом
ситуация может сравняться или даже измениться
прямо в противоположную сторону. Более
того, программная реализация значительно
зависит от используемого компилятора.
Использование ассемблерного кода может
повысить скорость шифрования. На скорость
шифрования влияет время выполнения операций
mov, add, xor, причём время выполнения операций
увеличивается при обращении к оперативной
памяти.
Алгоритм Blowfish был разработан Брюсом Шнайером в 1994 г. Автор алгоритма предложил его в качестве замены стандарту DES. Несомненно, в тот момент замена DES новым стандартом шифрования была уже актуальна из-за короткого ключа DES, который к тому времени было возможно найти путем полного перебора.
Blowfish
оказался весьма удачным
Поскольку Blowfish предполагался в качестве замены алгоритма DES, он так же, как и DES, шифрует данные 64-битными блоками. Ключ алгоритма имеет переменный размер - от 32 до 448 бит.
Алгоритм представляет собой сеть Файстеля, его структура приведена на рис. 1. Шифрование данных выполняется за 16 раундов, в каждом из которых над левым 32-битным субблоком данных проводятся следующие действия:
Рисунок 1. – Структура алгоритма Blowfish
После 16 раундов выполняется наложение на субблоки еще двух подключей: K17 и K18 складываются операцией XOR с правым и левым субблоками соответственно.
Функция F (рис. 2) обрабатывает субблок следующим образом:
Иначе говоря, функцию F можно определить так:
F(x) = ( (S1(x1) + S2(x2) mod 232) (+) S3(x3) ) + S4(x4) mod 232,
где x1...x4 - 8-битные фрагменты входного значения x.
Рисунок 2. – Функция F алгоритма Blowfish
Расшифрование выполняется аналогично шифрованию, но ключи K1...K18 используются в обратном порядке [7].
Задача процедуры расширения ключа состоит в вычислении на основе ключа шифрования значений ключей раунда K1...K18 и таблиц замен S1...S4. Для этого используется весьма сложная процедура расширения ключа, состоящая из следующих шагов:
В своей книге "Прикладная криптография" Брюс Шнайер отметил следующие ограничения алгоритма Blowfish. Во-первых, "...алгоритм Blowfish не годится для применения в случаях, где требуется частая смена ключей". Процедура расширения ключа ресурсоемка, поэтому одно из достоинств алгоритма Blowfish - высокая скорость шифрования - проявляется только в тех случаях, если на одном ключе шифруется достаточно большой объем информации. И наоборот, если менять ключ после каждого из шифруемых блоков, скорость алгоритма становится катастрофически низкой именно из-за необходимости каждый раз выполнять расширение ключа. Сам Шнайер рекомендует в приложениях, где критична скорость, хранить уже развернутый ключ (т. е. значения K1 ... K18 и S1...S4) и загружать его целиком вместо того, чтобы выполнять расширение исходного ключа.
Далее, "...большие требования к памяти не позволяют использовать этот алгоритм в смарт-картах". Стоит сказать, что принципиальная возможность реализации алгоритма в смарт-картах была одним из важных условий при выборе нового стандарта шифрования США на конкурсе AES, т.е. данный недостаток алгоритма Blowfish можно считать серьезным [7].
Кроме того, стоит отметить и менее серьезные недостатки алгоритма: невозможность расширения ключа параллельно процессу шифрования и небольшой по современным меркам размер блока шифруемых данных.
Алгоритм Blowfish имеет и достаточно важные преимущества, в частности:
Стоит, однако, сказать, что известный эксперт Серж Воденэ (Serge Vaudenay) обнаружил, что методом дифференциального криптоанализа r-раундового алгоритма Blowfish с известными таблицами замен можно вычислить значения K1...K18 при наличии 28r+1 выбранных открытых текстов. Это неактуально для полнораундовой версии алгоритма (и тем более для описанной выше полноценной версии с вычисляемыми таблицами замен), но при использовании слабого ключа (а Воденэ обнаружил также у алгоритма Blowfish наличие слабых ключей, которые приводят к генерации слабых таблиц замен) выбранных открытых текстов требуется существенно меньше: 24r+1. Вероятность, что произвольный ключ окажется слабым, составляет 2-14. Данная атака некритична, поскольку для полноценной версии алгоритма слабые ключи не страшны [3].
Явные достоинства и отсутствие критичных недостатков предопределили широкое использование алгоритма Blowfish.
Первым шагом в реализации алгоритма будет написание класса с именем TBlofish. Данный класс будет содержать:
Вспомогательные методы класса и поля помещаем в директиву private. А метод, который шифруют, расшифровывает и производит инициализацию таблиц замен и таблицу ключей помещаем в директиву public. В директиву public также помещаем конструктор и деструктор, которые используются для создания и удаления объектов этого класса.
Данный
класс имеет следующий вид:
class TBlowfish{
private:
unsigned int S1[256];
unsigned int S2[256];
unsigned int S3[256];
unsigned int S4[256];
unsigned int key[18];
unsigned int F(unsigned int);
void final(unsigned int*, int);