Кафедра комплексной защиты информационных систем — КиберПедия 

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Кафедра комплексной защиты информационных систем

2021-04-18 42
Кафедра комплексной защиты информационных систем 0.00 из 5.00 0 оценок
Заказать работу

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Юго-Западный государственный университет»

Кафедра комплексной защиты информационных систем

 

КУРСОВАЯ РАБОТА

 

 

по дисциплине: __ «МАТЕМАТИЧЕСКИЕ ОСНОВЫ КРИПТОЛОГИИ»

                         (наименование учебной дисциплины)

на тему: «Блочный алгоритм Blowfish шифрования с ключом переменной длины»

 

Специальность _ 090104 «Комплексная защита объектов информатизации» ______

(код, наименование)

Автор работы __ Д.М. Бугорский __________    _________________________

(инициалы, фамилия)                                                                  (подпись, дата)

Группа__ ЗИ_- 01 _______

 

Руководитель работы__ М. А. Ефремов ______    _________________________

         (инициалы, фамилия)                                                              (подпись, дата)

Работа защищена________________________

                (дата)        

Оценка_____________________

 

Члены комиссии _____________________  _______________________________

            (подпись, дата)                                                (инициалы, фамилия)

_____________________  _______________________________

            (подпись, дата)                                                (инициалы, фамилия)

_____________________  _______________________________

            (подпись, дата)                                                (инициалы, фамилия)

 

Курск, 2013 г.

 

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Юго-Западный государственный университет»

Кафедра комплексной защиты информационных систем

ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ

по дисциплине:

«Математическим основам криптологии»

 

Студент (слушатель)   Бугорский Д.М.    шифр 01115 группа ЗИ –01

(фамилия, инициалы)

 

1. Тема ­­­­­­ «Блочный алгоритм Blowfish шифрования с ключом переменной длины»

 

2. Срок представления работы (проекта) к защите «8»__ июня _____20 13 г.   

 

3. Исходные данные (для проектирования, для научного исследования):

блок шифрования – 64 бита, длина ключа – до 448 бит.

 

4. Содержание пояснительной записки курсовой работы (проекта):

 

1. Введение понятия симметричного шифрования.

2. Рассмотрение алгоритма шифрования Blowfish.

3. Построение блок схемы алгоритма.

4. Реализация данного алгоритма программно.

5. Описание интерфейса.

 

5. Графический материал отсутствует

 

Руководитель работы (проекта)                 Ефремов М.А.                 

 (подпись, дата)

Задание принял к исполнению                                                                

(подпись, дата)

СОДЕРЖАНИЕ

ВВЕДЕНИЕ                                                                              4

1. ТЕОРЕТИКО-МАТЕМАТИЧЕСКИЕ ОСНОВЫ СИММЕТРИЧНЫХ КРИПТОСИСТЕМ                                                                   5

1. 1 Общие понятия симметричных шифров                           5

1. 2 Преимущества и недостатки симметричных криптосистем   7

1. 3 Блочные шифры                                                               7

2 АЛГОРИТМ ШИФРОВАНИЯ BLOWFISH                            10

2. 1 Описание и структура алгоритма Blowfish                         10

2. 2 Процедура расширения ключа                                       13

2. 3 Скорость работы и криптостойкость алгоритма Blowfish 13

    3 ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ АЛГОРИТМА                      16

3.1 Блок-схема алгоритма шифрования/расшифрования     16

3. 2 Листинг программы                                                          18

3. 3 Интерфейс программы и результаты ее работы             30

ЗАКЛЮЧЕНИЕ                                                                        31

БИБЛИОГРАФИЧЕСКИЙ СПИСОК                                     33

 

 

ВВЕДЕНИЕ

Криптоло́гия (от др.-греч. κρυπτός — скрытый и λόγος — слово) — наука, занимающаяся методами шифрования и дешифрования. Криптология состоит из двух частей — криптографии и криптоанализа. Криптография занимается разработкой методов шифрования данных, в то время как криптоанализ занимается оценкой сильных и слабых сторон методов шифрования, а также разработкой методов, позволяющих взламывать криптосистемы.

