Дослідження та порівняльний аналіз алгоритмів кодування даних

Історія створення мови С#. Аналіз алгоритмів кодування даних. Розробка системи в середовищі Visual Studio 2008 Express. Схема шифрування алгоритму DES. Дослідження алгоритму RC2. Приклади хешів RIPEMD-160. Програмна реалізація основних процедур системи.

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

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

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

RC2 складається з трьох частин: агорітм розширення ключа, алгоритм шифрування, алгоритм розшифровки.

У тексті алгоритму використовуються наступні позначення:

1. Порозрядному виключає АБО, позначення "^".

2. Порозрядному І, позначення "&"

3. Порозрядному НЕ, позначення "~".

4. Операція>>> - циклічний зсув вправо x на y

5. Операція <<<- циклічний зсув вліво x на y

Розширення ключа.

Спочатку створюється 256-байтовий S-блок кожен i-й елемент якого виходить так:

Sbox [i] = Beale [i] mod 256 XOR pad [i],

де Beale [i] - елемент з шифру Beal (коду), pad [i] - елемент з шифру pad (коду). Далі відбувається розширення ключа до 128 байтам, ключ розширюється так, щоб заповнити 128 байтів (64 слова). При розширенні беруть суму першого і останнього байта ключа, шукають суму (mod 256) в S-блоці і додають результат у ключ. Операція повторюється з другим і останнім новим байтом поки ключ не буде сформований до 128. (див. рис 3.14.)

Рис.3.14 Формування ключа

Спочатку i = 0, а j = lengh (K) (довжині ключа K)

for j = 0 to length-1 do

S [j] = K [j]

for j = length to 127 do s [j] = sBox [(S [j-length] + S [j-1]) mod 256];

Останнім кроком змінюють перший байт ключа та байтом вибраним з S-блоку.

S [0] = sBox [S [0]]

Шифрування.

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

for i = 0 to 15 do j = i * 4;

word0 = (word0 + (word1 & ~ word3) + (word2 & word3) + S [j +0]) <<<1

word1 = (word1 + (word2 & ~ word0) + (word3 & word0) + S [j +1]) <<<2

word2 = (word2 + (word3 & ~ word1) + (word0 & word1) + S [j +2]) <<<3

word3 = (word3 + (word0 & ~ word2) + (word1 & word2) + S [j +3]) <<<5

Крім того п'яті і одинадцятий раунди додають зміст S-блоку, індексованої одним з слів даних до іншого після чотирьох подраундов наступним чином:

word0 = word0 + S [word3 & 63];

word1 = word1 + S [word0 & 63];

word2 = word2 + S [word1 & 63];

word3 = word3 + S [word2 & 63];

Розшифровка.

Операція розшифровки - просто інверсія операції шифрування.

for i = 15 downto 0 do j = i * 4;

word3 = (word3>>> 5) - (word0 & ~ word2) - (word1 & word2) - S [j +3]

word2 = (word2>>> 3) - (word3 & ~ word1) - (word0 & word1) - S [j +2]

word1 = (word1>>> 2) - (word2 & ~ word0) - (word3 & word0) - S [j +1]

word0 = (word0>>> 1) - (word1 & ~ word3) - (word2 & word3) - S [j +0]

Крім того п'яті і одинадцятий раунди віднімають утримання S-блоку, індексованої одним з слів даних з іншого після чотирьох подраундов наступним чином:

word3 = word3 - S [word2 & 63]

word2 = word2 - S [word1 & 63]

word1 = word1 - S [word0 & 63]

word0 = word0 - S [word3 & 63]

У даному алгоритмі можливі неточності на увазі конфіденційності цього алгоритму.

3.4 Дослідження алгоритму AES

Advanced Encryption Standard (AES), також відомий як Rijndael - симетричний алгоритм блочного шифрування (розмір блока 128 біт, ключ 128/192/256 біт), прийнятий в якості стандарту шифрування урядом США за результатами конкурсу AES. Цей алгоритм добре проаналізовано і зараз широко використовується, як це було з його попередником DES. Національний інститут стандартів і технологій США (англ. National Institute of Standards and Technology, NIST) опублікував специфікацію AES 26 листопада 2001 після п'ятирічного періоду, в ході якого були створені і оцінені 15 кандидатур. 26 травня 2002 AES було оголошено стандартом шифрування. За станом на 2006 рік AES є одним з найпоширеніших алгоритмів симетричного шифрування.

3.4.1 Опис AES

Визначення і допоміжні процедури наведенні в таблиці 3.12.

Таблиця 3.12

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 для взаімнооднозначной заміни значення байта

Nb

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

Nk

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

Nr

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

Rcon[]

масив, який складається з бітів 32-х розрядного слова і є постійним для даного раунду

Допоможні процедури наведенні в таблиці 3.13.

Таблиця 3.13

AddRoundKey()

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

InvMixColumns()

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

InvShiftRows()

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

InvSubBytes()

при розшифровані яка стає оберненою по відношенню до SubBytes()

MixColumns()

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

RotWord()

Функція використана в процедурі Key Expansion, яка бере 4-x байтове слово і виробляє над ним циклічну перестановку

ShiftRows()

Трансформація при шифровані яка обробляє State, циклічно змішуючи останні три рядки State на різні величини.

SubBytes()

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

SubWord()

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

3.4.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.

SubBytes().

Рис 3.15 Процедура SubBytes

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

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

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

ShiftRows().

Рис 3.16 Процедура ShiftRows

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

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

MixColumns().

Рис 3.17 Процедура 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.

KeyExpansion().

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

(3.12)

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

Можна побачити, що перші Nk слів розширеної ключа заповнені Cipher Key. У кожне наступне слово, w [i], кладеться значення отримане при операції

XOR w [i-1] і w [i - Nk], ті 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'а.

3.5 Дослідження алгоритму RIPEMD-160

