DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

Рік:
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:37

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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