ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.12.2023
Просмотров: 139
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
-
RSAGenerator – генератор ключів RSA, що працює за викладеним вище алгоритмом генерації ключів. -
Core - ядро програми, у ньому закладено й інші основні необхідні методи. -
Converter – клас працюючий з користувачем, тобто. той самий клас, який перетворює ваш текст на шифр-текст і навпаки.
-
64 bit – 0 секунд -
128 bit – від 0 до 2 секунд -
256 bit – від 0 секунд до 12 секунд -
512 bit – від 0 секунд до 3 хвилин 13 секунд -
1024 bit – від 58 секунд до 139 хвилин 35 секунд -
2048 bit - за 3 години не завершився навіть перший тест
-
64 bit – 0 секунд -
128 bit – від 0 до 2 секунд -
256 bit – від 0 до 6 хвилин 13 секунд -
512 bit – від 3 секунд до 3 хвилин 42 секунд -
1024 bit – від 34 секунд до 112 хвилин 35 секунд -
2048 bit - за 3 години не завершився навіть перший тест
localRsa.FromXmlString(File.ReadAllText(openKeyFileDialog.FileName));RSAPпараметри rsaParams = localRsa.ExportParameters(isLoadPrivate);txtExponent.Text = GetHexString(rsaParams.Exponent);txtModulus.Text = GetHexString(rsaParams.Modulus);if (isLoadPrivate)txtD.Text = GetHexString(rsaParams.D); // Цей параметр є тільки в приватному ключі// Очищення екземпляру RSAlocalRsa.Clear();}catch (Виключення ex){MessageBox.Show("Помилка читання ключа,\nMessage: " + ex.Message);}}private void EncryptionToolStripMenuItem_Click(object sender, EventArgs e){// Визначити, який пункт меню Шифрування було вибрано (загальнодоступний чи приватний)bool isEncryptPrivate =(sender as ToolStripMenuItem).Name == "privateEncryptionToolStripMenuItem" ? true : false;// Перевірити, чи в клас rsa завантажено правильний ключif (isEncryptPrivate && !myRsa.IsPrivateKeyLoaded){MessageBox.Show("Завантажте закритий ключ перед кодуванням.");return;}else if(!isEncryptPrivate && !myRsa.IsPublicKeyLoaded){MessageBox.Show("Завантажте відкритий ключ перед кодуванням.");return;}try{byte[] message = Encoding.UTF8.GetBytes(txtMessage.Text);byte[] encMessage = null;if (isEncryptPrivate) // Виклик потрібного методу шифрування згідно з вибором користувачаencMessage = myRsa.PrivateEncryption(message);elseencMessage = myRsa.PublicEncryption(message);txtEncMsg.Text = Convert.ToBase64String(encMessage);}catch (Виключення ex){MessageBox.Show("Помилка читання закодованих даних,\nMessage: " + ex.Message);}}private void DecryptionToolStripMenuItem_Click(object sender, EventArgs e){// Визначити, який пункт меню Decryption було вибрано (загальнодоступний чи приватний)bool isDecryptPrivate =(sender as ToolStripMenuItem).Name == "privateDecryptionToolStripMenuItem" ? true : false;// Перевірити, чи в клас rsa завантажено правильний ключif (isDecryptPrivate && !myRsa.IsPrivateKeyLoaded){MessageBox.Show("Завантажте закритий ключ перед дешифруванням.");return;}else if(!isDecryptPrivate && !myRsa.IsPublicKeyLoaded){MessageBox.Show("Завантажте відкритий ключ перед дешифруванням.");return;}try.{byte[] decMessage = Convert.FromBase64String(txtEncMsg.Text);byte[] message = null;if (isDecryptPrivate) // Виклик потрібного методу розшифрування згідно з вибором користувачаmessage = myRsa.PrivateDecryption(decMessage);elsemessage = myRsa.PublicDecryption(decMessage);рядок sMsg = Encoding.UTF8.GetString(message);MessageBox.Show("Повідомлення декодування:\n" + sMsg);}catch ((Exception ex){MessageBox.Show("Помилка читання декодованих даних,\nMessage: " + ex.Message);}}private string GetHexString(byte[] byteArray){Конструктор рядків hexString = new StringBuilder(byteArray.Length * 2);for (int i = 0; i < byteArray.Length; i++)hexString.Append(string.Format("{0:X}", byteArray[i]));
int x = hexString.Capacity;return hexString.ToString();}private void MainForm_FormClosing(object sender, FormClosingEventArgs e){myRsa.Dispose();}private void txtExponent_TextChanged(object sender, EventArgs e){}}}Першим етапом є відкриття файлу rk.xtq з процесом та вказівки параметрів відображення. Ці налаштування виконуються після натискання кнопки OK. До кожного процесу передбачено виведення інформації про деталі шифрації-дешифрації.Робота з програмою починається після запуску файлу rsa.exe на виконання. На екрані з'являється головна форма управління програмою (рис.5.1)Рис. 5.1. Головне вікно програми, режим формування та завантаження ключівРис. 5.2. Результат кодуванняДля переходу в режими роботи в головному меню представлені варіанти завантаження відкритих, закритих ключів, виконання шифрації-дешифрації з використанням відповідних ключів.Рис. 5.3. Головне меню програмиДля початку роботи виконується завантаження ключів після вибору пункту «Завантажити відкриті ключі», вказавши найменування файлу з даними ключа:Рис. 5.4. Вибір відкритого ключаДля початку роботи виконується завантаження ключів після вибору пункту «Завантажити закриті ключі», вказавши найменування файлу з даними ключа PrivateKey.xml:Рис. 5.5. Вибір закритого ключаДалі в текстове поле «Текст повідомлення» слід ввести текст, що кодується. Після цього з меню вибирається варіант шифрації – відкрита чи закрита.Рис. 5.6. Результат відкритого кодуванняПри закритій системі результат шифрування коригується автоматично і з'являється у нижній частині вікна:Рис. 5.7. Результат закритого кодування
При помилці кодування при використанні неправильного ключа декодований текст має такий вигляд:Рис. 5.8. Результат помилкового декодування- результат створення відкритих та закритих ключів:Рис. 5.9. Результат створення ключів та кодуванняЛабораторна робота 6.Розробка програми формування сигнатури повідомлення (цифровий підпис) на основі симетричного алгоритму шифрування. Програма реалізує два режими роботи: просте поблокове шифрування і дешифрування повідомлень (режим електронної кодової книги), а також зчеплення блоків шифру при формуванні цифрового підпису. Ефективними системами криптографічного захисту є асиметричні криптосистеми, звані також криптосистемами з відкритим ключем. У таких системах для шифрування даних використовується один ключ, а для дешифруванняінший ключ (звідси і назваасиметричні). Перший ключ є відкритим і може бути опублікований для всіх користувачів системи, які бажають зашифровувати дані. Неможливо дешифрувати дані за допомогою відкритого ключа.Для дешифрування даних використовує другий ключ, секретний. Зрозуміло, що ключ дешифрування не може бути визначений з відкритого ключа шифрування. Узагальнену схему асиметричної криптосистеми з відкритим ключем показано на рис. 6.1.
| Схема асиметричної криптосистеми Рис. 6.1. Схема асиметричної криптосистеми |
-
Відкритий ключ KB і криптограма можуть бути відправлені незахищеними каналами, тобто. противнику відомі KB та С. -
Алгоритми шифрування (далі EK) та дешифрування (далі Dk) є відкритими. -
Захист інформації в асиметричній криптосистемі ґрунтується на секретності ключа kB.
-
Обчислення пари ключів (KB, kB) одержувачем на основі початкової умови має бути простим. -
Відправник А, знаючи відкритий ключ KB і повідомлення М може легко обчислити криптограму С = EK (M). -
Одержувач В, використовуючи секретний ключ kB та криптограму
Зможе легко відновити вихідне повідомлення M = Dk (С). -
Противник, знаючи відкритий ключ KB, намагаючись обчислити секретний ключ kB наштовхується на непереборну обчислювальну проблему.
-
P- 1 має великий простий дільник, позначимо його як r (тобто P = r + 1 (mod r)); -
P+ 1 має великий простий дільник, позначимо як s (тобто P = s 1 (mod s)); -
r- 1 має великий простий дільник, позначимо його як t (тобто r = 1 (mod t)).