RIPEMD-160 (від англ. RACE Integrity Primitives Evaluation Message Digest) - хеш-функція, розроблена в Лувенського католицькому університеті Гансом Добертіном (Hans Dobbertin), Антуном Босселаерсом (Antoon Bosselaers) і Бартом Пренелем (Bart Preneel). Для довільного вхідного повідомлення функція генерує 160-розрядне хеш-значення, зване дайджестом повідомлення. RIPEMD-160 є вдосконаленою версією RIPEMD, яка, у свою чергу, використовувала принципи MD4 і по продуктивності порівнянна з більш популярною SHA-1. Також існують 128 -, 256 - і 320-бітні версії цього алгоритму, які, відповідно, називаються RIPEMD-128, RIPEMD-256 і RIPEMD-320. 128-бітна версія являє собою лише від'єднуйте RIPEMD, яка також була 128-бітної і в якій були знайдені вразливості [1]. 256 - і 320-бітні версії відрізняються подвоєною довжиною дайджесту, що зменшує ймовірність колізій, але при цьому функції не повинні бути більш криптостійкому. RIPEMD-160 була розроблена у відкритому академічному співтоваристві, на відміну від SHA, які були створені NSA. З іншого боку, RIPEMD-160 на практиці використовується дещо рідше, ніж SHA-1. Можливо, це обумовлено найгіршою структуризацією RIPEMD-160.Іспользованіе RIPEMD-160 не обмежений будь-якими патентами.

3.5.1 Реалізація RIPEMD-160

Крок 1. Додавання відсутніх бітів.

Повідомлення розширюється так, щоб його довжина в бітах за модулем 512 дорівнювала 448. Таким чином, в результаті розширення, повідомленням бракує 64 біта до довжини, кратної 512 бітам. Розширення проводиться завжди, навіть якщо повідомлення споконвічно має потрібну довжину.

Розширення проводиться таким чином: один біт, що дорівнює 1, додається до повідомлення, а потім додаються біти, рівні 0, до тих пір, поки довжина повідомлення не стане рівною 448 по модулю 512. У результаті, до повідомлення додається як мінімум 1 біт, і як максимум 512.

Крок 2. Додавання довжини повідомлення.

64-бітне подання b (довжини повідомлення перед додаванням набитих бітів) додається до результату попереднього кроку. У малоймовірному випадку, коли bбольше, ніж 264, використовуються тільки 64 молодших біта. Ці біти додаються у вигляді двох 32-бітових слів, і першим додається слово, що містить молодші розряди.

На цьому етапі (після додавання бітів і довжини повідомлення) ми отримуємо повідомлення довжиною кратною 512 бітам. Це еквівалентно тому, що це повідомлення має довжину, кратну 16-ти 32-бітним словами. Кожне 32-бітне слово містить чотири 8-бітових, але випливають вони не підряд, а навпаки (наприклад, з восьми 8-бітових слів (abcdefgh) ми отримуємо два 32-бітних слова (dcba hgfe)).

Крок 3. Визначення діючих функцій і констант

I. Нелінійні побітового функції:

(3.13)

(3.14)

(3.15)

(3.16)

(3.17)

II. Додаються шістнадцяткові константи:

K(j) = 00000000x (0 ? j ? 15)

K(j) = 5A827999x (16 ? j ? 31)

K(j) = 6ED9EBA1x (32 ? j ? 47)

K(j) = 8F1BBCDCx (48 ? j ? 63)

K(j) = A953FD4Ex (64 ? j ? 79)

K'(j) = 50A28BE6x (0 ? j ? 15)

K'(j) = 5C4DD124x (16 ? j ? 31)

K'(j) = 6D703EF3x (32 ? j ? 47)

K'(j) = 7A6D76E9x (48 ? j ? 63)

K'(j) = 00000000x (64 ? j ? 79)

III. Вибір 32-бітних слів з повідомлення

r(j) = j при (0 ? j ? 15) (3.18)

r(16..31) = 7; 4; 13; 1; 10; 6; 15; 3; 12; 0; 9; 5; 2; 14; 11; 8

r(32..47) = 3; 10; 14; 4; 9; 15; 8; 1; 2; 7; 0; 6; 13; 11; 5; 12

r(48..63) = 1; 9; 11; 10; 0; 8; 12; 4; 13; 3; 7; 15; 14; 5; 6; 2

r(64..79) = 4; 0; 5; 9; 7; 12; 2; 10; 14; 1; 3; 8; 11; 6; 15; 13

r'(0..15) = 5; 14; 7; 0; 9; 2; 11; 4; 13; 6; 15; 8; 1; 10; 3; 12

r'(16..31) = 6; 11; 3; 7; 0; 13; 5; 10; 14; 15; 8; 12; 4; 9; 1; 2

r'(32..47) = 15; 5; 1; 3; 7; 14; 6; 9; 11; 8; 12; 2; 10; 0; 4; 13

r'(48..63) = 8; 6; 4; 1; 3; 11; 15; 0; 5; 12; 2; 13; 9; 7; 10; 14

r'(64..79) = 12; 15; 10; 4; 1; 5; 8; 7; 6; 2; 13; 14; 0; 3; 9; 11

VI. Набір для бітового повороту ліворуч (операція rol)

s(0..15) = 11; 14; 15; 12; 5; 8; 7; 9; 11; 13; 14; 15; 6; 7; 9; 8

s(16..31) = 7; 6; 8; 13; 11; 9; 7; 15; 7; 12; 15; 9; 11; 7; 13; 12

s(32..47) = 11; 13; 6; 7; 14; 9; 13; 15; 14; 8; 13; 6; 5; 12; 7; 5

s(48..63) = 11; 12; 14; 15; 14; 15; 9; 8; 9; 14; 5; 6; 8; 6; 5; 12

s(64..79) = 9; 15; 5; 11; 6; 8; 13; 12; 5; 12; 13; 14; 11; 8; 5; 6

s'(0..15) = 8; 9; 9; 11; 13; 15; 15; 5; 7; 7; 8; 11; 14; 14; 12; 6

