Розробка програми „ Криптоаналiз ”

Автор работы: Пользователь скрыл имя, 29 Ноября 2013 в 00:04, курсовая работа

Описание работы

Шифрування - спосіб перетворення відкритої інформації в закриту і назад. Застосовується для зберігання важливої ​​інформації в ненадійних джерелах або передачі її по незахищених каналах зв'язку. Згідно ГОСТ 28147-89, шифрування підрозділяється на процес зашифровування і розшифрування. Залежно від алгоритму перетворення даних, методи шифрування поділяються на гарантованої або тимчасової криптостойкости. Мета роботи: Розробити програму шифрування/дешифрування. Для досягнення поставленої мети в роботі вирішувалися наступні завдання:
розробити ескізний і технічний проект програми;
розробити робочий проект програми.

Содержание работы

Вступ………. 3
РОЗДIЛ I. Загальнi вiдомостi 4
1.1.Загальнi вiдомостi про AES 4
РОЗДIЛ II. Розробка проекту програми 6
2.1.Опис елементiв програми 6
2.2.Шифрування та процедури.. 9
2.3.Алгоротми та криптостiйкicть… 13
2.4.Тестування програми …. 17
Висновки….. 19
Список використаних джерел….. 20

Файлы: 1 файл

Документ Microsoft Word.docx

— 254.52 Кб (Скачать файл)

 

 

 

 

MixColumns()

 

У процедурі MixColumns, кожна  колонка стану перемножується з  фіксованим многочленом c (x).

У процедурі MixColumns, чотири байти  кожної колонки State змішуються, використовуючи для цього оборотну лінійну трансформацію. MixColumns обробляє стану по колонках, трактуючи  кожну з них як поліном четвертого ступеня. Над цими поліномами виробляється множення в GF (28) за модулем x4 + 1 на фіксований многочлен c (x) = 3x3 + x2 + x + 2. Разом з ShiftRows, MixColumns вносить дифузію в шифр.

 

 

 

 

 

AddRoundKey()

 

У процедурі AddRoundKey, кожен байт стану об'єднується з RoundKey використовуючи XOR operation (⊕).

У процедурі AddRoundKey, RoundKey кожного раунду об'єднується зі State. Для кожного раунду Roundkey виходить з CipherKey використовуючи процедуру KeyExpansion; кожен RoundKey такого ж розміру, що й State. Процедура виробляє побітовий XOR кожного байта State з кожним байтом RoundKey.

 

 

 

 

2.3.Алгоритми та криптостiйкicть.

 

Алгоритм обробки ключа.

 

Алгоритм обробки ключа  складається з двох процедур:

  • Алгоритм розширення ключа
  • Алгоритм вибору раундового ключа (ключа ітерації)

 

 

Алгоритм розширення ключа.

 

AES алгоритм, використовуючи  процедуру KeyExpansion () і подаючи  до неї Cipher Key, K, отримує ключі  для всіх раундів. Всього вона  отримує Nb * (Nr + 1) слів: спочатку для  алгоритму потрібно набір з  Nb слів, і кожному з Nr раундів  потрібно Nb ключових набору даних.  Отриманий масив ключів для раундів позначається як. Алгоритм KeyExpansion () показаний в псевдо коді нижче.

Функція SubWord () бере чотирьохбайтове  вхідне слово і застосовує S-box до кожного з чотирьох байтів те, що вийшло подається на вихід. На вхід RotWord () подається слово [a0, a1, a2, a3] яке  вона циклічно переставляє і повертає [a1, a2, a3, a0]. Масив слів, слів постійний для даного раунду, містить значення [xi - 1,00,00,00], де x = {02}, а xi - 1 є ступенем x в (i починається з 1).

З малюнка можна побачити, що перші Nk слів розширеного ключа  заповнені Cipher Key. У кожне наступне слово, w [i], кладеться значення отримане при операції XOR w [i - 1] і, ті XOR'а попереднього і на Nk позицій раніше слів. Для  слів, позиція яких кратна Nk, перед XOR'ом до w [i-1] застосовується трасформації, за якою слідує XOR з константою раунду Rcon [i]. Зазначена вище трансформація  складається з циклічного зсуву  байтів в слові (RotWord ()), за якою слідує процедура SubWord () - те ж саме, що і SubBytes (), тільки вхідні і вихідні дані будуть розміром в слово.

