Реалізація алгоритму шифрування AES-128

Актуальність питання запобігання витоку інформації криптографічним шляхом. Аналіз досвіду захисту інформації, комплексної організації його методів і механізмів. Розробка власного програмного засобу. Опис алгоритмів захисту. Структура програмних модулів.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 08.10.2017
Размер файла 1,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Ключ раунду (round key) - ключ, який застосовується в раунді. Обчислюється для кожного раунду.

Таблиця підстановок (S-box) - таблиця, що задає біективне відображення байта в байт. Таблиця підстановки представлена в таблиці 3.

Зворотна таблиця підстановок - таблиця, що задає відображення, зворотне задане таблицею підстановки. Зворотна таблиця підстановки представлена в таблиці 4.

Nb - кількість слів (word) в блоці.

Nk - кількість слів у ключі. Nk може приймати значення 4, 6, 8.

Nr - кількість раундів. Параметр Nr залежить від значень Nk. Відповідні значення даних параметрів наведені в таблиці 2.2.

Таблиця 2.2 - Залежність Nr від Nk

Nk

Nr

4

10

6

12

8

14

Шифрування

Для шифрування в алгоритмі AES застосовуються такі процедури перетворення даних:

1. ExpandKey - Обчислення раундових ключів для всіх раундів.

2. SubBytes - Підстановка байтів за допомогою таблиці підстановки.

3. ShiftRows - Циклічний зсув рядків у формі на різні величини.

4. MixColumns - Змішування даних усередині кожного стовпця форми.

5. AddRoundKey - Додавання ключа раунду з формою.

Порядок виконання процедур 2 і 3 можна поміняти місцями в силу визначення цих операцій.

Процедури 4 і 5 теж можна виконувати в різному порядку, але при цьому змінюється кількість їх викликів, оскільки MixColumns (AddRoundKey (A, B)) = AddRoundKey (MixColumns (A), MixColumns (B)).

Далі перетворення та їх застосування при шифруванні розглянуті детальніше.

Перетворення SubBytes

Перетворення SubBytes полягає в заміні кожного байта {xy} форми (де x і y позначають шістнадцяткові цифри) на інший відповідно до таблиці 2.3.

Таблиця 2.3 - Таблиця підстановок

Наприклад, байт {fe} заміниться на {bb}.

Перетворення ShiftRows

Перетворення ShiftRows полягає в циклічному зсуві вліво рядків форми. Перетворення схематично представлено на рисунку 2.1 Перший рядок залишається незмінним. У другій відбувається здвиг на 1 байт, тобто перший байт переноситься в кінець. У третій - здвиг на 2 байта, у четвертій - на 3.

Рисунок 2.1 - Перетворення ShiftRows

Перетворення MixColumns

Перетворення MixColumns полягає в множенні квадратної матриці 4-го порядку на кожен стовпчик форми:

Множення здійснюється в полі Галуа GF (28).

Над кожним стовпцем операція проводиться окремо, як показано на риcунку 2.2.

Рисунок 2.2 - Перетворення MixColumns

Перетворення AddRoundKey

В перетворенні AddRoundKey 32-бітові слова раундового ключа додаються до стовпців форми за допомогою побітової операції XOR:

Тут wi - це стовпці ключа.

Над кожним стовпцем операція проводиться окремо, як показано на рисунку 2.3.

Рисунок 2.3 - Перетворення AddRoundKey

Процедура розширення ключа ExpandKey

В алгоритмі AES генеруються раундові ключі на основі ключа шифрування з допомогою процедури ExpandKey. Процедура ExpandKey створює Nb * (Nr + 1) слів: алгоритму потрібно початковий ключ розміром Nb, плюс кожен з Nr раундів вимагає ключ з Nb слів. Нижче наведено псевдокод процедури ExpandKey:

// Процедура вираховує ключі раундів

// key - ключ

// out - результат

// Nk - кількість слів в ключі

ExpandKey (byte key [4*Nk], word out [Nb* (Nr+1)], int Nk)

begin

i = 0

while (i < Nk)

out [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))