s'(16..31) = 9; 13; 15; 7; 12; 8; 9; 11; 7; 7; 12; 7; 6; 15; 13; 11

s'(32..47) = 9; 7; 15; 11; 8; 6; 6; 14; 12; 13; 5; 14; 13; 13; 7; 5

s'(48..63) = 15; 5; 8; 11; 14; 14; 6; 14; 6; 9; 12; 9; 12; 5; 15; 8

s'(64..79) = 8; 5; 12; 9; 12; 5; 14; 6; 8; 13; 6; 5; 15; 13; 11; 11

VII. Вихідні значення слів дайджесту

h0 = 67452301x;

h1 = EFCDAB89x;

h2 = 98BADCFEx;

h3 = 10325476x;

h4 = C3D2E1F0x;

Крок 4. Виконання алгоритму хешування

Після завдання всіх вихідних функцій, констант і початкових значень слів хеш-суми можна переходити до виконання алгоритму. Виконання алгоритму відбувається у двох паралельних шляхах. Обробка повідомлення відбувається блоками по 16 слів в 32 біта.

3.5.2 RIPEMD-160 на псевдокоді

Під складанням «+» мається на увазі складання по модулю 232, rols позначає циклічний зсув вліво на s позицій.

for i:=0 to t-1 {

A := h0; B := h1; C := h2; D = h3; E = h4;

A' := h0; B' := h1; C' := h2; D' = h3; E' = h4;

for j := 0 to 79 {

T := rols(j) (A + f(j;B;C;D) + Xi[r(j)] + K(j)) + E;

A := E; E := D; D := rol10(C); C := B; B := T;

T := rols'(j) (A' + f(79 -- j;B';C';D') + Xi[r'(j)] + K'(j)) E';

A' := E'; E' := D'; D' := rol10(C'); C' := B'; B' := T;}

T := h1 + C + D'; h1 := h2 + D + E'; h2 := h3 + E + A';

h3 := h4 + A + B'; h4 := h0 + B + C'; h0 := T;}

3.5.3 Приклади хешів RIPEMD-160

Вхідна рядок складається з ASCII-символів. Вихідна рядок являє собою шістнадцятковий запис.

RIPEMD-160 ("The quick brown fox jumps over the lazy dog") =

37f332f68db77bd9d7edd4969571ad671cf9dd3b

Навіть маленьке зміна повідомлення викликає значну зміну дайджесту. Наприклад, ми замінимо в наведеному вище прикладі d на c:

RIPEMD-160 ("The quick brown fox jumps over the lazy cog") =

132072df690933835eb8b6ad0b77e7b6f14acad7

Хеш-сума нульової рядка виглядає так:

RIPEMD-160 ("") =

9c1185a5c5e9fc54612808977ee8f548b2258d31

3.5.4 Продуктивність

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

Таблиця 3.14

Алгоритм

Циклів

Мбіт/сек

Відносна продуктивність

MD4

241

191.2

1.00

MD5

337

136.7

0.72

RIPEMD

480

96.0

0.50

RIPEMD-128

592

77.8

0.41

SHA-1

837

55.1

0.29

RIPEMD-160

1013

45.5

0.2

3.6 Дослідження алгоритму SHA-2

SHA-2 (англ. Secure Hash Algorithm Version 2 - безпечний алгоритм хешування, версія 2) - збірна назва односпрямованим хеш-функцій SHA-224, SHA-256, SHA-384 і SHA-512. Хеш-функції призначені для створення «відбитків» або «дайджестів» повідомлень довільної бітової довжини. Застосовуються в різних додатках або компонентах, пов'язаних із захистом інформації.

3.6.1 Історія SHA-2

Хеш-функції SHA-2 розроблені Агентством національної безпеки США і опубліковані Національним інститутом стандартів і технологій у федеральному стандарті обробки інформації FIPS PUB 180-2 в серпні 2002 року. В цей стандарт також увійшла хеш-функція SHA-1, розроблена в 1995 році. У лютому 2004 року в FIPS PUB 180-2 була додана SHA-224. У жовтні 2008 року вийшла нова редакція стандарту - FIPS PUB 180-3.

У липні 2006 року з'явився стандарт RFC 4634 «Безпечні хеш-алгоритми США (SHA і HMAC-SHA)», що описує SHA-1 і сімейство SHA-2.

Агентство національної безпеки від імені держави випустило патент на SHA-2 під ліцензією Royalty Free.

3.6.2 Алгоритм SHA-2

Рис 3.18 Схема однієї ітерації алгоритмів SHA-2

Хеш-функції сімейства SHA-2 побудовані на основі структури Меркле - Дамгарда (англ.).

Вихідне повідомлення після додатки розбивається на блоки, кожен блок - на 8 слів. Алгоритм пропускає кожен блок повідомлення через цикл з 64-мя або 80-у ітерації (раундами). На кожній ітерації 2 слова з восьми перетворюються, функцію перетворення задають інші слова. Результати обробки кожного блоку складаються, сума є значенням хеш-функції. Алгоритм використовує наступні бітові операції:

? - конкатенація,

+ - Додавання,

and - бітових,

or - бітових АБО »,

xor - Виключне «АБО»,

shr - Логічний зсув вправо,

rotr - Циклічний зсув вправо.

У наступній таблиці 3.15 показані деякі технічні характеристики різних варіантів SHA-2. «Внутрішній стан» означає проміжну хеш-суму після обробки чергового блоку даних:

Таблиця 3.15

Хеш-функція

Довжина дайджесту повідомлення (біт)

Довжина внутрішнього стану (біт)

Довжина блоку (біт)

Максимальна

довжина повідомлення (біт)

Довжина слова (біт)

Кількість інтераций в циклі

SHA-256/224

256/224

256

512

264 ? 1

32

64

SHA-512/384

512/384

512

1024

2128 ? 1

64

80

3.6.3 Приклади SHA-2.

Нижче наведені приклади хешів SHA-2. Для всіх повідомлень мається на увазі використання кодування ASCII.

