Проектування засобів захисту інформації в комп’ютерних мережах

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Інші

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА” Лабораторна робота №2 Проектування засобів захисту інформації в комп’ютерних мережах «Формування цифрового підпису згідно стандарту DSS» Львів – 2015 Мета роботи: реалізувати програму формування цифрового підпису вхідного повідомлення згідно стандарту DSS. Теоретичні відомості Стандарт цифрового підпису DSS Національний інститут стандартів і технологій США (NIST) розробив федеральний стандарт цифрового підпису DSS (Digital Signature Standard). Для утворення цифрового підпису використовується алгоритм DSA (Digital Signature Algorithm). В якості хеш–алгоритму стандарт передбачає використання алгоритму SHA–1 (Secure Hash Algorithm). Запропонований алгоритм DSA, має, як і RSA, теоретико-числовий характер і використовує криптографічну ситему Ель-Гамаля та К. Шнорра. Його надійність базується на практичній нерозв' язаності визначеного часткового випадку задачі обчислення дискретного логарифму. Сучасні методи розв’язку цієї задачі мають приблизно таку саму ефективність, що і методи вирішення задачі факторизації. В зв’язку з цим пропонується використовувати ключі довжиною від 512 до 1024 біт з тими характеристиками, що і в системі RSA. Довжина підпису в системі DSA меньша, ніж в RSA, і складає 320 розрядів. Відмінності підходів стандарту DSS та алгоритму RSA DSS використовує алгоритм, який розроблявся для використання тільки в якості цифрового підпису. На відміну від RSA даний алгоритм не можна використати для шифрування або обміну ключами. Тим не менше, це технологія з відкритим ключом. Розглянемо відмінності підходів утворення цифрових підписів в стандарті DSS та в алгоритмі RSA.  Рис.1. Формування та перевірка підпису за допомогою алгоритму RSA.  Рис.2. Формування та перевірка підпису за допомогою стандарту DSS. У випадку застосування алгоритму RSA підписане повідомлення подається на вхід сильної хеш – функції, яка утворює хеш – код фіксованої довжини. Для формування підпису хеш-код шифрується за допомогою закритого ключа відправника. Потім повідомлення і підпис пересилаються отримувачу. Отримувач обчислює хеш – код повідомлення і перевіряє підпис, використовуючи відкритий ключ відправника. Якщо обчислений хеш – код дорівнює дешифрованому підпису, то це означає, що підпис коректний. У випадку застосування стандарту DSS також використовується сильна хеш-функція. Хеш – код є входом функції підпису разом з випадковим числом , згенерованим для цього конкретного підпису. Функція підпису також залежить від закритого ключа відправника  і множини параметрів, відомих всім учасникам. Можна сказати, що ця множина складається з глобального відкритого ключа . Результатом є підпис, який складається з двох компонент  і . Для перевірки підпису отримувач також обчислює хеш-код отриманого повідомлення. Цей хеш-код разом з підписом є вхідними данимим для функції верифікації. Функція верифікації залежить від глобального відкритого ключа  та від відкритого ключа відправника . Виходом функції верифікації є значення, яке дорівнює компоненті , якщо підпис коректний. Функція підпису така, що тільки відправник, який знає закритий ключ може створити коректний підпис. Виконання роботи Для реалізації заданого алгоритму було обрано мову програмування C# і середовище Visual Studio 2008 Express Edition. Текст програми для реалізації наведено нижче. Вміст файлу Program.cs: namespace DigitalSignature { static class SimpleNumber { public static ulong QuickPow(ulong x, ulong y) { ulong result = 1; while ((y > 0) && (x > 0)) { if ((y & 1) == 1) result *= x; x *= x; y >>= 1; } return result; } public static ulong longSqrt(ulong x) { ulong approx = x / 2, result = 0; while (true) { result = (approx + (x / approx)) / 2; if ((((result * result) <= (x + 1000)) && ((result * result) >= (x - 1000))) || (result == approx)) break; approx = result; } return result; } public static ulong findSimpleNumber() { const ulong L = 755; ulong first, last, result = 0, k, period, sqrtL; bool isSimple; first = QuickPow(2, L - 1); last = QuickPow(2, L); period = last - first; result = first; sqrtL = longSqrt(last); while (period != 0) { isSimple = true; for (k = 2; k < sqrtL; k++) { if ((result % k) == 0) { isSimple = false; break; } } if (isSimple) return result; --period; ++result; } return 0; } public static ulong findSimpleDivider(ulong p) { ulong newP = p - 1, result, k, sqrtL, bound; bool isSimple; result = newP - QuickPow(2, 160); sqrtL = longSqrt(result); bound = QuickPow(2, 159); while (result > bound) { isSimple = true; if ((newP % result) > 0) { for (k = 2; k < sqrtL; k++) { if ((result % k) == 0) { isSimple = false; break; } } if (isSimple) return result; } --result; } return 0; } public static ulong findG(ulong p,ulong q) { ulong g, h, pow = (p - 1) / q; h = 1 + longSqrt(p - 1); g = QuickPow(h, pow) % q; return g; } public static ulong createSecretKey(ulong q) { uint temp = 0; ulong x = 0; Random rnd = new Random(); temp = (uint)rnd.Next(99999); return x = q - temp; } public static ulong createPublicKey(ulong g, ulong p, ulong x) { ulong pow, y; pow = SimpleNumber.QuickPow(g, x); return y = pow % p; } } static class DigitSignature { public static ulong createK(ulong q) { uint temp = 0; ulong k = 0; Random rnd = new Random(); temp = (uint)rnd.Next(99999); return k = q - temp; } public static ulong createR(ulong g, ulong p, ulong q, ulong k) { ulong pow, r; pow = SimpleNumber.QuickPow(q, k); return r = (pow % p) % q; } public static ulong createS(ulong k, ulong x, ulong r, ulong q, string line) { uint[] sha1 = new uint[5]; ulong e, s; SHA1 sha = new SHA1(); sha.GetHash(line); sha1 = sha.resHash; e = sha1[0] + sha1[1] + sha1[2] + sha1[3] + sha1[4]; s = (k*(e + x * r)) % q; return s; } Результат роботи програми:  Висновок: На лабораторній роботі я реалізував програму формування цифрового підпису вхідного повідомлення згідно стандарту DSS.
Антиботан аватар за замовчуванням

03.12.2015 14:12-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!