word temp = out [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

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

i = i + 1

end while

end

Тут використані наступні функції:

SubWord здійснює заміну кожного байта в слові відповідно до таблиці підстановки, представленої в таблиці 2.3.

RotWord здійснює циклічний зсув байтів у слові вліво, як показано на рисунку 2.4.

Рисунок 2.4 - Процедура RotWord

Rcon (i) формує слово [02i-1, 00, 00, 00].

Дешифрування

При дешифруванні всі перетворення проводяться в зворотному порядку. Використовуються такі зворотні перетворення замість відповідних шифрувальних:

– InvSubBytes - Підстановка байтів за допомогою зворотної таблиці підстановки.

– InvShiftRows - Циклічний зсув рядків у формі на різні величини.

– InvMixColumns - Змішування даних усередині кожного стовпця форми.

Процедури ExpandKey і AddRoundKey залишаються незмінними. Ключі раунду використовуються в зворотному порядку.

Перетворення InvShiftRows

Це перетворення протилежне перетворенню ShiftRows. Перший рядок форми залишається незмінною. Другий рядок циклічно зсувається вправо на 1 байт. Третя - на 2, четверта - на 3.

Схематично перетворення показано на рисунку 2.5.

Рисунок 2.5 - Процедура InvShiftRows

Перетворення InvSubBytes

Це перетворення протилежне перетворенню SubBytes. Підстановка байтів відбувається аналогічно за допомогою зворотної таблиці підстановок, представленої в таблиці 2.4.

Таблиця 2.4 - Зворотна таблиця підстановок

Перетворення InvMixColumns

Це перетворення протилежне перетворенню MixColumns. InvMixColumns перетворює в формі кожен стовпець окремо. Перетворення відбувається за такою формулою:

Тут множення також проводиться в полі Галуа GF (28).

2.4 Висновок

Розглядаючи даний розділ, серед методів захисту інформації, яка зберігається на комп'ютері у вигляді файлів з важливою текстовою інформацією, найдоцільніше використовувати криптологію, а саме її розділи криптографію та криптоаналіз. Цілі цих напрямів прямо протилежні. Дослідженням проблеми захисту інформації шляхом пошуку і дослідженням математичних методів для перетворення інформації займається кpиптографія (kryptos - таємний, logos - наука). Як розшифрувати інформацію, не знаючи ключа, вивчає криптоаналіз. В даній курсовій роботі використовується перший підхід, так як розробляється криптографічний алгоритм.

В результаті дослідження різних алгоритмів шифрування, та розгляду їх програмних реалізацій було вибрано алгоритм AES, тому що він широко поширений серед програм, які шифрують конфіденційну інформацію. Він також використовується, як державний стандартний алгоритм кодування в США. В результаті перегляду програмних засобів, в яких реалізований алгоритм, було детально описано структуру цього алгоритму.

3. Розробка власного програмного засобу, рішення

3.1 Опис власного методу розв'язання задач

Визначення і допоміжні процедури

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

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

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

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

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

State проміжний результат шифрування, який може бути представлений як прямокутний масив байтів має 4 рядки і Nb колонок.

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

Nb число стовпців (32-ух бітних слів), що становлять State. Nb = 4.

Nk число 32-ух бітних слів, складових шифроключа. Nk = 4,6, або 8.

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

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

Таблиця 3.1 - Нелінійна таблиця замін

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,);

Таблиця 3.2 - Масив Rcon []

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 () трансформація при шифруванні і зворотному шифруванні, при якій RoundKey XOR'иться з State. Довжина RoundKey дорівнює розміру State (ті, якщо Nb = 4, то довжина RoundKey дорівнює 128 біт або 16 байт).

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

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

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

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

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

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

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

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

Шифрування

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.

Рисунок 3.1 - Псевдокод для Cipher

SubBytes ()

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

Рисунок 3.2 - Схема SubBytes ()

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

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

Рисунок 3.3 - 8-бітна таблиця пошуку S

ShiftRows ()

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

Рисунок 3.4 - Схема ShiftRows ()

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

MixColumns ()

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

Рисунок 3.5 - Схема MixColumns ()

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

AddRoundKey ()

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

Рисунок 3.6 - Схема AddRoundKey ()

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

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

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

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

– Алгоритм вибору раундового ключа (ключа ітерації).

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

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

Алгоритм KeyExpansion () показаний в псевдокоді на Рис.3.7 Функція 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 слів розширеного ключа заповнені CipherKey. У кожне наступне слово, w [i], кладеться значення отримане при операції XOR w [i - 1] і , ті XOR'а попереднього і на Nk позицій раніше слів. Для слів, позиція яких кратна Nk, перед XOR'ом до w [i-1] застосовується трасформація, за якою слідує XOR з константою раунду Rcon [i]. Зазначена вище трансформація складається з циклічного зсуву байтів в слові (RotWord ()), за якою йде процедура SubWord () - те ж саме, що і SubBytes (), тільки вхідні і вихідні дані будуть розміром в слово. Важливо зауважити, що процедура KeyExpansion () для 256 бітного CipherKey трохи відрізняється від тих, які застосовуються для 128 і 192 бітових шифроключей. Якщо Nk = 8 і i - 4 кратне Nk, то SubWord () застосовується до w [i - 1] до XOR'а.

Рисунок 3.7 - Псевдокод для KeyExpansion

Розшифрування

Рисунок 3.8 - Псевдокод для InverseCipher

Алгоритм вибору раундового ключа

На кожній ітерації і раундовий ключ для операції AddRoundKey вибирається із масива , починаючи із елемента до .

3.2 Опис алгоритмів захисту

Шифрування здійснюється за алгоритмом, наведеним на риcунку 3.9.

Рисунок 3.9 - Алгоритм шифрування

Алгоритм дешифрування представлений на Риc.3.10.

Рисунок 3.10 - Алгоритм дешифрування

3.3 Програмна реалізація

3.3.1 Обгрунтування програмної платформи

Гіпертекстова інформаційна система складається з безлічі інформаційних вузлів, безлічі гіпертекстових зв'язків, визначених на цих вузлах і інструментах маніпулювання вузлами і зв'язками. Технологія World Wide Web - це технологія ведення гіпертекстових розподілених систем в Internet, і, отже, вона повинна відповідати загальним визначенням таких систем. Це означає, що всі перераховані вище компоненти гіпертекстової системи повинні бути і в Web. Web, як гіпертекстову систему, можна розглядати з двох точок зору. По-перше, як сукупність відображуваних сторінок, пов'язаних гіпертекстовими переходами. По-друге, як безліч елементарних інформаційних об'єктів, що становлять відображені сторінки. В останньому випадку безліч гіпертекстових переходів сторінки - це такий же інформаційний фрагмент, як і вбудована в текст картинка. При другому підході гіпертекстова мережа визначається на безлічі елементарних інформаційних об'єктів самими HTML-сторінками, які і відіграють роль гіпертекстових зв'язків. Цей підхід більш продуктивний з точки зору побудови відображуваних сторінок "на льоту" з готових компонентів. При генерації сторінок в Web виникає дилема, пов'язана з архітектурою "клієнт-сервер".

