Files
cyber-security/lab5/README.md
2026-04-02 16:40:25 +03:00

76 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Практическая работа №5 — Конфиденциальный обмен сообщениями
Клиент-серверное приложение для обмена сообщениями по TCP с поддержкой
шифрования 3DES-CBC (с затравкой), контроля целостности SHA-256 и
аутентификации отправителя HMAC-SHA256.
## Установка
```bash
uv sync
```
## Ключ шифрования
Ключ хранится в текстовом файле (не менее 32 символов). Права на файл — только
чтение владельцем (`600`). Программа проверяет права при запуске и отказывается
работать, если файл доступен группе или другим пользователям.
```bash
openssl rand -hex 32 > key.txt
chmod 600 key.txt
```
## Запуск
### Сервер
```bash
uv run main.py server --port 9000 # без шифрования
uv run main.py server --port 9000 --encrypt # 3DES-CBC
uv run main.py server --port 9000 --encrypt --integrity # + SHA-256
uv run main.py server --port 9000 --encrypt --integrity --test-integrity # отправка с повреждённым хэшем
uv run main.py server --port 9000 --encrypt --hmac # 3DES + HMAC-SHA256
uv run main.py server --port 9000 --hmac # только HMAC (без шифрования)
uv run main.py server --port 9000 --key /path/to/key.txt --encrypt # другой файл ключа
```
### Клиент
```bash
uv run main.py client 127.0.0.1 9000
uv run main.py client 127.0.0.1 9000 --encrypt
uv run main.py client 127.0.0.1 9000 --encrypt --integrity
uv run main.py client 127.0.0.1 9000 --encrypt --integrity --test-integrity
uv run main.py client 127.0.0.1 9000 --encrypt --hmac
uv run main.py client 127.0.0.1 9000 --encrypt --hmac --test-integrity
```
## Режимы работы
| Флаг | Описание |
|------|----------|
| *(без флагов)* | Открытый текст, без проверки целостности |
| `--encrypt` | Шифрование 3DES-CBC с затравкой (соль + IV генерируются случайно для каждого сообщения) |
| `--integrity` | Контроль целостности — к сообщению прикладывается SHA-256 хэш открытого текста |
| `--hmac` | HMAC-SHA256 — контроль целостности + аутентификация отправителя (требует ключ, несовместим с `--integrity`) |
| `--test-integrity` | Режим тестирования: отправляется заведомо некорректный хэш/HMAC (требует `--integrity` или `--hmac`) |
## Анализ трафика с помощью tcpdump
Для наблюдения за передаваемыми данными удобно использовать `tcpdump`.
При работе на одной машине (loopback):
```bash
sudo tcpdump -i lo -X -n tcp port 9000
```
При работе по сети (замените `eth0` на имя сетевого интерфейса):
```bash
sudo tcpdump -i eth0 -X -n tcp port 9000
```
- **Без шифрования** — в дампе видны сообщения открытым текстом (JSON с полем `"data": "текст сообщения"`).
- **С шифрованием** — в дампе видны только шифротекст, соль и IV в hex; читаемый текст отсутствует.