Professional Documents
Culture Documents
2
2
Лабораторна робота № 2
з дисципліни «Програмно-технічні засоби захисту інформації»
на тему: «Імплементація безпечної системи обміну інформацією на основі
алгоритму асиметричної криптографії Ель-Гамаля»
Варіант 20
Одеса-2024
Мета роботи: розробити програму на Python з використанням модуля
tkinter для створення безпечного каналу обміну інформацією між клієнтом і
сервером, використовуючи алгоритм асиметричної криптографії Ель-Гамаля.
Програма буде мати можливість для створення логу та . Після розробки
програми планується провести її тестування.
Хід роботи:
Виконання роботи
1. Розробити клієнтську і серверну частини з використанням Python.
Інтегрувати tkinter для створення графічного інтерфейсу користувача.
2. В клієнтській частині генерувати параметри шифрування та передавати
відкритий ключ серверу. Сервер, в свою чергу, також генерує
параметри шифрування Ель-Гамаля та передає відкритий ключ клієнту.
3. Після встановлення з'єднання та обміну ключами, клієнт і сервер
мають можливість обмінюватися зашифрованими повідомленнями
через графічний інтерфейс.
4. Впровадити функціонал, що дозволяє задати максимальний час
підключення, після якого програма автоматично завершить свою
роботу.
5. Реалізувати на сервері обробку команди HELP для надання інформації
про систему обміну повідомленнями та про автора програми клієнту.
6. Провести тестування розробленого функціоналу програми.
Теоретична частина:
Практична частина:
Основні кроки реалізації криптоалгоритму:
Бібліотеки та модулі:
Crypto.Util.number: цей модуль містить функції для роботи з великими
числами, які зазвичай використовуються в криптографії.
Crypto.Random: модуль для генерації криптографічно стійких
випадкових чисел.
Crypto.Random.random: використовується для генерації випадкових
чисел.
Функції:
find_primitive_root(p): знаходить первісний корінь для заданого
простого числа p. Використовується для генерації генератора групи.
generate_keys(bits=2048): генерує публічний та приватний ключі.
Розмір ключа можна вказати як параметр.
encrypt(public_key, plaintext): шифрує текст (plaintext), використовуючи
публічний ключ. Повертає зашифроване повідомлення у вигляді пари
чисел.
decrypt(private_key, public_key, ciphertext): розшифровує повідомлення,
використовуючи приватний ключ та публічний ключ.
Методи і змінні:
p, g, x, y, k, a, b, m, s, plaintext_bytes: змінні, що представляють різні
криптографічні параметри та елементи криптосистеми (просте число,
генератор групи, приватний ключ, публічний ключ, випадкове число
для шифрування, шифровані елементи, повідомлення як ціле число,
секрет для дешифрування, байтове представлення тексту).
pow(base, exp, mod): вбудована функція Python для вичислення (base **
exp) % mod. Використовується для шифрування, генерації ключів, та
розшифрування в рамках алгоритму Ель-Гамаля.
Процес реалізації:
Генерація ключів (generate_keys):
p: генерується просте число заданої довжини за допомогою getPrime.
g: знаходиться первісний корінь для p використовуючи функцію
find_primitive_root.
x: генерується випадкове число, яке слугуватиме приватним ключем.
y: вичислюється як mod gxmodp і слугуватиме частиною публічного
ключа.
Шифрування (encrypt):
k: генерується випадкове число, що використовується для шифрування
одного повідомлення.
a: вичислюється як mod gkmodp і слугує частиною зашифрованого
повідомлення.
m: перетворення тексту повідомлення в довге ціле число.
b: вичислюється як ()mod (yk⋅m)modp і є другою частиною
зашифрованого повідомлення.
Розшифрування (decrypt):
a, b: приймаються як частини зашифрованого повідомлення.
s: вичислюється як mod axmodp, де x - приватний ключ.
m: вичислюється шляхом обернення процесу шифрування і
перетворення назад у текстову форму.