Last active
February 14, 2020 12:33
-
-
Save Seregamil/54ad60c4cc8debe45538808a6e708c1f to your computer and use it in GitHub Desktop.
lab1.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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