Изначально криптография изучала методы шифрования информации — обратимого преобразования открытого (исходного) текста на основе секретного алгоритма и/или ключа в шифрованный текст (шифртекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифрование и расшифрование проводится с использованием одного и того же секретного ключа. Помимо этого раздела современная криптография включает в себя асимметричные криптосистемы, системы электронной цифровой подписи (ЭЦП), хеш-функции, управление ключами, получение скрытой информации, квантовую криптографию.

В моей курсовой работе проанализирован и программно реализован алгоритм Blowfish. Он был разработан Брюсом Шнейером в 1993 году, как быстрая и свободно-доступная замена уже существующих алгоритмов, представляющая собой сеть Фейстеля. Данный алгоритм незапатентован, свободно лицензируем и свободно доступен для любого применения. Blowfish намного быстрее, чем DES и IDEA.

ТЕОРЕТИКО-МАТЕМАТИЧЕСКИЕ ОСНОВЫ

СИММЕТРИЧНЫХ КРИПТОСИСТЕМ

Блочные шифры

 

Блочный шифр — разновидность симметричного шифра. В отличие от поточного, в блочном шифре содержимое одного блока никак не влияет на результат шифрования других блоков и чаще всего блоковый шифр обрабатывает открытый текст блоками по несколько (как правило 8 или 16) байт за одну итерацию.

Так как размер шифруемого сообщения не всегда кратен размеру блока, возникает проблема дополнения, имеющая несколько решений. Можно, например, передавать в незашифрованном виде размер полезной части зашифрованных данных и после расшифровки лишние байты просто отбрасывать. На практике же часто применяют другой способ.

Если алгоритм оперирует 8-байтовыми блоками данных, а в последнем блоке, например, только 3 байта полезных данных, то все неиспользуемые байты, кроме самого последнего, можно заполнить любым значением, а в последнем байте записать число, равное количеству неиспользуемых байтов. Тогда, получив и расшифровав все блоки, необходимо отбросить с конца столько байт, сколько указано в последнем байте последнего блока. Правда, если исходное сообщение имело длину, кратную размеру блока, то возникает некоторая сложность, т. к. требуется добавить 0 байт, и последний байт должен содержать число байт дополнения. Для разрешения этой проблемы при зашифровании добавляется новый блок, последний байт которого содержит размер блока. Дополнительный блок будет целиком отброшен при расшифровании.

Блочные шифры быть использованы в нескольких режимах:

· режим простой замены (Electronic CodeBook, ЕСВ);

· с зацеплением блоков шифртекста (Cipher Block Chaining, СВС);

· с обратной связью по шифртексту (Cipher FeedBack, CFB);

· с обратной связью по выходу (Output FeedBack, OFB);

· по счетчику (Counter);

· с зацеплением блоков открытого текста (Plaintext Block Chaining, РВС);

· с обратной связью по открытому тексту (Plaintext FeedBack, PFB);

· с усиленным сцеплением блоков шифртекста (различные модификации режима СВС);

· с обратной связью по выходу и нелинейной функцией (Output FeedBack with Nonlinear Function, OFBNLF);

· по счетчику с нелинейной функцией (Counter with Nonlinear Function, CNLF).

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

 

Описание алгоритма 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-битным субблоком данных проводятся следующие действия:

1. Значение субблока складывается с ключом i-го раунда Ki операцией XOR, результат операции становится новым значением субблока.

2. Субблок обрабатывается функцией F (описана ниже), результат обработки накладывается на правый субблок операцией XOR.

3. Субблоки меняются местами во всех раундах, кроме последнего.

4. После 16 раундов выполняется наложение на субблоки еще двух подключей: K17 и K18 складываются операцией XOR с правым и левым субблоками соответственно.

 

Рисунок 1. Структура алгоритма Blowfish.

 

 

Функция F (рис. 2) обрабатывает субблок следующим образом:

1. 32-битное входное значение делится на четыре фрагмента по 8 бит, каждый из которых прогоняется через одну из таблиц замен S1...S4 с получением четырех 32-битных выходных фрагментов. Таблицы замен содержат по 256 значений по 32 бита, они не являются фиксированными и зависят от ключа шифрования. Принципы их вычисления подробно описаны ниже.

2. Первые два выходных фрагмента складываются по модулю.

3. Результат предыдущего шага складывается операцией XOR с третьим выходным фрагментом.

4. Выходное значение функции 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.

Процедура расширения ключа

Подключи вычисляются с использованием самого алгоритма Blowfish.

Задача процедуры расширения ключа состоит в вычислении на основе ключа шифрования значений ключей раунда K1...K18 и таблиц замен S1...S4.

Расширение ключа выполняется в 5 этапов:

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

2. Операцией XOR на K1 накладываются первые 32 бита ключа шифрования, на K2 - следующие 32 бита и т. д. - до K18. Если ключ шифрования короче, чем необходимо для наложения на K1...K18, то он накладывается циклически.

3. С использованием полученных ключей раунда и таблиц замен выполняется шифрование алгоритмом Blowfish блока данных, состоящего из 64 нулевых бит. Результат становится новым значением ключей K1 и K2.

4. Результат предыдущего этапа снова шифруется алгоритмом Blowfish (причем уже с измененными значениями ключей K1 и K2), в результате получаются новые значения ключей K3 и K4.

5. Шифрование выполняется до тех пор, пока новыми значениями не будут заполнены все ключи раунда и таблицы замен.

В процедуре расширения ключа мы видим, что для создания ключа необходима какая-то фиксированная псевдослучайная строка S (набор из любых шестнадцатеричных символов). На строку S c помощью операции XOR накладывается ключ принадлежащий пользователю. В теории для каждого ключа должна соответствовать своя фиксированная псевдослучайная строка S.

 

Листинг программы

unit UMain;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Blowfish;

type

TForm1 = class(TForm)

Memo1: TMemo;

Label1: TLabel;

Label2: TLabel;

Memo2: TMemo;

Label3: TLabel;

Memo3: TMemo;

Button1: TButton;

Label4: TLabel;

Edit1: TEdit;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Data: array of byte;

Key: array of byte;

IV: array of byte;

KeyData: TBlowfishData;

key_len, data_len:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); //кодирование

