ІНСТРУКЦІЯ ДО ЗАПУСКУ
- перейти у відповідну папку і запустити файл server.py
- запустити файл client.py
- тепер можна писати повідомлення
PS: якщо було виявлно помилку під час розшифрування повідомлення, на екран виведеться текст:\n '[ERROR] The recieved message had an error'
ПОЯСНЕННЯ ІМПЛЕМЕНТАЦІЇ
У файлі encription.py реалізовано два класи:
-
RSA число е стале (65537); вибираються два простих числа p і q за допомогою теста Міллера-Рабіна; n = pq; обчислюють секретний ключ d , який є цілим числом, оберненим до e за модулем ( p −1)(q −1): d = e**–1 mod((p–1)(q–1))
реалізовано функцію encrypt та decrypt: повідомлення перетвоють в байти потім в int і підносять до степеня e за модулем n; для розшифрування підносять до степеня d за модулем n і перетворюють в байти
-
XOR encrypt(msg, secret_key): перетворює повідомлення в байти; робить побайтовий XOR із байтами ключа; повертає результат як Hex-рядок.
decrypt(msg, secret_key): Hex-рядок перетворює в байти; робить побайтовий XOR із байтами ключа; декодує відновлені байти назад у звичайний текст.
При створені сервера та кліжнта генеруються усі необхідні ключі для RSA та вони обмінюються ними. Далі secretkey для XOR надсилає сервер клієнту попередньо закодувавши його використовуючи public key клієнта, клієнт розшифровує його за доп private key.
Тепер повідомлення написання клієнтом будуть шифруватися XOR з цим secretkey. Окрім повідомлення надсилається hash (реалізовано за допомогою бібліотеки hashlib методу sha3_512). Клієнт розшифровує повідомлення і наново рахує hash, якщо він збігається відображається повідомлення, в іншому - error message.