Skip to content

Instantly share code, notes, and snippets.

@Seregamil
Last active February 14, 2020 12:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Seregamil/54ad60c4cc8debe45538808a6e708c1f to your computer and use it in GitHub Desktop.
Save Seregamil/54ad60c4cc8debe45538808a6e708c1f to your computer and use it in GitHub Desktop.
lab1.cs
using System;
/*
Пароли
arch1-3s - cat
4s - byte
5s - ?
total passwords: 901356496
mask: a-zA-Z0-9
7s - computer
8s - ?
A — мощность алфавита паролей, т. е. то множество знаков, которое может применяться при вводе пароля.
L — длина пароля (в знаках). Может изменяться для обеспечения заданной стойкости парольной системы.
S — мощность пространства паролей, т. е. множество всех возможных паролей в системе.
Мощность пространства паролей связана с мощностью алфавита паролей и длиной паролей следующим выражением:
S=A^L (1)
L = logAS
Вероятность подбора пароля можно определить следующим образом:
P = (V*T)/S (2)
где:
V — скорость подбора пароля (соответственно различают скорость подбора пароля для интерактивного (1-2 паролей / минуту) и неинтерактивного (10 и более паролей / секунду) подбора паролей).
T — срок действия (жизни) пароля (обычно задается в днях).
P — вероятность подбора пароля в течение срока его действия. */
namespace _1
{
class Program
{
static void Main(string[] args)
{
/*
1. Определить время перебора всех словарных паролей (объем словаря равен 1 000 000 слов), если скорость перебора составляет 100 паролей/сек.
*/
var S1 = Math.Pow(10, 6);
var V1 = 100;
var t1 = S1 / V1;
Console.WriteLine($"1. Время перебора всех словарных паролей: {TimeSpan.FromSeconds(t1)}");
/*
2. Определить время перебора всех паролей со следующими параметрами:
- алфавит состоит из A символов;
- длина пароля символов L;
- скорость перебора V паролей в секунду.
После каждого из m неправильно введенных паролей идет пауза в v секунд:
*/
Console.WriteLine("\n2\n");
var A2 = new int[5] { 33, 59, 250, 66, 500 };
var L2 = new int[5] { 10, 5, 8, 7, 5 };
var V2 = new int[5] { 100, 200, 600, 20, 1000 };
var m2 = new int[5] { 0, 5, 10, 3, 10 };
var v2 = new int[5] { 0, 3, 5, 20, 10 };
for(var i = 0; i != A2.Length; i ++) {
var S2 = Math.Pow(A2[i], L2[i]); // total variations
var t2 = (S2 / V2[i]); // in sec
var t2WithPause = (S2 * v2[i]) / m2[i]; // in sec
var result = (i == 0) ? t2 : (t2 + t2WithPause);
var time = getDate(result);
Console.WriteLine($"Вариант #{i + 1}: D: {time.d:0} M: {time.m:0} Y: {time.y:0}");
}
Console.WriteLine("\n3\n");
/*
3. Определить минимальную длину пароля,
алфавит которого состоит из A символов,
время перебора которого было не меньше T лет.
Скорость перебора V паролей в секунду.
*/
var A3 = new int[3] { 66, 33, 128 };
var T3 = new int[3] { 70, 100, 100 };
var V3 = new int[3] { 20, 100, 500 };
for( int i = 0 ; i != A3.Length; i++) {
var S3 = T3[i] * V3[i];
var L3 = Math.Log(S3, A3[i]);
Console.WriteLine($"Вариант #{i + 1}: Длина пароля не менее {L3:0} символов");
}
Console.WriteLine("\n4\n");
/*4. Определить количество символов алфавита,
пароль состоит из L символов,
время перебора которого было не меньше T лет.
Скорость перебора V паролей в секунду. */
var L4 = new int[3] { 5, 10, 8 };
var T4 = new int[3] { 100, 60, 80 };
var V4 = new int[3] { 13, 30, 600 };
for( int i = 0 ; i != L4.Length; i++) {
var S4 = T4[i] * V4[i];
//var sq = doub
var A4 = Math.Pow(S4, (1d / L4[i]));
Console.WriteLine($"Вариант #{i + 1}: Количество символов алфавита {A4:0}");
}
Console.WriteLine("\n5\n");
/*
5. Построить зависимость времени подбора пароля от длины пароля для некоторой ОС,
полагая следующие допущения:
а) Система эксплуатируется в США
-> A-Za-z0-9 -> 26 * 2 * 10 символов
A = 520
б) После 5 неудачных попыток следующий пароль возможно ввести только
через 30 секунд
-> m = 5
-> v = 30
в) Подбор паролей осуществляется интерактивно
-> ?? login + pass
г) Администратор ОС просматривает системные журналы и
уведомления 1 раз за 6 месяцев
-> T = 0.5
д) Пользователям не предлагается принудительная смена пароля
через определенный промежуток времени
-> ????
*/
var A5 = 520d;
var m5 = 5d;
var v5 = 30d;
var T5 = 0.5;
var S5 = 1000000; // default
var V5 = 100;
//var S2 = Math.Pow(A2[i], L2[i]); // total variations
var L5 = Math.Log(S5, A5);
var t5 = (S5 / V5); // in sec
var t5WithPause = (S5 * v5) / m5; // in sec
var result5 = t5 + t5WithPause;
var time5 = getDate(result5);
Console.WriteLine($"Время, необходимое на взлом: {time5.y:0}год");
// TODO: график
}
public static (double d, double m, double y) getDate(double date) {
double d = date % 100;
double m = (date / 100) % 100;
double y = date / 10000;
return (d, m, y);
}
}
}
/*
1. Время перебора всех словарных паролей: 02:46:40
2
Вариант #1: D: 44 M: 26 Y: 1531578985
Вариант #2: D: 1 M: 92 Y: 43253
Вариант #3: D: 60 M: 64 Y: 765482584635417
Вариант #4: D: 93 M: 21 Y: 3664049604
Вариант #5: D: 0 M: 0 Y: 3128125000
3
Вариант #1: Длина пароля не менее 2 символов
Вариант #2: Длина пароля не менее 3 символов
Вариант #3: Длина пароля не менее 2 символов
4
Вариант #1: Количество символов алфавита 4
Вариант #2: Количество символов алфавита 2
Вариант #3: Количество символов алфавита 4
5
Время, необходимое на взлом: 601год
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment