Розробка програми „ Криптоанал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 Кб (Скачать файл)

 

ПРИВАТНИЙ ВИЩИЙ НАВЧАЛЬНИЙ ЗАКЛАД


ЕКОНОМІКО – ПРАВОВИЙ ТЕХНІКУМ при МАУП

 

 

 

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

З ДИСЦИПЛІНИ „ Технологія створення програмних продуктів ”

ТЕМА: Розробка програми „ Криптоаналiз ”

 

 

 

 

ПОЯСНЮВАЛЬНА  ЗАПИСКА  ДО КУРСОВОЇ РОБОТИ

(ШИФР КУРСОВОЇ РОБОТИ: 5.05010101, ЕПТ 9 – 11 – КзОПСК (2.10з), 

28-о від 26.03.13, 9)

 

 

 

РОБОТУ ВИКОНАВ

                                       СТУДЕНТ ГР КзОПСК-41 

                                                                                                                                                                 Хмарук.О.Ю.

___________________

                                                                                                                                                                                                                                  (підпис)

                                                                                                                                                   РОБОТУ ПЕРЕВІРИВ

                                                                                                                                                                         Кузьмич.О.В.  

___________________

(підпис)

 

Київ 2013

 

Зміст


 

Вступ………. 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

Додатки…. 21


 


Вступ

 

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

Залежно від алгоритму перетворення даних, методи шифрування поділяються на гарантованої або тимчасової криптостойкости.

          Залежно від структури використовуваних ключів методи шифрування поділяються на:

  • симетричне шифрування - стороннім особам може бути відомий алгоритм шифрування, але невідома невелика порція секретної інформації - ключа, однакового для відправника і одержувача повідомлення;
  • асиметричне шифрування - стороннім особам може бути відомий алгоритм шифрування, і, можливо, відкритий ключ, але невідомий закритий ключ, відомий тільки одержувачу.

Мета роботи:

    • Розробити програму шифрування/дешифрування.

Для досягнення поставленої  мети в роботі вирішувалися наступні завдання:

  • розробити ескізний і технічний проект програми;
  • розробити робочий проект програми.

 

            

      
 

 

 

 

 

РОЗДIЛ I. Загальнi вiдомостi

 

1.1.Загальнi вiдомостi про AES

 

У далекому 1998 року NIST оголосив конкурс на створення алгоритму, який задовольняє висунутим інститутом вимогам. Він опублікував всі  несекретні дані про тестування кандидатів на роль AES і зажадав від авторів  алгоритмів повідомити про базові принципи побудови використовуються в них  констант. На відміну від ситуації з DES, NIST при виборі AES не став спиратися  на секретні і, як наслідок, заборонені до публікації дані про дослідження  алгоритмів-кандидатів.