var

i: integer;

str_key:string;

str_data:string;

begin

str_key:=Edit1.Text;

str_data:=Memo1.Lines.Text;

data_len:=Length(str_data);

Setlength (Data,data_len);

for i:=0 to data_len-1 do Data[i]:=ord(str_data[i+1]);

key_len:=Length(str_key);

Setlength (Key,key_len);

for i:=0 to key_len-1 do Key[i]:=ord(str_key[i+1]);

Setlength (IV,key_len);

for i:=0 to key_len-1 do IV[i]:=random(256);

 

BlowfishInit(KeyData,@Key,Sizeof(Key),@IV);

for i:= 1 to (data_len div 8) do

BlowfishEncrypt(KeyData,@Data[(i-1)*8],@Data[(i-1)*8]);

for i:=1 to data_len do str_data[i]:=chr(Data[i-1]);

Memo2.Lines.Text:=str_data;

BlowfishReset(KeyData);

Button2.Enabled:=true;

end;

procedure TForm1.Button2Click(Sender: TObject); //расскодирование

var

i: integer;

str_key:string;

str_data:string;

begin

for i:= 1 to (data_len div 8) do

BlowfishDecrypt(KeyData,@Data[(i-1)*8],@Data[(i-1)*8]);

str_data:='';

for i:=0 to data_len-1 do str_data:= str_data + chr(Data[i]);

Memo3.Lines.Text:=str_data;

BlowfishReset(KeyData);

BlowfishBurn(KeyData);

end;

 

end.

 

{

64 bit блок шифрования

Длина ключа - до 448 bit

}

unit Blowfish;

interface

uses

Sysutils, Tools;

type

TBlowfishData= record

InitBlock: array[0..7] of byte; { инициализация вектора }

LastBlock: array[0..7] of byte; { значение вектора }

SBoxM: array[0..3,0..255] of DWord;

PBoxM: array[0..17] of DWord;

end;

procedure BlowfishInit(var Data: TBlowfishData; Key: pointer; Len: integer; IV: pointer);

{ initializes the TBlowfishData structure with the key information and IV if applicable }

procedure BlowfishBurn(var Data: TBlowfishData);

{ удаление информации о ключе }

 

procedure BlowfishEncrypt(var Data: TBlowfishData; InData, OutData: pointer);