SHA-224 ("The quick brown fox jumps over the lazy dog")

= 730E109B D7A8A32B 1CB9D9A0 9AA2325D 2430587D DBC0C38B AD911525

SHA-256 ("The quick brown fox jumps over the lazy dog")

= D7A8FBB3 07D78094 69CA9ABC B0082E4F 8D5651E4 6D3CDB76 2D02D0BF 37C9E592

SHA-384 ("The quick brown fox jumps over the lazy dog")

= CA737F10 14A48F4C 0B6DD43C B177B0AF D9E51693 67544C49 4011E331 7DBF9A50

9CB1E5DC 1E85A941 BBEE3D7F 2AFBC9B1

SHA-512 ("The quick brown fox jumps over the lazy dog")

= 07E547D9 586F6A73 F73FBAC0 435ED769 51218FB7 D0C8D788 A309D785 436BBB64

2E93A252 A954F239 12547D1E 8A3B5ED6 E1BFD709 7821233F A0538F3D B854FEE6

Найменша зміна повідомлення в переважній більшості випадків призводить до зовсім іншому хешу внаслідок лавинного ефекту. Приміром, при зміні dog на cog вийде:

SHA-256 ("The quick brown fox jumps over the lazy cog")

= E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE

3.6.4 Криптоаналіз SHA-2

На 2008 рік хеш-функції SHA-2, на відміну від SHA-1, недостатньо вивчені. У 2003 році Гілберт і Хандшух провели дослідження SHA-2, але не знайшли будь-яких вразливостей.

Криптоаналіз хеш-функції має на увазі дослідження стійкості алгоритму по відношенню, щонайменше, до наступних видів атак:

· знаходження колізій, тобто різних повідомлень з однаковим хешем.

· знаходження прообразу, тобто невідомого повідомлення по його хешу.

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

У березні 2008 року індійські дослідники Сомітра Кумар Санада і Палаш Саркар опублікували знайдені ними колізії для 22 ітерацій SHA-256 і SHA-512. У вересні того ж року вони представили метод конструювання колізій для зрізаних варіантів SHA-2 (21 ітерація).

Зважаючи на алгоритмічної схожості SHA-2 з SHA-1 і наявності в останньої потенційних вразливостей ведуться пошуки поліпшених альтернатив. Новий стандарт буде названий SHA-3, він буде визначений конкурсом, проведеним Національним інститутом стандартів і технологій в 2008-2012 рр..

3.6.5 Застосування та сертифікація

SHA-224, SHA-256, SHA-384 і SHA-512 закону США допускаються до використання в деяких урядових програмах, включаючи використання в рамках інших криптографічних алгоритмів та протоколів, для захисту інформації, яка не має грифа секретності. Стандарт також допускає використання SHA-2 приватними і комерційними організаціями.

Хеш-функції SHA-2 використовуються для перевірки цілісності даних і в різних криптографічних схемах. На 2008 рік сімейство хеш-функцій SHA-2 не має такого широкого розповсюдження, як MD5 і SHA-1, незважаючи на виявлені в останніх недоліки.

Деякі приклади застосування SHA-2 зазначено в таблиці 3.16:

Таблиця 3.16

Область використання

Деталі

S/MIME

SHA-224, SHA-256, SHA-384 или SHA-512 дайджести повідомлень

OpenLDAP

SHA-256, SHA-384 или SHA-512 хеши паролів

DNSSEC

SHA-256 дайджести DNSKEY в протоколі DNSSEC

X.509

SHA-224, SHA-256, SHA-384 и SHA-512 використовуються для створення електронного цифрового підпису сертифікату

PGP

SHA-256, SHA-384, SHA-512 використовуються для створення електронного цифрового підпису

IPSec

Деякі реалізації підтримують SHA-256 в протоколах ESP и IKE

DSA

Сімейство SHA-2 використовується для створення електронного цифрового підпису

SHACAL-2

Блочний алгоритм шифрування SHACAL-2 побудований на основі хеш-функції SHA-256

Передача файлів

Для надійності передачі файлів по мережі іноді вказуються їх SHA-2 дайджести

Як показали дослідження, алгоритми SHA-2 працюють в 2-3 рази повільніше інших популярних хеш-алгоритмів MD5, SHA-1, Tiger і RIPEMD-160.

4. ОПИС ФУНКЦІОНАЛЬНИХ МОЖЛИВОСТЕЙ ТА ПРОГРАМНОЇ РЕАЛІЗАЦІЇ ПРОЕКТОВАНОЇ СИСТЕМИ

4.1 Функціональне призначення та технологічні особливості розробки

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

· IBM-сумісний комп'ютер, не нижче Pentium IІ, RAM-128Mb, SVGA-800*600*16bit;

· Вільний простір на жорсткому диску не менш 4 Мб.

Система повинна функціонувати під керуванням операційної системи Windows ХР, 7.

Розроблена система була протестована на 3 файлах малого, середнього та великого розміру.

4.2 Логіко-функціональна схема роботи системи

В загальному вигляді логіко-функціональну роботи системи можна представити наступним чином (рис. 4.1).

На рис. 4.1 представлена схема технологічного процесу виробництва.

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

Після кодування файлу систему можливо закрити.

Декодування файлу можливо проводити, як до аналізу властивостей алгоритмів кодування даних, так і після аналізу властивостей алгоритмів кодування даних.

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рис. 4.1 Логіко-функціональна схема роботи системи

На рис. 4.2 представлена логіко-функціональна схема кодування файлу.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рис. 4.2 Логіко-функціональна схема кодування файлу

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

На рис. 4.3 представлена логіко-функціональна схема декодування файлу.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рис. 4.3 Логіко-функціональна схема декодування файлу

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

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

На рис. 4.4 наведено загальний вид головної форми системи на етапі проектування. Для проектування інтерфейсу користувача системи використовувалися наступні компоненти: menuStrip (для відображення для відображення пунктів меню), progressBar(для відображення стану процесу кодування), OpenFileDialog (для реалізації діалогового вікна відкриття файлу), Командні компоненти Label (для відображення інформації на формі).

Рис. 4.4 Загальний вид головної форми системи на етапі проектування

Наведемо опис основних фрагментів програмного коду, що реалізує функції системи.

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

//якщо натиснута кнопка «ОК» у діалоговому вікні, то виконується кодування

if (openFileDialog1.ShowDialog()==DialogResult.OK)

{

//значеня для progressBar1 встановлюється в 1.

progressBar1.Value = 1;

//створюемо новий екземпляр класу tdes

tdes tdesf = new tdes();

//значеня для progressBar1 встановлюється в 2.

progressBar1.Value = 2;

//збереження теперішнього часу

tim = DateTime.Now;

//кодування файлу

tdesf.Encrypt(openFileDialog1.FileName, openFileDialog1.FileName + "tdes");

label7.Text = (DateTime.Now - tim).ToString();

//значеня для progressBar1 встановлюється в 3

progressBar1.Value = 3;

label6.Text = tdes.keysize.ToString();

//значеня для progressBar1 встановлюється в 4

progressBar1.Value = 4;

label8.Text = tdes.output.ToString();

progressBar1.Value = 5;

tdesf.Dispose();

//значеня для progressBar2 встановлюється в 1.

progressBar2.Value = 1;

des desf = new des();

//значеня для progressBar2 встановлюється в 2.

progressBar2.Value = 2;

tim = DateTime.Now;

//кодування файлу

desf.Encrypt(openFileDialog1.FileName, openFileDialog1.FileName + "des");

label10.Text = (DateTime.Now - tim).ToString();

//значеня для progressBar2 встановлюється в 3

progressBar2.Value = 3;

label9.Text = des.keysize.ToString();

//значеня для progressBar2 встановлюється в 4

progressBar2.Value = 4;

label11.Text = des.output.ToString();

progressBar2.Value = 5;

desf.Dispose();

//значеня для progressBar3 встановлюється в 1.

progressBar3.Value = 1;

rc2 rc2f = new rc2();

//значеня для progressBar3 встановлюється в 2.

progressBar3.Value = 2;

tim = DateTime.Now;

//кодування файлу

rc2f.Encrypt(openFileDialog1.FileName, openFileDialog1.FileName + "rc2");

label16.Text = (DateTime.Now - tim).ToString();

//значеня для progressBar3 встановлюється в 3

progressBar3.Value = 3;

label15.Text = rc2.keysize.ToString();

progressBar3.Value = 4;

label17.Text = rc2.output.ToString();

progressBar3.Value = 5;

rc2f.Dispose();

//значеня для progressBar4 встановлюється в 1.

progressBar4.Value = 1;

Rijnder rijf = new Rijnder();

//значеня для progressBar4 встановлюється в 2.

progressBar4.Value = 2;

tim = DateTime.Now;

//кодування файлу

rijf.Encrypt(openFileDialog1.FileName, openFileDialog1.FileName + "rij");

label22.Text = (DateTime.Now - tim).ToString();

//значеня для progressBar4 встановлюється в 3

progressBar4.Value = 3;

label21.Text = Rijnder.keysize.ToString();

progressBar4.Value = 4;

label23.Text = Rijnder.output.ToString();

progressBar4.Value = 5;

rijf.Dispose();

//значеня для progressBar5 встановлюється в 1.

progressBar5.Value = 1;

RIPEMD160 ripf = new RIPEMD160();

//значеня для progressBar5 встановлюється в 2.

progressBar5.Value = 2;

tim = DateTime.Now;

ripf.Hash(openFileDialog1.FileName, openFileDialog1.FileName + "rip");

label28.Text = (DateTime.Now - tim).ToString();

//значеня для progressBar5 встановлюється в 3

progressBar5.Value = 3;

label27.Text = RIPEMD160.keysize.ToString();

progressBar5.Value = 4;

label29.Text = RIPEMD160.output.ToString();

progressBar5.Value = 5;

ripf.Dispose();

//значеня для progressBar6 встановлюється в 1.

progressBar6.Value = 1;

SHA512 shaf = new SHA512();

//значеня для progressBar6 встановлюється в 2.

progressBar6.Value = 2;

tim = DateTime.Now;

shaf.Hash(openFileDialog1.FileName, openFileDialog1.FileName + "sha");

label34.Text = (DateTime.Now - tim).ToString();

//значеня для progressBar6 встановлюється в 3.

progressBar6.Value = 3;

label33.Text = SHA512.keysize.ToString();

progressBar6.Value = 4;

label35.Text = SHA512.output.ToString();

progressBar6.Value = 5;

shaf.Dispose();

}

Для кодування та декодування файлу алгоритмом TripleDES в системі був створений клас tdes.

Основні функції якого приведенні нижче.

Функція для тестового кодування.

public void Encrypt(String inName, String outName)

{

//сворення файлового потоку для відкриття файлу

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

//сворення файлового потоку для запису файлу

FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

fout.SetLength(0);

byte[] bin = new byte[100];

long rdlen = 0;

long totlen = fin.Length;

int len;

TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();

CryptoStream encStream = new CryptoStream(fout, tdes.CreateEncryptor(), CryptoStreamMode.Write);

keysize = tdes.KeySize;

while (rdlen < totlen)

{

len = fin.Read(bin, 0, 100);

//кодування потоку

encStream.Write(bin, 0, len);

rdlen = rdlen + len;

}

output = fout.Length + tdes.Key.Length + tdes.IV.Length;

encStream.Close();

}

Функція для декодування.

private static void DecryptData(String inName, String outName, String tdesKey, String tdesIV)

{

byte[] key, IV;

//Створення файлових потоків для вхідного та вихідного файлів.

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

FileStream fkey = new FileStream(tdesKey, FileMode.Open, FileAccess.Read);

FileStream fIV = new FileStream(tdesIV, FileMode.Open, FileAccess.Read);

FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

fout.SetLength(0);

key = new byte[fkey.Length];

IV = new byte[fIV.Length];

fkey.Read(key,0,(int)fkey.Length);

fIV.Read(IV, 0, (int)fIV.Length);

//Створення переміних для кодування.

byte[] bin = new byte[100];

long rdlen = 0; //Загальна кількість байт прочитано.

long totlen = fin.Length; //Довжина файлу.

int len;

TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();

CryptoStream encStream = new CryptoStream(fout, tdes.CreateDecryptor(key, IV), CryptoStreamMode.Write);

keysize = tdes.KeySize;

while (rdlen < totlen)

{

len = fin.Read(bin, 0, 100);

encStream.Write(bin, 0, len);

rdlen = rdlen + len;

}

encStream.Close();

}

Для кодування та декодування файлу алгоритмом DES в системі був створений клас des.

Основні функції якого приведенні нижче.

Функція для тестового кодування.

public void Encrypt(String inName, String outName)

{

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

fout.SetLength(0);

byte[] bin = new byte[100];

long rdlen = 0;

long totlen = fin.Length;

int len;

DESCryptoServiceProvider des = new DESCryptoServiceProvider();

CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(), CryptoStreamMode.Write);

keysize = des.KeySize;

while (rdlen < totlen)

{

len = fin.Read(bin, 0, 100);

encStream.Write(bin, 0, len);

rdlen = rdlen + len;

}

output = fout.Length + des.Key.Length + des.IV.Length;

encStream.Close();

}

Функція для декодування.

private static void DecryptData(String inName, String outName, String desKey, String desIV)

{

byte[] key, IV;

//Create the file streams to handle the input and output files.

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

FileStream fkey = new FileStream(desKey, FileMode.Open, FileAccess.Read);

FileStream fIV = new FileStream(desIV, FileMode.Open, FileAccess.Read);

FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

fout.SetLength(0);

key = new byte[fkey.Length];

IV = new byte[fIV.Length];

fkey.Read(key,0,(int)fkey.Length);

fIV.Read(IV, 0, (int)fIV.Length);

byte[] bin = new byte[100];

long rdlen = 0;

long totlen = fin.Length;

int len;

DESCryptoServiceProvider des = new DESCryptoServiceProvider();

CryptoStream encStream = new CryptoStream(fout, des.CreateDecryptor(key, IV), CryptoStreamMode.Write);

keysize = des.KeySize;

while (rdlen < totlen)

{

len = fin.Read(bin, 0, 100);

encStream.Write(bin, 0, len);

rdlen = rdlen + len;

}

encStream.Close();

}

Для кодування та декодування файлу алгоритмом RC2 в системі був створений клас rc2.

Основні функції якого приведенні нижче.

Функція для тестового кодування.

public void Encrypt(String inName, String outName)

{

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

fout.SetLength(0);

byte[] bin = new byte[100];

long rdlen = 0;

long totlen = fin.Length;

int len;

RC2CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();

CryptoStream encStream = new CryptoStream(fout, rc2.CreateEncryptor(), CryptoStreamMode.Write);

keysize = rc2.KeySize;

while (rdlen < totlen)

{

len = fin.Read(bin, 0, 100);

encStream.Write(bin, 0, len);

rdlen = rdlen + len;

}

output = fout.Length + rc2.Key.Length + rc2.IV.Length;

encStream.Close();

}

Функція для декодування.

private static void DecryptData(String inName, String outName, String desKey, String desIV)

{

byte[] key, IV;

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

FileStream fkey = new FileStream(desKey, FileMode.Open, FileAccess.Read);

FileStream fIV = new FileStream(desIV, FileMode.Open, FileAccess.Read);

FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

fout.SetLength(0);

key = new byte[fkey.Length];

IV = new byte[fIV.Length];

fkey.Read(key, 0, (int)fkey.Length);

fIV.Read(IV, 0, (int)fIV.Length);

byte[] bin = new byte[100];

long rdlen = 0;

long totlen = fin.Length;

int len;

RC2CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();

CryptoStream encStream = new CryptoStream(fout, rc2.CreateDecryptor(key, IV), CryptoStreamMode.Write);

keysize = rc2.KeySize;

while (rdlen < totlen)

{

len = fin.Read(bin, 0, 100);

encStream.Write(bin, 0, len);

rdlen = rdlen + len;

}

encStream.Close();

}

Для кодування та декодування файлу алгоритмом Rijndeal в системі був створений клас rijndeal.

Основні функції якого приведенні нижче.

Функція для тестового кодування.

public void Encrypt(String inName, String outName)

{

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

fout.SetLength(0);

byte[] bin = new byte[100];

long rdlen = 0;

long totlen = fin.Length;

int len;

RijndaelManaged rij = new RijndaelManaged();

CryptoStream encStream = new CryptoStream(fout, rij.CreateEncryptor(), CryptoStreamMode.Write);

keysize = rij.KeySize;

while (rdlen < totlen)

{

len = fin.Read(bin, 0, 100);

encStream.Write(bin, 0, len);

rdlen = rdlen + len;

}

output = fout.Length + rij.Key.Length + rij.IV.Length;

encStream.Close();

}

Функція для декодування.

private static void DecryptData(String inName, String outName, String desKey, String desIV)

{

byte[] key, IV;

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

FileStream fkey = new FileStream(desKey, FileMode.Open, FileAccess.Read);

FileStream fIV = new FileStream(desIV, FileMode.Open, FileAccess.Read);

FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

fout.SetLength(0);

key = new byte[fkey.Length];

IV = new byte[fIV.Length];

fkey.Read(key, 0, (int)fkey.Length);

fIV.Read(IV, 0, (int)fIV.Length);

byte[] bin = new byte[100];

long rdlen = 0

long totlen = fin.Length;

int len;

RijndaelManaged reij = new RijndaelManaged();

CryptoStream encStream = new CryptoStream(fout, reij.CreateDecryptor(key, IV), CryptoStreamMode.Write);

keysize = reij.KeySize;

while (rdlen < totlen)

{

len = fin.Read(bin, 0, 100);

encStream.Write(bin, 0, len);

rdlen = rdlen + len;

}

encStream.Close();

}

