Розробка загальної схеми роботи програми
Кожний програмний засіб є зручний тоді коли розроблений зрозумілий інтерфейс. Передбачається, що інтерфейс програми не буде перевантажений зайвими елементами керування. Після запуску програми, відразу ж з’являється головне вікно програми, в якому є 4 кнопки та 4 поля для файлів. Для початку треба обрати файл натиснути кнопку «Відкрити файл», тобто текст, який треба підписати. Потім натиснути… Читати ще >
Розробка загальної схеми роботи програми (реферат, курсова, диплом, контрольна)
Кожний програмний засіб є зручний тоді коли розроблений зрозумілий інтерфейс. Передбачається, що інтерфейс програми не буде перевантажений зайвими елементами керування. Після запуску програми, відразу ж з’являється головне вікно програми, в якому є 4 кнопки та 4 поля для файлів. Для початку треба обрати файл натиснути кнопку «Відкрити файл», тобто текст, який треба підписати. Потім натиснути кнопку «Підписати», для того щоб згенерувалось хеш-функція і цифровий підпис. Потім при перевірці тексту, якщо текст не був модифікований при натисканні кнопки «Перевірити» відобразиться вікно з повідомленням про те, що текст відповідає цифровому підпису, в противному випадку з’явиться вікно з помилкою про те, що текст не відповідає цифровому підпису.
Рисунок 1. Вигляд головного вікна програми При натисканні кнопки «Зберегти», в окремому документі збережеться хеш-значення і сам ЕЦП підписаного документу, в тій дерикторії де відкривався файл. При натисканні кнопки «Підписати», без вибору документу, з’явиться вікно з помилкою про те, що треба заповнити поле текст. Також при натисканні кнопки «Перевірити» з’явиться вікно з текстом про те, що треба підписати текст цифровим підписом. Загальна схема функціонування програмного засобу показана на рисунку 2.
Рисунок 2. Загальна схема функціонування програми Як бачимо на схемі присутні декілька блоків, які потребують детального розгляду. Для початку буде розглянуто загальний алгоритм роботи DSA.
Загальний алгоритм роботи DSA.
Оскільки було обрано алгоритм шифрування DSA, який являється більш стійким далі буде розкрита суть алгоритму. Алгоритм DSA (Digital Signature Algorithm) — алгоритм з використанням відкритого ключа для створення електронного підпису. Для побудови системи цифрового підпису потрібно виконати наступні кроки:
Крок 1. Вибір криптографічної хеш-функції H (x).
Важливою характеристикою цієї функції є бітова довжина вихідної послідовності, що позначається далі N (160 для функції SHA-1). У першій версії стандарту DSS рекомендована функція SHA-1 і, відповідно, бітова довжина підписуваного числа 160 біт.
Крок 2. Вибір великого простого числа q, розмірність якого N в бітах співпадає з розмірністю в бітах значень хеш-функції H (x).
Крок 3. Вибір простого числа p, такого, що (p-1) ділиться на q. Бітова довжина p позначається L ().
Крок 4. Вибір числа g такого, що його мультипликативний порядок по модулю p рівний q. Для його обчислення можна скористатися формулою.
g=,.
де h — деяке довільне число, h? (1; p-1) таке, що g?1. В більшості випадків значення h = 2 задовольняє цій вимозі.
Відкритий і секретний ключі:
Секретний ключ є числом x? (0,q).
Відкритий ключ обчислюється за формулою.
y=modp.
Відкритими параметрами є числа (p, q, g, у). Закритий параметр тільки один — число x. При цьому числа (p, q, g) можуть бути загальними для групи користувачів, а числа x і у є відповідно закритим і відкритим ключами конкретного користувача. При підписанні повідомлення використовуються секретні числа x і к, причому число к повинно вибиратися випадковим чином (на практиці псевдовипадковим) при підписці кожного наступного повідомлення. Оскільки (p, q, g) можуть бути використані для декількох користувачів, на практиці часто ділять користувачів по деяких критеріях на групи з однаковими (p, q, g). Тому ці параметри називають доменними параметрами (Domain Parameters).
Підпис повідомлення виконується по наступному алгоритму:
1) Вибір випадкового числа k? (0,q).
2) Обчислення r = (modp) modq.
- 3) Обчислення s = .
- 4) Вибір іншого до, якщо виявилось, що r=0 або s=0.
Підписом є пара чисел (r, s), загальна довжина підпису 2*N.
Перевірка підпису виконується по алгоритму:
- 1) Обчислення w = modq.
- 2) Обчислення u1 = H (m) * w.
- 3) Обчислення u2 = r * wmodq.
- 4) Обчислення v = (((g)u1 ®u2) modp) modq.
Схематичне представлення алгоритму представлене на рисунку 3.
Рисунок 3. Генерація ЕЦП Перевірка ЕЦП Оскільки розглянуто загальний алгоритм роботи DSA, наступним кроком буде розкрита суть кожного блоку загальної схеми функціонування програми.
Використання DSA для отримання хеш-значення.
Першим блоком є генерування хеш-функції та ЕЦП. Алгоритм SHA (Secure Hash Algorithm-1) — це алгоритм криптографічного хешування. Для вхідного повідомлення довільної довжини (максимум -1 біт, що приблизно дорівнює 2 екса-байта) алгоритм генерує 160-бітове хеш-значення, зване також дайджестом повідомлення. Використовується в багатьох криптографічних додатках і протоколах. SHA-1 реалізує хеш-функцію, побудовану на ідеї функції стиснення. Входами функції стиснення є блок повідомлення довжиною 512 біт і вихід попереднього блоку повідомлення. Вихід є значення всіх хеш-блоків до цього моменту. Іншими словами хеш блоку Mi дорівнює hi = f (Mi, hi-1). Хеш-значенням всього повідомлення є вихід останнього блоку.
Ініціалізація алгоритму SHA-1 реалізується наступним чином. Оригінал тексту розбивається на блоки по 512 біт в кожному (рис. 4). Останній блок доповнюється до довжини, кратної 512 біт. Спочатку додається 1 (біт), а потім нулі, щоб довжина блоку стала рівною (512 — 64 = 448) біт.
Рисунок 4. Одна ітерація алгоритму SHA-1.
В останні 64 біта записується довжина вихідного повідомлення в бітах (в little-endian форматі). Якщо останній блок має довжину понад 448, але менше 512 біт, то додаток виконується в такий спосіб: спочатку додається 1 (біт), потім нулі аж до кінця 512-бітного блоку; після цього створюється ще один 512-бітний блок, який заповнюється аж до 448 біт нулями, після чого в що залишилися 64 біта записується довжина вихідного повідомлення в бітах (в little-endian форматі). Доповнення останнього блоку здійснюється завжди, навіть якщо повідомлення вже має потрібну довжину. У програмі хеш-функція SHA-1 реалізується за допомогою готового класу визначення хеш-функції SHA1CryptoServiceProvider таким чином, повний код програми представлений в додатку Б:
SHA1Crypto Service Provider SHA1 alg = new SHA1 Crypto Service Provider (); //Обчислює значення хешу.
//System.Security.Cryptography.SHA1 для вхідних даних.
//за допомогою реалізації, представленим постачальником.
// служб шифрування.
Hashed Data = SHA1alg. Compute Hash (data To Sign);
//Обчислює хеш-значення для заданого масиву байтів.
String Builders Builder = new String Builder ();
//Представляє змінний рядок символом Таким чином і реалізується отримання хеш-значення. Наступним буде отримання ЕЦП та реалізація його в програмному засобу.
Отримання електронно-цифрового підпису.
Реалізація в коді програми ЕЦПвиконується наступним чином. Алгоритм DSA використовується однією стороною для генерації підпису даних, на інший для перевірки справжності особи, яка підписує. Підпис генерується за допомогою закритого ключа. Будь-яка сторона може перевірити справжність цифрового підпису за допомогою відкритого ключа. Відкритий ключ посилається разом з підписаними даними. Відкритий і закритий ключі не збігаються. При генерації підпису для отримання стислої версії даних використовується хеш-функція. Отримані дані обробляються за допомогою DSA для отримання цифрового підпису. Для перевірки підпису використовується та ж хеш-функція. Підписання даних представлено на рисунку 5.
Рисунок 5. Підписання даних.
DSA використовує параметри, які описані вище: цілі p, q і g можуть бути відкритими і можуть бути загальними для групи людей. x і y є закритим і відкритим ключами, відповідно. Параметри x і k використовуються тільки для генерації підпису та повинні триматися в секреті. Параметр k різний для кожного підпису. Підписом повідомлення M є пара чисел r і s, SHA (M) — 160-бітна бінарна рядок.
Якщо r = 0 або s = 0, має бути створене нове k і обчислений новий підпис.
Якщо підпис обчислився правильно, ймовірність того, що r = 0 або s = 0 дуже мала. Підпис разом з повідомленням пересилається одержувачу.
У програмі генерування ЕЦП виглядає таким чином:
DSA Crypto Service Provider DSA alg = new DSA Crypto Service Provider ();
string OID = Crypto Config. Map Name To OID («SHA1»);
signed Data = DSA alg. Sign Hash (hashed Data, OID);
String Builder sBuilder1 = new String Builder ();
Тобто, існує спеціальний клас для створення ЕЦП алгоритмом DSA, який звертається до функції хешування, що була реалізована раніше та генерує ЕЦП, тобто послідовність знаків Юнікоду. Sign Hash — обраховує підпис для заданого хеш-значення шляхом зашифрування його за допомогою закритого ключа.
Перевірка початкового документу з отриманим.
Наступним процесом є порівняння початкового документу з отриманим. Числа p, q, q і відкритий ключ знаходяться у відкритому доступі. Нехай M', r' і s' - отримані версії M, r і s відповідно, і нехай y — відкритий ключ. При перевірці підпису спочатку потрібно подивитися, чи виконуються наступні нерівності:
0 < r' < s'
Якщо хоча б одну нерівність не виконано, підпис повинний бути відкинутий. Якщо умови нерівностей виконані, виконуються такі обчислення:
w = modq
u1 = ((SHA (M')w) mod q)
u2 = ((r')w) modq
v = (((g)u1 ®u2) modp) modq.
Якщо v = r', то справжність підпису підтверджена. Якщо v? r', то повідомлення могло бути змінено, повідомлення могло бути неправильно підписано або повідомлення могло бути підписано шахраєм. В цьому випадку отримані дані слід розглядати як пошкоджені. Перевірка даних представлена на рисунку 6.
Рисунок 6. Перевірка даних У програмі реалізація перевірки модифікації тексту реалізується наступним чином:
SHA1Crypto Service Provider SHA1 alg = new SHA1Crypto Service Provider ();
Byte [] hashed Data New = SHA1alg. ComputeHash (data To Sign);
DSA Crypto Service Provider DSA alg = New DSA Crypto Service Provider ();
string OID = Crypto Config. Map Name To OID («SHA1»);
signed Data = DSA alg. Sign Hash (hashed Data New, OID);
if (DSA alg. Verify Signature (hashed Data, signed Data))
У перших двох рядках вираховується хеш-значення для заданого масива байтів. У наступних двох рядках відбувається обрахування підпису для заданого хеш-значення шляхом зашифрування його за допомогою закритого ключа. А сама функція Verify Signature (hashed Data, signed Data) з двома даними хеш-значення і підпису безпосередньо перевіряє підпис для вказаних даних.
Реалізація зчитування тексту з файлу та збереження SHAта ЕЦП.
Для початку роботи з програмою необхідно відкрити файл для виконання читання та внесення в нього змін або ввести інформацію вручну в текстове поле. Приклад зчитування тексту з файлу:
Stream Reader filearray = New Stream Reader (openFileDialog1.FileName,
Encoding. Get Encoding («windows-1251»));
a.stringarray = filearray. Read To End ().Split (a.razdelitel);
Отже, тепер є можливість виконувати будь-які модифікації з текстом, після того як він відкрився у текстовому полі. Правильним є вибір підписати текст. Наступний блок, реалізація збереження безпосередньо самого SHAта ЕЦП. Для того щоб в майбутньому перевірити чи був модифікований початковий документ чи ні. Приклад збереження SHAта ЕЦП в окремому документі:
saveFile Dialog1. Filter = «Текстовый документ (*.txt)|*.txt|Все файлы (*.*)|*.*» ;
Filter — повертає або задає поточний рядок фільтру імен файлів, яка визначає варіанти, доступні в полі «Сохранить как тип файлов» або «Файлы типа» діалогового вікна. Таким чином виконується відкриття, підписання, збереження та перевірка файлу програми.
В даному розділі здійснювалась розробка програмного засобу, шляхом накладання електронно-цифрового підпису на текстовий документ. В результаті компілювання і налагодження програмного засобу отримано виконуваний файл Kursova_ZPZ.exe. Необхідно перевірити коректність його роботи і ефективність захисту за допомогою електронно-цифрового підпису, тому тепер можна приступити до тестування програмного засобу, на скільки правильно працює програма.