{ кодирование при длине блока в 64 бита }

 

procedure BlowfishDecrypt(var Data: TBlowfishData; InData, OutData: pointer);

{ раскодирование при длине блока в 64 бита }

 

procedure BlowfishReset(var Data: TBlowfishData);

{ очистка информации }

 

{******************************************************************************}

implementation

{$I Blowfish.inc}

{$R-}

procedure BlowfishInit;

var

i, k: integer;

A: DWord;

KeyB: PByteArray;

Block: array[0..7] of byte;

begin

if (Len<= 0) or (Len> 56) then

raise Exception.Create('Ключ должен быть длинной от 1 до 56 байт');

KeyB:= Key;

Move(SBox,Data.SBoxM,Sizeof(SBox));

Move(PBox,Data.PBoxM,Sizeof(PBox));

with Data do

begin

if IV= nil then begin

FillChar(InitBlock,8,0);

FillChar(LastBlock,8,0);

               end

                   else

begin

Move(IV^,InitBlock,8);

Move(IV^,LastBlock,8);

end;

k:= 0;

for i:= 0 to 17 do begin

A:= KeyB[(k+3) mod Len];

A:= A + (KeyB[(k+2) mod Len] shl 8);

A:= A + (KeyB[(k+1) mod Len] shl 16);

A:= A + (KeyB[k] shl 24);

PBoxM[i]:= PBoxM[i] xor A;

k:= (k+4) mod Len;

                 end;

FillChar(Block,Sizeof(Block),0);

for i:= 0 to 8 do begin

BlowfishEncrypt(Data,@Block,@Block);

PBoxM[i*2]:= Block[3] + (Block[2] shl 8) + (Block[1] shl 16) + (Block[0] shl 24);

PBoxM[i*2+1]:= Block[7] + (Block[6] shl 8) + (Block[5] shl 16) + (Block[4] shl 24);

             end;

for k:= 0 to 3 do begin

for i:= 0 to 127 do begin

BlowfishEncrypt(Data,@Block,@Block);

SBoxM[k,i*2]:= Block[3] + (Block[2] shl 8) + (Block[1] shl 16) + (Block[0] shl 24);

SBoxM[k,i*2+1]:= Block[7] + (Block[6] shl 8) + (Block[5] shl 16) + (Block[4] shl 24);

             end;

               end;

end;

end;

 

procedure BlowfishBurn(var Data: TBlowfishData);

begin

FillChar(Data,Sizeof(Data),0);

end;

 

function BF_F(Data: TBlowfishData; xL: DWord): DWord;

begin

Result:= (((Data.SBoxM[0,(xL shr 24) and $FF] + Data.SBoxM[1,(xL shr 16) and $FF]) xor Data.SBoxM[2,(xL shr 8) and $FF]) + Data.SBoxM[3,xL and $FF]);

end;

 

procedure BFDoRound(Data: TBlowfishData; var xL, xR: DWord; RNum: integer);

begin

xL:= xL xor BF_F(Data,xR) xor Data.PBoxM[RNum];

end;

 

 

procedure BlowfishEncrypt;

var

xL, xR: DWord;

begin

Move(InData^,xL,4);

Move(pointer(integer(InData)+4)^,xR,4);

xL:= (xL shr 24) or ((xL shr 8) and $FF00) or ((xL shl 8) and $FF0000) or (xL shl 24);

xR:= (xR shr 24) or ((xR shr 8) and $FF00) or ((xR shl 8) and $FF0000) or (xR shl 24);

xL:= xL xor Data.PBoxM[0];

BFDoRound(Data,xR,xL,1);

BFDoRound(Data,xL,xR,2);

BFDoRound(Data,xR,xL,3);

BFDoRound(Data,xL,xR,4);

BFDoRound(Data,xR,xL,5);

BFDoRound(Data,xL,xR,6);

BFDoRound(Data,xR,xL,7);

BFDoRound(Data,xL,xR,8);

  BFDoRound(Data,xR,xL,9);

BFDoRound(Data,xL,xR,10);

BFDoRound(Data,xR,xL,11);

BFDoRound(Data,xL,xR,12);

BFDoRound(Data,xR,xL,13);