Важливо зауважити, що процедура KeyExpansion () для 256 бітного Cipher Key трохи  відрізняється від тих, які застосовуються для 128 і 192 бітних шіфроключей. Якщо Nk = 8 і i - 4 кратно Nk, то SubWord () застосовується до w [i - 1] до XOR'а.KeyExpansion (byte key [4*Nk], word w [Nb*(Nr+1)], Nk)

 

Псевдокод для Key Expansion

begin

word temp

i = 0;

while (i < Nk)

w[i] = word (key[4*i], key [4*i+1], key [4*i+2], key [4*i+3])

i = i+1

end while

i = Nk

while (i < Nb * (Nr+1))

temp = w [i-1]

if (i mod Nk = 0)

temp = SubWord (RotWord(temp)) xor Rcon [i/Nk]

else if (Nk > 6 and i mod Nk = 4)

temp = SubWord(temp)

end if

w[i] = w [i-Nk] xor temp

i = i + 1

end while

end

Псевдокод Для Inverse Cipher

 

InvCipher (byte in [4*Nb], byte out [4*Nb], word w [Nb*(Nr+1)])

begin

byte state [4, Nb]

state = in

AddRoundKey (state, w [Nr*Nb, (Nr+1)*Nb-1])

for round = Nr-1 step -1 downto 1

InvShiftRows(state)

InvSubBytes(state)

AddRoundKey (state, w [round*Nb, (round+1)*Nb-1])

InvMixColumns(state)

end for

InvShiftRows(state)

InvSubBytes(state)

AddRoundKey (state, w [Nr*Nb, (Nr+1)*Nb-1])

out = state

end

 

Варіанти алгоритму.

 

На базі алгоритму Rijndael, що лежить в основі AES, реалізовані альтернативні  криптоалгоритми. Серед найбільш відомих - учасники конкурсу Nessie: Anubis на інволюцію, автором якого є Вінсент Реймі  і посилений варіант шифру - Grand Cru Йохана Борстен.

 

 

 

 

 

Криптостійкість.

 

У червні 2003 року Агентство  національної безпеки США ухвалило, що шифр AES є достатньо надійним, щоб використовувати його для  захисту відомостей, що становлять державну таємницю (англ. classified information). Аж до рівня SECRET було дозволено використовувати  ключі довжиною 128 біт, для рівня TOP SECRET були потрібні ключі довжиною 192 і 256 біт.

 

 

 

 

 

 

 

 

 

 

 

 

2.4.Тустування програми

 

 

Виберемо дію «Шифрування», потім виберемо файл з расшіреніем.txt, натискаємо на кнопку «Шифрувати» (також можна вибрати параметри шифрування зліва в полі «Виконання процесу»). Програма створює файл EncodedFile.txtрядом з вихідним файлом.

 

 

 

 

 

 

 

 

 

 

Виконаємо зворотну дію. У  полі вихідний файл виберемо створений  раніше програмою файл EncodedFile.txt, виберемо дію «Дешифрувати». Програма створює  файл DecodedFile.txtрядом з вихідним файлом.

 

 

 

 

 

 

 

 

 

 

 

Висновки

         Серед способів захисту інформації найбільш важливим вважається криптографічний. Він передбачає таке перетворення інформації, при якому вона стає доступною для прочитання лише власникові деякого секретного параметра (ключа). В останні роки область застосування криптографії значно розширилася. Її стали повсякденно використовувати багато організацій, комерційні фірми, приватні особи, ЗМІ.

         У цій роботі вивчається алгоритм шифрування даних AES: його історія створення, опис і програмна реалізація.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список використаних джерел

 

  1. Религии мира. Справочник. – Пер. с англ.: М.: Белфаксиздатгрупп, 2000.
  2. Панасенко С.П. Алгоритмы шифрования. Специальный справочник. – СПб: БХВ-Петербург, 2009.
  3. Технические средства и методы защиты информации. Учебное пособие для вузов /А.П. Зайцев, А.А. Шелупанов, Р.В. Мещеряков и др.; под ред. А.П. Зайцева и А.А. Шелупанова. – 4-е изд., испр. И доп. – М., 2009.
  4. Прикладная криптография. Брюс Шнайер, 2-е издание

Додаток А

 

unit Main;

interface

uses

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

StdCtrls, Math, Buttons, ExtCtrls, Menus, jpeg, pngimage;

type

EAESError = class(Exception);

PInteger = ^Integer;

TAESBuffer = array [0..15] of byte;

TAESKey128 = array [0..15] of byte;

TAESExpandedKey128 = array [0..43] of longword;

PAESBuffer =^TAESBuffer;

PAESKey128 =^TAESKey128;

PAESExpandedKey128 =^TAESExpandedKey128;

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

OpenDialog1: TOpenDialog;

Button1: TButton;

Button2: TButton;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Edit2: TEdit;

Label_Time: TLabel;

Label9: TLabel;

Label_Status: TLabel;

MemoOut: TMemo;

ButtonStop: TButton;

Panel1: TPanel;

MemoIn: TMemo;

EditDelay: TEdit;

RadioGroup1: TRadioGroup;

CBOpt: TComboBox;

Label6: TLabel;

LName: TLabel;

LPath: TLabel;

Label10: TLabel;

MainMenu1: TMainMenu;

MFile: TMenuItem;

MFChoose: TMenuItem;

MHelp: TMenuItem;

MHHelp: TMenuItem;

MFExit: TMenuItem;

Label7: TLabel;

Label8: TLabel;

Image1: TImage;

Label11: TLabel;

procedure Button1Click (Sender: TObject);

procedure Button2Click (Sender: TObject);

procedure ButtonStopClick (Sender: TObject);

procedure CBOptChange (Sender: TObject);

procedure FormActivate (Sender: TObject);

procedure RadioGroup1Click (Sender: TObject);

procedure MFExitClick (Sender: TObject);

procedure MFChooseClick (Sender: TObject);

procedure FormCreate (Sender: TObject);