У 1995 році фахівці компанії Netscape створили механізм управління сторінками на клієнтській стороні, розробивши мову програмування JavaScript. Таким чином, JavaScript - це мова керування сценаріями перегляду гіпертекстових сторінок Web на стороні клієнта. Якщо бути більш точним, то JavaScript - це не лише мова програмування на стороні клієнта. Liveware, прародитель JavaScript, є засобом підстановки на стороні сервера Netscape. Однак найбільшу популярність JavaScript забезпечило програмування на стороні клієнта. Основна ідея JavaScript складається в можливості зміни значень атрибутів HTML-контейнерів і властивостей середовища відображення в процесі перегляду HTML-сторінки користувачем. При цьому перезавантаження сторінки не відбувається. На практиці це виражається в тому, що можна, наприклад, змінити колір фону сторінки або інтегровану в документ картинку, відкрити нове вікно або видати попередження. В рамках даної роботи буде використовуватись назва JavaScript.

3.3.2 Структура програмних модулів

Загальна структура модулів програми представлена на рисунку 3.11.

Рисунок 3.11 - Загальна структура модулів

Розширена структура модулів програми відображена на рисунку 3.12.

Рисунок 3.12 - Розширена структура модулів

3.3.3 Опис програмних кодів

aes.html - головна сторінка, на якій представлений зовнішній вигляд програми.

text - вхідний текст в програмі.

pass - введений ключ.

ciph - зашифрований текст.

aes. js - сторінка JavaScript в якій реалізована основна логіка роботи програми

aes. nk - число 32-ух бітних слів, складових шифроключа. Nk = 4.

aes. nb - число стовпців (32-ух бітних слів), що становлять State. Nb = 4.

aes. nr - число раундів, яке є функцією Nk і Nb. Nr = 10.

aes. encrypt - кодує довільний рядок байтів з довільним паролем. Повертає рядок з закодованими даними. Цей алгоритм використовує AES 128 оскільки MD5 повертає 128 - бітові хеші.

data - масив байт даних.

password - масив байт ключа.

aes. keyexpasion - перетворює ключ в "ключ-специфікацію". Цей "ключ-специфікація" пройдений на aes. cipher і aes. invcipher.

w - array [4, aes. nb * (aes. nr + 1)] of byte. Це масив ключів для раундів.

key - array [aes. nk * 4] of byte.

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

aes. cipher - aes. cipher перетворює 16-байтовий вхід у 16-байтовий вихід. Тобто це процедура шифрування вхідного тексту досліджуваним і розробленим алгоритмом.

input - array [16] of byte. Масив копіюється в масив state.

output - array [16] of byte. Масив копіюється з масиву state.

aes. input2state - процедура, яка копіює масив input в масив state.

state - проміжний результат шифрування, який може бути

представлений як прямокутний масив байтів має 4 рядки і Nb колонок.

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

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

aes. sbox - повертає елементи з таблиці S-Box. Аргумент повинен бути в діапазоні 0.255. нелінійна таблиця замін, що використовується в декількох трансформаціях заміни байт і в процедурі Key Expansion для взаємно однозначної заміни значення байта.

b - кожний байт b, з яких складається S-box.

aes. shiftrows - у процедурі байти в кожному рядку State циклічно зсуваються вліво. Розмір зміщення байтів кожного рядка залежить від його номера.

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

toprow - вектор toprow допомагає aes. mixcolumns змішувати колонки AES використовує дві величини toprow: [02, 03, 01, 01] - для шифрування; [0e, 0b, 0d, 09] - для дешифрування.

aes. scalarmul - перемноження масиву стану з фіксованим многочленом

aes. state2output - процедура, яка копіює масив state в масив output.

aes. decrypt - розкодовує довільний рядок байтів з довільним паролем. Повертає рядок з розкодованими даними.

aes. invcipher - процедура обернена aes. cipher. Вона займається розшифруванням зашифрованого тексту досліджуваним і розробленим алгоритмом.

aes. invshiftrows - трансформація при розшифруванні, яка є зворотною по відношенню до aes. shiftrows.

aes. invsbox - процедура, яка є зворотною до aes. sbox.

3.4 Висновок

В даному розділі було проведено програмне проектування модулів програми, яка шифрує текст за відомим криптографічним алгоритмом AES - 128, який з 2001 року признано основним державним криптографічним алгоритмом США. Програма написана на JavaScript, тому що в рамках курсової роботи найдоцільніше і найзручніше показати результати шифрування у всім відомому браузері. Внаслідок проектування і кодування програми було створено 5 модулів (aes. js, bits. js, ext. js, gf28. js, md5. js), в який відображена вся логіка роботи алгоритму та головну сторінку програми (aes.html), в якій відбувається введення та отримання результатів шифрування та дешифрування. Щоб протестувати всі модулі потрібно запустити головну сторінку та в полі введення тексту (даних) набрати текст, який потрібно зашифрувати. Після натиснення на кнопці Розшифрування, відбувається перетворення тексту на основі досліджуваного алгоритму, та подальшого його відображення в полі виводу шифрованого тексту, що розміщується в низу браузера. Результат тестування можна проглянути на рисунку 3.13.

Рисунок 3.13 - Результат тестування алгоритму

Отже результати тестування задовольняють вимоги до результату роботи алгоритму, що доводить його працездатність.

Висновки

В ході курсового проектування було виконано:

1. Дослідження предметної галузі яке показало, що найбільш сучасним є проблема криптографічного захисту інформації;