BFDoRound(Data,xL,xR,14);

BFDoRound(Data,xR,xL,15);

BFDoRound(Data,xL,xR,16);

xR:= xR xor Data.PBoxM[17];

xL:= (xL shr 24) or ((xL shr 8) and $FF00) or ((xL shl 8) and $FF0000) or (xL shl 24);

xR:= (xR shr 24) or ((xR shr 8) and $FF00) or ((xR shl 8) and $FF0000) or (xR shl 24);

Move(xR,OutData^,4);

Move(xL,pointer(integer(OutData)+4)^,4);

end;

 

procedure BlowfishDecrypt;

var

xL, xR: DWord;

begin

Move(InData^,xL,4);

Move(pointer(integer(InData)+4)^,xR,4);

xL:= (xL shr 24) or ((xL shr 8) and $FF00) or ((xL shl 8) and $FF0000) or (xL shl 24);

xR:= (xR shr 24) or ((xR shr 8) and $FF00) or ((xR shl 8) and $FF0000) or (xR shl 24);

xL:= xL xor Data.PBoxM[17];

BFDoRound(Data,xR,xL,16);

BFDoRound(Data,xL,xR,15);

BFDoRound(Data,xR,xL,14);

BFDoRound(Data,xL,xR,13);

BFDoRound(Data,xR,xL,12);

BFDoRound(Data,xL,xR,11);

BFDoRound(Data,xR,xL,10);

BFDoRound(Data,xL,xR,9);

BFDoRound(Data,xR,xL,8);

BFDoRound(Data,xL,xR,7);

BFDoRound(Data,xR,xL,6);

BFDoRound(Data,xL,xR,5);

BFDoRound(Data,xR,xL,4);

BFDoRound(Data,xL,xR,3);

BFDoRound(Data,xR,xL,2);

BFDoRound(Data,xL,xR,1);

xR:= xR xor Data.PBoxM[0];

xL:= (xL shr 24) or ((xL shr 8) and $FF00) or ((xL shl 8) and $FF0000) or (xL shl 24);

xR:= (xR shr 24) or ((xR shr 8) and $FF00) or ((xR shl 8) and $FF0000) or (xR shl 24);

Move(xR,OutData^,4);

Move(xL,pointer(integer(OutData)+4)^,4);

end;

 

 

procedure BlowfishReset;

begin

Move(Data.InitBlock,Data.LastBlock,8);

end;

 

end.

 

unit Tools;

interface

uses

Sysutils;

type

{$IFDEF VER120}

dword= longword;

{$ELSE}

dword= longint;

{$ENDIF}

function LRot16(X: word; c: integer): word; assembler;

function RRot16(X: word; c: integer): word; assembler;

function LRot32(X: dword; c: integer): dword; assembler;

function RRot32(X: dword; c: integer): dword; assembler;

procedure XorBlock(I1, I2, O1: PByteArray; Len: integer);

procedure IncBlock(P: PByteArray; Len: integer);

 

implementation

 

function LRot16(X: word; c: integer): word; assembler;

asm

mov ecx,&c

mov ax,&X

rol ax,cl

mov &Result,ax

end;

 

function RRot16(X: word; c: integer): word; assembler;

asm

mov ecx,&c

mov ax,&X

ror ax,cl

mov &Result,ax

end;

 

function LRot32(X: dword; c: integer): dword; assembler;

asm

mov ecx,&c

mov eax,&X

rol eax,cl

mov &Result,eax

end;

 

function RRot32(X: dword; c: integer): dword; assembler;

asm

mov ecx,&c

mov eax,&X

ror eax,cl

mov &Result,eax

end;

 

procedure XorBlock(I1, I2, O1: PByteArray; Len: integer);

var

i: integer;

begin

for i:= 0 to Len-1 do O1[i]:= I1[i] xor I2[i];

end;

 

procedure IncBlock(P: PByteArray; Len: integer);

begin

Inc(P[Len-1]);

if (P[Len-1]= 0) and (Len> 1) then IncBlock(P,Len-1);

end;

 

end.

ЗАКЛЮЧЕНИЕ

Алгоритм Blowfish имеет как множество преимуществ перед другими алгоритмами, так и множество недостатков.

