Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архангельский БСТ 2154 КР

.docx
Скачиваний:
2
Добавлен:
01.05.2023
Размер:
45.47 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «Московский технический университет связи и информатики» (МТУСИ)

КАФЕДРА: Информационная безопасность Дисциплина: Основы Информационной Безопасности

Контрольная работа

Выполнил: студент группы БСТ2154

Архангельский Максим Вячеславович

Москва

2023г.

Задание №1. Алгоритм шифрования ГОСТ 28147-89.

Выполните первый цикл алгоритма шифрования ГОСТ 28147 89 в режиме простой замены. Для получения 64 бит исходного текста используйте 8 первых букв из своих данных: Фамилии Имени Отчества. Для получения ключа (256 бит) используют текст, состоящий из 32 букв. Первый подключ содержит первые 4 буквы.

Исходные данные для зашифрования: АРХАНГЕЛ

Для ключа возьмем последовательность, состоящую из 4 букв имени: МАКСим

Для первого подключа Х используем первые 4 буквы ключа: МАКС

Переводим исходный текст и первый подключ в двоичную последовательность:

исходный текст

А 11000000

Р 11010000

Х 11010101

А 11000000

Н 11001101

Г 11000011

Е 11000101

Л 11001011

первый подключ X0

М 11001100

А 11000000

К 11001010

С 11010001

Таким образом, первые 64 бита определяют входную последовательность:

L0: 11000000 11010000 11010101 11000000

R0: 11001101 11000011 11000101 11001011

следующие 32 бита определяют первый подключ

X0: 11001100 11000000 11001010 11010001

I. Найдем значение функции преобразования f(R0,X0)

1) Вычисление суммы R0 и X0 по mod 232

R0: 11001101 11000011 11000101 11001011

X0: 11001100 11000000 11001010 11010001

10011010 10000100 10010000 10011100

2) Преобразование в блоке подстановки

Результат суммирования R0+X0 по mod 232

10011010 10000100 10010000 10011100

преобразуем в блоке подстановки. Для каждого 4 - битного блока вычислим его адрес в таблице подстановки.

Номера блоков:

8 7 6 5 4 3 2 1

1001 1010 1000 0100 1001 0000 1001 1100

Номера строк в таблице подстановки:

9 10 8 4 9 0 9 12

Заполнение

2 14 3 5 4 5 3 7

Результат

0010 1110 0011 0101 0100 0101 0011 0111

3) Циклический сдвиг результата п.2 на 11 бит влево

1010 1010 0010 1001 1011 1001 0111 0001

Таким образом, нашли значение функции f (R0,X0):

10101010 00101001 10111001 01110001

II. Вычисляем R1= f(R0,X0) L0.

L0: 11000000 11010000 11010101 11000000

f(R0,X0): 10101010 00101001 10111001 01110001

R1: 01101010 11111001 01101100 10110001

Задание №2. Функция хеширования.

Найти хеш–образ своей Фамилии, используя хеш–функцию Hi = (Hi-1+Mi)2 mod n, где n = pq, p, q – простые числа.

Хешируемое сообщение «АРХАНГЕЛЬСКИЙ». Возьмем два простых числа p=7, q=73. Определим n = pq = 7*73 = 511. Вектор инициализации H0 выберем равным 5 (выбираем случайным образом).

Слово «АРХАНГЕЛЬСКИЙ» можно представить последовательностью числе (1, 18, 23, 1, 15, 4, 6, 13, 30, 19, 12, 10, 11), по номерам букв в алфавите.

Таким образом, n = 511, H0 = 5, M1 = 1, M2 = 18, M3 = 23, M4 = 1, M5 = 15, M6 = 4, M7 = 6, M8 = 13, M9 = 30, M10 = 19, M11 = 12, M12 = 10, M13 = 11.

Получим хеш-образ сообщения «АРХАНГЕЛЬСКИЙ»:

H1 = (H0+M1)2 mod n = (5+1)2 mod 511 = 36 mod 511 = 36

H2 = (H1+M2)2 mod n = (36+18)2 mod 511 = 2916 mod 511 = 361

H3 = (H2+M3)2 mod n = (361+23)2 mod 511 = 147456 mod 511 = 288

H4 = (H3+M4)2 mod n = (288+1)2 mod 511 = 83521 mod 511 = 228

H5 = (H4+M5)2 mod n = (228+15)2 mod 511 = 59049 mod 511 = 284

H6 = (H5+M6)2 mod n = (284+4)2 mod 511 = 82944 mod 511 = 162

H7 = (H6+M7)2 mod n = (162+6)2 mod 511 = 28224 mod 511 = 119

H8 = (H7+M8)2 mod n = (119+13)2 mod 511 = 17424 mod 511 = 50

H9 = (H8+M9)2 mod n = (50+30)2 mod 511 = 6400 mod 511 = 268

H10 = (H9+M10)2 mod n = (268+19)2 mod 511 = 82369 mod 511 = 98

H11 = (H10+M11)2 mod n = (98+12)2 mod 511 = 12100 mod 511 = 347

H12 = (H11+M12)2 mod n = (347+10)2 mod 511 = 127449 mod 511 = 210

H13 = (H12+M13)2 mod n = (210+11)2 mod 511 = 48841 mod 511 = 296

В итоге получаем хеш-образ сообщения «АРХАНГЕЛЬСКИЙ», равный 296.

Задание №3. Простейший генератор паролей

Написать реализацию (программный код) простейшего генератора паролей, который будет соответствовать требованиям согласно варианту и должен выполнять следующие действия:

1. Ввод идентификатора пользователя с клавиатуры. Данный идентификатор представляет собой последовательность символов a1, a2, …, aN, где N – количество символов идентификатора, ai – i — символ идентификатора пользователя.

2. Согласно варианту необходимо сформировать пароль пользователя b1, b2, …, bM для данного идентификатора, где M – количество символов пароля и вывести полученный пароль на экран.

Требования согласно варианту:

Вариант

M

Перечень требований

2

6

b1, b2 — случайные заглавные буквы английского алфавита;

b3, b4 — случайные малые буквы английского алфавита;

b5, b6 — двузначное число, равное N4mod100 (если остаток — однозначное число, то b5 = 0)

Реализация программы написана на языке программирования C++.

Листинг программы:

using System;

namespace WinFormsApp1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

if (textBox1->Text != "")

{

String ^ password = "";

char upperCase[] = { '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 lowerCase[] = { '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' };

Random ^ rRandom = gcnew Random();

int num = rRandom->Next(10, 99);

double num1;

int s = Math::Pow(num, 4);

if (s % 100 >= 10)

{

num1 = (int)Math::Pow(num, 4) % 100;

}

else num1 = 0;

double num2;

num2 = (int)Math::Pow(num, 4) % 100;

for (int i = 0; i <= 1; i++)

{

password += lowerCase[rRandom->Next(0, 25)];

}

for (int i = 0; i <= 1; i++)

{

password += upperCase[rRandom->Next(0, 25)];

}

password += num1;

password += num2;

textBox2->Text = password;

}

else MessageBox::Show("Вы не ввели идентификатор", "Ошибка, введите идентификатор", MessageBoxButtons::OK);

}

}

}

Результат выполненной работы: