Лабораторная работа №4 «симметричные криптоалгоритмы» Студенты гр. 03Сапр1 Турченков E. А. Никитин С. А. Купреенко В. А - davaiknam.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Лабораторная работа №1 Изучение внешних признаков древесины Лабораторная... 5 462.73kb.
Лабораторная работа №11 Криптоалгоритмы с открытыми ключами (rsa) 1 52.54kb.
Лабораторная работа №1 Задание №1 1 14.63kb.
Лабораторная работа по дисциплине «Защита информации»: Современные... 1 91.15kb.
Лабораторная работа №1 Изучение возможностей сетевого анализатора. 5 429.73kb.
Лабораторная работа №1 Построение детерминированного синтаксического... 1 278.71kb.
Лабораторная работа №1 Установка и настройка сетевой карты. 1 58.29kb.
Лабораторная работа №1 по курсу "Информационная безопасность" Лабораторная... 1 118.53kb.
Лабораторная работа №6 по курсу "Информационная безопасность" Лабораторная... 1 57.48kb.
Лабораторная работа для студентов Оценка локального модуля Юнга на... 1 42.72kb.
Лабораторная работа по курсу Экологическая электроника (Электроника... 1 246.77kb.
Техническое описание сетевого адаптера 1 27.44kb.
Направления изучения представлений о справедливости 1 202.17kb.

Лабораторная работа №4 «симметричные криптоалгоритмы» Студенты гр. 03Сапр1 Турченков - страница №1/1


ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ РФ




Брянский государственный технический университет


Кафедра: «Компьютерные технологии и системы»

Лабораторная работа №4



«СИММЕТРИЧНЫЕ КРИПТОАЛГОРИТМЫ»

Студенты гр. 03САПР1

Турченков E.А.

Никитин С.А.

Купреенко В.А.

Фатеев А.В.

Бобков А.

Преподаватель:

Рощин С.М.
Брянск 2007

1. ЦЕЛЬ РАБОТЫ


  1. Познакомится с основными алгоритмами шифрования.

  2. Выработать навык у студентов применения симметричных криптоалгоритмов.

  3. Закрепить навыки программирования.



2. ВВЕДЕНИЕ

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



  1. Симметричные DES, AES, ГОСТ 28147-89, Camellia, Twofish, Blowfish, IDEA, RC4, RC5, RC6 и др.

  2. Ассиметричные RSA и Elgamal (Эль-Гамаль)

  3. Хэш-функций MD4, MD5, SHA-1, ГОСТ Р 34.11-94

Во многих странах приняты национальные стандарты шифрования. В 2001 году в США принят стандарт симметричного шифрования AES на основе алгоритма Rijndael с длиной ключа 128, 192 и 256 бит. Алгоритм AES пришёл на смену прежнему алгоритму DES, который теперь рекомендовано использовать только в режиме Triple DES. В Российской Федерации действует стандарт ГОСТ 28147-89, описывающий алгоритм блочного шифрования с длиной ключа 256 бит, а также алгоритм цифровой подписи ГОСТ Р 34.10-2001.

Алгоритмы шифрования реализуются программными или аппаратными средствами. Есть великое множество чисто программных реализаций различных алгоритмов. Из-за своей дешевизны (некoторые и вовсе бесплатны), а также все большего быстродействия процессоров, простоты работы и безотказности они весьма конкурентоспособны. Широко известна программа Diskreet из пакета Norton Utilities, реализующая DES.

Нельзя не упомянуть пакет PGP (Pretty Good Privacy, версия 2.1, автор Philip Zimmermann), в котором комплексно решены практически все проблемы защиты передаваемой информации. Применены сжатие данных перед шифрованием, мощное управление ключами, симметричный (IDEA) и асимметричный (RSA) алгоритмы шифрования, вычисление контрольной функции для цифровой подписи, надежная генерация ключей.

Аппаратная реализация алгоритмов возможна с помощью специализированных микросхем (производятся кристаллы для алгоритмов DH, RSA, DES, Skipjack, ГОСТ 28147-89) или с использованием компонентов широкого назначения (ввиду дешевизны и высокого быстродействия перспективны цифровые сигнальные процессоры - ЦСП, Digital Signal Processor, DSP).

Среди российских разработок следует отметить платы "Криптон" (фирма "Анкад") и "Грим" (методология и алгоритмы фирмы "ЛАН-Крипто", техническая разработка НПЦ "ЭЛиПС") .

"Криптон" - одноплатные устройства, использующие криптопроцессоры (специализированные 32-разрядные микроЭВМ, которые также называются "блюминг"). Блюминги аппаратно реализуют алгоритмы ГОСТ 28147-89, они состоят из вычислителя и ОЗУ для хранения ключей. Причем в криптопроцессоре есть три области для хранения ключей, что позволяет строить многоуровневые ключевые системы.

В плате "Грим" используются цифровые сигнальные процессоры фирмы Analog Devices ADSP-2105 и ADSP-2101, что дает скорость шифрования соответственно 125 и 210 КБ/c. На плате есть физический ДСЧ и ПЗУ с программами начального теста, проверки прав доступа, загрузки и генерации ключей. Ключи хранятся на нестандартно форматированной дискете. Плата реализует алгоритмы ГОСТ 28147-89 и цифровой подписи.

Алгоритм RC6
В качестве одного из кандидатов фирмой RSA Data Security, Inc. был представлен алгоритм RC6 прошедший второй тур от­бора. В нем предусматривается использование четырех рабочих регистров, а также введена операция целочисленного умноже­ния, позволяющая существенно увеличить возмущения, вноси­мые каждым циклом шифрования, что приводит к увеличению стойкости и/или возможности сократить число циклов.

RC6 является полностью параметризованным алгоритмом шифрования. Конкретная версия RC6 обозначается как RC6-w/r/b, где w обозначает длину слова в битах, r - ненулевое ко­личество итерационных циклов шифрования, а b - длину ключа в байтах. Во всех вариантах RC6-w/r/b работает с четырьмя w-битовыми словами, используя шесть базовых операций, обозна­чаемых следующим образом:



а + b- целочисленное сложение по модулю 2W;

а - b- целочисленное вычитание по модулю 2W;

а b - побитовое "исключающее ИЛИ" w-битовых слов;

а x b - целочисленное умножение по модулю 2W;

a « b - циклический сдвиг w-битового слова влево на вели­чину, заданную log2w младшими битами b;

a » bциклический сдвиг w-битового слова вправо на ве­личину, заданную log2W младшими битами b;

Шифрование при помощи RC6-w/r/b описывается следую­щим образом:

Вход: Исходный текст, записанный в 4 w-битовых входных регистрах А, В, С, D; Число циклов шифрования r; Ключевая таблица S[0; ... 2r + 3] w-битовых слов.

Выход: Шифрованный текст в регистрах А, В, С, D.




Расшифрование в этих обозначениях выглядит очень похо­же:

Вход: Шифрованный текст, записанный в 4 w-битовых входных регистрах А, В, С, D; Число циклов шифрования r; Ключевая таблица S[0; ... 2r + 3] w-битовых слов.

Выход: Исходный текст в регистрах А, В, С, D.


Алгоритм вычисления ключей для RC6-w/r/b выглядит сле­дующим образом:

Пользователь задает ключ длиной b байтов. Достаточное число ненулевых байтов дописываются в конец, чтобы получи­лось целое число слов. Затем эти байты записываются начиная с младшего в массив из с слов, т.е. первый байт ключа записыва­ется в L[0], и т.д., a L[c - 1] при необходимости дополняется со стороны старших разрядов нулевыми байтами. В результате ра­боты алгоритма генерации ключей будет вычислено 2r + 4 слов, которые будут записаны в массиве S[0; ...; 2r + 3].

Константы Р32 = B7E15163h and Q32 = 9E3779B9h - это кон­станты, получаемые из двоичного представления е -2, где е -основание натуральных логарифмов, и ф - 1, где ф - золотое се­чение, соответственно. Подобные же константы могут быть аналогичным образом получены и для RC6 с другим размером слова. Выбор констант является в некотором роде произволь­ным, и поэтому можно использовать и другие константы, полу­чая при этом "частные" версии алгоритма.

Вход: Определенный пользователем b-байтовый ключ, предварительно загруженный в массив L[0;.. .с - 1]; Число циклов шифрования r.

Выход: Ключевая таблица S[0;...2r +4] из w-битовых слов.


Структура шифра RC6 является обобщением сети Фейштеля. Блок текста разбивается не на 2, а на 4 подблока, и на каждой итерации изменяются 2 подблока из четырех. При этом в конце итерации шифрования производится циклический сдвиг под­блоков влево (при расшифровании, соответственно, вправо). Однако, такое обобщение привело к тому, что было утеряно свойство инвариантности блоков шифрования и расшифрова­ния, хотя это и не является определяющим в оценке данного алгоритма.

3. УСЛОВИЯ РАБОТЫ

Реализованная в данной лабораторной работе, программа реализующая алгоритм шифрования RC6 отвечает следующим условиям:



  1. Шифрует введенную фразу, использую как ключ другую фразу введенную пользователем.

  2. Выводит шифр в формате четырех байтовых чисел.

  3. Дешифрует шифротекст, используя ключ дешифрования (введенную фразу).

Программа была реализована на языке C++, в среде C++Builder 6.

  1. БЛОК-СХЕМА АЛГОРИТМА

В реализованной программе использовался алгоритм RC6-32/20 (RC6-w/r) , где w - длина слова в битах, r - число раундов.


Рис. 1.  Алгоритм RC6



5. ЛИСТИНГ ПРОГРАММЫ

UNIT.cpp

#include

#pragma hdrstop
#include "Unit.h"
unsigned long S[44],L[200];

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{}

//---------------------------------------------------------------------------



void __fastcall TForm1::Button1Click(TObject *Sender)

{

ini_key_encrypt();



encrypt();

}

//---------------------------------------------------------------------------



void TForm1::ini_key_encrypt()

{

unsigned long P,Q,A,B;



int i,j,v,c;

div_t x;
char buf[200];

strcpy(buf,KeyText->Text.c_str());

//ShowMessage((unsigned char)buf[0]);


int length=KeyText->Text.Length();

int len_word=0;

x=div(length,4);

if (x.rem=0) {len_word=x.quot;} else{len_word=x.quot+1;}

c=len_word*4;

for (int h=0;h

if (h

else{L[h]=(unsigned char)255;}

}

P=0xB7E15163;



Q=0x9E3779B9;

S[0]=P;


for(i=1;i<=43;i++) S[i]=S[i-1]+Q;

A=B=i=j=0;

v=3*( (c>44)?c:44 );
for(int s=1;s<=v;s++){

A=S[i]=(S[i]+A+B)<<3;

B=L[j]=(L[j]+A+B)<<(A+B);

x=div(i+1,44); // i=(i+1) mod (2r+4);

i=x.rem;

x=div(j+1,c); //j=(j+1) mod c;

j=x.rem;

}
}


//------------------------------------------------------------------------------

void TForm1::encrypt()

{

unsigned long A,B,C,D,t,u;



unsigned long Ax,Bx,Cx,Dx;

char buf_c[500],buf[16];

int h=0;
for (int i=0;i<=Encrypt->Text.Length();i++){buf[i]='\0';}
strcpy(buf_c,Encrypt->Text.c_str());

Memo1->Clear();


for(int q=0;qText.Length();q+=16){

for(int x=0;x<16;x++) {buf[x]=buf_c[q+x];}


A=B=C=D=0;
for (int k=0;k<16;k++){

h=div(k,4).rem;

if (k<4){A+=(unsigned long)( pow(256,h)*((unsigned char)buf[k])); }

if (k>=4 && k<8){B+=(unsigned long)( pow(256,h)*((unsigned char)buf[k])); }

if (k>=8 && k<12){C+=(unsigned long)( pow(256,h)*((unsigned char)buf[k])); }

if (k>=12 && k<16) {D+=(unsigned long)( pow(256,h)*((unsigned char)buf[k]));}

};
B=B+S[0];

D=D+S[1];

for(int i=1;i<=20;i++){ //r=20

t=(B*(2*B+1))<<5; //log2(32)

u=(D*(2*D+1))<<5;

A=((A^t)<

C=((C^u)<

Ax=A;Bx=B;Cx=C;Dx=D;

A=Bx;B=Cx;C=Dx;D=Ax;

}

A=A+S[2*20+2];



C=C+S[2*20+3];

Memo1->Lines->Add(FloatToStr(A));

Memo1->Lines->Add(FloatToStr(B));

Memo1->Lines->Add(FloatToStr(C));

Memo1->Lines->Add(FloatToStr(D));

}

}



//-------------------------------------------------------------------------------

void TForm1::decrypt()

{

unsigned long A,B,C,D,t,u;



unsigned long Ax,Bx,Cx,Dx;

char buf[500],buf_dec[16];

buf[0]='\0';

AnsiString total_str;

//ShowMessage(Memo1->Lines->Capacity);

for(int y=0;yLines->Capacity;y+=4){

A=B=C=D=0;

for (int i=0;i<=16;i++){buf_dec[i]='\0';}

A=(unsigned long)StrToFloat(Memo1->Lines->Strings[y+0]);

B=(unsigned long)StrToFloat(Memo1->Lines->Strings[y+1]);

C=(unsigned long)StrToFloat(Memo1->Lines->Strings[y+2]);

D=(unsigned long)StrToFloat(Memo1->Lines->Strings[y+3]);


C=C-S[2*20+3];

A=A-S[2*20+2];


for(int i=20;i>=1;i--){

Ax=A;Bx=B;Cx=C;Dx=D;

A=Dx;B=Ax;C=Bx;D=Cx;

u=(D*(2*D+1))<<5;

t=(B*(2*B+1))<<5;

C=((C-S[2*i+1])>>t)^u;

A=((A-S[2*i])>>u)^t;

}

D=D-S[1];



B=B-S[0];

for (int k=0;k<3;k++){

buf_dec[k]=div(A,pow(256,k+1)).rem;

buf_dec[k+4]=div(B,pow(256,k+1)).rem;

buf_dec[k+8]=div(C,pow(256,k+1)).rem;

buf_dec[k+12]=div(D,pow(256,k+1)).rem;


A-=(unsigned long)((unsigned char)buf_dec[k]);

B-=(unsigned long)((unsigned char)buf_dec[k+4]);

C-=(unsigned long)((unsigned char)buf_dec[k+8]);

D-=(unsigned long)((unsigned char)buf_dec[k+12]);

A/=256; B/=256; C/=256; D/=256;

}
buf_dec[3]=(unsigned char)A;

buf_dec[7]=(unsigned char)B;

buf_dec[11]=(unsigned char)C;

buf_dec[15]=(unsigned char)D;

total_str+=buf_dec;

}

DeShifText->Text=total_str;


}

//-----------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

ini_key_decrypt();



decrypt();

}

//---------------------------------------------------------------------------



void TForm1::ini_key_decrypt()

{

unsigned long P,Q,A,B;



int i,j,v,c;

div_t x;
char buf[200];

strcpy(buf,KeyForDec->Text.c_str());
int length=KeyForDec->Text.Length();

int len_word=0;

x=div(length,4);

if (x.rem=0) {len_word=x.quot;} else{len_word=x.quot+1;}

c=len_word*4;

for (int h=0;h

if (h

else{L[h]=(unsigned char)255;}

}

P=0xB7E15163;



Q=0x9E3779B9;

S[0]=P;


for(i=1;i<=43;i++) S[i]=S[i-1]+Q;

A=B=i=j=0;

v=3*( (c>44)?c:44 );
for(int s=1;s<=v;s++){

A=S[i]=(S[i]+A+B)<<3;

B=L[j]=(L[j]+A+B)<<(A+B);

x=div(i+1,44); // i=(i+1) mod (2r+4);

i=x.rem;

x=div(j+1,c); //j=(j+1) mod c;

j=x.rem;

}
}


6. СКРИНШОН РАБОТАЮЩЕЙ ПРОГРАММЫ

Рис. 2. Окно работающей программы



7. ВЫВОД

Алгоритм RC6 был разработан в 1998 г. рядом специалистов научного подразделения известнейшей фирмы RSA Data Security — RSA Laboratories: Рональдом Ривестом (Ronald Rivest, основатель RSA Data Security), Мэттом Робшоу (Matt Robshaw), Рэем Сидни (Ray Sidney) и Икван Лайзой Ин (Yiqun Lisa Yin) специально для участия в конкурсе AES. Алгоритм во многом унаследовал черты предыдущего алгоритма Рональда Ривеста — 64-битного блочного шифра RC5, разработанного в 1997 г. Фактически, алгоритм претерпел два принципиальных изменения:



  1. В отличие от RC5, в алгоритме используется умножение по модулю 232;

  2. Для сохранения 32-битных вычислений вместо разбиения шифруемого блока данных (128 бит согласно принципиальному требованию конкурса AES) на два 64-битных субблока выполняется его разбиение на 4 32-битных субблока и их обработка по несколько измененной схеме.

Недостатки алгоритма:

  1. Скорость шифрования при программной реализации сильно зависит от того, поддерживает ли платформа 32-битное умножение и вращение на переменное число бит.

  2. RC6 сложно реализуем аппаратно и в условиях ограниченных ресурсов.

  3. Достаточно сложно защищается от атак по времени выполнения и потребляемой мощности.

  4. Недостаточно полно поддерживает расширение ключей «на лету».

  5. Распараллеливание вычислений при шифровании алгоритмом RC6 реализуемо с ограничениями.

Достоинства алгоритма:

  1. Простая структура алгоритма облегчает его анализ. Кроме того, алгоритм унаследовал часть преобразований от своего предшественника — алгоритма RC5.

  2. Один из самых быстрых из алгоритмов на 32-битных платформах.

  3. Шифрование и расшифрование в алгоритме RC6 практически идентичны.

Программные средства, в которых применяется алгоритм RC6:

  1. Внешний модуль AstraCrypt предназначен для шифрования текста и файлов на платформе 1С Предприятие 8.0 - 7.7 с использованием RC6, имеющих очень высокую степень защиты от криптоанализа и расшифровки информации. С этим модулем можно шифровать необходимую информацию в базе данных, и ограничивать круг лиц имеющих доступ к этой информации.

  2. "Лаборатория Касперского" объявляет о выходе коммерческой версии Kaspersky® Security для PDA 4.5. Новая версия продукта обеспечивает полномасштабную защиту карманных компьютеров (КПК), работающих под управлением наиболее популярных операционных систем - Windows CE и Palm OS. На КПК, работающих под управлением Windows CE, предусмотрена возможность создания специальных папок, содержимое которых также шифруется "на лету" с использованием алгоритмов RC5 и RC6. Доступ к таким папкам разграничивается с помощью системы паролей.

  3. Jetico BestCrypt Volume Encryption. Программа обеспечивает шифрование всех данных, хранящихся на жёстких и съёмных устройствах, автоматически, посредством криптографической защиты. В случае шифрования системного или загрузочного раздела, BestCrypt Volume не позволит загрузиться системе без ввода необходимого пароля. Алгоритмы шифрования, поддерживаемые программой: AES 256-бит, Blowfish 448-бит, CAST 128-бит, GOST 256-бит, RC6 256-бит, Serpent 256-бит, Twofish 256-бит.






Мало того, что Бога нет, но попробуйте еще найти водопроводчика в нерабочую субботу! Вуди Аллен
ещё >>