Для хешування та перевірки хеш коду файлу алгоритмом sha512 в системі був створений клас sha512.

Основні функції якого приведенні нижче.

Функція для створення хеш коду.

public void Hash(string inName, string outName)

{

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

fout.SetLength(0);

byte[] hashValue;

SHA512CryptoServiceProvider sha = new SHA512CryptoServiceProvider();

hashValue = sha.ComputeHash(fin);

keysize = sha.HashSize;

fout.Write(hashValue, 0, hashValue.Length);

output = fout.Length + fin.Length;

fout.Close();

fin.Close();

}

Функція перевірки хеш коду.

public string Chek(string inName, string outName)

{

string s = string.Empty;

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

FileStream fout = new FileStream(outName, FileMode.Open, FileAccess.Read);

byte[] hashValue;

byte[] hashValue1 = new byte[fout.Length];

SHA512CryptoServiceProvider sha = new SHA512CryptoServiceProvider();

hashValue = sha.ComputeHash(fin);

fout.Read(hashValue1, 0, (int)fout.Length);

fout.Close();

fin.Close();

foreach (var i in hashValue.Except(hashValue1))

{

s = "Не идентичные";

}

if (s == string.Empty) { s = "Идентичные"; }

return s;

}

Для хешування та перевірки хеш коду файлу алгоритмом Ripemd160 в системі був створений клас Ripemd160.

Основні функції якого приведенні нижче.

Функція для створення хеш коду.

public void Hash(string inName,string outName)

{

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

fout.SetLength(0);

byte[] hashValue;

RIPEMD160Managed rip = new RIPEMD160Managed();

hashValue = rip.ComputeHash(fin);

keysize = rip.HashSize;

fout.Write(hashValue,0,hashValue.Length);

output = fout.Length + fin.Length;

fout.Close();

fin.Close();

}

Функція перевірки хеш коду.

public string Chek(string inName, string outName)

{

string s=string.Empty;

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

FileStream fout = new FileStream(outName, FileMode.Open, FileAccess.Read);

byte[] hashValue;

byte[] hashValue1 = new byte[fout.Length];

RIPEMD160Managed rip = new RIPEMD160Managed();

hashValue = rip.ComputeHash(fin);

fout.Read(hashValue1, 0, (int)fout.Length);

fout.Close();

fin.Close();

foreach (var i in hashValue.Except(hashValue1))

{

s = "Не идентичные";

}

if (s == string.Empty) { s = "Идентичные"; }

return s;

}

4.4 Опис інтерфейсу користувача

Загальний вигляд головного вікна системи в одному з робочих режимів наведений на рис. 4.5.

Рис. 4.5 Головне вікно системи в одному з робочих режимів

Після того, як ми натиснемо на підпункт «Закодувати», буде відкрите діалогове вікно обирання файлу для тесту алгоритмів.

Загальний вигляд вікна «TripleDES» системи в одному з робочих режимів наведений на рис. 4.6.

Рис. 4.6 Загальний вигляд вікна «TripleDES» системи в одному з робочих режимів

Загальний вигляд вікна «DSE» системи в одному з робочих режимів наведений на рис. 4.7.

Рис. 4.7 Загальний вигляд вікна «DSE» системи в одному з робочих режимів

Загальний вигляд вікна «RC2» системи в одному з робочих режимів наведений на рис. 4.8.

Рис. 4.8 Загальний вигляд вікна «RC2» системи в одному з робочих режимів

Поки не буде вибрані ключ та вектор користувач не зможе натиснути на кнопки «Закодувати файл» та «Розкодувати файл».

Загальний вигляд вікна «Rijndeal» системи в одному з робочих режимів наведений на рис. 4.9.

Рис. 4.9 Загальний вигляд вікна «Rijndeal» системи в одному з робочих режимів

Загальний вигляд вікна «SHA512» системи в одному з робочих режимів наведений на рис. 4.10.

Рис. 4.10 Загальний вигляд вікна «SHA512» системи в одному з робочих режимів

Загальний вигляд вікна «RIPEMD160» системи в одному з робочих режимів наведений на рис. 4.11.

Рис. 4.11 Загальний вигляд вікна «RIPEMD160» системи в одному з робочих режимів

5. ЕКОНОМІЧНЕ ОБҐРУНТУВАННЯ ДОЦІЛЬНОСТІ РОЗРОБКИ ПРОГРАМНОГО ПРОДУКТУ

5.1 Організаційно-економічна частина

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

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

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

5.2 Розрахунок економічного ефекту по впровадженню програмного продукту.

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

Таблиця. 5.1

Витрати на витратні матеріали

п/п

Найменування матеріалу

Витрата

шт.

Ціна

грн./шт.

Сума

грн.

1

Допоміжна література

1

48

48

Разом 48

IBM-сумісний комп'ютер Pentium IІІ, RAM-256Mb, SVGA-800*600*16bit;

Амортизація розраховується лінійним способом, в розрахунку від строку експлуатації, наприклад 3 роки.

2000:3=667грн. у рік.

Таблиця. 5.2

Основна заробітна платня програміста ПП

п/п

Виконавці

Трудомісткість, чел.дн.

Оклад, грн.

Витрати по з/п, грн.

1

Програміст

5

1000

238,09

Додаткова заробітна платня програміста складає 20 % від основної заробітної платні:

238,09*0,20=47,61грн

Фонд заробітної платні є сумою основної і додаткової заробітної платні:

238,09+47,61=285,70 грн

Нарахування на ФОП:

1. Безробіття 1,6%

2. Пенсійний фонд 33,2%

3. Соцзабезпечення тимчасової непрацездатності 1,4%

