МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
/
Звіт
Лабораторна робота № 4
«Комбіновані криптосистеми на прикладі цифрового конверта »
з дисципліни:
«Проектування засобів захисту інформаціїв комп’ютерних мережах»
.
Львів-2015
Мета:реалізувати програму підтримки комбінованих криптосистем на прикладі цифрового конверта.
Завдання:
В ході роботи необхідно засвоїти основні принципи побудови комбінованих криптосистем, розробити програму підтримки комбінованих криптосистем на прикладі цифрового конверта.Для спрощення реалізації розрядність відкритого та закритогоключів повинна складати до 64 біт.
Теоретичні відомості:
Суть технології цифрового конверта в наступному. Генерується унікальне число –сеансовий ключ. Упаковуння документа в цифровій конверт здійснюється шляхом обробки за певним алгоритмом, на вхід якого подаються як сам документ, так і сеансовий ключ. Вилучення документа з конверта можливо тільки при знанні сеансового ключ. Надалі технологія використання цифрового конверта визначається технологією керування сеансовоми ключами.
Перший спосіб застосовується при доступі до баз даних і полягає в тому, що документи в цифрові конверти спочатку запаковує адміністратор системи, він же генерує ключі доступу. Далі на основі проміжних чисел-ключів, створених користувачами системи, і ключів доступу для конвертів, сформованих адміністратором, формуються ключі доступу для кожного користувача. При цьому за допомогою свого ключа доступу користувач може витягти з цифрового конверта тільки ті документи, доступ до яких дозволений адміністратором. При створенні нових документів користувач може сам дозволяти чи обмежувати доступ до них інших користувачів. У ході експлуатації системи може здійснюватися повне її адміністрування - зміна повноважень користувачів, зміна ключів, додавання та видалення користувачів і т. д., при цьому повного переналаштування системи не потрібно.
Другий спосіб - відкритий розподіл ключів. На сьогоднішній день - це найбільш перспективний спосіб керування числами-ключами, що використовується практично у всіх системах захисту інформації в світі. Він полягає в тому, що два користувача незалежно генерують особисті ключі, на їх основі виробляють так звані відкриті ключі, якими обмінюються. Далі відправник генерує секретний сеансовий ключ, з допомогою якого розміщає підготовлений для відправки документ в цифровій конверт. Сам секретний сеансовий ключ шифрується за допомогою відкритого ключа партнера. Для сформованого конверта генерується цифровий підпис. Одержувач за допомогою відкритого ключа відправника перевіряє цифровий підпис. Потім, використовуючи свій особистий ключ, розшифровує секретний сеансів ключ, за допомогою якого отримує з цифрового конверта документ. Таким чином, по каналу зв'язку документ проходить в конверті і його зміст недоступний стороннім.
Текст програми:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Security.Cryptography;
usingSystem.IO;
usingAced.Cryptography;
namespaceEncDecr_CAST_128
{
publicpartialclass Form1 : Form
{
public Form1()
{
InitializeComponent();
}
privateGuid _key = Guid.Empty;
int[] schKey;
byte[] MBuffer;
byte[] KBuffer;
byte[] SBuffer;
boolEncrypted = false;
privatevoidEncryptCAST()
{
//while (richTextBox1.Text.Length % 8 != 0)
//richTextBox1.Text += " ";
byte[] buffer = System.Text.Encoding.ASCII.GetBytes(richTextBox1.Text);
while (buffer.Length % 8 != 0)
Array.Resize(refbuffer, buffer.Length+1);
longiv = AcedCast5.GetOrdinaryIV(schKey);
iv = AcedCast5.EncryptCBC(schKey, buffer, 0, buffer.Length, iv);
richTextBox1.Text = System.Text.Encoding.ASCII.GetString(buffer);
MBuffer = buffer;
}
privatevoidDecryptCAST()
{
longiv = AcedCast5.GetOrdinaryIV(schKey);
iv = AcedCast5.DecryptCBC(schKey, MBuffer, 0, MBuffer.Length, iv);
richTextBox1.Text = System.Text.Encoding.ASCII.GetString(MBuffer);
}
privatevoidbutton1_Click(object sender, EventArgs e)
{
RSACryptoServiceProviderrsaOtr = newRSACryptoServiceProvider();
File.WriteAllText("publicOtr.xml", rsaOtr.ToXmlString(false));
File.WriteAllText("privateOtr.xml",rsaOtr.ToXmlString(true));
}
privatevoidbutton6_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
byteTemp = 0x00, BackTemp = 0x00;
FileStreamfromFile = newFileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
Array.Resize(refKBuffer, 128);
for (int i = 0; i < 128; i++)
KBuffer[i] = (byte)fromFile.ReadByte();
richTextBox2.Text = Encoding.ASCII.GetString(KBuffer);
Array.Resize(refSBuffer, 128);
for (int i = 0; i < 128; i++)
SBuffer[i] = (byte)fromFile.ReadByte();
richTextBox3.Text = Encoding.ASCII.GetString(SBuffer);
Array.Resize(refMBuffer, 1);
while ((Temp != 0xff) || (BackTemp != 0xff))
{
BackTemp = Temp;
Temp = (byte)fromFile.ReadByte();
MBuffer[MBuffer.Length-1] = Temp ;
Array.Resize(refMBuffer, MBuffer.Length + 1);
}
Array.Resize(refMBuffer, MBuffer.Length - 3);
fromFile.Close();
richTextBox1.Text = Encoding.ASCII.GetString(MBuffer);
}
}
privatestring SHA_1(StringFun)
{
************
}
privatevoidbutton4_Click(object sender, EventArgs e)
{
byte[] Key;
byte[] SHA1;
RSACryptoServiceProviderrsaKey = newRSACryptoServiceProvider();
rsaKey.FromXmlString(File.ReadAllText("publicOtr.xml"));
_key = Guid.NewGuid();
schKey = AcedCast5.ScheduleKey(_key.ToByteArray());
Key = _key.ToByteArray();
SHA1 = System.Text.Encoding.ASCII.GetBytes(SHA_1(richTextBox1.Text));
EncryptCAST();
KBuffer = rsaKey.Encrypt(Key, false);
SBuffer = rsaKey.Encrypt(SHA1, false);
richTextBox2.Text = Encoding.ASCII.GetString(KBuffer);
richTextBox3.Text = Encoding.ASCII.GetString(SBuffer);
Encrypted = true;
}
privatevoidbutton7_Click(object sender, EventArgs e)
{
byte[] Key;
byte[] SHA1;
string SHA2;
RSACryptoServiceProviderrsaKey = newRSACryptoServiceProvider();
rsaKey.FromXmlString(File.ReadAllText("privateOtr.xml"));
Key = KBuffer;
KBuffer = rsaKey.Decrypt(Key, false);
schKey = AcedCast5.ScheduleKey(KBuffer);
richTextBox2.Clear();
for (int i = 0; i <KBuffer.Length; i++ )
richTextBox2.Text += String.Format("{0:X}", KBuffer[i]);
SHA1 = rsaKey.Decrypt(SBuffer, false);
DecryptCAST();
richTextBox3.Text = Encoding.ASCII.GetString(SHA1);
SHA2 = SHA_1(richTextBox1.Text);
if(richTextBox3.Text==SHA2)
MessageBox.Show("Signisequal", "Attention",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
else
MessageBox.Show("Signisnotequal", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Encrypted = false;
}
privatevoid button2_Click_1(objectsender, EventArgs e)
{
if(Encrypted == true)
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
FileStreamoutFile = newFileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write);
outFile.Write(KBuffer, 0, (int)KBuffer.Length);
outFile.Write(SBuffer, 0, (int)SBuffer.Length);
outFile.Write(MBuffer, 0, (int)MBuffer.Length);
outFile.Close();
}
}
}
}
Результат виконання роботи:
Шифрування
/
Дешифрування
/
Висновок:Під час даної лабораторної роботи я реалізував програму підтримки комбінованих криптосистем на прикладі цифрового конверта.