This commit is contained in:
2026-04-02 16:40:25 +03:00
parent c373e8f5d9
commit 642e3cf0c7
17 changed files with 815 additions and 0 deletions

75
lab5/README.md Normal file
View File

@@ -0,0 +1,75 @@
# Практическая работа №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; читаемый текст отсутствует.