DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

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

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

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

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

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

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

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Захист інформації в комп’ютерних мережах
Група:
КН-11
Коротко про документ

Про що ця робота

У документі описано лабораторну роботу з реалізації формування цифрового підпису за стандартом DSS. Наведено програмний код мовою C# для розрахунків та генерації ключів.

У роботі розглядаються

  • Захист інформації
  • Цифровий підпис
  • Стандарт DSS
  • Алгоритм DSA
  • Хеш-функція SHA-1
  • Криптографія

Зміст і розділи

  1. Мета роботи
  2. Теоретичні відомості
  3. Виконання роботи
  4. Вміст файлу Program.cs
  5. Результат роботи програми
  6. Висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів, які вивчають криптографію та захист інформації.
Викладачі:Викладач

Ключові поняття

цифровий підписDSSDSASHA-1хеш-функціязакритий ключвідкритий ключпрограмний кодC#

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА” Лабораторна робота №2 Проектування засобів захисту інформації в комп’ютерних мережах «Формування цифрового підпису згідно стандарту DSS» Львів – 2015 Мета роботи: реалізувати програму формування цифрового підпису вхідного повідомлення згідно стандарту DSS. Теоретичні відомості Відмінності підходів стандарту 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.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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