2. Аналіз існуючих методів захисту, від фізичного перехоплення інформації та програмного, через мережі та на локальних ПК, та програмні засоби, що показало, що в базовий метод може бути прийнято алгоритм криптографічного шифрування інформації AES. Вважається доцільно взяти за основу розробку цього алгоритму для отримання практичних навичок;

3. Алгоритм шифрування текстової інформації AES був обраний тому, що він є найбільш ефективний серед криптографічних алгоритмів за останній час по всіх параметрах і обраним офіційним стандартом США для симетричного шифрування;

4. Побудова алгоритму симетричного шифрування AES - 128;

5. Проведена програмна реалізація на JavaScript та тестування програмних модулів в браузері.

Література

1. Зенін О.С., Іванов М.А. Стандарт криптографічного захисту - AES. Кінцеві поля. М.: КУДИЦ - ОБРАЗ, 2002.176 с.

2. Ківі Берд. Конкурс на новий крипто стандарт AES. - Системи безпеки зв'язку і телекомунікацій, 1999, №27 - 28.

3. Столінгс В. криптографія і захист мереж: принципи і практика. М.: видавничий дім "Вильямс", 2001.672 с.

4. Шнаєр В. Прикладна криптографія. Протоколи, алгоритми, вихідні тексти на мові С. М.: Видавництво "ТРИУМФ", 2002.816 с.

5. Винокуров А. сторінка класичних блочних шифрів.

6. http://www.enlight.ru/crypto/

7. Berlekamp E., “Algebraic Coding Theory”, Aegean Park Press, 1984.

8. Brunner H., Curiger A., Hofstetter M. “On computing multiplicative inverses in GF (2n)", IEEE Transactions on Computers Vol.42, no.8 (1993), pp.1010 - 1015.

9. Biham E. New types of cryptanalytic attacks using related keys. Advances in Criptology, Proceedings Eurocrypt'93, LNCS 765, T. Helleseth, Ed., Springer - Verlag, 1993, pp 398 - 409.

10. Biham E., Sharmir A. Differential cryptanalysis of DES-like cryptosystems. Journal of Cryptology, Vol.4, No.1, 1991, pp.3 - 72.

11. Daemen J., Rijmen V., The design of Rijndael, Springer, Berlin, 2002.

Додаток А

Реалізація алгоритму шифрування AES-128

Текст програми

Листів 14

Розробник_____________________ Крохмаль Є. О.

Черкаси - 2011

aes.html

<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 // EN">

<html>

<head>

<title>Криптографія на JavaScript</title>

<meta http-equiv="content-type" content="text/html; charset=utf-8">

<script type="text/javascript" src="ext. js"></script>

<script type="text/javascript" src="md5. js"></script>

<script type="text/javascript" src="bits. js"></script>

<script type="text/javascript" src="gf28. js"></script>

<script type="text/javascript" src="aes. js"></script>

<script type="text/javascript">

function $ (id)

{

return document. getElementById (id)

}

function tohexarray (str)

{

var s = '0123456789abcdef'

var ht = {}

for (var i = 0; i < 16; i++)

ht [s [i]] = i

var a = str. split (' ')

for (var i in a)

a [i] = 16 * ht [a [i] [0]] + ht [a [i] [1]]

return a

}

</script>

<style type="text/css">

body { font-family: calibri }

h1 { border-top: 1px solid lightblue; color: darkblue }

div. footnote { color: lightgray; position: absolute; right: 1em; bottom: 1em }

</style>

<body>

<h1>Кодування</h1>

<script type="text/javascript">

var ed = {}

ed. encrypt = function ()

{

$ ('cipherinfo'). innerHTML = '&nbsp; '

var text = $ ('plaintext'). value. bytes ('ascii')

var pass = $ ('password'). value. bytes ('ascii')

var ciph = aes. encrypt (text, pass)

$ ('cipher'). value = bits. hex (ciph, 1)

}

ed. decrypt = function ()

{

var ciph = tohexarray ($ ('cipher'). value)

var pass = $ ('password'). value. bytes ('ascii')

var text = aes. decrypt (ciph, pass)

var s = ''. frombytes (text)

$ ('cipher'). value = s

$ ('cipherinfo'). innerHTML = s == $ ('plaintext'). value?

'Результат відповідає відкритому тексту'. bold (). fontcolor ('green'):

'Результат не відповідає відкритому тексту'. bold (). fontcolor ('red')

}

</script>

<table>

<tr><td>

<textarea cols="70" rows="10" id="plaintext">

In cryptography, the Advanced Encryption Standard (AES) is a symmetric-key encryption standard adopted by the U. S.government. The standard comprises three block ciphers, AES-128, AES-192 and AES-256, adopted from a larger collection originally published as Rijndael. Each of these ciphers has a 128-bit block size, with key sizes of 128, 192 and 256 bits, respectively. The AES ciphers have been analyzed extensively and are now used worldwide, as was the case with its predecessor, the Data Encryption Standard (DES).

</textarea>

<tr><td id="cipherinfo">&nbsp;

<tr><td>

<select id="cipheralg">

<option>AES-128</option>

</select>

<input size="40" id="password" value="pz-704"></input>

<input type="button" value="Закодувати" onclick="ed. encrypt ()"></input>

<input type="button" value="Розкодувати" onclick="ed. decrypt ()"></input>

<tr><td>

<textarea cols="70" rows="10" id="cipher"></textarea>

</table>

</body>

</html>

aes. js

// AES алгоритм

aes = {}

aes. nk = 4 // кількість 4-байтових слів в ключі

aes. nb = 4 // кількість колонок состояния

aes. nr = 10 // кількість раундів

aes. select = function (bits)

{

if (bits == 128)

{

aes. nk = 4

aes. nb = 4

aes. nr = 10

}

if (bits == 192)

{

aes. nk = 6

aes. nb = 4

aes. nr = 12

}

if (bits == 256)

{

aes. nk = 8

aes. nb = 4

aes. nr = 14

}

}

/* Кодує довільний рядок байтів з довільним паролем.

Повертає рядок з закодованими даними. Цей алгоритм використовує AES 128

оскільки MD5 повертає 128 - бітові хеші.

dataмасив байт

passwordмасив байт */

aes. encrypt = function (data, password)

{

aes. select (128)

var hash = md5. hash (password)

var w = aes. keyexpansion (hash)

var length = bits. split (data. length, 16)

var result = aes. cipher (length, w)

for (var i = 0; i < data. length; i += 16)

{

var input = data. slice (i, i + 16)

while (input. length < 16)

input. push (0)

result = result. concat (aes. cipher (input, w))

}

return result

}

aes. decrypt = function (data, password)

{

aes. select (128)

var hash = md5. hash (password)

var w = aes. keyexpansion (hash)

var length = aes. invcipher (data. slice (0, 16), w)

var result = []

for (var i = 16; i < data. length; i += 16)

result = result. concat (aes. invcipher (data. slice (i, i + 16), w))

length = bits. merge (length)

if (length >= 0 && length <= result. length)

result. length = length

return result

}

/*Повертає елементи з таблиці S-Box.

аргумент повинен бути в діапазоні 0.255. */

aes. sbox = function (b)

{

var m = 0xf8

var r = 0

var q = gf. inv (b) || 0

for (var i = 0; i < 8; i++)

{

r = (r << 1) | bits. xorbits (q & m)

m = (m >> 1) | ( (m & 1) << 7)

}

return r ^ 0x63

}

aes. invsbox = function (b)

{

for (var i = 0; i < 256; i++)

if (aes. sbox (i) == b)

return i

}

/*Змішує колонки з використанням вектора toprow

з 4 байтами. AES використовує дві величини toprow:

[02, 03, 01, 01] для шифрування

[0e, 0b, 0d, 09] для дешифрування */

aes. mixcolumns = function (s, toprow)

{

for (var c = 0; c < aes. nb; c++)

{

var col = []

for (var r = 0; r < 4; r++)

col [r] = s [r] [c]

var k = toprow

for (var r = 0; r < 4; r++)

{

s [r] [c] = aes. scalarmul (k, col)

k = array. ror (k, 1)

}

}

}

/*aes. cipher перетворює 16-байтовий вхід у 16-байтовий вихід.

inputarray [16] of byte

warray [4, aes. nb] of byte (взято з aes. keyexpansion)

outputarray [16] of byte */

aes. cipher = function (input, w)

{

var s = aes. input2state (input)

aes. addroundkey (s, w. slice (0, aes. nb))

for (var i = 1; i <= aes. nr - 1; i++)

{

aes. apply (aes. sbox, s)

aes. shiftrows (s)

aes. mixcolumns (s, [0x02, 003, 0x01, 0x01])

aes. addroundkey (s, w. slice (aes. nb * i, aes. nb * (i + 1)))

}

aes. apply (aes. sbox, s)

aes. shiftrows (s)

aes. addroundkey (s, w. slice (aes. nb * aes. nr, aes. nb * (aes. nr + 1)))

return aes. state2output (s)

}

aes. invcipher = function (input, w)

{

var s = aes. input2state (input)

aes. addroundkey (s, w. slice (aes. nb * aes. nr, aes. nb * (aes. nr + 1)))

for (var i = aes. nr - 1; i >= 1; i--)

{

aes. invshiftrows (s)

aes. apply (aes. invsbox, s)

aes. addroundkey (s, w. slice (aes. nb * i, aes. nb * (i + 1)))

aes. mixcolumns (s, [0x0e, 0x0b, 0x0d, 0x09])

}

aes. invshiftrows (s)

aes. apply (aes. invsbox, s)

aes. addroundkey (s, w. slice (0, aes. nb))

return aes. state2output (s)

}

/*Перетворює ключ в "ключ-специфікацію".

Цей "ключ-специфікація" пройдений на aes. cipher і aes. invcipher.

keyarray [aes. nk * 4] of byte

warray [4, aes. nb * (aes. nr + 1)] of byte */

aes. keyexpansion = function (key)

{

var w = []

for (var i = 0; i < aes. nk; i++)

w [i] = key. slice (4 * i, 4 * i + 4)

for (var i = aes. nk; i < aes. nb * (aes. nr + 1); i++)

{

var t = w [i - 1]

if (i % aes. nk == 0)

t = aes. xor (aes. sbox. map (array. rol (t, 1)), aes. rcon (i / aes. nk))

if (i % aes. nk == 4 && aes. nk > 6)

t = aes. sbox. map (t)

w [i] = aes. xor (w [i - aes. nk], t)

}

return w

}

aes. apply = function (f, s)

{

for (var c = 0; c < aes. nb; c++)

for (var r = 0; r < 4; r++)

s [r] [c] = f (s [r] [c])

}

aes. shiftrows = function (s)

{

for (var r = 0; r < 4; r++)

s [r] = array. rol (s [r], r)

}

aes. invshiftrows = function (s)

{

for (var r = 0; r < 4; r++)

s [r] = array. ror (s [r], r)

}

aes. addroundkey = function (s, w)

{

for (var c = 0; c < aes. nb; c++)

for (var r = 0; r < 4; r++)

s [r] [c] = s [r] [c] ^ w [c] [r]

}

aes. xor = function (v1, v2)

{

var r = []

for (var i = 0; i < 4; i++)

r [i] = v1 [i] ^ v2 [i]

return r

}

aes. scalarmul = function (v1, v2)

{

var sum = 0

for (var i in v1)

sum ^= gf. mul (v1 [i], v2 [i])

return sum

}

aes. rcon = function (i)

{

var r = 1

for (var j = 1; j < i; j++)

r = gf. xtime (r)

return [r, 0, 0, 0]

}

aes. input2state = function (input)

{

var s = [[], [], [], []]

var i = 0

for (var c = 0; c < aes. nb; c++)

for (var r = 0; r < 4; r++)

{

s [r] [c] = input [i]

i++

}

return s

}

aes. state2output = function (s)

{

var output = []

var i = 0

for (var c = 0; c < aes. nb; c++)

for (var r = 0; r < 4; r++)

{

output [i] = s [r] [c]

i++

}

return output

}

aes. sbox = aes. sbox. cached ()

aes. rcon = aes. rcon. cached ()

aes. invsbox = aes. invsbox. cached ()

bits. js

// Поразрядные действия.

bits =

{

concat: function (b0, b1, b2, b3)

{

return ( (b3 & 0xff) << 24) | ( (b2 & 0xff) << 16) | ( (b1 & 0xff) << 8) | (b0 & 0xff)

},

split: function (int, bytes)

{

var res = []

for (var i = 0; i < bytes; i++)

{

res. push (int & 0xff)

int >>>= 8

}

return res

},

merge: function (bytes)

{

var res = 0

for (var i = bytes. length - 1; i >= 0; i--)

res = (res << 8) | bytes [i]

return res

},

// Зсув вліво на 32-bit ціле.

rol: function (value, shift)

{

var high = value >>> (32 - shift)

return (value << shift) | high

},

// Перетворення цілого в шістнадцяткові цифри.

hex: function (value, bytes, delim)

{

bytes = bytes || 4

if (delim === undefined)

delim = ' '

if (typeof value == 'object')

{

var r = []

for (var i in value)

r. push (bits. hex (value [i], bytes))

return r. join (delim)

}

var s = ''

while (bytes > 0)

{

bytes--

var h0 = value & 0x0f

var h1 = (value & 0xf0) >>> 4

s += bits. hexdigits. charAt (h1) + bits. hexdigits. charAt (h0)

value >>>= 8

}

return s

},

hexdigits: '0123456789abcdef',

revert: function (value, bytes)

{

bytes = bytes || 4

var r = 0

for (var i = 0; i < bytes; i++)

{

r <<= 8

r |= value & 0xff

value >>= 8

}

return r

},

xorbits: function (int, n)

{

n = n || 8

var res = 0

for (var i = 0; i < n; i++)

{

res ^= int & 1

int >>>= 1

}

return res

},

}

ext. js

// Розширення JavaScript-ових об'єктів.

array = {}

array. rol = function (a, n)

{

return a. slice (n, a. length). concat (a. slice (0, n))

}

array. ror = function (a, n)

{

return array. rol (a, a. length - n)

}

Function. prototype. cached = function ()

{

var old = this

var cache = {}

return function (x)

{

if (cache [x]! == undefined)

return cache [x]

cache [x] = old (x)

return cache [x]

}

}

Function. prototype. map = function (list)

{

var res = {}

for (var i in list)

res [i] = this (list [i])

return res

}

String. prototype. bytes = function (mode)

{

var res = []

for (var i = 0; i < this. length; i++)

{

var c = this. charCodeAt (i)

var b0 = c % 256

var b1 = (c - b0) / 256

if (mode == 'ascii')

res. push (b0)

else

res. push (b0, b1)

}

return res

}

String. prototype. frombytes = function (bytes)

{

var res = ''

for (var i in bytes)

res += String. fromCharCode (bytes [i])

return res

}

gf28. js

// GF (2^8)

gf = {}

gf. xtime = function (b)

{

var highbit = b & 0x80

var shl = (b << 1) & 0xff

return highbit == 0? shl: shl ^ 0x1b

}

gf. mul = function (b1, b2)

{

var t = [b1]

var r = 0

for (var i = 1; i < 8; i++)

t [i] = gf. xtime (t [i - 1])

for (var i = 0; i < 8; i++)

if (b2 & (1 << i))

r ^= t [i]

return r

}

gf. inv = function (b)

{

for (var i = 0; i < 256; i++)

if (gf. mul (i, b) == 1)

return i

}

md5. js

// MD5 алгоритм

md5 = {}

md5. paddedlen = function (len)

{

var padded = ( (len + 63) >>> 6) * 64

if (padded - len < 9)

padded += 64

return padded

}

md5. byteat = function (str, index)

{

var len = str. length

if (index < len)

return str [index]

if (index == len)

return 0x80

var n = md5. paddedlen (len)

if (index < n - 8)

return 0

var i = index

var b = 0

var m = len

while (i > n - 8)

{

i--

b = m & 0xff

m >>>= 8

}

m = (m << 3) | (b >>> 5)

return m & 0xff

}

md5. hash = function (str)

