Код для lab2

This commit is contained in:
2026-03-03 10:21:13 +03:00
parent 07e02401eb
commit 60a4471a8c
11 changed files with 1050 additions and 0 deletions

277
lab2/lab2.md Normal file
View File

@@ -0,0 +1,277 @@
# Практическая работа №2
по дисциплине «Защита информации»
**Тема работы:** «Разработка и исследование системы аутентификации и авторизации»
**Преподаватель:** Силиненко А.В.
**Email:** [a_silinenko@mail.ru](mailto:a_silinenko@mail.ru)
---
## 1. Цели работы
* Разработать систему доступа пользователей к конфиденциальным данным;
* Исследовать стойкость паролей к атаке методом грубой силы.
---
## 2. Задачи работы
### 2.1.
При необходимости установить на компьютер целевую ОС (Linux или MacOS), в которой производится разработка и использование системы.
### 2.2.
Разработать систему доступа пользователей к конфиденциальным данным, включающую:
* Выделенный каталог для хранения всех файлов системы;
* Утилиту для работы с данными аутентификации и авторизации (паролями и правами доступа);
* Утилиту доступа к конфиденциальным данным, обеспечивающую аутентификацию и авторизацию пользователя.
### 2.3.
Разработать программу взлома паролей методом грубой силы и исследовать стойкость паролей в зависимости от длины пароля и алгоритма хэширования.
---
## 3. Требования к работе
### 3.1. ОС
Работа выполняется в ОС **Linux** или **MacOS**.
Необходим доступ с правами суперпользователя.
Если доступа нет — установить гипервизор **VirtualBox** ([https://www.virtualbox.org/](https://www.virtualbox.org/)) и развернуть гостевую ОС.
Допускается установка ОС как второй системы без VirtualBox.
---
### 3.2. Структура каталогов
Необходимо создать дерево каталогов:
```
/usr/local/practice2/
├── etc # хранение данных аутентификации и авторизации
├── confdata # хранение конфиденциальных файлов
├── bin # разработанные утилиты
└── log # файлы регистрации
```
**Права доступа:** чтение, запись и выполнение только для пользователя `root`.
---
### 3.3. Требования к утилите управления пользователями
#### Файл хранения данных
Файл:
```
/usr/local/practice2/etc/passwd
```
Структура записи:
```
<логин>:<хэш_пароля>:<идентификатор>:<права>:<ФИО>
```
Одна строка — один пользователь.
**Права на файл:** чтение и запись только для `root`.
#### Права доступа
* `r` — чтение
* `w` — запись
* `d` — удаление
#### Требования к функционалу
Утилита должна обеспечивать:
* Добавление нового пользователя:
* логин
* ФИО
* права доступа
* пароль + подтверждение
* Проверку корректности данных
* Хранение пароля в виде **хэш-значения**
* Использование алгоритма хэширования согласно индивидуальному заданию
* Редактирование существующего пользователя
* Изменение пароля
* Удаление пользователя
* Регистрацию всех действий с файлом `passwd`
#### Требования к паролю
* Кодировка: ASCII
* Разрешены:
* AZ
* az
* 09
* `!@#$%^&*()`
* Первый символ не может быть цифрой или спецсимволом
---
### 3.4. Требования к утилите доступа к конфиденциальным данным
#### Авторизация
При запуске:
1. Запрос логина
2. Запрос пароля
3. Проверка корректности
Если данные корректны:
* Вывод: `Привет, <ФИО>`
* Краткая справка
* Приглашение к вводу команд
Если данные некорректны:
* Повторный запрос
Остановка — по сигналу **SIGINT (Ctrl+C)**.
---
### Поддерживаемые команды
| Команда | Описание | Требуемые права |
| -------- | ------------------------ | --------------- |
| `read` | Вывод содержимого файла | r |
| `append` | Добавление данных в файл | w |
| `copy` | Копирование файла | r + w |
| `remove` | Удаление файла | d |
| `exit` | Выход | — |
| `help` | Справка | — |
#### Ограничения copy
* Разрешено копирование:
* в каталог `confdata`
* внутри `confdata`
* Запрещено:
* из `confdata` в другие каталоги
* перезапись существующих файлов внутри `confdata`
#### Дополнительные требования
* Утилита доступна для запуска всем пользователям ОС
* Все действия с конфиденциальными данными логируются
---
### 3.5. Программа взлома паролей
Должна:
* Запускать утилиту доступа
* Перебирать пароли методом brute force
* Учитывать используемый алгоритм хэширования
* Фиксировать:
* время перебора
* количество итераций до взлома
---
### 3.6. Общие требования
* Язык программирования — любой
* Код должен быть снабжен комментариями
---
### 3.7. Требования к исследованию
Провести исследование для длин паролей:
```
3, 4, 5, 6, 7, 8 символов
```
Необходимо:
* Рассчитать максимальное количество итераций
* По экспериментам (34 символа) оценить время для 58
* Проверить теорию экспериментально
* Прервать эксперимент, если длительность > 8 часов
* Проводить тестирование без активных задач на ПК
---
## 4. Требования к отчету
В отчете необходимо указать:
* Актуальность темы
* Цель и задачи
* Требования к системе
* Характеристики ПК (процессор, память)
* ОС и среду разработки
* Используемый язык
* Алгоритм хэширования
* Примеры сборки (если применимо)
* Примеры работы утилит
* Пример расчета количества итераций и времени взлома
* Таблицу или график с результатами:
* рассчитанное количество итераций и время
* полученные экспериментальные данные
* Выводы
---
## 5. Справочная информация
### Поддержка алгоритмов хэширования
**Linux:**
* `md5sum`
* `sha1sum`
* `sha256sum`
* `sha512sum`
* `b2sum`
* библиотека `openssl`
**C++:**
* `std::hash`
**Python:**
* модуль `hashlib`
**Java:**
* `java.security.MessageDigest`
* Spring Security
**Go:**
* пакет `hash`