
- •Минобрнауки россии
- •Кафедра комплексной защиты информационных систем курсовая работа
- •Введение
- •1. Теоретико-математические основы симметричных криптосистем
- •1. 1 Общие понятия симметричных шифров
- •1. 2 Преимущества и недостатки симметричных криптосистем
- •1.3 Блочные шифры
- •2. Алгоритм шифрования blowfish
- •2. 1 Описание алгоритма Blowfish
- •2.2 Процедура расширения ключа
- •2.3 Скорость работы и криптостойкость алгоритма Blowfish
- •3 Практическая реализация алгоритма blowfish
- •3.1 Блок-схема алгоритма шифрования/расшифрования
- •3. 2 Листинг программы
- •3. 3 Интерфейс программы и результаты ее работы
- •Заключение
- •Библиографическийсписок
2. Алгоритм шифрования blowfish
2. 1 Описание алгоритма Blowfish
До появления Blowfish существовавшие алгоритмы были либо запатентованными, либо ненадёжными, а некоторые и вовсе держались в секрете (например, Skipjack). Алгоритм был разработан в 1993 году Брюсом Шнайером в качестве быстрой и свободной альтернативы устаревшему DES и запатентованному IDEA. По заявлению автора, критерии проектирования Blowfish были:
скорость (шифрование на 32-битных процессорах происходит за 26 тактов);
простота (за счёт использования простых операций, уменьшающих вероятность ошибки реализации алгоритма);
компактность;
настраиваемая стойкость.
Blowfish -блочный шифр, который шифрует данные в 8- байтовых блоках. Алгоритм включает в себе 2 части: часть расширения ключей и часть кодирования данных. Расширение ключа преобразует ключи переменной длинны, в большинстве 56 байтовые (448 битов), в несколько суммированных массивов подключей размером в 4168 байт. Данный алгоритм имеет 16 итераций. Каждая итерация включает в себя зависящие от ключа перестановки, и зависящей от ключей и данных замены. Все операции XOR и добавления на 32-битных словах. Единственные дополнительные операции - четыре индексированных поиска данных в целочисленных массивах. [1].
Blowfish шифрует данные 64-битными блоками. Ключ алгоритма имеет переменный размер - от 32 до 448 бит.
Алгоритм представляет собой сеть Фейстеля. Шифрование данных выполняется за 16 раундов, в каждом из которых над левым 32-битным субблоком данных проводятся следующие действия:
Значение субблока складывается с ключом i-го раунда Ki операцией XOR, результат операции становится новым значением субблока.
Субблок обрабатывается функцией F (описана ниже), результат обработки накладывается на правый субблок операцией XOR.
Субблоки меняются местами во всех раундах, кроме последнего.
После 16 раундов выполняется наложение на субблоки еще двух подключей: K17 и K18 складываются операцией XOR с правым и левым субблоками соответственно.
Рисунок 1. Структура алгоритма Blowfish.
Функция F (рис. 2) обрабатывает субблок следующим образом:
32-битное входное значение делится на четыре фрагмента по 8 бит, каждый из которых прогоняется через одну из таблиц замен S1...S4 с получением четырех 32-битных выходных фрагментов. Таблицы замен содержат по 256 значений по 32 бита, они не являются фиксированными и зависят от ключа шифрования. Принципы их вычисления подробно описаны ниже.
Первые два выходных фрагмента складываются по модулю.
Результат предыдущего шага складывается операцией XOR с третьим выходным фрагментом.
Выходное значение функции F получается путем сложения результата предыдущего шага с четвертым выходным фрагментом по модулю.
Функцию F можно определить так:
F(x) = (
(S1(x1)
+ S2(x2)
mod 232)
S3(x3)
) + S4(x4)
mod 232,
где x1...x4 - 8-битные фрагменты входного значения x.
Расшифрование выполняется аналогично шифрованию, но ключи K1...K18 используются в обратном порядке.
Рисунок 2. Функция F алгоритма Blowfish.