{

var F = function (x, y, z) { return x & y | ~x & z }

var G = function (x, y, z) { return x & z | y & ~z }

var H = function (x, y, z) { return x ^ y ^ z }

var I = function (x, y, z) { return y ^ (x | ~z) }

var S = function (i) { return md5. byteat (str, i) }

var M = function (i) { return bits. concat (S (i * 4), S (i * 4 + 1), S (i * 4 + 2), S (i * 4 + 3)) }

var X = []

var T = []

for (var i = 1; i <= 256; i++)

T [i] = Math. floor (0x100000000 * Math. abs (Math. sin (i)))

var W =

[

bits. concat (0x01, 0x23, 0x45, 0x67),

bits. concat (0x89, 0xab, 0xcd, 0xef),

bits. concat (0xfe, 0xdc, 0xba, 0x98),

bits. concat (0x76, 0x54, 0x32, 0x10),

]

// Вектор [A, B, C, D, k, s, i] відповідає [ABCD k s i] операції.

var rounds =

[

// Раунд F.

[

[0, 7],

[1, 12],

[2, 17],

[3, 22],

[4, 7],

[5, 12],

[6, 17],

[7, 22],

[8, 7],

[9, 12],

[10, 17],

[11, 22],

[12, 7],

[13, 12],

[14, 17],

[15, 22],

],

// Раунд G.

[

[1, 5],

[6, 9],

[11, 14],

[0, 20],

[5, 5],

[10, 9],

[15, 14],

[4, 20],

[9, 5],

[14, 9],

[3, 14],

[8, 20],

[13, 5],

[2, 9],

[7, 14],

[12, 20],

],

// Раунд H.

[

[5, 4],

[8, 11],

[11, 16],

[14, 23],

[1, 4],

[4, 11],

[7, 16],

[10, 23],

[13, 4],

[0, 11],

[3, 16],

[6, 23],

[9, 4],

[12, 11],

[15, 16],

[2, 23],

],

// Раунд I.

[

[0, 6],

[7, 10],

[14, 15],

[5, 21],

[12, 6],

[3, 10],

[10, 15],

[1, 21],

[8, 6],

[15, 10],

[6, 15],

[13, 21],

[4, 6],

[11, 10],

[2, 15],

[9, 21],

],

]

for (var i = 0; i < (md5. paddedlen (str. length) >> 6); i++)

{

for (var j = 0; j < 16; j++)

X [j] = M (i * 16 + j)

var Q = [W [0], W [1], W [2], W [3]]

for (var ri = 0; ri < 4; ri++)

for (var ti = 0; ti < 16; ti++)

{

var f = [F, G, H, I] [ri]

var t = rounds [ri] [ti]

var a = W [ (0 - ti) & 3]

var b = W [ (1 - ti) & 3]

var c = W [ (2 - ti) & 3]

var d = W [ (3 - ti) & 3]

var k = t [0]

var s = t [1]

var m = ri * 16 + ti + 1

a = b + bits. rol (a + X [k] + T [m] + f (b, c, d), s)

W [ (0 - ti) & 3] = a

}

W = [W [0] + Q [0], W [1] + Q [1], W [2] + Q [2], W [3] + Q [3]]

}

var $ = function (i)

{

return bits. split (W [i],

4)

}

return []. concat ($ (0), $ (1), $ (2), $ (3))

}

md5. selftest = function ()

