Программная реализация режима сцепления блоков шифра "Blowfish"
Назначение алгоритма "Blowfish", особенности длины ключа и степени криптостойкости. Обоснование программной реализации расширения ключа и сцепления блоков шифра "Blowfish". Проверка использования инициализирующего вектора и распространения ошибок шифра.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 30.01.2014 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
3
Размещено на http://www.allbest.ru/
1
Министерство образования и науки РФ
БРЯНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра «Информатика и программное обеспечение»
программная Реализация режима сцепления блоков шифра «BlowFish»
КУРСОВАЯ РАБОТА
Руководитель
доц. Дергачев К.В.
Студент
Реденков А.Н.
БРЯНСК 2013
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ
1. АНАЛИТИЧЕСКАЯ ЧАСТЬ
1.1 Blowfish
1.2 DES
1.3 IDEA
1.4 ГОСТ 28147-89
1.5 Вывод
1.6 Режимы работы
1.6.1 Режим электронной кодовой таблицы (ECB)
1.6.2 Режим сцепления блоков (CBC)
1.6.3 Режим обратной связи по шифр-тексту
1.6.4 Режим обратной связи по выходу (OFB)
2. Конструкторская часть
2.1 Общий алгоритм
2.2 Расширение ключа
2.3 Реализация сети Фейстеля
2.4 Режим сцепления блоков
3. Экспериментальная часть
3.1 Руководство пользователя
3.2 Эксперименты
3.2.1 Стандартный сценарий
3.2.2 Проверка использования инициализирующего вектора
3.2.3 Проверка распространения ошибки
3.2.4 Проверка на потерю части сообщения
3.2.5 Проверка идентифицирующего блока
Список литературы
ВВЕДЕНИЕ
Алгоритм Blowfish был разработан Брюсом Шнайером в 1994 г. Автор алгоритма предложил его в качестве замены стандарту DES.
Отличительными особенностями этого алгоритма стала более высокая степень криптостойкости, нежели алгоритма DES (в том числе за счет использования переменной длины ключа, до 448 бит), высокая скорость шифрации/дешифрации (за счет генерации таблиц замены) и конечно -- возможность его свободного применения для любых целей.
Название алгоритма символизирует один из этапов работы: расширение ключа от 448 бит до 4168 байт, подобно иглобрюхой рыбе (англ. Blowfish).
ключ алгоритм ошибка шифр blowfish
1. АНАЛИТИЧЕСКАЯ ЧАСТЬ
1.1 Blowfish
BlowFish -- алгоритм 64-битного блочного шифра с ключом переменной длины (до 448 бит).
В общем случае алгоритм состоит из двух этапов -- расширение ключа и шифрация/дешифрация исходных данных (Рис.1).
Рис. 1 Общий алгоритм
Шифрация данных, а также создания матрицы раундовых ключей и подстановки, происходит через использование сети Фейстеля, состоящей в свою очередь из 16 раундов, но с некоторыми особенностями генерации и использования раундовых ключей (Рис.2).
Рис. 2 Измененная сеть Фейстеля
Функция раунда F весьма проста и использует только операции XOR и сложение по модулю 232.
На этапе расширения ключа, исходный ключ преобразуется в матрицу раундовых ключей (P) и матрицу подстановки (S, Substitution-box) (или замены), общим объемом в 4168 байт. При этом выполняется 521 полная итерация сети Фейстеля. Всё это является весьма трудозатратной операцией, и именно поэтому алгоритм Blowfish не рекомендуется использовать там, где требуется частая смена ключа.
1.2 DES
Симметричный блочный шифр с длиной ключа 56 бит.
Процесс шифрования заключается в начальной перестановке битов 64-битового блока с помощью специальной таблицы, шестнадцати циклах шифрования и, наконец, обратной перестановке битов (рис.3). Цикл шифрования представляет собой сеть Фейстеля. Из-за небольшого числа возможных ключей (всего 256), появляется возможность их полного перебора на быстродействующей вычислительной технике за реальное время.
Рис. 3 Алгоритм DES
1.3 IDEA
Симметричный блочный шифр с длиной ключа 128 бит и размером блока 64 бита.
Процесс шифрования состоит из восьми одинаковых раундов шифрования и одного выходного преобразования. Исходный незашифрованный текст делится на блоки по 64 бита. Каждый такой блок делится на четыре подблока по 16 бит каждый. В каждом раунде используются свои подключи согласно таблице подключей. Над 16-битными подключами и подблоками незашифрованного текста производятся следующие операции:
· умножение по модулю 216 + 1 = 65537, причем вместо нуля используется 216
· сложение по модулю 216
· побитовое исключающее ИЛИ
После выполнения выходного преобразования конкатенация подблоков D1', D2', D3' и D4' представляет собой зашифрованный текст. Затем берется следующий 64-битный блок незашифрованного текста и алгоритм шифрования повторяется. Так продолжается до тех пор, пока не зашифруются все 64-битные блоки исходного текста (рис. 4).
Рис. 4 Алгоритм IDEA
1.4 ГОСТ 28147-89
Блочный шифр с 256-битным ключом и 32 циклами преобразования, оперирующий 64-битными блоками. Основа алгоритма шифра -- сеть Фейстеля. Для зашифровывания в этом режиме 64-битный блок открытого текста сначала разбивается на две половины (младшие биты -- A, старшие биты -- B). На i-ом цикле используется подключ Ki:
Ai+1 = Bi?f(Ai,Ki)
Bi+1 = Ai
Для генерации подключей исходный 256-битный ключ разбивается на восемь 32-битных блоков: K1…K8.
Ключи K9…K24 являются циклическим повторением ключей K1…K8 (нумеруются от младших битов к старшим). Ключи K25…K32 являются ключами K8…K1.
После выполнения всех 32 раундов алгоритма, блоки A33 и B33 склеиваются (обратите внимание, что старшим блоком становится A33, а младшим -- B33) -- результат есть результат работы алгоритма.
Основные проблемы ГОСТа связаны с неполнотой стандарта в части генерации ключей и таблиц замен.
Рис. 5 Шифрация ГОСТ 28147-89
1.6 Режимы работы
1.6.1 Режим электронной кодовой таблицы (ECB)
В этом режиме каждый из блоков кодируется независимо с использованием одного и того же ключа (рис.6) . Основное достоинство этого алгоритма - простота реализации. Недостаток - относительно слабая устойчивость против криптоанализа.
Рис. 6 Режим ECB
1.6.2 Режим сцепления блоков (CBC)
В этом режиме каждый последующий блок исходного текста складывается по модулю 2 с предыдущим блоком шифр-текста. Самый первый блок складывается со случайно сгенерированным блоком - вектором инициализации IV, который добавляется в начало шифр-текста (рис.7).
Режим CBC является самовосстанавливающимся. Ошибка в шифр-тексте влияет только на текущий и следующий за ним блок. Последний блок шифр-текста может служить кодом аутентификации сообщения.
Рис. 7 Режим CBC
1.6.3 Режим обратной связи по шифр-тексту
Исходный файл считывается последовательными t-битовыми блоками (t <= 64). 64-битовый сдвиговый регистр вначале содержит вектор инициализации IV, выравненный по правому краю.
Для всех i = 1...n блок шифртекста C(i) определяется следующим образом:
C(i) = M(i) XOR P(i-1) ,
где P(i-1) - старшие t битов операции Crypt(С(i-1)).
Обновление сдвигового регистра осуществляется путем удаления его старших t битов и дописывания справа C(i)(рис. 8).
Этот режим позволяет шифровать текст произвольной длины, не дополняя его до размеров полного блока.
Рис. 8 Режим CFB
1.6.4 Режим обратной связи по выходу (OFB)
Данный режим отличается от CFB только способом формирования сдвигового регистра (рис. 9).
Режим OFB имеет следующее преимущество по сравнению с режимом CFB: ошибки, возникающие в результате передачи по каналу с шумом, при дешифровании не «размазываются» по всему шифротексту, а локализуются в пределах одного блока. Однако, это свойство дает дополнительные параметры для криптоанализа, поэтому данный режим используется только при необходимости (высокий уровень помех).
Рис. 9 Режим OFB
1.6 Вывод
В программной реализации по сравнению с DES IDEA в два раза быстрее, что является существенным повышением скорости, длина ключа у IDEA имеет размер 128 бит, против 56 бит у DES, что является хорошим улучшением против полного перебора ключей. Вероятность использования слабых ключей очень мала и составляет 2-64. IDEA быстрее алгоритма ГОСТ 28147-89. Преимуществом также является хорошая изученность и устойчивость к общеизвестным средствам криптоанализа.
Blowfish показывает более высокие результаты при использовании кэша для хранения всех подключей. В этом случае он опережает алгоритмы DES, IDEA. На отставание IDEA влияет операция сложения по модулю 232+1.
Хотя Blowfish по скорости опережает его аналоги, но при увеличении частоты смены ключа основное время его работы будет уходить на подготовительный этап, что в сотни раз уменьшает его эффективность.
Среди режимов шифрования наиболее предпочтительными являются CBC и CFB, за счет высокой криптостойкости. Выбор зависит от способа применения шифра - блочный или поточный.
2. Конструкторская часть
2.1 Общий алгоритм
Рис. 10 Общий алгоритм работы
Реализация алгоритма осуществляется классом Blowfish.
При создании экземпляра класса, конструктор принимает на вход ключ шифрования и сразу проводит операцию расширения.
public BlowFish(string hexKey)
{
randomSource = new RNGCryptoServiceProvider();
SetupKey(HexToByte(hexKey));
}
Шифрация в режиме сцепления блоков производится методом Crypt_CBC(byte[] text, bool decrypt), который принимает на вход текст для шифрации и флаг действия.
2.2 Расширение ключа
Рис. 11 Алгоритм расширения ключа
В программе расширение ключа реализовано функцией SetupKey(byte[] cipherKey), которая принимает на вход массив байтов исходного ключа.
private void SetupKey(byte[] cipherKey)
{
bf_P = SetupP();
bf_s0 = SetupS0();
bf_s1 = SetupS1();
bf_s2 = SetupS2();
bf_s3 = SetupS3();
key = new byte[cipherKey.Length];
Buffer.BlockCopy(cipherKey, 0, key, 0, cipherKey.Length);
int j = 0;
for (int i = 0; i < 18; i++)
{
uint d = (uint)(((key[j % cipherKey.Length] * 256 + key[(j + 1) % cipherKey.Length]) * 256 + key[(j + 2) % cipherKey.Length]) * 256 + key[(j + 3) % cipherKey.Length]);
bf_P[i] ^= d;
j = (j + 4) % cipherKey.Length;
}
xl_par = 0;
xr_par = 0;
for (int i = 0; i < 18; i += 2)
{
encipher();
bf_P[i] = xl_par;
bf_P[i + 1] = xr_par;
}
for (int i = 0; i < 256; i += 2)
{
encipher();
bf_s0[i] = xl_par;
bf_s0[i + 1] = xr_par;
}
for (int i = 0; i < 256; i += 2)
{
encipher();
bf_s1[i] = xl_par;
bf_s1[i + 1] = xr_par;
}
for (int i = 0; i < 256; i += 2)
{
encipher();
bf_s2[i] = xl_par;
bf_s2[i + 1] = xr_par;
}
for (int i = 0; i < 256; i += 2)
{
encipher();
bf_s3[i] = xl_par;
bf_s3[i + 1] = xr_par;
}
}
2.3 Реализация сети Фейстеля
Рис. 12 Реализация сети Фейстеля
В программе сеть Фейстеля реализована функцией encipher(). Функция round(uint a, uint b, uint n) реализует функцию итерации. Переменные a и b - левый и правый подблоки, n - номер итерации.
private void encipher()
{
xl_par ^= bf_P[0];
for (uint i = 0; i < 16; i+= 2)
{
xr_par = round(xr_par, xl_par, i + 1);
xl_par = round(xl_par, xr_par, i + 2);
}
xr_par = xr_par ^ bf_P[17];
uint swap = xl_par;
xl_par = xr_par;
xr_par = swap;
}
private uint round(uint a, uint b, uint n)
{
uint x1 = (bf_s0[wordByte0( b) ] + bf_s1[wordByte1( b) ]) ^ bf_s2[wordByte2( b) ];
uint x2 = x1 + bf_s3[this.wordByte3( b) ];
uint x3 = x2 ^ bf_P[n];
return x3 ^ a;
}
2.4 Шифрация в режиме сцепления блоков
Реализация шифрования в режиме сцепления блоков.
Ниже приведен фрагмент функции Crypt_CBC(byte[] text, bool decrypt), демонстрирующий цикл шифрации текста.
Функция XorBlock() производит операцию XOR над двумя блоками данных.
Функция BlockEncrypt(ref byte[] block) непосредственно шифрует блок данных.
for (int i = 0; i < plainText.Length; i += 8)
{
Buffer.BlockCopy(plainText, i, block, 0, 8);
XorBlock(ref block, iv);
BlockEncrypt(ref block);
Buffer.BlockCopy(block, 0, iv, 0, 8);
Buffer.BlockCopy(block, 0, plainText, i, 8);
}
private void BlockEncrypt(ref byte[] block)
{
SetBlock(block);
encipher();
GetBlock(ref block);
}
3. Экспериментальная часть
3.1 Руководство пользователя
Интерфейс пользователя состоит из двух кнопок (рис.13).
После нажатия на кнопку «Зашифровать» пользователю последовательно предлагается выбрать файл с ключом, файл с исходным текстом и файл для сохранения зашифрованного текста.
После нажатия на кнопку «Расшифровать» пользователю последовательно предлагается выбрать файл с ключом, файл с зашифрованным текстом и файл для сохранения расшифрованного текста.
Рис. 13 Скриншот программы
Программа корректно работает с текстами содержащими русские и латинские символы, с текстами большого размера.
3.2 Эксперименты
3.2.1 Стандартный сценарий
Исходный текст |
текст для проверки режима сцепления блоков длиной 62 символа. |
|
Ключ шифрования |
04B915BA43FEB5B6 |
|
Инициализирующий вектор |
49352750873788433184 |
|
Зашифрованный текст (16-ричный вид) |
d7ae29a6195c7a557fa72ddff622990beebf851210eea1424d42f92dd54350b73c7ebddada4d40c4bc1950bcccd385deadd0d6eba2699f8739439cbb019c607c7b757046f51b936294eddca4697b34b66b8e2a9443b6f900a7ff05b6920fe116c25f99ca380ad0d068141ce41e2242ac47d6f7d8853eea3e3885917d4568b7d1c42b5f619af5479a |
|
Ключ расшифрования |
04B915BA43FEB5B6 |
|
Расшифрованный текст |
текст для проверки режима сцепления блоков длиной 62 символа. |
3.2.2 Проверка использования инициализирующего вектора
Исходный текст |
текст для проверки режима сцепления блоков длиной 62 символа. |
|
Ключ шифрования |
04B915BA43FEB5B6 |
|
Инициализирующий вектор (опыт №1) |
49352750873788433184 |
|
Зашифрованный текст (опыт №1) |
d7ae29a6195c7a557fa72ddff622990beebf851210eea1424d42f92dd54350b73c7ebddada4d40c4bc1950bcccd385deadd0d6eba2699f8739439cbb019c607c7b757046f51b936294eddca4697b34b66b8e2a9443b6f900a7ff05b6920fe116c25f99ca380ad0d068141ce41e2242ac47d6f7d8853eea3e3885917d4568b7d1c42b5f619af5479a |
|
Инициализирующий вектор(опыт №2) |
9226237433563920488 |
|
Зашифрованный текст (опыт №2) |
066df32b01f65e7633a2e65324fd3679796f7402119fbe869f5ef8f97c94e8eca3efe60a28ce3820e3e09c57858337fb6266395139efbd6981ddcc03d1c4c7985a25a9b0484be0fc25ed960f20c7fcd19554375bca984d1a044b659f9301d2b1cc47f9d85430b951dbecefb427ca9490834fdba59c4694471810977aa00b36dfe0b720c50c3feee4 |
|
Ключ расшифрования |
04B915BA43FEB5B6 |
|
Расшифрованный текст |
текст для проверки режима сцепления блоков длиной 62 символа. |
3.2.3 Проверка распространения ошибки
Исходный текст |
текст для проверки режима сцепления блоков длиной 62 символа. |
|
Ключ шифрования |
04B915BA43FEB5B6 |
|
Инициализирующий вектор |
5708922056785239375 |
|
Зашифрованный текст (16-ричный вид) |
97b75b39ecbd8a94032ded5893076f5400e72e27cd14b08013ed9dd0847b352e8e2646357a449f0989eae21921476cdfe047a2bfbedf7e31195ada2573293622de72fd3721c355537c931ff28063d2b20da5c41e3ea38d2355be14f9bda0253741a23ee5444bfbe3f88b21e8bc542b1c52eebc1b16e78d65ffe3c41c0550f8cbd4e75a61f38efad3 |
|
Зашифрованный текст с внесенной ошибкой (16-ричный вид) |
97b75b39ecbd8a94032ded5893076f5400e72e27cd14b08013ed9dd0847b352e8e2646357a449f0989eae21921476cdfe047a2bfbedf7e31195ada2573293622de72fd37212355537c931ff28063d2b20da5c41e3ea38d2355be14f9bda0253741a23ee5444bfbe3f88b21e8bc542b1c52eebc1b16e78d65ffe3c41c0550f8cbd4e75a61f38efad3 |
|
Ключ расшифрования |
04B915BA43FEB5B6 |
|
Расшифрованный текст |
текст для проверки режима сц????ни? блоков длиной 62 символа. |
3.2.4 Проверка на потерю части сообщения
Исходный текст |
текст для проверки режима сцепления блоков длиной 62 символа. |
|
Ключ шифрования |
04B915BA43FEB5B6 |
|
Инициализирующий вектор |
5708922056785239375 |
|
Зашифрованный текст (16-ричный вид) |
ebdbe6c99212b816c4ee3404534068294d0b555141446fbe29693ae69bc45628f39d5d99cb687741648fa0ea6a0df5339eb196411e86205370df42882650e0a3e4adca789a4c8693d34ca4b3343957a533dbf9516a9981fc0d8a9c890e692599e9935ef29bb43c2a38a90254179e6a2509df160eea2d12d8d195cb480e9aa4a51475178ae683536c |
|
Зашифрованный текст с потерянным символом (16-ричный вид) |
97b75b39ecbd8a94032ded5893076f5400e72e27cd14b08013ed9dd0847b352e8e2646357a449f0989eae21921476cdfe047a2bfbedf7e31195ada2573293622de72fd37212355537c931ff28063d2b20da5c41e3ea38d2355be14f9bda0253741a23ee5444bfbe3f88b21e8bc542b1c52eebc1b16e78d65ffe3c41c0550f8cbd4e75a61f38efad3 |
|
Ключ расшифрования |
04B915BA43FEB5B6 |
|
Расшифрованный текст |
текст дл?–ы???ђї???»°???аo????ќH?›Ј?+?јэ?????°??ЙвЕQ???АБ?µр??????????????? |
3.2.5 Проверка идентифицирующего блока
Исходный текст (опыт №1) |
текст для проверки режима сцепления блоков длиной 62 символа. |
|
Ключ шифрования (опыт №1) |
04B915BA43FEB5B6 |
|
Инициализирующий вектор (опыт №1) |
00000000 |
|
Последний блок зашифрованного текста(опыт №1) |
c75ca11b9856676b |
|
Исходный текст (опыт №2) |
текст для праверки режима сцепления блоков длиной 62 символа. |
|
Ключ шифрования (опыт №2) |
04B915BA43FEB5B6 |
|
Инициализирующий вектор (опыт №2) |
00000000 |
|
Последний блок зашифрованного текста(опыт №2) |
435ed02780008efb |
Список литературы
1. IT портал [http://habrahabr.ru].
2. A blog covering security and security technology [www.schneier.com].
3. М. Масленников, Практическая криптография / Масленников М. - Спб.: БХВ-Петербург, 2003. - 458 с.
4. С. Панасенко, Алгоритмы шифрования / Панасенко С. - СПб.: БХВ-Петербург, 2009. - 576 с.
5. И. Ященко, Основные математические понятия криптографии / Ященко И.В. - М.: Москва, 2003.
Размещено на Allbest.ru
Подобные документы
Разработка криптографического алгоритма программы ручного шифра по таблице Виженера. Разработка программы, выполняющей шифрование и расшифрование. Особенности использования в качестве ключа самого открытого текста. Алгоритмы решения "обратных" задач.
курсовая работа [45,0 K], добавлен 13.11.2009Требования к серверной части программы. Blowfish c обратной связью по шифр-тексту. Процедура расширения ключа. Взаимодействия агентов в трёхмерном пространстве. Обоснование выбора среды программирования. Проверка выполнения функциональных требований.
дипломная работа [3,6 M], добавлен 18.10.2015Принцип работы и программная реализация однозвучного, одноалфавитного и полиграммного шифра. Шифрование по методу подстановки, замены и кодового слова. Безопасность шифровки простой замены. Частотные характеристики текстовых сообщений и дешифрация.
контрольная работа [1,1 M], добавлен 02.02.2012Реализация криптографического алгоритма шифрования и дешифрования с использованием шифра Виженера. Понятие и суть полиалфавитного шифра. Метод полиалфавитного шифрования буквенного текста с использованием ключевого слова. Взлом полиалфавитных шифров.
курсовая работа [863,0 K], добавлен 21.04.2012Реализация алгоритма DES и режимов шифрования для любой длины сообщения и любой длины ключа. Шифрование сообщений различной длины и ключа с замериванием времени и скорости шифрования. Реализация алгоритма RSA. Сохранение зашифрованного файла на диск.
курсовая работа [398,4 K], добавлен 26.01.2010Теоретические основы, адаптация и практическое применение методики интегральной атаки для использования против усеченного варианта блочного симметричного шифра Crypton. Основные требования к механизмам системы, обеспечивающим конфиденциальность.
дипломная работа [642,7 K], добавлен 19.06.2011Проблема скрытия и защиты информации от несанкционированного использования. История создания шифра. Решения задачи шифрования текста и кодирования данных. Тестирование полученного приложения и анализ работы программы с точки зрения пользователя.
курсовая работа [3,0 M], добавлен 24.11.2013Симметричные криптосистемы; алгоритмы шифрования и дешифрования данных, их применение в компьютерной технике в системах защиты конфиденциальной и коммерческой информации. Основные режимы работы алгоритма DES, разработка программной реализации ключа.
курсовая работа [129,6 K], добавлен 17.02.2011Программа на языке Turbo Pascal для шифрования данных с помощью шифра Тритемиуса. Входные, выходные данные. Схема алгоритма и текст программы. Порядок ввода исходных данных и описание получаемых результатов. Тестовых задания и анализ их функционирования.
курсовая работа [4,0 M], добавлен 06.01.2011Разработка и программная реализация математической модели симметричного шифра "Пирамида". Проектирование программы, реализующей демонстрацию возможностей разработанного алгоритма и предоставляющей полноценный интерфейс пользователя по работе с ним.
дипломная работа [519,0 K], добавлен 19.06.2015