В своей книге "Прикладная криптография" Брюс Шнайер отметил следующие ограничения алгоритма Blowfish. Во-первых, "...алгоритм Blowfish не годится для применения в случаях, где требуется частая смена ключей". Процедура расширения ключа ресурсоемка, поэтому одно из достоинств алгоритма Blowfish - высокая скорость шифрования - проявляется только в тех случаях, если на одном ключе шифруется достаточно большой объем информации. И наоборот, если менять ключ после каждого из шифруемых блоков, скорость алгоритма становится катастрофически низкой именно из-за необходимости каждый раз выполнять расширение ключа. Сам Шнайер рекомендует в приложениях, где критична скорость, хранить уже развернутый ключ (т. е. значения K1...K18 и S1...S4) и загружать его целиком вместо того, чтобы выполнять расширение исходного ключа.

 Далее, "...большие требования к памяти не позволяют использовать этот алгоритм в смарт-картах". Стоит сказать, что принципиальная возможность реализации алгоритма в смарт-картах была одним из важных условий при выборе нового стандарта шифрования США на конкурсе AES, т. е. данный недостаток алгоритма Blowfish можно считать серьезным.

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

 Алгоритм Blowfish имеет и достаточно важные преимущества, в частности:

· высокая скорость шифрования на развернутом ключе (как уже упоминалось выше);

· простота алгоритма, снижающая вероятность ошибок при его реализации;

· отсутствие успешных атак на полнораундовую версию алгоритма.

Явные достоинства и отсутствие критичных недостатков предопределили широкое использование алгоритма Blowfish в:

· хешировании паролей

· защите электронной почты и файлов

o GnuPG (безопасное хранение и передача)

· линиях связи: связка ElGamal (не запатентован) или RSA (действие патента закончилось в 2000 году) и Blowfish вместо IDEA

o в маршрутизаторе Intel Express 8100 с ключом длиной 144 бита

· обеспечение безопасности в протоколах сетевого и транспортного уровня

o PuTTY (сетевой уровень)

o SSH (транспортный уровень)

o OpenVPN (создание зашифрованных каналов)

 

 

 

 

БИБЛИОГРАФИЧЕСКИЙСПИСОК

1. Schneier B. The Blowfish Encryption Algorithm – One Year Later/ B. Schneier// Dr. Dobb's Journal. – 1995. – № 116. – p. 32-36

2. Breeze А. На пути к Skein: просто и понятно про Blowfish/ Andrey Breeze// http://habrahabr.ru/post/140394/

3. Kaweichel An extension of blowfish for 64-bit architectures/ Kaweichel// Diester Schmidt. 2006. - №9.

4. Панасенко С.П. Алгоритмы шифрования. Специальный справочник. – СПб.: БХВ-Петербург, 2009 – 576 с.

5. Бабенко Л. К., Ищукова Е. А. Современные алгоритмы блочного шифрования и методы их анализа. – М.: Гелиос АРВ, 2006 – 376 с.

 

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Юго-Западный государственный университет»

Кафедра комплексной защиты информационных систем

 

КУРСОВАЯ РАБОТА

 

 

по дисциплине: __ «МАТЕМАТИЧЕСКИЕ ОСНОВЫ КРИПТОЛОГИИ»

                         (наименование учебной дисциплины)

на тему: «Блочный алгоритм Blowfish шифрования с ключом переменной длины»

 

Специальность _ 090104 «Комплексная защита объектов информатизации» ______

(код, наименование)

Автор работы __ Д.М. Бугорский __________    _________________________

(инициалы, фамилия)                                                                  (подпись, дата)

Группа__ ЗИ_- 01 _______

 

Руководитель работы__ М. А. Ефремов ______    _________________________

         (инициалы, фамилия)                                                              (подпись, дата)

Работа защищена________________________

                (дата)        

Оценка_____________________

 

Члены комиссии _____________________  _______________________________

            (подпись, дата)                                                (инициалы, фамилия)

_____________________  _______________________________

            (подпись, дата)                                                (инициалы, фамилия)

_____________________  _______________________________

            (подпись, дата)                                                (инициалы, фамилия)

 

Курск, 2013 г.

 

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Юго-Западный государственный университет»


Поделиться с друзьями:

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.293 с.