Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

АгеевМА_КМЗИ

.pdf
Скачиваний:
28
Добавлен:
02.05.2015
Размер:
499.79 Кб
Скачать

2.3Участие в конкурсе AES

Врезультате всестороннего анализа на первом этапе конкурса AES, причём исследовались не только криптографические свойства, такие как стойкость к известным атакам, отсутствие слабых ключей, хорошие статистические свойства, но и практические аспекты реализации: оптимизацию скорости выполнения кода на различных архитектурах (от ПК до смарт-карт и аппаратных реализаций), возможность оптимизации размера кода, возможность распараллеливания, были выявлены следующие достоинства и недостатки

CAST-256 шифра. [3]

Основными достоинствами являются:

отсутствие уязвимостей.

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

Валгоритме было найдено ряд недостатков, из-за которых он не вошел во второй раунд конкурса:

скорость шифрования алгоритма невысока по сравнению с рядом алгоритмов — участников конкурса, в том числе всех финалистов конкурса.

высокие требования к оперативной и энергозависимой памяти.

3.Программная реализация алгоритма

Врамках выполнения курсовой работы написано приложение, которое шифрует и расшифровывает файл по алгоритму CAST-128.

Программа использует библиотеки Cast128 и Tools. Для удобства демонстрации ключ генерируется автоматически. Длина ключа составляет 16

байт, размер блока файла 8 байт (256 и 128 бит соответственно).

На примере (рисунок 1) можно увидеть шифрование и дешифрование исходного файла «picture.png». Первоначально производится шифрование в файл «picture2.png», а далее дешифрование последнего в «picture3.png», который полностью идентичен исходному файлу.

Рисунок 1 – Пример работы программы

Заключение

В данном курсовом проекте был рассмотрен алгоритм шифрования CAST, его свойства и стойкость. Произведено шифрование и дешифрование на примере. В приложении приведены исходный код программы и библиотеки

Cast128 и Tools.

Список литературы

1.CAST-128 [Электронный ресурс]: http://tools.ietf.org/html/rfc2144 (Дата обращения 25.05.2014)

2.CAST-256 [Электронный ресурс]: http://www.rfc-editor.org/rfc/rfc2612.txt (Дата обращения 25.05.2014)

3.Алгоритм CAST-128 | Блог о шифровании [Электронный ресурс]: http://crypto.pp.ua/2010/05/algoritm-cast-128/ (Дата обращения 25.05.2014)

Приложение 1 – Исходный код программы

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils, CAST128;

const NameFile='folder\picture.png'; NameFile2='folder\picture2.png'; NameFile3='folder\picture3.png';

var

Block:array[0..7] of byte; Block2:array[0..7] of byte; Key: array[0..15] of byte; D:TCast128Data;

i:integer; f1,f2,f3:file of byte;

CheckByte,CheckByte1,OneByte:byte;

Flag:boolean; begin

randomize;

writeln('Start: ',timetostr(now)); assignfile(f1,NameFile); reset(f1); assignfile(f2,NameFile2); rewrite(f2);

//===========8-check================= CheckByte:=0;

while not eof(f1) do begin

read(f1,OneByte); CheckByte:=(CheckByte+1) mod 8;

end; CheckByte:=8-CheckByte; reset(f1);

//========KEY======================== For i:=0 to 15 do Key[i]:=random(256); Cast128Init(D,@Key,Sizeof(Key),nil);

//========Encrypt==================== if CheckByte>0 then flag:=false else flag:=true; write(f2,CheckByte);

While not eof(f1) do Begin

if flag then blockread(f1,Block,8) else begin

for I:=0 to 7 do

if i<CheckByte then block[i]:=CheckByte else begin

read(f1,OneByte);

block[i]:=OneByte;

end;

flag:=true;

end;

Cast128EncryptECB(D,@Block,@Block2);

blockwrite(f2,Block2,8);

End;

closefile(f1);

closefile(f2);

writeln('Encryption completed: ',chr(7),timetostr(now));

//=======================LEVEL- 2================================

assignfile(f2,NameFile2);

reset(f2);

assignfile(f3,NameFile3);

rewrite(f3);

//===========8-check===================== read(f2,CheckByte);

if CheckByte>0 then flag:=false else flag:=true;

//========Decrypt======================== While not eof(f2) do

Begin blockread(f2,Block,8);

//=======================

Cast128DecryptECB(D,@Block,@Block2); if flag then blockwrite(f3,Block2,8) else begin

for I:=CheckByte to 7 do write(f3,Block2[i]); flag:=true;

end;

End;

closefile(f3);

closefile(f2);

writeln('Decryption completed: ',chr(7),timetostr(now));

readln;

end.

Приложение 2 – Библиотека Cast128

unit Cast128;

 

interface

 

uses

 

Sysutils, Tools;

 

type

 

TCast128Data= record

 

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

{ initial IV }

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

{ current IV }

xKey: array[0..31] of DWord;

 

Rounds: integer;

 

end;

 

function Cast128SelfTest: boolean;

{ performs a self test on this implementation }

procedure Cast128Init(var Data: TCast128Data; Key: pointer; Len: integer; IV: pointer);

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

procedure Cast128Burn(var Data: TCast128Data); { erases all information about the key }

procedure Cast128EncryptECB(const Data: TCast128Data; InData, OutData: pointer);

{ encrypts the data in a 64bit block using the ECB mode }

procedure Cast128EncryptCBC(var Data: TCast128Data; InData, OutData: pointer);

{ encrypts the data in a 64bit block using the CBC chaining mode }

 

procedure Cast128EncryptOFB(var Data: TCast128Data; InData,

OutData:

pointer);

 

{ encrypts the data in a 64bit block using the OFB chaining mode }

 

procedure Cast128EncryptCFB(var Data: TCast128Data; InData,

OutData:

pointer; Len: integer);

 

{ encrypts Len bytes of data using the CFB chaining mode }

 

procedure Cast128EncryptOFBC(var Data: TCast128Data; InData,

OutData:

pointer; Len: integer);

 

{ encrypts Len bytes of data using the OFB counter chaining mode }

 

procedure Cast128DecryptECB(const Data: TCast128Data; InData,

OutData:

pointer);

 

{ decrypts the data in a 64bit block using the ECB mode }

 

procedure Cast128DecryptCBC(var Data: TCast128Data; InData,

OutData:

pointer);

 

{ decrypts the data in a 64bit block using the CBC chaining mode }

 

procedure Cast128DecryptOFB(var Data: TCast128Data; InData,

OutData:

pointer);

 

{ decrypts the data in a 64bit block using the OFB chaining mode }

 

procedure Cast128DecryptCFB(var Data: TCast128Data; InData,

OutData:

pointer; Len: integer);

 

{ decrypts Len bytes of data using the CFB chaining mode }

 

procedure Cast128DecryptOFBC(var Data: TCast128Data; InData,

OutData:

pointer; Len: integer);

 

{ decrypts Len bytes of data using the OFB counter chaining mode }

 

procedure Cast128Reset(var Data: TCast128Data);

 

{ resets the chaining mode information }