OIB6
.docxФедеральное агентство связи
Ордена Трудового Красного Знамени федеральное государственное
бюджетное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Математической кибернетики и информационных технологий»
Лабораторная работа №6
“Количественная оценка стойкости парольной защиты”
Выполнили
Проверила:
Магомедова Д. И.
Москва, 2020 г.
Оглавление
1. Цель работы: 2
2. Ход работы: 2
4.Код программы 3
5.Результат работы программы 6
1. Цель работы:
Получение основных теоретических сведений и практических навыков по оценке стойкости парольной защиты.
2. Ход работы:
1. Ознакомиться с теоретической частью данной работы.
2. Реализовать простейший генератор паролей, обладающий требуемой стойкостью к взлому.
3. Составить отчет по проделанной работе.
4. Защитить работу.
3. Постановка задачи:
Вычислить по формуле нижнюю границу S* для заданных P, V, T.
Выбрать некоторый алфавит с мощностью A и получить минимальную длину пароля L, при котором выполняется условие (3)
Реализовать программу-генератор паролей пользователей. Программа должна формировать случайную последовательность символов длины L, при этом должен использоваться алфавит из A символов.
Таблица 1 - Задание варианта №17 к лабораторной работе № 6.
Номер варианта |
P |
V |
T |
17 |
10^(-4) |
10 паролей / мин. |
3 недели |
4.Код программы
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
A = 0;
double p=SomeProjectDLL::Class1::Vvod(textBox1);
double v= SomeProjectDLL::Class1::Vvod(textBox2);
double t= SomeProjectDLL::Class1::Vvod(textBox3);
double sZvezd = ceil((v*t)/p);
t = t * 7 * 24 * 60;
double s = (v * t) / p;
//char latUpperCase[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
string latUpperCase[] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
int countLat = 26;
int countRus = 33;
//char latLowerCase[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
string latLowerCase[] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
//char rusLowerCase[] = { 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' };
string rusLowerCase[] = { "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я" };
//char rusUpperCase[] = { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я' };
string rusUpperCase[] = { "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я" };
string cifr[] = { "0","1","2","3","4","5","6","7","8","9" };
int countCifr = 10;
string simvol[] = { "!","#","$","%","^","&","*" };
int countSimvl = 7;
if (checkBox1->Checked == true) {
A += countLat;
}
if (checkBox2->Checked == true) {
A += countLat;
}
if (checkBox3->Checked == true) {
A += countRus;
}
if (checkBox4->Checked == true) {
A += countRus;
}
if (checkBox5->Checked == true) {
A += countSimvl;
}
if (checkBox6->Checked == true) {
A += countCifr;
}
label9->Text = A.ToString();
label6->Text = sZvezd.ToString();
int L = log(sZvezd)/ log(A) ;
label10->Text = L.ToString();
string password = "";
int i = 0;
Random^ r = gcnew Random();
int buf;
while (i!=L)
{
if (checkBox1->Checked == true) {
if (i == L) {
break;
}
buf= r->Next(countLat);
password += latUpperCase[buf];
i++;
}
if (checkBox2->Checked == true) {
if (i == L) {
break;
}
buf = r->Next(countLat);
password += latLowerCase[buf];
i++;
}
if (checkBox3->Checked == true) {
if (i == L) {
break;
}
buf = r->Next(countRus);
password += rusLowerCase[buf];
i++;
}
if (checkBox4->Checked == true) {
if (i == L) {
break;
}
buf = r->Next(countRus);
password += rusUpperCase[buf];
i++;
}
if (checkBox5->Checked == true) {
if (i == L) {
break;
}
buf = r->Next(countSimvl);
password += simvol[buf];
i++;
}
if (checkBox6->Checked == true) {
if (i == L) {
break;
}
buf = r->Next(countCifr);
password += cifr[buf];
i++;
}
}
System::String^ myString = marshal_as<String^>(password);
textBox4->Text = myString;
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
A = 0;
checkBox1->Checked = false;
checkBox2->Checked = false;
checkBox3->Checked = false;
checkBox4->Checked = false;
checkBox5->Checked = false;
checkBox6->Checked = false;
}
};
}
5.Результат работы программы
На рисунке 1 показана реализация программы по генерированию паролей с заданными требованиями. Входными параметрами являются:
— вероятность подбора пароля злоумышленником;
— скорость перебора паролей;
— срок действия пароля;
— используемый алфавит.
Рисунок 1 – Результат работы программы
На выходе получаем сгенерированный пароль, обладающий требуемой стойкостью к взлому.