4. Соцзабезпечення від нещасних випадків 1%

Підсумок: 37,2%

Відрахування на соціальні нужди складають 37,2 % від фонду оплати праці:

285,70*0,372=106,28 грн

Накладні витрати складають 250 % від величини основної заробітної платні:

238,09*2,5=595,22 грн

Таблиця. 5.3

Калькуляція

п/п

Найменування статей витрат

Витрати, грн.

1

Витратні матеріали

45

3

Основна заробітна платня програміста

238,09

4

Додаткова заробітна платня програміста

47,61

5

Відрахування на соціальне страхування

106,28

6

Накладні витрати

395,22

Разом витрат Зк= 832,2

Витрати на ручну обробку інформації визначаються по формулі:

,

де - об'єм інформації, оброблюваної уручну, Мбайт;

- вартість однієї години роботи, грн./год.;

- коефіцієнт, що враховує додаткові витрати часу на логічні операції при ручній обробці інформації;

- норма вироблення, Мбайт/ година.

В даному випадку:

Оі = 10 Мбайт (загальний розмір оброблювальних даних),

Заробітна платня 900грн.

Ц=900/22/8=5,11 грн./ година,

Гд = 2.5 (встановлений експериментально),

Нв = 0.004 Мбайт / година.

Отже, витрати на ручну обробку інформації будуть рівні:

Зр=10*5,11*2,5/0,004=31937,50 грн.

Витрати на автоматизовану обробку інформації розраховуються по наступній формулі:

,

де - час автоматичної обробки, годин;

- вартість однієї години машинного часу, грн./година;

- час роботи оператора, годин;

- вартість однієї години роботи оператора, грн./година.

Для нашого випадку:

ta = 1922 годин,

Номінальний фонд робочого часу розраховується по формулі :

k1

F n = к ( 1 - -------------- )

100%

к - кількість відпрацьованих годин за рік;

к1 - внутрішні втрати робочого часу, 1- 2% (пільгові години, перерви і т. п ).

К = д * р * м

д - середня кількість робочих днів в місяці = 22;

р - тривалість робочого дня = 8;

м - кількість робочих місяців в році = 12;

К = 22 * 8 * 12 = 2112

8 + 1

Fn = 2112 ( 1 - ------------ ) = 1922год.

100%

Час роботи оператора = 1922 годин в рік

Вартість однієї години машинного часу дорівнює:

Цм = Цэ*Р

Це - вартість 1кВт електроенергії ;

Р - споживана потужність комп'ютера за годину 160Вт

Вартість 1 кВт електроенергії для підприємства 24,35 копійок або 0,2435грн.

Цм=160*0,24=38.4грн/год.

t0 = 1922 ч.,

Ц0 =900/ 22/ 8=5,11 грн. (заробітна платня 900грн)

Отже, витрати на автоматизовану обробку інформації будуть рівні:

За=1922*0,02+1922*(5,11+0,02)=9879,08 грн.

Таким чином, річна економія від упровадження рівна:

Еу = 24812,50 - 9879,08 - 2444,29= 12489,13грн.

Економічний ефект від використовування програмного забезпечення за рік визначається по формулі, грн.:

.

Ег=12489,13 - 4500*0,2=11589,13грн.

Ефективність розробки може бути оцінена за формулі:

.

Ер=11589,13 *0,4/2444,29=1,896

Оскільки Ер > 0.20, наша розробка є економічно доцільною.

Вартісна оцінка результатів застосування програмного забезпечення за розрахунковий період Т визначається по формулі:

,

де Т - розрахунковий період;

Рt - вартісна оцінка результатів t розрахункового періоду, грн.;

- дисконтуюча функція, яка вводиться з метою приведення всіх витрат і результатів до одного моменту часу.

Дисконтуюча функція має вигляд:

= 1 / (1 + р) t,

де р - коефіцієнт дисконтування (р = Ен = 0.2, Ен - нормативний коефіцієнт ефективності капітальних вкладень).

Таким чином,

.

Якщо програмне забезпечення замінює ручну працю, отже, набір корисних результатів у принципі не змінюється. Як оцінка результатів застосування програмного забезпечення в рік береться різниця (економія) витрат, що виникає в результаті використовування програмного забезпечення, тобто Рt = Еу.

Передбачається, що даний розробка без змін і доробок використовуватиметься в перебігу п'яти років. Тоді вартісна оцінка результатів застосування програмного забезпечення (економія) за розрахунковий період Т = 5 років складе:

=11589,13+9657,6+8048+6706,672+5588,89=41590,292 грн.

6. ОХОРОНА ПРАЦІ

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

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

Законодавство України про охорону праці базується на:

- Конституція України, яка гарантує права громадян на працю, відпочинок, охорону здоров'я, медичну допомогу і страхування;

- Закон України „Про охорону праці”, де вказано, що державна політика в області охорони праці базується на пріоритеті життя і здоров'я людей в умовах їх трудової діяльності. Відповідальність за створення нормальних і безпечних умов труда несе роботодавець незалежно від форми власності підприємства чи установи які здійснюють розробку виробництва та застосування ПЕОМ і ПК;

- Норми штучного та природного освітлення визначені СНіП;

- Закон України „Про забезпечення санітарного та епідемічного благополуччя населення” де вказані основні вимоги гігієни та санітарії;

- Параметри мікроклімату на робочих місцях регламентовані Держстандартом і ДСН;

- Категорія робіт по величині загальних енергозатрат встановлена ДСН;

- Закон України „Про загальнообов'язкове державне соціальне страхування від нещасного випадку на виробництві та професійного захворювання, які спричинили втрату працездатності”, який гарантує право трудящих на соціальний захист і компенсацію постраждалим матеріальних втрат при травмуванні і професійного захворювання;

- Кодекс законів про працю (КЗпП) де викладені окремі вимоги охорони праці;

- Пожежна безпека викладена в законі України „Про пожежну безпеку” і „Правила про пожежну безпеку в Україні”


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

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