Щоб бути затвердженим в якості стандарту, алгоритм повинен був:

    • реалізувати шифрування приватним ключем;
    • представляти собою блоковий шифр;
    • працювати з 128- розрядними блоками даних і ключами трьох розмірів ( 128 , 192 і 256 розрядів).

 

    Дополнительно кандидатам рекомендовалось:

  • використовувати операції , легко реалізовані як апаратно (у мікрочіпах ) , так і програмно ( на персональних комп'ютерах і серверах );
  • орієнтуватися на 32- розрядні процесори;
  • не ускладнювати без необхідності структуру шифру для того , щоб всі зацікавлені сторони були в змозі самостійно провести незалежний криптоаналіз алгоритму і переконатися , що в ньому не закладено жодних недокументованих можливостей.

Крім того, алгоритм, який претендує на роль стандарту, повинен  поширюватися по всьому світу на неексклюзивних умовах і без плати за користування патентом.

Перед першим туром конкурсу в NIST надійшло 21 пропозиція, 15 з яких відповідали висунутим критеріям. Потім були проведені дослідження цих рішень, у тому числі пов'язані з дешифровкою і перевіркою продуктивності, і отримані експертні оцінки фахівців з криптографії. У серпні 1999 року NIST оголосив п'ять фіналістів, які отримали право на участь у другому етапі обговорень.2 жовтня 2000 NIST повідомив про свій вибір - переможцем конкурсу став алгоритм RIJNDAEL (вимовляється як «райндол») бельгійських криптографів Вінсента Райман і Йоана Дамана, який зареєстрований в якості офіційного федерального стандарту як FIPS 197 (Federal Information Processing Standard).

Для мене залишається загадкою, навіщо в російському вузі викладають стандарти іноземних держав. Мабуть, виходять з принципу, що ворога треба знати в обличчя. Гаразд, загалом-то, це не наша справа.

Нам треба просто програмно  реалізувати основу національної безпеки  США.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РОЗДIЛ II.Розробка проекту програми.

 

2.1.Опис елементiв програми.

 

Block – послідовність біт, з яких складається input, output, State і Round Key. Також під Block можна розуміти послідовність байт.

Cipher Key – секретний, криптографічний ключ, який використовується Key Expansion процедурою, щоб провести набір ключів для раундів (Round Keys). Може бути представлений як прямокутний масив байтів, що має чотири рядки і Nk колонок.

Ciphertext – вихідні дані алгоритму шифрування.

Key Expansion – процедура використовується для генерації Round Keys з Cipher Key.

Round Key – Round Keys виходять з Cipher Key використовуючи процедуру Key Expansion. Вони застосовуються до State при шифруванні і дешифруванні.

State – промежуточный результат шифрования, который может быть представлен как прямоугольный массив байтов, имеющий 4 строки и Nb колонок.

S-box – нелінійна таблиця замін, що використовується в декількох трансформаціях заміни байт і в процедурі Key Expansion для заміни значення байта. Попередньо розрахований S-box - можна побачити нижче.

Nb – число стовпців (32-ох бітних слів), складових State.

Для, AES Nb = 4

Nk – число 32-ох бітних слів, складових шіфром ключ.

Для AES, Nk = 4,6, або 8

Nr – число раундів, яке є функцією Nk і Nb. Для AES, Nr = 10, 12, 14

Rcon[] – масив, який складається з бітів 32-х розрядного слова і є постійним для даного раунду. Попередньо розрахований Rcon [] можна побачити нижче.

 

S-box

 

Sbox = array (

0x63,0x7c, 0x77,0x7b, 0xf2,0x6b, 0x6f, 0xc5,0x30,0x01,0x67,0x2b, 0xfe, 0xd7,0xab, 0x76,

0xca, 0x82,0xc9,0x7d, 0xfa, 0x59,0x47,0xf0,0xad, 0xd4,0xa2,0xaf, 0x9c, 0xa4,0x72,0xc0,

0xb7,0xfd, 0x93,0x26,0x36,0x3f, 0xf7,0xcc, 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,

0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a, 0x07,0x12,0x80,0xe2,0xeb, 0x27,0xb2,0x75,

0x09,0x83,0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,0x52,0x3b, 0xd6,0xb3,0x29,0xe3,0x2f, 0x84,

0x53,0xd1,0x00,0xed, 0x20,0xfc, 0xb1,0x5b, 0x6a, 0xcb, 0xbe, 0x39,0x4a, 0x4c, 0x58,0xcf,

0xd0,0xef, 0xaa, 0xfb, 0x43,0x4d, 0x33,0x85,0x45,0xf9,0x02,0x7f, 0x50,0x3c, 0x9f, 0xa8,

0x51,0xa3,0x40,0x8f, 0x92,0x9d, 0x38,0xf5,0xbc, 0xb6,0xda, 0x21,0x10,0xff, 0xf3,0xd2,

0xcd, 0x0c, 0x13,0xec, 0x5f, 0x97,0x44,0x17,0xc4,0xa7,0x7e, 0x3d, 0x64,0x5d, 0x19,0x73,

0x60,0x81,0x4f, 0xdc, 0x22,0x2a, 0x90,0x88,0x46,0xee, 0xb8,0x14,0xde, 0x5e, 0x0b, 0xdb,

0xe0,0x32,0x3a, 0x0a, 0x49,0x06,0x24,0x5c, 0xc2,0xd3,0xac, 0x62,0x91,0x95,0xe4,0x79,

0xe7,0xc8,0x37,0x6d, 0x8d, 0xd5,0x4e, 0xa9,0x6c, 0x56,0xf4,0xea, 0x65,0x7a, 0xae, 0x08,

0xba, 0x78,0x25,0x2e, 0x1c, 0xa6,0xb4,0xc6,0xe8,0xdd, 0x74,0x1f, 0x4b, 0xbd, 0x8b, 0x8a,

0x70,0x3e, 0xb5,0x66,0x48,0x03,0xf6,0x0e, 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d, 0x9e,

0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e, 0x94,0x9b, 0x1e, 0x87,0xe9,0xce, 0x55,0x28,0xdf,

0x8c, 0xa1,0x89,0x0d, 0xbf, 0xe6,0x42,0x68,0x41,0x99,0x2d, 0x0f, 0xb0,0x54,0xbb, 0x16,);

 

Rcon[]

Rcon = array (

array(0x00, 0x00, 0x00, 0x00),

array (0x01, 0x00, 0x00, 0x00),

array (0x02, 0x00, 0x00, 0x00),

array (0x04, 0x00, 0x00, 0x00),

array (0x08, 0x00, 0x00, 0x00),

array (0x10, 0x00, 0x00, 0x00),

array (0x20, 0x00, 0x00, 0x00),

array (0x40, 0x00, 0x00, 0x00),

array (0x80, 0x00, 0x00, 0x00),

array (0x1b, 0x00, 0x00, 0x00),

array (0x36, 0x00, 0x00, 0x00),

);

 

 

 

 

AddRoundKey() – трансформація при шифруванні і зворотному шифруванні, при якій Round Key XOR'ітся c State. Довжина RoundKey дорівнює розміру State (ті, якщо Nb = 4, то довжина RoundKey дорівнює 128 біт або 16 байт)

InvMixColumns() – трансформація при розшифруваннi, яка є зворотною по відношенню до MixColumns ()

InvShiftRows() – трансформація при розшифруваннi, яка є зворотною по відношенню до ShiftRows ()

InvSubBytes() – трансформація при розшифруваннi, яка є зворотною по відношенню до SubBytes ()

MixColumns() – трансформація при шифруванні яка бере всі стовпці State і змішує їх дані (незалежно один від одного), щоб отримати нові стовпці

RotWord() – функція, яка використовується в процедурі Key Expansion, яка бере 4-х байтное слово і виробляє над ним циклічну перестановку

ShiftRows() – трансформації при шифруванні, які обробляють State, циклічно зміщуючи останні три рядки State на різні величини

SubBytes() – трансформації при шифруванні, які обробляють State використовуючи не лінійну таблицю заміщення байтів (S-box), застосовуючи її незалежно до кожного байта State

SubWord() – функція, яка використовується в процедурі Key Expansion, яка бере на вході чотирьох-байтное слово і застосовуючи S-box до кожного з чотирьох байтів видає вихідне слово.

 

 

2.2.Шифрування та процедури.

 

AES є стандартом, заснованим на алгоритмі Rijndael. Для AES довжина input (блоку вхідних даних) і State (стану) постійна і дорівнює 128 біт, а довжина шіфроключа K становить 128, 192, або 256 біт. При цьому, вихідний алгоритм Rijndael допускає довжину ключа і розмір блоку від 128 до 256 біт з кроком в 32 біта. Для позначення обраних довжин input, State і Cipher Key в байтах використовується нотація Nb = 4 для input і State, Nk = 4, 6, 8 для Cipher Key відповідно для різних довжин ключів.

На початку шифрування input копіюється в масив State за правилом s [r, c] = in [r + 4c], для і. Після цього до State застосовується процедура AddRoundKey () і потім State проходить через процедуру трансформації (раунд) 10, 12, або 14 разів (в залежності від довжини ключа), при цьому треба врахувати, що останній раунд дещо відрізняється від попередніх. У підсумку, після завершення останнього раунду трансформації, State копіюється в output за правилом out [r + 4c] = s [r, c], для і.

Окремі трансформації  SubBytes (), ShiftRows (), MixColumns (), і AddRoundKey () - обробляють State. Масив w [] - містить key schedule.

 

 

 

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

begin

byte state [4, Nb]

state = in

AddRoundKey (state, w [0, Nb-1])

for round = 1 step 1 to Nr-1

SubBytes(state)

ShiftRows(state)

MixColumns(state)

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

end for

SubBytes(state)

ShiftRows(state)

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

out = state

end

 

SubBytes()

 

У процедурі SubBytes, кожен байт в state замінюється відповідним елементом у фіксованій 8-бітної таблиці пошуку, S; bij = S (aij).

Процедура SubBytes () обробляє кожен байт стану, незалежно виробляючи нелінійну заміну байтів використовуючи таблицю замін (S-box). Така операція забезпечує нелінійність алгоритму шифрування. Побудова S-box складається з двох кроків. По-перше, проводиться взяття зворотного числа в полі Галуа. По-друге, до кожного байта b з яких складається S-box застосовується наступна операція:

 

де, і де bi є i-ий біт b, а ci - i-ий біт константи c = 6316 = 9910 = 011000112. Таким  чином, забезпечується захист від атак, заснованих на простих алгебраїчних властивостях.

 

 

ShiftRows()

 

У процедурі ShiftRows, байти  в кожному рядку state циклічно зсуває вліво. Розмір зсуву байтів кожного  рядка залежить від її номера.

ShiftRows працює з рядками  State. При цій трансформації рядка  стану циклічно зсуваються на r байт по горизонталі, залежно  від номера рядка. Для нульової  рядки r = 0, для першого рядка  r = 1 Б і т.д. Таким чином кожна  колонка вихідного стану після  застосування процедури ShiftRows складається  з байтів з кожної колонки  початкового стану. Для алгоритму  Rijndael патерн зміщення рядків для  128 - і 192-бітних рядків однаковий.  Однак для блоку розміром 256 біт  відрізняється від попередніх  тим, що 2, 3, і 4-е рядки зміщуються  на 1, 3, і 4 байта, відповідно.

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