Uploaded by BROSovod Пермь

Отчёт Lab 01

advertisement
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«Пермский национальный исследовательский
политехнический университет»
Факультет: Прикладной математики и механики
Кафедра: Вычислительной математики, механики и биомеханики
Направление: 09.03.02 «Информационные системы и технологии»
Профиль бакалавриата: «Информационные системы и технологии»
Лабораторная работа
по дисциплине
«Информационная безопасность»
Тема: «Анализ надежности пароля»
Выполнил студент гр. ИСТ-17-1б
Худанин С.А.
__________________________________
(Ф.И.О.)
______________
(подпись)
Принял (преподаватель по дисциплине):
доцент Труфанов А.Н.
___________________________________________________________
(должность, ФИО)
___________
(оценка)
_________________________
(подпись)
_____________
(дата)
Пермь, 2021
Содержание
Цель работы ................................................................................................... 3
Описание алгоритма ..................................................................................... 3
Анализ надежности пароля .......................................................................... 4
Приложение 1. Листинг программы. .......................................................... 5
2
Цель работы
1. Ознакомиться с основными методами криптографической защиты
информации.
2. Получить практические навыки создания программного модуля оценки
надежности выбранного пароля.
Описание алгоритма
Написанная программа предназначена для подсчёта времени,
необходимого для перебора всех возможных комбинаций пароля исходя из
мощности алфавита, длинны пароля, скорости перебора паролей в секунду (s),
количества неправильных попыток для введения режима паузы (m) и
длительности самой паузы в секундах(v).
Исходя из этого программа на входе запрашивает у пользователя пароль,
а также значения параметров m, s и v, после чего программа анализирует
введённый пользователем пароль и определяет мощность алфавита исходя из
используемых категорий символов, например:
 Если в пароле используется хотя бы одна заглавная буква английского
алфавита (A-Z), то программа добавляет к мощности алфавита 26
символов.
 Если в пароле используется хотя бы одна строчная буква английского
алфавита (a-z), то программа добавляет к мощности алфавита 26
символов.
 Если в пароле используется хотя бы одна цифра (0-9), то программа
добавляет к мощности алфавита 10 символов.
 Если в пароле используется хотя бы один символ (!, @, #, $, и т.д.), то
программа добавляет к мощности алфавита 33 символа.
Таким образом мощность алфавита может составлять от 10 до 95
символов.
После того, как программа определила мощность алфавита, она
вычисляет длину пароля – количество символов, которые входят в пароль.
На следующем этапе программа вычисляет количество возможных
комбинаций паролей с заданной мощностью алфавита и длинной пароля по
формуле M = NL, где М – число возможных комбинаций (мощность
пространства паролей), N – мощность алфавита, L – длина пароля.
После этого программа подсчитывает необходимое время в секундах для
перебора всех возможных комбинаций исходя из заданных значений m, s и v,
по формуле: 𝑇 =
𝑀
𝑠
+
𝑀
𝑚
∗ 𝑣, где Т – необходимое время, М – число возможных
3
комбинаций, s – скорость перебора паролей в секунду, m – число неверных
попыток до блокировки, v – время блокировки.
После того, как программа вычислила необходимое для перебора время
в секундах она пересчитывает его в более удобный для восприятия формат
"ЛЛ лет ММ месяцев ДД дней ЧЧ часов ММ минут СС секунд" и возвращает
в таком виде пользователю.
Анализ надежности пароля
Для определения надежности пароля была исследована зависимость
времени, необходимого на перебор комбинаций пароля, от мощности
алфавита и длинны пароля, за скорость перебора паролей была выбрана
величина 92000 – показатель моей видеокарты GTX960m, если верить
источникам в интернете, время паузы было принято за 0, результат
представлен ниже в таблице 1.
Табл. 1. Результаты исследования.
№
1
2
3
4
5
6
7
8
Мощность
алфавита
10
10
26
26
36
36
95
95
Длина
пароля
6
8
6
8
6
8
6
8
Кол-во комбинаций
Необходимое время
1 000 000
10s
100 000 000
18m/6s
308 915 776
55m/57s
208 827 064 576
26D/6h/30m/59s
2 176 782 336
6h/34m/20s
2 821 109 907 456
11M/24D/21h/50m/38s
735 091 890 625
3M/2D/11h/28m/49s
6 634 204 312 890 620 2286Y/7M/17D/2h/7m/24s
Исходя из данных, полученных в результате испытаний, можно сделать
вывод, что увеличение мощности алфавита сказывается на надежности пароля
намного лучше, чем увеличение длины пароля, но несмотря на это, каждый
дополнительный символ в длине пароля всё равно дает существенную
прибавку к надежности.
4
Приложение 1. Листинг программы.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
using
using
using
using
System;
System.Windows.Forms;
System.Text.RegularExpressions;
System.Numerics;
namespace Lab_01
{
public partial class Form1 : Form
{
public int AlphabetPower(string s)
{
int count = 0;
if (Regex.IsMatch(s, @"[A-Z]"))
count += 26;
if (Regex.IsMatch(s, @"[a-z]"))
count += 26;
if (Regex.IsMatch(s, @"[0-9]"))
count += 10;
if (Regex.IsMatch(s, @"([!,@,#,$,%,^,&,*,/,?,_,~,+,-])"))
count += 33;
return count;
}
private void Callculate()
{
int ap = AlphabetPower(textBox1.Text);
int pLength = textBox1.Text.Length;
textBox2.Text = Convert.ToString(ap);
BigInteger combinations = Convert.ToUInt64(Math.Pow(ap, pLength));
textBox3.Text = Convert.ToString(combinations);
int s = Convert.ToInt32(textBox4.Text); //Скорость перебора парелей/сек
int m = Convert.ToInt32(textBox5.Text); //Кол-во ошибок до блокировки
int v = Convert.ToInt32(textBox6.Text); //Время блокировки
BigInteger time = (combinations / Convert.ToUInt64(s) + ((combinations 1) / Convert.ToUInt64(m) * Convert.ToUInt64(v)));
BigInteger years = time / (60 * 60 * 24 * 365);
time -= years * 60 * 60 * 24 * 365;
BigInteger mounth = (time / (60 * 60 * 24 * 30));
time -= mounth * (60 * 60 * 24 * 30);
BigInteger days = time / (60 * 60 * 24);
time -= days * (60 * 60 * 24);
BigInteger hours = time / (60 * 60);
time -= hours * (60 * 60);
BigInteger minutes = time / 60;
time -= minutes * 60;
BigInteger seconds = time;
string stime = ("Y:" + Convert.ToString(years) + " M:" + Convert.ToString(m
ounth) + " D:" + Convert.ToString(days) + " H:" + Convert.ToString(hours) + " Min:" + C
onvert.ToString(minutes) + " Sec" + Convert.ToString(seconds));
52.
textBox7.Text = stime;
53.
}
54.
55.
public Form1()
56.
{
57.
InitializeComponent();
58.
}
59.
60.
private void button1_Click(object sender, EventArgs e)
61.
{
62.
Callculate();
63.
}
5
64.
65. }
}
6
Download