{

var pairs = [

['', 'd41d8cd98f00b204e9800998ecf8427e'],

['a', '0cc175b9c0f1b6a831c399e269772661'],

['abc', '900150983cd24fb0d6963f7d28e17f72'],

['message digest', 'f96b697d7cb7938d525a2f31aaf161d0'],

['abcdefghijklmnopqrstuvwxyz', 'c3fcd3d76192e4007dfb496cca67e13b'],

['ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'd174ab98d277d9f5a5611c2c9f419d9f']]

for (var i in pairs)

{

var message = pairs [i] [0]

var digest = pairs [i] [1]

var hash = md5. hash (message. bytes ('ascii'))

if (bits. hex (hash, 1, '')! = digest)

return false

}

return true

}

Умови запуску програми

Щоб запустити програму потрібно скористатися будь-яким браузером, яким ми користуєтеся для перегляду сторінок в Інтернеті. Після запуску браузера виконуємо команду Файл/Открыть фай в головному меню. Після цього в новому вікні потрібно вказати ім'я файлу для представлення програми. Заходимо в директорію нашої курсової роботи і вказуємо файл aes.html як показано на рисунку 1.

Рисунок 1 - Запуск програми

Робота з програмою

Після запуску програми в браузері можна простежити головні функціональні блоки програми - рисунок 2.

Рисунок 2 - Вікно програми після запуску

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

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

Після цього блоку розміщується дві кнопки Закодувати та Розкодувати, які говорять самі за себе.

Щоб скористатися кнопкою Закодувати потрібно щоб в блоці введення була текстова інформація для кодування. Після натиснення на кнопку ми отримуємо результат кодування в останньому, також текстовому, блоці у вигляді 16-бітних слів, що показано на рисунку 3.

Рисунок 3 - Результат шифрування

Щоб розкодувати інформацію потрібно щоб ключ був таким самим як і при кодуванні. Для цього потрібно натиснути на кнопку розкодувати і в нижньому блоці відобразиться розкодована інформація. Якщо ж ключ не правильний то результат виведеться в некоректній формі.

В даній програмі існує перевірка розшифрованих даних на ідентичність вхідним даним.

Наприклад, ми шифруємо інформацію, яка введена в програмі по замовчуванням. Після отримання результату в нижньому блоці, ми натискаємо кнопку розкодувати і бачимо що результат в нижньому блоці відповідає вхідним даним, і виводиться рядочок, який підтверджує це - "Результат відповідає відкритому тексту". Побачити це можна на рисунку 4.

Рисунок 4 - Перевірка кодування на ідентичність результату і вхідних даних

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

Рисунок 5 - Перевірка кодування на не ідентичність результату і вхідних даних або неправильності ключа при розшифруванні

Размещено на Allbest.ru

...

Подобные документы

  • Види секретної інформації та методи захисту. Тип і об’єм вхідних даних. Програмна реалізація системи алгоритму шифрування зі стисненням. Призначення та опис програмного продукту Export. Алгоритми захисту зберігання та обміну секретною інформацією.

    дипломная работа [1,1 M], добавлен 19.09.2012

  • Задачі інформаційних систем криптографічного захисту інформації. Принципи шифрування даних на основі використання хеш-функцій. Розробка програмних компонентів інформаційних систем криптографічного захисту інформації. Види криптографічних алгоритмів.

    курсовая работа [2,7 M], добавлен 23.01.2012

  • Основи безпеки даних в комп'ютерних системах. Розробка програми для забезпечення захисту інформації від несанкціонованого доступу: шифрування та дешифрування даних за допомогою криптографічних алгоритмів RSA та DES. Проблеми і перспективи криптографії.

    дипломная работа [823,1 K], добавлен 11.01.2011

  • Можливі канали витоку інформації. Джерела виникнення електромагнітних полів. Основні параметри можливого витоку інформації каналами ПЕМВН. Розроблення системи захисту інформації. Захист інформації блокуванням загроз без використання засобів ТЗІ.

    дипломная работа [80,0 K], добавлен 13.03.2012

  • Мета і призначення комплексної системи захисту інформації. Загальна характеристика автоматизованої системи установи та умов її функціонування. Формування моделей загроз інформації та порушника об'єкта інформаційної діяльності. Розробка політики безпеки.

    курсовая работа [166,9 K], добавлен 21.03.2013

  • Дослідження криптографічних методів захисту даних від небажаного доступу. Основи безпеки даних в комп'ютерних системах. Класифікаційні складові загроз безпеки інформації. Характеристика алгоритмів симетричного та асиметричного шифрування інформації.

    курсовая работа [245,8 K], добавлен 01.06.2014

  • Забезпечення захисту інформації. Аналіз системи інформаційної безпеки ТОВ "Ясенсвіт", розробка моделі системи. Запобігання витоку, розкраданню, спотворенню, підробці інформації. Дослідження та оцінка ефективності системи інформаційної безпеки організації.

    курсовая работа [1,6 M], добавлен 27.04.2014

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

    реферат [125,8 K], добавлен 19.12.2010

  • Основні теоретичні відомості алгоритмів стиснення зображень: класи зображень та їх представлення в пам'яті, алгоритми та принципи групового кодування. Огляд та аналіз сучасних програмних засобів конвертування. Тестування, опис роботи програмного засобу.

    курсовая работа [2,9 M], добавлен 15.03.2014

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

    курсовая работа [140,9 K], добавлен 01.03.2012

  • Проблеми побудови цілісної системи захисту інформації з обмеженим доступом для малого підприємства. Основні етапи планування та моделювання комплексної системи захисту інформації, негативні чинники, що можуть завадити проведенню якісної її побудови.

    статья [131,1 K], добавлен 27.08.2017

  • Аналіз системи збору первинної інформації та розробка структури керуючої ЕОМ АСУ ТП. Розробка апаратного забезпечення інформаційних каналів, структури програмного забезпечення. Алгоритми системного програмного забезпечення. Опис програмних модулів.

    дипломная работа [1,9 M], добавлен 19.08.2012

  • Принципи, цілі та завдання, напрямки робіт із захисту інформації. Суб'єкти системи захисту інформації у Російській Федерації. Основні організаційно-технічні заходи, об'єкти та засоби захисту інформації. Види загроз безпеки, матеріальні носії інформації.

    реферат [23,6 K], добавлен 27.03.2010

  • Основи технології запису на оптичні диски. Довготривале зберігання інформації на оптичних носіях. Дослідження існуючих програмних і технічних засобів шифрування даних. Можливі рішення проблем і попередження злому. Програмні засоби шифрування даних.

    дипломная работа [4,0 M], добавлен 27.01.2012

  • Акт категоріювання. Акт обстеження. Наказ на контрольовану зону. Модель загроз. Технічний захист інформації. Комплексна система захисту інформації. Перелік вимог з захисту інформації. Об'єкти, що підлягають категоріюванню.

    курсовая работа [17,6 K], добавлен 19.07.2007

  • Загальна характеристика ТОВ "WED". Програмне забезпечення і система документообігу підприємства. Технічні засоби охорони об’єктів від витоку інформації. Резервне копіювання інформації. Встановлення антивірусу. Впровадження криптографічного захисту.

    курсовая работа [697,1 K], добавлен 01.06.2010

  • Детальний опис об'єкту захисту i видів інформації, що опрацьовується i зберігається у банку. Оцінка можливих каналів витоку інформації. Перелік організаційних і технічних заходів на об’єкті. Захист телефонних ліній і екранування виділених приміщень.

    курсовая работа [35,6 K], добавлен 23.12.2010

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

    реферат [24,0 K], добавлен 03.10.2010

  • Сучасні методи захисту текстової інформації. Порівняльний аналіз шифру Бекона з іншими відомими шифрами. Практичне використання алгоритмів кодування тексту. Написання програми "Шифр Бекона", використані компоненти для реалізації алгоритму, їх властивості.

    курсовая работа [606,8 K], добавлен 28.03.2016

  • Тестування програмного забезпечення як процес його дослідження для отримання інформації про якість. Автоматизація тестування програми Join It - Jigsaw Puzzle. Методика тестування, структура пакету та його модулів. Вимоги до програмного забезпечення.

    дипломная работа [2,4 M], добавлен 24.07.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.