Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/5991| Title: | Розробка захищеного Telegram-боту з використанням постквантового алгоритму обміну ключами та симетричного шифрування |
| Authors: | Панаско, Олена Миколаївна Гоцуц, Олексій Дмитрович |
| Keywords: | AES-128;продуктивність криптоалгоритму;постквантовий алгоритм;чат-бот |
| Issue Date: | 2024 |
| Abstract: | Метою дипломною роботи є створення Telegram-боту з використанням постквантового алгоритму обміну ключами та симетричного шифрування. Дослідження предметної області розробляємої системи. Аналіз відомих алгоритмів, їх позитивних рис та недоліків. Вибір платформи та оптимальних засобів для розробки програмного продукту. Розробка програмного коду програми та його тестування. |
| URI: | https://er.chdtu.edu.ua/handle/ChSTU/5991 |
| Appears in Collections: | 125 Кібербезпека та захист інформації (Безпека інформаційних і комунікаційних систем) |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| М_125_Гоцуц_Панаско.pdf Restricted Access | 4.3 MB | Adobe PDF | View/Open Request a copy |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.
Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ЕЛЕКТРОННИХ ТЕХНОЛОГІЙ,
AВТОТРАНСПОРТУ ТА МАШИНОБУДУВАННЯ
КАФЕДРА РОБОТОТЕХНІЧНИХ І ТЕЛЕКОМУНІКАЦІЙНИХ
СИСТЕМ ТА КІБЕРБЕЗПЕКИ
До захисту допущено
завідувач кафедри РТСК
д.т.н., професор
_______________ В.В. Палагін
"______" __________ 2024 року
Пояснювальна записка
до дипломної роботи магістра
на тему: «Розробка захищеного Telegram-боту з використанням постквантового
алгоритму обміну ключами та симетричного шифрування»
Виконав: студент 2курсу, групи мБІ-31
Спеціальності 125 – «Кібербезпека та
захист інформації»,
освітньої програми «Безпека
інформаційних і комунікаційних систем»
Гоцуц О.Д.
Керівник Панаско О.М.
Черкаси 2024р.
Форма № Н-9.01
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
(повне найменування вищого навчального закладу)
Факультет електронних технологій, автотранспорту та машинобудування
(повна назва)
Кафедра робототехнічних і телекомунікаційних систем та кібербезпеки
(повна назва)
Освітньо-кваліфікаційний рівень магістр
Спеціальність 125 – «Кібербезпека та захист інформації»
Освітня програма Безпека інформаційних і комунікаційних систем
ЗАТВЕРДЖУЮ
Завідувач кафедри д.т.н., проф.
____________ Палагін В.В.
“___” _____________ 2024 року
З А В Д А Н Н Я
НА ДИПЛОМНУ РОБОТУ МАГІСТРА СТУДЕНТУ
Гоцуцу Олексію Дмитровичу
(прізвище, ім’я, по батькові)
1. Тема роботи «Розробка захищеного Telegram-боту з використанням постквантового алгоритму
обміну ключами та симетричного шифрування.»
керівник роботи Панаско Олена Миколаївна_____
(прізвище, ім’я, по батькові, науковий ступінь, вчене звання)
затверджені наказом Черкаського державного технологічного університету від
«16» вересня 2024 року №272/04.
2. Строк подання студентом роботи _9.12.2024___.
3. Вихідні дані до роботи: Характеристика криптоалгоритму AES-128 та його властивості.
Продуктивність криптоалгоритму AES-128 та переваги його використання. Характеристика
постквантового алгоритму обміну ключами Kyber, його математичні основи.
4. Зміст розрахунково-пояснювальної записки (перелік питань, що їх належить розробити):
Вступ, Розділ 1 Огляд та оцінка сучасних методів захисту в месенджерах, Розділ 2 Теоретичні
основи реалізації захищеного Telegram-боту, Розділ 3 Практична реалізація захищеного Telegram-
боту, Висновки, Список використаних джерел.
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень, плакатів):
презентація «Розробка захищеного Telegram-боту з використанням постквантового алгоритму
обміну ключами та симетричного шифрування» на 13 слайдів.
6. Консультанти розділів роботи
Підпис, дата
Розділ Прізвище, ініціали та посада консультанта
завдання видав завдання прийняв
7. Дата видачі завдання __________________
КАЛЕНДАРНИЙ ПЛАН
№ Строк виконання
Назва етапів кваліфікаційної роботи магістра Примітка
з/п етапів роботи
1. Пошук і аналіз інформації по заданій темі 06.09.2024-
16.09.2024
2. Написан ня І розділу “Огляд та оцінка сучасних 18.09.2024-
методів криптографічного захисту в месенджерах” 27.09.2024
3. Написан ня ІІ розділу роботи “Теоретичні основи 1.10.2024-
реалізації захищеного Telegram-боту” 18.10.2024
4. Написан ня ІІІ розділу “Практична реалізація 22.10.2024-
захищеного Telegram-боту ” 10.11.2024
5. Написан ня вступу і висновків, складання списку 13.11.2024
літератури
6. Оформл ення кваліфікаційної роботи магістра 16.11.2024
7. Подання роботи в ЕК 9.12.2024
8. Захист р оботи в ЕК 11.12.24
Студент _______________________Гоцуц О.Д.
(підпис) (прізвище та ініціали)
Керівник роботи _______________Панаско О.М.
(підпис) (прізвище та ініціали)
ЗМІСТ
ВСТУП ................................................................................................................................... 6
1 ОГЛЯД ТА ОЦІНКА СУЧАСНИХ МЕТОДІВ КРИПТОГРАФІЧНОГО ЗАХИСТУ
В МЕСЕНДЖЕРАХ.............................................................................................................. 8
1.1 Актуальність проблеми захисту даних у месенджерах ........................................... 8
1.2 Аналіз існуючих криптографічних рішень в Telegram ......................................... 10
1.3 Постквантова криптографія та її необхідність....................................................... 15
1.3.1 Загрози постквантових комп’ютерів для сучасної криптографії ................... 19
1.3.2 Огляд постквантових алгоритмів обміну ключами ......................................... 21
1.4 Симетричні алгоритми в контексті месенджерів ................................................... 26
2 ТЕОРЕТИЧНІ ОСНОВИ РЕАЛІЗАЦІЇ ЗАХИЩЕНОГО TELEGRAM-БОТУ ......... 30
2.1 Архітектура Telegram Bot API ................................................................................. 30
2.2 Алгоритм обміну ключами Kyber ........................................................................... 32
2.3 Загальна структура AES ........................................................................................... 39
2.4 Математичні основи криптоалгоритму AES .......................................................... 41
2.5 Раундове перетворення в AES ................................................................................. 41
2.6 Ключовий розклад в AES ......................................................................................... 45
2.7 Розшифрування в алгоритмі AES ............................................................................ 46
2.8 Режими виконання симетричного блокового шифрування .................................. 47
2.8.1 Режим ECB (Electronic Codebook) ..................................................................... 47
2.8.2 Режим CBC (Cipher Block Chaining) ................................................................. 49
2.8.3 Режим Output Feedback (OFB) ........................................................................... 50
2.8.4 Режим CFB (Cipher Feedback) ............................................................................ 51
2.8.5 Режим CTR (Counter) .......................................................................................... 52
3 ПРАКТИЧНА РЕАЛІЗАЦІЯ ЗАХИЩЕНОГО TELEGRAM-БОТУ .......................... 56
3.1 Опис програмного середовища ................................................................................ 56
3.2 Створення Docker image ........................................................................................... 58
ЧДТУ.24.23308.004 ПЗ
Зм. А рк. № докум. Підпис Дата
Розроб. Гоцуц О.Д. Розробка захищеного Telegram-боту Літ. Аркуш Аркушів
Перев ір. Панаско О.М.
з використанням постквантового 4 89
алгоритму обміну ключами та
Н.Контрол. Байрак А.В. ЧДТУ, мБІ-31
Затвер дж. Палагі н В.В. симетричного шифрування
3.3 Програмна реалізація AES шифрування ................................................................ 60
3.4 Програмна реалізація постквантового алгоритму обміну ключами Kyber. ........ 70
3.4.1 Основні функції модуля ml_kem. ...................................................................... 72
3.4.2 Основні функції модуля modules_generic.py .................................................... 77
3.4.3 Основні функції модуля modules.py ................................................................. 84
3.4.4 Основні функції модуля polynomials_generic.py ............................................. 86
3.4.5 Основні функції модуля polynomials.py ........................................................... 91
3.4.6 Основні функції модуля utils.py ........................................................................ 97
3.5 Написання Telegram-боту ......................................................................................... 97
3.5 Тестування ............................................................................................................... 102
ВИСНОВКИ ...................................................................................................................... 105
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ........................................................................ 107
5
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
ВСТУП
В епоху стрімкої діджиталізації захист персональних даних перетворився з
другорядного питання на критичний імператив сучасності. Щодня мільярди людей,
занурюючись у цифровий простір, залишають за собою незліченні цифрові сліди –
фрагменти особистої інформації, які можуть стати золотою жилою для тих, хто прагне
використати їх у власних цілях.
Спектр персональних даних надзвичайно широкий: від базових ідентифікаторів,
як-от ім'я чи адреса, до витончених цифрових маркерів – геолокаційних міток,
біометричних показників та історії онлайн-активності. Ці дані збираються не лише під
час очевидних взаємодій у мережі, але й у найнесподіваніших моментах – від
користування фітнес-трекером до оплати проїзду в громадському транспорті.
Парадокс сучасності полягає в тому, що, генеруючи величезні обсяги особистої
інформації, користувачі часто позбавлені реального контролю над її подальшою
долею. Ця безпрецедентна вразливість створює підґрунтя для цілого спектру загроз –
від витончених схем соціальної інженерії до масштабних витоків даних, які можуть
перетворити життя людини на справжній кошмар.
У відповідь на ці виклики світова спільнота розробляє все більш досконалі
механізми захисту. Наприклад, революційний GDPR у Європі встановив нові
стандарти поводження з персональними даними, зробивши їх захист не просто
рекомендацією, а законодавчо закріпленим обов'язком. У Каліфорнії CCPA надав
споживачам безпрецедентний рівень контролю над їхньою цифровою ідентичністю,
створивши прецедент для інших регіонів.
Проте навіть найдосконаліше законодавство не здатне повністю вирішити
проблему. Компанії продовжують винаходити нові способи збору даних, часто
балансуючи на межі легальності, а користувачі губляться в хащах складних політик
конфіденційності та заплутаних налаштувань приватності.
Саме тому критично важливо, щоб кожен користувач цифрового простору став
активним захисником власної приватності. Це означає не лише використання
6
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
надійних паролів та двофакторної автентифікації, але й формування нової культури
цифрової гігієни – від критичного ставлення до запитів на доступ до персональних
даних до регулярного аудиту власного цифрового сліду.
У підсумку, захист персональних даних – це не просто технічне чи юридичне
питання, а фундаментальний виклик нашої епохи. Лише синергія між прогресивним
законодавством, відповідальним бізнесом та свідомими користувачами може
створити середовище, де цифрові інновації співіснують з непорушним правом на
приватність.
Особливу увагу слід приділити персональним даним у месенджерах, які стали
невід’ємною частиною повсякденного спілкування. Ці платформи зазвичай збирають
метадані – інформацію про час, тривалість та учасників комунікацій, що може
розкривати більше, ніж сам зміст повідомлень. Більше того, у випадках недостатнього
захисту або ненадійного шифрування, приватне листування може стати доступним
третім сторонам.
Метою дипломною роботи є створення Telegram-боту з використанням
постквантового алгоритму обміну ключами та симетричного шифрування.
Завданням дипломної роботи є:
дослідження предметної області розробляємої системи,
аналіз відомих алгоритмів, їх позитивних рис та недоліків,
вибір платформи та оптимальних засобів для розробки програмного
продукту,
розробка програмного коду програми та його тестування.
7
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
1 ОГЛЯД ТА ОЦІНКА СУЧАСНИХ МЕТОДІВ КРИПТОГРАФІЧНОГО ЗАХИСТУ
В МЕСЕНДЖЕРАХ
1.1 Актуальність проблеми захисту даних у месенджерах
У сучасному світі, де цифрове спілкування стало нормою повсякденного життя,
месенджери відіграють ключову роль у забезпеченні комунікації між людьми. Серед
різноманіття доступних платформ особливе місце посідає Telegram, який за останні
роки значно збільшив свою аудиторію та став одним з найпопулярніших месенджерів
у світі. Цей сервіс привертає користувачів своєю швидкістю, функціональністю та
заявленим високим рівнем безпеки. Проте саме питання захисту даних у Telegram, як
і в інших месенджерах, залишається актуальним та викликає чимало дискусій серед
експертів з кібербезпеки.
Telegram активно розвивається та нарощує свою аудиторію, яка вже
перевищила 700 мільйонів активних користувачів щомісяця. Щодня через платформу
передаються величезні обсяги даних – від простих текстових повідомлень до
конфіденційних документів та медіафайлів. Популярність Telegram зробила його не
лише зручним інструментом для спілкування, але й привабливою мішенню для
кіберзлочинців. Значна частина користувачів довіряє месенджеру свої особисті дані,
банківську інформацію та ділову кореспонденцію, що підвищує ставки у питанні
забезпечення надійного захисту.
Telegram позиціонує себе як безпечний месенджер, і дійсно, він має ряд
важливих функцій для захисту даних користувачів. Однак, на відміну від деяких
конкурентів, наскрізне шифрування в Telegram за замовчуванням активне лише в
секретних чатах. Звичайні чати та групи використовують клієнт-серверне
шифрування, що означає теоретичну можливість доступу до даних на серверах
компанії. Це викликає занепокоєння у експертів з кібербезпеки та правозахисників,
які наголошують на необхідності впровадження наскрізного шифрування для всіх
видів комунікації.
8
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Розробники Telegram стверджують, що їхній підхід до безпеки є оптимальним
балансом між зручністю користування та захистом даних. Вони аргументують це тим,
що клієнт-серверна архітектура дозволяє користувачам мати доступ до історії
повідомлень з різних пристроїв та забезпечує швидку синхронізацію даних. Проте це
рішення має свої недоліки, особливо в контексті потенційних загроз безпеці.
Незважаючи на загальну надійність платформи, користувачі Telegram
стикаються з різноманітними загрозами безпеки. Однією з найбільш поширених є
фішингові атаки, коли зловмисники створюють підроблені акаунти або боти, які
імітують офіційні сервіси чи відомі бренди. Через високий рівень довіри до
платформи, користувачі можуть стати жертвами таких атак, передаючи
конфіденційну інформацію або здійснюючи небезпечні дії.
Інша проблема пов'язана з витоками метаданих. Хоча сам зміст повідомлень
може бути захищений, інформація про те, хто з ким спілкується, коли і як часто, може
бути доступна зловмисникам або використана для аналізу поведінки користувачів. У
світі, де персональні дані стали надзвичайно цінним ресурсом, така інформація може
бути використана для різноманітних зловмисних цілей.
Telegram неодноразово стикався з регуляторними викликами в різних країнах
світу. Деякі держави намагалися обмежити або заблокувати доступ до месенджера,
аргументуючи це питаннями національної безпеки або боротьбою з тероризмом.
Позиція Telegram щодо захисту приватності користувачів часто вступає в конфлікт з
вимогами правоохоронних органів різних країн, які прагнуть отримати доступ до
даних користувачів.
У контексті європейського законодавства, зокрема GDPR, Telegram також
стикається з необхідністю забезпечити відповідність строгим вимогам щодо обробки
та зберігання персональних даних. Це створює додаткові виклики для компанії, яка
має балансувати між забезпеченням приватності користувачів та дотриманням
законодавчих норм різних юрисдикцій.
9
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Для підвищення рівня безпеки Telegram постійно впроваджує нові технологічні
рішення. Одним з важливих кроків стало впровадження двофакторної аутентифікації,
яка значно підвищує захист облікових записів користувачів. Крім того, месенджер
пропонує функцію самознищення повідомлень, що дозволяє користувачам
встановлювати таймер, після якого повідомлення автоматично видаляються.
Telegram також розробив власний протокол шифрування MTProto, який, за
твердженням компанії, забезпечує високий рівень безпеки. Проте деякі експерти
критикують цей підхід, віддаючи перевагу більш перевіреним і відкритим
протоколам, таким як Signal Protocol. Дискусії щодо ефективності та надійності
MTProto продовжуються в експертному середовищі.
Важливим аспектом забезпечення безпеки в Telegram є рівень обізнаності самих
користувачів. Навіть найкращі технологічні рішення можуть виявитися
неефективними, якщо користувачі не розуміють основних принципів цифрової
безпеки. Необхідність регулярної зміни паролів, використання двофакторної
аутентифікації, обережність при спілкуванні з незнайомими користувачами та
уважність до налаштувань приватності – все це залишається критично важливим для
забезпечення безпеки особистих даних.
Розвиток технологій створює нові виклики для безпеки даних у месенджерах, і
Telegram не є винятком. Поява квантових комп'ютерів може зробити сучасні методи
шифрування вразливими, що вимагатиме розробки нових підходів до захисту даних.
Крім того, розвиток штучного інтелекту створює як нові можливості для захисту
(наприклад, покращені системи виявлення шахрайства), так і нові загрози (більш
витончені методи фішингу та соціальної інженерії).
1.2 Аналіз існуючих криптографічних рішень в Telegram
У месенджері Telegram застосовуються різні методи криптографічного захисту
інформації для забезпечення конфіденційності, цілісності та автентичності
повідомлень. Криптографічні технології забезпечують захист даних на всіх етапах: під
час передачі, зберігання на серверах та обміну між користувачами. Основними
10
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
інструментами, що застосовуються в Telegram, є симетричне та асиметричне
шифрування, хешування та інші сучасні методи криптографії. Ці механізми
гарантують, що повідомлення, переслані через Telegram, залишаються
конфіденційними та захищеними від несанкціонованого доступу.
Ось кілька ключових аспектів криптографічного захисту в Telegram:
1. MTProto (Telegram Encryption Protocol)
MTProto - це власний протокол шифрування, розроблений спеціально для
Telegram, який є основним механізмом захисту даних у звичайних чатах та захищених
чатах. MTProto забезпечує як безпечний обмін повідомленнями, так і високу
швидкість передачі даних, зберігаючи баланс між безпекою та ефективністю.
Основні протоколи MTProto:
використання алгоритму AES-256 для шифрування контенту
повідомлень. AES є одним із найбільш надійних та ефективних методів симетричного
шифрування, який гарантує високу безпеку даних навіть при передачі через відкриті
мережі;
для захисту процесу встановлення спільних ключів між користувачами
використовується асиметричний алгоритм Діффі-Геллмана. Це дозволяє сторонам, що
спілкуються, обмінюватися секретними ключами, не передаючи їх відкритим текстом;
хеш-функція SHA-256 використовується для забезпечення цілісності
даних. Вона забезпечує генерацію хешу, який дозволяє перевірити, чи були дані
змінені під час передачі або зберігання;
RSA з ключами довжиною 2048 біт використовується для шифрування
з'єднання між клієнтом та сервером. Асиметричний алгоритм RSA гарантує безпечне
встановлення сесій та передачу даних між клієнтом та сервером, захищаючи від
можливих атак.
2. Захищені чати (Secret Chats)
Захищені чати в Telegram використовують наскрізне шифрування (end-to-end
encryption), що означає, що повідомлення шифруються безпосередньо на пристрої
11
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
відправника і розшифровуються тільки на пристрої отримувача. Завдяки цьому
механізму навіть сервери Telegram не мають доступу до змісту повідомлень, а отже,
не можуть їх зберігати чи аналізувати.
Основні характеристики захищених чатів:
ключі шифрування зберігаються лише на пристроях користувачів, тому
повідомлення не можуть бути перехоплені або прочитані навіть за наявності доступу
до серверів Telegram;
для обміну ключами в захищених чатах використовується алгоритм
Діффі-Геллмана. Це дозволяє встановити спільний секретний ключ для симетричного
шифрування без передачі цього ключа через мережу;
у секретних чатах користувачі можуть налаштовувати таймер, після
закінчення якого повідомлення автоматично видаляються з обох пристроїв;
якщо хтось зі співрозмовників зробить скріншот під час спілкування у
захищеному чаті, інша сторона отримає відповідне повідомлення.
3. Звичайні чати (Cloud Chats)
У звичайних чатах Telegram застосовується транспортне шифрування, яке
захищає дані під час їх передачі між клієнтом та сервером. Однак, на відміну від
захищених чатів, повідомлення в звичайних чатах зберігаються на серверах Telegram
у зашифрованому вигляді, щоб забезпечити синхронізацію між різними пристроями
користувача.
Основні аспекти звичайних чатів:
дані між клієнтом і сервером шифруються за допомогою протоколу TLS
(Transport Layer Security). Це шифрування гарантує, що дані не можуть бути
перехоплені або змінені під час їх передачі через Інтернет;
для зручності користувачів повідомлення зберігаються у зашифрованому
вигляді на хмарних серверах Telegram, що дає змогу отримувати доступ до історії
повідомлень з різних пристроїв.
4. Додаткові механізми захисту
12
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Крім основних методів шифрування, Telegram пропонує кілька додаткових
заходів для посилення безпеки:
для входу в обліковий запис можна додати другий рівень захисту,
увімкнувши двоетапну перевірку. Це захищає акаунт від несанкціонованого доступу
навіть у разі компрометації паролю;
у захищених чатах користувачі можуть вручну перевірити відбиток
(fingerprint) ключа шифрування, щоб переконатися у відсутності атаки «людина
посередині» (MITM).
На сьогодні Telegram є не лише популярним месенджером для обміну
повідомленнями, а й платформою для розробки ботів, які автоматизують різні
процеси. Серед багатьох категорій ботів, деякі спеціалізуються на шифруванні
інформації або наданні послуг, пов'язаних із захистом даних. Ось огляд кількох
популярних телеграм-ботів, призначених для шифрування інформації, а також їх
функціональні особливості.
1. CryptoNoter Bot
CryptoNoter представляє собою багатофункціональний інструмент для
шифрування, що поєднує простоту використання з потужними криптографічними
можливостями. В основі бота лежать класичні алгоритми шифрування AES та RSA,
що забезпечують надійний захист даних при передачі повідомлень та зберіганні
нотаток.
Бот надає користувачам повний набір функцій для роботи з шифруванням: від
генерації ключових пар для асиметричного шифрування до можливості відновлення
повідомлень за допомогою приватного ключа чи пароля. Особливо цінною є функція
зберігання зашифрованих нотаток, що дозволяє користувачам створювати захищене
сховище важливої інформації прямо в Telegram. Відсутність необхідності в глибоких
технічних знаннях робить CryptoNoter доступним для широкої аудиторії.
2. EncryptBot
13
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
EncryptBot виділяється серед інших своєю гнучкістю та різноманітністю
підтримуваних алгоритмів шифрування. Користувачі мають доступ до повного
спектру криптографічних методів, включаючи AES, DES та Triple DES, що дозволяє
вибрати оптимальний рівень захисту для різних типів даних.
Особливу увагу в боті приділено зручності використання - всі операції
виконуються через прості текстові команди, що робить його ідеальним для щоденного
застосування. Крім роботи з текстовими повідомленнями, EncryptBot підтримує
шифрування файлів невеликого розміру, що розширює його практичну цінність.
Можливість використання як власних ключів шифрування, так і автоматично
згенерованих ботом, забезпечує додаткову гнучкість у налаштуванні безпеки.
3. SafeTextBot
SafeTextBot зосереджується на забезпеченні максимальної конфіденційності
при передачі текстової інформації. Унікальність цього бота полягає в його підході до
безпеки - всі повідомлення шифруються за допомогою користувацьких паролів, при
цьому доступ до зашифрованого контенту мають лише власники відповідного пароля.
Важливою особливістю SafeTextBot є його політика щодо зберігання даних -
після завершення сесії всі оброблені повідомлення видаляються з серверів, що
забезпечує додатковий рівень приватності. Бот також пропонує унікальну функцію
шифрування URL-адрес, що дозволяє безпечно ділитися посиланнями. Простота
використання та відсутність необхідності в технічних знаннях роблять його ідеальним
рішенням для користувачів, які цінують приватність.
4. Securden Bot
Securden Bot відрізняється своїм професійним підходом до захисту даних,
орієнтованим на корпоративне використання. Цей бот є частиною комплексної
системи безпеки, що забезпечує не лише шифрування даних, але й повноцінне
управління доступом та зберіганням конфіденційної інформації в організаційному
середовищі.
14
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Функціонал бота включає зашифроване зберігання паролів, генерацію та
управління ключами шифрування, а також складну систему контролю доступу для
різних користувачів та груп. Особливо цінною є можливість безпечного зберігання та
обміну файлами, що робить Securden Bot незамінним інструментом для організацій,
які потребують високого рівня захисту даних. Хоча налаштування бота може вимагати
певних технічних знань, широкий спектр можливостей виправдовує цю складність.
5. Encryptor Bot
Encryptor Bot створений для тих, хто шукає баланс між надійністю шифрування
та простотою використання. Бот підтримує популярні алгоритми шифрування, такі як
AES, Blowfish та Twofish, забезпечуючи достатній рівень захисту для більшості
користувачів. Його інтерфейс розроблений таким чином, щоб навіть користувачі без
досвіду в криптографії могли легко шифрувати свої дані.
Особливістю бота є його глибока інтеграція з іншими чатами Telegram, що
дозволяє швидко шифрувати повідомлення перед відправкою. Підтримка
шифрування невеликих файлів розширює можливості використання бота, роблячи
його універсальним інструментом для захисту різних типів даних. Encryptor Bot
ідеально підходить для користувачів, які потребують швидкого та надійного способу
захисту своєї інформації без занурення в технічні деталі процесу шифрування.
1.3 Постквантова криптографія та її необхідність
Постквантова криптографія (ПКК) - це галузь криптографії, яка фокусується на
розробці криптографічних систем, здатних протистояти атакам, що використовують
квантові комп'ютери. У світі, де технології стрімко розвиваються, поява
універсальних квантових комп'ютерів становить значну загрозу для багатьох
існуючих криптографічних систем, які забезпечують безпеку наших цифрових
комунікацій та даних.
Квантові комп'ютери базуються на принципах квантової механіки, які
радикально відрізняються від принципів класичних обчислень. Ось ключові
концепції:
15
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
на відміну від класичних бітів, які можуть бути лише в стані 0 або 1,
кубіти можуть перебувати в суперпозиції цих станів. Це означає, що кубіт може
одночасно представляти і 0, і 1 з певною ймовірністю;
суперпозиція - це властивість квантових систем, яка дозволяє кубітам
існувати в багатьох станах одночасно. Це дає можливість квантовим комп'ютерам
обробляти величезну кількість комбінацій одночасно;
явище, при якому квантові стани двох або більше кубітів стають
взаємозалежними має назву заплутаність. Вона дозволяє створювати складні квантові
стани, які неможливо описати класично;
явище, яке дозволяє підсилювати правильні результати обчислень і
пригнічувати неправильні має назву квантова інтерференція.
Квантові обчислення мають потенціал зробити революцію в галузі
криптографії, як в позитивному, так і в негативному сенсі:
Загрози для існуючих систем:
алгоритм Шора дозволяє ефективно факторизувати великі числа та
обчислювати дискретні логарифми. Це робить вразливими більшість сучасних систем
з відкритим ключем, таких як RSA, DSA та системи на основі еліптичних кривих;
алгоритм Гровера може прискорити пошук у несортованих даних,
потенційно послаблюючи симетричні криптосистеми та хеш-функції.
Вплив на конкретні криптосистеми:
RSA базується на складності факторизації великих чисел. Квантовий
комп'ютер з достатньою кількістю кубітів може зламати RSA за допомогою алгоритму
Шора;
алгоритм Diffie-Hellman також вразливий до алгоритму Шора через його
залежність від проблеми дискретного логарифму;
криптографія на основі еліптичних кривих також вразлива до квантових
атак.
16
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Хоча універсальні квантові комп'ютери ще не існують, дані, зашифровані
сьогодні, можуть бути збережені для майбутнього зламу.
Концепція "harvest now, decrypt later" означає, що зашифровані дані можуть бути
зібрані зараз і розшифровані пізніше, коли з'являться високопродуктивні квантові
комп'ютери.
Необхідність розвитку та впровадження постквантової криптографії
обумовлена кількома критичними факторами:
багато типів даних (наприклад, медичні записи, державні таємниці)
повинні залишатися захищеними протягом десятиліть;
постквантова криптографія забезпечує захист від майбутніх загроз,
пов'язаних з квантовими обчисленнями;
енергетичні мережі, фінансові системи та телекомунікації покладаються
на криптографію для безпеки;
захист інтелектуальної власності та комерційних таємниць від
потенційних квантових атак;
компанії, які раніше адаптують постквантові рішення, можуть отримати
конкурентну перевагу;
з розвитком квантових обчислень, існуючі методи захисту особистої
інформації можуть стати неефективними;
очікується, що уряди та міжнародні органи будуть вимагати використання
постквантових алгоритмів для захисту важливої інформації;
раннє впровадження допоможе організаціям відповідати майбутнім
стандартам безпеки;
зловмисники можуть збирати зашифровані дані зараз, щоб розшифрувати
їх пізніше за допомогою квантових комп'ютерів;
розвиток постквантової криптографії стимулює інновації в галузі
інформаційної безпеки та суміжних областях. Це відкриває нові можливості для
досліджень та розробок у сфері криптографії та квантових технологій.
17
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Основні напрямки в постквантовій криптографії розвиваються в кількох
ключових галузях, кожна з яких має унікальні особливості та переваги:
Перший напрямок - решітчаста криптографія. Вона заснована на
складності деяких математичних задач у решітках, таких як задача про найкоротший
вектор і задача про вектор найближчого сусіда. Прикладами рішень у цій галузі є
NTRU і CRYSTALS-Kyber. Основні переваги цього підходу полягають у тому, що
алгоритми відносно ефективні, а розмір ключа невеликий. Однак проблеми полягають
у складності фактичної реалізації та необхідності подальших досліджень у сфері
безпеки цих рішень.
Друга галузь - криптографія на основі кодів. Криптографічні системи
будуються з використанням криптографічної теорії. Одним із найвідоміших прикладів
є система McEliece. Перевагами такого підходу є довга історія криптоаналізу та висока
швидкість шифрування. Однак суттєвий недолік - великий розмір ключа - робить ці
системи складними для практичного використання.
Третій напрямок - багатовимірна криптографія, що базується на
складності розв'язання систем багатовимірних поліноміальних рівнянь. Прикладом
такої системи є Rainbow. Цей підхід забезпечує швидке виконання операцій підпису,
що є його головною перевагою. Однак основними проблемами є великий розмір
ключів і вразливість деяких схем, що потребує подальших досліджень.
Четвертий напрям - криптографія на основі хеш-функцій. У ній для
забезпечення безпеки використовуються властивості криптографічних хеш-функцій.
Одним із прикладів є система SPHINCS+. Основна перевага цього підходу полягає в
тому, що він ґрунтується на добре вивчених криптографічних примітивах і вимагає
лише мінімальних допущень безпеки. Однак недоліками є відносно повільна робота
алгоритму та великий розмір цифрового підпису.
П'ятий напрям - криптографія рівності. Вона заснована на складності
пошуку шляхів між однорідними еліптичними кривими. Відомим прикладом цієї
техніки є система SIKE, однак її було зламано, і зараз активно розробляють нові
18
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
варіанти. Перевагою криптографії рівності є малий розмір ключа, однак ця область є
відносно новою та потребує подальших досліджень і аналізу.
Шоста галузь - симетрична криптографія. Загалом симетричні алгоритми
менш уразливі для квантових атак, але й вони потребують адаптації. Основна увага
тут приділяється розробці нових блокових шифрів з великим розміром ключа, щоб
забезпечити більш високу стійкість. Як приклад можна навести AES з великими
ключами і нові легкі шифри, розроблені для роботи в квантових середовищах.
Остання тенденція - гібридні системи. Вони поєднують класичні
криптографічні алгоритми з постквантовими для забезпечення подвійного захисту.
Гібридні рішення дозволяють поступово переходити до повністю постквантових
систем, забезпечуючи збереження безпеки протягом перехідного періоду. Розвиток
цих напрямків супроводжується активними дослідженнями та стандартизацією.
Національний інститут стандартів і технологій (NIST) США проводить конкурс для
вибору стандартів постквантової криптографії, що стимулює розвиток та аналіз нових
алгоритмів.
1.3.1 Загрози постквантових комп’ютерів для сучасної криптографії
Розвиток квантових обчислень ставить перед сучасними криптосистемами
безпрецедентні завдання: згідно з дослідженнями IBM, розробка універсального
квантового комп'ютера з достатньою кількістю кубітів для злому сучасних
криптосистем може стати реальністю вже в найближче десятиліття. Це потребуватиме
детального аналізу потенційних загроз і розробки відповідних захисних механізмів.
Фундаментальною проблемою є вразливість асиметричних криптосистем для
квантових алгоритмів; алгоритм Шора, опублікований у Journal of Science and
Technology, показує можливість факторизації великих чисел за поліноміальний час на
квантовому комп'ютері. Згідно з дослідженнями Національного інституту стандартів
і технологій США (NIST), цей алгоритм може ефективно скомпрометувати широко
використовувані шифри RSA і ECC, засновані на факторизаційній складності та
роботі з дискретними логарифмами.
19
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Аналіз вразливостей наявних криптографічних протоколів, проведений у
рамках дослідження Європейського інституту телекомунікаційних стандартів (ETSI),
виявив значні ризики для інфраструктур відкритих ключів (PKI). Зокрема, протокол
SSL/TLS, що забезпечує безпеку електронної комерції та конфіденційних
комунікацій, потенційно вразливий для атак квантових обчислень.
Дослідження Агентства національної безпеки США (АНБ) підтвердили, що
симетричні криптосистеми більш стійкі до квантових атак. Однак використання
алгоритму Гровера теоретично знижує складність пошуку ключів. Щоб зберегти
еквівалентний рівень безпеки, довжину ключа доведеться подвоїти.
Експериментальні дослідження, проведені в Массачусетському технологічному
інституті, підтвердили необхідність переходу алгоритму AES на довші ключі в
постквантовому середовищі.
Концепція «зберігати зараз, розшифрувати потім», детально описана в роботі
Інституту квантових обчислень, становить особливу загрозу для довгострокової
конфіденційності даних. Згідно з дослідженнями, проведеними в Стенфордському
університеті, зловмисники вже сьогодні можуть накопичувати зашифровані дані і
чекати, поки високопродуктивний квантовий комп'ютер їх розшифрує.
Програма стандартизації постквантової криптографії NIST визначила кілька
перспективних напрямків для розробки криптографічних алгоритмів. До них
належать криптографія на основі решіток, підписи на основі хешів, системи на основі
кодів з корекцією помилок і багатовимірна криптографія.
Технічні аспекти реалізації постквантових алгоритмів, вивчені Microsoft
Research, виявили значні проблеми з погляду обчислювальної ефективності та розміру
ключа. Результати експериментів показують збільшення обчислювального
навантаження на 20-50 % порівняно з класичними алгоритмами, що є особливою
проблемою для вбудованих систем і IoT-пристроїв.
Міжнародний консорціум квантових технологій розробив рекомендації зі
створення гібридних криптосистем, що поєднують класичні та постквантові
20
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
алгоритми. Згідно з дослідженнями, такий підхід дає змогу знайти оптимальний
баланс між безпекою і практичністю реалізації в перехідний період.
Квантове розсіювання ключів (QKD), теоретичні основи якого описано в роботі
Інституту квантової оптики, являє собою альтернативний підхід до безпечної
криптографії. Експериментальна реалізація QKD у Китайській академії наук показує
реальну здійсненність побудови квантових мереж, незважаючи на деякі технічні
обмеження.
Економічний аналіз, проведений Всесвітнім економічним форумом, оцінює
потенційні витрати на глобальний перехід на постквантову криптографію. За
оцінками авторів дослідження, для забезпечення адекватного рівня захисту критичної
інфраструктури протягом наступного десятиліття будуть потрібні інвестиції в розмірі
10-15 мільярдів доларів США. Інтеграція постквантових алгоритмів у наявні системи
вимагає комплексного підходу до управління безпекою. У дослідженні Європейського
агентства кібербезпеки (ENISA) запропоновано методологію оцінки ризиків і
планування переходу, що враховує як технічні, так і організаційні аспекти переходу
на постквантову криптографію.
1.3.2 Огляд постквантових алгоритмів обміну ключами
Постквантові криптографічні алгоритми (PQC) - це криптографічні системи, які
розроблені для протистояння атакам як класичних, так і квантових комп'ютерів. Їх
створення стало необхідним через потенційну загрозу, яку представляють квантові
комп'ютери для сучасної криптографії.
Причини створення постквантових алгоритмів
Загроза квантових комп'ютерів: Квантові комп'ютери можуть ефективно
розв'язувати математичні задачі (наприклад, факторизацію великих чисел і
дискретний логарифм), які лежать в основі безпеки багатьох сучасних криптосистем,
завдяки використанню таких алгоритмів, як алгоритм Шора.
21
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Уразливість наявних систем: широко використовувані алгоритми, як-от RSA,
DSA та ECC, стануть небезпечними з появою високопродуктивних квантових
комп'ютерів.
Довгострокова безпека: дані, які зараз зашифровані, можуть бути збережені
зловмисником і розшифровані в майбутньому, коли з'являться більш
високопродуктивні квантові комп'ютери.
Проактивний підхід: оскільки розробка і реалізація алгоритмів PQC займає
багато часу, важливо почати цей процес заздалегідь.
Основні напрями постквантової криптографії:
1. криптографія на основі решіток,
2. криптографія на основі кодів,
3. багатовимірна криптографія на основі квадратів,
4. криптографія на основі хеш-функцій,
5. криптографія, заснована на однорідності гіперрегулярних еліптичних кривих.
Серед цих напрямів алгоритми обміну ключами на основі решіток (наприклад,
Kyber) виявилися особливо перспективними завдяки своїй ефективності та надійним
гарантіям безпеки.
Детальний огляд постквантових алгоритмів обміну ключами:
1. CRYSTALS-Kyber
CRYSTALS-Kyber - постквантовий алгоритм обміну ключами,
стандартизований NIST у 2022 році. В основі алгоритму лежить проблема навчання з
помилками над модулем (Module-LWE), що реалізується на кільці поліномів.
Алгоритм представлений у трьох варіантах безпеки: Kyber512, Kyber768 та
Kyber1024, що відповідають різним рівням захисту AES.
Процес обміну ключами включає генерацію відкритого та секретного ключів,
інкапсуляцію для створення спільного секрету та його декапсуляцію. Kyber
відзначається високою ефективністю завдяки малим розмірам ключів та швидким
22
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
операціям, має IND-CCA2 безпеку та детерміністичне генерування відкритого ключа.
Однак, як відносно нова система, потребує подальшого аналізу безпеки.
Переваги Kyber:
компактні розміри ключів та висока швидкодія,
офіційна стандартизація NIST,
простота реалізації,
підтверджена IND-CCA2 безпека.
Недоліки Kyber:
відносно молодий алгоритм,
потребує додаткового аналізу довгострокової безпеки,
менший досвід практичного застосування порівняно з класичними
алгоритмами.
2. NTRU
NTRU, запропонований у 1996 році, є одним із найстаріших постквантових
алгоритмів. Він базується на проблемах решітки в кільцях поліномів та використовує
структуру R = Z[X]/(X^N - 1) або R = Z[X]/(X^N + 1). Існує у варіантах NTRU-HPS та
NTRU-HRSS, кожен з яких має свої особливості реалізації.
Алгоритм має довгу історію криптоаналізу, що підвищує довіру до його
безпеки, та демонструє ефективну апаратну реалізацію. Проте NTRU має складнішу
реалізацію порівняно з Kyber та може бути вразливим до атак побічними каналами.
Широко застосовується у фінансовому секторі та IoT пристроях.
Переваги NTRU:
тривала історія криптоаналізу,
надійна репутація в криптографічній спільноті,
ефективна апаратна реалізація,
широке практичне застосування.
Недоліки NTRU:
23
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
складніша реалізація порівняно з новішими алгоритмами,
вразливість до атак побічними каналами,
більші розміри ключів порівняно з Kyber.
3. Saber
Saber - фіналіст конкурсу NIST, що базується на модульній версії проблеми
навчання з округленням (Module-LWR). Алгоритм використовує кільце поліномів R =
Z[X]/(X^n + 1) та представлений у трьох варіантах: LightSaber, Saber та FireSaber, що
відповідають різним рівням безпеки NIST.
За ефективністю Saber можна порівняти з Kyber, а використання округлення
замість додавання помилок спрощує його реалізацію. Хоча алгоритм менш вивчений
порівняно з Kyber та NTRU, він успішно застосовується в захищених комунікаціях 5G
мереж та квантово-стійких VPN системах.
Переваги Saber:
висока ефективність операцій,
простіша реалізація завдяки використанню округлення,
гнучкість у виборі рівня безпеки,
добра продуктивність на різних платформах.
Недоліки Saber:
менш досліджений порівняно з іншими алгоритмами,
не був обраний для стандартизації NIST,
обмежений досвід практичного застосування.
4. NewHope
NewHope - один з перших широко визнаних постквантових алгоритмів,
заснований на кільцевій версії проблеми LWE. Алгоритм використовує кільце
поліномів R = Z[X]/(X^n + 1) та має два варіанти реалізації: семантично безпечний
NewHope-CPA-KEM та IND-CCA2 безпечний NewHope-CCA-KEM.
Незважаючи на високу ефективність та ґрунтовний криптоаналіз, NewHope не
був обраний NIST для стандартизації. Алгоритм знайшов застосування в
24
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
експериментальних реалізаціях браузерів та академічних дослідженнях постквантової
криптографії.
Переваги NewHope:
добре вивчений та проаналізований,
висока ефективність операцій,
простота реалізації,
практичний досвід використання в браузерах.
Недоліки NewHope:
не отримав стандартизацію NIST,
обмежене застосування в сучасних системах,
менш активна підтримка спільноти.
5. FrodoKEM
FrodoKEM представляє консервативний підхід до постквантового обміну
ключами, базуючись на стандартній проблемі LWE без використання додаткових
алгебраїчних структур. Алгоритм працює з матрицями над кільцем цілих чисел та має
три варіанти реалізації: FrodoKEM-640, FrodoKEM-976 та FrodoKEM-1344, що
відповідають різним рівням безпеки AES.
Завдяки використанню добре вивченої проблеми стандартного LWE та
консервативному дизайну, FrodoKEM забезпечує високу довіру до довгострокової
безпеки. Проте це досягається ціною більших ключів та повільніших операцій
порівняно з іншими алгоритмами. FrodoKEM найчастіше використовується в
високозахищених урядових комунікаціях та для довгострокового зберігання
конфіденційних даних.
Переваги FrodoKEM:
висока довіра до довгострокової безпеки,
консервативний дизайн,
базується на добре вивченій проблемі LWE,
25
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
підходить для високозахищених систем.
Недоліки FrodoKEM:
великі розміри ключів,
нижча швидкодія порівняно з іншими алгоритмами,
вимагає більше обчислювальних ресурсів,
менш ефективний для систем з обмеженими ресурсами.
1.4 Симетричні алгоритми в контексті месенджерів
Симетричні алгоритми шифрування є одним з ключових методів забезпечення
інформаційної безпеки в цифровому спілкуванні, в тому числі в месенджерах. В
епоху, коли обмін конфіденційною інформацією на таких платформах, як WhatsApp,
Telegram і Signal, є звичним явищем, важливо забезпечити запобігання
несанкціонованому доступу до неї. Симетрична криптографія забезпечує ефективне
рішення для цієї мети, але вона також має певні обмеження та проблеми.
Симетричні алгоритми шифрування - це криптографічні схеми, які
використовують один і той же ключ для шифрування і розшифрування даних. Це
означає, що відправник і одержувач повідомлення повинні мати один і той же
секретний ключ для шифрування і розшифрування повідомлення.
Симетрична криптографія характеризується високою швидкістю, що робить її
привабливим варіантом для шифрування великих обсягів даних.Найбільш відомі
симетричні алгоритми включають:
AES (Advanced Encryption Standard) - один із найбільш використовуваних
алгоритмів, особливо в месенджерах.
Переваги:
1. має сильний захист проти атак, таких як повний перебір (brute force),
завдяки використанню ключів розміру 128, 192 або 256 біт,
2. оптимізований для апаратної реалізації, що робить його дуже швидким у
сучасних системах;
26
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
3. використовується як стандарт шифрування в багатьох протоколах
(SSL/TLS, WPA2);
4. стандарт, затверджений NIST, що гарантує високу довіру;
5. ефективний навіть у вбудованих системах.
Недоліки:
1. потребує ретельної оптимізації програмної реалізації;
2. уразливий до деяких фізичних атак (наприклад, аналізу споживання
енергії).
DES (Data Encryption Standard) та його покращена версія 3DES - хоча DES
вважається застарілим, його варіант 3DES все ще використовується в деяких
системах.
Переваги:
1. легко реалізується як у програмному, так і в апаратному забезпеченні;
2. використовувався як стандарт шифрування протягом кількох десятиліть;
3. добре працює на застарілих апаратних платформах.
Недоліки:
1. довжина ключа 56 біт робить його вразливим до атаки перебору (brute
force). Сучасні комп'ютери можуть зламати DES за короткий час;
2. не рекомендований до використання через значно підвищену вразливість;
3. використання Triple DES (3DES) лише частково вирішує проблему, але
істотно знижує продуктивність.
Blowfish - також популярний алгоритм шифрування, який відзначається
своєю ефективністю та швидкістю.
Переваги:
1. дуже швидкий у програмній реалізації;
2. підтримує ключі розміру від 32 до 448 біт, що дає можливість балансувати
між безпекою та продуктивністю;
3. вільно використовується у відкритих проєктах;
27
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
4. не має відомих ефективних атак, які знижували б безпеку алгоритму.
Недоліки:
1. ініціалізація алгоритму (створення таблиць підстановки) може бути
повільною та вимогливою до пам’яті.
2. не завжди підходить для нових протоколів через появу більш ефективних
альтернатив (наприклад, AES).
3. існують варіанти атак (наприклад, на слабкі ключі) за специфічних умов.
Багато сучасних месенджерів використовують різні схеми шифрування для
захисту повідомлень. Наприклад, багато месенджерів застосовують симетричне
шифрування на певних етапах передачі даних. Однак через необхідність зберігати і
передавати ключі між користувачами симетричні алгоритми зазвичай комбінуються з
асиметричними для управління ключами.
Застосування симетричних алгоритмів у месенджерах:
коли користувач надсилає повідомлення, воно шифрується за допомогою
симетричного алгоритму, такого як AES. Це забезпечує конфіденційність
повідомлення під час його пересилання через мережу;
у багатьох месенджерах для кожної сесії або навіть для кожного
повідомлення генерується унікальний симетричний ключ. Це означає, що навіть якщо
зловмисник отримає один із ключів, він не зможе розшифрувати інші повідомлення,
які використовують інші ключі;
оскільки головна проблема симетричного шифрування — це передача
ключа, вона вирішується за допомогою асиметричної криптографії, такої як алгоритм
RSA. Відправник використовує відкритий ключ отримувача для зашифрування
симетричного ключа і передає його разом із повідомленням. Отримувач, у свою чергу,
використовує свій приватний ключ для розшифрування симетричного ключа і вже
ним — для дешифрування повідомлення.
Приклад використання симетричного шифрування: WhatsApp
28
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
WhatsApp використовує протокол Signal, що поєднує симетричне та
асиметричне шифрування для забезпечення захищених комунікацій. Основні
компоненти протоколу:
кожне повідомлення зашифровується у відправника та розшифровується
лише у отримувача. Використовуються симетричні алгоритми для шифрування тіла
повідомлення і асиметричні для захисту ключів;
для кожної нової розмови між двома користувачами генерується новий
симетричний ключ, що унеможливлює розшифрування старих повідомлень навіть при
компрометації ключа.
Симетричні алгоритми мають кілька переваг у порівнянні з асиметричними:
симетричне шифрування набагато швидше, ніж асиметричне, що робить
його зручним для шифрування великих обсягів даних;
алгоритми шифрування, такі як AES, добре вивчені і широко
використовуються, що робить їх надійними і безпечними за умови правильного
використання.
Проте симетричні алгоритми також мають певні недоліки:
відправник і отримувач повинні безпечно обмінятися ключами до початку
шифрування, що є суттєвим викликом;
у разі компрометації ключа зловмисник отримає доступ до всієї
зашифрованої інформації, яка була зашифрована з використанням цього ключа.
29
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
2 ТЕОРЕТИЧНІ ОСНОВИ РЕАЛІЗАЦІЇ ЗАХИЩЕНОГО TELEGRAM-БОТУ
2.1 Архітектура Telegram Bot API
Telegram Bot API - це потужний інструмент, який дозволяє розробникам
створювати ботів для популярного месенджера Telegram. Завдяки своїй архітектурі
API гарантує ефективну та надійну взаємодію між ботами та користувачами,
автоматизує різні процеси та забезпечує інтерактивний досвід.
Основні компоненти:
боти - програми, які взаємодіють з користувачами Telegram. Кожен бот
має унікальний токен, який використовується для валідації запитів до API. Боти
можуть виконувати різні дії, такі як надсилання повідомлень, обробка команд та
управління користувачами;
центральний сервер, який обробляє всі запити від ботів і користувачів. Він
відповідає за маршрутизацію повідомлень, управління даними та виконання запитів
до API;
API Telegram Bot - набір методів для виконання дій при взаємодії бота з
користувачами; API має велику кількість методів, які можна використовувати для
різних цілей, наприклад, надсилання текстових повідомлень, зображень і відео,
інтерактивних кнопок, опитувань і створення меню. Це працює таким чином:
Telegram Bot API працює за принципом клієнт-серверної архітектури. Коли
користувач надсилає повідомлення боту, це повідомлення надсилається на сервер
Telegram. Сервер обробляє це повідомлення, викликаючи відповідний метод API бота
і генеруючи відповідь Основні принципи роботи API такі:
кожен запит API повинен містити токен бота для забезпечення безпеки;
токен, наданий BotFather, є унікальним для кожного бота і необхідний для доступу до
всіх методів API;
сервер Telegram отримує запити від користувачів, обробляє їх і надсилає
відповідному боту. Це забезпечує швидкий і надійний обмін інформацією;
30
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
АPI Telegram-бота підтримує різні формати повідомлень, включаючи
текст, зображення, відео та документи. Боти можуть надсилати повідомлення з
форматуванням (HTML або Markdown) та інтерактивними елементами, такими як
кнопки та меню.
API Telegram Bot підтримує два основних способи отримання оновлень:
метод пуш-сповіщень надсилає періодичні запити до API для отримання
нових повідомлень. Боти можуть регулювати інтервал між запитами, але можуть
виникати затримки у відповіді на повідомлення. Цей метод легко реалізувати для
невеликих ботів, але він може бути неефективним для великих проектів;
веб-хуки дозволяютьботам отримувати повідомлення в режимі реального
часу. Коли бот встановлює веб-хук, він вказує URL-адресу, на яку Telegram надсилає
POST-запити на оновлення. Оскільки боту не потрібно постійно запитувати сервер,
затримки відповідей і навантаження на сервер значно зменшуються.
Telegram Bot API має вбудовані механізми безпеки для захисту даних
користувача і бота. Основні міркування щодо безпеки такі:
токени бота повинні зберігатися в безпечному місці. Їх компрометація
може призвести до несанкціонованого доступу та зловживань;
API має обмеження на кількість запитів, які бот може відправити за
одиницю часу. Це запобігає зловживанням і перевантаженню сервера;
боти можуть використовувати механізми автентифікації та верифікації
користувачів, щоб контролювати, які користувачі можуть взаємодіяти з ботом.
Що до функціональності, то Telegram Bot API надає розробникам цілий ряд
функціональних можливостей, а саме:
1. боти можуть використовувати кнопки, меню та опитування для
покращення користувацького досвіду. Це дозволяє створювати складні сценарії
взаємодії і робить ботів більш корисними.
2. боти можуть надсилати текстові повідомлення, а також такі медіа, як
фотографії, відео, GIF-файли та документи, і налаштовувати анотації до файлів.
31
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
3. боти можуть працювати в групах і взаємодіяти з кількома користувачами
одночасно. Це відкриває можливості для створення групових ігор, опитувань та інших
інтерактивних заходів.
Інша функціональність API також підтримує геолокацію, інтеграцію платежів,
управління користувачами та даними та інші функції для створення різних варіантів
використання.
Для створення ботів у Telegram важливо використовувати BotFather - офіційний
бот для управління іншими ботами. Ви можете створювати нових ботів, змінювати
їхні налаштування та отримувати токени. Щоб створити бота, потрібно відправити
команду /newbot і вказати ім'я та унікальний логін.
Рисунок 2.1 – Телеграм-бот BotFather
Telegram Bot API також включає в себе документацію з детальним описом всіх
методів, їх параметрів і можливих відповідей. Ця документація є важливим ресурсом
для розробників, оскільки містить інформацію, необхідну для реалізації різних
функцій у своїх ботах. Виходячи з цього, розробники мають доступ до всіх
інструментів, необхідних для створення ефективних і корисних ботів у Telegram.
2.2 Алгоритм обміну ключами Kyber
Криптографічний алгоритм Kyber є результатом тривалих досліджень у галузі
пост-квантової криптографії, зумовлених необхідністю захисту інформаційних
систем від потенційних загроз з боку квантових комп'ютерів.
Народження Kyber почалося з усвідомлення того, що традиційні криптографічні
механізми, такі як RSA та еліптичні криві, можуть втратити свою стійкість перед
обчислювальною потужністю квантових машин в умовах стрімкого розвитку
квантових технологій. Міжнародна група дослідників мала розробити радикально
32
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
новий підхід до генерації та обміну ключами, заснований на математичних проблемах,
на які не впливають квантові алгоритми.
Фундаментальний інститут був основною дослідницькою групою, що
працювала над розробкою Kyber, і розташовувався в декількох провідних технічних
університетах світу. Особливу увагу вчені приділили математичному апарату
решітчастої криптографії і використовували складні алгебраїчні структури, щоб
зробити алгоритм практично неможливим для розшифровки.
Головна відмінність Kyber від класичних криптосистем полягає в унікальному
механізмі генерації ключів. Замість традиційного підходу, заснованого на
факторизації великих чисел і дискретних логарифмів, алгоритм використовує
надзвичайно складні математичні перетворення багатовимірних решіток. Це означає,
що для злому таких систем зловмисникам потрібно розв'язувати обчислювально
складні математичні задачі, які вимагають величезних обчислювальних потужностей.
Архітектура Kyber забезпечує три рівні безпеки для різних сценаріїв використання:
Kyber512 призначений для легких систем з обмеженими обчислювальними ресурсами
і забезпечує базовий рівень захисту, еквівалентний 128-бітному AES; Kyber768 є
більш потужною версією і забезпечує посилений захист для корпоративних і урядових
систем зв'язку. Найвищий рівень, Kyber1024, призначений для критично важливих
інфраструктур, які потребують найвищого рівня криптографічного захисту.
Алгоритм характеризується надзвичайно високою продуктивністю порівняно з
іншими пост-квантовими рішеннями. Дослідження показали, що Kyber може
виконувати криптографічні операції в 10 разів швидше, ніж альтернативні алгоритми,
що робить його привабливим для впровадження в реальні системи.
В основі механізму Kyber лежить концепція «шумних» поліноміальних
перетворень. Під час генерації ключа генерується спеціальна матриця з випадковими
коефіцієнтами, які неможливо оцінити, не знаючи секретного ключа. Це гарантує
надзвичайно високу ентропію та унеможливлює вгадування ключа.
33
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Важливою перевагою Kyber є те, що він дозволяє мініатюризувати ключі
шифрування. У той час як традиційні асиметричні алгоритми вимагають ключів
розміром у кілька кілобайт, Kyber дозволяє використовувати дуже маленькі ключі
розміром всього в кілька сотень байт.
Міжнародне визнання Kyber було підтверджено його перемогою в конкурсі
Національного інституту стандартів і технологій США (NIST). Це означає, що
алгоритм пройшов ретельну перевірку провідними криптографами світу і
рекомендований для впровадження в критично важливих системах.
Сьогодні Kyber розглядається не просто як криптографічний алгоритм, а як
технологічний стандарт майбутнього. Очікується, що він буде застосовуватися в
багатьох сферах, де потрібен найвищий рівень захисту інформації, таких як
телекомунікаційні мережі, банківські системи, урядовий зв'язок і супутникові мережі.
Математичні основи алгоритму Kyber
Байти та байтові масиви. Вхідні та вихідні дані для всіх функцій API Kyber є
масивами байтів. Для спрощення позначення ми позначимо через B набір {0,...,255}і.д,
тобто набір 8-розрядних цілих чисел (байтів) без знаку. Отже, ми позначаємо набір
масивів байтів довжиною k і ∗ набір масивів байтів довільної довжини (або потоки
байтів. Для двобайтових масивів a і b позначаємо (a||b) конкатенацію a і b. Для
байтового масиву a ми позначаємо a + k масив байтів, що починається з байта k масиву
a (з індексацією, починаючи з нуля).
Наприклад, нехай a буде масивом байтів довжиною ℓ, нехай b буде іншим
масивом байтів і нехай c = (a||b) буде конкатенацією a і b; тоді b = a + ℓ. Якщо зручніше
працювати з масивом бітів, ніж масивом байтів, ми робимо це перетворення явним за
допомогою функції BytesToBits, яка приймає як вхідні дані масив з ℓ байтів і створює
як вихід масив з 8ℓ бітів. Біт ꞵ у позиції i масиву вихідних бітів отримується з байта
( 8)
/8=8 у позиції i/8 вихідного масиву шляхом обчислення ꞵ = (/2 2 ).
34
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Поліноміальні кільця та вектори. Позначимо через R кільце []/( + 1), а
′ ′
через кільце []/( + 1), де = 2 −1 такий, що + 1 є 2 циклотомічним
поліномом. Значення n, ′і q фіксуються на n = 256, ′ = 9 і q = 3329. У системі
позначень використовується наступна конвенція: стандартні (не жирні) символи
позначають компоненти, що належать до множин R або Rq (які охоплюють елементи
з Z та ). Для представлення векторів, чиї складові належать до R або ,
застосовуються жирні літери нижнього регістру. Важливо зазначити, що за
відсутності додаткових вказівок усі вектори розглядаються як вектори-стовпці.
Матричні величини позначаються жирними літерами верхнього регістру.
Коли йдеться про транспонування, для вектора v використовується
позначення, аналогічно для матриці A - . При роботі з окремими елементами
вектора v, його i-тий компонент записується як [], де нумерація починається з нуля.
У випадку матриці A, елемент, що знаходиться на перетині i-того рядка та j-того
стовпця, позначається як А[][], також використовуючи нульову індексацію.
Модульні скорочення. Для марного (відповідно немарного) позитивного цілого
числа α визначається ′ = ±α як унікальний елемент ′ в діапазоні − < ′ ≤
2
−1 −1
, відповідно − < ′ ≤ такий що ′ = α. Для будь якого позитивного
2 2 2
цілого числа α визначається ′ = ±α як унікальний елемент в діапазоні0 ≤ ′ <
, такий що ′ = α. Коли точне представлення неважливе, ми просто пишемо
α .
Округлення. Для елемента х ∈ позначимо через [x] округлення x до
найближчого цілого числа з округленням у більшу сторону.
Розміри елементів. Для елемента ∈ пишемо || ||∞ що означає | ±|
Визначаємо норми ℓ∞ і ℓ2 для = 0 + 1 + ⋯ + −1
−1 ∈ :
Так само для w = (1, … ,
) ∈ визначаємо:
35
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Множини та розподіли. Для множини S пишемо ← , щоб позначити, що
вибрано рівномірно випадковим чином з множини . Якщо є розподілом
ймовірностей, то це означає, що вибрано відповідно до розподілу .
Компресія та декомпресія. Визначаєму функцію Compressq(x; d), яка приймає
елементи ∈ і виводить ціле число у діапазоні 0, … , 2 − 1, де < [2()].
Окрім того визначається функція Decompressq, яка має вигляд:
(1)
є елементом близьким до х, точніше:
(2)
Функції, що задовільняють цим вимогам визначаються так:
Якщо Compressq або Decompress
q використовується з ∈ або ∈ ,
процедура застосовується до кожного коефіцієнта окремо. Основною причиною
визначення функцій Compressq і Decompressq є зменшення розміру зашифрованого
тексту шляхом відкидання деяких молодших бітів, які не впливають суттєво на
ймовірність розшифрування. Крім того, функції Compressq і Decompressq
використовуються не для стиснення, а для виконання звичайної LWE-корекції
помилок під час шифрування і розшифрування. Точніше, у рядку 20 процедури
шифрування функція Decompressq використовується для генерації смуги помилок
шляхом пересилання біта повідомлення 0 до 0 і 1 до [/2]. Пізніше, у рядку 4
процедури дешифрування, функція Compressq використовується для дешифрування
до 1, якщо − ближче до [/2], ніж до 0, і дешифрування до 0 в іншому випадку.
Симетричні примітиви. Дизайн Kyber використовує псевдовипадкову функцію
: 32 × → ∗ і розширюваної вихідної функції : ∗ × × → ∗. Kyber
36
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
також використовує дві хеш-функції : ∗ → 32і : ∗ → 32 × 32 і функцію
отримання ключа : ∗ → ∗.
NTTs, множення та бітовий порядок. Дуже ефективним способом виконання
множень у Rq є так зване теоретико-числове перетворення (NTT). Для простого числа
q = 3329 з − 1 = 28 × 13 базове поле Zq містить примітивні 256-ті корені з одиниці,
але не примітивні 512-ті корені. Отже, визначальний поліном X256 + 1 або R
розкладається на 128 поліномів ступеня 2 за модулем q, а NTT полінома ∈ є
вектором із 128 поліномів ступеня один. Прості реалізації NTT на місці без зміни
порядку виводять ці поліноми в бітовому порядку, і ми визначаємо NTT таким чином.
Конкретно, нехай ζ =17 буде перший первинний 256-тий корінь з одиниці за модулем
q і ζ, ζ3, ζ5, … , ζ255 множина всіх 256-тих коренів з одиниці. Тому поліном X256 + 1
можна записати як:
де br7(i) для і = 0,…, 127 – розрядність 7-бітного цілого числа i. Цей останній порядок
факторів корисний для сумісності з особливостями інструкцій AVX. Тоді NTT ∈
надано
(3)
Цей вектор лінійних поліномів потім серіалізується до вектора
в 256
канонічним способом. Крім того, щоб не вводити додаткові типи даних і
полегшити реалізацію NTT на місці, визначаємо: → бієкція, яка відображає
∈ на поліном із вищезгаданим вектором коефіцієнтів. Отже,
з
(4)
37
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
(5)
Використовуючи NTT та його зворотний NTT-1 можна обчислити добуток двох
елементів × , , ∈ дуже ефективно як −1(() × ()), де () ×
() = × ?̂? = ℎ̂ позначає базове множення, що складається з 128 добутків.
Коли ми застосовуємо NTT або NTT-1 до вектора матриці елементів Rq , це означає, що
відповідна операція застосовується до кожного запису окремо. Коли застосовуємо до
матриць або векторів, це означає, що ми виконуємо звичайне множення матриць, але
що окремі продукти записів є наведеними вище множеннями в базовому випадку.
Рівномірна вибірка в Rq. Kyber використовує детермінований підхід до вибірки
елементів у Rq, які статистично близькі до рівномірно випадкового розподілу. Для цієї
вибірки використовуємо функцію ∶ ∗ → , яка отримує на вхід потік байтів
= 012 …. і обчислює NTT-представлення а̂ = а0 ̂ + а0 ̂Х + ⋯ а−1̂−1 ∈
і ∈ .
Вибірка з біноміального розподілу. Шум у Kyber вибирається з центрованого
біноміального розподілу для = 2 або = 3. визначається наступним
чином:(1, … , , 1, … , ) ← {0,1}2 і виводиться ∑
=1( − ).
Коли вказуємо, що поліном ∈ або вектор таких поліномів вибирається з
. Для специфікації Kyber нам потрібно визначити, як поліном ∈
детерміновано відбирається відповідно до із 64n байтів виводу псевдовипадкової
функції (ми фіксуємо n = 256 у цьому описі). Це робиться за допомогою функції CBD
(для «центрованого біноміального розподілу»).
Кодування та декодування. . Існує два типи даних, які Kyber має серіалізувати в
байтові масиви: байтові масиви та (вектори) поліномів. Масиви байтів тривіально
38
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
серіалізуються за допомогою ідентичності, тому нам потрібно визначити, як ми
серіалізуємо та десеріалізуємо поліноми. Decodeℓ, яка десеріалізує масив із 32ℓ байтів
у поліном = 255
0 + 1 + … + 255 (ми знову фіксуємо n = 256 у цьому описі)
з кожним коефіцієнтом ℓ
в {0, … , 2 − 1}. Після чого визначаємо функцію Encodeℓ як
зворотну до Decodeℓ. Щоразу, коли ми застосовуємо Encodeℓ до вектора поліномів, ми
кодуємо кожен поліном окремо та об’єднуємо вихідні масиви байтів.
2.3 Загальна структура AES
У версії алгоритму AES-128 використовується ключ шифрування, який
складається з 128 бітів, поділених на 16 байтів: k0, k1, ..., k15. Ключ записується як
матриця InputKey, де кожен стовпець матриці утворює слово w0, w1, w2, w3, де w0 =
k0 k1 k2 k3, w1 = k4 k5 k6 k7 і т.д..
Рисунок 2.2 – Матриця InputKey
Спеціальний алгоритм перетворює ці слова в послідовність з 44 слів по 32 біти
кожне. Кожні чотири слова цього рядка використовуються як раундовий ключ для
кожного раунду шифрування.
39
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 2.3 – Ключовий розклад
Перед першим раундом виконується операція AddRoundKey, яка збирає модуль
2 і перший ключ шифрування. Процес шифрування складається з чотирьох різних
перетворень, які виконуються в кожному раунді: SubBytes, ShiftRows, MixColumns і
AddRoundKey. Пояснення:
SubBytes - це побайтова підстановка, яка використовує фіксовану
таблицю замін S-боксу.
ShiftRows - це побайтове зсув рядків матриці State на різну кількість байт.
MixColumns – це перемішування байтів у стовпцях матриці State.
AddRoundKey - це операція XOR, яка складає раундовий ключ із
поточним станом матриці.
Останній раунд дещо відрізняється від попередніх, оскільки не
використовується функція MixColumns.
Для розшифрування в кожному раунді виконується зворотна операція:
InvShiftRows, InvSubBytes, AddRoundKey та InvMixColumns. Порядок операцій
відрізняється при шифруванні та дешифруванні, причини цього стануть зрозумілими
після більш детального розгляду кожного перетворення.
40
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
2.4 Математичні основи криптоалгоритму AES
Операції в оболонці GF(28) є фундаментальним елементом алгоритму
шифрування AES. Для забезпечення безпеки даних AES використовує скінченну
оболонку Галуа GF(28). Вона побудована як розширення тіла GF(2) = {0,1} і її
модулем є поліном m(x) = x8+x4+x3+x+1. Це поле має 256 поліномів і дозволяє
виражати двійкові числа у вигляді бітових поліномів.
Додавання байт у GF(28) можна виконати кількома способами. Один метод
полягає у представленні байтів у вигляді бітових поліномів, додаванні поліномів за
правилами додавання і перетворенні коефіцієнта суми за модулем 2 (операція XOR).
Відповідні біти можна додавати в байтах, або байти можна додавати в
шістнадцятковій системі числення.
Щоб перемножити байти поля GF(28), представте їх у вигляді полінома і
перемножте за правилами алгебри. Отриманий добуток потрібно піднести до степеня
за модулем полінома x8+x4+x3+x+1 (результат - це залишок від добутку, поділений
на m(x)). У полі GF(28) для будь-якого ненульового бітового багаточлена b(x) існує
зворотний елемент b-1(x), який може бути знайдений за допомогою розширеного
алгоритму Евкліда.
Багаточлени третього ступеня з коефіцієнтами поля GF(28) представляються у
вигляді a(x) = a3x3+a2x2+a1x+a0, де в ролі коефіцієнтів задіяні байти замість біт. У
стандарті AES при множенні багаточленів виду a(x)=a3x3+a2x2+a1x+a0
використовується приведення за модулем багаточлена x4+1.
Завдяки використанню кінцевого поля GF(28) в алгоритмі шифрування AES, дані
можуть бути зашифровані та захищені від несанкціонованого доступу.
2.5 Раундове перетворення в AES
Розглянемо детальніше процедуру перетворення раунду шифрування на
прикладі операції SubBytes. У цій операції виконується нелінійна заміна байтів на
матриці станів, де кожен байт замінюється незалежно від інших. Для виконання
заміни кожен вхідний байт зазнає двох перетворень:
41
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
інвертування елементів поля GF(28), яке є оборотною операцією,
застосування афінного перетворення, яке включає множення
інвертованого байта на многочлен a(x) = x4 + x3+x2+x+1 та додавання з многочленом
b(x) = x6+ x5+x+ 1 у полі F2[x]/x8 +1.
Важливо, що а-1(x) = x6+x3+x, а a-1(x)b(x) = x2+1. Таким чином, операція
SubBytes може бути записана у матричній формі, де вхідні біти позначаються x, а
вихідні – y. Якщо вхідний байт є нульовим, то результатом заміни буде число y=b.
Рисунок 2.4 – Процедура SubBytes у матричній формі
Процес заміни байтів ілюструється таблицею підстановки, яка називається S-
боксом у шістнадцятковій системі.
Рисунок 2.5 – Таблиця підстановки S-box
42
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Це перетворення є нелінійним перетворенням через обернену матрицю x-1 і є
оборотним завдяки інвертованості матриці. S-бокси, створені на основі цієї операції,
дозволяють забезпечити більший захист даних в процесі шифрування.
Операція ShiftRows використовується в процесі шифрування даних. Ця операція
виконується над матрицею станів, яка є блоком даних, що підлягає шифруванню.
В рамках цієї операції кожен рядок матриці циклічно зсувається на певну
кількість байт вправо. При цьому перший рядок матриці залишається незмінним, а
елементи трьох нижніх рядків зсуваються на 1, 2 і 3 байти відповідно. Це переставляє
елементи матриці в рядках, змінюючи порядок елементів у кожному рядку, але не їх
кількість та значення.
Рисунок 2.6 – Операція ShiftRows
Важливо, що операція ShiftRows є оборотною, тобто її можна легко скасувати
та відновити вихідний стан матриці State. Це забезпечує збереження даних при їх
розшифровці.
Операція MixColumns є процес перемішування байтів в стовпцях матриці State,
де кожен стовпець представляється як многочлен над полем GF(28). Для виконання
цієї операції кожен стовпець множиться на фіксований багаточлен c(x) = c3x3+ c2x2
+ cx+c0 = {03}x3 + {01}x2 + {01}x + {02} модулю многочлена x4 +1.
43
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Важливо відзначити, що многочлен c(x) взаємно простий з многочленом x4+1
над полем GF(2), що дозволяє існувати зворотному багаточлену c-1(x)(mod x4+1) і
матриці оборотної для виконання зворотної операції MixColumns.
Рисунок 2.7 – Операція MixColumns
Операція AddRoundKey виконує операцію побітового додавання елементів
матриці State з елементами розширеного ключа W[4r+1], де r - номер поточного
раунду. Під час шифрування перше додавання ключа раунду відбувається до операції
SubBytes, після якої виконуються операції ShiftRows та MixColumns.
Рисунок 2.8 – Операція AddRoundKey
44
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Як показано на малюнку 2.9, два раунди забезпечують повне розсіювання та
перемішування інформації. Досягається це за рахунок використання функцій
ShiftRows та MixColumns.
Рисунок 2.9 – Властивості розсіювання та перемішування інформації в ході
шифрування криптоалгоритмом AES
Операція SubBytes підвищує стійкість до атак диференційного криптоаналізу, а
операція AddRoundKey забезпечує необхідну випадковість для шифрування.
2.6 Ключовий розклад в AES
Раундови0439 ключ використовується для шифрування даних за допомогою
криптографічного ключа K. Ключ генерується з K за допомогою процедури
розширення ключа для створення набору круглих ключів. Кожен раундовий ключ
складається з 4-байтового слова, а загальна довжина всіх ключів становить 128 біт.
Необхідний раундовий ключ вибирається з масиву.
Для генерації ключів використовується формула, яка визначає слово наступного
ключа на основі попереднього. У першому раунді перші чотири слова збігаються з
ключем шифрування, а решта 40 слів вибираються.
Перше слово в кожному раундовому ключі обчислюється за допомогою функції
g, яка включає циклічний зсув, заміну байтів і підсумовування з постійною раундовою
Rcon[i]. Це допомагає уникнути симетрії, яка може призвести до слабких ключів.
Алгоритм розширення ключа показано на малюнку нижче.
45
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 2.10 – Алгоритм розширення ключа
2.7 Розшифрування в алгоритмі AES
Для розшифрування зашифрованого тексту використовується серія перетворень
розшифрування, які є зворотними до перетворень шифрування. Перед першим
раундом розшифрування виконується операція AddRoundKey і до зашифрованого
тексту додаються останні чотири слова розширеного ключа. Потім виконується десять
раундів дешифрування, кожен з яких складається з наступних операцій:
1. операція InvShiftRows. Циклічно зсуває байти в останніх трьох рядках
матриці станів на різну кількість байт у порядку, зворотному операції ShiftRows.
Перший рядок фіксується, а три останні зсуваються праворуч на 1, 2 та 3 байти
відповідно.
2. операція InvSubBytes: замінює байти матриці станів новими значеннями,
використовуючи інверсію перевернутого S-боксу.
3. операція InvMixColumns, яка є оберненою до операції MixColumns: Множить
кожен стовпець матриці станів на постійний поліном c^-1(x) за модулем полінома x4
+ 1.
46
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
4. операція AddRoundKey є власною оберненою операцією, оскільки
складається лише з суми за модулем 2.
Останній раунд розшифрування не включає операцію InvMixColumns. Важливо
відзначити, що порядок операцій розшифрування відрізняється від порядку операцій
шифрування. Однак, комутативність операцій SubBytes і ShiftRows та лінійність
операцій MixColumns і InvMixColumns дозволяють створити іншу еквівалентну
процедуру розшифрування, де порядок операцій не змінюється навіть при виконанні
зворотних операцій. Порядок процедур AddRoundKey та InvMixColumns також можна
змінити на протилежний (залишивши перші та останні чотири слова без змін),
замінивши круглі ключові слова на процедуру InvMixColumns.
2.8 Режими виконання симетричного блокового шифрування
Симетричні блокові шифри - це схеми шифрування, які використовують однакову
ключову інформацію для шифрування і розшифрування повідомлення.
Для забезпечення безпеки та конфіденційності інформації, що передається,
симетричні блокові шифри використовують спеціальний алгоритм для перетворення
відкритого тексту в нерозбірливу форму (шифрований текст). Дані перетворюються в
блоки фіксованої довжини, і кожен блок шифрується і розшифровується за допомогою
одного ключа.
Симетричний блоковий шифр має кілька режимів виконання, які визначають, як
шифр застосовується до блоку повідомлення.
Основні режими виконання включають:
ECB (Electronic Codebook),
CBC (Cipher Block Chaining),
OFB (Output Feedback),
CFB (Cipher Feedback),
CTR (Counter).
2.8.1 Режим ECB (Electronic Codebook)
47
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
ECB (Electronic Codebook) - це симетрична схема блочного шифрування, в якій
відкритий текст розбивається на блоки однакового розміру і шифрується окремо за
допомогою одного і того ж ключа. Кожному блоку відкритого тексту відповідає блок
зашифрованого тексту, що полегшує відновлення відкритого тексту з зашифрованого.
Процес шифрування в режимі ECB складається з наступних кроків:
1. Розбиття повідомлення на блоки однакового розміру - відкритий текст
розбивається на блоки фіксованого розміру, наприклад, на 64 біта або на 128 біт.
2. Шифрування кожного блоку відкритого тексту - кожен блок відкритого
тексту шифрується окремо за допомогою блочної криптографії, наприклад, за
допомогою шифрування AES. Ключ для шифрування кожного блоку однаковий, що
дозволяє легко відновити вихідний текст з шифротексту.
3. Формування шифротексту - кожен з шифротекстів має таку ж довжину, як
і відповідний блок відкритого тексту. Шифротексти об'єднуються у послідовність, що
і утворює шифрований текст.
Режим ECB має ряд переваг, таких як простота реалізації, легке
розпаралелювання процесу шифрування і можливість прискорити обробку великих
обсягів даних. Однак цей режим має суттєві недоліки і не підходить для використання
в сучасних криптосистемах.
Одним з найбільших недоліків ECB є те, що він не забезпечує конфіденційність.
Незалежно від місця в повідомленні, один і той же блок відкритого тексту завжди
шифрується в один і той же зашифрований текст. Це призводить до того, що з
відкритого тексту створюються шаблони, які дозволяють зловмиснику проаналізувати
зашифрований текст і відновити оригінальний текст.
Крім того, оскільки ECB не забезпечує цілісність автентичності повідомлень і
даних, можна модифікувати повідомлення, не знаючи ключа шифрування.
Наприклад, якщо відомо, що відкритий текст складається з двох блоків:
«Перекажіть $1,000 на рахунок А» і “Перекажіть $2,000 на рахунок Б”. Навіть не
48
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
знаючи ключа шифрування, зловмисник може відновити відкритий текст із
зашифрованого і дізнатися номер рахунку та суму переказу.
У цьому контексті режим ECB використовується дуже рідко і лише тоді, коли
конфіденційність даних не є критичною, а пріоритетами є швидкість і простота
реалізації.
2.8.2 Режим CBC (Cipher Block Chaining)
Режим шифрування CBC (Cipher Block Chaining) є одним з найбільш поширених
та надійних режимів блокового шифрування. У цьому режимі, перед шифруванням
кожен блок відкритого тексту використовується для XOR з попереднім блоком
шифротексту. Це дозволяє забезпечити надійний захист від атак типу "зведення до
шаблону", що можуть виникнути в режимі ECB (Electronic Codebook).
Алгоритм шифрування CBC працює наступним чином:
1. розбиваємо відкритий текст на блоки однакового розміру, наприклад, по
64 біти,
2. генеруємо випадковий вектор ініціалізації (IV) довжиною, яка співпадає з
розміром блоку шифрування, наприклад, 64 біти,
3. перший блок відкритого тексту XOR-имо з IV,
4. отриманий результат шифруємо за допомогою блокового шифру,
наприклад, AES,
5. отриманий шифротекст переходить до наступного блоку та
використовується для XOR з наступним блоком відкритого тексту,
6. отриманий результат шифрується знову за допомогою блокового шифру,
7. процес шифрування повторюється для кожного блоку відкритого тексту,
8. останній блок шифрутексту стає вектором ініціалізації наступного
повідомлення.
Для розшифрування повідомлення виконуємо наступні кроки:
1. розбиваємо шифротекст на блоки однакового розміру, який співпадає з
розміром блоку шифрування, наприклад, 64 біти,
49
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
2. шифрутекст розшифровується за допомогою блокового шифру,
3. отриманий результат XOR-имо з попереднім шифрованим блоком або
вектором ініціалізації (IV),
4. отриманий результат стає відкритим текстом,
5. процес розшифрування повторюється для кожного блоку шифрутексту.
При використанні режиму CBC, важливо, щоб вектор ініціалізації був
випадковим та унікальним для кожного повідомлення. Якщо вектор ініціалізації
використовується двічі для різних повідомлень, це може призвести до витоку
інформації про вміст повідомлень.
Іншою проблемою, пов'язаною з режимом CBC, є потреба у відокремленій
передачі вектора ініціалізації разом із шифрованим повідомленням, оскільки він
потрібен для розшифрування повідомлення. Якщо зловмисник зможе перехопити
вектор ініціалізації та шифрований текст, він зможе розшифрувати повідомлення.
Незважаючи на ці проблеми, режим CBC вважається дуже надійним та широко
використовується в багатьох застосуваннях, включаючи захист електронної пошти,
зберігання файлів, передачу даних через мережу та інші.
2.8.3 Режим Output Feedback (OFB)
Режим Output Feedback (OFB) - це один з режимів блокового шифрування, який
дозволяє створювати потоковий шифр з блокового шифру. У режимі OFB блоковий
шифр використовується для створення випадкового потоку даних, який потім
використовується для шифрування відкритого тексту.
Процес шифрування у режимі OFB складається з наступних кроків:
1. створюється випадковий вектор ініціалізації, який має таку ж довжину, як
і блок шифрування,
2. вектор ініціалізації шифрується за допомогою блокового шифру,
3. отримане значення використовується для шифрування відкритого тексту
за допомогою операції XOR,
4. результат XOR стає випадковим потоком даних,
50
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
5. випадковий потік даних використовується для шифрування відкритого
тексту за допомогою операції XOR,
6. отримане значення дешифрується за допомогою блокового шифру,
7. отриманий результат стає відкритим текстом,
8. процес повторюється для кожного наступного блоку відкритого тексту.
Один з головних переваг режиму OFB полягає в тому, що він не потребує
розподілу вектора ініціалізації разом із шифрованим текстом. Це означає, що режим
OFB може бути використаний для шифрування даних у режимі потоку без
необхідності передачі блоків даних. Також режим OFB має добру властивість
самосинхронізації, що дозволяє зберігати синхронізацію між шифрувальником та
розшифрувальником, навіть якщо деякі біти випадкового потоку даних були втрачені
чи пошкоджені під час передачі.
2.8.4 Режим CFB (Cipher Feedback)
Режим Cipher Feedback (CFB) - це один з режимів блокового шифрування, який
дозволяє створювати потоковий шифр з блокового шифру. У режимі CFB блоковий
шифр використовується для створення випадкового потоку даних, який потім
використовується для шифрування відкритого тексту.
Процес шифрування у режимі CFB складається з наступних кроків:
1. створюється вектор ініціалізації, який має таку ж довжину, як і блок
шифрування,
2. вектор ініціалізації шифрується за допомогою блокового шифру,
3. отримане значення використовується для шифрування першого блоку
відкритого тексту за допомогою операції XOR,
4. отримане значення перетворюється на випадковий потік даних,
5. випадковий потік даних використовується для шифрування наступного
блоку відкритого тексту за допомогою операції XOR,
6. отриманий результат дешифрується за допомогою блокового шифру,
7. отриманий результат стає відкритим текстом,
51
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
8. процес повторюється для кожного наступного блоку відкритого тексту.
У режимі CFB блоковий шифр використовується для створення випадкового
потоку даних, який потім використовується для шифрування відкритого тексту. Цей
потік даних може бути використаний для шифрування великої кількості даних у
режимі потоку без необхідності передачі блоків даних.
Один з переваг режиму CFB полягає в тому, що він дозволяє шифрувати будь-
який розмір даних, навіть якщо вони не є кратними блоку шифрування. Режим CFB
також має властивість самосинхронізації, що означає, що якщо при передачі даних
відбувається помилка, то наступні блоки будуть дешифровані правильно, тому що
вони синхронізовані з випадковим потоком даних.
Проте режим CFB також має свої недоліки. Наприклад, він не є стійким до атак
з обрізанням, коли злоумисник відомий більш ніж половиною шифрованого тексту.
Також може виникнути проблема з блокуванням при передачі даних через ненадійний
канал зв'язку, оскільки помилки можуть розповсюджуватися на кілька блоків даних.
У підсумку, режим CFB - це режим блокового шифрування, який дозволяє
створювати потоковий шифр з блокового шифру. Він має свої переваги та недоліки і
використовується для шифрування даних у режимі потоку з невеликою кількістю
блоків даних.
2.8.5 Режим CTR (Counter)
Симетричне блокове шифрування - це процес заміни зрозумілого тексту на
шифротекст з використанням секретного ключа. Симетричні шифри можуть
використовувати різні режими виконання для захисту конфіденційності та цілісності
даних, таких як режим CTR (лічильник).
Режим шифрування CTR використовує блочний шифр та лічильник для
створення потокового шифру. Лічильник - це послідовність значень, яка починається
з ініціалізаційного значення та збільшується на один при кожному шифруванні
наступного блоку даних.
52
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Основна ідея застосування режиму CTR полягає в тому, що він перетворює
блочний шифр у потоковий шифр, дозволяючи використовувати його для
шифрування будь-якої довжини даних.
Алгоритм шифрування CTR можна описати наступним чином:
1. ініціалізація: вибрати випадковий ненульовий вектор ініціалізації (IV),
розмір якого дорівнює розміру блоку шифру (зазвичай 128 біт).
2. лічильник: створити лічильник, який починається з IV, та збільшується на
один при кожному шифруванні наступного блоку даних.
3. шифрування: для кожного блоку даних зберігається лічильник, який потім
шифрується з використанням блочного шифру. Отримані шифровані блоки даних
об'єднуються для створення потокового шифру.
Щоб розшифрувати дані, процес шифрування необхідно повторити,
використовуючи ті самі значення лічильника та вектора ініціалізації.
Перевагою режиму CTR є можливість паралельної обробки даних, оскільки
кожен блок даних може бути зашифрований незалежно від інших блоків даних. Режим
CTR також можна легко використовувати в різних середовищах, оскільки він не
вимагає неперервності стану між блоками даних.
Однак режим CTR не забезпечує автентифікацію даних. Іншими словами, він не
гарантує, що отриманий зашифрований текст відповідає вихідним даним. Це може
призвести до можливості атак на цілісність даних, коли зловмисник може змінити
зашифрований текст без розкриття секретного ключа. Тому для захисту цілісності
даних рекомендується використовувати авторизований режим шифрування, такий як
GCM (режим Галуа/лічильника).
Ще однією проблемою, пов'язаною з режимом CTR, є можливість повторного
використання лічильника. Якщо зловмисник може модифікувати лічильник, він може
модифікувати шифрування за допомогою цього лічильника або відновити ключ
шифрування. Тому рекомендується використовувати випадковий вектор ініціалізації
та унікальний лічильник для кожного повідомлення.
53
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Наостанок варто зазначити, що режим CTR є одним з найбільш широко
використовуваних режимів шифрування в сучасних протоколах шифрування, таких
як TLS і IPSec; режим CTR є ефективним і надійним режимом, якщо він
використовується відповідно до рекомендацій і параметри встановлені належним
чином, щоб запобігти атакам і використанню, він може забезпечити конфіденційність
даних.
Для використання режиму CTR слід вибрати алгоритм шифрування, такий як
Advanced Encryption Standard (AES); згідно з принципом роботи режиму CTR, для
шифрування кожного блоку даних збільшується лічильник для кожного блоку.
Лічильник може бути випадковим або заснованим на криптографічній хеш-функції.
Перед початком шифрування необхідно визначити значення лічильника та
випадковий вектор ініціалізації (IV).
Випадковий вектор ініціалізації може бути згенерований за допомогою
генератора псевдовипадкових чисел (ГПВЧ); IV повинен бути унікальним для
кожного повідомлення або ключа шифрування, що використовується. Це необхідно
для запобігання повторному використанню лічильника і для захисту від атак грубої
сили.
Щоб зашифрувати блок даних, значення лічильника потрібно обчислити,
зашифрувати за допомогою алгоритму шифрування, а отриманий зашифрований текст
використати як ключ для шифрування блоку даних. Просто зашифруйте лічильник,
який використовується для шифрування, і розшифруйте блок даних, використовуючи
зашифрований текст як ключ.
Є кілька міркувань при використанні режиму CTR. По-перше, лічильник
повинен бути достатньо великим, щоб уникнути повторних значень. Наприклад, якщо
розмір блоку даних становить 128 біт, лічильник може бути 64 біт або більше. Якщо
лічильник недостатньо великий, значення можуть повторюватися, що може призвести
до компрометації ключа шифрування.
54
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Також важливо, щоб лічильник був випадковим і не повторювався для різних
повідомлень. Якщо лічильник повторюється для різних повідомлень, два різних
повідомлення можуть бути зашифровані з використанням одного і того ж лічильника,
що може призвести до компрометації ключа шифрування.
Другою важливою проблемою є безпека випадкових векторів ініціалізації.
Якщо випадкові вектори ініціалізації не є випадковими або використовуються
повторно, зашифрований текст може бути вразливим до атак грубої сили. Якщо
зловмисник знайде два зашифровані тексти, зашифровані за допомогою одного і того
ж вектора і лічильника, він зможе відновити значення лічильника і розшифрувати інші
повідомлення, зашифровані за допомогою того ж лічильника.
Третій аспект - це використання відповідних алгоритмів шифрування. Алгоритм
шифрування повинен бути безпечним та ефективним. Наприклад, для шифрування
можна використовувати AES з розміром ключа 128 біт або більше. Крім того,
алгоритм повинен бути правильно реалізований, щоб уникнути таких атак, як атаки
підміни та атаки грубої сили.
Четвертий аспект - безпека ключів. Ключі повинні бути достатньо
рандомізованими та безпечними, щоб запобігти атакам грубої сили. Довжина ключа
повинна бути не менше 128 біт. Крім того, ключ повинен зберігатися в безпечному
місці і бути недоступним для неавторизованих користувачів.
Таким чином, режим CTR є одним з найбільш ефективних і безпечних режимів
блочного шифрування. Його можна використовувати в різних ситуаціях, оскільки він
гарантує конфіденційність і цілісність даних і забезпечує відмінну продуктивність.
Однак, як і у випадку з іншими криптографічними алгоритмами, важливо
дотримуватися найкращих практик при використанні цього режиму шифрування, щоб
уникнути можливих атак і компрометації ключа.
55
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
3 ПРАКТИЧНА РЕАЛІЗАЦІЯ ЗАХИЩЕНОГО TELEGRAM-БОТУ
3.1 Опис програмного середовища
Для написання програми було обрано Python, одну з найпопулярніших мов
програмування сьогодення. Python - це мова програмування високого рівня, заснована
на принципі «читабельності коду». Вона має простий, легкий для вивчення синтаксис,
що робить її ідеальною для початківців. Python широко використовується в наукових
дослідженнях, обробці даних, машинному навчанні, веб-розробці та багатьох інших
сферах.
Однією з головних переваг Python є його здатність ефективно обробляти великі
обсяги даних; Python має низку бібліотек та інструментів для роботи з даними, які
дозволяють програмістам швидко та ефективно аналізувати великі обсяги інформації.
Python також має просту, зручну у використанні консоль, яку можна використовувати
для універсальних цілей при розробці скриптів та автоматизації різних завдань.
Ще однією перевагою Python є велика кількість бібліотек і фреймворків,
доступних для різних завдань. Наприклад, бібліотека NumPy може працювати з
числовими даними, бібліотека Pandas - з табличними, бібліотека Matplotlib - для
візуалізації даних і т.д. Python також має ряд фреймворків для веб-розробки, таких як
Django та Flask. які значно спрощують процес розробки веб-додатків.
При написанні програми були використані такі бібліотеки:
Python-Telegram-bot — це популярна бібліотека для розробки Telegram-
ботів на Python, яка спрощує взаємодію з Telegram Bot API. Завдяки цій бібліотеці,
розробники можуть легко створювати ботів для різних завдань, таких як
автоматизація повідомлень, створення інтерактивних меню, обробка медіафайлів та
інше.
NumPy – це бібліотека для мови програмування Python, яка дозволяє
працювати з багатовимірними масивами даних і математичними функціями, що діють
на цих масивах. NumPy був розроблений для того, щоб забезпечити ефективну
обробку даних для наукових, інженерних і технічних дисциплін.
56
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Numba - це бібліотека для мови програмування Python, яка дозволяє
збільшити швидкість виконання коду шляхом компіляції його в машинний код.
Numba зазвичай використовується для оптимізації обчислювально-інтенсивних
ділянок коду, зокрема для обробки масивів даних та математичних обчислень.
Telegram-бот із постквантовим алгоритмом обміну ключами Kyber та
симетричним шифруванням AES-128 може бути корисним у різних сферах, де
потрібно забезпечити високий рівень захисту конфіденційної інформації та обміну
даними. Ось декілька прикладів, де можна використовувати такого бота:
бот можна використовувати для надсилання конфіденційних повідомлень
між користувачами з гарантією захисту від квантових атак у майбутньому. Алгоритм
Kyber забезпечить стійкість до квантових обчислень під час обміну ключами, а AES-
128 захистить повідомлення під час зберігання та передачі;
для банківських установ та фінансових організацій такий бот може
забезпечити захист фінансових даних, особливо при здійсненні грошових переказів,
перевірці балансу та інші фінансові дії, які потребують високої конфіденційності;
у компаніях з підвищеними вимогами до безпеки (наприклад, юридичні
фірми, фармацевтичні компанії або оборонні підприємства) бот може
використовуватись для захищеного обміну документами, повідомленнями та іншими
даними;
для обміну медичною інформацією, зокрема у телемедицині, де
конфіденційність особливо важлива. Бот може забезпечити захищений канал для
обміну медичними записами, результатами аналізів, рецептами та рекомендаціями
лікаря;
у сфері державних або військових структур, де необхідний максимальний
рівень безпеки для комунікацій. Такий бот може бути інтегрований для обміну
секретною інформацією між відомствами або підрозділами;
57
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
захищений бот може бути використаний для передачі даних, пов'язаних із
криптовалютними транзакціями та цифровими активами, забезпечуючи стійкість до
квантових атак і захист цифрових гаманців;
бот може використовуватися у сферах, де клієнти запитують
конфіденційні дані (наприклад, банківські довідки, персональні звіти або фінансові
консультації), забезпечуючи високий рівень довіри до таких запитів.
Для того, аби бот працював без постійного запуску коду через IDE була
використана така технологія як Docker. Docker — це відкрита платформа для
розробки, доставки та запуску програм у контейнерах. Контейнеризація дозволяє
ізолювати програми з усіма їх залежностями, що забезпечує незалежність роботи від
операційної системи чи хостового середовища. Основні компоненти Docker:
образи (Images) - шаблони для створення контейнерів, що містять додаток
і всі необхідні для його роботи компоненти;
контейнери (Containers) - робочі екземпляри образів. Контейнери
легковагові, портативні й швидкі;
Docker Engine - основна платформа, що дозволяє створювати, запускати й
управляти контейнерами;
Docker Hub - публічний реєстр, де можна знайти та зберігати образи.
3.2 Створення Docker image
Для того аби бот працював без щоразового запуску через IDE було використано
технологію Docker. Для цього було створено контейнер (image) з назвою kyber-bot на
базі python 3.12.4. Код створення контейнеру представлено на рисунку 3.1.
58
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.1 – Код для створення контейнеру з назвою kyber-bot
Після створення контейнеру було прийнято рішення завантажити даний
контейнер на сервер для того, али любий користувач зміг їм скористатися при нагоді.
Для цього було використано сервіс Hetzner. Hetzner — це німецька компанія, що
пропонує хостинг-послуги та сервери, відома своєю надійністю та конкурентними
цінами. З представлених серверів компанії було використано CX22. CX22 – це одна з
конфігурацій хмарних серверів компанії Hetzner, яка пропонує відмінний баланс між
продуктивністю та ціною. Цей сервер ідеально підходить для невеликих вебдодатків,
API-сервісів, баз даних або тестового середовища. Характеристики серверу
представлені на рисунку 3.2.
Рисунок 3.2 – Характеристики серверу CX22
59
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
3.3 Програмна реалізація AES шифрування
При написанні програми на основі криптографічного алгоритму AES ми
використали найкращий спосіб реалізації - байтовий масив мовою python замість
простого списку списків. У списку списків кожен елемент є окремим масивом,
розташованим далеко в оперативній пам'яті, а при реалізації списку з 16 чисел (4х4)
вони лінійно розташовані разом у довгому сегменті пам'яті, і тоді при реалізації
кожного числового циклу процесору потрібно зберігати 16 чисел у матричному кеші,
який можна було б краще використовувати. Все це робиться для прискорення
виконання алгоритму. Нижче наведено цикл, реалізований з урахуванням кешу
процесора.
Рисунок 3.3 - Цикл по кожному числу матриці state з урахуванням кешу процесора
Симетричні блокові шифри мають кілька режимів виконання, які визначають,
як шифр застосовується до блоку повідомлень. Основні режими виконання
включають в себе:
ECB (Electronic Codebook),
CBC (Cipher Block Chaining),
OFB (Output Feedback),
CFB (Cipher Feedback),
CTR (Counter).
В процесі реалізації криптографічних алгоритмів використовувався режим CTR
(лічильник) симетричних блокових шифрів, в якому блоки даних шифруються за
допомогою лічильника, який генерує послідовне число. Лічильник залежить від ключа
шифрування і для кожного нового блоку даних лічильник збільшується.
Кожне число в лічильнику використовується як вхідні дані для блочного шифру,
в даному випадку Advanced Encryption Standard (AES). Результатом шифрування є
60
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
зашифрований текст, який поєднується з відповідним вхідним блоком даних за
допомогою побітової операції XOR. Результат є вхідними даними для наступного
блоку даних.
Для прискорення алгоритму також використовуються наступні бібліотеки:
NumPy, яка працює разом з бібліотекою Numba та Numba.
Numba - це JIT-компілятор з відкритим вихідним кодом, який перетворює код Python
і NumPy в швидкий машинний код; Numba може прискорити обчислювально
інтенсивні операції, генеруючи оптимізований машинний код.
Numba має два основних декоратори для оптимізації продуктивності:
@jit (Just-in-Time) - це декоратор, який застосовується до функції і вказує
Numba скомпілювати цю функцію для генерації оптимізованого машинного коду. При
першому виклику функції Numba аналізує типи аргументів і генерує оптимізований
код для цього типу. У наступних викликах функції вже використовується
згенерований машинний код, що прискорює виконання функції. Такий підхід
називається компіляцією «just-in-time», оскільки оптимізація виконується «на льоту»
перед виконанням функції.
@njit (No Python mode Just-in-Time) є більш обмеженою версією @jit і
вимагає написання функцій без використання певних можливостей Python, які не
підтримуються Numba. Наприклад, це означає, що функції не можуть містити
вкладені функції, об'єкти класів або генератори, а також не можуть взаємодіяти з
деякими стандартними бібліотеками Python.
У даній роботі також використовуються два параметри-декоратори, @jit і @njit:
параметри inline='always': параметр inline вказує Numba завжди
вбудовувати функцію. inline='always': параметр inline вказує Numba завжди
вбудовувати функцію. inline='always'. Інлайнінг означає, що замість виклику самої
функції, її вміст вставляється безпосередньо у місце виклику. Це може покращити
продуктивність, особливо коли функція викликається багато разів з невеликою
кількістю коду. За замовчуванням для параметра інлайнінгу встановлено значення
61
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
«завжди», що означає, що інлайнінг застосовується завжди. Однак його також можна
встановити у значення false, якщо ви хочете вимкнути інлайнінг для певної функції.
параметр nopython=True: Параметр nopython вказує Numba генерувати
код, який не використовує інтерпретатор Python. Це означає, що Numba спробує
згенерувати код, який використовує лише примітивні типи даних та операції, що
підтримуються компілятором. Якщо це не вдасться (наприклад, використати об'єкти
Python), Numba генеруватиме повільний код, який використовує інтерпретатор
Python. За замовчуванням nopython має значення False, але якщо його встановити у
True, Numba намагатиметься генерувати оптимізований код без використання
інтерпретатора Python; якщо Numba може генерувати код без використання Python, це
може призвести до значного прискорення роботи. Однак, встановлення nopython=True
не гарантує, що Numba завжди зможе генерувати код без використання Python. Якщо
функція містить складні структури даних або операції, які не підтримуються Numba,
такі як рекурсія або динамічна генерація об'єктів, компілятор може відмовитися
генерувати машинний код безпосередньо. У таких випадках Numba переходить у
режим повернення і виконує функцію за допомогою інтерпретатора Python, що
призводить до зниження продуктивності.
Рисунок 3.4 – Структура модуля aes.py
62
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
1. Функція s_idx.
Рисунок 3.5 – Функція s_idx()
Ця функція обчислює індекси елементів матриці 4х4 з індексів рядків і стовпців.
Алгоритм AES використовує матрицю 4х4 для представлення стану шифру. Кожен
елемент матриці займає один байт (8 біт). Функція s_idx приймає на вхід індекс рядка
(i) та індекс стовпця (j) елемента матриці і повертає лінійний індекс в одновимірному
масиві, що представляє матрицю.
2. Функція add_round_key.
Рисунок 3.6 – Функція add_round_key()
Ця функція add_round_key виконує операцію XOR над кожним байтом стану
state і байтом round_key.
Ключ раунду складається з 16 байт і містить ключ, згенерований на
попередньому кроці шифрування. У цій функції round_idx є індексом раунду
шифрування, в якому використовувався поточний ключ раунду.
Цикл for перевіряє кожен байт у стані state і виконує операцію XOR з
відповідним байтом ключа раунду для отримання нового значення байта. Ця операція
повторюється для кожного байта в стані state, і його значення змінюється відповідно
до поточного ключа раунду. Результатом роботи функції є стан state, в якому кожен
байт змінюється шляхом виконання операції XOR з відповідним байтом ключа
раунду.
63
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
3. Функція sub_bytes.
Рисунок 3.7 – Функція sub_bytes()
Функція sub_bytes приймає масив стану, який представляє матрицю 4x4 байтів,
і масив sbox, який є таблицею пошуку для шифру підстановки байтів.
Функція застосовує шифр підстановки, замінюючи кожен байт у масиві стану
на відповідний байт із масиву sbox. Підстановка виконується шляхом пошуку
значення state[idx] в масиві sbox і присвоєння результату state[idx].
4. Функція shift_rows.
Рисунок 3.8 – Функція shift_rows()
Ця функція реалізує крок «ShiftRows» в алгоритмі шифрування AES. Ідея цього
кроку полягає в тому, щоб зсунути рядки масиву стану на певну кількість байтів, де
кількість байтів для зсуву кожного рядка визначається індексом рядка.
64
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Перший ряд не зсувається. Другий рядок зсувається на один байт вліво. Третій рядок
зсувається на два байти вліво. Четвертий рядок зсувається на три байти вліво.
5. Функція permute.
Рисунок 3.9 – Функція permute()
Ця функція приймає 8-бітне значення val і виконує його перестановку за
допомогою кінцевого поля Rijndael.
Перестановка складається з двох частин:
Значення val зміщується вліво на один біт, а потім додається до значення
0xff, щоб гарантувати збереження лише 8 молодших бітів.
Якщо старший біт вихідного значення дорівнює 1, значення 0x1b
обробляється XOR зі зміщеним значенням. Це еквівалентно виконанню модульної
редукції за допомогою незвідного полінома x8 + x4 + x3 + x + 1 у кінцевому полі
Рейндаеля.
Результат перестановки повертається як 8-бітне значення. Дана функція
допомагає при множенні в полі Галуа.
6. Функція mix_columns.
Рисунок 3.10 – Функція mix_columns()
65
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Ця функція виконує операцію MixColumns алгоритму шифрування AES на
матриці 4x4, що називається станом. Операція MixColumns бере кожен стовпець
матриці та застосовує до нього лінійне перетворення, у результаті чого створюється
новий стовпець, який замінює вихідний.
Лінійне перетворення виконується за допомогою множення фіксованої матриці, при
цьому кожен елемент стовпця множиться на відповідний елемент матриці, а потім
підсумовується.
7. Функція cipher.
Рисунок 3.11 – Функція cipher()
Ця функція шифрування реалізує алгоритм AES, обробляючи відкритий текст у
10 раундах перетворень. Вона приймає два основні параметри:
1. state: 16-байтовий масив (одновимірний numpy масив форми (16,)), що
містить початкові дані (відкритий текст), які потрібно зашифрувати.
2. round_key: 16-байтовий масив (numpy масив форми (16,)), який слугує
початковим ключем для шифрування.
Функція починає з додавання round_key до state через функцію add_round_key.
Далі вона виконує шифрування у 10 раундах, кожен з яких складається з наступних
операцій:
sub_bytes: заміна кожного байта state на значення з S-Box;
66
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
shift_rows: циклічний зсув байтів у рядках на фіксовану кількість позицій,
що підвищує дифузію;
mix_columns: перемішування стовпців за допомогою фіксованої
поліноміальної матриці для зміцнення зв’язків між байтами;
add_round_key: додавання чергового раундового ключа до state;
Після завершення 10 раундів застосовується фінальне додавання ключа за
допомогою add_round_key. У результаті функція повертає зашифрований текст як 16-
байтовий масив, що є результатом цього багатораундового шифрування.
8. Функція aes_ctr_cipher.
Рисунок 3.12 – Функція aes_ctr_cipher()
Функція aes_ctr_cipher приймає три параметри: вхідний масив bytearray (buf),
початкове значення лічильника iv_value (у вигляді байтів) та ключ шифрування
round_key (також байти). Ця функція реалізує режим шифрування CTR (Counter) для
алгоритму AES з блоком розміром 128 біт, забезпечуючи послідовне шифрування
вмісту buf.
На початку ініціалізується змінна iv_state, яка приймає значення iv_value як
початковий лічильник. Далі створюється блоковий масив bytearray розміром
AES_BLOCK_LEN (16 байтів, що відповідає розміру блоку AES).
67
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Основний процес шифрування виконується в циклі, що проходить через всі
байти buf. Для кожного байта перевіряється, чи оброблені всі 16 байтів поточного
блоку. Якщо так, то iv_state шифрується за допомогою AES і отриманий результат
застосовується до наступних 16 байтів buf за допомогою операції XOR.
По завершенні обробки блоку значення iv_state збільшується на одиницю,
виступаючи як лічильник для режиму CTR, а byte_idx переміщується на наступний
байт. Цикл продовжується, поки функція не зашифрує всі байти в buf.
9. Функція expand_key.
Рисунок 3.13 – Функція expand_key()
Функція expand_key призначена для перетворення 16-байтового початкового
ключа в 176-байтовий набір раундових ключів, які використовуються в алгоритмі
шифрування AES. Для цього функція застосовує алгоритм розкладу ключів Rijndael,
що дозволяє отримати окремий ключ для кожного раунду шифрування. У результаті
68
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
формується послідовність із кількох 16-байтових раундових ключів, кожен з яких
відповідає розміру блоку AES. Цей процес підготовки ключів забезпечує ефективне й
безпечне шифрування для кожного раунду.
10. Функція calc_password_hash.
Рисунок 3.14 – Функція calc_password_hash()
Функція calc_password_hash приймає рядковий ключ як вхідні дані та повертає
перші 16 байт (128 біт) свого хешу SHA-256. Цей хеш використовується як ключ
шифрування AES для схеми шифрування на основі пароля.
11. Функції xcrypt, encrypt, decrypt.
Рисунок 3.15 – Функції xcrypt(), encrypt(), decrypt()
Функція xcrypt() обробляє вхідні дані у вигляді об’єкта bytearray, разом із
вектором ініціалізації та паролем користувача. Спершу вона викликає
calc_password_hash() для створення хешу з пароля, який потім перетворюється в ключ
шифрування через expand_key(). Отриманий ключ використовується для шифрування
в режимі AES-CTR за допомогою функції aes_ctr_cipher(). Цей режим дозволяє
69
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
безпечно шифрувати блоки даних довільного розміру. Після завершення шифрування
функція повертає зашифровані дані у вигляді об'єкта bytearray.
Функції encrypt та decrypt забезпечують шифрування та розшифрування даних
відповідно, реалізуючи захист інформації через цей процес.
3.4 Програмна реалізація постквантового алгоритму обміну ключами Kyber.
Алгоритм Kyber базується на криптографії з решітками та є одним з кандидатів
у стандарт постквантової криптографії. У Python реалізація зазвичай розділяється на
кілька модулів, кожен з яких відповідає за окремий аспект роботи алгоритму. Далі
детальніше про кожен з них:
1. ml_kem (або module lattice key encapsulation mechanism)
Цей модуль містить основну логіку обміну ключами, включаючи функції для
генерації ключів, шифрування та дешифрування. Він реалізує протокол
encapsulation/decapsulation, де один учасник генерує ключову пару та створює
зашифрований ключ, який інший учасник використовує для обміну спільним
секретом. Протокол encapsulation: генерує загальнодоступний ключ і секретну
частину для отримання спільного секрету, а decapsulation: розшифровує повідомлення
та дозволяє обом сторонам отримати однаковий секрет.
2. modules
У цьому модулі знаходяться загальні функції для роботи з модульними
операціями та об'єктами, які використовуються в побудові решіток. В основі Kyber
лежить математика поліномів у кільцях залишків, тому тут містяться:
Функції для операцій з числами та поліномами за модулем (наприклад, додавання,
множення за модулем) та побудова базових структур решіток, необхідних для
алгоритму.
3. modules_generic
Цей модуль забезпечує загальні реалізації для абстрактних структур або
функцій, які використовуються у решітковій криптографії. Вони є універсальними та
можуть підходити для інших алгоритмів на основі решіток.
70
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
modular_arithmetic: реалізація універсальних операцій над модулями для різних
розмірів і характеристик поліномів і інші функції для перетворення даних у різні
представлення (наприклад, вектори чи матриці).
4. polynomials
Цей модуль включає операції над поліномами, які використовуються для
генерації та маніпулювання векторами в алгоритмі Kyber. Оскільки алгоритм
використовує поліноми для представлення та обробки даних, то тут є функції для
додавання, множення поліномів, їх зведення до модулів, а також включає генерацію
випадкових поліномів для ключів, конвертацію даних у форму поліномів і навпаки.
5. polynomials_generic
Подібно до модуля modules_generic, цей модуль надає загальні реалізації для
роботи з поліномами, незалежні від специфічних вимог Kyber. Це є стандартні
алгоритми для роботи з поліномами, які можна легко адаптувати для інших
криптосистем або варіацій Kyber. Також цей модуль включає загальні операції над
поліномами, зокрема швидкі алгоритми множення, такі як швидке перетворення Фур'є
(FFT).
6. utils
Це допоміжний модуль, що містить функції, які спрощують реалізацію
алгоритму, а саме перетворення між різними форматами даних (байтами, цілими
числами тощо), а також реалізація генерації випадкових чисел, хешування, побудови
функцій розподілу (hash-based functions).
На рисунку 3.14 представлена структура алгоритму Kyber, яка складається з
описаних вище модулів.
71
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.16 – Структура постквантовго алгоритму обміну ключами Kyber
3.4.1 Основні функції модуля ml_kem.
У файлі ml_kem.py визначено клас MLKEM, який реалізує криптографічну
систему на основі решіткових обчислень для захищеного обміну ключами.
Конструктор __init__ ініціалізує об'єкт цього класу з параметрами k, eta_1, eta_2, du,
dv, що задаються в словнику params. Ці параметри визначають розміри і властивості
решіткової структури для алгоритму, а також визначають кількість поліномів та
векторів, які будуть генеруватися. Конструктор також ініціалізує модуль ModuleKyber
та його кільце r, які служать для математичних обчислень у цій системі. Для створення
випадкових байтів використовується функція os.urandom, яка забезпечує
криптографічно стійке джерело випадковості.
Рисунок 3.17 – Інціалізація класу MLKEM
72
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Функція _xof генерує псевдовипадковий масив байтів фіксованої довжини 840,
використовуючи криптографічну функцію shake_128 з введенням у вигляді байтів. Це
потрібно для генерації псевдовипадкових чисел, які використовуються для створення
випадкових векторів та поліномів, що забезпечують безпеку протоколу. Додатково,
функція _prf генерує послідовність байтів на основі значень eta, s та b, з довжиною,
що дорівнює eta * 64. Функція _prf застосовує shake_256, що дозволяє отримати
криптографічно захищену послідовність байтів, яка використовується для створення
випадкових векторів помилок, необхідних для захисту алгоритму.
Рисунок 3.18 – Функції _xof() та _prf()
Функція _h обчислює 32-байтний хеш значення s, застосовуючи алгоритм
sha3_256. Це дозволяє отримати надійний хеш фіксованого розміру, який
використовують для перевірки цілісності даних та унікальності ідентифікаторів. Далі,
функція _j використовує shake_256, щоб повернути псевдовипадковий хеш довжиною
32 байти, що додає надійності алгоритму, створюючи унікальні псевдовипадкові
значення, а функція _g застосовує sha3_512, щоб отримати 64-байтний хеш, який
потім ділиться на дві рівні частини по 32 байти. Це дозволяє отримати пару
псевдовипадкових значень, які використовуються для генерації криптографічних
ключів.
73
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.19 – Функції _h(), _j() та _g()
Окрема функція _generate_matrix_from_seed створює квадратну матрицю з
випадкових значень на основі seed rho. Ця матриця є частиною криптографічної
структури для обміну ключами і допомагає забезпечити математичну стійкість
алгоритму. Використання випадкових чисел у матриці підвищує безпеку шляхом
створення унікальних наборів значень для кожного сеансу обміну ключами. Функція
_generate_error_vector створює вектор помилок, використовуючи значення sigma, eta і
лічильник N. Цей вектор використовується для забезпечення безпеки шифрування.
Вона генерує кількість байтів на основі параметра eta, що дозволяє створити унікальні
вектори помилок у кожному обчисленні. Подібним чином, _generate_polynomial
створює випадковий поліном для захищеного обміну ключами, що є важливим
елементом для криптографічного обміну даними.
74
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.20 – Функції _generate_matrix_from_seed(), _generate_error_vector() та
_generate_polynomial()
Функція _pke_keygen створює пару ключів для шифрування: відкритий ek_pke
і приватний dk_pke. Це здійснюється за допомогою методу генерації матриці та
векторів помилок, що підвищує безпеку ключів для використання в криптографічних
операціях.
Рисунок 3.21 – Функція _pke_keygen()
Функція _pke_encrypt забезпечує шифрування повідомлення m,
використовуючи відкритий ключ ek_pke і випадковий вектор r. Вона створює
шифротекст, що складається з двох частин c1 та c2, які разом містять зашифроване
75
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
повідомлення. Для дешифрування шифротексту функція _pke_decrypt використовує
приватний ключ dk_pke, щоб отримати вихідне повідомлення m. Дешифрування
базується на обернених операціях до тих, що використовувалися під час шифрування.
Рисунок 3.22 – Функції _pke_encrypt() та _pke_decrypt()
Функція keygen генерує пару ключів для обміну, які включають публічний і
приватний ключ. Вона також створює випадковий ідентифікатор z і додає його до
приватного ключа для підвищення унікальності та безпеки. Цей процес дозволяє
створювати ключі, що використовуються для захищеного обміну інформацією. У
функції encaps відбувається генерація випадкового ключа, який шифрується і
передається разом з шифротекстом. Це потрібно для захищеного обміну ключами, що
забезпечує конфіденційну передачу даних. Функція decaps здійснює дешифрування
ключа з використанням шифротексту c і приватного ключа dk. Вона перевіряє
цілісність дешифрованого ключа і, якщо цілісність ключа збережена, повертає
вихідний ключ для подальшого використання.
76
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.23 – Функції keygen(), encaps() та decaps()
3.4.2 Основні функції модуля modules_generic.py
Файл modules_generic.py містить дві ключові структури: клас Module, який
представляє математичний модуль із базовим кільцем, та клас Matrix, який оперує
матрицями цього модуля.
Клас Module починається з конструктора __init__, що приймає кільце ring як
аргумент. Кільце зберігається як атрибут self.ring і використовується для створення
елементів модуля. У функції random_element генерується випадковий елемент модуля
у вигляді матриці розміром m x n, заповненої випадковими елементами з базового
кільця. Метод __call__ використовується для створення матриці модуля, перевіряючи,
що всі елементи є елементами кільця. Вона також дозволяє транспонування матриці
за допомогою параметра transpose. Додатково, метод vector створює вектор на основі
77
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
елементів модуля, представлений як матриця з одним стовпцем, що дозволяє
працювати з векторами у вигляді матриць.
Рисунок 3.24 – Класс Module, його метод __call__() та функції random_element() та
vector()
Клас Matrix представляє матрицю в межах модуля і має атрибут parent, що
зберігає посилання на об'єкт модуля, а також matrix_data для зберігання даних
матриці. Конструктор __init__ також має параметр transpose, що вказує на початковий
78
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
стан транспонування матриці. Метод dim повертає розміри матриці, враховуючи стан
транспонування. Для перевірки узгодженості розмірів матриці застосовується
внутрішній метод _check_dimensions, який гарантує, що всі рядки матриці мають
однакову довжину, інакше конструктор повертає помилку.
Рисунок 3.25 – Ініціалізація класу Matrix та методи dim() і _check_dimensions()
Функції transpose та transpose_self забезпечують роботу з транспонуванням.
transpose повертає новий об’єкт матриці з транспонованими розмірами, тоді як
transpose_self змінює стан транспонування поточної матриці. Властивість T дозволяє
використовувати transpose як атрибут, що підвищує зручність виклику. Функція
reduce_coefficients застосовує метод зменшення коефіцієнтів для кожного елемента
матриці, що може бути корисно для зменшення значень елементів за модулем,
визначеним у кільці.
79
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.26 – Функції transpose(), transpose_self() і reduce_coefficients()
Доступ до елементів матриці здійснюється за допомогою методу __getitem__,
що приймає індекси idx у вигляді кортежу. Метод враховує стан транспонування, щоб
правильно повернути елемент. Метод __eq__ дозволяє перевірити рівність двох
матриць за їх розмірами та відповідними елементами. Далі метод __neg__, який
повертає матрицю з усіма елементами, помноженими на -1, що є стандартною
операцією унарного мінуса.
Рисунок 3.27 – Методи __getitem__(), __eq__() та __neg__()
80
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Методи __add__ та __iadd__ реалізують операції додавання. __add__ дозволяє
додавати дві матриці, повертаючи нову матрицю як результат, тоді як __iadd__
застосовує інкрементне додавання. У процесі додавання перевіряється, чи є обидві
матриці об’єктами того ж типу, а також чи належать вони одному кільцю і мають
однакові розміри, щоб забезпечити сумісність операцій.
Рисунок 3.28 – Методи __add__() та __iadd__()
Метод __sub__ реалізує віднімання матриць. Він перевіряє, чи обидва операнди
є матрицями одного типу, належать одному модулю та мають однакові розміри. Якщо
ці умови виконуються, метод обчислює різницю відповідних елементів двох матриць
та повертає новий об’єкт матриці з результатами. Метод __isub__ забезпечує
інкрементне віднімання, де результат операції присвоюється початковій матриці. Це
альтернативний спосіб для застосування операції -= між матрицями.
81
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.29 – Методи __sub__() та __isub__()
Метод __matmul__ реалізує стандартне матричне множення. Вона перевіряє, що
обидва операнди є матрицями одного типу та належать одному модулю. Далі вона
обчислює розміри обох матриць і проводить перевірку, чи кількість стовпців першої
матриці дорівнює кількості рядків другої. Якщо розміри однакові, метод обчислює
добуток матриць і повертає нову матрицю з результатом.
Рисунок 3.30 – Метод __matmul__()
Метод dot обчислює скалярний добуток між матрицями, що є специфічним
випадком множення, де очікується, що одна з матриць є вектором-рядком, а інша —
вектором-стовпцем. Метод виконує транспонування першої матриці (перетворюючи
82
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
її на вектор-стовпець), а потім використовує матричне множення. Він також перевіряє,
що результат є скаляром (матрицею 1x1) і повертає його як єдиний елемент.
Рисунок 3.31 – Метод dot()
Метод __repr__ забезпечує текстове представлення матриці, визначає
максимальну ширину текстового представлення кожного елемента в кожному стовпці
для вирівнювання чисел у вигляді стовпців. Якщо матриця має лише один рядок, вона
виводиться у вигляді одновимірного списку, а якщо матриця багаторядкова – repr
повертає рядок, в якому кожен рядок матриці представлений списком елементів,
вирівняних за шириною, щоб зробити подання більш структурованим і легким для
читання.
Рисунко 3.32 – Метод __repr__()
83
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
3.4.3 Основні функції модуля modules.py
Код у файлі modules.py містить реалізацію модулів для криптосистеми Kyber,
розширюючи загальні функціональні можливості модуля та матриці з файлу
modules_generic.py. У класі ModuleKyber, конструктор __init__ викликає ініціалізацію
батьківського класу з використанням спеціального кільця поліномів
PolynomialRingKyber, яке буде базою для всіх обчислень. Цей клас також налаштовує
матриці на використання класу MatrixKyber, який забезпечує додаткові
функціональності для роботи з матрицями. Метод decode_vector у ModuleKyber
декодує вектор із байтового представлення. Спершу він перевіряє, чи відповідає
розмір вхідних байтів очікуваним параметрам k і d, щоб уникнути помилок у розмірі,
а потім метод обробляє вхідні байти, декодуючи кожну частину відповідно до
базового кільця і повертає вектор зі списку декодованих елементів.
Рисунок 3.33 – Ініціалізація класу ModuleKyber та методу decode_vector
Клас MatrixKyber розширює базову функціональність матриці для специфічних
операцій над матрицями Kyber. У ньому __init__ ініціалізує матрицю так само, як і в
батьківському класі. Метод encode здійснює серіалізацію матриці, обробляє кожен
елемент та конвертує його у байти.
84
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.34 – Ініціалізація класу MatrixKyber та методу encode()
Метод compress слугує для стискання елементів матриці для ефективного
використання пам'яті. Він проходить по всіх елементах матриці, викликаючи метод
compress на кожному з них, це дозволяє зберігати дані у компактнішій формі. Метод
decompress виконує зворотну операцію, відновлюючи початкові значення стиснених
елементів.
Рисунок 3.35 – Методи compress() та decompress()
Методи to_ntt і from_ntt у MatrixKyber потрібні для перетворення елементів
матриці до форми, що використовує техніку NTT (Number Theoretic Transform), яка
пришвидшує обчислення у кільцях. Метод to_ntt перетворює кожен елемент матриці
у форму NTT, та повертає нову матрицю з цими перетвореними значеннями. Метод
from_ntt виконує зворотне перетворення, повертаючи елементи з форми NTT у
стандартну.
85
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.36 – Методи to_ntt() та from_ntt()
3.4.4 Основні функції модуля polynomials_generic.py
Код у файлі polynomials_generic.py описує основні операції для роботи з
кільцями поліномів та окремими поліномами. Клас PolynomialRing представляє кільце
поліномів над скінченним полем із заданими параметрами q (модуль) та n
(максимальна ступінь). Конструктор ініціалізує кільце з елементами типу Polynomial.
Метод gen повертає поліном, що є генератором кільця, а метод random_element
створює поліном з випадковими коефіцієнтами в межах від 0 до q-1. Виклик __call__
створює поліном на основі переданого списку коефіцієнтів або цілого числа, що
представляє константу. Представлення кільця __repr__ описує його як одновимірне
кільце поліномів над скінченним полем із заданим модулем.
Рисунок 3.37 – Ініціалізація класу PolynomialRing та його методів gen(),
random_element(), __call__(), __repr__()
86
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Клас Polynomial реалізує операції над поліномами. Конструктор ініціалізує
поліном у заданому кільці з переданими коефіцієнтами, доповнюючи їх нулями для
відповідності ступеню n. В методі is_zero відбувається перевірка на нульовий поліном,
а is_constant — чи є поліном константою. Метод _parse_coefficients нормалізує
довжину списку коефіцієнтів до ступеня n, заповнюючи пропуски нулями. Метод
reduce_coefficients зводить коефіцієнти до значень за модулем q.
Рисунок 3.38 – Ініціалізація класу Polynomial та методів is_zero(), is_constant(),
_parse_coefficients() та reduce_coefficients()
Операції додавання та віднімання реалізовані через допоміжні методи
_add_mod_q і _sub_mod_q, вони обчислюють суму або різницю двох чисел за модулем
q. Методи _add_, __add__, __radd__ і __iadd__ забезпечують повну підтримку
додавання для поліномів та констант, а _sub_, __sub__, __rsub__ і __isub__ реалізують
операції віднімання.
87
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.39 – Методи _add_mod_q() і _sub_mod_q()
Рисунок 3.40 – Методи _add_(), __add__(), __radd__() і __iadd__()
88
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.41 – Методи _sub_(), __sub__(), __rsub__() і __isub__()
Множення поліномів було реалізовано в методі _schoolbook_multiplication, в
ньому використано класичний метод "шкільного множення" для обчислення добутку
двох поліномів зі зниженням ступеня результату до n через циклічні зменшення
коефіцієнтів. Метод __mul__ підтримує множення як поліномів, так і полінома на ціле
число. Метод __pow__ забезпечує піднесення полінома до степеня, використовуючи
алгоритм "швидкого піднесення до степеня", що ефективно обчислює результат навіть
для великих показників степеня.
Рисунок 3.42 – Метод _schoolbook_multiplication()
89
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.43 – Метод __mul__()
Рисунок 3.44 – Метод __pow__()
В методі __eq__ відбувається порівняння двух поліномів або полінома із числом
для перевірки їх рівності. Метод __getitem__ надає доступ до окремих коефіцієнтів
полінома. Методи __repr__ і __str__ створюють текстове представлення полінома,
об'єднуючи ненульові коефіцієнти та відповідні ступені змінної x, це реалізовано для
спрощуваного читання та відображення поліномів.
90
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.45 – Методи __eq__(), __getitem__(), __repr__() і __str__()
3.4.5 Основні функції модуля polynomials.py
Файл polynomials.py містить реалізацію кільця поліномів для криптографічного
алгоритму Kyber, що використовує швидке дискретне перетворення Фур’є (NTT) для
підвищення ефективності операцій із поліномами. Основним класом є
PolynomialRingKyber, який ініціалізується з простим числом 3329 як модулем і
порядком 256. Клас визначає об’єкти для поліномів у звичайній формі
(PolynomialKyber) і у формі NTT (PolynomialKyberNTT).
Рисунок 3.46 – Ініціалізація класу PolynimialRingKyber
91
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Метод _br в PolynomialRingKyber здійснює побітову перестановку для того, аби
підтримувати порядок в NTT-перетвореннях. Функція ntt_sample перетворює вхідний
потік байтів у поліном, що вже знаходиться у форматі NTT, розкладаючи байти на
коефіцієнти за допомогою визначених модулем 3329 обмежень. Далі, метод cbd
проводить генерацію полінома із розподіленими коефіцієнтами, використовуючи
біноміальний розподіл (користується у криптографії для створення додаткової
випадковості). Метод decode реалізує зворотне перетворення, відновлюючи
коефіцієнти полінома з байтів і обираючи коректний модуль для певної точності
(залежно від параметра d). Функція __call__ викликає відповідний клас для створення
полінома залежно від типу вхідних даних (чи це NTT, чи звичайний поліном).
Рисунок 3.47 – Метод _br() і функція ntt_sample()
92
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.48 – Методf cbd() та decode()
Рисунок 3.49 – Функція __call__()
93
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Клас PolynomialKyber створений для кодування поліномів у байти через метод
encode, а також компресії та декомпресії коефіцієнтів через _compress_ele та
_decompress_ele. Дані методи змінюють точність коефіцієнтів полінома для
зменшення обсягу даних, що передаються. Поліном може бути перетворений у форму
NTT за допомогою методу to_ntt, що обчислює NTT-перетворення кожного
коефіцієнта з використанням коренів єдності, збережених у ntt_zetas.
Рисунок 3.50 – Ініціалізація класу PolynomialKyber, методи encode(), _compress_ele()
і _decompress_ele.
94
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.51 – Метод to_ntt()
Клас PolynomialKyberNTT забезпечує зворотне NTT-перетворення через
from_ntt, який повертає поліном у звичайну форму. Він також містить метод
_ntt_base_multiplication для обчислення базової NTT-мультиплікації, що
використовується для швидкого множення коефіцієнтів поліномів у формі NTT.
Кінцеві методи додавання (__add__), віднімання (__sub__) і множення (__mul__)
дозволяють виконувати арифметичні операції між поліномами.
95
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.52 – Клас PolynomialKyberNTT, методи from_ntt() і
_ntt_base_multiplication()
Рисунок 3.53 – Методи __add__(), __sub__() і __mul__()
96
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
3.4.6 Основні функції модуля utils.py
Файл utils.py містить допоміжні функції для роботи з байтами, які
використовуються в криптографічних операціях даної дипломної роботи. Перша
функція xor_bytes виконує операцію побітового XOR між двома масивами байт
однакової довжини. Вона повертає результат у вигляді нового байтового масиву.
Друга функція select_bytes проводе вибірку та комбінує два масиви байт залежно від
умови, заданої параметром cond. Якщо cond дорівнює 1, вона повертає байти з другого
масиву b, а якщо 0 — з першого масиву a. Умовний вибір реалізований через побітові
операції з використанням маски cw, яка визначається значенням умови.
Рисунок 3.54 – Функції xor_bytes() та select_bytes()
3.5 Написання Telegram-боту
Написання Telegram-боту відбувалось за допомогою бібліотеки python-
telegram-bot. Було обрано саме цю бібліотеку тому, що вона забезпечує зручний
інтерфейс для роботи з API Telegram і дозволяє легко інтегрувати нові функції в
Telegram-бот. Далі будуть представлені функції, які створені для функціонування бота
та опис до них.
Функція ensure_keys(ctx) перевіряє, чи є у користувача приватний ключ для
розшифрування, який зберігається в контексті користувача під ідентифікатором
USER_DATA_DECAPS_KEY. Якщо ключа немає, викликається метод
ML_KEM_512.keygen(), який генерує пару ключів: інкапсуляційний (публічний) і
97
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
розшифровувальний (приватний). Приватний ключ зберігається для подальшого
використання в процесі розшифрування, а публічний ключ повертається як результат
функції, щоб його можна було передати іншій стороні для шифрування файлів.
Рисунок 3.55 – Функція ensure_keys()
Функція on_genkeys(update, ctx) виконується у відповідь на команду /genkeys.
Вона використовує ensure_keys(ctx) для перевірки наявності ключів у користувача.
Якщо ключі вже згенеровані, користувач отримує відповідне повідомлення. Якщо
ключі відсутні, вони створюються, і бот надсилає користувачу інкапсуляційний ключ
у вигляді закодованого рядка Base64. Цей ключ необхідно передати іншій стороні для
шифрування файлів.
Рисунок 3.56 – Функція on_genkeys()
Функція on_set_encaps_key(update, ctx) виконується у відповідь на команду
/setencapskey. Вона приймає інкапсуляційний ключ як аргумент команди, декодує
його з формату Base64 і зберігає у контексті користувача під ідентифікатором
USER_DATA_OTHER_ENCAPS_KEY. Це дозволяє підготувати користувача до
шифрування файлів, оскільки цей ключ буде використовуватись для створення
сировинного (симетричного) ключа та шифрувального ключа.
98
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.57 – Функція on_set_encaps_key()
Функція on_encrypt(update, ctx) виконується у відповідь на команду /encrypt.
Вона переводить стан користувача в режим "шифрування"
(CONV_STATE_ENCRYPT) і надсилає користувачу повідомлення з проханням
надіслати файл для шифрування. Після цього функція чекає на обробку вхідного
файлу.
Рисунок 3.58 – Функція on_encrypt()
Функція on_decrypt(update, ctx) виконується у відповідь на команду /decrypt.
Вона приймає шифрувальний ключ як аргумент команди, декодує його з формату
Base64 і зберігає в контексті користувача під ідентифікатором
USER_DATA_DECRYPT_CIPHER_KEY. Потім стан користувача переводиться в
режим "розшифрування" (CONV_STATE_DECRYPT), і бот очікує, що користувач
надішле файл для розшифрування.
Рисунок 3.59 – Функція on_decrypt()
99
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Функція on_input(update, ctx) обробляє вхідні повідомлення, зокрема файли,
надіслані користувачем. Її логіка залежить від поточного стану користувача.
Якщо стан "шифрування" (CONV_STATE_ENCRYPT), функція перевіряє
наявність інкапсуляційного ключа. Потім за допомогою цього ключа створюється
сировинний (симетричний) ключ і шифрувальний ключ за допомогою методу
ML_KEM_512.encaps. Файл, надісланий користувачем, завантажується у вигляді
байтового масиву, шифрується алгоритмом AES із використанням сировинного
ключа, після чого надсилається назад у зашифрованому вигляді разом із
шифрувальним ключем.
Якщо стан "розшифрування" (CONV_STATE_DECRYPT), функція
перевіряє, чи збережені у користувача розшифровувальний ключ і шифрувальний
ключ. Використовуючи ці ключі, функція отримує сировинний ключ за допомогою
методу ML_KEM_512.decaps. Потім файл завантажується, розшифровується
алгоритмом AES із використанням сировинного ключа і надсилається назад
користувачу.
Якщо стан не встановлений або дані неповні, бот відправляє
повідомлення з підказками щодо подальших дій.
Рисунок 3.60 – Функція on_input()
100
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.61 – Продовження функції on_input()
У секції if __name__ == '__main__': визначається основний скрипт для запуску
бота. Спочатку створюється об'єкт бота, використовуючи токен, отриманий із
середовища виконання через змінну TELEGRAM_BOT_TOKEN. Додаються
обробники для команд /genkeys, /setencapskey, /encrypt, /decrypt і для вхідних
повідомлень без команд. Останній обробник забезпечує реакцію на надсилання
файлів. Після цього бот запускається в режимі опитування сервера Telegram
(app.run_polling()).
101
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Рисунок 3.62 – Скція if __name__ == '__main__'()
3.5 Тестування
Тестування програми програми відбувалось за допомогою двох користувачів.
Один користувач шифрував повідовмення, а другий користувач розшифровував. Для
шифрування повідомлення сторона користувача, який хоче отримати зашифроване
повідомлення генерує ключі (рисунок 3.63). Публічний ключ для шифрування
передається користувачу, який буде шифрувати повідомлення, а приватний ключ
залишається в даних користувача.
Рисунок 3.63 – Генерація ключів
102
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Після того, як користувач надіслав ключ, заходимо в бот та вводимо команду
/setencapskey та ключ через пробіл. Таким чином ми встановлюємо ключ інкапсуляції
(рисунок 3.64).
Рисунок 3.64 – Встановлення ключа інкапсуляції
Після цього визиваємо команду /encrypt та надсилаємо файл для шифрування.
Після надсилання файла чекаємо приблизно одну хвилину, поки пройде шифрування
надісланого файлу, після чого бот присилає нам зашифрований файл та шифротекст,
який ми будемо передавати користувачеві, який буде розшифровувати файл (рисунок
3.65).
Рисунок 3.65 – Зашифрований файл
103
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Для розшифрування файлу, користувачу потрібно викликати команду /decrypt
та через пробіл ввести шифротекст, який був відправлений разом з зашифрованим
файлом. Після чого бот обробляє цей шифротекст та просить надіслати файл, який
потрібно розшифрувати, після чого бот нам надсилає розшифрований файл(рисунок
3.66).
Рисунок 3.66 – Розшифрування файлу
104
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
ВИСНОВКИ
Темою моєї дипломної роботи є розробка захищеного Telegram-боту з
використанням постквантового алгоритму обміну ключами та симетричного
шифрування. Перш ніж почати роботу над розробкою програми було проаналізовано
предметну область та виявлено, що алгоритм Kyber – це постквантовий алгоритм
обмыну ключами, він базується на криптографії з решітками та є одним з кандидатів
у стандарт постквантової криптографії. Реалізація цього алгоритм за допомогою мови
програмування Python зазвичай поділяється на 6 модулів, а саме:
1. ml_kem (або module lattice key encapsulation mechanism) – модуль містить
основну логіку обміну ключами, включаючи функції для генерації ключів,
шифрування та дешифрування. Він реалізує протокол encapsulation/decapsulation, де
один учасник генерує ключову пару та створює зашифрований ключ, який інший
учасник використовує для обміну спільним секретом.
2. modules – даний модуль зазвичай відповідає за загальні функції, які
виконують роботу з модульними операціями та об’єктами, які використовуються в
побудові решіток.
3. modules_generic – модуль забезпечує загальні реалізації для абстрактних
структур або функцій, які використовуються у решітковій криптографії (реалізація
універсальних операцій над модулями, перетворення даних у матриці).
4. polynomials – в модулі знаходяться операції над поліномами, які
використовуються для генерації та маніпулювання векторами в алгоритмі Kyber.
5. polynomials_generic – модуль надає загальні реалізації для роботи з
поліномами, незалежні від специфічних вимог Kyber (включає загальні операції над
поліномами, зокрема швидкі алгоритми множення, такі як швидке перетворення Фур'є
(FFT)).
6. utils – це допоміжний модуль, який містить функції, які спрощують
реалізацію алгоритму, а сами: перетворення між різними форматами даних і реалізація
генерації випадкових чисел, хешування та побудови функцій розподілу.
105
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
Що до AES, то це алгоритм симетричного шифрування, який забезпечує
безпечний зв’язок і захист даних. Він працює з з блоками даних фіксованого розміру
з розміром блоку 128 біт, процеси шифрування та дешифрування в AES виконуються
за допомогою ключа, який може мати довжину 128, 192 або 256 біт та кількість
раундів встановлюється на 10, 12 або 14 залежно від розміру ключа, який
використовується (чим більше ключ – тим більша кількість раундів).
Для створення цієї програми було обрано мову програмування Python, оскільки
вона має низку значних переваг, які роблять її ідеальним інструментом для вирішення
різноманітних завдань, а саме:
завдяки лаконічному та інтуїтивно зрозумілому синтаксису, Python
дозволяє швидко писати й підтримувати код навіть новачкам;
у Python є величезна кількість готових бібліотек і модулів, що дозволяє
мінімізувати ручну реалізацію функціоналу та зосередитися на ключових аспектах
проєкту;
Python однаково добре працює на різних операційних системах, таких як
Windows, macOS і Linux, що робить його універсальним вибором для розробки;
величезна база користувачів і розробників Python забезпечує доступ до
якісної технічної підтримки, обміну досвідом, а також постійного розвитку нових
інструментів і технологій.
Також було використано технологію Docker. Docker — це відкрита платформа
для розробки, доставки та запуску програм у контейнерах. Контейнеризація дозволяє
ізолювати програми з усіма їх залежностями, що забезпечує незалежність роботи від
операційної системи чи хостового середовища.
Провівши тестування програми після розробки, можемо зробити висновок, що
вона працює коректно, має зрозумілий інтерфейс користувача та сама ідея програми
була повністю реалізована в даній дипломній роботі.
106
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Проблеми та перспективи захисту персональних даних в Україні
[Електронний ресурс]. Режим доступу - https://bsoprivacygroup.com/data-ptotection-in-
ukraine.
2. Захист персональних даних FAQ [Електронний ресурс]. Режим доступу -
https://www.ombudsman.gov.ua/uk/zahist-personalnih-danih-faq.
3. Сучасні криптосистеми [Електронний ресурс]. Режим доступу -
https://sites.google.com/site/sucasnikriptosistemik/home/porivnanna-simetricnih-z-
asimetricnimi-kriptosistemami.
4. Введення в криптографію: симетричне шифрування [Електронний
ресурс]. Режим доступу - https://markup-ua.com/vvedennya-v-kriptografiyu-simetrichne-
shifruvannya/.
5. Уроки криптографії [Електронний ресурс]. Режим доступу -
https://cryptoworld.su/uroki-kriptografii-sovremennye-zarubezhnye-shifry-chast-4/.
6. Опис алгоритму Blowfish [Електронний ресурс]. Режим доступу -
https://studbooks.net/2349917/tehnika/opisanie_algoritma_blowfish.
7. Вікіпедія [Електронний ресурс]. Режим доступу :
https://uk.wikipedia.org/wiki/%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%B
D%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%
B0.
8. Посібник з мови програмування Python [Електронний ресурс]. Режим
доступу - https://metanit.com/python/tutorial/.
9. Переваги і недоліки мови Python [Електронний ресурс]. Режим доступу -
https://blog.ithillel.ua/articles/perevagi-i-nedoliki-movi-python.
10. Симетричні криптосистеми [Електронний ресурс]. Режим доступу -
https://studwood.net/2600042/informatika/shemi_shifruvannya.
107
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат
11. Режими роботи блочного шифру [ Електронний ресурс]. Режим доступу
- https://coderlessons.com/tutorials/akademicheskii/izuchite-kriptografiiu/rezhimy raboty-
blochnogo-shifra.
12. AES-128 [Електронний ресурс]. Режим доступу -
https://www.ti.com/tool/AES-128.
13. Проблеми та перспективи захисту персональних даних в Україні
[Електронний ресурс]. Режим доступу - https://bsoprivacygroup.com/data-ptotection-in-
ukraine.
14. Види шифрування інформації [Електронний ресурс]. Режим доступу -
https://ua5.org/protect/395-vidi-shifruvannya-informaciyi.html.
15. Що таке асиметричне та симетричне шифрування [Електронний ресурс].
Режим доступу - https://www.websiterating.com/uk/vpn/glossary/what-is-asymmetric-
symmetric-encryption/.
16. Python bytearray [Електронний ресурс]. Режим доступу -
https://www.w3resource.com/python/python-bytes.php.
17. Numba 0.57.0 [Електронний ресурс]. Режим доступу -
https://pypi.org/project/numba/.
18. NumPy 1.24.3 [Електронний ресурс]. Режим доступу -
https://pypi.org/project/numpy/.
19. Python-Telegram-bot v21.7 [Електронний ресурс]. Режим доступу -
https://python-telegram-bot.org/
20. Docker [Електронний ресурс]. Режим доступу - https://www.docker.com/
21. Hetzner Online [Електронний ресурс]. Режим доступу -
https://www.hetzner.com/
22. About Kyber [Електронний ресурс]. Режим доступу -
https://kyberlib.com/about/index.html
108
ЧДТУ.23.21039.007 ПЗ
Зм Арк №Докум. Підп Дат