
2.3 Участие в конкурсе aes
В результате всестороннего анализа на первом этапе конкурса AES, причём исследовались не только криптографические свойства, такие как стойкость к известным атакам, отсутствие слабых ключей, хорошие статистические свойства, но и практические аспекты реализации: оптимизацию скорости выполнения кода на различных архитектурах (от ПК до смарт-карт и аппаратных реализаций), возможность оптимизации размера кода, возможность распараллеливания, были выявлены следующие достоинства и недостатки CAST-256 шифра. [3]
Основными достоинствами являются:
отсутствие уязвимостей.
возможность быстрого выполнения расширения ключа, то есть в процессе операции кодирования, но не декодирования.
В алгоритме было найдено ряд недостатков, из-за которых он не вошел во второй раунд конкурса:
скорость шифрования алгоритма невысока по сравнению с рядом алгоритмов — участников конкурса, в том числе всех финалистов конкурса.
высокие требования к оперативной и энергозависимой памяти.
Программная реализация алгоритма
В рамках выполнения курсовой работы написано приложение, которое шифрует и расшифровывает файл по алгоритму CAST-128.
Программа использует библиотеки Cast128 иTools. Для удобства демонстрации ключ генерируется автоматически. Длина ключа составляет 16 байт, размер блока файла 8 байт (256 и 128 бит соответственно).
На примере (рисунок 1) можно увидеть шифрование и дешифрование исходного файла «picture.png». Первоначально производится шифрование в файл «picture2.png», а далее дешифрование последнего в «picture3.png», который полностью идентичен исходному файлу.
Рисунок 1 – Пример работы программы
Заключение
В данном курсовом проекте был рассмотрен алгоритм шифрования CAST, его свойства и стойкость. Произведено шифрование и дешифрование на примере. В приложении приведены исходный код программы и библиотекиCast128 иTools.
Список литературы
CAST-128 [Электронный ресурс]:http://tools.ietf.org/html/rfc2144 (Дата обращения 25.05.2014)
CAST-256 [Электронный ресурс]:http://www.rfc-editor.org/rfc/rfc2612.txt(Дата обращения 25.05.2014)
Алгоритм CAST-128 | Блог о шифровании [Электронный ресурс]:http://crypto.pp.ua/2010/05/algoritm-cast-128/ (Дата обращения 25.05.2014)
Приложение 1 – Исходный код программы
programProject1;
{$APPTYPECONSOLE}
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.