procedure MHHelpClick (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

var

Form1: TForm1;

EncryptedText, Fpath: string;

flag: boolean;

 

 

procedure ExpandAESKeyForEncryption (const Key: TAESKey128;

var ExpandedKey: TAESExpandedKey128); overload;

 

procedure EncryptAES (const InBuf: TAESBuffer; const Key: TAESExpandedKey128;

var OutBuf: TAESBuffer);

 

procedure EncryptAESStreamECB (Source: TStream; Count: cardinal;

const Key: TAESKey128; Dest: TStream); overload;

procedure EncryptAESStreamECB (Source: TStream; Count: cardinal;

const ExpandedKey: TAESExpandedKey128; Dest: TStream); overload;

 

procedure ExpandAESKeyForDecryption (var ExpandedKey: TAESExpandedKey128); overload;

procedure ExpandAESKeyForDecryption (const Key: TAESKey128;

var ExpandedKey: TAESExpandedKey128); overload;

 

procedure DecryptAES (const InBuf: TAESBuffer; const Key: TAESExpandedKey128;

var OutBuf: TAESBuffer);

procedure DecryptAESStreamECB (Source: TStream; Count: cardinal;

const Key: TAESKey128; Dest: TStream); overload;

proedure DecryptAESStreamECB (Source: TStream; Count: cardinal;

const ExpandedKey: TAESExpandedKey128; Dest: TStream); overload;

resourcestring

SInvalidInBufSize = 'Неверный размер буфера для дешифрования';

SReadError = 'Ошибка чтения из потока';

SWriteError = 'Ошибка записи  в поток';

implementation

uses UnStop;

{$R *.DFM}

type

PLongWord = ^LongWord;

 

function Min (A, B: integer): integer;  begin

if A < B then

Result:= A

else

Result:= B;

end;

const

Rcon: array [1..30] of longword = (

$00000001, $00000002, $00000004, $00000008, $00000010, $00000020,

$00000040, $00000080, $0000001B, $00000036, $0000006C, $000000D8,

$000000AB, $0000004D, $0000009A, $0000002F, $0000005E, $000000BC,

$00000063, $000000C6, $00000097, $00000035, $0000006A, $000000D4,

$000000B3, $0000007D, $000000FA, $000000EF, $000000C5, $00000091

);

 

ForwardTable: array [0..255] of longword = (

$A56363C6, $847C7CF8, $997777EE, $8D7B7BF6, $0DF2F2FF, $BD6B6BD6, $B16F6FDE, $54C5C591,

$50303060, $03010102, $A96767CE, $7D2B2B56, $19FEFEE7, $62D7D7B5, $E6ABAB4D, $9A7676EC,

$45CACA8F, $9D82821F, $40C9C989, $877D7DFA, $15FAFAEF, $EB5959B2, $C947478E, $0BF0F0FB,

$ECADAD41, $67D4D4B3, $FDA2A25F, $EAAFAF45, $BF9C9C23, $F7A4A453, $967272E4, $5BC0C09B,

$C2B7B775, $1CFDFDE1, $AE93933D, $6A26264C, $5A36366C, $413F3F7E, $02F7F7F5, $4FCCCC83,

$5C343468, $F4A5A551, $34E5E5D1, $08F1F1F9, $937171E2, $73D8D8AB, $53313162, $3F15152A,

$0C040408, $52C7C795, $65232346, $5EC3C39D, $28181830, $A1969637, $0F05050A, $B59A9A2F,

$0907070E, $36121224, $9B80801B, $3DE2E2DF, $26EBEBCD, $6927274E, $CDB2B27F, $9F7575EA,

$1B090912, $9E83831D, $742C2C58, $2E1A1A34, $2D1B1B36, $B26E6EDC, $EE5A5AB4, $FBA0A05B,

$F65252A4, $4D3B3B76, $61D6D6B7, $CEB3B37D, $7B292952, $3EE3E3DD, $712F2F5E, $97848413,

$F55353A6, $68D1D1B9, $00000000, $2CEDEDC1, $60202040, $1FFCFCE3, $C8B1B179, $ED5B5BB6,

$BE6A6AD4, $46CBCB8D, $D9BEBE67, $4B393972, $DE4A4A94, $D44C4C98, $E85858B0, $4ACFCF85,

$6BD0D0BB, $2AEFEFC5, $E5AAAA4F, $16FBFBED, $C5434386, $D74D4D9A, $55333366, $94858511,

$CF45458A, $10F9F9E9, $06020204, $817F7FFE, $F05050A0, $443C3C78, $BA9F9F25, $E3A8A84B,

$F35151A2, $FEA3A35D, $C0404080, $8A8F8F05, $AD92923F, $BC9D9D21, $48383870, $04F5F5F1,

$DFBCBC63, $C1B6B677, $75DADAAF, $63212142, $30101020, $1AFFFFE5, $0EF3F3FD, $6DD2D2BF,

$4CCDCD81, $140C0C18, $35131326, $2FECECC3, $E15F5FBE, $A2979735, $CC444488, $3917172E,

$57C4C493, $F2A7A755, $827E7EFC, $473D3D7A, $AC6464C8, $E75D5DBA, $2B191932, $957373E6,

$A06060C0, $98818119, $D14F4F9E, $7FDCDCA3, $66222244, $7E2A2A54, $AB90903B, $8388880B,

$CA46468C, $29EEEEC7, $D3B8B86B, $3C141428, $79DEDEA7, $E25E5EBC, $1D0B0B16, $76DBDBAD,

$3BE0E0DB, $56323264, $4E3A3A74, $1E0A0A14, $DB494992, $0A06060C, $6C242448, $E45C5CB8,

$5DC2C29F, $6ED3D3BD, $EFACAC43, $A66262C4, $A8919139, $A4959531, $37E4E4D3, $8B7979F2,

$32E7E7D5, $43C8C88B, $5937376E, $B76D6DDA, $8C8D8D01, $64D5D5B1, $D24E4E9C, $E0A9A949,

$B46C6CD8, $FA5656AC, $07F4F4F3, $25EAEACF, $AF6565CA, $8E7A7AF4, $E9AEAE47, $18080810,

$D5BABA6F, $887878F0, $6F25254A, $722E2E5C, $241C1C38, $F1A6A657, $C7B4B473, $51C6C697,

$23E8E8CB, $7CDDDDA1, $9C7474E8, $211F1F3E, $DD4B4B96, $DCBDBD61, $868B8B0D, $858A8A0F,

$907070E0, $423E3E7C, $C4B5B571, $AA6666CC, $D8484890, $05030306, $01F6F6F7, $120E0E1C,

$A36161C2, $5F35356A, $F95757AE, $D0B9B969, $91868617, $58C1C199, $271D1D3A, $B99E9E27,

$38E1E1D9, $13F8F8EB, $B398982B, $33111122, $BB6969D2, $70D9D9A9, $898E8E07, $A7949433,

$B69B9B2D, $221E1E3C, $92878715, $20E9E9C9, $49CECE87, $FF5555AA, $78282850, $7ADFDFA5,

$8F8C8C03, $F8A1A159, $80898909, $170D0D1A, $DABFBF65, $31E6E6D7, $C6424284, $B86868D0,

$C3414182, $B0999929, $772D2D5A, $110F0F1E, $CBB0B07B, $FC5454A8, $D6BBBB6D, $3A16162C

);

LastForwardTable: array [0..255] of longword = (

$00000063, $0000007C, $00000077, $0000007B, $000000F2, $0000006B, $0000006F, $000000C5,

$00000030, $00000001, $00000067, $0000002B, $000000FE, $000000D7, $000000AB, $00000076,

$000000CA, $00000082, $000000C9, $0000007D, $000000FA, $00000059, $00000047, $000000F0,

$000000AD, $000000D4, $000000A2, $000000AF, $0000009C, $000000A4, $00000072, $000000C0,

$000000B7, $000000FD, $00000093, $00000026, $00000036, $0000003F, $000000F7, $000000CC,

$00000034, $000000A5, $000000E5, $000000F1, $00000071, $000000D8, $00000031, $00000015,

$00000004, $000000C7, $00000023, $000000C3, $00000018, $00000096, $00000005, $0000009A,

$00000007, $00000012, $00000080, $000000E2, $000000EB, $00000027, $000000B2, $00000075,

$00000009, $00000083, $0000002C, $0000001A, $0000001B, $0000006E, $0000005A, $000000A0,

$00000052, $0000003B, $000000D6, $000000B3, $00000029, $000000E3, $0000002F, $00000084,

$00000053, $000000D1, $00000000, $000000ED, $00000020, $000000FC, $000000B1, $0000005B,

$0000006A, $000000CB, $000000BE, $00000039, $0000004A, $0000004C, $00000058, $000000CF,

$000000D0, $000000EF, $000000AA, $000000FB, $00000043, $0000004D, $00000033, $00000085,

$00000045, $000000F9, $00000002, $0000007F, $00000050, $0000003C, $0000009F, $000000A8,

$00000051, $000000A3, $00000040, $0000008F, $00000092, $0000009D, $00000038, $000000F5,

$000000BC, $000000B6, $000000DA, $00000021, $00000010, $000000FF, $000000F3, $000000D2,

$000000CD, $0000000C, $00000013, $000000EC, $0000005F, $00000097, $00000044, $00000017,

$000000C4, $000000A7, $0000007E, $0000003D, $00000064, $0000005D, $00000019, $00000073,

$00000060, $00000081, $0000004F, $000000DC, $00000022, $0000002A, $00000090, $00000088,

$00000046, $000000EE, $000000B8, $00000014, $000000DE, $0000005E, $0000000B, $000000DB,

$000000E0, $00000032, $0000003A, $0000000A, $00000049, $00000006, $00000024, $0000005C,

$000000C2, $000000D3, $000000AC, $00000062, $00000091, $00000095, $000000E4, $00000079,

$000000E7, $000000C8, $00000037, $0000006D, $0000008D, $000000D5, $0000004E, $000000A9,

$0000006C, $00000056, $000000F4, $000000EA, $00000065, $0000007A, $000000AE, $00000008,

$000000BA, $00000078, $00000025, $0000002E, $0000001C, $000000A6, $000000B4, $000000C6,

$000000E8, $000000DD, $00000074, $0000001F, $0000004B, $000000BD, $0000008B, $0000008A,

$00000070, $0000003E, $000000B5, $00000066, $00000048, $00000003, $000000F6, $0000000E,

$00000061, $00000035, $00000057, $000000B9, $00000086, $000000C1, $0000001D, $0000009E,

$000000E1, $000000F8, $00000098, $00000011, $00000069, $000000D9, $0000008E, $00000094,

$0000009B, $0000001E, $00000087, $000000E9, $000000CE, $00000055, $00000028, $000000DF,

$0000008C, $000000A1, $00000089, $0000000D, $000000BF, $000000E6, $00000042, $00000068,

$00000041, $00000099, $0000002D, $0000000F, $000000B0, $00000054, $000000BB, $00000016

);

InverseTable: array [0..255] of longword = (

$50A7F451, $5365417E, $C3A4171A, $965E273A, $CB6BAB3B, $F1459D1F, $AB58FAAC, $9303E34B,

$55FA3020, $F66D76AD, $9176CC88, $254C02F5, $FCD7E54F, $D7CB2AC5, $80443526, $8FA362B5,

$495AB1DE, $671BBA25, $980EEA45, $E1C0FE5D, $02752FC3, $12F04C81, $A397468D, $C6F9D36B,

$E75F8F03, $959C9215, $EB7A6DBF, $DA595295, $2D83BED4, $D3217458, $2969E049, $44C8C98E,

$6A89C275, $78798EF4, $6B3E5899, $DD71B927, $B64FE1BE, $17AD88F0, $66AC20C9, $B43ACE7D,

$184ADF63, $82311AE5, $60335197, $457F5362, $E07764B1, $84AE6BBB, $1CA081FE, $942B08F9,

$58684870, $19FD458F, $876CDE94, $B7F87B52, $23D373AB, $E2024B72, $578F1FE3, $2AAB5566,

$0728EBB2, $03C2B52F, $9A7BC586, $A50837D3, $F2872830, $B2A5BF23, $BA6A0302, $5C8216ED,

$2B1CCF8A, $92B479A7, $F0F207F3, $A1E2694E, $CDF4DA65, $D5BE0506, $1F6234D1, $8AFEA6C4,

$9D532E34, $A055F3A2, $32E18A05, $75EBF6A4, $39EC830B, $AAEF6040, $069F715E, $51106EBD,

$F98A213E, $3D06DD96, $AE053EDD, $46BDE64D, $B58D5491, $055DC471, $6FD40604, $FF155060,

$24FB9819, $97E9BDD6, $CC434089, $779ED967, $BD42E8B0, $888B8907, $385B19E7, $DBEEC879,

$470A7CA1, $E90F427C, $C91E84F8, $00000000, $83868009, $48ED2B32, $AC70111E, $4E725A6C,

$FBFF0EFD, $5638850F, $1ED5AE3D, $27392D36, $64D90F0A, $21A65C68, $D1545B9B, $3A2E3624,

$B1670A0C, $0FE75793, $D296EEB4, $9E919B1B, $4FC5C080, $A220DC61, $694B775A, $161A121C,

$0ABA93E2, $E52AA0C0, $43E0223C, $1D171B12, $0B0D090E, $ADC78BF2, $B9A8B62D, $C8A91E14,

$8519F157, $4C0775AF, $BBDD99EE, $FD607FA3, $9F2601F7, $BCF5725C, $C53B6644, $347EFB5B,

$7629438B, $DCC623CB, $68FCEDB6, $63F1E4B8, $CADC31D7, $10856342, $40229713, $2011C684,

$7D244A85, $F83DBBD2, $1132F9AE, $6DA129C7, $4B2F9E1D, $F330B2DC, $EC52860D, $D0E3C177,

$6C16B32B, $99B970A9, $FA489411, $2264E947, $C48CFCA8, $1A3FF0A0, $D82C7D56, $EF903322,

Информация о работе Розробка програми „ Криптоаналiз ”